ZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC9pbmRleC5yc3QgYi9wbGF0Zm9ybS9leHQvaW5kZXgucnN0CmluZGV4IGQxY2U0ZWYuLjM0OTY5YjMgMTAwNjQ0Ci0tLSBhL3BsYXRmb3JtL2V4dC9pbmRleC5yc3QKKysrIGIvcGxhdGZvcm0vZXh0L2luZGV4LnJzdApAQCAtNDUsNiArNDUsMTMgQEAKIAogICAgIHRhcmdldC9ub3JkaWNfbnJmLyoqCiAKKy4uIHRvY3RyZWU6OgorICAgIDptYXhkZXB0aDogNAorICAgIDpjYXB0aW9uOiBOdXZvdG9uCisgICAgOmdsb2I6CisKKyAgICB0YXJnZXQvbnV2b3Rvbi8qKgorCiAtLS0tLS0tLS0tLS0tLQogCiAqQ29weXJpZ2h0IChjKSAyMDIwLCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvQ01ha2VMaXN0cy50eHQgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlMWQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE3NiBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29weXJpZ2h0IChjKSAyMDIwLCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbWFrZV9wb2xpY3koU0VUIENNUDAwNzYgTkVXKQorc2V0KENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUiAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9KQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PSBQbGF0Zm9ybSByZWdpb24gZGVmcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IwordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMocGxhdGZvcm1fcmVnaW9uX2RlZnMKKyAgICBJTlRFUkZBQ0UKKyAgICAgICAgcGFydGl0aW9uCispCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09IFBsYXRmb3JtIGNvbW1vbiBkZWZzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCisKKyMgU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgcGxhdGZvcm0gc3BlY2lmaWMgYnVpbGQgZGVwZW5kZW5jaWVzLgordGFyZ2V0X3NvdXJjZXModGZtX3MKKyAgICBQUklWQVRFCisgICAgJDwkPENfQ09NUElMRVJfSUQ6QVJNQ2xhbmc+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfcy5zPgorICAgICQ8JDxDX0NPTVBJTEVSX0lEOkdOVT46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvZ2NjL3N0YXJ0dXBfY21zZGtfbTIzNTFfcy5TPgorICAgICQ8JDxDX0NPTVBJTEVSX0lEOklBUj46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfcy5zPgorKQordGFyZ2V0X2FkZF9zY2F0dGVyX2ZpbGUodGZtX3MKKyAgICAkPCQ8Q19DT01QSUxFUl9JRDpBUk1DbGFuZz46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvYXJtY2xhbmcvbTIzNTFfcy5zY3Q+CisgICAgJDwkPENfQ09NUElMRVJfSUQ6R05VPjoke0NNQUtFX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZC9wbGF0Zm9ybS9leHQvY29tbW9uL2djYy90Zm1fY29tbW9uX3MubGQ+CisgICAgJDwkPENfQ09NUElMRVJfSUQ6SUFSPjoke0NNQUtFX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZC9wbGF0Zm9ybS9leHQvY29tbW9uL2lhci90Zm1fY29tbW9uX3MuaWNmPgorKQorCitpZihOUykKKyAgICB0YXJnZXRfc291cmNlcyh0Zm1fbnMKKyAgICAgICAgUFJJVkFURQorICAgICAgICAgICAgJDwkPENfQ09NUElMRVJfSUQ6QVJNQ2xhbmc+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfbnMucz4KKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkdOVT46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvZ2NjL3N0YXJ0dXBfY21zZGtfbTIzNTFfbnMuUz4KKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOklBUj46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfbnMucz4KKyAgICApCisgICAgdGFyZ2V0X2FkZF9zY2F0dGVyX2ZpbGUodGZtX25zCisgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkFSTUNsYW5nPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9tMjM1MV9ucy5zY3Q+CisgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkdOVT46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2RldmljZS9zb3VyY2UvZ2NjL20yMzUxX25zLmxkPgorICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpJQVI+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2lhci9tMjM1MV9ucy5pY2Y+CisgICAgKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyh0Zm1fbnMKKyAgICAgICAgUFJJVkFURQorICAgICAgICAgICAgJDwkPENfQ09NUElMRVJfSUQ6QVJNQ2xhbmc+OiR7Q01TSVNfNV9QQVRIfS9SVE9TMi9SVFgvTGlicmFyeS9BUk0vUlRYX1Y4TUJOLmxpYj4KKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkdOVT46JHtDTVNJU181X1BBVEh9L1JUT1MyL1JUWC9MaWJyYXJ5L0dDQy9saWJSVFhfVjhNQk4uYT4KKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOklBUj46JHtDTVNJU181X1BBVEh9L1JUT1MyL1JUWC9MaWJyYXJ5L0lBUi9SVFhfVjhNQk4uYT4KKyAgICAgICAgICAgICMgVGhlc2UgbGlicmFyaWVzIHJlcXVpcmUgbGlua2luZyB0byB0aGUgdmVuZWVycywgc28gdGhlIHZlbmVlcnMgYXJlCisgICAgICAgICAgICAjIG1hcmtlZCBhZ2FpbiBoZXJlIGFzIGEgbGluayBkZXBlbmRlbmN5IHRvIGdldCB0aGUgb3JkZXJpbmcgcmlnaHQKKyAgICAgICAgICAgIHRmbV9zX3ZlbmVlcnMKKyAgICApCitlbmRpZigpCisKK2lmKEJMMikKKyAgICB0YXJnZXRfc291cmNlcyhibDIKKyAgICAgICAgUFJJVkFURQorICAgICAgICAgICAgJDwkPENfQ09NUElMRVJfSUQ6QVJNQ2xhbmc+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLnM+CisgICAgICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpHTlU+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX2JsMi5TPgorICAgICAgICAgICAgJDwkPENfQ09NUElMRVJfSUQ6SUFSPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9pYXIvc3RhcnR1cF9jbXNka19tMjM1MV9ibDIucz4KKyAgICApCisKKyAgICB0YXJnZXRfYWRkX3NjYXR0ZXJfZmlsZShibDIKKyAgICAgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkFSTUNsYW5nPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9tMjM1MV9ibDIuc2N0PgorICAgICAgICAgICAgJDwkPENfQ09NUElMRVJfSUQ6R05VPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9nY2MvbTIzNTFfYmwyLmxkPgorICAgICAgICAgICAgJDwkPENfQ09NUElMRVJfSUQ6SUFSPjoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGV2aWNlL3NvdXJjZS9pYXIvbTIzNTFfYmwyLmljZj4KKyAgICApCitlbmRpZigpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09IFBsYXRmb3JtIFNlY3VyZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCisKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHBsYXRmb3JtX3MKKyAgICBQVUJMSUMKKyAgICAgICAgLgorICAgICAgICBjbXNpc19kcml2ZXJzL2NvbmZpZworICAgICAgICBuYXRpdmVfZHJpdmVycworICAgICAgICBwYXJ0aXRpb24KKyAgICAgICAgZGV2aWNlL2luY2x1ZGUKKyAgICAgICAgZGV2aWNlL2NvbmZpZworICAgICAgICBic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZQorICAgICAgICBic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jCisgICAgICAgICR7UExBVEZPUk1fRElSfS9leHQvY21zaXMKKyAgICAgICAgJHtQTEFURk9STV9ESVJ9L2V4dC9kcml2ZXIKKykKKwordGFyZ2V0X3NvdXJjZXMocGxhdGZvcm1fcworICAgIFBSSVZBVEUKKyAgICAgICAgZGV2aWNlL3NvdXJjZS9zeXN0ZW1fY29yZV9pbml0LmMKKyAgICAgICAgZGV2aWNlL3NvdXJjZS9kZXZpY2VfZGVmaW5pdGlvbi5jCisgICAgICAgIGNtc2lzX2RyaXZlcnMvRHJpdmVyX0ZsYXNoLmMKKyAgICAgICAgY21zaXNfZHJpdmVycy9Ecml2ZXJfVVNBUlQuYworICAgICAgICBuYXRpdmVfZHJpdmVycy91YXJ0X2Ntc2RrX2Rydi5jCisgICAgICAgIG5hdGl2ZV9kcml2ZXJzL21wdV9hcm12OG1fZHJ2LmMKKyAgICAgICAgbmF0aXZlX2RyaXZlcnMvdGltZXJfY21zZGtfZHJ2LmMKKyAgICAgICAgYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy90aW1lci5jCisgICAgICAgIGJzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZm1jLmMKKyAgICAgICAgc2VydmljZXMvc3JjL3RmbV9wbGF0Zm9ybV9zeXN0ZW0uYworICAgICAgICB0YXJnZXRfY2ZnLmMKKyAgICAgICAgc3BtX2hhbC5jCisgICAgICAgIGJvb3RfaGFsLmMKKyAgICAgICAgJHtQTEFURk9STV9ESVJ9L2V4dC9jb21tb24vdWFydF9zdGRvdXQuYworICAgICAgICAke1BMQVRGT1JNX0RJUn0vZXh0L2NvbW1vbi90ZW1wbGF0ZS9hdHRlc3RfaGFsLmMKKyAgICAgICAgJHtQTEFURk9STV9ESVJ9L2V4dC9jb21tb24vdGZtX3BsYXRmb3JtLmMKKyAgICAgICAgJHtQTEFURk9STV9ESVJ9L2V4dC9jb21tb24vdGVtcGxhdGUvdGZtX2luaXRpYWxfYXR0ZXN0YXRpb25fa2V5X21hdGVyaWFsLmMKKyAgICAgICAgJHtQTEFURk9STV9ESVJ9L2V4dC9jb21tb24vdGVtcGxhdGUvdGZtX3JvdHBrLmMKKyAgICAgICAgJHtQTEFURk9STV9ESVJ9L2V4dC9jb21tb24vdGVtcGxhdGUvY3J5cHRvX2tleXMuYworICAgICAgICAke1BMQVRGT1JNX0RJUn0vZXh0L2NvbW1vbi90ZW1wbGF0ZS9udl9jb3VudGVycy5jCisgICAgICAgICQ8JDxCT09MOlRGTV9QQVJUSVRJT05fUExBVEZPUk0+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wbGF0X3Rlc3QuYz4KKyAgICAgICAgJDwkPEJPT0w6VEZNX1BBUlRJVElPTl9QTEFURk9STT46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NlcnZpY2VzL3NyYy90Zm1fcGxhdGZvcm1fc3lzdGVtLmM+CispCisKK3RhcmdldF9jb21waWxlX29wdGlvbnMocGxhdGZvcm1fcworICAgIFBVQkxJQworICAgICAgICAke0NPTVBJTEVSX0NNU0VfRkxBR30KKykKKwordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMocGxhdGZvcm1fcworICAgIFBVQkxJQworICAgICAgICAkPCQ8Q19DT01QSUxFUl9JRDpHTlU+Ol9fU1RBUlRVUF9DTEVBUl9CU1NfTVVMVElQTEU+CisgICAgICAgICQ8JDxDX0NPTVBJTEVSX0lEOkdOVT46X19TVEFSVFVQX0NPUFlfTVVMVElQTEU+CispCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09IFBsYXRmb3JtIE5vbi1TZWN1cmUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCisKK3RhcmdldF9zb3VyY2VzKHBsYXRmb3JtX25zCisgICAgUFJJVkFURQorICAgICAgICBuYXRpdmVfZHJpdmVycy91YXJ0X2Ntc2RrX2Rydi5jCisgICAgICAgIGNtc2lzX2RyaXZlcnMvRHJpdmVyX1VTQVJULmMKKyAgICAgICAgZGV2aWNlL3NvdXJjZS9kZXZpY2VfZGVmaW5pdGlvbi5jCisgICAgICAgIGRldmljZS9zb3VyY2Uvc3lzdGVtX2NvcmVfaW5pdC5jCispCisKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHBsYXRmb3JtX25zCisgICAgUFVCTElDCisgICAgICAgIC4KKyAgICAgICAgJHtQTEFURk9STV9ESVJ9Ly4uCisgICAgICAgIGRldmljZS9jb25maWcKKyAgICAgICAgZGV2aWNlL2luY2x1ZGUKKyAgICAgICAgbmF0aXZlX2RyaXZlcnMKKyAgICAgICAgYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUKKyAgICAgICAgYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYworICAgICAgICBjbXNpc19kcml2ZXJzL2NvbmZpZworKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PSBQbGF0Zm9ybSBCTDIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworCitpZihCTDIpCisgICAgdGFyZ2V0X3NvdXJjZXMocGxhdGZvcm1fYmwyCisgICAgICAgIFBSSVZBVEUKKyAgICAgICAgICAgIGJvb3RfaGFsLmMKKyAgICAgICAgICAgIGRldmljZS9zb3VyY2UvZGV2aWNlX2RlZmluaXRpb24uYworICAgICAgICAgICAgZGV2aWNlL3NvdXJjZS9zeXN0ZW1fY29yZV9pbml0LmMKKyAgICAgICAgICAgIGNtc2lzX2RyaXZlcnMvRHJpdmVyX0ZsYXNoLmMKKyAgICAgICAgICAgIG5hdGl2ZV9kcml2ZXJzL3VhcnRfY21zZGtfZHJ2LmMKKyAgICAgICAgICAgIGNtc2lzX2RyaXZlcnMvRHJpdmVyX1VTQVJULmMKKyAgICAgICAgICAgIGJzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZm1jLmMKKyAgICApCisgICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMocGxhdGZvcm1fYmwyCisgICAgICAgIFBVQkxJQworICAgICAgICAgICAgcGFydGl0aW9uCisgICAgICAgICAgICBic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZQorICAgICAgICAgICAgYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYworICAgICAgICAgICAgZGV2aWNlL2luY2x1ZGUKKyAgICAgICAgICAgIGRldmljZS9jb25maWcKKyAgICAgICAgICAgIGNtc2lzX2RyaXZlcnMvY29uZmlnCisgICAgICAgIFBSSVZBVEUKKyAgICAgICAgICAgIC4KKyAgICAgICAgICAgICR7UExBVEZPUk1fRElSfS8uLgorICAgICAgICAgICAgbmF0aXZlX2RyaXZlcnMKKyAgICApCisgICAgdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhwbGF0Zm9ybV9ibDIKKyAgICAgICAgUFVCTElDCisgICAgICAgICAgICAke0NPTVBJTEVSX0NNU0VfRkxBR30KKyAgICApCitlbmRpZigpCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvUkVBRE1FLnJzdCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9SRUFETUUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTUyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvUkVBRE1FLnJzdApAQCAtMCwwICsxLDQ3IEBACitOdU1ha2VyLVBGTS1NMjM1MQorPT09PT09PT09PT09PT09PT09CisKK0J1aWxkaW5nIFRGLU0KKy0tLS0tLS0tLS0tLS0KKworQnVpbGQgVEYtTSB3aXRoIE0yMzUxIGJ5IGZvbGxvd2luZyBjb21tYW5kczoKKworLi4gY29kZTo6IGJhc2gKKworICAgICQgbWtkaXIgYnVpbGQKKyAgICAkIGNkIGJ1aWxkCisgICAgJCBjbWFrZSAuLi8gXAorICAgICAgICAgICAgLUciVW5peCBNYWtlZmlsZXMiIFwKKyAgICAgICAgICAgIC1EVEZNX1BMQVRGT1JNPW51dm90b24vbTIzNTEgXAorICAgICAgICAgICAgLURDTUFLRV9UT09MQ0hBSU5fRklMRT0uLi90b29sY2hhaW5fR05VQVJNLmNtYWtlIFwKKyAgICAgICAgICAgIC1EVEVTVF9OUz1PTiBcCisgICAgICAgICAgICAtRENNQUtFX0JVSUxEX1RZUEU9UmVsV2l0aERlYkluZm8gXAorICAgICAgICAgICAgLURNQ1VCT09UX0lNQUdFX05VTUJFUj0xCisgICAgJCBtYWtlIGluc3RhbGwKKworRGVmaW5lIFRFU1RfTlM9T04gb3IgVEVTVF9TPU9OIGZvciBub24tc2VjdXJlIG9yIHNlY3VyZSByZWdyZXNzaW9uIHRlc3QuCitDTUFLRV9CVUlMRF9UWVBFIGNvdWxkIGJlICJSZWxlYXNlIiwgIlJlbFdpdGhEZWJJbmZvIiBvciAiTWluc2l6ZXJlbCIKK1RGTV9QU0FfQVBJPU9OIGFuZCBURk1fSVNPTEFUSU9OX0xFVkVMPTIgY2FuIGFsc28gYmUgc2V0IGJ1dCB0aGVtIGNhbm5vdCBiZSBkZWZpbmVkIHdpdGgKK1RFU1RfUz1PTiBvciBURVNUX05TPU9OIGF0IHRoZSBzYW1lIHRpbWUgZHVlIHRvIGxpbWl0ZWQgUkFNIHNpemUgb2YgTTIzNTEuCitPdGhlciBjbWFrZSBwYXJhbWV0ZXJzIHNob3VsZCBub3QgYmUgY2hhbmdlZC4KKworRmxhc2hpbmcgSW1hZ2Ugd2l0aCBOdXZvdG9uIE51TGluayBUb29sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTnVNYWtlci1QRk0tTTIzNTEgYm9hcmQgc3VwcG9ydHMgb24gYm9hcmQgSUNFIGNhbGxlZCBOdUxpbmsuCitDb25uZWN0IE51TGluayB0byBQQyB3aXRoIFVTQiBjYWJsZSBhbmQgdXNpbmcgYE51TGluayBDb21tYW5kIFRvb2wgPGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuTnV2b3Rvbi9OdXZvdG9uX1Rvb2xzPmBfXwordG8gZmxhc2hpbmcgdGhlIGltYWdlLgorCitUaGUgY29tbWFuZHMgYXJlIGFzIGZvbGxvd3M6CisKKy4uIGNvZGU6OiBkb3Njb24KKworICAgID4gTnVMaW5rX00yMzUxX00yNjEgLUMKKyAgICA+IE51TGlua19NMjM1MV9NMjYxIC1FIEFMTAorICAgID4gTnVMaW5rX00yMzUxX00yNjEgLVcgQVBST00gLi9idWlsZC9iaW4vYmwyLmJpbiAwCisgICAgPiBOdUxpbmtfTTIzNTFfTTI2MSAtVyBBUFJPTSAuL2J1aWxkL2Jpbi90Zm1fc19uc19zaWduZWQuYmluIDAgMHgxMDAwMAorICAgID4gTnVMaW5rX00yMzUxX00yNjEgLVcgTlNDQkEgMHg0MDAwMAorCistLS0tLS0tLS0tLS0tLQorCisqQ29weXJpZ2h0IChjKSAyMDIwLCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYm9vdF9oYWwuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ib290X2hhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYjFmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYm9vdF9oYWwuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjAsIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKi8KKworI2luY2x1ZGUgImNtc2lzLmgiCisjaW5jbHVkZSAicmVnaW9uLmgiCisKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIEVSX0RBVEEsICQkQmFzZSlbXTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIEFSTV9MSUJfSEVBUCwgJCRaSSQkTGltaXQpW107CisKK19fYXR0cmlidXRlX18oKG5ha2VkKSkgdm9pZCBib290X2NsZWFyX2JsMl9yYW1fYXJlYSh2b2lkKQoreworICAgIF9fQVNNIHZvbGF0aWxlKAorI2lmbmRlZiBfX0lDQ0FSTV9fCisgICAgICAgICIuc3ludGF4IHVuaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorI2VuZGlmCisgICAgICAgICJtb3ZzICAgIHIwLCAjMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAic3VicyAgICAlMSwgJTEsICUwICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIkxvb3A6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWJzICAgICUxLCAjNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiYmx0ICAgICBDbGVhcl9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInN0ciAgICAgcjAsIFslMCwgJTFdICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJiICAgICAgIExvb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiQ2xlYXJfZG9uZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgImJ4ICAgICAgbHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgIDoKKyAgICAgICAgOiAiciIgKFJFR0lPTl9OQU1FKEltYWdlJCQsIEVSX0RBVEEsICQkQmFzZSkpLAorICAgICAgICAgICJyIiAoUkVHSU9OX05BTUUoSW1hZ2UkJCwgQVJNX0xJQl9IRUFQLCAkJFpJJCRMaW1pdCkpCisgICAgICAgIDogInIwIiwgIm1lbW9yeSIKKyAgICApOworfQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL00yMzUxLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvTTIzNTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGM3MzU3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL00yMzUxLmgKQEAgLTAsMCArMSwxMDA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgTTIzNTEuaAorICogQHZlcnNpb24gIFYxLjEKKyAqIEBicmllZiAgICBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgIFxtYWlucGFnZSBJbnRyb2R1Y3Rpb24KKyAgKgorICAqCisgICogVGhpcyB1c2VyIG1hbnVhbCBkZXNjcmliZXMgdGhlIHVzYWdlIG9mIE0yMzUxIGRldmljZSBkcml2ZXIKKyAgKgorICAqIDxiPkRpc2NsYWltZXI8L2I+CisgICoKKyAgKiBUaGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICJBUyBJUyIsIHdpdGhvdXQgd2FycmFudHkgYXMgdG8gcGVyZm9ybWFuY2Ugb3IgcmVzdWx0cywgYW5kCisgICogdGhlIGVudGlyZSByaXNrIGFzIHRvIHBlcmZvcm1hbmNlIG9yIHJlc3VsdHMgaXMgYXNzdW1lZCBieSBZT1UuIE51dm90b24gZGlzY2xhaW1zIGFsbAorICAqIHdhcnJhbnRpZXMsIGV4cHJlc3MsIGltcGxpZWQgb3Igb3RoZXJ3aXNlLCB3aXRoIHJlZ2FyZCB0byB0aGUgU29mdHdhcmUsIGl0cyB1c2UsIG9yCisgICogb3BlcmF0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBhbmQgYWxsIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzCisgICogZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhbmQgbm9uLWluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLgorICAqCisgICovCisKKworI2lmbmRlZiBfX00yMzUxX0hfXworI2RlZmluZSBfX00yMzUxX0hfXworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgdnU4OwordHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgICB2dTMyOwordHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB2dTE2OworI2RlZmluZSBNOChhZHIpICAoKigodnU4ICAqKSAoYWRyKSkpCisjZGVmaW5lIE0xNihhZHIpICgqKCh2dTE2ICopIChhZHIpKSkKKyNkZWZpbmUgTTMyKGFkcikgKCooKHZ1MzIgKikgKGFkcikpKQorCisjZGVmaW5lIG91dHB3KHBvcnQsdmFsdWUpICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShwb3J0KSk9KHZhbHVlKSkKKyNkZWZpbmUgaW5wdyhwb3J0KSAgICAgICAgICAoKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShwb3J0KSkpKQorI2RlZmluZSBvdXRwYihwb3J0LHZhbHVlKSAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHBvcnQpKT0odmFsdWUpKQorI2RlZmluZSBpbnBiKHBvcnQpICAgICAgICAgICgoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwb3J0KSkpKQorI2RlZmluZSBvdXRwcyhwb3J0LHZhbHVlKSAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShwb3J0KSk9KHZhbHVlKSkKKyNkZWZpbmUgaW5wcyhwb3J0KSAgICAgICAgICAoKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHBvcnQpKSkpCisKKyNkZWZpbmUgb3V0cDMyKHBvcnQsdmFsdWUpICAoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHBvcnQpKT0odmFsdWUpKQorI2RlZmluZSBpbnAzMihwb3J0KSAgICAgICAgICgoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHBvcnQpKSkpCisjZGVmaW5lIG91dHA4KHBvcnQsdmFsdWUpICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocG9ydCkpPSh2YWx1ZSkpCisjZGVmaW5lIGlucDgocG9ydCkgICAgICAgICAgKCgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHBvcnQpKSkpCisjZGVmaW5lIG91dHAxNihwb3J0LHZhbHVlKSAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHBvcnQpKT0odmFsdWUpKQorI2RlZmluZSBpbnAxNihwb3J0KSAgICAgICAgICgoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikocG9ydCkpKSkKKworCisjZGVmaW5lIEVfU1VDQ0VTUyAgIDAKKworI2RlZmluZSBUUlVFICAgICAgICAoMUwpCisjZGVmaW5lIEZBTFNFICAgICAgICgwTCkKKworI2RlZmluZSBFTkFCTEUgICAgICAxCisjZGVmaW5lIERJU0FCTEUgICAgIDAKKworLyogQml0IE1hc2sgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQklUMCAgICAweDAwMDAwMDAxVUwKKyNkZWZpbmUgQklUMSAgICAweDAwMDAwMDAyVUwKKyNkZWZpbmUgQklUMiAgICAweDAwMDAwMDA0VUwKKyNkZWZpbmUgQklUMyAgICAweDAwMDAwMDA4VUwKKyNkZWZpbmUgQklUNCAgICAweDAwMDAwMDEwVUwKKyNkZWZpbmUgQklUNSAgICAweDAwMDAwMDIwVUwKKyNkZWZpbmUgQklUNiAgICAweDAwMDAwMDQwVUwKKyNkZWZpbmUgQklUNyAgICAweDAwMDAwMDgwVUwKKyNkZWZpbmUgQklUOCAgICAweDAwMDAwMTAwVUwKKyNkZWZpbmUgQklUOSAgICAweDAwMDAwMjAwVUwKKyNkZWZpbmUgQklUMTAgICAweDAwMDAwNDAwVUwKKyNkZWZpbmUgQklUMTEgICAweDAwMDAwODAwVUwKKyNkZWZpbmUgQklUMTIgICAweDAwMDAxMDAwVUwKKyNkZWZpbmUgQklUMTMgICAweDAwMDAyMDAwVUwKKyNkZWZpbmUgQklUMTQgICAweDAwMDA0MDAwVUwKKyNkZWZpbmUgQklUMTUgICAweDAwMDA4MDAwVUwKKyNkZWZpbmUgQklUMTYgICAweDAwMDEwMDAwVUwKKyNkZWZpbmUgQklUMTcgICAweDAwMDIwMDAwVUwKKyNkZWZpbmUgQklUMTggICAweDAwMDQwMDAwVUwKKyNkZWZpbmUgQklUMTkgICAweDAwMDgwMDAwVUwKKyNkZWZpbmUgQklUMjAgICAweDAwMTAwMDAwVUwKKyNkZWZpbmUgQklUMjEgICAweDAwMjAwMDAwVUwKKyNkZWZpbmUgQklUMjIgICAweDAwNDAwMDAwVUwKKyNkZWZpbmUgQklUMjMgICAweDAwODAwMDAwVUwKKyNkZWZpbmUgQklUMjQgICAweDAxMDAwMDAwVUwKKyNkZWZpbmUgQklUMjUgICAweDAyMDAwMDAwVUwKKyNkZWZpbmUgQklUMjYgICAweDA0MDAwMDAwVUwKKyNkZWZpbmUgQklUMjcgICAweDA4MDAwMDAwVUwKKyNkZWZpbmUgQklUMjggICAweDEwMDAwMDAwVUwKKyNkZWZpbmUgQklUMjkgICAweDIwMDAwMDAwVUwKKyNkZWZpbmUgQklUMzAgICAweDQwMDAwMDAwVUwKKyNkZWZpbmUgQklUMzEgICAweDgwMDAwMDAwVUwKKworCisvKiBCeXRlIE1hc2sgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQllURTBfTXNrICAgICAgICAgICAgICAgKDB4MDAwMDAwRkZVTCkKKyNkZWZpbmUgQllURTFfTXNrICAgICAgICAgICAgICAgKDB4MDAwMEZGMDBVTCkKKyNkZWZpbmUgQllURTJfTXNrICAgICAgICAgICAgICAgKDB4MDBGRjAwMDBVTCkKKyNkZWZpbmUgQllURTNfTXNrICAgICAgICAgICAgICAgKDB4RkYwMDAwMDBVTCkKKworI2RlZmluZSBfR0VUX0JZVEUwKHUzMlBhcmFtKSAgICAoKCh1MzJQYXJhbSkgJiBCWVRFMF9Nc2spICAgICAgICApICAvKiE8IEV4dHJhY3QgQnl0ZSAwIChCaXQgIDB+IDcpIGZyb20gcGFyYW1ldGVyIHUzMlBhcmFtICovCisjZGVmaW5lIF9HRVRfQllURTEodTMyUGFyYW0pICAgICgoKHUzMlBhcmFtKSAmIEJZVEUxX01zaykgPj4gIDhVTCkgIC8qITwgRXh0cmFjdCBCeXRlIDEgKEJpdCAgOH4xNSkgZnJvbSBwYXJhbWV0ZXIgdTMyUGFyYW0gKi8KKyNkZWZpbmUgX0dFVF9CWVRFMih1MzJQYXJhbSkgICAgKCgodTMyUGFyYW0pICYgQllURTJfTXNrKSA+PiAxNlVMKSAgLyohPCBFeHRyYWN0IEJ5dGUgMiAoQml0IDE2fjIzKSBmcm9tIHBhcmFtZXRlciB1MzJQYXJhbSAqLworI2RlZmluZSBfR0VUX0JZVEUzKHUzMlBhcmFtKSAgICAoKCh1MzJQYXJhbSkgJiBCWVRFM19Nc2spID4+IDI0VUwpICAvKiE8IEV4dHJhY3QgQnl0ZSAzIChCaXQgMjR+MzEpIGZyb20gcGFyYW1ldGVyIHUzMlBhcmFtICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgIFByb2Nlc3NvciBhbmQgQ29yZSBQZXJpcGhlcmFscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBhZGR0b2dyb3VwIENNU0lTX0RldmljZSBDTVNJUyBEZWZpbml0aW9ucworICBDb25maWd1cmF0aW9uIG9mIHRoZSBDb3J0ZXgtTTIzIFByb2Nlc3NvciBhbmQgQ29yZSBQZXJpcGhlcmFscworICBAeworKi8KKworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIC0tLS0tLS0tLS0gSW50ZXJydXB0IE51bWJlciBEZWZpbml0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKy8qKgorICogQGRldGFpbHMgIEludGVycnVwdCBOdW1iZXIgRGVmaW5pdGlvbi4gVGhlIG1heGltdW0gb2YgMzIgU3BlY2lmaWMgSW50ZXJydXB0cyBhcmUgcG9zc2libGUuCisgKi8KK3R5cGVkZWYgZW51bSBJUlFuCit7CisgICAgLyoqKioqKiAgQ29ydGV4LU0wIFByb2Nlc3NvciBFeGNlcHRpb25zIE51bWJlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIE5vbk1hc2thYmxlSW50X0lSUW4gICAgICAgPSAtMTQsICAgICAgLyohPCAyIE5vbiBNYXNrYWJsZSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgSGFyZEZhdWx0X0lSUW4gICAgICAgICAgICA9IC0xMywgICAgICAvKiE8IDMgQ29ydGV4LU0yMyBIYXJkIEZhdWx0IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBTVkNhbGxfSVJRbiAgICAgICAgICAgICAgID0gLTUsICAgICAgIC8qITwgMTEgQ29ydGV4LU0yMyBTViBDYWxsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFBlbmRTVl9JUlFuICAgICAgICAgICAgICAgPSAtMiwgICAgICAgLyohPCAxNCBDb3J0ZXgtTTIzIFBlbmQgU1YgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU3lzVGlja19JUlFuICAgICAgICAgICAgICA9IC0xLCAgICAgICAvKiE8IDE1IENvcnRleC1NMjMgU3lzdGVtIFRpY2sgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qKioqKiogIEFSTUlLTUNVIFN3aWZ0IHNwZWNpZmljIEludGVycnVwdCBOdW1iZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIEJPRF9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgIC8qITwgQnJvd24gT3V0IGRldGVjdGlvbiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICovCisgICAgSVJDX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgLyohPCBJbnRlcm5hbCBSQyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBQV1JXVV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAvKiE8IFBvd2VyIERvd24gV2FrZSBVcCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJBTVBFX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMywgICAgICAgIC8qITwgU1JBTSBwYXJpdHkgY2hlY2sgZmFpbGVkIEludGVycnVwdCAgICAgICAgICAgICAgICovCisgICAgQ0tGQUlMX0lSUW4gICAgICAgICAgICAgICAgICAgPSA0LCAgICAgICAgLyohPCBDbG9jayBmYWlsZWQgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBJU1BfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDUsICAgICAgICAvKiE8IEZNQyBJU1AgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUQ19JUlFuICAgICAgICAgICAgICAgICAgICAgID0gNiwgICAgICAgIC8qITwgUmVhbCBUaW1lIENsb2NrIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVEFNUEVSX0lSUW4gICAgICAgICAgICAgICAgICAgPSA3LCAgICAgICAgLyohPCBUYW1wZXIgZGV0ZWN0aW9uIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBXRFRfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDgsICAgICAgICAvKiE8IFdhdGNoZG9nIFRpbWVyIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFdXRFRfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gOSwgICAgICAgIC8qITwgV2luZG93IFdhdGNoZG9nIFRpbWVyIEludGVycnVwdCAgICAgICAgICAgICAgICAgICovCisgICAgRUlOVDBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxMCwgICAgICAgLyohPCBFeHRlcm5hbCBJbnB1dCAwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFSU5UMV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDExLCAgICAgICAvKiE8IEV4dGVybmFsIElucHV0IDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVJTlQyX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMTIsICAgICAgIC8qITwgRXh0ZXJuYWwgSW5wdXQgMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRUlOVDNfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxMywgICAgICAgLyohPCBFeHRlcm5hbCBJbnB1dCAzIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFSU5UNF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDE0LCAgICAgICAvKiE8IEV4dGVybmFsIElucHV0IDQgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVJTlQ1X0lSUW4gICAgICAgICAgICAgICAgICAgID0gMTUsICAgICAgIC8qITwgRXh0ZXJuYWwgSW5wdXQgNSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgR1BBX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSAxNiwgICAgICAgLyohPCBHUElPIFBvcnQgQSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHUEJfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDE3LCAgICAgICAvKiE8IEdQSU8gUG9ydCBCIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEdQQ19JUlFuICAgICAgICAgICAgICAgICAgICAgID0gMTgsICAgICAgIC8qITwgR1BJTyBQb3J0IEMgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgR1BEX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSAxOSwgICAgICAgLyohPCBHUElPIFBvcnQgRCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHUEVfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDIwLCAgICAgICAvKiE8IEdQSU8gUG9ydCBFIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEdQRl9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gMjEsICAgICAgIC8qITwgR1BJTyBQb3J0IEYgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUVNQSTBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAyMiwgICAgICAgLyohPCBRU1BJMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBTUEkwX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDIzLCAgICAgICAvKiE8IFNQSTAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEJSQUtFMF9JUlFuICAgICAgICAgICAgICAgICAgID0gMjQsICAgICAgIC8qITwgQlJBS0UwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRVBXTTBfUDBfSVJRbiAgICAgICAgICAgICAgICAgPSAyNSwgICAgICAgLyohPCBFUFdNMFAwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFUFdNMF9QMV9JUlFuICAgICAgICAgICAgICAgICA9IDI2LCAgICAgICAvKiE8IEVQV00wUDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVQV00wX1AyX0lSUW4gICAgICAgICAgICAgICAgID0gMjcsICAgICAgIC8qITwgRVBXTTBQMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQlJBS0UxX0lSUW4gICAgICAgICAgICAgICAgICAgPSAyOCwgICAgICAgLyohPCBCUkFLRTEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFUFdNMV9QMF9JUlFuICAgICAgICAgICAgICAgICA9IDI5LCAgICAgICAvKiE8IEVQV00xUDAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVQV00xX1AxX0lSUW4gICAgICAgICAgICAgICAgID0gMzAsICAgICAgIC8qITwgRVBXTTFQMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRVBXTTFfUDJfSVJRbiAgICAgICAgICAgICAgICAgPSAzMSwgICAgICAgLyohPCBFUFdNMVAyIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBUTVIwX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDMyLCAgICAgICAvKiE8IFRpbWVyIDAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFRNUjFfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gMzMsICAgICAgIC8qITwgVGltZXIgMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVE1SMl9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAzNCwgICAgICAgLyohPCBUaW1lciAyIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBUTVIzX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDM1LCAgICAgICAvKiE8IFRpbWVyIDMgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFVBUlQwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMzYsICAgICAgIC8qITwgVUFSVCAwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVUFSVDFfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAzNywgICAgICAgLyohPCBVQVJUIDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBJMkMwX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDM4LCAgICAgICAvKiE8IEkyQyAwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEkyQzFfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gMzksICAgICAgIC8qITwgSTJDIDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUERNQTBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA0MCwgICAgICAgLyohPCBQZXJpcGhlcmFsIERNQSAwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBEQUNfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDQxLCAgICAgICAvKiE8IERBQyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVBREMwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNDIsICAgICAgIC8qITwgRUFEQyBTb3VyY2UgMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRUFEQzFfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA0MywgICAgICAgLyohPCBFQURDIFNvdXJjZSAxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBQ01QMDFfSVJRbiAgICAgICAgICAgICAgICAgICA9IDQ0LCAgICAgICAvKiE8IEFuYWxvZyBDb21wYXJhdG9yIDAgYW5kIDEgSW50ZXJydXB0ICAgICAgICAgICAgICAqLworICAgIEVBREMyX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNDYsICAgICAgIC8qITwgRUFEQyBTb3VyY2UgMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRUFEQzNfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA0NywgICAgICAgLyohPCBFQURDIFNvdXJjZSAzIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBVQVJUMl9JUlFuICAgICAgICAgICAgICAgICAgICA9IDQ4LCAgICAgICAvKiE8IFVBUlQyIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFVBUlQzX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNDksICAgICAgIC8qITwgVUFSVDMgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU1BJMV9JUlFuICAgICAgICAgICAgICAgICAgICAgPSA1MSwgICAgICAgLyohPCBTUEkxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBTUEkyX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDUyLCAgICAgICAvKiE8IFNQSTIgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFVTQkRfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gNTMsICAgICAgIC8qITwgVVNCIGRldmljZSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVVNCSF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSA1NCwgICAgICAgLyohPCBVU0IgaG9zdCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBVU0JPVEdfSVJRbiAgICAgICAgICAgICAgICAgICA9IDU1LCAgICAgICAvKiE8IFVTQiBPVEcgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIENBTjBfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gNTYsICAgICAgIC8qITwgQ0FOMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU0MwX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSA1OCwgICAgICAgLyohPCBTbWFydCBDYXJkIDAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBTQzFfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDU5LCAgICAgICAvKiE8IFNtYXJ0IENhcmQgMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFNDMl9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gNjAsICAgICAgIC8qITwgU21hcnQgQ2FyZCAyIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU1BJM19JUlFuICAgICAgICAgICAgICAgICAgICAgPSA2MiwgICAgICAgLyohPCBTUEkzIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBTREgwX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDY0LCAgICAgICAvKiE8IFNESDAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEkyUzBfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gNjgsICAgICAgIC8qITwgSTJTMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ1JQVF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSA3MSwgICAgICAgLyohPCBDUlBUIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHUEdfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9IDcyLCAgICAgICAvKiE8IEdQSU8gUG9ydCBHIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVJTlQ2X0lSUW4gICAgICAgICAgICAgICAgICAgID0gNzMsICAgICAgIC8qITwgRXh0ZXJuYWwgSW5wdXQgNiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVUFSVDRfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA3NCwgICAgICAgLyohPCBVQVJUNCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBVQVJUNV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDc1LCAgICAgICAvKiE8IFVBUlQ1IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFVTQ0kwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNzYsICAgICAgIC8qITwgVVNDSTAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVVNDSTFfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA3NywgICAgICAgLyohPCBVU0NJMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBCUFdNMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDc4LCAgICAgICAvKiE8IEJQV00wIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEJQV00xX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNzksICAgICAgIC8qITwgQlBXTTEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgSTJDMl9JUlFuICAgICAgICAgICAgICAgICAgICAgPSA4MiwgICAgICAgLyohPCBJMkMyIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBRRUkwX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDg0LCAgICAgICAvKiE8IFFFSTAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFFFSTFfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gODUsICAgICAgIC8qITwgUUVJMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRUNBUDBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA4NiwgICAgICAgLyohPCBFQ0FQMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFQ0FQMV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDg3LCAgICAgICAvKiE8IEVDQVAxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEdQSF9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gODgsICAgICAgIC8qITwgR1BJTyBQb3J0IEggSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRUlOVDdfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA4OSwgICAgICAgLyohPCBFeHRlcm5hbCBJbnB1dCA3IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBQRE1BMV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDk4LCAgICAgICAvKiE8IFBlcmlwaGVyYWwgRE1BIDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFNDVV9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gOTksICAgICAgIC8qITwgU0NVIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgVFJOR19JUlFuICAgICAgICAgICAgICAgICAgICAgPSAxMDEgICAgICAgLyohPCBUUk5HIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCit9IElSUW5fVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgIFByb2Nlc3NvciBhbmQgQ29yZSBQZXJpcGhlcmFsIFNlY3Rpb24gICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIC0tLS0tLS0gIFN0YXJ0IG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyBhbmQgZGlzYWJsaW5nIHdhcm5pbmdzICAtLS0tLS0tICovCisjaWYgICBkZWZpbmVkIChfX0NDX0FSTSkKKyNwcmFnbWEgcHVzaAorI3ByYWdtYSBhbm9uX3VuaW9ucworI2VsaWYgZGVmaW5lZCAoX19JQ0NBUk1fXykKKyNwcmFnbWEgbGFuZ3VhZ2U9ZXh0ZW5kZWQKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XYzExLWV4dGVuc2lvbnMiCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdyZXNlcnZlZC1pZC1tYWNybyIKKyNlbGlmIGRlZmluZWQgKF9fR05VQ19fKQorLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkIChfX1RNUzQ3MF9fKQorLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkIChfX1RBU0tJTkdfXykKKyNwcmFnbWEgd2FybmluZyA1ODYKKyNlbGlmIGRlZmluZWQgKF9fQ1NNQ19fKQorLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxzZQorI3dhcm5pbmcgTm90IHN1cHBvcnRlZCBjb21waWxlciB0eXBlCisjZW5kaWYKKworCisvKiAtLS0tLS0tLSAgQ29uZmlndXJhdGlvbiBvZiB0aGUgQ29ydGV4LUFSTXY4TUJMIFByb2Nlc3NvciBhbmQgQ29yZSBQZXJpcGhlcmFscyAgLS0tLS0tLSAqLworI2RlZmluZSBfX0FSTXY4TUJMX1JFViAgICAgICAgICAgIDB4MDAwMFUgICAvKiBDb3JlIHJldmlzaW9uIHIwcDAgKi8KKyNkZWZpbmUgX19TQVVfUFJFU0VOVCAgICAgICAgICAgICAxVSAgICAgICAgLyogU0FVIHByZXNlbnQgKi8KKyNkZWZpbmUgX19TQVVSRUdJT05fUFJFU0VOVCAgICAgICAxVSAgICAgICAgLyogU0FVIHByZXNlbnQgKi8KKyNkZWZpbmUgX19NUFVfUFJFU0VOVCAgICAgICAgICAgICAxVSAgICAgICAgLyogTVBVIHByZXNlbnQgKi8KKyNkZWZpbmUgX19WVE9SX1BSRVNFTlQgICAgICAgICAgICAxVSAgICAgICAgLyogVlRPUiBwcmVzZW50ICovCisjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgMlUgICAgICAgIC8qIE51bWJlciBvZiBCaXRzIHVzZWQgZm9yIFByaW9yaXR5IExldmVscyAqLworI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVICAgICAgICAvKiBTZXQgdG8gMSBpZiBkaWZmZXJlbnQgU3lzVGljayBDb25maWcgaXMgdXNlZCAqLworI2RlZmluZSBVU0VfQVNTRVJUICAgICAgICAgICAgICAgIDBVICAgICAgICAvKiBEZWZpbmUgdG8gdXNlIEFzc2VydCBmdW5jdGlvbiBvciBub3QgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJUyAqLworCisKKyNpbmNsdWRlICJjb3JlX2NtMjMuaCIgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzb3IgYW5kIGNvcmUgcGVyaXBoZXJhbHMgKi8KKyNpbmNsdWRlICJzeXN0ZW1fTTIzNTEuaCIgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIEhlYWRlciAqLworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIHN5c3RlbSBjbG9jaworICoKKyAqIEBwYXJhbSAgbm9uZQorICogQHJldHVybiBub25lCisgKgorICogQGJyaWVmICBTZXR1cCB0aGUgbWljcm8gY29udHJvbGxlciBzeXN0ZW0KKyAqICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgUExMIGFuZCB1cGRhdGUgdGhlIFN5c3RlbUZyZXF1ZW5jeSB2YXJpYWJsZQorICovCitleHRlcm4gdm9pZCBTeXN0ZW1Jbml0KHZvaWQpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICBEZXZpY2UgU3BlY2lmaWMgUGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlcyAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiYWNtcF9yZWcuaCIKKyNpbmNsdWRlICJicHdtX3JlZy5oIgorI2luY2x1ZGUgImNhbl9yZWcuaCIKKyNpbmNsdWRlICJjbGtfcmVnLmgiCisjaW5jbHVkZSAiY3JjX3JlZy5oIgorI2luY2x1ZGUgImRhY19yZWcuaCIKKyNpbmNsdWRlICJlYWRjX3JlZy5oIgorI2luY2x1ZGUgImViaV9yZWcuaCIKKyNpbmNsdWRlICJlY2FwX3JlZy5oIgorI2luY2x1ZGUgImZtY19yZWcuaCIKKyNpbmNsdWRlICJncGlvX3JlZy5oIgorI2luY2x1ZGUgImhkaXZfcmVnLmgiCisjaW5jbHVkZSAiaTJjX3JlZy5oIgorI2luY2x1ZGUgImkyc19yZWcuaCIKKyNpbmNsdWRlICJwZG1hX3JlZy5oIgorI2luY2x1ZGUgImVwd21fcmVnLmgiCisjaW5jbHVkZSAicWVpX3JlZy5oIgorI2luY2x1ZGUgInJ0Y19yZWcuaCIKKyNpbmNsdWRlICJzY19yZWcuaCIKKyNpbmNsdWRlICJzY3VfcmVnLmgiCisjaW5jbHVkZSAic2RoX3JlZy5oIgorI2luY2x1ZGUgInFzcGlfcmVnLmgiCisjaW5jbHVkZSAic3BpX3JlZy5oIgorI2luY2x1ZGUgInN5c19yZWcuaCIKKyNpbmNsdWRlICJ0aW1lcl9yZWcuaCIKKyNpbmNsdWRlICJ0cm5nX3JlZy5oIgorI2luY2x1ZGUgInVhcnRfcmVnLmgiCisjaW5jbHVkZSAidWkyY19yZWcuaCIKKyNpbmNsdWRlICJ1c2JoX3JlZy5oIgorI2luY2x1ZGUgInVzYmRfcmVnLmgiCisjaW5jbHVkZSAib3RnX3JlZy5oIgorI2luY2x1ZGUgImNycHRfcmVnLmgiCisjaW5jbHVkZSAidXNwaV9yZWcuaCIKKyNpbmNsdWRlICJ1dWFydF9yZWcuaCIKKyNpbmNsdWRlICJ3ZHRfcmVnLmgiCisjaW5jbHVkZSAid3dkdF9yZWcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmlwaGVyYWwgbWVtb3J5IG1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBhZGR0b2dyb3VwIFBFUklQSEVSQUxfQkFTRSBQZXJpcGhlcmFsIE1lbW9yeSBCYXNlCisgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBTZXJpZXMgUGVyaXBoZXJhbAorICBAeworICovCisKKworLyogUGVyaXBoZXJhbCBhbmQgU1JBTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgU1JBTV9CQVNFICAgICAgICAgICAgKDB4MjAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChTUkFNICAgICAgKSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgUEVSSVBIX0JBU0UgICAgICAgICAgKDB4NDAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChQZXJpcGhlcmFsKSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgTlNfT0ZGU0VUICAgICAgICAgICAgKDB4MTAwMDAwMDBVTCkKKworLyogUGVyaXBoZXJhbCBtZW1vcnkgbWFwICovCisjZGVmaW5lIEFIQlBFUklQSF9CQVNFICAgICAgIFBFUklQSF9CQVNFCisjZGVmaW5lIEFQQlBFUklQSF9CQVNFICAgICAgIChQRVJJUEhfQkFTRSArIDB4MDAwNDAwMDBVTCkKKworLyohPCBBSEIgcGVyaXBoZXJhbHMgKi8KKyNkZWZpbmUgU1lTX0JBU0UgICAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwMDAwMFVMKQorI2RlZmluZSBDTEtfQkFTRSAgICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDAwMjAwVUwpCisjZGVmaW5lIElOVF9CQVNFICAgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDAzMDBVTCkKKyNkZWZpbmUgR1BJT19CQVNFICAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwNDAwMFVMKQorI2RlZmluZSBHUElPQV9CQVNFICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDA0MDAwVUwpCisjZGVmaW5lIEdQSU9CX0JBU0UgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDQwNDBVTCkKKyNkZWZpbmUgR1BJT0NfQkFTRSAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwNDA4MFVMKQorI2RlZmluZSBHUElPRF9CQVNFICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDA0MEMwVUwpCisjZGVmaW5lIEdQSU9FX0JBU0UgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDQxMDBVTCkKKyNkZWZpbmUgR1BJT0ZfQkFTRSAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwNDE0MFVMKQorI2RlZmluZSBHUElPR19CQVNFICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDA0MTgwVUwpCisjZGVmaW5lIEdQSU9IX0JBU0UgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDQxQzBVTCkKKyNkZWZpbmUgR1BJT19EQkNUTF9CQVNFICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwNDQ0MFVMKQorI2RlZmluZSBHUElPX1BJTl9EQVRBX0JBU0UgICAoQUhCUEVSSVBIX0JBU0UgKyAweDA0ODAwVUwpCisjZGVmaW5lIFBETUEwX0JBU0UgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MDgwMDBVTCkKKyNkZWZpbmUgUERNQTFfQkFTRSAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgxODAwMFVMKQorI2RlZmluZSBVU0JIX0JBU0UgICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDA5MDAwVUwpCisjZGVmaW5lIEZNQ19CQVNFICAgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MEMwMDBVTCkKKyNkZWZpbmUgU0RIMF9CQVNFICAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgwRDAwMFVMKQorI2RlZmluZSBTREgxX0JBU0UgICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDBFMDAwVUwpCisjZGVmaW5lIEVCSV9CQVNFICAgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MTAwMDBVTCkKKyNkZWZpbmUgU0NVX0JBU0UgICAgICAgICAgICAgKEFIQlBFUklQSF9CQVNFICsgMHgyRjAwMFVMKQorI2RlZmluZSBDUkNfQkFTRSAgICAgICAgICAgICAoQUhCUEVSSVBIX0JBU0UgKyAweDMxMDAwVUwpCisjZGVmaW5lIENSUFRfQkFTRSAgICAgICAgICAgIChBSEJQRVJJUEhfQkFTRSArIDB4MzIwMDBVTCkKKworLyohPCBBUEIgcGVyaXBoZXJhbHMgKi8KKyNkZWZpbmUgV0RUX0JBU0UgICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgwMDAwMFVMKQorI2RlZmluZSBXV0RUX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDAwMTAwVUwpCisjZGVmaW5lIFJUQ19CQVNFICAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MDEwMDBVTCkKKyNkZWZpbmUgRUFEQ19CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgwMzAwMFVMKQorI2RlZmluZSBBQ01QMDFfQkFTRSAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDA1MDAwVUwpCisjZGVmaW5lIERBQzBfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MDcwMDBVTCkKKyNkZWZpbmUgREFDMV9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgwNzA0MFVMKQorI2RlZmluZSBJMlMwX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDA4MDAwVUwpCisjZGVmaW5lIE9UR19CQVNFICAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MEQwMDBVTCkKKyNkZWZpbmUgVE1SMDFfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgxMDAwMFVMKQorI2RlZmluZSBUTVIyM19CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDExMDAwVUwpCisjZGVmaW5lIEVQV00wX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MTgwMDBVTCkKKyNkZWZpbmUgRVBXTTFfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgxOTAwMFVMKQorI2RlZmluZSBCUFdNMF9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDFBMDAwVUwpCisjZGVmaW5lIEJQV00xX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MUIwMDBVTCkKKyNkZWZpbmUgUVNQSTBfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgyMDAwMFVMKQorI2RlZmluZSBTUEkwX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDIxMDAwVUwpCisjZGVmaW5lIFNQSTFfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MjIwMDBVTCkKKyNkZWZpbmUgU1BJMl9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgyMzAwMFVMKQorI2RlZmluZSBTUEkzX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDI0MDAwVUwpCisjZGVmaW5lIFVBUlQwX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MzAwMDBVTCkKKyNkZWZpbmUgVUFSVDBfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgzMDAwMFVMKQorI2RlZmluZSBVQVJUMV9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDMxMDAwVUwpCisjZGVmaW5lIFVBUlQyX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MzIwMDBVTCkKKyNkZWZpbmUgVUFSVDNfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHgzMzAwMFVMKQorI2RlZmluZSBVQVJUNF9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDM0MDAwVUwpCisjZGVmaW5lIFVBUlQ1X0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4MzUwMDBVTCkKKyNkZWZpbmUgSTJDMF9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg0MDAwMFVMKQorI2RlZmluZSBJMkMxX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDQxMDAwVUwpCisjZGVmaW5lIEkyQzJfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4NDIwMDBVTCkKKyNkZWZpbmUgU0MwX0JBU0UgICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg1MDAwMFVMKQorI2RlZmluZSBTQzFfQkFTRSAgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDUxMDAwVUwpCisjZGVmaW5lIFNDMl9CQVNFICAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4NTIwMDBVTCkKKyNkZWZpbmUgQ0FOMF9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg2MDAwMFVMKQorI2RlZmluZSBRRUkwX0JBU0UgICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDcwMDAwVUwpCisjZGVmaW5lIFFFSTFfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4NzEwMDBVTCkKKyNkZWZpbmUgRUNBUDBfQkFTRSAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg3NDAwMFVMKQorI2RlZmluZSBFQ0FQMV9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDc1MDAwVUwpCisjZGVmaW5lIFRSTkdfQkFTRSAgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4NzkwMDBVTCkKKyNkZWZpbmUgVVNCRF9CQVNFICAgICAgICAgICAgKEFQQlBFUklQSF9CQVNFICsgMHg4MDAwMFVMKQorI2RlZmluZSBVU0NJMF9CQVNFICAgICAgICAgICAoQVBCUEVSSVBIX0JBU0UgKyAweDkwMDAwVUwpCisjZGVmaW5lIFVTQ0kxX0JBU0UgICAgICAgICAgIChBUEJQRVJJUEhfQkFTRSArIDB4OTEwMDBVTCkKKworCisvKipAfSovIC8qIFBFUklQSEVSQUwgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmlwaGVyYWwgZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogQGFkZHRvZ3JvdXAgUE1PRFVMRSBQZXJpcGhlcmFsIFBvaW50ZXIKKyAgVGhlIERlY2xhcmF0aW9uIG9mIFBlcmlwaGVyYWwgUG9pbnRlcgorICBAeworICovCisKKy8qKiBAYWRkdG9ncm91cCBQTU9EVUxFX1MgU2VjdXJlIFBlcmlwaGVyYWwgUG9pbnRlcgorIFRoZSBEZWNsYXJhdGlvbiBvZiBTZWN1cmUgUGVyaXBoZXJhbCBQb2ludGVyCisgQHsKKyovCisKKworI2RlZmluZSBQQV9TICAgICAgICAgICAgICAgICgoR1BJT19UICopIEdQSU9BX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRBIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQl9TICAgICAgICAgICAgICAgICgoR1BJT19UICopIEdQSU9CX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRCIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQ19TICAgICAgICAgICAgICAgICgoR1BJT19UICopIEdQSU9DX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRDIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQRF9TICAgICAgICAgICAgICAgICgoR1BJT19UICopIEdQSU9EX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlREIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQRV9TICAgICAgICAgICAgICAgICgoR1BJT19UICopIEdQSU9FX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRFIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQRl9TICAgICAgICAgICAgICAgICgoR1BJT19UICopIEdQSU9GX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRGIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQR19TICAgICAgICAgICAgICAgICgoR1BJT19UICopIEdQSU9HX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRHIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQSF9TICAgICAgICAgICAgICAgICgoR1BJT19UICopIEdQSU9IX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRIIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlQwX1MgICAgICAgICAgICAgKChVQVJUX1QgKikgVUFSVDBfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQxX1MgICAgICAgICAgICAgKChVQVJUX1QgKikgVUFSVDFfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1MgICAgICAgICAgICAgKChVQVJUX1QgKikgVUFSVDJfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQzX1MgICAgICAgICAgICAgKChVQVJUX1QgKikgVUFSVDNfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQzIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQ0X1MgICAgICAgICAgICAgKChVQVJUX1QgKikgVUFSVDRfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQ0IFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQ1X1MgICAgICAgICAgICAgKChVQVJUX1QgKikgVUFSVDVfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQ1IFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisKKworI2RlZmluZSBUSU1FUjBfUyAgICAgICAgICAgICgoVElNRVJfVCAqKSBUTVIwMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUjAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjFfUyAgICAgICAgICAgICgoVElNRVJfVCAqKSAoVE1SMDFfQkFTRSArIDB4MTAwVUwpKSAgICAgICAgLyohPCBUSU1FUjEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjJfUyAgICAgICAgICAgICgoVElNRVJfVCAqKSBUTVIyM19CQVNFKSAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUjIgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjNfUyAgICAgICAgICAgICgoVElNRVJfVCAqKSAoVE1SMjNfQkFTRSArIDB4MTAwVUwpKSAgICAgICAgLyohPCBUSU1FUjMgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdEVF9TICAgICAgICAgICAgICAgKChXRFRfVCAqKSBXRFRfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdhdGNoIERvZyBUaW1lciBQb2ludGVyICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV1dEVF9TICAgICAgICAgICAgICAoKFdXRFRfVCAqKSBXV0RUX0JBU0UpICAgICAgICAgICAgICAgICAgICAgIC8qITwgV2luZG93IFdhdGNoIERvZyBUaW1lciBQb2ludGVyICAgICAgKi8KKworI2RlZmluZSBRU1BJMF9TICAgICAgICAgICAgICgoUVNQSV9UICopIFFTUEkwX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkwX1MgICAgICAgICAgICAgICgoU1BJX1QgKikgU1BJMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkxX1MgICAgICAgICAgICAgICgoU1BJX1QgKikgU1BJMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkyX1MgICAgICAgICAgICAgICgoU1BJX1QgKikgU1BJMl9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkzX1MgICAgICAgICAgICAgICgoU1BJX1QgKikgU1BJM19CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkzIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyUzBfUyAgICAgICAgICAgICAgKChJMlNfVCAqKSBJMlMwX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyUzAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDMF9TICAgICAgICAgICAgICAoKEkyQ19UICopIEkyQzBfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMV9TICAgICAgICAgICAgICAoKEkyQ19UICopIEkyQzFfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9TICAgICAgICAgICAgICAoKEkyQ19UICopIEkyQzJfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUkwX1MgICAgICAgICAgICAgICgoUUVJX1QgKikgUUVJMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUkwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRRUkxX1MgICAgICAgICAgICAgICgoUUVJX1QgKikgUUVJMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUkxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TICAgICAgICAgICAgICAgKChSVENfVCAqKSBSVENfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQUNNUDAxX1MgICAgICAgICAgICAoKEFDTVBfVCAqKSBBQ01QMDFfQkFTRSkgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUDAxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUyAgICAgICAgICAgICAgICgoQ0xLX1QgKikgQ0xLX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ2xvY2sgQ29udHJvbGxlciBQb2ludGVyICAgICAqLworCisjZGVmaW5lIERBQzBfUyAgICAgICAgICAgICAgKChEQUNfVCAqKSBEQUMwX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQzAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBQzFfUyAgICAgICAgICAgICAgKChEQUNfVCAqKSBEQUMxX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQzEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TICAgICAgICAgICAgICAoKEVBRENfVCAqKSBFQURDX0JBU0UpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUyAgICAgICAgICAgICAgICgoU1lTX1QgKikgU1lTX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gR2xvYmFsIENvbnRyb2xsZXIgUG9pbnRlciAgICAqLworCisjZGVmaW5lIFNZU0lOVF9TICAgICAgICAgICAgKChTWVNfSU5UX1QgKikgSU5UX0JBU0UpICAgICAgICAgICAgICAgICAgICAvKiE8IEludGVycnVwdCBTb3VyY2UgQ29udHJvbGxlciBQb2ludGVyICovCisKKyNkZWZpbmUgRk1DX1MgICAgICAgICAgICAgICAoKEZNQ19UICopIEZNQ19CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRmxhc2ggTWVtb3J5IENvbnRyb2xsZXIgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREgwX1MgICAgICAgICAgICAgICgoU0RIX1QgKikgICBTREgwX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBTRCBIb3N0IENvbnRyb2xsZXIgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfUyAgICAgICAgICAgICAgKChDUlBUX1QgKikgQ1JQVF9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IENyeXB0byBBY2NlbGVyYXRvciBQb2ludGVyICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfUyAgICAgICAgICAgICAgKChUUk5HX1QgKilUUk5HX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRydWUgUmFuZG9tIE51bWJlciBQb2ludGVyICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTTBfUyAgICAgICAgICAgICAoKEJQV01fVCAqKSBCUFdNMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTTAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTTFfUyAgICAgICAgICAgICAoKEJQV01fVCAqKSBCUFdNMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTTEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNMF9TICAgICAgICAgICAgICgoRVBXTV9UICopIEVQV00wX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNMV9TICAgICAgICAgICAgICgoRVBXTV9UICopIEVQV00xX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDMF9TICAgICAgICAgICAgICAgKChTQ19UICopIFNDMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDMV9TICAgICAgICAgICAgICAgKChTQ19UICopIFNDMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDMl9TICAgICAgICAgICAgICAgKChTQ19UICopIFNDMl9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDMiBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX1MgICAgICAgICAgICAgICAoKEVCSV9UICopIEVCSV9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUkNfUyAgICAgICAgICAgICAgICgoQ1JDX1QgKikgQ1JDX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkMgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfUyAgICAgICAgICAgICAgKChVU0JEX1QgKikgVVNCRF9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBEZXZpY2UgUG9pbnRlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQkhfUyAgICAgICAgICAgICAgKChVU0JIX1QgKikgVVNCSF9CQVNFKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkggUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UR19TICAgICAgICAgICAgICAgKChPVEdfVCAqKSBPVEdfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9URyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQTBfUyAgICAgICAgICAgICAoKFBETUFfVCAqKSBQRE1BMF9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQTAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERNQTFfUyAgICAgICAgICAgICAoKFBETUFfVCAqKSBQRE1BMV9CQVNFKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQTEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDMF9TICAgICAgICAgICAgICgoVUkyQ19UICopIFVTQ0kwX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSTJDMV9TICAgICAgICAgICAgICgoVUkyQ19UICopIFVTQ0kxX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSTJDMl9TICAgICAgICAgICAgICgoVUkyQ19UICopIFVTQ0kyX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDMiBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUEkwX1MgICAgICAgICAgICAgKChVU1BJX1QgKikgVVNDSTBfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUEkwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTUEkxX1MgICAgICAgICAgICAgKChVU1BJX1QgKikgVVNDSTFfQkFTRSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUEkxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlQwX1MgICAgICAgICAgICAoKFVVQVJUX1QgKikgVVNDSTBfQkFTRSkgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlQwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlQxX1MgICAgICAgICAgICAoKFVVQVJUX1QgKikgVVNDSTFfQkFTRSkgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlQxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUyAgICAgICAgICAgICAgICgoU0NVX1QgKikgU0NVX0JBU0UpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1UgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0FQMF9TICAgICAgICAgICAgICgoRUNBUF9UICopIEVDQVAwX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0FQMV9TICAgICAgICAgICAgICgoRUNBUF9UICopIEVDQVAxX0JBU0UpICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENBTjBfUyAgICAgICAgICAgICAgKChDQU5fVCAqKUNBTjBfQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTjAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworCisKKy8qKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFBNT0RVTEVfUyAqLworCisvKiogQGFkZHRvZ3JvdXAgUE1PRFVMRV9OUyBOb24tc2VjdXJlIFBlcmlwaGVyYWwgUG9pbnRlcgorIFRoZSBEZWNsYXJhdGlvbiBvZiBOb24tc2VjdXJlIFBlcmlwaGVyYWwgUG9pbnRlcgorIEB7CisqLworCisKKyNkZWZpbmUgUEFfTlMgICAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSAgKEdQSU9BX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUE9SVEEgUG9pbnRlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBCX05TICAgICAgICAgICAgICAgICAgKChHUElPX1QgKikgIChHUElPQl9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRCIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQ19OUyAgICAgICAgICAgICAgICAgICgoR1BJT19UICopICAoR1BJT0NfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JUQyBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERfTlMgICAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSAgKEdQSU9EX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUE9SVEQgUG9pbnRlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBFX05TICAgICAgICAgICAgICAgICAgKChHUElPX1QgKikgIChHUElPRV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRFIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQRl9OUyAgICAgICAgICAgICAgICAgICgoR1BJT19UICopICAoR1BJT0ZfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBQT1JURiBQb2ludGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEdfTlMgICAgICAgICAgICAgICAgICAoKEdQSU9fVCAqKSAgKEdQSU9HX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUE9SVEcgUG9pbnRlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBIX05TICAgICAgICAgICAgICAgICAgKChHUElPX1QgKikgIChHUElPSF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFBPUlRIIFBvaW50ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMF9OUyAgICAgICAgICAgICAgICgoVUFSVF9UICopICAoVUFSVDBfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDFfTlMgICAgICAgICAgICAgICAoKFVBUlRfVCAqKSAgKFVBUlQxX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX05TICAgICAgICAgICAgICAgKChVQVJUX1QgKikgIChVQVJUMl9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUM19OUyAgICAgICAgICAgICAgICgoVUFSVF9UICopICAoVUFSVDNfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDMgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDRfTlMgICAgICAgICAgICAgICAoKFVBUlRfVCAqKSAgKFVBUlQ0X0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQ0IFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQ1X05TICAgICAgICAgICAgICAgKChVQVJUX1QgKikgIChVQVJUNV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUNSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjJfTlMgICAgICAgICAgICAgICgoVElNRVJfVCAqKSAoVE1SMjNfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVIyIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVIzX05TICAgICAgICAgICAgICAoKFRJTUVSX1QgKikgKFRNUjIzX0JBU0UrTlNfT0ZGU0VUKzB4MTAwVUwpKSAgICAgICAgICAgICAvKiE8IFRJTUVSMyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUEkwX05TICAgICAgICAgICAgICAgKChRU1BJX1QgKikgIChRU1BJMF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkwX05TICAgICAgICAgICAgICAgICgoU1BJX1QgKikgICAoU1BJMF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJMV9OUyAgICAgICAgICAgICAgICAoKFNQSV9UICopICAgKFNQSTFfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfTlMgICAgICAgICAgICAgICAgKChTUElfVCAqKSAgIChTUEkyX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUEkyIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEkzX05TICAgICAgICAgICAgICAgICgoU1BJX1QgKikgICAoU1BJM19CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJMyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTMF9OUyAgICAgICAgICAgICAgICAoKEkyU19UICopICAgKEkyUzBfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyUzAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzBfTlMgICAgICAgICAgICAgICAgKChJMkNfVCAqKSAgIChJMkMwX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMxX05TICAgICAgICAgICAgICAgICgoSTJDX1QgKikgICAoSTJDMV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9OUyAgICAgICAgICAgICAgICAoKEkyQ19UICopICAgKEkyQzJfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFFFSTBfTlMgICAgICAgICAgICAgICAgKChRRUlfVCAqKSAgIChRRUkwX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUkwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRRUkxX05TICAgICAgICAgICAgICAgICgoUUVJX1QgKikgICAoUUVJMV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX05TICAgICAgICAgICAgICAgICAoKFJUQ19UICopICAgKFJUQ19CQVNFICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFDTVAwMV9OUyAgICAgICAgICAgICAgKChBQ01QX1QgKikgIChBQ01QMDFfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QMDEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQUMwX05TICAgICAgICAgICAgICAgICgoREFDX1QgKikgICAoREFDMF9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDMV9OUyAgICAgICAgICAgICAgICAoKERBQ19UICopICAgKERBQzFfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQzEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVBRENfTlMgICAgICAgICAgICAgICAgKChFQURDX1QgKikgIChFQURDX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTREgwX05TICAgICAgICAgICAgICAgICgoU0RIX1QgKikgICAoU0RIMF9CQVNFICtOU19PRkZTRVQpKQorI2RlZmluZSBDUlBUX05TICAgICAgICAgICAgICAgICgoQ1JQVF9UICopICAoQ1JQVF9CQVNFICtOU19PRkZTRVQpKQorI2RlZmluZSBUUk5HX05TICAgICAgICAgICAgICAgICgoVFJOR19UICopICAoVFJOR19CQVNFICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFBvaW50ZXIgICAgKi8KKyNkZWZpbmUgQlBXTTBfTlMgICAgICAgICAgICAgICAoKEJQV01fVCAqKSAgKEJQV00wX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJQV00xX05TICAgICAgICAgICAgICAgKChCUFdNX1QgKikgIChCUFdNMV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTTEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFUFdNMF9OUyAgICAgICAgICAgICAgICgoRVBXTV9UICopICAoRVBXTTBfQkFTRStOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV00wIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVBXTTFfTlMgICAgICAgICAgICAgICAoKEVQV01fVCAqKSAgKEVQV00xX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDMF9OUyAgICAgICAgICAgICAgICAgKChTQ19UICopICAgIChTQzBfQkFTRSAgK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0MwIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTQzFfTlMgICAgICAgICAgICAgICAgICgoU0NfVCAqKSAgICAoU0MxX0JBU0UgICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0MyX05TICAgICAgICAgICAgICAgICAoKFNDX1QgKikgICAgKFNDMl9CQVNFICArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQzIgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9OUyAgICAgICAgICAgICAgICAgKChFQklfVCAqKSAgIChFQklfQkFTRSAgK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkNfTlMgICAgICAgICAgICAgICAgICgoQ1JDX1QgKikgICAoQ1JDX0JBU0UgICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9OUyAgICAgICAgICAgICAgICAoKFVTQkRfVCAqKSAgKFVTQkRfQkFTRSArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgRGV2aWNlIFBvaW50ZXIgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQkhfTlMgICAgICAgICAgICAgICAgKChVU0JIX1QgKikgIChVU0JIX0JBU0UgK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVEdfTlMgICAgICAgICAgICAgICAgICgoT1RHX1QgKikgICAoT1RHX0JBU0UgICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9URyBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERNQTFfTlMgICAgICAgICAgICAgICAoKFBETUFfVCAqKSAgKFBETUExX0JBU0UgK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BMSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJMkMwX05TICAgICAgICAgICAgICAgKChVSTJDX1QgKikgIChVU0NJMF9CQVNFICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQzAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSTJDMV9OUyAgICAgICAgICAgICAgICgoVUkyQ19UICopICAoVVNDSTFfQkFTRSArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkMxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQzJfTlMgICAgICAgICAgICAgICAoKFVJMkNfVCAqKSAgKFVTQ0kyX0JBU0UgK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDMiBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTUEkwX05TICAgICAgICAgICAgICAgKChVU1BJX1QgKikgIChVU0NJMF9CQVNFICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSTAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU1BJMV9OUyAgICAgICAgICAgICAgICgoVVNQSV9UICopICAoVVNDSTFfQkFTRSArTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUEkxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlQwX05TICAgICAgICAgICAgICAoKFVVQVJUX1QgKikgKFVTQ0kwX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVDAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVVQVJUMV9OUyAgICAgICAgICAgICAgKChVVUFSVF9UICopIChVU0NJMV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlQxIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfTlMgICAgICAgICAgICAgICAgICgoU0NVX1QgKikgICAoU0NVX0JBU0UgICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVSBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUDBfTlMgICAgICAgICAgICAgICAoKEVDQVBfVCAqKSAgKEVDQVAwX0JBU0UrTlNfT0ZGU0VUKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQMCBQb2ludGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQVAxX05TICAgICAgICAgICAgICAgKChFQ0FQX1QgKikgIChFQ0FQMV9CQVNFK05TX09GRlNFVCkpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUDEgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDQU4wX05TICAgICAgICAgICAgICAgICgoQ0FOX1QgKikgICAoQ0FOMF9CQVNFICtOU19PRkZTRVQpKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTjAgUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUE1PRFVMRV9OUyAqLworCisKKy8qIEFsd2F5cyBTZWN1cmUgTW9kdWxlcyAqLworI2RlZmluZSBTWVMgU1lTX1MKKyNkZWZpbmUgQ0xLIENMS19TCisjZGVmaW5lIEZNQyBGTUNfUworI2RlZmluZSBTQ1UgU0NVX1MKKyNkZWZpbmUgUERNQTAgUERNQTBfUworI2RlZmluZSBXRFQgV0RUX1MKKyNkZWZpbmUgV1dEVCBXV0RUX1MKKyNkZWZpbmUgVElNRVIwIFRJTUVSMF9TCisjZGVmaW5lIFRJTUVSMSBUSU1FUjFfUworI2RlZmluZSBSVEMgUlRDX1MKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDBfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMF9WQUwgJiBCSVQ5ICkKKyMgZGVmaW5lIFVTQkggVVNCSF9OUworI2Vsc2UKKyMgZGVmaW5lIFVTQkggVVNCSF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDBfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMF9WQUwgJiBCSVQxMykKKyMgZGVmaW5lIFNESDAgU0RIMF9OUworI2Vsc2UKKyMgZGVmaW5lIFNESDAgU0RIMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDBfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMF9WQUwgJiBCSVQxNikKKyMgZGVmaW5lIEVCSSBFQklfTlMKKyNlbHNlCisjIGRlZmluZSBFQkkgRUJJX1MKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQwX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDBfVkFMICYgQklUMjQpCisjIGRlZmluZSBQRE1BMSBQRE1BMV9OUworI2Vsc2UKKyMgZGVmaW5lIFBETUExIFBETUExX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUMV9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQxX1ZBTCAmIEJJVDE3KQorIyBkZWZpbmUgQ1JDIENSQ19OUworI2Vsc2UKKyMgZGVmaW5lIENSQyBDUkNfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQxX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDFfVkFMICYgQklUMTgpCisjIGRlZmluZSBDUlBUIENSUFRfTlMKKyNlbHNlCisjIGRlZmluZSBDUlBUIENSUFRfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDJfVkFMICYgQklUMyApCisjIGRlZmluZSBFQURDIEVBRENfTlMKKyNlbHNlCisjIGRlZmluZSBFQURDIEVBRENfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDJfVkFMICYgQklUNSApCisjIGRlZmluZSBBQ01QMDEgQUNNUDAxX05TCisjZWxzZQorIyBkZWZpbmUgQUNNUDAxIEFDTVAwMV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDJfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMl9WQUwgJiBCSVQ3ICkKKyMgZGVmaW5lIERBQzAgREFDMF9OUworIyBkZWZpbmUgREFDMSBEQUMxX05TCisjZWxzZQorIyBkZWZpbmUgREFDMCBEQUMwX1MKKyMgZGVmaW5lIERBQzEgREFDMV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDJfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMl9WQUwgJiBCSVQ4ICkKKyMgZGVmaW5lIEkyUzAgSTJTMF9OUworI2Vsc2UKKyMgZGVmaW5lIEkyUzAgSTJTMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDJfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMl9WQUwgJiBCSVQxMykKKyMgZGVmaW5lIE9URyBPVEdfTlMKKyNlbHNlCisjIGRlZmluZSBPVEcgT1RHX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUMl9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCAmIEJJVDE3KQorIyBkZWZpbmUgVElNRVIyIFRJTUVSMl9OUworIyBkZWZpbmUgVElNRVIzIFRJTUVSM19OUworI2Vsc2UKKyMgZGVmaW5lIFRJTUVSMiBUSU1FUjJfUworIyBkZWZpbmUgVElNRVIzIFRJTUVSM19TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDJfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMl9WQUwgJiBCSVQyNCkKKyMgZGVmaW5lIEVQV00wIEVQV00wX05TCisjZWxzZQorIyBkZWZpbmUgRVBXTTAgRVBXTTBfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDJfVkFMICYgQklUMjUpCisjIGRlZmluZSBFUFdNMSBFUFdNMV9OUworI2Vsc2UKKyMgZGVmaW5lIEVQV00xIEVQV00xX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUMl9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQyX1ZBTCAmIEJJVDI2KQorIyBkZWZpbmUgQlBXTTAgQlBXTTBfTlMKKyNlbHNlCisjIGRlZmluZSBCUFdNMCBCUFdNMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDJfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUMl9WQUwgJiBCSVQyNykKKyMgZGVmaW5lIEJQV00xIEJQV00xX05TCisjZWxzZQorIyBkZWZpbmUgQlBXTTEgQlBXTTFfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDNfVkFMICYgQklUMCApCisjIGRlZmluZSBRU1BJMCBRU1BJMF9OUworI2Vsc2UKKyMgZGVmaW5lIFFTUEkwIFFTUEkwX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUM19WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCAmIEJJVDEgKQorIyBkZWZpbmUgU1BJMCBTUEkwX05TCisjZWxzZQorIyBkZWZpbmUgU1BJMCBTUEkwX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUM19WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCAmIEJJVDIgKQorIyBkZWZpbmUgU1BJMSBTUEkxX05TCisjZWxzZQorIyBkZWZpbmUgU1BJMSBTUEkxX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUM19WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCAmIEJJVDMgKQorIyBkZWZpbmUgU1BJMiBTUEkyX05TCisjZWxzZQorIyBkZWZpbmUgU1BJMiBTUEkyX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUM19WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCAmIEJJVDQgKQorIyBkZWZpbmUgU1BJMyBTUEkzX05TCisjZWxzZQorIyBkZWZpbmUgU1BJMyBTUEkzX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUM19WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCAmIEJJVDE2KQorIyBkZWZpbmUgVUFSVDAgVUFSVDBfTlMKKyNlbHNlCisjIGRlZmluZSBVQVJUMCBVQVJUMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDNfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUM19WQUwgJiBCSVQxNykKKyMgZGVmaW5lIFVBUlQxIFVBUlQxX05TCisjZWxzZQorIyBkZWZpbmUgVUFSVDEgVUFSVDFfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDNfVkFMICYgQklUMTgpCisjIGRlZmluZSBVQVJUMiBVQVJUMl9OUworI2Vsc2UKKyMgZGVmaW5lIFVBUlQyIFVBUlQyX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUM19WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCAmIEJJVDE5KQorIyBkZWZpbmUgVUFSVDMgVUFSVDNfTlMKKyNlbHNlCisjIGRlZmluZSBVQVJUMyBVQVJUM19TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDNfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUM19WQUwgJiBCSVQyMCkKKyMgZGVmaW5lIFVBUlQ0IFVBUlQ0X05TCisjZWxzZQorIyBkZWZpbmUgVUFSVDQgVUFSVDRfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQzX1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDNfVkFMICYgQklUMjEpCisjIGRlZmluZSBVQVJUNSBVQVJUNV9OUworI2Vsc2UKKyMgZGVmaW5lIFVBUlQ1IFVBUlQ1X1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNF9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ0X1ZBTCAmIEJJVDAgKQorIyBkZWZpbmUgSTJDMCBJMkMwX05TCisjZWxzZQorIyBkZWZpbmUgSTJDMCBJMkMwX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNF9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ0X1ZBTCAmIEJJVDEgKQorIyBkZWZpbmUgSTJDMSBJMkMxX05TCisjZWxzZQorIyBkZWZpbmUgSTJDMSBJMkMxX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNF9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ0X1ZBTCAmIEJJVDIgKQorIyBkZWZpbmUgSTJDMiBJMkMyX05TCisjZWxzZQorIyBkZWZpbmUgSTJDMiBJMkMyX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNF9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ0X1ZBTCAmIEJJVDE2KQorIyBkZWZpbmUgU0MwIFNDMF9OUworI2Vsc2UKKyMgZGVmaW5lIFNDMCBTQzBfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQ0X1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDRfVkFMICYgQklUMTcpCisjIGRlZmluZSBTQzEgU0MxX05TCisjZWxzZQorIyBkZWZpbmUgU0MxIFNDMV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDRfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNF9WQUwgJiBCSVQxOCkKKyMgZGVmaW5lIFNDMiBTQzJfTlMKKyNlbHNlCisjIGRlZmluZSBTQzIgU0MyX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNV9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ1X1ZBTCAmIEJJVDAgKQorIyBkZWZpbmUgQ0FOMCBDQU4wX05TCisjZWxzZQorIyBkZWZpbmUgQ0FOMCBDQU4wX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNV9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ1X1ZBTCAmIEJJVDE2KQorIyBkZWZpbmUgUUVJMCBRRUkwX05TCisjZWxzZQorIyBkZWZpbmUgUUVJMCBRRUkwX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNV9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ1X1ZBTCAmIEJJVDE3KQorIyBkZWZpbmUgUUVJMSBRRUkxX05TCisjZWxzZQorIyBkZWZpbmUgUUVJMSBRRUkxX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNV9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ1X1ZBTCAmIEJJVDIwKQorIyBkZWZpbmUgRUNBUDAgRUNBUDBfTlMKKyNlbHNlCisjIGRlZmluZSBFQ0FQMCBFQ0FQMF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDVfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNV9WQUwgJiBCSVQyMSkKKyMgZGVmaW5lIEVDQVAxIEVDQVAxX05TCisjZWxzZQorIyBkZWZpbmUgRUNBUDEgRUNBUDFfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9QTlNTRVQ1X1ZBTCkgJiYgKFNDVV9JTklUX1BOU1NFVDVfVkFMICYgQklUMjUpCisjIGRlZmluZSBUUk5HIFRSTkdfTlMKKyNlbHNlCisjIGRlZmluZSBUUk5HIFRSTkdfUworI2VuZGlmCisKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDZfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNl9WQUwgJiBCSVQwICkKKyMgZGVmaW5lIFVTQkQgVVNCRF9OUworI2Vsc2UKKyMgZGVmaW5lIFVTQkQgVVNCRF9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX1BOU1NFVDZfVkFMKSAmJiAoU0NVX0lOSVRfUE5TU0VUNl9WQUwgJiBCSVQxNikKKyMgZGVmaW5lIFVTQ0kwICBVU0NJMF9OUworIyBkZWZpbmUgVUkyQzAgIFVJMkMwX05TCisjIGRlZmluZSBVU1BJMCAgVVNQSTBfTlMKKyMgZGVmaW5lIFVVQVJUMCBVVUFSVDBfTlMKKyNlbHNlCisjIGRlZmluZSBVU0NJMCAgVVNDSTBfUworIyBkZWZpbmUgVUkyQzAgIFVJMkMwX1MKKyMgZGVmaW5lIFVTUEkwICBVU1BJMF9TCisjIGRlZmluZSBVVUFSVDAgVVVBUlQwX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfUE5TU0VUNl9WQUwpICYmIChTQ1VfSU5JVF9QTlNTRVQ2X1ZBTCAmIEJJVDE3KQorIyBkZWZpbmUgVVNDSTEgIFVTQ0kxX05TCisjIGRlZmluZSBVSTJDMSAgVUkyQzFfTlMKKyMgZGVmaW5lIFVTUEkxICBVU1BJMV9OUworIyBkZWZpbmUgVVVBUlQxIFVVQVJUMV9OUworI2Vsc2UKKyMgZGVmaW5lIFVTQ0kxICBVU0NJMV9TCisjIGRlZmluZSBVSTJDMSAgVUkyQzFfUworIyBkZWZpbmUgVVNQSTEgIFVTUEkxX1MKKyMgZGVmaW5lIFVVQVJUMSBVVUFSVDFfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUMCApCisjIGRlZmluZSBQQSBQQV9OUworI2Vsc2UKKyMgZGVmaW5lIFBBIFBBX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfSU9OU1NFVF9WQUwpICYmIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCAmIEJJVDEgKQorIyBkZWZpbmUgUEIgUEJfTlMKKyNlbHNlCisjIGRlZmluZSBQQiBQQl9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQyICkKKyMgZGVmaW5lIFBDIFBDX05TCisjZWxzZQorIyBkZWZpbmUgUEMgUENfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUMyApCisjIGRlZmluZSBQRCBQRF9OUworI2Vsc2UKKyMgZGVmaW5lIFBEIFBEX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfSU9OU1NFVF9WQUwpICYmIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCAmIEJJVDQgKQorIyBkZWZpbmUgUEUgUEVfTlMKKyNlbHNlCisjIGRlZmluZSBQRSBQRV9TCisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQ1ICkKKyMgZGVmaW5lIFBGIFBGX05TCisjZWxzZQorIyBkZWZpbmUgUEYgUEZfUworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUNiApCisjIGRlZmluZSBQRyBQR19OUworI2Vsc2UKKyMgZGVmaW5lIFBHIFBHX1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfSU9OU1NFVF9WQUwpICYmIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCAmIEJJVDcgKQorIyBkZWZpbmUgUEggUEhfTlMKKyNlbHNlCisjIGRlZmluZSBQSCBQSF9TCisjZW5kaWYKKworCisvKipAfSovIC8qIGVuZCBvZiBncm91cCBQTU9EVUxFICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBFbmQgb2Ygc2VjdGlvbiB1c2luZyBhbm9ueW1vdXMgdW5pb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWYgICBkZWZpbmVkIChfX0NDX0FSTSkKKyNwcmFnbWEgcG9wCisjZWxpZiBkZWZpbmVkIChfX0lDQ0FSTV9fKQorLyogbGVhdmUgYW5vbnltb3VzIHVuaW9ucyBlbmFibGVkICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCisvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbGlmIGRlZmluZWQgKF9fVE1TNDcwX18pCisvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbGlmIGRlZmluZWQgKF9fVEFTS0lOR19fKQorI3ByYWdtYSB3YXJuaW5nIHJlc3RvcmUKKyNlbGlmIGRlZmluZWQgKF9fQ1NNQ19fKQorLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxzZQorI3dhcm5pbmcgTm90IHN1cHBvcnRlZCBjb21waWxlciB0eXBlCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgUGVyaXBoZXJhbCBoZWFkZXIgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic3lzLmgiCisjaW5jbHVkZSAiY2xrLmgiCisjaW5jbHVkZSAiZGFjLmgiCisjaW5jbHVkZSAiZWFkYy5oIgorI2luY2x1ZGUgImViaS5oIgorI2luY2x1ZGUgImVjYXAuaCIKKyNpbmNsdWRlICJmbWMuaCIKKyNpbmNsdWRlICJncGlvLmgiCisjaW5jbHVkZSAiaTJjLmgiCisjaW5jbHVkZSAiaTJzLmgiCisjaW5jbHVkZSAiYnB3bS5oIgorI2luY2x1ZGUgImVwd20uaCIKKyNpbmNsdWRlICJxc3BpLmgiCisjaW5jbHVkZSAic3BpLmgiCisjaW5jbHVkZSAidGltZXIuaCIKKyNpbmNsdWRlICJ0aW1lcl9wd20uaCIKKyNpbmNsdWRlICJ3ZHQuaCIKKyNpbmNsdWRlICJ3d2R0LmgiCisjaW5jbHVkZSAicnRjLmgiCisjaW5jbHVkZSAidWFydC5oIgorI2luY2x1ZGUgImFjbXAuaCIKKyNpbmNsdWRlICJjcmMuaCIKKyNpbmNsdWRlICJ1c2JkLmgiCisjaW5jbHVkZSAib3RnLmgiCisjaW5jbHVkZSAicGRtYS5oIgorI2luY2x1ZGUgImViaS5oIgorI2luY2x1ZGUgImNyeXB0by5oIgorI2luY2x1ZGUgInNjLmgiCisjaW5jbHVkZSAic2N1YXJ0LmgiCisjaW5jbHVkZSAidXNjaV9zcGkuaCIKKyNpbmNsdWRlICJ1c2NpX3VhcnQuaCIKKyNpbmNsdWRlICJ1c2NpX2kyYy5oIgorI2luY2x1ZGUgInNkaC5oIgorI2luY2x1ZGUgInFlaS5oIgorI2luY2x1ZGUgImNhbi5oIgorI2luY2x1ZGUgInNjdS5oIgorI2luY2x1ZGUgIm1rcm9tbGliLmgiCisKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM0wpCisjIGluY2x1ZGUgInBhcnRpdGlvbl9NMjM1MS5oIgorI2VuZGlmCisKKworI2VuZGlmICAvKiBfX00yMzUxX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvTnVNaWNyby5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL051TWljcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGI5YTRkCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL051TWljcm8uaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgTnVNaWNyby5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBOdU1pY3JvIHBlcmlwaGVyYWwgYWNjZXNzIGxheWVyIGhlYWRlciBmaWxlLgorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTlVNSUNST19IX18KKyNkZWZpbmUgX19OVU1JQ1JPX0hfXworCisjaW5jbHVkZSAiTTIzNTEuaCIKKworI2VuZGlmICAvKiBfX05VTUlDUk9fSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9hY21wX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2FjbXBfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlZTUwMAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9hY21wX3JlZy5oCkBAIC0wLDAgKzEsMjY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgYWNtcF9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgQUNNUCByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BQ01QX1JFR19IX18KKyNkZWZpbmUgX19BQ01QX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBbmFsb2cgQ29tcGFyYXRvciBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgQUNNUCBBbmFsb2cgQ29tcGFyYXRvciBDb250cm9sbGVyKEFDTVApCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIEFDTVAgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBBQ01QX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHgwMCAgQW5hbG9nIENvbXBhcmF0b3IgMCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QUNNUEVOICAgIHxDb21wYXJhdG9yIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyYXRvciAwIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJhdG9yIDAgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzFdICAgICB8QUNNUElFICAgIHxDb21wYXJhdG9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmF0b3IgMCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmF0b3IgMCBpbnRlcnJ1cHQgRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFdLRU4gKEFDTVBfQ1RMMFsxNl0pIGlzIHNldCB0byAxLCB0aGUgd2FrZS11cCBpbnRlcnJ1cHQgZnVuY3Rpb24gd2lsbCBiZSBlbmFibGVkIGFzIHdlbGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsyXSAgICAgfEhZU0VOICAgICB8Q29tcGFyYXRvciBIeXN0ZXJlc2lzIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyYXRvciAwIGh5c3RlcmVzaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmF0b3IgMCBoeXN0ZXJlc2lzIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSFlTRU4gPSAwLCB1c2VyIGNhbiBhZGp1c3QgSFlTIGJ5IEhZU1NFTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBIWVNFTiA9IDEsIEhZU1NFTCBpcyBpbnZhbGlkLiBUaGUgSHlzdGVyZXNpcyBpcyBmaXhlZCB0byAzMG1WLgorICAgICAqIHxbM10gICAgIHxBQ01QT0lOViAgfENvbXBhcmF0b3IgT3V0cHV0IEludmVyc2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyYXRvciAwIG91dHB1dCBpbnZlcnNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJhdG9yIDAgb3V0cHV0IGludmVyc2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzU6NF0gICB8TkVHU0VMICAgIHxDb21wYXJhdG9yIE5lZ2F0aXZlIElucHV0IFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQUNNUDBfTiBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBJbnRlcm5hbCBjb21wYXJhdG9yIHJlZmVyZW5jZSB2b2x0YWdlIChDUlYpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQmFuZC1nYXAgdm9sdGFnZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IERBQyBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFs3OjZdICAgfFBPU1NFTCAgICB8Q29tcGFyYXRvciBQb3NpdGl2ZSBJbnB1dCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IElucHV0IGZyb20gQUNNUDBfUDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBJbnB1dCBmcm9tIEFDTVAwX1AxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gSW5wdXQgZnJvbSBBQ01QMF9QMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IElucHV0IGZyb20gQUNNUDBfUDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFs5OjhdICAgfElOVFBPTCAgICB8SW50ZXJydXB0IENvbmRpdGlvbiBQb2xhcml0eSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBQ01QSUYwIHdpbGwgYmUgc2V0IHRvIDEgd2hlbiBjb21wYXJhdG9yIG91dHB1dCBlZGdlIGNvbmRpdGlvbiBpcyBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFJpc2luZyBlZGdlIG9yIGZhbGxpbmcgZWRnZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJpc2luZyBlZGdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRmFsbGluZyBlZGdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsxMl0gICAgfE9VVFNFTCAgICB8Q29tcGFyYXRvciBPdXRwdXQgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmF0b3IgMCBvdXRwdXQgdG8gQUNNUDBfTyBwaW4gaXMgdW5maWx0ZXJlZCBjb21wYXJhdG9yIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyYXRvciAwIG91dHB1dCB0byBBQ01QMF9PIHBpbiBpcyBmcm9tIGZpbHRlciBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsxNToxM10gfEZJTFRTRUwgICB8Q29tcGFyYXRvciBPdXRwdXQgRmlsdGVyIENvdW50IFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IEZpbHRlciBmdW5jdGlvbiBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBBQ01QMCBvdXRwdXQgaXMgc2FtcGxlZCAxIGNvbnNlY3V0aXZlIFBDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gQUNNUDAgb3V0cHV0IGlzIHNhbXBsZWQgMiBjb25zZWN1dGl2ZSBQQ0xLcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBBQ01QMCBvdXRwdXQgaXMgc2FtcGxlZCA0IGNvbnNlY3V0aXZlIFBDTEtzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IEFDTVAwIG91dHB1dCBpcyBzYW1wbGVkIDggY29uc2VjdXRpdmUgUENMS3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gQUNNUDAgb3V0cHV0IGlzIHNhbXBsZWQgMTYgY29uc2VjdXRpdmUgUENMS3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gQUNNUDAgb3V0cHV0IGlzIHNhbXBsZWQgMzIgY29uc2VjdXRpdmUgUENMS3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gQUNNUDAgb3V0cHV0IGlzIHNhbXBsZWQgNjQgY29uc2VjdXRpdmUgUENMS3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsxNl0gICAgfFdLRU4gICAgICB8UG93ZXItZG93biBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbMTddICAgIHxXTEFURU4gICAgfFdpbmRvdyBMYXRjaCBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2luZG93IExhdGNoIE1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdpbmRvdyBMYXRjaCBNb2RlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFsxOF0gICAgfFdDTVBTRUwgICB8V2luZG93IENvbXBhcmUgTW9kZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2luZG93IENvbXBhcmUgTW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2luZG93IENvbXBhcmUgTW9kZSBpcyBTZWxlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzI1OjI0XSB8SFlTU0VMICAgIHxIeXN0ZXJlc2lzIE1vZGUgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBIeXN0ZXJlc2lzIGlzIDBtVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEh5c3RlcmVzaXMgaXMgMTBtVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEh5c3RlcmVzaXMgaXMgMjBtVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEh5c3RlcmVzaXMgaXMgMzBtVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzI5OjI4XSB8TU9ERVNFTCAgIHxQcm9wYWdhdGlvbiBEZWxheSBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTWF4IHByb3BhZ2F0aW9uIGRlbGF5IGlzIDQuNXVTLCBvcGVyYXRpb24gY3VycmVudCBpcyAxLjJ1QS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IE1heCBwcm9wYWdhdGlvbiBkZWxheSBpcyAydVMsIG9wZXJhdGlvbiBjdXJyZW50IGlzIDN1QS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IE1heCBwcm9wYWdhdGlvbiBkZWxheSBpcyA2MDBuUywgb3BlcmF0aW9uIGN1cnJlbnQgaXMgMTB1QS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IE1heCBwcm9wYWdhdGlvbiBkZWxheSBpcyAyMDBuUywgb3BlcmF0aW9uIGN1cnJlbnQgaXMgNzV1QS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKworICAgICAqIEB2YXIgQUNNUF9UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MDggIEFuYWxvZyBDb21wYXJhdG9yIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFDTVBJRjAgICB8Q29tcGFyYXRvciAwIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gdGhlIGVkZ2UgY29uZGl0aW9uIGRlZmluZWQgYnkgSU5UUE9MIChBQ01QX0NUTDBbOTo4XSkgaXMgZGV0ZWN0ZWQgb24gY29tcGFyYXRvciAwIG91dHB1dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgaWYgQUNNUElFIChBQ01QX0NUTDBbMV0pIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzFdICAgICB8QUNNUElGMSAgIHxDb21wYXJhdG9yIDEgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiB0aGUgZWRnZSBjb25kaXRpb24gZGVmaW5lZCBieSBJTlRQT0wgKEFDTVBfQ1RMMVs5OjhdKSBpcyBkZXRlY3RlZCBvbiBjb21wYXJhdG9yIDEgb3V0cHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyB3aWxsIGNhdXNlIGFuIGludGVycnVwdCBpZiBBQ01QSUUgKEFDTVBfQ1RMMVsxXSkgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbNF0gICAgIHxBQ01QTzAgICAgfENvbXBhcmF0b3IgMCBPdXRwdXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTeW5jaHJvbml6ZWQgdG8gdGhlIFBDTEsgdG8gYWxsb3cgcmVhZGluZyBieSBzb2Z0d2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENsZWFyZWQgd2hlbiB0aGUgY29tcGFyYXRvciAwIGlzIGRpc2FibGVkLCBpLmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBQ01QRU4gKEFDTVBfQ1RMMFswXSkgaXMgY2xlYXJlZCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbNV0gICAgIHxBQ01QTzEgICAgfENvbXBhcmF0b3IgMSBPdXRwdXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTeW5jaHJvbml6ZWQgdG8gdGhlIFBDTEsgdG8gYWxsb3cgcmVhZGluZyBieSBzb2Z0d2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENsZWFyZWQgd2hlbiB0aGUgY29tcGFyYXRvciAxIGlzIGRpc2FibGVkLCBpLmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBQ01QRU4gKEFDTVBfQ1RMMVswXSkgaXMgY2xlYXJlZCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbOF0gICAgIHxXS0lGMCAgICAgfENvbXBhcmF0b3IgMCBQb3dlci1kb3duIFdha2UtdXAgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIHNldCB0byAxIHdoZW4gQUNNUDAgd2FrZS11cCBpbnRlcnJ1cHQgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBwb3dlci1kb3duIHdha2UtdXAgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvd2VyLWRvd24gd2FrZS11cCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8CisgICAgICogfFs5XSAgICAgfFdLSUYxICAgICB8Q29tcGFyYXRvciAxIFBvd2VyLWRvd24gV2FrZS11cCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgc2V0IHRvIDEgd2hlbiBBQ01QMSB3YWtlLXVwIGludGVycnVwdCBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHBvd2VyLWRvd24gd2FrZS11cCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG93ZXItZG93biB3YWtlLXVwIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiB8WzEyXSAgICB8QUNNUFMwICAgIHxDb21wYXJhdG9yIDAgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U3luY2hyb25pemVkIHRvIHRoZSBQQ0xLIHRvIGFsbG93IHJlYWRpbmcgYnkgc29mdHdhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDbGVhcmVkIHdoZW4gdGhlIGNvbXBhcmF0b3IgMCBpcyBkaXNhYmxlZCwgaS5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QUNNUEVOIChBQ01QX0NUTDBbMF0pIGlzIGNsZWFyZWQgdG8gMC4KKyAgICAgKiB8WzEzXSAgICB8QUNNUFMxICAgIHxDb21wYXJhdG9yIDEgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U3luY2hyb25pemVkIHRvIHRoZSBQQ0xLIHRvIGFsbG93IHJlYWRpbmcgYnkgc29mdHdhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDbGVhcmVkIHdoZW4gdGhlIGNvbXBhcmF0b3IgMSBpcyBkaXNhYmxlZCwgaS5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QUNNUEVOIChBQ01QX0NUTDFbMF0pIGlzIGNsZWFyZWQgdG8gMC4KKyAgICAgKiB8WzE2XSAgICB8QUNNUFdPICAgIHxDb21wYXJhdG9yIFdpbmRvdyBPdXRwdXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBzaG93cyB0aGUgb3V0cHV0IHN0YXR1cyBvZiB3aW5kb3cgY29tcGFyZSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBwb3NpdGl2ZSBpbnB1dCB2b2x0YWdlIGlzIG91dHNpZGUgdGhlIHdpbmRvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHBvc2l0aXZlIGlucHV0IHZvbHRhZ2UgaXMgaW4gdGhlIHdpbmRvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKiBAdmFyIEFDTVBfVDo6VlJFRgorICAgICAqIE9mZnNldDogMHgwQyAgQW5hbG9nIENvbXBhcmF0b3IgUmVmZXJlbmNlIFZvbHRhZ2UgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfENSVkNUTCAgICB8Q29tcGFyYXRvciBSZWZlcmVuY2UgVm9sdGFnZSBTZXR0aW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JWID0gQ1JWIHNvdXJjZSB2b2x0YWdlICogKDEvNitDUlZDVEwvMjQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfAorICAgICAqIHxbNl0gICAgIHxDUlZTU0VMICAgfENSViBTb3VyY2UgVm9sdGFnZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVkREQSBpcyBzZWxlY3RlZCBhcyBDUlYgc291cmNlIHZvbHRhZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWZlcmVuY2Ugdm9sdGFnZSBkZWZpbmVkIGJ5IFNZU19WUkVGQ1RMIHJlZ2lzdGVyIGlzIHNlbGVjdGVkIGFzIENSViBzb3VyY2Ugdm9sdGFnZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTFsyXTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwfjB4MDAwNF0gQW5hbG9nIENvbXBhcmF0b3IgMH4xIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1RBVFVTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIEFuYWxvZyBDb21wYXJhdG9yIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFZSRUY7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBBbmFsb2cgQ29tcGFyYXRvciBSZWZlcmVuY2UgVm9sdGFnZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICovCisKK30gQUNNUF9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBBQ01QX0NPTlNUIEFDTVAgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgQUNNUCBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIEFDTVBfQ1RMX0FDTVBFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBBQ01QRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfQUNNUEVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9DVExfQUNNUEVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IEFDTVBFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX0FDTVBJRV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBBQ01QSUUgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfQUNNUElFX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9DVExfQUNNUElFX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IEFDTVBJRSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX0hZU0VOX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBIWVNFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfSFlTRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9DVExfSFlTRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IEhZU0VOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX0FDTVBPSU5WX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBBQ01QT0lOViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfQUNNUE9JTlZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9DVExfQUNNUE9JTlZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IEFDTVBPSU5WIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX05FR1NFTF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBORUdTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfTkVHU0VMX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgQUNNUF9DVExfTkVHU0VMX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IE5FR1NFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX1BPU1NFTF9Qb3MgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBQT1NTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfUE9TU0VMX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgQUNNUF9DVExfUE9TU0VMX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IFBPU1NFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX0lOVFBPTF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBJTlRQT0wgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfSU5UUE9MX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgQUNNUF9DVExfSU5UUE9MX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IElOVFBPTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX09VVFNFTF9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBPVVRTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfT1VUU0VMX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9DVExfT1VUU0VMX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IE9VVFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX0ZJTFRTRUxfUG9zICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBGSUxUU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfRklMVFNFTF9Nc2sgICAgICAgICAgICAoMHg3dWwgPDwgQUNNUF9DVExfRklMVFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IEZJTFRTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX1dLRU5fUG9zICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfV0tFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9DVExfV0tFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IFdLRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX1dMQVRFTl9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBXTEFURU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfV0xBVEVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9DVExfV0xBVEVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IFdMQVRFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX1dDTVBTRUxfUG9zICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBXQ01QU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfV0NNUFNFTF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9DVExfV0NNUFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IFdDTVBTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX0hZU1NFTF9Qb3MgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBIWVNTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfSFlTU0VMX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgQUNNUF9DVExfSFlTU0VMX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IEhZU1NFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfQ1RMX01PREVTRUxfUG9zICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6Q1RMOiBNT0RFU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9DVExfTU9ERVNFTF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgQUNNUF9DVExfTU9ERVNFTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpDVEw6IE1PREVTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfU1RBVFVTX0FDTVBJRjBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogQUNNUElGMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QSUYwX01zayAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9TVEFUVVNfQUNNUElGMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBJRjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QSUYxX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBJRjEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQUNNUF9TVEFUVVNfQUNNUElGMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfU1RBVFVTX0FDTVBJRjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBBQ01QSUYxIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQUNNUF9TVEFUVVNfQUNNUE8wX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBBQ01QTzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEFDTVBfU1RBVFVTX0FDTVBPMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBBQ01QX1NUQVRVU19BQ01QTzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogQUNNUE8wIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfU1RBVFVTX0FDTVBPMV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogQUNNUE8xIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QTzFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9TVEFUVVNfQUNNUE8xX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBPMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX1NUQVRVU19XS0lGMF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IFdLSUYwIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9TVEFUVVNfV0tJRjBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfU1RBVFVTX1dLSUYwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBXS0lGMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQUNNUF9TVEFUVVNfV0tJRjFfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBXS0lGMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEFDTVBfU1RBVFVTX1dLSUYxX01zayAgICAgICAgICAgICgweDF1bCA8PCBBQ01QX1NUQVRVU19XS0lGMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogV0tJRjEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfU1RBVFVTX0FDTVBTMF9Qb3MgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogQUNNUFMwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QUzBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQUNNUF9TVEFUVVNfQUNNUFMwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBTMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX1NUQVRVU19BQ01QUzFfUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpTVEFUVVM6IEFDTVBTMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9TVEFUVVNfQUNNUFMxX01zayAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfU1RBVFVTX0FDTVBTMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBBQ01QUzEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQUNNUF9TVEFUVVNfQUNNUFdPX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6U1RBVFVTOiBBQ01QV08gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEFDTVBfU1RBVFVTX0FDTVBXT19Nc2sgICAgICAgICAgICgweDF1bCA8PCBBQ01QX1NUQVRVU19BQ01QV09fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlNUQVRVUzogQUNNUFdPIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEFDTVBfVlJFRl9DUlZDVExfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ01QX1Q6OlZSRUY6IENSVkNUTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBBQ01QX1ZSRUZfQ1JWQ1RMX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgQUNNUF9WUkVGX0NSVkNUTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpWUkVGOiBDUlZDVEwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBQ01QX1ZSRUZfQ1JWU1NFTF9Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNNUF9UOjpWUkVGOiBDUlZTU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQUNNUF9WUkVGX0NSVlNTRUxfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEFDTVBfVlJFRl9DUlZTU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEFDTVBfVDo6VlJFRjogQ1JWU1NFTCBNYXNrICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogQUNNUF9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgQUNNUCByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworI2VuZGlmIC8qIF9fQUNNUF9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvYnB3bV9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9icHdtX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OWEwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvYnB3bV9yZWcuaApAQCAtMCwwICsxLDE3OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBicHdtX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBCUFdNIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0JQV01fUkVHX0hfXworI2RlZmluZSBfX0JQV01fUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJhc2ljIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIEJQV00gQmFzaWMgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyKEJQV00pCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIEJQV00gQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKioKKyAgICAgKiBAdmFyIEJDQVBEQVRfVDo6UkNBUERBVAorICAgICAqIE9mZnNldDogMHgyMEMgIEJQV00gUmlzaW5nIENhcHR1cmUgRGF0YSBSZWdpc3RlciAwfjUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxSQ0FQREFUICAgfEJQV00gUmlzaW5nIENhcHR1cmUgRGF0YSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gcmlzaW5nIGNhcHR1cmUgY29uZGl0aW9uIGhhcHBlbmVkLCB0aGUgQlBXTSBjb3VudGVyIHZhbHVlIHdpbGwgYmUgc2F2ZWQgaW4gdGhpcyByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEJDQVBEQVRfVDo6RkNBUERBVAorICAgICAqIE9mZnNldDogMHgyMTAgIEJQV00gRmFsbGluZyBDYXB0dXJlIERhdGEgUmVnaXN0ZXIgMH41CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8RkNBUERBVCAgIHxCUFdNIEZhbGxpbmcgQ2FwdHVyZSBEYXRhIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBmYWxsaW5nIGNhcHR1cmUgY29uZGl0aW9uIGhhcHBlbmVkLCB0aGUgQlBXTSBjb3VudGVyIHZhbHVlIHdpbGwgYmUgc2F2ZWQgaW4gdGhpcyByZWdpc3Rlci4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFJDQVBEQVQ7IC8qITwgWzB4MjBDLzB4MjE0LzB4MjFDLzB4MjI0LzB4MjJDLzB4MjM0XSBCUFdNIFJpc2luZyBDYXB0dXJlIERhdGEgUmVnaXN0ZXIgMH41ICovCisgICAgX19JTyB1aW50MzJfdCBGQ0FQREFUOyAvKiE8IFsweDIxMC8weDIxOC8weDIyMC8weDIyOC8weDIzMC8weDIzOF0gQlBXTSBGYWxsaW5nIENhcHR1cmUgRGF0YSBSZWdpc3RlciAwfjUgKi8KK30gQkNBUERBVF9UOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqCisgICAgICogQHZhciBCUFdNX1Q6OkNUTDAKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIEJQV00gQ29udHJvbCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1RSTEQwICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdXAtZG93biBjb3VudGVyIHR5cGUsIFBFUklPRCB3aWxsIGxvYWQgdG8gUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUIHdpbGwgbG9hZCB0byBDTVBCVUYgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZAorICAgICAqIHxbMV0gICAgIHxDVFJMRDEgICAgfENlbnRlciBSZS1sb2FkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgY2VudGVyIHBvaW50IG9mIGEgcGVyaW9kCisgICAgICogfFsyXSAgICAgfENUUkxEMiAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QKKyAgICAgKiB8WzNdICAgICB8Q1RSTEQzICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdXAtZG93biBjb3VudGVyIHR5cGUsIFBFUklPRCB3aWxsIGxvYWQgdG8gUEJVRiBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUIHdpbGwgbG9hZCB0byBDTVBCVUYgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZAorICAgICAqIHxbNF0gICAgIHxDVFJMRDQgICAgfENlbnRlciBSZS1sb2FkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50ZXIgdHlwZSwgUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgY2VudGVyIHBvaW50IG9mIGEgcGVyaW9kCisgICAgICogfFs1XSAgICAgfENUUkxENSAgICB8Q2VudGVyIFJlLWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBjZW50ZXIgcG9pbnQgb2YgYSBwZXJpb2QKKyAgICAgKiB8WzE2XSAgICB8SU1NTERFTjAgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXQoUykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QvQ01QREFUIHdpbGwgbG9hZCB0byBQQlVGIGFuZCBDTVBCVUYgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9EL0NNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVObiBpcyBFbmFibGVkLCBXSU5MREVObiBhbmQgQ1RSTERuIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzE3XSAgICB8SU1NTERFTjEgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXQoUykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QvQ01QREFUIHdpbGwgbG9hZCB0byBQQlVGIGFuZCBDTVBCVUYgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9EL0NNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVObiBpcyBFbmFibGVkLCBXSU5MREVObiBhbmQgQ1RSTERuIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzE4XSAgICB8SU1NTERFTjIgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXQoUykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QvQ01QREFUIHdpbGwgbG9hZCB0byBQQlVGIGFuZCBDTVBCVUYgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9EL0NNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVObiBpcyBFbmFibGVkLCBXSU5MREVObiBhbmQgQ1RSTERuIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzE5XSAgICB8SU1NTERFTjMgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXQoUykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QvQ01QREFUIHdpbGwgbG9hZCB0byBQQlVGIGFuZCBDTVBCVUYgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9EL0NNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVObiBpcyBFbmFibGVkLCBXSU5MREVObiBhbmQgQ1RSTERuIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzIwXSAgICB8SU1NTERFTjQgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXQoUykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QvQ01QREFUIHdpbGwgbG9hZCB0byBQQlVGIGFuZCBDTVBCVUYgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9EL0NNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVObiBpcyBFbmFibGVkLCBXSU5MREVObiBhbmQgQ1RSTERuIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzIxXSAgICB8SU1NTERFTjUgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXQoUykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVCB3aWxsIGxvYWQgdG8gQ01QQlVGIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QvQ01QREFUIHdpbGwgbG9hZCB0byBQQlVGIGFuZCBDTVBCVUYgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9EL0NNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVObiBpcyBFbmFibGVkLCBXSU5MREVObiBhbmQgQ1RSTERuIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzMwXSAgICB8REJHSEFMVCAgIHxJQ0UgRGVidWcgTW9kZSBDb3VudGVyIEhhbHQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgY291bnRlciBoYWx0IGlzIGVuYWJsZWQsIEJQV00gYWxsIGNvdW50ZXJzIHdpbGwga2VlcCBjdXJyZW50IHZhbHVlIHVudGlsIGV4aXQgSUNFIGRlYnVnIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElDRSBkZWJ1ZyBtb2RlIGNvdW50ZXIgaGFsdCBEaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJQ0UgZGVidWcgbW9kZSBjb3VudGVyIGhhbHQgRW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzMxXSAgICB8REJHVFJJT0ZGIHxJQ0UgRGVidWcgTW9kZSBBY2tub3dsZWRnZSBEaXNhYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnZW1lbnQgZWZmZWN0cyBCUFdNIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIHBpbiB3aWxsIGJlIGZvcmNlZCBhcyB0cmktc3RhdGUgd2hpbGUgSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnZW1lbnQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBwaW4gd2lsbCBrZWVwIG91dHB1dCBubyBtYXR0ZXIgSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ2VkIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBCUFdNX1Q6OkNUTDEKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIEJQV00gQ29udHJvbCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8Q05UVFlQRTAgIHxCUFdNIENvdW50ZXIgQmVoYXZpb3IgVHlwZSAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVXAgY291bnRlciB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRG93biBjb3VudCB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiBAdmFyIEJQV01fVDo6Q0xLU1JDCisgICAgICogT2Zmc2V0OiAweDEwICBCUFdNIENsb2NrIFNvdXJjZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyOjBdICAgfEVDTEtTUkMwICB8QlBXTV9DSDAxIEV4dGVybmFsIENsb2NrIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBCUFdNeF9DTEssIHggZGVub3RlcyAwIG9yIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gVElNRVIwIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFRJTUVSMSBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBUSU1FUjIgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gVElNRVIzIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIEB2YXIgQlBXTV9UOjpDTEtQU0MKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIEJQV00gQ2xvY2sgUHJlc2NhbGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTE6MF0gIHxDTEtQU0MgICAgfEJQV00gQ291bnRlciBDbG9jayBQcmVzY2FsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjbG9jayBvZiBCUFdNIGNvdW50ZXIgaXMgZGVjaWRlZCBieSBjbG9jayBwcmVzY2FsZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIEJQV00gcGFpciBzaGFyZSBvbmUgQlBXTSBjb3VudGVyIGNsb2NrIHByZXNjYWxlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjbG9jayBvZiBCUFdNIGNvdW50ZXIgaXMgZGl2aWRlZCBieSAoQ0xLUFNDKyAxKQorICAgICAqIEB2YXIgQlBXTV9UOjpDTlRFTgorICAgICAqIE9mZnNldDogMHgyMCAgQlBXTSBDb3VudGVyIEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVEVOMCAgICB8QlBXTSBDb3VudGVyIDAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBzdG9wIHJ1bm5pbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gQ291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGVyIHN0YXJ0IHJ1bm5pbmcuCisgICAgICogQHZhciBCUFdNX1Q6OkNOVENMUgorICAgICAqIE9mZnNldDogMHgyNCAgQlBXTSBDbGVhciBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q05UQ0xSMCAgIHxDbGVhciBCUFdNIENvdW50ZXIgQ29udHJvbCBCaXQgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBieSBoYXJkd2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciAxNi1iaXQgQlBXTSBjb3VudGVyIHRvIDAwMDBILgorICAgICAqIEB2YXIgQlBXTV9UOjpQRVJJT0QKKyAgICAgKiBPZmZzZXQ6IDB4MzAgIEJQV00gUGVyaW9kIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UEVSSU9EICAgIHxCUFdNIFBlcmlvZCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVwLUNvdW50IG1vZGU6IEluIHRoaXMgbW9kZSwgQlBXTSBjb3VudGVyIGNvdW50cyBmcm9tIDAgdG8gUEVSSU9ELCBhbmQgcmVzdGFydHMgZnJvbSAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERvd24tQ291bnQgbW9kZTogSW4gdGhpcyBtb2RlLCBCUFdNIGNvdW50ZXIgY291bnRzIGZyb20gUEVSSU9EIHRvIDAsIGFuZCByZXN0YXJ0cyBmcm9tIFBFUklPRC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIHBlcmlvZCB0aW1lID0gKFBFUklPRCsxKSAqIEJQV01fQ0xLIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVcC1Eb3duLUNvdW50IG1vZGU6IEluIHRoaXMgbW9kZSwgQlBXTSBjb3VudGVyIGNvdW50cyBmcm9tIDAgdG8gUEVSSU9ELCB0aGVuIGRlY3JlbWVudHMgdG8gMCBhbmQgcmVwZWF0cyBhZ2Fpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIHBlcmlvZCB0aW1lID0gMiAqIFBFUklPRCAqIEJQV01fQ0xLIHBlcmlvZC4KKyAgICAgKiBAdmFyIEJQV01fVDo6Q01QREFUWzZdCisgICAgICogT2Zmc2V0OiAweDUwICBCUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIgMH41CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8Q01QREFUICAgIHxCUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgdXNlIHRvIGNvbXBhcmUgd2l0aCBDTlRSIHRvIGdlbmVyYXRlIEJQV00gd2F2ZWZvcm0sIGludGVycnVwdCBhbmQgdHJpZ2dlciBFQURDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIGluZGVwZW5kZW50IG1vZGUsIENNUERBVDB+NSBkZW5vdGUgYXMgNiBpbmRlcGVuZGVudCBCUFdNX0NIMH41IGNvbXBhcmVkIHBvaW50LgorICAgICAqIEB2YXIgQlBXTV9UOjpDTlQKKyAgICAgKiBPZmZzZXQ6IDB4OTAgIEJQV00gQ291bnRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfENOVCAgICAgICB8QlBXTSBEYXRhIFJlZ2lzdGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gbW9uaXRvciBDTlRSIHRvIGtub3cgdGhlIGN1cnJlbnQgdmFsdWUgaW4gMTYtYml0IHBlcmlvZCBjb3VudGVyLgorICAgICAqIHxbMTZdICAgIHxESVJGICAgICAgfEJQV00gRGlyZWN0aW9uIEluZGljYXRvciBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvdW50ZXIgaXMgRG93biBjb3VudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ291bnRlciBpcyBVUCBjb3VudC4KKyAgICAgKiBAdmFyIEJQV01fVDo6V0dDVEwwCisgICAgICogT2Zmc2V0OiAweEIwICBCUFdNIEdlbmVyYXRpb24gUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfFpQQ1RMMCAgICB8QlBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgY291bnQgdG8gemVyby4KKyAgICAgKiB8WzM6Ml0gICB8WlBDVEwxICAgIHxCUFdNIFplcm8gUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbNTo0XSAgIHxaUENUTDIgICAgfEJQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFs3OjZdICAgfFpQQ1RMMyAgICB8QlBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgY291bnQgdG8gemVyby4KKyAgICAgKiB8Wzk6OF0gICB8WlBDVEw0ICAgIHxCUFdNIFplcm8gUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSB6ZXJvIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBjb3VudCB0byB6ZXJvLgorICAgICAqIHxbMTE6MTBdIHxaUENUTDUgICAgfEJQV00gWmVybyBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFsxNzoxNl0gfFBSRFBDVEwwICB8QlBXTSBQZXJpb2QgKENlbnRlcikgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBjb3VudCB0byAoUEVSSU9EKzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNlbnRlciBwb2ludCBjb250cm9sIHdoZW4gQlBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cC1kb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8WzE5OjE4XSB8UFJEUENUTDEgIHxCUFdNIFBlcmlvZCAoQ2VudGVyKSBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGNvdW50IHRvIChQRVJJT0QrMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2VudGVyIHBvaW50IGNvbnRyb2wgd2hlbiBCUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHxbMjE6MjBdIHxQUkRQQ1RMMiAgfEJQV00gUGVyaW9kIChDZW50ZXIpIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgY291bnQgdG8gKFBFUklPRCsxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjZW50ZXIgcG9pbnQgY29udHJvbCB3aGVuIEJQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfFsyMzoyMl0gfFBSRFBDVEwzICB8QlBXTSBQZXJpb2QgKENlbnRlcikgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBjb3VudCB0byAoUEVSSU9EKzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNlbnRlciBwb2ludCBjb250cm9sIHdoZW4gQlBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cC1kb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8WzI1OjI0XSB8UFJEUENUTDQgIHxCUFdNIFBlcmlvZCAoQ2VudGVyKSBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGNvdW50IHRvIChQRVJJT0QrMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2VudGVyIHBvaW50IGNvbnRyb2wgd2hlbiBCUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHxbMjc6MjZdIHxQUkRQQ1RMNSAgfEJQV00gUGVyaW9kIChDZW50ZXIpIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgY291bnQgdG8gKFBFUklPRCsxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjZW50ZXIgcG9pbnQgY29udHJvbCB3aGVuIEJQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogQHZhciBCUFdNX1Q6OldHQ1RMMQorICAgICAqIE9mZnNldDogMHhCNCAgQlBXTSBHZW5lcmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxDTVBVQ1RMMCAgfEJQV00gQ29tcGFyZSBVcCBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8WzM6Ml0gICB8Q01QVUNUTDEgIHxCUFdNIENvbXBhcmUgVXAgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQuCisgICAgICogfFs1OjRdICAgfENNUFVDVEwyICB8QlBXTSBDb21wYXJlIFVwIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFULgorICAgICAqIHxbNzo2XSAgIHxDTVBVQ1RMMyAgfEJQV00gQ29tcGFyZSBVcCBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8Wzk6OF0gICB8Q01QVUNUTDQgIHxCUFdNIENvbXBhcmUgVXAgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQuCisgICAgICogfFsxMToxMF0gfENNUFVDVEw1ICB8QlBXTSBDb21wYXJlIFVwIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFULgorICAgICAqIHxbMTc6MTZdIHxDTVBEQ1RMMCAgfEJQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byBDTVBEQVQuCisgICAgICogfFsxOToxOF0gfENNUERDVEwxICB8QlBXTSBDb21wYXJlIERvd24gUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8WzIxOjIwXSB8Q01QRENUTDIgIHxCUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIHxbMjM6MjJdIHxDTVBEQ1RMMyAgfEJQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QlBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byBDTVBEQVQuCisgICAgICogfFsyNToyNF0gfENNUERDVEw0ICB8QlBXTSBDb21wYXJlIERvd24gUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEJQV00gY29tcGFyZSBkb3duIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEJQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8WzI3OjI2XSB8Q01QRENUTDUgIHxCUFdNIENvbXBhcmUgRG93biBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQlBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBCUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gQlBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIEB2YXIgQlBXTV9UOjpNU0tFTgorICAgICAqIE9mZnNldDogMHhCOCAgQlBXTSBNYXNrIEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfE1TS0VOMCAgICB8QlBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQlBXTSBvdXRwdXQgc2lnbmFsIHdpbGwgYmUgbWFza2VkIHdoZW4gdGhpcyBiaXQgaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuIHdpbGwgb3V0cHV0IE1TS0RBVG4gKEJQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUbiBkYXRhLgorICAgICAqIHxbMV0gICAgIHxNU0tFTjEgICAgfEJQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEJQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbiB3aWxsIG91dHB1dCBNU0tEQVRuIChCUFdNX01TS1s1OjBdKSBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIG91dHB1dCBzaWduYWwgaXMgbm9uLW1hc2tlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBvdXRwdXQgc2lnbmFsIGlzIG1hc2tlZCBhbmQgb3V0cHV0IE1TS0RBVG4gZGF0YS4KKyAgICAgKiB8WzJdICAgICB8TVNLRU4yICAgIHxCUFdNIE1hc2sgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBCUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4gd2lsbCBvdXRwdXQgTVNLREFUbiAoQlBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVRuIGRhdGEuCisgICAgICogfFszXSAgICAgfE1TS0VOMyAgICB8QlBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQlBXTSBvdXRwdXQgc2lnbmFsIHdpbGwgYmUgbWFza2VkIHdoZW4gdGhpcyBiaXQgaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuIHdpbGwgb3V0cHV0IE1TS0RBVG4gKEJQV01fTVNLWzU6MF0pIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gb3V0cHV0IHNpZ25hbCBpcyBub24tbWFza2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUbiBkYXRhLgorICAgICAqIHxbNF0gICAgIHxNU0tFTjQgICAgfEJQV00gTWFzayBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEJQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbiB3aWxsIG91dHB1dCBNU0tEQVRuIChCUFdNX01TS1s1OjBdKSBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIG91dHB1dCBzaWduYWwgaXMgbm9uLW1hc2tlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBvdXRwdXQgc2lnbmFsIGlzIG1hc2tlZCBhbmQgb3V0cHV0IE1TS0RBVG4gZGF0YS4KKyAgICAgKiB8WzVdICAgICB8TVNLRU41ICAgIHxCUFdNIE1hc2sgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBCUFdNIG91dHB1dCBzaWduYWwgd2lsbCBiZSBtYXNrZWQgd2hlbiB0aGlzIGJpdCBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4gd2lsbCBvdXRwdXQgTVNLREFUbiAoQlBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVRuIGRhdGEuCisgICAgICogQHZhciBCUFdNX1Q6Ok1TSworICAgICAqIE9mZnNldDogMHhCQyAgQlBXTSBNYXNrIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxNU0tEQVQwICAgfEJQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgQlBXTW4gb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEJQV01uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBCUFdNbi4KKyAgICAgKiB8WzFdICAgICB8TVNLREFUMSAgIHxCUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEJQV01uIG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT3V0cHV0IGxvZ2ljIGxvdyB0byBCUFdNbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3V0cHV0IGxvZ2ljIGhpZ2ggdG8gQlBXTW4uCisgICAgICogfFsyXSAgICAgfE1TS0RBVDIgICB8QlBXTSBNYXNrIERhdGEgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBkYXRhIGJpdCBjb250cm9sIHRoZSBzdGF0ZSBvZiBCUFdNbiBvdXRwdXQgcGluLCBpZiBjb3JyZXNwb25kaW5nIG1hc2sgZnVuY3Rpb24gaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gQlBXTW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEJQV01uLgorICAgICAqIHxbM10gICAgIHxNU0tEQVQzICAgfEJQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgQlBXTW4gb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdXRwdXQgbG9naWMgbG93IHRvIEJQV01uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgbG9naWMgaGlnaCB0byBCUFdNbi4KKyAgICAgKiB8WzRdICAgICB8TVNLREFUNCAgIHxCUFdNIE1hc2sgRGF0YSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGRhdGEgYml0IGNvbnRyb2wgdGhlIHN0YXRlIG9mIEJQV01uIG91dHB1dCBwaW4sIGlmIGNvcnJlc3BvbmRpbmcgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT3V0cHV0IGxvZ2ljIGxvdyB0byBCUFdNbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3V0cHV0IGxvZ2ljIGhpZ2ggdG8gQlBXTW4uCisgICAgICogfFs1XSAgICAgfE1TS0RBVDUgICB8QlBXTSBNYXNrIERhdGEgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBkYXRhIGJpdCBjb250cm9sIHRoZSBzdGF0ZSBvZiBCUFdNbiBvdXRwdXQgcGluLCBpZiBjb3JyZXNwb25kaW5nIG1hc2sgZnVuY3Rpb24gaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gQlBXTW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEJQV01uLgorICAgICAqIEB2YXIgQlBXTV9UOjpQT0xDVEwKKyAgICAgKiBPZmZzZXQ6IDB4RDQgIEJQV00gUGluIFBvbGFyIEludmVyc2UgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQSU5WMCAgICAgfEJQV00gUElOIFBvbGFyIEludmVyc2UgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBjb250cm9scyBwb2xhcml0eSBzdGF0ZSBvZiBCUFdNIG91dHB1dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gb3V0cHV0IHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gb3V0cHV0IHBvbGFyIGludmVyc2UgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8UElOVjEgICAgIHxCUFdNIFBJTiBQb2xhciBJbnZlcnNlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgY29udHJvbHMgcG9sYXJpdHkgc3RhdGUgb2YgQlBXTSBvdXRwdXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIG91dHB1dCBwb2xhciBpbnZlcnNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIG91dHB1dCBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFBJTlYyICAgICB8QlBXTSBQSU4gUG9sYXIgSW52ZXJzZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGNvbnRyb2xzIHBvbGFyaXR5IHN0YXRlIG9mIEJQV00gb3V0cHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxQSU5WMyAgICAgfEJQV00gUElOIFBvbGFyIEludmVyc2UgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBjb250cm9scyBwb2xhcml0eSBzdGF0ZSBvZiBCUFdNIG91dHB1dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gb3V0cHV0IHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gb3V0cHV0IHBvbGFyIGludmVyc2UgRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8UElOVjQgICAgIHxCUFdNIFBJTiBQb2xhciBJbnZlcnNlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgY29udHJvbHMgcG9sYXJpdHkgc3RhdGUgb2YgQlBXTSBvdXRwdXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIG91dHB1dCBwb2xhciBpbnZlcnNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIG91dHB1dCBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFBJTlY1ICAgICB8QlBXTSBQSU4gUG9sYXIgSW52ZXJzZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGNvbnRyb2xzIHBvbGFyaXR5IHN0YXRlIG9mIEJQV00gb3V0cHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIEB2YXIgQlBXTV9UOjpQT0VOCisgICAgICogT2Zmc2V0OiAweEQ4ICBCUFdNIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQT0VOMCAgICAgfEJQV00gUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFsxXSAgICAgfFBPRU4xICAgICB8QlBXTSBQaW4gT3V0cHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIHBpbiBpbiBvdXRwdXQgbW9kZS4KKyAgICAgKiB8WzJdICAgICB8UE9FTjIgICAgIHxCUFdNIFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIHBpbiBhdCB0cmktc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIHxbM10gICAgIHxQT0VOMyAgICAgfEJQV00gUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gcGluIGF0IHRyaS1zdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFs0XSAgICAgfFBPRU40ICAgICB8QlBXTSBQaW4gT3V0cHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIHBpbiBpbiBvdXRwdXQgbW9kZS4KKyAgICAgKiB8WzVdICAgICB8UE9FTjUgICAgIHxCUFdNIFBpbiBPdXRwdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIHBpbiBhdCB0cmktc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gcGluIGluIG91dHB1dCBtb2RlLgorICAgICAqIEB2YXIgQlBXTV9UOjpJTlRFTgorICAgICAqIE9mZnNldDogMHhFMCAgQlBXTSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8WklFTjAgICAgIHxCUFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IDAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBaZXJvIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8UElFTjAgICAgIHxCUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgMCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHVwLWRvd24gY291bnRlciB0eXBlIHBlcmlvZCBwb2ludCBtZWFucyBjZW50ZXIgcG9pbnQuCisgICAgICogfFsxNl0gICAgfENNUFVJRU4wICB8QlBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTddICAgIHxDTVBVSUVOMSAgfEJQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8Q01QVUlFTjIgIHxCUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxOV0gICAgfENNUFVJRU4zICB8QlBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjBdICAgIHxDTVBVSUVONCAgfEJQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzIxXSAgICB8Q01QVUlFTjUgIHxCUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyNF0gICAgfENNUERJRU4wICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjVdICAgIHxDTVBESUVOMSAgfEJQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzI2XSAgICB8Q01QRElFTjIgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyN10gICAgfENNUERJRU4zICB8QlBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjhdICAgIHxDTVBESUVONCAgfEJQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzI5XSAgICB8Q01QRElFTjUgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogQHZhciBCUFdNX1Q6OklOVFNUUworICAgICAqIE9mZnNldDogMHhFOCAgQlBXTSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFpJRjAgICAgICB8QlBXTSBaZXJvIFBvaW50IEludGVycnVwdCBGbGFnIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNX0NIMCBjb3VudGVyIHJlYWNoZXMgemVybywgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8WzhdICAgICB8UElGMCAgICAgIHxCUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRmxhZyAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTV9DSDAgY291bnRlciByZWFjaGVzIEJQV01fUEVSSU9EMCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8WzE2XSAgICB8Q01QVUlGMCAgIHxCUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEJQV00gY291bnRlciB1cCBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiB1cCBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHxbMTddICAgIHxDTVBVSUYxICAgfEJQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIHVwIGNvdW50IGFuZCByZWFjaGVzIEJQV01fQ01QREFUbiwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIHVwIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfFsxOF0gICAgfENNUFVJRjIgICB8QlBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgdXAgY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gdXAgY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8WzE5XSAgICB8Q01QVUlGMyAgIHxCUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEJQV00gY291bnRlciB1cCBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiB1cCBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHxbMjBdICAgIHxDTVBVSUY0ICAgfEJQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gQlBXTSBjb3VudGVyIHVwIGNvdW50IGFuZCByZWFjaGVzIEJQV01fQ01QREFUbiwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIHVwIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfFsyMV0gICAgfENNUFVJRjUgICB8QlBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgdXAgY291bnQgYW5kIHJlYWNoZXMgQlBXTV9DTVBEQVRuLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gdXAgY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8WzI0XSAgICB8Q01QRElGMCAgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8WzI1XSAgICB8Q01QRElGMSAgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8WzI2XSAgICB8Q01QRElGMiAgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8WzI3XSAgICB8Q01QRElGMyAgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8WzI4XSAgICB8Q01QRElGNCAgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8WzI5XSAgICB8Q01QRElGNSAgIHxCUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBCUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBCUFdNX0NNUERBVG4sIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiBAdmFyIEJQV01fVDo6RUFEQ1RTMAorICAgICAqIE9mZnNldDogMHhGOCAgQlBXTSBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8VFJHU0VMMCAgIHxCUFdNX0NIMCBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBCUFdNX0NIMCB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBCUFdNX0NIMCBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEJQV01fQ0gwIHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBCUFdNX0NIMCB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEJQV01fQ0gwIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBCUFdNX0NIMSB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEJQV01fQ0gxIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyByZXNlcnZlZAorICAgICAqIHxbN10gICAgIHxUUkdFTjAgICAgfEJQV01fQ0gwIFRyaWdnZXIgRUFEQyBFbmFibGUgQml0CisgICAgICogfFsxMTo4XSAgfFRSR1NFTDEgICB8QlBXTV9DSDEgVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gQlBXTV9DSDAgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gQlBXTV9DSDAgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBCUFdNX0NIMCB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gQlBXTV9DSDAgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBCUFdNX0NIMCBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gQlBXTV9DSDEgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBCUFdNX0NIMSBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgcmVzZXJ2ZWQKKyAgICAgKiB8WzE1XSAgICB8VFJHRU4xICAgIHxCUFdNX0NIMSBUcmlnZ2VyIEVBREMgRW5hYmxlIEJpdAorICAgICAqIHxbMTk6MTZdIHxUUkdTRUwyICAgfEJQV01fQ0gyIFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEJQV01fQ0gyIHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEJQV01fQ0gyIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gQlBXTV9DSDIgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEJQV01fQ0gyIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gQlBXTV9DSDIgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IEJQV01fQ0gzIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gQlBXTV9DSDMgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIHJlc2VydmVkCisgICAgICogfFsyM10gICAgfFRSR0VOMiAgICB8QlBXTV9DSDIgVHJpZ2dlciBFQURDIEVuYWJsZSBCaXQKKyAgICAgKiB8WzI3OjI0XSB8VFJHU0VMMyAgIHxCUFdNX0NIMyBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBCUFdNX0NIMiB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBCUFdNX0NIMiBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEJQV01fQ0gyIHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBCUFdNX0NIMiB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEJQV01fQ0gyIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBCUFdNX0NIMyB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEJQV01fQ0gzIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyByZXNlcnZlZC4KKyAgICAgKiB8WzMxXSAgICB8VFJHRU4zICAgIHxCUFdNX0NIMyBUcmlnZ2VyIEVBREMgRW5hYmxlIEJpdAorICAgICAqIEB2YXIgQlBXTV9UOjpFQURDVFMxCisgICAgICogT2Zmc2V0OiAweEZDICBCUFdNIFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0IFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxUUkdTRUw0ICAgfEJQV01fQ0g0IFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEJQV01fQ0g0IHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEJQV01fQ0g0IHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gQlBXTV9DSDQgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEJQV01fQ0g0IHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gQlBXTV9DSDQgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IEJQV01fQ0g1IHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gQlBXTV9DSDUgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIHJlc2VydmVkCisgICAgICogfFs3XSAgICAgfFRSR0VONCAgICB8QlBXTV9DSDQgVHJpZ2dlciBFQURDIEVuYWJsZSBCaXQKKyAgICAgKiB8WzExOjhdICB8VFJHU0VMNSAgIHxCUFdNX0NINSBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBCUFdNX0NINCB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBCUFdNX0NINCBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEJQV01fQ0g0IHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBCUFdNX0NINCB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEJQV01fQ0g0IGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBCUFdNX0NINSB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEJQV01fQ0g1IGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyByZXNlcnZlZAorICAgICAqIHxbMTVdICAgIHxUUkdFTjUgICAgfEJQV01fQ0g1IFRyaWdnZXIgRUFEQyBFbmFibGUgQml0CisgICAgICogQHZhciBCUFdNX1Q6OlNTQ1RMCisgICAgICogT2Zmc2V0OiAweDExMCAgQlBXTSBTeW5jaHJvbm91cyBTdGFydCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1NFTjAgICAgIHxCUFdNIFN5bmNocm9ub3VzIFN0YXJ0IEZ1bmN0aW9uIDAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gaXMgZW5hYmxlZCwgdGhlIEJQV01fQ0gwIGNvdW50ZXIgZW5hYmxlIGJpdCAoQ05URU4wKSBjYW4gYmUgZW5hYmxlZCBieSB3cml0aW5nIEJQV00gc3luY2hyb25vdXMgc3RhcnQgdHJpZ2dlciBiaXQgKENOVFNFTikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8Wzk6OF0gICB8U1NSQyAgICAgIHxCUFdNIFN5bmNocm9ub3VzIFN0YXJ0IFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lIGZyb20gUFdNMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lIGZyb20gUFdNMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lIGZyb20gQlBXTTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZSBmcm9tIEJQV00xLgorICAgICAqIEB2YXIgQlBXTV9UOjpTU1RSRworICAgICAqIE9mZnNldDogMHgxMTQgIEJQV00gU3luY2hyb25vdXMgU3RhcnQgVHJpZ2dlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVFNFTiAgICB8QlBXTSBDb3VudGVyIFN5bmNocm9ub3VzIFN0YXJ0IEVuYWJsZSBCaXQoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUE1XIGNvdW50ZXIgc3luY2hyb25vdXMgZW5hYmxlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFrZSBQV00gb3IgQlBXTSBjaGFubmVscyBzdGFydCBjb3VudGluZyBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdGhpcyBiaXQgdG8gMSB3aWxsIGFsc28gc2V0IHRoZSBjb3VudGVyIGVuYWJsZSBiaXQgaWYgY29ycmVsYXRlZCBCUFdNIGNoYW5uZWwgY291bnRlciBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIEB2YXIgQlBXTV9UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MTIwICBCUFdNIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVE1BWDAgICB8VGltZS1iYXNlIENvdW50ZXIgMCBFcXVhbCB0byAweEZGRkYgTGF0Y2hlZCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciBuZXZlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIDB4RkZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzE2XSAgICB8RUFEQ1RSRzAgIHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxN10gICAgfEVBRENUUkcxICB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyBubyBFQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBldmVudCBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyBhbiBFQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBldmVudCBoYXMgb2NjdXJyZWQsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMThdICAgIHxFQURDVFJHMiAgfEVBREMgU3RhcnQgb2YgQ29udmVyc2lvbiBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzE5XSAgICB8RUFEQ1RSRzMgIHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIG5vIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIEVBREMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZCwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsyMF0gICAgfEVBRENUUkc0ICB8RUFEQyBTdGFydCBvZiBDb252ZXJzaW9uIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyBubyBFQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBldmVudCBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyBhbiBFQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBldmVudCBoYXMgb2NjdXJyZWQsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMjFdICAgIHxFQURDVFJHNSAgfEVBREMgU3RhcnQgb2YgQ29udmVyc2lvbiBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiBAdmFyIEJQV01fVDo6Q0FQSU5FTgorICAgICAqIE9mZnNldDogMHgyMDAgIEJQV00gQ2FwdHVyZSBJbnB1dCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDQVBJTkVOMCAgfENhcHR1cmUgSW5wdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIERpc2FibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEJQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGlzIGFsd2F5cyByZWdhcmRlZCBhcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgQlBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gY29tZXMgZnJvbSBjb3JyZWxhdGl2ZSBtdWx0aWZ1bmN0aW9uIHBpbi4KKyAgICAgKiB8WzFdICAgICB8Q0FQSU5FTjEgIHxDYXB0dXJlIElucHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBCUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBpcyBhbHdheXMgcmVnYXJkZWQgYXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEJQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGNvbWVzIGZyb20gY29ycmVsYXRpdmUgbXVsdGlmdW5jdGlvbiBwaW4uCisgICAgICogfFsyXSAgICAgfENBUElORU4yICB8Q2FwdHVyZSBJbnB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgQlBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gaXMgYWx3YXlzIHJlZ2FyZGVkIGFzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBCUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBjb21lcyBmcm9tIGNvcnJlbGF0aXZlIG11bHRpZnVuY3Rpb24gcGluLgorICAgICAqIHxbM10gICAgIHxDQVBJTkVOMyAgfENhcHR1cmUgSW5wdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIERpc2FibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEJQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGlzIGFsd2F5cyByZWdhcmRlZCBhcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgQlBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gY29tZXMgZnJvbSBjb3JyZWxhdGl2ZSBtdWx0aWZ1bmN0aW9uIHBpbi4KKyAgICAgKiB8WzRdICAgICB8Q0FQSU5FTjQgIHxDYXB0dXJlIElucHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBCUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBpcyBhbHdheXMgcmVnYXJkZWQgYXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEJQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGNvbWVzIGZyb20gY29ycmVsYXRpdmUgbXVsdGlmdW5jdGlvbiBwaW4uCisgICAgICogfFs1XSAgICAgfENBUElORU41ICB8Q2FwdHVyZSBJbnB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgQlBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gaXMgYWx3YXlzIHJlZ2FyZGVkIGFzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBCUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBjb21lcyBmcm9tIGNvcnJlbGF0aXZlIG11bHRpZnVuY3Rpb24gcGluLgorICAgICAqIEB2YXIgQlBXTV9UOjpDQVBDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MjA0ICBCUFdNIENhcHR1cmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENBUEVOMCAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgZnVuY3Rpb24gRGlzYWJsZWQuIFJDQVBEQVQvRkNBUERBVCByZWdpc3RlciB3aWxsIG5vdCBiZSB1cGRhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZ1bmN0aW9uIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDYXB0dXJlIGxhdGNoZWQgdGhlIEJQV00gY291bnRlciB2YWx1ZSB3aGVuIGRldGVjdGVkIHJpc2luZyBvciBmYWxsaW5nIGVkZ2Ugb2YgaW5wdXQgc2lnbmFsIGFuZCBzYXZlZCB0byBSQ0FQREFUIChSaXNpbmcgbGF0Y2gpIGFuZCBGQ0FQREFUIChGYWxsaW5nIGxhdGNoKS4KKyAgICAgKiB8WzFdICAgICB8Q0FQRU4xICAgIHxDYXB0dXJlIEZ1bmN0aW9uIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgQlBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbMl0gICAgIHxDQVBFTjIgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBCUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFszXSAgICAgfENBUEVOMyAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgZnVuY3Rpb24gRGlzYWJsZWQuIFJDQVBEQVQvRkNBUERBVCByZWdpc3RlciB3aWxsIG5vdCBiZSB1cGRhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZ1bmN0aW9uIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDYXB0dXJlIGxhdGNoZWQgdGhlIEJQV00gY291bnRlciB2YWx1ZSB3aGVuIGRldGVjdGVkIHJpc2luZyBvciBmYWxsaW5nIGVkZ2Ugb2YgaW5wdXQgc2lnbmFsIGFuZCBzYXZlZCB0byBSQ0FQREFUIChSaXNpbmcgbGF0Y2gpIGFuZCBGQ0FQREFUIChGYWxsaW5nIGxhdGNoKS4KKyAgICAgKiB8WzRdICAgICB8Q0FQRU40ICAgIHxDYXB0dXJlIEZ1bmN0aW9uIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmdW5jdGlvbiBEaXNhYmxlZC4gUkNBUERBVC9GQ0FQREFUIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENhcHR1cmUgbGF0Y2hlZCB0aGUgQlBXTSBjb3VudGVyIHZhbHVlIHdoZW4gZGV0ZWN0ZWQgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBvZiBpbnB1dCBzaWduYWwgYW5kIHNhdmVkIHRvIFJDQVBEQVQgKFJpc2luZyBsYXRjaCkgYW5kIEZDQVBEQVQgKEZhbGxpbmcgbGF0Y2gpLgorICAgICAqIHxbNV0gICAgIHxDQVBFTjUgICAgfENhcHR1cmUgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBCUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFs4XSAgICAgfENBUElOVjAgICB8Q2FwdHVyZSBJbnZlcnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgc291cmNlIGludmVydGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBFbmFibGVkLiBSZXZlcnNlIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBHUElPLgorICAgICAqIHxbOV0gICAgIHxDQVBJTlYxICAgfENhcHR1cmUgSW52ZXJ0ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRW5hYmxlZC4gUmV2ZXJzZSB0aGUgaW5wdXQgc2lnbmFsIGZyb20gR1BJTy4KKyAgICAgKiB8WzEwXSAgICB8Q0FQSU5WMiAgIHxDYXB0dXJlIEludmVydGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgc291cmNlIGludmVydGVyIEVuYWJsZWQuIFJldmVyc2UgdGhlIGlucHV0IHNpZ25hbCBmcm9tIEdQSU8uCisgICAgICogfFsxMV0gICAgfENBUElOVjMgICB8Q2FwdHVyZSBJbnZlcnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgc291cmNlIGludmVydGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBFbmFibGVkLiBSZXZlcnNlIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBHUElPLgorICAgICAqIHxbMTJdICAgIHxDQVBJTlY0ICAgfENhcHR1cmUgSW52ZXJ0ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRW5hYmxlZC4gUmV2ZXJzZSB0aGUgaW5wdXQgc2lnbmFsIGZyb20gR1BJTy4KKyAgICAgKiB8WzEzXSAgICB8Q0FQSU5WNSAgIHxDYXB0dXJlIEludmVydGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgc291cmNlIGludmVydGVyIEVuYWJsZWQuIFJldmVyc2UgdGhlIGlucHV0IHNpZ25hbCBmcm9tIEdQSU8uCisgICAgICogfFsxNl0gICAgfFJDUkxERU4wICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsxN10gICAgfFJDUkxERU4xICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsxOF0gICAgfFJDUkxERU4yICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsxOV0gICAgfFJDUkxERU4zICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyMF0gICAgfFJDUkxERU40ICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyMV0gICAgfFJDUkxERU41ICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyNF0gICAgfEZDUkxERU4wICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyNV0gICAgfEZDUkxERU4xICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyNl0gICAgfEZDUkxERU4yICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyN10gICAgfEZDUkxERU4zICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyOF0gICAgfEZDUkxERU40ICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyOV0gICAgfEZDUkxERU41ICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogQHZhciBCUFdNX1Q6OkNBUFNUUworICAgICAqIE9mZnNldDogMHgyMDggIEJQV00gQ2FwdHVyZSBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDUklGT1YwICAgfENhcHR1cmUgUmlzaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBSSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQUklGLgorICAgICAqIHxbMV0gICAgIHxDUklGT1YxICAgfENhcHR1cmUgUmlzaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBSSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQUklGLgorICAgICAqIHxbMl0gICAgIHxDUklGT1YyICAgfENhcHR1cmUgUmlzaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBSSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQUklGLgorICAgICAqIHxbM10gICAgIHxDUklGT1YzICAgfENhcHR1cmUgUmlzaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBSSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQUklGLgorICAgICAqIHxbNF0gICAgIHxDUklGT1Y0ICAgfENhcHR1cmUgUmlzaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBSSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQUklGLgorICAgICAqIHxbNV0gICAgIHxDUklGT1Y1ICAgfENhcHR1cmUgUmlzaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBSSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQUklGLgorICAgICAqIHxbOF0gICAgIHxDRklGT1YwICAgfENhcHR1cmUgRmFsbGluZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgZmFsbGluZyBsYXRjaCBoYXBwZW5lZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIENBUEZJRiBpcyAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDQVBGSUYuCisgICAgICogfFs5XSAgICAgfENGSUZPVjEgICB8Q2FwdHVyZSBGYWxsaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiBmYWxsaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQRklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUEZJRi4KKyAgICAgKiB8WzEwXSAgICB8Q0ZJRk9WMiAgIHxDYXB0dXJlIEZhbGxpbmcgSW50ZXJydXB0IEZsYWcgT3ZlcnJ1biBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIGlmIGZhbGxpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBGSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQRklGLgorICAgICAqIHxbMTFdICAgIHxDRklGT1YzICAgfENhcHR1cmUgRmFsbGluZyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgZmFsbGluZyBsYXRjaCBoYXBwZW5lZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIENBUEZJRiBpcyAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDQVBGSUYuCisgICAgICogfFsxMl0gICAgfENGSUZPVjQgICB8Q2FwdHVyZSBGYWxsaW5nIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiBmYWxsaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0FQRklGIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENBUEZJRi4KKyAgICAgKiB8WzEzXSAgICB8Q0ZJRk9WNSAgIHxDYXB0dXJlIEZhbGxpbmcgSW50ZXJydXB0IEZsYWcgT3ZlcnJ1biBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIGlmIGZhbGxpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDQVBGSUYgaXMgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0FQRklGLgorICAgICAqIEB2YXIgQlBXTV9UOjpDQVBJRU4KKyAgICAgKiBPZmZzZXQ6IDB4MjUwICBCUFdNIENhcHR1cmUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs1OjBdICAgfENBUFJJRU5uICB8QlBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEzOjhdICB8Q0FQRklFTm4gIHxCUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgQlBXTV9UOjpDQVBJRgorICAgICAqIE9mZnNldDogMHgyNTQgIEJQV00gQ2FwdHVyZSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENBUFJJRjAgICB8QlBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4gRWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHxbMV0gICAgIHxDQVBSSUYxICAgfEJQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuIEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8WzJdICAgICB8Q0FQUklGMiAgIHxCUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLiBFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfFszXSAgICAgfENBUFJJRjMgICB8QlBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4gRWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHxbNF0gICAgIHxDQVBSSUY0ICAgfEJQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuIEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8WzVdICAgICB8Q0FQUklGNSAgIHxCUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLiBFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfFs4XSAgICAgfENBUEZJRjAgICB8QlBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuIEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHxbOV0gICAgIHxDQVBGSUYxICAgfEJQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLiBFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8WzEwXSAgICB8Q0FQRklGMiAgIHxCUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4gRWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfFsxMV0gICAgfENBUEZJRjMgICB8QlBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuIEVhY2ggYml0IG4gY29udHJvbHMgdGhlIGNvcnJlc3BvbmRpbmcgQlBXTSBjaGFubmVsIG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHxbMTJdICAgIHxDQVBGSUY0ICAgfEJQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLiBFYWNoIGJpdCBuIGNvbnRyb2xzIHRoZSBjb3JyZXNwb25kaW5nIEJQV00gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8WzEzXSAgICB8Q0FQRklGNSAgIHxCUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4gRWFjaCBiaXQgbiBjb250cm9scyB0aGUgY29ycmVzcG9uZGluZyBCUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogQHZhciBCUFdNX1Q6OlBCVUYKKyAgICAgKiBPZmZzZXQ6IDB4MzA0ICBCUFdNIFBFUklPRCBCdWZmZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxQQlVGICAgICAgfEJQV00gUGVyaW9kIEJ1ZmZlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZWQgYXMgUEVSSU9EIGFjdGl2ZSByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEJQV01fVDo6Q01QQlVGWzZdCisgICAgICogT2Zmc2V0OiAweDMxQyAgQlBXTSBDTVBEQVQgMH41IEJ1ZmZlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfENNUEJVRiAgICB8QlBXTSBDb21wYXJhdG9yIEJ1ZmZlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZWQgYXMgQ01QIGFjdGl2ZSByZWdpc3Rlci4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDA7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBCUFdNIENvbnRyb2wgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEwxOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gQlBXTSBDb250cm9sIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQwWzJdOworICAgIF9fSU8gdWludDMyX3QgQ0xLU1JDOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIEJQV00gQ2xvY2sgU291cmNlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS1BTQzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBCUFdNIENsb2NrIFByZXNjYWxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFRDFbMl07CisgICAgX19JTyB1aW50MzJfdCBDTlRFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gQlBXTSBDb3VudGVyIEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ05UQ0xSOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjRdIEJQV00gQ2xlYXIgQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVEMlsyXTsKKyAgICBfX0lPIHVpbnQzMl90IFBFUklPRDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBCUFdNIFBlcmlvZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFRDNbN107CisgICAgX19JTyB1aW50MzJfdCBDTVBEQVRbNl07ICAgICAgICAgICAgIC8qITwgWzB4MDA1MH4weDAwNjRdIEJQV00gQ29tcGFyYXRvciBSZWdpc3RlciAwfjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQ0WzEwXTsKKyAgICBfX0kgIHVpbnQzMl90IENOVDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDkwXSBCUFdNIENvdW50ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFRDVbN107CisgICAgX19JTyB1aW50MzJfdCBXR0NUTDA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDBiMF0gQlBXTSBHZW5lcmF0aW9uIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgV0dDVEwxOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwYjRdIEJQV00gR2VuZXJhdGlvbiBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE1TS0VOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMGI4XSBCUFdNIE1hc2sgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNU0s7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDBiY10gQlBXTSBNYXNrIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQ2WzVdOworICAgIF9fSU8gdWludDMyX3QgUE9MQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwZDRdIEJQV00gUGluIFBvbGFyIEludmVyc2UgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBPRU47ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMGQ4XSBCUFdNIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFRDdbMV07CisgICAgX19JTyB1aW50MzJfdCBJTlRFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDBlMF0gQlBXTSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQ4WzFdOworICAgIF9fSU8gdWludDMyX3QgSU5UU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwZThdIEJQV00gSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkVEOVszXTsKKyAgICBfX0lPIHVpbnQzMl90IEVBRENUUzA7ICAgICAgICAgICAgICAgLyohPCBbMHgwMGY4XSBCUFdNIFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0IFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBFQURDVFMxOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBmY10gQlBXTSBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQxMFs0XTsKKyAgICBfX0lPIHVpbnQzMl90IFNTQ1RMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMTEwXSBCUFdNIFN5bmNocm9ub3VzIFN0YXJ0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBTU1RSRzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDExNF0gQlBXTSBTeW5jaHJvbm91cyBTdGFydCBUcmlnZ2VyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQxMVsyXTsKKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMTIwXSBCUFdNIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFRDEyWzU1XTsKKyAgICBfX0lPIHVpbnQzMl90IENBUElORU47ICAgICAgICAgICAgICAgLyohPCBbMHgwMjAwXSBCUFdNIENhcHR1cmUgSW5wdXQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDQVBDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDIwNF0gQlBXTSBDYXB0dXJlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ0FQU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAyMDhdIEJQV00gQ2FwdHVyZSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBCQ0FQREFUX1QgQ0FQREFUWzZdOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDIwY34weDAyMzhdIEJQV00gUmlzaW5nIGFuZCBGYWxsaW5nIENhcHR1cmUgRGF0YSBSZWdpc3RlciAwfjUgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQxM1s1XTsKKyAgICBfX0lPIHVpbnQzMl90IENBUElFTjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMjUwXSBCUFdNIENhcHR1cmUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDQVBJRjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDI1NF0gQlBXTSBDYXB0dXJlIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQxNFs0M107CisgICAgX19JICB1aW50MzJfdCBQQlVGOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDMwNF0gQlBXTSBQRVJJT0QgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRUQxNVs1XTsKKyAgICBfX0kgIHVpbnQzMl90IENNUEJVRls2XTsgICAgICAgICAgICAgICAvKiE8IFsweDAzMWN+MHgwMzMwXSBCUFdNIENNUERBVCAwfjUgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gQlBXTV9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBCUFdNX0NPTlNUIEJQV00gQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgQlBXTSBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIEJQV01fQ1RMMF9DVFJMRDBfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IENUUkxEMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDBfQ1RSTEQwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DVEwwX0NUUkxEMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBDVFJMRDAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfQ1RSTEQxX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBDVFJMRDEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0NUUkxEMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9DVFJMRDFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogQ1RSTEQxIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwwX0NUUkxEMl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogQ1RSTEQyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMF9DVFJMRDJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NUTDBfQ1RSTEQyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IENUUkxEMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ1RMMF9DVFJMRDNfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IENUUkxEMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDBfQ1RSTEQzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DVEwwX0NUUkxEM19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBDVFJMRDMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfQ1RSTEQ0X1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBDVFJMRDQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0NUUkxENF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9DVFJMRDRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogQ1RSTEQ0IE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwwX0NUUkxENV9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogQ1RSTEQ1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMF9DVFJMRDVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NUTDBfQ1RSTEQ1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IENUUkxENSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ1RMMF9JTU1MREVOMF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IElNTUxERU4wIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDBfSU1NTERFTjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DVEwwX0lNTUxERU4wX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBJTU1MREVOMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfSU1NTERFTjFfUG9zICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBJTU1MREVOMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0lNTUxERU4xX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9JTU1MREVOMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogSU1NTERFTjEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwwX0lNTUxERU4yX1BvcyAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogSU1NTERFTjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMF9JTU1MREVOMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NUTDBfSU1NTERFTjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IElNTUxERU4yIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ1RMMF9JTU1MREVOM19Qb3MgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IElNTUxERU4zIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDBfSU1NTERFTjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DVEwwX0lNTUxERU4zX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBJTU1MREVOMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfSU1NTERFTjRfUG9zICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBJTU1MREVONCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0lNTUxERU40X01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9JTU1MREVONF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogSU1NTERFTjQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwwX0lNTUxERU41X1BvcyAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogSU1NTERFTjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMF9JTU1MREVONV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NUTDBfSU1NTERFTjVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IElNTUxERU41IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ1RMMF9EQkdIQUxUX1BvcyAgICAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDA6IERCR0hBTFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX0NUTDBfREJHSEFMVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DVEwwX0RCR0hBTFRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBEQkdIQUxUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NUTDBfREJHVFJJT0ZGX1BvcyAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDVEwwOiBEQkdUUklPRkYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DVEwwX0RCR1RSSU9GRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ1RMMF9EQkdUUklPRkZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMDogREJHVFJJT0ZGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DVEwxX0NOVFRZUEUwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q1RMMTogQ05UVFlQRTAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ1RMMV9DTlRUWVBFMF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBCUFdNX0NUTDFfQ05UVFlQRTBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNUTDE6IENOVFRZUEUwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0xLU1JDX0VDTEtTUkMwX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNMS1NSQzogRUNMS1NSQzAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NMS1NSQ19FQ0xLU1JDMF9Nc2sgICAgICAgICAoMHg3dWwgPDwgQlBXTV9DTEtTUkNfRUNMS1NSQzBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTEtTUkM6IEVDTEtTUkMwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NMS1BTQ19DTEtQU0NfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTEtQU0M6IENMS1BTQyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTEtQU0NfQ0xLUFNDX01zayAgICAgICAgICAgKDB4ZmZmdWwgPDwgQlBXTV9DTEtQU0NfQ0xLUFNDX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0xLUFNDOiBDTEtQU0MgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTlRFTl9DTlRFTjBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q05URU46IENOVEVOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fQ05URU5fQ05URU4wX01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NOVEVOX0NOVEVOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNOVEVOOiBDTlRFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ05UQ0xSX0NOVENMUjBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNOVENMUjogQ05UQ0xSMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NOVENMUl9DTlRDTFIwX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DTlRDTFJfQ05UQ0xSMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTlRDTFI6IENOVENMUjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BFUklPRF9QRVJJT0RfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQRVJJT0Q6IFBFUklPRCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QRVJJT0RfUEVSSU9EX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fUEVSSU9EX1BFUklPRF9Qb3MpICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UEVSSU9EOiBQRVJJT0QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTVBEQVQwX0NNUERBVF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QREFUMDogQ01QREFUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ01QREFUMF9DTVBEQVRfTXNrICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0NNUERBVDBfQ01QREFUX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUERBVDA6IENNUERBVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ01QREFUMV9DTVBEQVRfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUERBVDE6IENNUERBVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NNUERBVDFfQ01QREFUX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9DTVBEQVQxX0NNUERBVF9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBEQVQxOiBDTVBEQVQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NNUERBVDJfQ01QREFUX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBEQVQyOiBDTVBEQVQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTVBEQVQyX0NNUERBVF9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fQ01QREFUMl9DTVBEQVRfUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QREFUMjogQ01QREFUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTVBEQVQzX0NNUERBVF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QREFUMzogQ01QREFUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ01QREFUM19DTVBEQVRfTXNrICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0NNUERBVDNfQ01QREFUX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUERBVDM6IENNUERBVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ01QREFUNF9DTVBEQVRfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUERBVDQ6IENNUERBVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NNUERBVDRfQ01QREFUX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9DTVBEQVQ0X0NNUERBVF9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBEQVQ0OiBDTVBEQVQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NNUERBVDVfQ01QREFUX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBEQVQ1OiBDTVBEQVQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTVBEQVQ1X0NNUERBVF9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fQ01QREFUNV9DTVBEQVRfUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QREFUNTogQ01QREFUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTlRfQ05UX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q05UOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEJQV01fQ05UX0NOVF9Nc2sgICAgICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0NOVF9DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNOVDogQ05UIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ05UX0RJUkZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNOVDogRElSRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBCUFdNX0NOVF9ESVJGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DTlRfRElSRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTlQ6IERJUkYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMF9aUENUTDBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFpQQ1RMMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVEwwX01zayAgICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwwX1pQQ1RMMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTDAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVEwxX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTDEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1pQQ1RMMV9Nc2sgICAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMF9aUENUTDFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogWlBDVEwxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwwX1pQQ1RMMl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogWlBDVEwyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMF9aUENUTDJfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDBfWlBDVEwyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFpQQ1RMMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMF9aUENUTDNfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFpQQ1RMMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVEwzX01zayAgICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwwX1pQQ1RMM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTDMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVEw0X1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTDQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1pQQ1RMNF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMF9aUENUTDRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogWlBDVEw0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwwX1pQQ1RMNV9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogWlBDVEw1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMF9aUENUTDVfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDBfWlBDVEw1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFpQQ1RMNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMF9aUENUTG5fUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFpQQ1RMbiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDBfWlBDVExuX01zayAgICAgICAgICAgKDB4ZmZmdWwgPDwgQlBXTV9XR0NUTDBfWlBDVExuX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBaUENUTG4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfUFJEUENUTDBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVEwwX01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMF9QUkRQQ1RMMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTDAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVEwxX1BvcyAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTDEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMF9QUkRQQ1RMMV9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDBfUFJEUENUTDFfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFBSRFBDVEwxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMF9QUkRQQ1RMMl9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFBSRFBDVEwyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDBfUFJEUENUTDJfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwwX1BSRFBDVEwyX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfUFJEUENUTDNfUG9zICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVEwzX01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMF9QUkRQQ1RMM19Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTDMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVEw0X1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTDQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMF9QUkRQQ1RMNF9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDBfUFJEUENUTDRfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFBSRFBDVEw0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMF9QUkRQQ1RMNV9Qb3MgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDA6IFBSRFBDVEw1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDBfUFJEUENUTDVfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwwX1BSRFBDVEw1X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBQUkRQQ1RMNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDBfUFJEUENUTG5fUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwwOiBQUkRQQ1RMbiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwwX1BSRFBDVExuX01zayAgICAgICAgICgweGZmZnVsIDw8IEJQV01fV0dDVEwwX1BSRFBDVExuX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMDogUFJEUENUTG4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUFVDVEwwX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMMF9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDFfQ01QVUNUTDBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVEwwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMMV9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVEwxIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QVUNUTDFfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwxX0NNUFVDVEwxX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QVUNUTDJfUG9zICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUFVDVEwyX01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMV9DTVBVQ1RMMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUFVDVEwzX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMM19Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDFfQ01QVUNUTDNfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVEwzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMNF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVEw0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QVUNUTDRfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwxX0NNUFVDVEw0X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBVQ1RMNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QVUNUTDVfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBVQ1RMNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUFVDVEw1X01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMV9DTVBVQ1RMNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QVUNUTDUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUFVDVExuX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QVUNUTG4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBVQ1RMbl9Nc2sgICAgICAgICAoMHhmZmZ1bCA8PCBCUFdNX1dHQ1RMMV9DTVBVQ1RMbl9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUFVDVExuIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBEQ1RMMF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUERDVEwwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTDBfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwxX0NNUERDVEwwX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTDFfUG9zICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUERDVEwxX01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMV9DTVBEQ1RMMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QRENUTDEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUERDVEwyX1BvcyAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QRENUTDIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBEQ1RMMl9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDFfQ01QRENUTDJfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUERDVEwyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBEQ1RMM19Qb3MgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUERDVEwzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTDNfTXNrICAgICAgICAgKDB4M3VsIDw8IEJQV01fV0dDVEwxX0NNUERDVEwzX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTDRfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUERDVEw0X01zayAgICAgICAgICgweDN1bCA8PCBCUFdNX1dHQ1RMMV9DTVBEQ1RMNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QRENUTDQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fV0dDVEwxX0NNUERDVEw1X1BvcyAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OldHQ1RMMTogQ01QRENUTDUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBEQ1RMNV9Nc2sgICAgICAgICAoMHgzdWwgPDwgQlBXTV9XR0NUTDFfQ01QRENUTDVfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUERDVEw1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1dHQ1RMMV9DTVBEQ1RMbl9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpXR0NUTDE6IENNUERDVExuIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9XR0NUTDFfQ01QRENUTG5fTXNrICAgICAgICAgKDB4ZmZmdWwgPDwgQlBXTV9XR0NUTDFfQ01QRENUTG5fUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6V0dDVEwxOiBDTVBEQ1RMbiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9NU0tFTl9NU0tFTjBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLRU46IE1TS0VOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU4wX01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX01TS0VOX01TS0VOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU4xX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS0VOX01TS0VOMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9NU0tFTl9NU0tFTjFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0tFTjogTVNLRU4xIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX01TS0VOX01TS0VOMl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0tFTjogTVNLRU4yIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9NU0tFTl9NU0tFTjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fTVNLRU5fTVNLRU4yX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLRU46IE1TS0VOMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9NU0tFTl9NU0tFTjNfUG9zICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLRU46IE1TS0VOMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU4zX01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX01TS0VOX01TS0VOM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTjMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU40X1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS0VOX01TS0VONF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9NU0tFTl9NU0tFTjRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0tFTjogTVNLRU40IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX01TS0VOX01TS0VONV9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0tFTjogTVNLRU41IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9NU0tFTl9NU0tFTjVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fTVNLRU5fTVNLRU41X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLRU46IE1TS0VONSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9NU0tFTl9NU0tFTm5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLRU46IE1TS0VObiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fTVNLRU5fTVNLRU5uX01zayAgICAgICAgICAgICgweDNmdWwgPDwgQlBXTV9NU0tFTl9NU0tFTm5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TS0VOOiBNU0tFTm4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLX01TS0RBVDBfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TSzogTVNLREFUMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS19NU0tEQVQwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9NU0tfTVNLREFUMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVDAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX01TS19NU0tEQVQxX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVDEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9NU0tfTVNLREFUMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fTVNLX01TS0RBVDFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLOiBNU0tEQVQxIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9NU0tfTVNLREFUMl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLOiBNU0tEQVQyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fTVNLX01TS0RBVDJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX01TS19NU0tEQVQyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TSzogTVNLREFUMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLX01TS0RBVDNfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TSzogTVNLREFUMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS19NU0tEQVQzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9NU0tfTVNLREFUM19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVDMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX01TS19NU0tEQVQ0X1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVDQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9NU0tfTVNLREFUNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fTVNLX01TS0RBVDRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLOiBNU0tEQVQ0IE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9NU0tfTVNLREFUNV9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6TVNLOiBNU0tEQVQ1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fTVNLX01TS0RBVDVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX01TS19NU0tEQVQ1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TSzogTVNLREFUNSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fTVNLX01TS0RBVG5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6Ok1TSzogTVNLREFUbiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX01TS19NU0tEQVRuX01zayAgICAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fTVNLX01TS0RBVG5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpNU0s6IE1TS0RBVG4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BPTENUTF9QSU5WMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0xDVEw6IFBJTlYwIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVjBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fUE9MQ1RMX1BJTlYwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVjFfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9MQ1RMX1BJTlYxX01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1BPTENUTF9QSU5WMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPTENUTDogUElOVjEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUE9MQ1RMX1BJTlYyX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPTENUTDogUElOVjIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX1BPTENUTF9QSU5WMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9QT0xDVExfUElOVjJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0xDVEw6IFBJTlYyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BPTENUTF9QSU5WM19Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0xDVEw6IFBJTlYzIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVjNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fUE9MQ1RMX1BJTlYzX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WMyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVjRfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WNCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9MQ1RMX1BJTlY0X01zayAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1BPTENUTF9QSU5WNF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPTENUTDogUElOVjQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUE9MQ1RMX1BJTlY1X1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPTENUTDogUElOVjUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBCUFdNX1BPTENUTF9QSU5WNV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9QT0xDVExfUElOVjVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0xDVEw6IFBJTlY1IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BPTENUTF9QSU5Wbl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0xDVEw6IFBJTlZuIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QT0xDVExfUElOVm5fTXNrICAgICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX1BPTENUTF9QSU5Wbl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9MQ1RMOiBQSU5WbiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0VOX1BPRU4wX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9FTjogUE9FTjAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9FTl9QT0VOMF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1BPRU5fUE9FTjBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU4wIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUE9FTl9QT0VOMV9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU4xIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBCUFdNX1BPRU5fUE9FTjFfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9QT0VOX1BPRU4xX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0VOOiBQT0VOMSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BPRU5fUE9FTjJfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0VOOiBQT0VOMiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QT0VOX1BPRU4yX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fUE9FTl9QT0VOMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9FTjogUE9FTjIgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0VOX1BPRU4zX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9FTjogUE9FTjMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9FTl9QT0VOM19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1BPRU5fUE9FTjNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU4zIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUE9FTl9QT0VONF9Qb3MgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU40IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBCUFdNX1BPRU5fUE9FTjRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9QT0VOX1BPRU40X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0VOOiBQT0VONCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1BPRU5fUE9FTjVfUG9zICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQT0VOOiBQT0VONSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9QT0VOX1BPRU41X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fUE9FTl9QT0VONV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9FTjogUE9FTjUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9QT0VOX1BPRU5uX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UE9FTjogUE9FTm4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEJQV01fUE9FTl9QT0VObl9Nc2sgICAgICAgICAgICAgICgweDNmdWwgPDwgQlBXTV9QT0VOX1BPRU5uX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBPRU46IFBPRU5uIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fWklFTjBfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBaSUVOMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX1pJRU4wX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRFTl9aSUVOMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogWklFTjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX1BJRU4wX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogUElFTjAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9QSUVOMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fUElFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IFBJRU4wIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBVSUVOMF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUFVJRU4wIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTjBfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVEVOX0NNUFVJRU4wX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVOMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTjFfUG9zICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUFVJRU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRFTl9DTVBVSUVOMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QVUlFTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX0NNUFVJRU4yX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QVUlFTjIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBVSUVOMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fQ01QVUlFTjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUFVJRU4yIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBVSUVOM19Qb3MgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUFVJRU4zIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTjNfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVEVOX0NNUFVJRU4zX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVOMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTjRfUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVONCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUFVJRU40X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRFTl9DTVBVSUVONF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QVUlFTjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX0NNUFVJRU41X1BvcyAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QVUlFTjUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBVSUVONV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fQ01QVUlFTjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUFVJRU41IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBVSUVObl9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUFVJRU5uIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fQ01QVUlFTm5fTXNrICAgICAgICAgICgweDNmdWwgPDwgQlBXTV9JTlRFTl9DTVBVSUVObl9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBVSUVObiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QRElFTjBfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBESUVOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRFTl9DTVBESUVOMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU4xX1BvcyAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTjEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBESUVOMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fQ01QRElFTjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUERJRU4xIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBESUVOMl9Qb3MgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUERJRU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fQ01QRElFTjJfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVEVOX0NNUERJRU4yX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBESUVOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QRElFTjNfUG9zICAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBESUVOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRFTl9DTVBESUVOM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU40X1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTjQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBESUVONF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5URU5fQ01QRElFTjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUERJRU40IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRFTl9DTVBESUVONV9Qb3MgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5URU46IENNUERJRU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5URU5fQ01QRElFTjVfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVEVOX0NNUERJRU41X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBESUVONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5URU5fQ01QRElFTm5fUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVEVOOiBDTVBESUVObiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVEVOX0NNUERJRU5uX01zayAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fSU5URU5fQ01QRElFTm5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRFTjogQ01QRElFTm4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19aSUYwX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IFpJRjAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfWklGMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5UU1RTX1pJRjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBaSUYwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfUElGMF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBQSUYwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX1BJRjBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19QSUYwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogUElGMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUFVJRjBfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QVUlGMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUYwX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRTVFNfQ01QVUlGMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUYxX1BvcyAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRjEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QVUlGMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5UU1RTX0NNUFVJRjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBVSUYxIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QVUlGMl9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBVSUYyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUFVJRjJfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19DTVBVSUYyX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QVUlGMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUFVJRjNfUG9zICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QVUlGMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUYzX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRTVFNfQ01QVUlGM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUY0X1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRjQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QVUlGNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5UU1RTX0NNUFVJRjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBVSUY0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QVUlGNV9Qb3MgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBVSUY1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUFVJRjVfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19DTVBVSUY1X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QVUlGNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUFVJRm5fUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QVUlGbiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBVSUZuX01zayAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fSU5UU1RTX0NNUFVJRm5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUFVJRm4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBESUYwX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUERJRjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5UU1RTX0NNUERJRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUYwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGMV9Qb3MgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUERJRjFfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19DTVBESUYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QRElGMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUERJRjJfUG9zICAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QRElGMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBESUYyX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRTVFNfQ01QRElGMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUERJRjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBESUYzX1BvcyAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUERJRjMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fSU5UU1RTX0NNUERJRjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUYzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGNF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUERJRjRfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0lOVFNUU19DTVBESUY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QRElGNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fSU5UU1RTX0NNUERJRjVfUG9zICAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OklOVFNUUzogQ01QRElGNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBESUY1X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9JTlRTVFNfQ01QRElGNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUERJRjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0lOVFNUU19DTVBESUZuX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpJTlRTVFM6IENNUERJRm4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9JTlRTVFNfQ01QRElGbl9Nc2sgICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0lOVFNUU19DTVBESUZuX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6SU5UU1RTOiBDTVBESUZuIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR1NFTDBfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHU0VMMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdTRUwwX01zayAgICAgICAgICgweGZ1bCA8PCBCUFdNX0VBRENUUzBfVFJHU0VMMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdFTjBfUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR0VOMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHRU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9FQURDVFMwX1RSR0VOMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdFTjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHU0VMMV9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdTRUwxIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR1NFTDFfTXNrICAgICAgICAgKDB4ZnVsIDw8IEJQV01fRUFEQ1RTMF9UUkdTRUwxX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHU0VMMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR0VOMV9Qb3MgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHRU4xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdFTjFfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0VBRENUUzBfVFJHRU4xX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR0VOMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdTRUwyX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHU0VMMl9Nc2sgICAgICAgICAoMHhmdWwgPDwgQlBXTV9FQURDVFMwX1RSR1NFTDJfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdTRUwyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHRU4yX1BvcyAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdFTjIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR0VOMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fRUFEQ1RTMF9UUkdFTjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHRU4yIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9FQURDVFMwX1RSR1NFTDNfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMDogVFJHU0VMMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdTRUwzX01zayAgICAgICAgICgweGZ1bCA8PCBCUFdNX0VBRENUUzBfVFJHU0VMM19Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR1NFTDMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRUFEQ1RTMF9UUkdFTjNfUG9zICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzA6IFRSR0VOMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0VBRENUUzBfVFJHRU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9FQURDVFMwX1RSR0VOM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMwOiBUUkdFTjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0VBRENUUzFfVFJHU0VMNF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMxOiBUUkdTRUw0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9FQURDVFMxX1RSR1NFTDRfTXNrICAgICAgICAgKDB4ZnVsIDw8IEJQV01fRUFEQ1RTMV9UUkdTRUw0X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMTogVFJHU0VMNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9FQURDVFMxX1RSR0VONF9Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMTogVFJHRU40IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fRUFEQ1RTMV9UUkdFTjRfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0VBRENUUzFfVFJHRU40X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzE6IFRSR0VONCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRUFEQ1RTMV9UUkdTRUw1X1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkVBRENUUzE6IFRSR1NFTDUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0VBRENUUzFfVFJHU0VMNV9Nc2sgICAgICAgICAoMHhmdWwgPDwgQlBXTV9FQURDVFMxX1RSR1NFTDVfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMxOiBUUkdTRUw1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0VBRENUUzFfVFJHRU41X1BvcyAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpFQURDVFMxOiBUUkdFTjUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9FQURDVFMxX1RSR0VONV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fRUFEQ1RTMV9UUkdFTjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RUFEQ1RTMTogVFJHRU41IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9TU0NUTF9TU0VOMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1NDVEw6IFNTRU4wIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEJQV01fU1NDVExfU1NFTjBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBCUFdNX1NTQ1RMX1NTRU4wX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNTQ1RMOiBTU0VOMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fU1NDVExfU1NSQ19Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNTQ1RMOiBTU1JDIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBCUFdNX1NTQ1RMX1NTUkNfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgQlBXTV9TU0NUTF9TU1JDX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTU0NUTDogU1NSQyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1NTVFJHX0NOVFNFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTU1RSRzogQ05UU0VOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9TU1RSR19DTlRTRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fU1NUUkdfQ05UU0VOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1NUUkc6IENOVFNFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9TVEFUVVNfQ05UTUFYMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1RBVFVTOiBDTlRNQVgwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fU1RBVFVTX0NOVE1BWDBfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX1NUQVRVU19DTlRNQVgwX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogQ05UTUFYMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkcwX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSRzAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1NUQVRVU19FQURDVFJHMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9TVEFUVVNfRUFEQ1RSRzBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkcwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1NUQVRVU19FQURDVFJHMV9Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkcxIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9TVEFUVVNfRUFEQ1RSRzFfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fU1RBVFVTX0VBRENUUkcxX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1RBVFVTOiBFQURDVFJHMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9TVEFUVVNfRUFEQ1RSRzJfUG9zICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1RBVFVTOiBFQURDVFJHMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkcyX01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX1NUQVRVU19FQURDVFJHMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSRzIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkczX1BvcyAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSRzMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX1NUQVRVU19FQURDVFJHM19Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9TVEFUVVNfRUFEQ1RSRzNfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkczIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1NUQVRVU19FQURDVFJHNF9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpTVEFUVVM6IEVBRENUUkc0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9TVEFUVVNfRUFEQ1RSRzRfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fU1RBVFVTX0VBRENUUkc0X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1RBVFVTOiBFQURDVFJHNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9TVEFUVVNfRUFEQ1RSRzVfUG9zICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6U1RBVFVTOiBFQURDVFJHNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkc1X01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX1NUQVRVU19FQURDVFJHNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSRzUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fU1RBVFVTX0VBRENUUkduX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSR24gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9TVEFUVVNfRUFEQ1RSR25fTXNrICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX1NUQVRVU19FQURDVFJHbl9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlNUQVRVUzogRUFEQ1RSR24gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElORU5fQ0FQSU5FTjBfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJTkVOOiBDQVBJTkVOMCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU4wX01zayAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSU5FTl9DQVBJTkVOMF9Qb3MpICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjAgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU4xX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjEgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fQ0FQSU5FTl9DQVBJTkVOMV9Nc2sgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElORU5fQ0FQSU5FTjFfUG9zKSAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElORU46IENBUElORU4xIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSU5FTl9DQVBJTkVOMl9Qb3MgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElORU46IENBUElORU4yIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX0NBUElORU5fQ0FQSU5FTjJfTXNrICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJTkVOX0NBUElORU4yX1BvcykgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJTkVOOiBDQVBJTkVOMiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElORU5fQ0FQSU5FTjNfUG9zICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJTkVOOiBDQVBJTkVOMyBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU4zX01zayAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSU5FTl9DQVBJTkVOM19Qb3MpICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjMgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU40X1BvcyAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fQ0FQSU5FTl9DQVBJTkVONF9Nc2sgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElORU5fQ0FQSU5FTjRfUG9zKSAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElORU46IENBUElORU40IE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSU5FTl9DQVBJTkVONV9Qb3MgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElORU46IENBUElORU41IFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX0NBUElORU5fQ0FQSU5FTjVfTXNrICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJTkVOX0NBUElORU41X1BvcykgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJTkVOOiBDQVBJTkVONSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElORU5fQ0FQSU5FTm5fUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJTkVOOiBDQVBJTkVObiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJTkVOX0NBUElORU5uX01zayAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0NBUElORU5fQ0FQSU5FTm5fUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTm4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQRU4wX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBFTjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVOMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9DQVBFTjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU4wIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVOMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU4xIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBFTjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfQ0FQRU4xX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUEVOMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBFTjJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUEVOMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQRU4yX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0NBUEVOMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBFTjIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQRU4zX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBFTjMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVOM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9DQVBFTjNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU4zIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVONF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU40IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBFTjRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfQ0FQRU40X1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUEVONCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBFTjVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUEVONSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQRU41X01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0NBUEVONV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBFTjUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQRU5uX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBFTm4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUEVObl9Nc2sgICAgICAgICAgICgweDNmdWwgPDwgQlBXTV9DQVBDVExfQ0FQRU5uX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQRU5uIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUElOVjBfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQSU5WMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlYwX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfQ0FQSU5WMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlYxX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVjEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQSU5WMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0NBUElOVjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBJTlYxIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQSU5WMl9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBJTlYyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUElOVjJfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9DQVBJTlYyX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQSU5WMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUElOVjNfUG9zICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQSU5WMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlYzX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfQ0FQSU5WM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlY0X1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVjQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQSU5WNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0NBUElOVjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBJTlY0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfQ0FQSU5WNV9Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBDQVBJTlY1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUElOVjVfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9DQVBJTlY1X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQSU5WNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0NBUElOVm5fUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogQ0FQSU5WbiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9DQVBJTlZuX01zayAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fQ0FQQ1RMX0NBUElOVm5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IENBUElOVm4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9SQ1JMREVOMF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IFJDUkxERU4wIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTjBfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX1JDUkxERU4wX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTjFfUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX1JDUkxERU4xX01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9SQ1JMREVOMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogUkNSTERFTjEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX1JDUkxERU4yX1BvcyAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogUkNSTERFTjIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9SQ1JMREVOMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfUkNSTERFTjJfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IFJDUkxERU4yIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9SQ1JMREVOM19Qb3MgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IFJDUkxERU4zIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTjNfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX1JDUkxERU4zX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTjRfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVONCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX1JDUkxERU40X01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9SQ1JMREVONF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogUkNSTERFTjQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX1JDUkxERU41X1BvcyAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogUkNSTERFTjUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9SQ1JMREVONV9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfUkNSTERFTjVfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IFJDUkxERU41IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9SQ1JMREVObl9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IFJDUkxERU5uIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfUkNSTERFTm5fTXNrICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0NBUENUTF9SQ1JMREVObl9Qb3MpICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBSQ1JMREVObiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfRkNSTERFTjBfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU4wX01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9GQ1JMREVOMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTjAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU4xX1BvcyAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTjEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9GQ1JMREVOMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfRkNSTERFTjFfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IEZDUkxERU4xIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9GQ1JMREVOMl9Qb3MgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IEZDUkxERU4yIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfRkNSTERFTjJfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0ZDUkxERU4yX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfRkNSTERFTjNfUG9zICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU4zX01zayAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUENUTF9GQ1JMREVOM19Qb3MpICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTjMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU40X1BvcyAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTjQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUENUTF9GQ1JMREVONF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBDVExfRkNSTERFTjRfUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IEZDUkxERU40IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUENUTF9GQ1JMREVONV9Qb3MgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBDVEw6IEZDUkxERU41IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBDVExfRkNSTERFTjVfTXNrICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQQ1RMX0ZDUkxERU41X1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBGQ1JMREVONSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBDVExfRkNSTERFTm5fUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQQ1RMOiBGQ1JMREVObiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQQ1RMX0ZDUkxERU5uX01zayAgICAgICAgICgweDNmdWwgPDwgQlBXTV9DQVBDVExfRkNSTERFTm5fUG9zKSAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUENUTDogRkNSTERFTm4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NSSUZPVjBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ1JJRk9WMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1YwX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBTVFNfQ1JJRk9WMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVjAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1YxX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVjEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ1JJRk9WMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQU1RTX0NSSUZPVjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDUklGT1YxIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ1JJRk9WMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDUklGT1YyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NSSUZPVjJfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUFNUU19DUklGT1YyX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ1JJRk9WMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NSSUZPVjNfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ1JJRk9WMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1YzX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBTVFNfQ1JJRk9WM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVjMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1Y0X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVjQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ1JJRk9WNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQU1RTX0NSSUZPVjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDUklGT1Y0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ1JJRk9WNV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDUklGT1Y1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NSSUZPVjVfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUFNUU19DUklGT1Y1X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ1JJRk9WNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NSSUZPVm5fUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ1JJRk9WbiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUFNUU19DUklGT1ZuX01zayAgICAgICAgICAoMHgzZnVsIDw8IEJQV01fQ0FQU1RTX0NSSUZPVm5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENSSUZPVm4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DRklGT1YwX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENGSUZPVjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9WMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQU1RTX0NGSUZPVjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1YwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9WMV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1YxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NGSUZPVjFfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUFNUU19DRklGT1YxX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ0ZJRk9WMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NGSUZPVjJfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ0ZJRk9WMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUFNUU19DRklGT1YyX01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBTVFNfQ0ZJRk9WMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENGSUZPVjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DRklGT1YzX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENGSUZPVjMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9WM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQU1RTX0NGSUZPVjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1YzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9WNF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1Y0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NGSUZPVjRfTXNrICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUFNUU19DRklGT1Y0X1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ0ZJRk9WNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQU1RTX0NGSUZPVjVfUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUFNUUzogQ0ZJRk9WNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUFNUU19DRklGT1Y1X01zayAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBTVFNfQ0ZJRk9WNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENGSUZPVjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUFNUU19DRklGT1ZuX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBTVFM6IENGSUZPVm4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBTVFNfQ0ZJRk9Wbl9Nc2sgICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0NBUFNUU19DRklGT1ZuX1BvcykgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQU1RTOiBDRklGT1ZuIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9SQ0FQREFUMF9SQ0FQREFUX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UkNBUERBVDA6IFJDQVBEQVQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fUkNBUERBVDBfUkNBUERBVF9Nc2sgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX1JDQVBEQVQwX1JDQVBEQVRfUG9zKSAgICAgICAgICAgLyohPCBCUFdNX1Q6OlJDQVBEQVQwOiBSQ0FQREFUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRkNBUERBVDBfRkNBUERBVF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkZDQVBEQVQwOiBGQ0FQREFUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX0ZDQVBEQVQwX0ZDQVBEQVRfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9GQ0FQREFUMF9GQ0FQREFUX1BvcykgICAgICAgICAgIC8qITwgQlBXTV9UOjpGQ0FQREFUMDogRkNBUERBVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1JDQVBEQVQxX1JDQVBEQVRfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpSQ0FQREFUMTogUkNBUERBVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9SQ0FQREFUMV9SQ0FQREFUX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fUkNBUERBVDFfUkNBUERBVF9Qb3MpICAgICAgICAgICAvKiE8IEJQV01fVDo6UkNBUERBVDE6IFJDQVBEQVQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9GQ0FQREFUMV9GQ0FQREFUX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RkNBUERBVDE6IEZDQVBEQVQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fRkNBUERBVDFfRkNBUERBVF9Nc2sgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0ZDQVBEQVQxX0ZDQVBEQVRfUG9zKSAgICAgICAgICAgLyohPCBCUFdNX1Q6OkZDQVBEQVQxOiBGQ0FQREFUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUkNBUERBVDJfUkNBUERBVF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlJDQVBEQVQyOiBSQ0FQREFUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX1JDQVBEQVQyX1JDQVBEQVRfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9SQ0FQREFUMl9SQ0FQREFUX1BvcykgICAgICAgICAgIC8qITwgQlBXTV9UOjpSQ0FQREFUMjogUkNBUERBVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0ZDQVBEQVQyX0ZDQVBEQVRfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpGQ0FQREFUMjogRkNBUERBVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9GQ0FQREFUMl9GQ0FQREFUX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fRkNBUERBVDJfRkNBUERBVF9Qb3MpICAgICAgICAgICAvKiE8IEJQV01fVDo6RkNBUERBVDI6IEZDQVBEQVQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9SQ0FQREFUM19SQ0FQREFUX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6UkNBUERBVDM6IFJDQVBEQVQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fUkNBUERBVDNfUkNBUERBVF9Nc2sgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX1JDQVBEQVQzX1JDQVBEQVRfUG9zKSAgICAgICAgICAgLyohPCBCUFdNX1Q6OlJDQVBEQVQzOiBSQ0FQREFUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fRkNBUERBVDNfRkNBUERBVF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkZDQVBEQVQzOiBGQ0FQREFUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX0ZDQVBEQVQzX0ZDQVBEQVRfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9GQ0FQREFUM19GQ0FQREFUX1BvcykgICAgICAgICAgIC8qITwgQlBXTV9UOjpGQ0FQREFUMzogRkNBUERBVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX1JDQVBEQVQ0X1JDQVBEQVRfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpSQ0FQREFUNDogUkNBUERBVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9SQ0FQREFUNF9SQ0FQREFUX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fUkNBUERBVDRfUkNBUERBVF9Qb3MpICAgICAgICAgICAvKiE8IEJQV01fVDo6UkNBUERBVDQ6IFJDQVBEQVQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9GQ0FQREFUNF9GQ0FQREFUX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6RkNBUERBVDQ6IEZDQVBEQVQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEJQV01fRkNBUERBVDRfRkNBUERBVF9Nc2sgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0ZDQVBEQVQ0X0ZDQVBEQVRfUG9zKSAgICAgICAgICAgLyohPCBCUFdNX1Q6OkZDQVBEQVQ0OiBGQ0FQREFUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUkNBUERBVDVfUkNBUERBVF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlJDQVBEQVQ1OiBSQ0FQREFUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBCUFdNX1JDQVBEQVQ1X1JDQVBEQVRfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9SQ0FQREFUNV9SQ0FQREFUX1BvcykgICAgICAgICAgIC8qITwgQlBXTV9UOjpSQ0FQREFUNTogUkNBUERBVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0ZDQVBEQVQ1X0ZDQVBEQVRfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpGQ0FQREFUNTogRkNBUERBVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQlBXTV9GQ0FQREFUNV9GQ0FQREFUX01zayAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fRkNBUERBVDVfRkNBUERBVF9Qb3MpICAgICAgICAgICAvKiE8IEJQV01fVDo6RkNBUERBVDU6IEZDQVBEQVQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRU5fQ0FQUklFTm5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUVOOiBDQVBSSUVObiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUVOX0NBUFJJRU5uX01zayAgICAgICAgICgweDNmdWwgPDwgQlBXTV9DQVBJRU5fQ0FQUklFTm5fUG9zKSAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElFTjogQ0FQUklFTm4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUVOX0NBUEZJRU5uX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElFTjogQ0FQRklFTm4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBCUFdNX0NBUElFTl9DQVBGSUVObl9Nc2sgICAgICAgICAoMHgzZnVsIDw8IEJQV01fQ0FQSUVOX0NBUEZJRU5uX1BvcykgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRU46IENBUEZJRU5uIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElGX0NBUFJJRjBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQUklGMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUYwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSUZfQ0FQUklGMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRjAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUYxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRjEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQUklGMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElGX0NBUFJJRjFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBSSUYxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQUklGMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBSSUYyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUElGX0NBUFJJRjJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJRl9DQVBSSUYyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQUklGMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElGX0NBUFJJRjNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQUklGMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUYzX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSUZfQ0FQUklGM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRjMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUY0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRjQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQUklGNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElGX0NBUFJJRjRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBSSUY0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQUklGNV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBSSUY1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUElGX0NBUFJJRjVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJRl9DQVBSSUY1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQUklGNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElGX0NBUFJJRm5fUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQUklGbiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBSSUZuX01zayAgICAgICAgICAgKDB4M2Z1bCA8PCBCUFdNX0NBUElGX0NBUFJJRm5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUFJJRm4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBGSUYwX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUEZJRjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElGX0NBUEZJRjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUYwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGMV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUYxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUElGX0NBUEZJRjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJRl9DQVBGSUYxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQRklGMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElGX0NBUEZJRjJfUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQRklGMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBGSUYyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSUZfQ0FQRklGMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUEZJRjIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBGSUYzX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUEZJRjMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBCUFdNX0NBUElGX0NBUEZJRjNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUYzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGNF9Qb3MgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUY0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBCUFdNX0NBUElGX0NBUEZJRjRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQlBXTV9DQVBJRl9DQVBGSUY0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQRklGNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NBUElGX0NBUEZJRjVfUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDQVBJRjogQ0FQRklGNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBGSUY1X01zayAgICAgICAgICAgKDB4MXVsIDw8IEJQV01fQ0FQSUZfQ0FQRklGNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUEZJRjUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DQVBJRl9DQVBGSUZuX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q0FQSUY6IENBUEZJRm4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEJQV01fQ0FQSUZfQ0FQRklGbl9Nc2sgICAgICAgICAgICgweDNmdWwgPDwgQlBXTV9DQVBJRl9DQVBGSUZuX1BvcykgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNBUElGOiBDQVBGSUZuIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fUEJVRl9QQlVGX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OlBCVUY6IFBCVUYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBCUFdNX1BCVUZfUEJVRl9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9QQlVGX1BCVUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpQQlVGOiBQQlVGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NNUEJVRjBfQ01QQlVGX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBCVUYwOiBDTVBCVUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTVBCVUYwX0NNUEJVRl9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fQ01QQlVGMF9DTVBCVUZfUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QQlVGMDogQ01QQlVGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTVBCVUYxX0NNUEJVRl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QQlVGMTogQ01QQlVGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ01QQlVGMV9DTVBCVUZfTXNrICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0NNUEJVRjFfQ01QQlVGX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUEJVRjE6IENNUEJVRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ01QQlVGMl9DTVBCVUZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUEJVRjI6IENNUEJVRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NNUEJVRjJfQ01QQlVGX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9DTVBCVUYyX0NNUEJVRl9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBCVUYyOiBDTVBCVUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBCUFdNX0NNUEJVRjNfQ01QQlVGX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBCVUYzOiBDTVBCVUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQlBXTV9DTVBCVUYzX0NNUEJVRl9Nc2sgICAgICAgICAgKDB4ZmZmZnVsIDw8IEJQV01fQ01QQlVGM19DTVBCVUZfUG9zKSAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QQlVGMzogQ01QQlVGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQlBXTV9DTVBCVUY0X0NNUEJVRl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJQV01fVDo6Q01QQlVGNDogQ01QQlVGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEJQV01fQ01QQlVGNF9DTVBCVUZfTXNrICAgICAgICAgICgweGZmZmZ1bCA8PCBCUFdNX0NNUEJVRjRfQ01QQlVGX1BvcykgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUEJVRjQ6IENNUEJVRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEJQV01fQ01QQlVGNV9DTVBCVUZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCUFdNX1Q6OkNNUEJVRjU6IENNUEJVRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBCUFdNX0NNUEJVRjVfQ01QQlVGX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgQlBXTV9DTVBCVUY1X0NNUEJVRl9Qb3MpICAgICAgICAgICAgIC8qITwgQlBXTV9UOjpDTVBCVUY1OiBDTVBCVUYgTWFzayAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBCUFdNX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBCUFdNIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX0JQV01fUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2Nhbl9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9jYW5fcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU5M2FhYwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9jYW5fcmVnLmgKQEAgLTAsMCArMSw3ODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjYW5fcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIENBTiByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19DQU5fUkVHX0hfXworI2RlZmluZSBfX0NBTl9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIENBTiBDb250cm9sbGVyIEFyZWEgTmV0d29yayBDb250cm9sbGVyKENBTikKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgQ0FOIENvbnRyb2xsZXIKK0B7ICovCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIENBTl9JRl9UOjpDUkVRCisgICAgICogT2Zmc2V0OiAweDIwLCAweDgwICBJRm4gKFJlZ2lzdGVyIE1hcCBOb3RlIDIpIENvbW1hbmQgUmVxdWVzdCBSZWdpc3RlcnMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNTowXSAgIHxNZXNzYWdlTnVtYmVyfE1lc3NhZ2UgTnVtYmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwMS0weDIwOiBWYWxpZCBNZXNzYWdlIE51bWJlciwgdGhlIE1lc3NhZ2UgT2JqZWN0IGluIHRoZSBNZXNzYWdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UkFNIGlzIHNlbGVjdGVkIGZvciBkYXRhIHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDA6IE5vdCBhIHZhbGlkIE1lc3NhZ2UgTnVtYmVyLCBpbnRlcnByZXRlZCBhcyAweDIwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MjEtMHgzRjogTm90IGEgdmFsaWQgTWVzc2FnZSBOdW1iZXIsIGludGVycHJldGVkIGFzIDB4MDEtMHgxRi4KKyAgICAgKiB8WzE1XSAgICB8QnVzeSAgICAgIHxCdXN5IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVhZC93cml0ZSBhY3Rpb24gaGFzIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXcml0aW5nIHRvIHRoZSBJRm4gQ29tbWFuZCBSZXF1ZXN0IFJlZ2lzdGVyIGlzIGluIHByb2dyZXNzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNhbiBvbmx5IGJlIHJlYWQgYnkgdGhlIHNvZnR3YXJlLgorICAgICAqIEB2YXIgQ0FOX0lGX1Q6OkNNQVNLCisgICAgICogT2Zmc2V0OiAweDI0LCAweDg0ICBJRm4gQ29tbWFuZCBNYXNrIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8REFUX0IgICAgIHxBY2Nlc3MgRGF0YSBCeXRlcyBbNzo0XQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSBCeXRlcyBbNzo0XSB1bmNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zZmVyIERhdGEgQnl0ZXMgWzc6NF0gdG8gTWVzc2FnZSBPYmplY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgQnl0ZXMgWzc6NF0gdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBEYXRhIEJ5dGVzIFs3OjRdIHRvIElGbiBNZXNzYWdlIEJ1ZmZlciBSZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8REFUX0EgICAgIHxBY2Nlc3MgRGF0YSBCeXRlcyBbMzowXQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSBCeXRlcyBbMzowXSB1bmNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zZmVyIERhdGEgQnl0ZXMgWzM6MF0gdG8gTWVzc2FnZSBPYmplY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgQnl0ZXMgWzM6MF0gdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBEYXRhIEJ5dGVzIFszOjBdIHRvIElGbiBNZXNzYWdlIEJ1ZmZlciBSZWdpc3Rlci4KKyAgICAgKiB8WzJdICAgICB8VHhScXN0X05ld0RhdHxBY2Nlc3MgVHJhbnNtaXNzaW9uIFJlcXVlc3QgQml0IFdoZW4gV3JpdGUgT3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFR4UnFzdCBiaXQgdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgVHhScXN0IGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBhIHRyYW5zbWlzc2lvbiBpcyByZXF1ZXN0ZWQgYnkgcHJvZ3JhbW1pbmcgYml0IFR4UnFzdC9OZXdEYXQgaW4gdGhlIElGbiBDb21tYW5kIE1hc2sgUmVnaXN0ZXIsIGJpdCBUeFJxc3QgaW4gdGhlIElGbiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgd2lsbCBiZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFjY2VzcyBOZXcgRGF0YSBCaXQgd2hlbiBSZWFkIE9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTmV3RGF0IGJpdCByZW1haW5zIHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgTmV3RGF0IGJpdCBpbiB0aGUgTWVzc2FnZSBPYmplY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQSByZWFkIGFjY2VzcyB0byBhIE1lc3NhZ2UgT2JqZWN0IGNhbiBiZSBjb21iaW5lZCB3aXRoIHRoZSByZXNldCBvZiB0aGUgY29udHJvbCBiaXRzIEludFBuZCBhbmQgTmV3RGF0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWx1ZXMgb2YgdGhlc2UgYml0cyB0cmFuc2ZlcnJlZCB0byB0aGUgSUZuIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlciBhbHdheXMgcmVmbGVjdCB0aGUgc3RhdHVzIGJlZm9yZSByZXNldHRpbmcgdGhlc2UgYml0cy4KKyAgICAgKiB8WzNdICAgICB8Q2xySW50UG5kIHxDbGVhciBJbnRlcnJ1cHQgUGVuZGluZyBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB3cml0aW5nIHRvIGEgTWVzc2FnZSBPYmplY3QsIHRoaXMgYml0IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludFBuZCBiaXQgKENBTl9JRm5fTUNPTlsxM10pIHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciBJbnRQbmQgYml0IGluIHRoZSBNZXNzYWdlIE9iamVjdC4KKyAgICAgKiB8WzRdICAgICB8Q29udHJvbCAgIHxDb250cm9sIEFjY2VzcyBDb250cm9sIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnRyb2wgQml0cyB1bmNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zZmVyIENvbnRyb2wgQml0cyB0byBNZXNzYWdlIE9iamVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udHJvbCBCaXRzIHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNmZXIgQ29udHJvbCBCaXRzIHRvIElGbiBNZXNzYWdlIEJ1ZmZlciBSZWdpc3Rlci4KKyAgICAgKiB8WzVdICAgICB8QXJiICAgICAgIHxBY2Nlc3MgQXJiaXRyYXRpb24gQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXJiaXRyYXRpb24gYml0cyB1bmNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zZmVyIElkZW50aWZpZXIgKyBEaXIgKENBTl9JRm5fQVJCMlsxM10pICsgWHRkIChDQU5fSUZuX0FSQjJbMTRdKSArIE1zZ1ZhbCAoQ0FOX0lGbl9BUEIyWzE1XSkgdG8gTWVzc2FnZSBPYmplY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFyYml0cmF0aW9uIGJpdHMgdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBJZGVudGlmaWVyICsgRGlyICsgWHRkICsgTXNnVmFsIHRvIElGbiBNZXNzYWdlIEJ1ZmZlciBSZWdpc3Rlci4KKyAgICAgKiB8WzZdICAgICB8TWFzayAgICAgIHxBY2Nlc3MgTWFzayBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXNrIGJpdHMgdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBJZGVudGlmaWVyIE1hc2sgKyBNRGlyICsgTVh0ZCB0byBNZXNzYWdlIE9iamVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzayBiaXRzIHVuY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNmZXIgSWRlbnRpZmllciBNYXNrICsgTURpciArIE1YdGQgdG8gSUZuIE1lc3NhZ2UgQnVmZmVyIFJlZ2lzdGVyLgorICAgICAqIHxbN10gICAgIHxXUl9SRCAgICAgfFdyaXRlIC8gUmVhZCBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlYWQ6IFRyYW5zZmVyIGRhdGEgZnJvbSB0aGUgTWVzc2FnZSBPYmplY3QgYWRkcmVzc2VkIGJ5IHRoZSBDb21tYW5kIFJlcXVlc3QgUmVnaXN0ZXIgaW50byB0aGUgc2VsZWN0ZWQgTWVzc2FnZSBCdWZmZXIgUmVnaXN0ZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXcml0ZTogVHJhbnNmZXIgZGF0YSBmcm9tIHRoZSBzZWxlY3RlZCBNZXNzYWdlIEJ1ZmZlciBSZWdpc3RlcnMgdG8gdGhlIE1lc3NhZ2UgT2JqZWN0IGFkZHJlc3NlZCBieSB0aGUgQ29tbWFuZCBSZXF1ZXN0IFJlZ2lzdGVyLgorICAgICAqIEB2YXIgQ0FOX0lGX1Q6Ok1BU0sxCisgICAgICogT2Zmc2V0OiAweDI4LCAweDg4ICBJRm4gTWFzayAxIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8TXNrWzE1OjBdIHxJZGVudGlmaWVyIE1hc2sgMTUtMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIGlkZW50aWZpZXIgb2YgdGhlIG1lc3NhZ2Ugb2JqZWN0IGNhbm5vdCBpbmhpYml0IHRoZSBtYXRjaCBpbiB0aGUgYWNjZXB0YW5jZSBmaWx0ZXJpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBjb3JyZXNwb25kaW5nIGlkZW50aWZpZXIgYml0IGlzIHVzZWQgZm9yIGFjY2VwdGFuY2UgZmlsdGVyaW5nLgorICAgICAqIEB2YXIgQ0FOX0lGX1Q6Ok1BU0syCisgICAgICogT2Zmc2V0OiAweDJDLCAweDhDICBJRm4gTWFzayAyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzEyOjBdICB8TXNrWzI4OjE2XXxJZGVudGlmaWVyIE1hc2sgMjgtMTYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBtZXNzYWdlIG9iamVjdCBjYW5ub3QgaW5oaWJpdCB0aGUgbWF0Y2ggaW4gdGhlIGFjY2VwdGFuY2UgZmlsdGVyaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY29ycmVzcG9uZGluZyBpZGVudGlmaWVyIGJpdCBpcyB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgICAgKiB8WzE0XSAgICB8TURpciAgICAgIHxNYXNrIE1lc3NhZ2UgRGlyZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBtZXNzYWdlIGRpcmVjdGlvbiBiaXQgKERpciAoQ0FOX0lGbl9BUkIyWzEzXSkpIGhhcyBubyBlZmZlY3Qgb24gdGhlIGFjY2VwdGFuY2UgZmlsdGVyaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgbWVzc2FnZSBkaXJlY3Rpb24gYml0IChEaXIpIGlzIHVzZWQgZm9yIGFjY2VwdGFuY2UgZmlsdGVyaW5nLgorICAgICAqIHxbMTVdICAgIHxNWHRkICAgICAgfE1hc2sgRXh0ZW5kZWQgSWRlbnRpZmllcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgZXh0ZW5kZWQgaWRlbnRpZmllciBiaXQgKElERSkgaGFzIG5vIGVmZmVjdCBvbiB0aGUgYWNjZXB0YW5jZSBmaWx0ZXJpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBleHRlbmRlZCBpZGVudGlmaWVyIGJpdCAoSURFKSBpcyB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIDExLWJpdCAoInN0YW5kYXJkIikgSWRlbnRpZmllcnMgYXJlIHVzZWQgZm9yIGEgTWVzc2FnZSBPYmplY3QsIHRoZSBpZGVudGlmaWVycyBvZiByZWNlaXZlZCBEYXRhIEZyYW1lcyBhcmUgd3JpdHRlbiBpbnRvIGJpdHMgSUQyOCB0byBJRDE4IChDQU5fSUZuX0FSQjJbMTI6Ml0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBhY2NlcHRhbmNlIGZpbHRlcmluZywgb25seSB0aGVzZSBiaXRzIHRvZ2V0aGVyIHdpdGggbWFzayBiaXRzIE1zazI4IHRvIE1zazE4IChDQU5fSUZuX01BU0syWzEyOjJdKSBhcmUgY29uc2lkZXJlZC4KKyAgICAgKiBAdmFyIENBTl9JRl9UOjpBUkIxCisgICAgICogT2Zmc2V0OiAweDMwLCAweDkwICBJRm4gQXJiaXRyYXRpb24gMSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfElEWzE1OjBdICB8TWVzc2FnZSBJZGVudGlmaWVyIDE1LTAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJRDI4IC0gSUQwLCAyOS1iaXQgSWRlbnRpZmllciAoIkV4dGVuZGVkIEZyYW1lIikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SUQyOCAtIElEMTgsIDExLWJpdCBJZGVudGlmaWVyICgiU3RhbmRhcmQgRnJhbWUiKQorICAgICAqIEB2YXIgQ0FOX0lGX1Q6OkFSQjIKKyAgICAgKiBPZmZzZXQ6IDB4MzQsIDB4OTQgIElGbiBBcmJpdHJhdGlvbiAyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzEyOjBdICB8SURbMjg6MTZdIHxNZXNzYWdlIElkZW50aWZpZXIgMjgtMTYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJRDI4IC0gSUQwLCAyOS1iaXQgSWRlbnRpZmllciAoIkV4dGVuZGVkIEZyYW1lIikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SUQyOCAtIElEMTgsIDExLWJpdCBJZGVudGlmaWVyICgiU3RhbmRhcmQgRnJhbWUiKQorICAgICAqIHxbMTNdICAgIHxEaXIgICAgICAgfE1lc3NhZ2UgRGlyZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpcmVjdGlvbiBpcyByZWNlaXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uIFR4UnFzdCwgYSBSZW1vdGUgRnJhbWUgd2l0aCB0aGUgaWRlbnRpZmllciBvZiB0aGlzIE1lc3NhZ2UgT2JqZWN0IGlzIHRyYW5zbWl0dGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uIHJlY2VwdGlvbiBvZiBhIERhdGEgRnJhbWUgd2l0aCBtYXRjaGluZyBpZGVudGlmaWVyLCB0aGF0IG1lc3NhZ2UgaXMgc3RvcmVkIGluIHRoaXMgTWVzc2FnZSBPYmplY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERpcmVjdGlvbiBpcyB0cmFuc21pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbiBUeFJxc3QsIHRoZSByZXNwZWN0aXZlIE1lc3NhZ2UgT2JqZWN0IGlzIHRyYW5zbWl0dGVkIGFzIGEgRGF0YSBGcmFtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbiByZWNlcHRpb24gb2YgYSBSZW1vdGUgRnJhbWUgd2l0aCBtYXRjaGluZyBpZGVudGlmaWVyLCB0aGUgVHhScXN0IGJpdCAoQ0FOX0lGbl9DTUFTS1syXSkgb2YgdGhpcyBNZXNzYWdlIE9iamVjdCBpcyBzZXQgKGlmIFJtdEVuIChDQU5fSUZuX01DT05bOV0pID0gb25lKS4KKyAgICAgKiB8WzE0XSAgICB8WHRkICAgICAgIHxFeHRlbmRlZCBJZGVudGlmaWVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSAxMS1iaXQgKCJzdGFuZGFyZCIpIElkZW50aWZpZXIgd2lsbCBiZSB1c2VkIGZvciB0aGlzIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgMjktYml0ICgiZXh0ZW5kZWQiKSBJZGVudGlmaWVyIHdpbGwgYmUgdXNlZCBmb3IgdGhpcyBNZXNzYWdlIE9iamVjdC4KKyAgICAgKiB8WzE1XSAgICB8TXNnVmFsICAgIHxNZXNzYWdlIFZhbGlkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBNZXNzYWdlIE9iamVjdCBpcyBpZ25vcmVkIGJ5IHRoZSBNZXNzYWdlIEhhbmRsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBNZXNzYWdlIE9iamVjdCBpcyBjb25maWd1cmVkIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCBieSB0aGUgTWVzc2FnZSBIYW5kbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSBtdXN0IHJlc2V0IHRoZSBNc2dWYWwgYml0IG9mIGFsbCB1bnVzZWQgTWVzc2FnZXMgT2JqZWN0cyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIGJlZm9yZSBpdCByZXNldHMgYml0IEluaXQgKENBTl9DT05bMF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IG11c3QgYWxzbyBiZSByZXNldCBiZWZvcmUgdGhlIGlkZW50aWZpZXIgSWQyOC0wIChDQU5fSUZuX0FSQjEvMiksIHRoZSBjb250cm9sIGJpdHMgWHRkIChDQU5fSUZuX0FSQjJbMTRdKSwgRGlyIChDQU5fSUZuX0FQQjJbMTNdKSwgb3IgdGhlIERhdGEgTGVuZ3RoIENvZGUgRExDMy0wIChDQU5fSUZuX01DT05bMzowXSkgYXJlIG1vZGlmaWVkLCBvciBpZiB0aGUgTWVzc2FnZXMgT2JqZWN0IGlzIG5vIGxvbmdlciByZXF1aXJlZC4KKyAgICAgKiBAdmFyIENBTl9JRl9UOjpNQ09OCisgICAgICogT2Zmc2V0OiAweDM4LCAweDk4ICBJRm4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8RExDICAgICAgIHxEYXRhIExlbmd0aCBDb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MC04OiBEYXRhIEZyYW1lIGhhcyAwLTggZGF0YSBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw5LTE1OiBEYXRhIEZyYW1lIGhhcyA4IGRhdGEgYnl0ZXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgRGF0YSBMZW5ndGggQ29kZSBvZiBhIE1lc3NhZ2UgT2JqZWN0IG11c3QgYmUgZGVmaW5lZCB0aGUgc2FtZSBhcyBpbiBhbGwgdGhlIGNvcnJlc3BvbmRpbmcgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGlkZW50aWZpZXIgYXQgb3RoZXIgbm9kZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgTWVzc2FnZSBIYW5kbGVyIHN0b3JlcyBhIGRhdGEgZnJhbWUsIGl0IHdpbGwgd3JpdGUgdGhlIERMQyB0byB0aGUgdmFsdWUgZ2l2ZW4gYnkgdGhlIHJlY2VpdmVkIG1lc3NhZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSAwOiAxc3QgZGF0YSBieXRlIG9mIGEgQ0FOIERhdGEgRnJhbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEYXRhIDE6IDJuZCBkYXRhIGJ5dGUgb2YgYSBDQU4gRGF0YSBGcmFtZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgMjogM3JkIGRhdGEgYnl0ZSBvZiBhIENBTiBEYXRhIEZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSAzOiA0dGggZGF0YSBieXRlIG9mIGEgQ0FOIERhdGEgRnJhbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEYXRhIDQ6IDV0aCBkYXRhIGJ5dGUgb2YgYSBDQU4gRGF0YSBGcmFtZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgNTogNnRoIGRhdGEgYnl0ZSBvZiBhIENBTiBEYXRhIEZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSA2OiA3dGggZGF0YSBieXRlIG9mIGEgQ0FOIERhdGEgRnJhbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEYXRhIDcgOiA4dGggZGF0YSBieXRlIG9mIGEgQ0FOIERhdGEgRnJhbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgRGF0YSAwIEJ5dGUgaXMgdGhlIGZpcnN0IGRhdGEgYnl0ZSBzaGlmdGVkIGludG8gdGhlIHNoaWZ0IHJlZ2lzdGVyIG9mIHRoZSBDQU4gQ29yZSBkdXJpbmcgYSByZWNlcHRpb24gd2hpbGUgdGhlIERhdGEgNyBieXRlIGlzIHRoZSBsYXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIE1lc3NhZ2UgSGFuZGxlciBzdG9yZXMgYSBEYXRhIEZyYW1lLCBpdCB3aWxsIHdyaXRlIGFsbCB0aGUgZWlnaHQgZGF0YSBieXRlcyBpbnRvIGEgTWVzc2FnZSBPYmplY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIERhdGEgTGVuZ3RoIENvZGUgaXMgbGVzcyB0aGFuIDgsIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgdGhlIE1lc3NhZ2UgT2JqZWN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdW5zcGVjaWZpZWQgdmFsdWVzLgorICAgICAqIHxbN10gICAgIHxFb0IgICAgICAgfEVuZCBPZiBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWVzc2FnZSBPYmplY3QgYmVsb25ncyB0byBhIEZJRk8gQnVmZmVyIGFuZCBpcyBub3QgdGhlIGxhc3QgTWVzc2FnZSBPYmplY3Qgb2YgdGhhdCBGSUZPIEJ1ZmZlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2luZ2xlIE1lc3NhZ2UgT2JqZWN0IG9yIGxhc3QgTWVzc2FnZSBPYmplY3Qgb2YgYSBGSUZPIEJ1ZmZlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB1c2VkIHRvIGNvbmNhdGVuYXRlIHR3byBvciBtb3JlIE1lc3NhZ2UgT2JqZWN0cyAodXAgdG8gMzIpIHRvIGJ1aWxkIGEgRklGTyBCdWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIHNpbmdsZSBNZXNzYWdlIE9iamVjdHMgKG5vdCBiZWxvbmdpbmcgdG8gYSBGSUZPIEJ1ZmZlciksIHRoaXMgYml0IG11c3QgYWx3YXlzIGJlIHNldCB0byBvbmUuCisgICAgICogfFs4XSAgICAgfFR4UnFzdCAgICB8VHJhbnNtaXQgUmVxdWVzdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGlzIE1lc3NhZ2UgT2JqZWN0IGlzIG5vdCB3YWl0aW5nIGZvciB0cmFuc21pc3Npb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0cmFuc21pc3Npb24gb2YgdGhpcyBNZXNzYWdlIE9iamVjdCBpcyByZXF1ZXN0ZWQgYW5kIGlzIG5vdCB5ZXQgZG9uZS4KKyAgICAgKiB8WzldICAgICB8Um10RW4gICAgIHxSZW1vdGUgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXQgdGhlIHJlY2VwdGlvbiBvZiBhIFJlbW90ZSBGcmFtZSwgVHhScXN0IChDQU5fSUZuX01DT05bOF0pIGlzIGxlZnQgdW5jaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdCB0aGUgcmVjZXB0aW9uIG9mIGEgUmVtb3RlIEZyYW1lLCBUeFJxc3QgaXMgc2V0LgorICAgICAqIHxbMTBdICAgIHxSeElFICAgICAgfFJlY2VpdmUgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludFBuZCAoQ0FOX0lGbl9NQ09OWzEzXSkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgcmVjZXB0aW9uIG9mIGEgZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludFBuZCB3aWxsIGJlIHNldCBhZnRlciBhIHN1Y2Nlc3NmdWwgcmVjZXB0aW9uIG9mIGEgZnJhbWUuCisgICAgICogfFsxMV0gICAgfFR4SUUgICAgICB8VHJhbnNtaXQgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludFBuZCAoQ0FOX0lGbl9NQ09OWzEzXSkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZCBhZnRlciB0aGUgc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24gb2YgYSBmcmFtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50UG5kIHdpbGwgYmUgc2V0IGFmdGVyIGEgc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24gb2YgYSBmcmFtZS4KKyAgICAgKiB8WzEyXSAgICB8VU1hc2sgICAgIHxVc2UgQWNjZXB0YW5jZSBNYXNrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc2sgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVXNlIE1hc2sgKE1zazI4LTAsIE1YdGQsIGFuZCBNRGlyKSBmb3IgYWNjZXB0YW5jZSBmaWx0ZXJpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdGhlIFVNYXNrIGJpdCBpcyBzZXQgdG8gb25lLCB0aGUgTWVzc2FnZSBPYmplY3QncyBtYXNrIGJpdHMgaGF2ZSB0byBiZSBwcm9ncmFtbWVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvZiB0aGUgTWVzc2FnZSBPYmplY3QgYmVmb3JlIE1zZ1ZhbCBiaXQgKENBTl9JRm5fQVBCMlsxNV0pIGlzIHNldCB0byBvbmUuCisgICAgICogfFsxM10gICAgfEludFBuZCAgICB8SW50ZXJydXB0IFBlbmRpbmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhpcyBtZXNzYWdlIG9iamVjdCBpcyBub3QgdGhlIHNvdXJjZSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgbWVzc2FnZSBvYmplY3QgaXMgdGhlIHNvdXJjZSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEludGVycnVwdCBJZGVudGlmaWVyIGluIHRoZSBJbnRlcnJ1cHQgUmVnaXN0ZXIgd2lsbCBwb2ludCB0byB0aGlzIG1lc3NhZ2Ugb2JqZWN0IGlmIHRoZXJlIGlzIG5vIG90aGVyIGludGVycnVwdCBzb3VyY2Ugd2l0aCBoaWdoZXIgcHJpb3JpdHkuCisgICAgICogfFsxNF0gICAgfE1zZ0xzdCAgICB8TWVzc2FnZSBMb3N0IChvbmx5IHZhbGlkIGZvciBNZXNzYWdlIE9iamVjdHMgd2l0aCBkaXJlY3Rpb24gPSByZWNlaXZlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gbWVzc2FnZSBsb3N0IHNpbmNlIGxhc3QgdGltZSB0aGlzIGJpdCB3YXMgcmVzZXQgYnkgdGhlIENQVS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIE1lc3NhZ2UgSGFuZGxlciBzdG9yZWQgYSBuZXcgbWVzc2FnZSBpbnRvIHRoaXMgb2JqZWN0IHdoZW4gTmV3RGF0IHdhcyBzdGlsbCBzZXQsIHRoZSBDUFUgaGFzIGxvc3QgYSBtZXNzYWdlLgorICAgICAqIHxbMTVdICAgIHxOZXdEYXQgICAgfE5ldyBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIG5ldyBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gaW50byB0aGUgZGF0YSBwb3J0aW9uIG9mIHRoaXMgTWVzc2FnZSBPYmplY3QgYnkgdGhlIE1lc3NhZ2UgSGFuZGxlciBzaW5jZSBsYXN0IHRpbWUgdGhpcyBmbGFnIHdhcyBjbGVhcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzb2Z0d2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIE1lc3NhZ2UgSGFuZGxlciBvciB0aGUgYXBwbGljYXRpb24gc29mdHdhcmUgaGFzIHdyaXR0ZW4gbmV3IGRhdGEgaW50byB0aGUgZGF0YSBwb3J0aW9uIG9mIHRoaXMgTWVzc2FnZSBPYmplY3QuCisgICAgICogQHZhciBDQU5fSUZfVDo6REFUX0ExCisgICAgICogT2Zmc2V0OiAweDNDLCAweDlDICBJRm4gRGF0YSBBMSBSZWdpc3RlciAoUmVnaXN0ZXIgTWFwIE5vdGUgMykKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxEYXRhMCAgICAgfERhdGEgQnl0ZSAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MXN0IGRhdGEgYnl0ZSBvZiBhIENBTiBEYXRhIEZyYW1lCisgICAgICogfFsxNTo4XSAgfERhdGExICAgICB8RGF0YSBCeXRlIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwybmQgZGF0YSBieXRlIG9mIGEgQ0FOIERhdGEgRnJhbWUKKyAgICAgKiBAdmFyIENBTl9JRl9UOjpEQVRfQTIKKyAgICAgKiBPZmZzZXQ6IDB4NDAsIDB4QTAgIElGbiBEYXRhIEEyIFJlZ2lzdGVyIChSZWdpc3RlciBNYXAgTm90ZSAzKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfERhdGEyICAgICB8RGF0YSBCeXRlIDIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzcmQgZGF0YSBieXRlIG9mIENBTiBEYXRhIEZyYW1lCisgICAgICogfFsxNTo4XSAgfERhdGEzICAgICB8RGF0YSBCeXRlIDMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0dGggZGF0YSBieXRlIG9mIENBTiBEYXRhIEZyYW1lCisgICAgICogQHZhciBDQU5fSUZfVDo6REFUX0IxCisgICAgICogT2Zmc2V0OiAweDQ0LCAweEE0ICBJRm4gRGF0YSBCMSBSZWdpc3RlciAoUmVnaXN0ZXIgTWFwIE5vdGUgMykKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxEYXRhNCAgICAgfERhdGEgQnl0ZSA0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NXRoIGRhdGEgYnl0ZSBvZiBDQU4gRGF0YSBGcmFtZQorICAgICAqIHxbMTU6OF0gIHxEYXRhNSAgICAgfERhdGEgQnl0ZSA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NnRoIGRhdGEgYnl0ZSBvZiBDQU4gRGF0YSBGcmFtZQorICAgICAqIEB2YXIgQ0FOX0lGX1Q6OkRBVF9CMgorICAgICAqIE9mZnNldDogMHg0OCwgMHhBOCAgSUZuIERhdGEgQjIgUmVnaXN0ZXIgKFJlZ2lzdGVyIE1hcCBOb3RlIDMpCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8RGF0YTYgICAgIHxEYXRhIEJ5dGUgNgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDd0aCBkYXRhIGJ5dGUgb2YgQ0FOIERhdGEgRnJhbWUuCisgICAgICogfFsxNTo4XSAgfERhdGE3ICAgICB8RGF0YSBCeXRlIDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw4dGggZGF0YSBieXRlIG9mIENBTiBEYXRhIEZyYW1lLgorICAgICAqLworCisgICAgX19JTyB1aW50MzJfdCBDUkVROyAgICAgICAgICAvKiBPZmZzZXQ6IDB4MjAsIDB4ODAgIElGbiAoUmVnaXN0ZXIgTWFwIE5vdGUgMikgQ29tbWFuZCBSZXF1ZXN0IFJlZ2lzdGVycyAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ01BU0s7ICAgICAgICAgLyogT2Zmc2V0OiAweDI0LCAweDg0ICBJRm4gQ29tbWFuZCBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE1BU0sxOyAgICAgICAgIC8qIE9mZnNldDogMHgyOCwgMHg4OCAgSUZuIE1hc2sgMSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNQVNLMjsgICAgICAgICAvKiBPZmZzZXQ6IDB4MkMsIDB4OEMgIElGbiBNYXNrIDIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQVJCMTsgICAgICAgICAgLyogT2Zmc2V0OiAweDMwLCAweDkwICBJRm4gQXJiaXRyYXRpb24gMSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFSQjI7ICAgICAgICAgIC8qIE9mZnNldDogMHgzNCwgMHg5NCAgSUZuIEFyYml0cmF0aW9uIDIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNQ09OOyAgICAgICAgICAvKiBPZmZzZXQ6IDB4MzgsIDB4OTggIElGbiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgREFUX0ExOyAgICAgICAgLyogT2Zmc2V0OiAweDNDLCAweDlDICBJRm4gRGF0YSBBMSBSZWdpc3RlciAoUmVnaXN0ZXIgTWFwIE5vdGUgMykgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERBVF9BMjsgICAgICAgIC8qIE9mZnNldDogMHg0MCwgMHhBMCAgSUZuIERhdGEgQTIgUmVnaXN0ZXIgKFJlZ2lzdGVyIE1hcCBOb3RlIDMpICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBEQVRfQjE7ICAgICAgICAvKiBPZmZzZXQ6IDB4NDQsIDB4QTQgIElGbiBEYXRhIEIxIFJlZ2lzdGVyIChSZWdpc3RlciBNYXAgTm90ZSAzKSAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgREFUX0IyOyAgICAgICAgLyogT2Zmc2V0OiAweDQ4LCAweEE4ICBJRm4gRGF0YSBCMiBSZWdpc3RlciAoUmVnaXN0ZXIgTWFwIE5vdGUgMykgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzEzXTsKKworfSBDQU5fSUZfVDsKKworCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIENBTl9UOjpDT04KKyAgICAgKiBPZmZzZXQ6IDB4MDAgIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJbml0ICAgICAgfEluaXQgSW5pdGlhbGl6YXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9ybWFsIE9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5pdGlhbGl6YXRpb24gaXMgc3RhcnRlZC4KKyAgICAgKiB8WzFdICAgICB8SUUgICAgICAgIHxNb2R1bGUgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxTSUUgICAgICAgfFN0YXR1cyBDaGFuZ2UgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGVkIC0gTm8gU3RhdHVzIENoYW5nZSBJbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQgLSBBbiBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiBhIG1lc3NhZ2UgdHJhbnNmZXIgaXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBvciBhIENBTiBidXMgZXJyb3IgaXMgZGV0ZWN0ZWQuCisgICAgICogfFszXSAgICAgfEVJRSAgICAgICB8RXJyb3IgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGVkIC0gTm8gRXJyb3IgU3RhdHVzIEludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZCAtIEEgY2hhbmdlIGluIHRoZSBiaXRzIEJPZmYgKENBTl9TVEFUVVNbN10pIG9yIEVXYXJuIChDQU5fU1RBVFVTWzZdKSBpbiB0aGUgU3RhdHVzIFJlZ2lzdGVyIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LgorICAgICAqIHxbNV0gICAgIHxEQVIgICAgICAgfEF1dG9tYXRpYyBSZS1UcmFuc21pc3Npb24gRGlzYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG9tYXRpYyBSZXRyYW5zbWlzc2lvbiBvZiBkaXN0dXJiZWQgbWVzc2FnZXMgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0b21hdGljIFJldHJhbnNtaXNzaW9uIGRpc2FibGVkLgorICAgICAqIHxbNl0gICAgIHxDQ0UgICAgICAgfENvbmZpZ3VyYXRpb24gQ2hhbmdlIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHdyaXRlIGFjY2VzcyB0byB0aGUgQml0IFRpbWluZyBSZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV3JpdGUgYWNjZXNzIHRvIHRoZSBCaXQgVGltaW5nIFJlZ2lzdGVyIChDQU5fQlRJTUUpIGFsbG93ZWQuICh3aGlsZSBJbml0IGJpdCAoQ0FOX0NPTlswXSkgPSAxKS4KKyAgICAgKiB8WzddICAgICB8VGVzdCAgICAgIHxUZXN0IE1vZGUgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9ybWFsIE9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGVzdCBNb2RlLgorICAgICAqIEB2YXIgQ0FOX1Q6OlNUQVRVUworICAgICAqIE9mZnNldDogMHgwNCAgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8TEVDICAgICAgIHxMYXN0IEVycm9yIENvZGUgKFR5cGUgT2YgVGhlIExhc3QgRXJyb3IgVG8gT2NjdXIgT24gVGhlIENBTiBCdXMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIExFQyBmaWVsZCBob2xkcyBhIGNvZGUsIHdoaWNoIGluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgbGFzdCBlcnJvciB0byBvY2N1ciBvbiB0aGUgQ0FOIGJ1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIHdpbGwgYmUgY2xlYXJlZCB0byAnMCcgd2hlbiBhIG1lc3NhZ2UgaGFzIGJlZW4gdHJhbnNmZXJyZWQgKHJlY2VwdGlvbiBvciB0cmFuc21pc3Npb24pIHdpdGhvdXQgZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHVudXNlZCBjb2RlICc3JyBtYXkgYmUgd3JpdHRlbiBieSB0aGUgQ1BVIHRvIGNoZWNrIGZvciB1cGRhdGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHRoZSBlcnJvciBjb2RlLgorICAgICAqIHxbM10gICAgIHxUeE9LICAgICAgfFRyYW5zbWl0dGVkIEEgTWVzc2FnZSBTdWNjZXNzZnVsbHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2luY2UgdGhpcyBiaXQgd2FzIHJlc2V0IGJ5IHRoZSBDUFUsIG5vIG1lc3NhZ2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIG5ldmVyIHJlc2V0IGJ5IHRoZSBDQU4gQ29yZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2luY2UgdGhpcyBiaXQgd2FzIGxhc3QgcmVzZXQgYnkgdGhlIENQVSwgYSBtZXNzYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSAoZXJyb3IgZnJlZSBhbmQgYWNrbm93bGVkZ2VkIGJ5IGF0IGxlYXN0IG9uZSBvdGhlciBub2RlKSB0cmFuc21pdHRlZC4KKyAgICAgKiB8WzRdICAgICB8UnhPSyAgICAgIHxSZWNlaXZlZCBBIE1lc3NhZ2UgU3VjY2Vzc2Z1bGx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIG1lc3NhZ2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIHNpbmNlIHRoaXMgYml0IHdhcyBsYXN0IHJlc2V0IGJ5IHRoZSBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgbmV2ZXIgcmVzZXQgYnkgdGhlIENBTiBDb3JlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIG1lc3NhZ2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIHNpbmNlIHRoaXMgYml0IHdhcyBsYXN0IHJlc2V0IGJ5IHRoZSBDUFUgKGluZGVwZW5kZW50IG9mIHRoZSByZXN1bHQgb2YgYWNjZXB0YW5jZSBmaWx0ZXJpbmcpLgorICAgICAqIHxbNV0gICAgIHxFUGFzcyAgICAgfEVycm9yIFBhc3NpdmUgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIENBTiBDb3JlIGlzIGVycm9yIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIENBTiBDb3JlIGlzIGluIHRoZSBlcnJvciBwYXNzaXZlIHN0YXRlIGFzIGRlZmluZWQgaW4gdGhlIENBTiBTcGVjaWZpY2F0aW9uLgorICAgICAqIHxbNl0gICAgIHxFV2FybiAgICAgfEVycm9yIFdhcm5pbmcgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJvdGggZXJyb3IgY291bnRlcnMgYXJlIGJlbG93IHRoZSBlcnJvciB3YXJuaW5nIGxpbWl0IG9mIDk2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdCBsZWFzdCBvbmUgb2YgdGhlIGVycm9yIGNvdW50ZXJzIGluIHRoZSBFTUwgaGFzIHJlYWNoZWQgdGhlIGVycm9yIHdhcm5pbmcgbGltaXQgb2YgOTYuCisgICAgICogfFs3XSAgICAgfEJPZmYgICAgICB8QnVzLU9mZiBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIENBTiBtb2R1bGUgaXMgbm90IGluIGJ1cy1vZmYgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBDQU4gbW9kdWxlIGlzIGluIGJ1cy1vZmYgc3RhdGUuCisgICAgICogQHZhciBDQU5fVDo6RVJSCisgICAgICogT2Zmc2V0OiAweDA4ICBFcnJvciBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8VEVDICAgICAgIHxUcmFuc21pdCBFcnJvciBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWN0dWFsIHN0YXRlIG9mIHRoZSBUcmFuc21pdCBFcnJvciBDb3VudGVyLiBWYWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUuCisgICAgICogfFsxNDo4XSAgfFJFQyAgICAgICB8UmVjZWl2ZSBFcnJvciBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWN0dWFsIHN0YXRlIG9mIHRoZSBSZWNlaXZlIEVycm9yIENvdW50ZXIuIFZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEyNy4KKyAgICAgKiB8WzE1XSAgICB8UlAgICAgICAgIHxSZWNlaXZlIEVycm9yIFBhc3NpdmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIFJlY2VpdmUgRXJyb3IgQ291bnRlciBpcyBiZWxvdyB0aGUgZXJyb3IgcGFzc2l2ZSBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIFJlY2VpdmUgRXJyb3IgQ291bnRlciBoYXMgcmVhY2hlZCB0aGUgZXJyb3IgcGFzc2l2ZSBsZXZlbCBhcyBkZWZpbmVkIGluIHRoZSBDQU4gU3BlY2lmaWNhdGlvbi4KKyAgICAgKiBAdmFyIENBTl9UOjpCVElNRQorICAgICAqIE9mZnNldDogMHgwQyAgQml0IFRpbWluZyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs1OjBdICAgfEJSUCAgICAgICB8QmF1ZCBSYXRlIFByZXNjYWxlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDEtMHgzRjogVGhlIHZhbHVlIGJ5IHdoaWNoIHRoZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBpcyBkaXZpZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBiaXQgdGltZSBxdWFudGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGJpdCB0aW1lIGlzIGJ1aWx0IHVwIGZyb20gYSBtdWx0aXBsZSBvZiB0aGlzIHF1YW50YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxWYWxpZCB2YWx1ZXMgZm9yIHRoZSBCYXVkIFJhdGUgUHJlc2NhbGVyIGFyZSBbIDAgLi4uIDYzIF0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdHVhbCBpbnRlcnByZXRhdGlvbiBieSB0aGUgaGFyZHdhcmUgb2YgdGhpcyB2YWx1ZSBpcyBzdWNoIHRoYXQgb25lIG1vcmUgdGhhbiB0aGUgdmFsdWUgcHJvZ3JhbW1lZCBoZXJlIGlzIHVzZWQuCisgICAgICogfFs3OjZdICAgfFNKVyAgICAgICB8KFJlKVN5bmNocm9uaXphdGlvbiBKdW1wIFdpZHRoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwLTB4MzogVmFsaWQgcHJvZ3JhbW1lZCB2YWx1ZXMgYXJlIFswIC4uLiAzXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYWN0dWFsIGludGVycHJldGF0aW9uIGJ5IHRoZSBoYXJkd2FyZSBvZiB0aGlzIHZhbHVlIGlzIHN1Y2ggdGhhdCBvbmUgbW9yZSB0aGFuIHRoZSB2YWx1ZSBwcm9ncmFtbWVkIGhlcmUgaXMgdXNlZC4KKyAgICAgKiB8WzExOjhdICB8VFNlZzEgICAgIHxUaW1lIFNlZ21lbnQgQmVmb3JlIFRoZSBTYW1wbGUgUG9pbnQgTWludXMgU3luY19TZWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAxLTB4MEY6IHZhbGlkIHZhbHVlcyBmb3IgVFNlZzEgYXJlIFsxIC4uLiAxNV0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdHVhbCBpbnRlcnByZXRhdGlvbiBieSB0aGUgaGFyZHdhcmUgb2YgdGhpcyB2YWx1ZSBpcyBzdWNoIHRoYXQgb25lIG1vcmUgdGhhbiB0aGUgdmFsdWUgcHJvZ3JhbW1lZCBpcyB1c2VkLgorICAgICAqIHxbMTQ6MTJdIHxUU2VnMiAgICAgfFRpbWUgU2VnbWVudCBBZnRlciBTYW1wbGUgUG9pbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAtMHg3OiBWYWxpZCB2YWx1ZXMgZm9yIFRTZWcyIGFyZSBbMCAuLi4gN10uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdHVhbCBpbnRlcnByZXRhdGlvbiBieSB0aGUgaGFyZHdhcmUgb2YgdGhpcyB2YWx1ZSBpcyBzdWNoIHRoYXQgb25lIG1vcmUgdGhhbiB0aGUgdmFsdWUgcHJvZ3JhbW1lZCBoZXJlIGlzIHVzZWQuCisgICAgICogQHZhciBDQU5fVDo6SUlEUgorICAgICAqIE9mZnNldDogMHgxMCAgSW50ZXJydXB0IElkZW50aWZpZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxJbnRJZCAgICAgfEludGVycnVwdCBJZGVudGlmaWVyIChJbmRpY2F0ZXMgVGhlIFNvdXJjZSBPZiBUaGUgSW50ZXJydXB0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHNldmVyYWwgaW50ZXJydXB0cyBhcmUgcGVuZGluZywgdGhlIENBTiBJbnRlcnJ1cHQgUmVnaXN0ZXIgd2lsbCBwb2ludCB0byB0aGUgcGVuZGluZyBpbnRlcnJ1cHQgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSwgZGlzcmVnYXJkaW5nIHRoZWlyIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QW4gaW50ZXJydXB0IHJlbWFpbnMgcGVuZGluZyB1bnRpbCB0aGUgYXBwbGljYXRpb24gc29mdHdhcmUgaGFzIGNsZWFyZWQgaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgSW50SWQgaXMgZGlmZmVyZW50IGZyb20gMHgwMDAwIGFuZCBJRSAoQ0FOX0lGbl9NQ09OWzFdKSBpcyBzZXQsIHRoZSBJUlEgaW50ZXJydXB0IHNpZ25hbCB0byB0aGUgRUlDIGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW50ZXJydXB0IHJlbWFpbnMgYWN0aXZlIHVudGlsIEludElkIGlzIGJhY2sgdG8gdmFsdWUgMHgwMDAwICh0aGUgY2F1c2Ugb2YgdGhlIGludGVycnVwdCBpcyByZXNldCkgb3IgdW50aWwgSUUgaXMgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFN0YXR1cyBJbnRlcnJ1cHQgaGFzIHRoZSBoaWdoZXN0IHByaW9yaXR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFtb25nIHRoZSBtZXNzYWdlIGludGVycnVwdHMsIHRoZSBNZXNzYWdlIE9iamVjdCcgcyBpbnRlcnJ1cHQgcHJpb3JpdHkgZGVjcmVhc2VzIHdpdGggaW5jcmVhc2luZyBtZXNzYWdlIG51bWJlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIG1lc3NhZ2UgaW50ZXJydXB0IGlzIGNsZWFyZWQgYnkgY2xlYXJpbmcgdGhlIE1lc3NhZ2UgT2JqZWN0J3MgSW50UG5kIGJpdCAoQ0FOX0lGbl9NQ09OWzEzXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFN0YXR1cyBJbnRlcnJ1cHQgaXMgY2xlYXJlZCBieSByZWFkaW5nIHRoZSBTdGF0dXMgUmVnaXN0ZXIuCisgICAgICogQHZhciBDQU5fVDo6VEVTVAorICAgICAqIE9mZnNldDogMHgxNCAgVGVzdCBSZWdpc3RlciAoUmVnaXN0ZXIgTWFwIE5vdGUgMSkKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxSZXMgICAgICAgfFJlc2VydmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlcmUgYXJlIHJlc2VydmVkIGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgYWx3YXlzIHJlYWQgYXMgJzAnIGFuZCBtdXN0IGFsd2F5cyBiZSB3cml0dGVuIHdpdGggJzAnLgorICAgICAqIHxbMl0gICAgIHxCYXNpYyAgICAgfEJhc2ljIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQmFzaWMgTW9kZSBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxPSBJRjEgUmVnaXN0ZXJzIHVzZWQgYXMgVHggQnVmZmVyLCBJRjIgUmVnaXN0ZXJzIHVzZWQgYXMgUnggQnVmZmVyLgorICAgICAqIHxbM10gICAgIHxTaWxlbnQgICAgfFNpbGVudCBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBtb2R1bGUgaXMgaW4gU2lsZW50IE1vZGUuCisgICAgICogfFs0XSAgICAgfExCYWNrICAgICB8TG9vcCBCYWNrIE1vZGUgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTG9vcCBCYWNrIE1vZGUgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExvb3AgQmFjayBNb2RlIGlzIGVuYWJsZWQuCisgICAgICogfFs2OjVdICAgfFR4MTAgICAgICB8VHhbMTowXTogQ29udHJvbCBPZiBDQU5fVFggUGluCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBSZXNldCB2YWx1ZSwgQ0FOX1RYIHBpbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBDQU4gQ29yZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFNhbXBsZSBQb2ludCBjYW4gYmUgbW9uaXRvcmVkIGF0IENBTl9UWCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDQU5fVFggcGluIGRyaXZlcyBhIGRvbWluYW50ICgnMCcpIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ0FOX1RYIHBpbiBkcml2ZXMgYSByZWNlc3NpdmUgKCcxJykgdmFsdWUuCisgICAgICogfFs3XSAgICAgfFJ4ICAgICAgICB8TW9uaXRvcnMgVGhlIEFjdHVhbCBWYWx1ZSBPZiBDQU5fUlggUGluIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBDQU4gYnVzIGlzIGRvbWluYW50IChDQU5fUlggPSAnMCcpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgQ0FOIGJ1cyBpcyByZWNlc3NpdmUgKENBTl9SWCA9ICcxJykuCisgICAgICogQHZhciBDQU5fVDo6QlJQRQorICAgICAqIE9mZnNldDogMHgxOCAgQmF1ZCBSYXRlIFByZXNjYWxlciBFeHRlbnNpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxCUlBFICAgICAgfEJSUEU6IEJhdWQgUmF0ZSBQcmVzY2FsZXIgRXh0ZW5zaW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwMC0weDBGOiBCeSBwcm9ncmFtbWluZyBCUlBFLCB0aGUgQmF1ZCBSYXRlIFByZXNjYWxlciBjYW4gYmUgZXh0ZW5kZWQgdG8gdmFsdWVzIHVwIHRvIDEwMjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdHVhbCBpbnRlcnByZXRhdGlvbiBieSB0aGUgaGFyZHdhcmUgaXMgdGhhdCBvbmUgbW9yZSB0aGFuIHRoZSB2YWx1ZSBwcm9ncmFtbWVkIGJ5IEJSUEUgKE1TQnMpIGFuZCBCVElNRSAoTFNCcykgaXMgdXNlZC4KKyAgICAgKiBAdmFyIENBTl9UOjpJRgorICAgICAqIE9mZnNldDogMHgyMH4weEZDICBDQU4gSW50ZXJmYWNlIFJlZ2lzdGVycworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIENBTiBpbnRlcmZhY2Ugc3RydWN0dXJlLiBSZWZlciB0byBccmVmIENBTl9JRl9UIGZvciBkZXRhaWwgaW5mb3JtYXRpb24uCisgICAgICAgICAqCisgICAgICogQHZhciBDQU5fVDo6VFhSRVExCisgICAgICogT2Zmc2V0OiAweDEwMCAgVHJhbnNtaXNzaW9uIFJlcXVlc3QgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFR4UnFzdFsxNjoxXXxUcmFuc21pc3Npb24gUmVxdWVzdCBCaXRzIDE2LTEgKE9mIEFsbCBNZXNzYWdlIE9iamVjdHMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoaXMgTWVzc2FnZSBPYmplY3QgaXMgbm90IHdhaXRpbmcgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHRyYW5zbWlzc2lvbiBvZiB0aGlzIE1lc3NhZ2UgT2JqZWN0IGlzIHJlcXVlc3RlZCBhbmQgaXMgbm90IHlldCBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHJlYWQgb25seS4KKyAgICAgKiBAdmFyIENBTl9UOjpUWFJFUTIKKyAgICAgKiBPZmZzZXQ6IDB4MTA0ICBUcmFuc21pc3Npb24gUmVxdWVzdCBSZWdpc3RlciAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8VHhScXN0WzMyOjE3XXxUcmFuc21pc3Npb24gUmVxdWVzdCBCaXRzIDMyLTE3IChPZiBBbGwgTWVzc2FnZSBPYmplY3RzKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGlzIE1lc3NhZ2UgT2JqZWN0IGlzIG5vdCB3YWl0aW5nIGZvciB0cmFuc21pc3Npb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0cmFuc21pc3Npb24gb2YgdGhpcyBNZXNzYWdlIE9iamVjdCBpcyByZXF1ZXN0ZWQgYW5kIGlzIG5vdCB5ZXQgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSByZWFkIG9ubHkuCisgICAgICogQHZhciBDQU5fVDo6TkRBVDEKKyAgICAgKiBPZmZzZXQ6IDB4MTIwICBOZXcgRGF0YSBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8TmV3RGF0YVsxNjoxXXxOZXcgRGF0YSBCaXRzIDE2LTEgKE9mIEFsbCBNZXNzYWdlIE9iamVjdHMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIG5ldyBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gaW50byB0aGUgZGF0YSBwb3J0aW9uIG9mIHRoaXMgTWVzc2FnZSBPYmplY3QgYnkgdGhlIE1lc3NhZ2UgSGFuZGxlciBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgZmxhZyB3YXMgY2xlYXJlZCBieSB0aGUgYXBwbGljYXRpb24gc29mdHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBNZXNzYWdlIEhhbmRsZXIgb3IgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhhcyB3cml0dGVuIG5ldyBkYXRhIGludG8gdGhlIGRhdGEgcG9ydGlvbiBvZiB0aGlzIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIEB2YXIgQ0FOX1Q6Ok5EQVQyCisgICAgICogT2Zmc2V0OiAweDEyNCAgTmV3IERhdGEgUmVnaXN0ZXIgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfE5ld0RhdGFbMzI6MTddfE5ldyBEYXRhIEJpdHMgMzItMTcgKE9mIEFsbCBNZXNzYWdlIE9iamVjdHMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIG5ldyBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gaW50byB0aGUgZGF0YSBwb3J0aW9uIG9mIHRoaXMgTWVzc2FnZSBPYmplY3QgYnkgdGhlIE1lc3NhZ2UgSGFuZGxlciBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgZmxhZyB3YXMgY2xlYXJlZCBieSB0aGUgYXBwbGljYXRpb24gc29mdHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBNZXNzYWdlIEhhbmRsZXIgb3IgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhhcyB3cml0dGVuIG5ldyBkYXRhIGludG8gdGhlIGRhdGEgcG9ydGlvbiBvZiB0aGlzIE1lc3NhZ2UgT2JqZWN0LgorICAgICAqIEB2YXIgQ0FOX1Q6OklQTkQxCisgICAgICogT2Zmc2V0OiAweDE0MCAgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfEludFBuZFsxNjoxXXxJbnRlcnJ1cHQgUGVuZGluZyBCaXRzIDE2LTEgKE9mIEFsbCBNZXNzYWdlIE9iamVjdHMpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoaXMgbWVzc2FnZSBvYmplY3QgaXMgbm90IHRoZSBzb3VyY2Ugb2YgYW4gaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGlzIG1lc3NhZ2Ugb2JqZWN0IGlzIHRoZSBzb3VyY2Ugb2YgYW4gaW50ZXJydXB0LgorICAgICAqIEB2YXIgQ0FOX1Q6OklQTkQyCisgICAgICogT2Zmc2V0OiAweDE0NCAgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfEludFBuZFszMjoxN118SW50ZXJydXB0IFBlbmRpbmcgQml0cyAzMi0xNyhPZiBBbGwgTWVzc2FnZSBPYmplY3RzKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGlzIG1lc3NhZ2Ugb2JqZWN0IGlzIG5vdCB0aGUgc291cmNlIG9mIGFuIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhpcyBtZXNzYWdlIG9iamVjdCBpcyB0aGUgc291cmNlIG9mIGFuIGludGVycnVwdC4KKyAgICAgKiBAdmFyIENBTl9UOjpNVkxEMQorICAgICAqIE9mZnNldDogMHgxNjAgIE1lc3NhZ2UgVmFsaWQgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfE1zZ1ZhbFsxNjoxXXxNZXNzYWdlIFZhbGlkIEJpdHMgMTYtMSAoT2YgQWxsIE1lc3NhZ2UgT2JqZWN0cykgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhpcyBNZXNzYWdlIE9iamVjdCBpcyBpZ25vcmVkIGJ5IHRoZSBNZXNzYWdlIEhhbmRsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgTWVzc2FnZSBPYmplY3QgaXMgY29uZmlndXJlZCBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYnkgdGhlIE1lc3NhZ2UgSGFuZGxlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFeC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDQU5fTVZMRDFbMF0gbWVhbnMgTWVzc2FnZSBvYmplY3QgTm8uMSBpcyB2YWxpZCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQ0FOX01WTEQxWzBdIGlzIHNldCwgbWVzc2FnZSBvYmplY3QgTm8uMSBpcyBjb25maWd1cmVkLgorICAgICAqIEB2YXIgQ0FOX1Q6Ok1WTEQyCisgICAgICogT2Zmc2V0OiAweDE2NCAgTWVzc2FnZSBWYWxpZCBSZWdpc3RlciAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8TXNnVmFsWzMyOjE3XXxNZXNzYWdlIFZhbGlkIEJpdHMgMzItMTcgKE9mIEFsbCBNZXNzYWdlIE9iamVjdHMpIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoaXMgTWVzc2FnZSBPYmplY3QgaXMgaWdub3JlZCBieSB0aGUgTWVzc2FnZSBIYW5kbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGlzIE1lc3NhZ2UgT2JqZWN0IGlzIGNvbmZpZ3VyZWQgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIGJ5IHRoZSBNZXNzYWdlIEhhbmRsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RXguQ0FOX01WTEQyWzE1XSBtZWFucyBNZXNzYWdlIG9iamVjdCBOby4zMiBpcyB2YWxpZCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQ0FOX01WTEQyWzE1XSBpcyBzZXQsIG1lc3NhZ2Ugb2JqZWN0IE5vLjMyIGlzIGNvbmZpZ3VyZWQuCisgICAgICogQHZhciBDQU5fVDo6V1VfRU4KKyAgICAgKiBPZmZzZXQ6IDB4MTY4ICBXYWtlLXVwIEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdBS1VQX0VOICB8V2FrZS1VcCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBVc2VyIGNhbiB3YWtlLXVwIHN5c3RlbSB3aGVuIHRoZXJlIGlzIGEgZmFsbGluZyBlZGdlIGluIHRoZSBDQU5fUnggcGluLgorICAgICAqIEB2YXIgQ0FOX1Q6OldVX1NUQVRVUworICAgICAqIE9mZnNldDogMHgxNkMgIFdha2UtdXAgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8V0FLVVBfU1RTIHxXYWtlLVVwIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB3YWtlLXVwIGV2ZW50IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXYWtlLXVwIGV2ZW50IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgJzAnLgorICAgICAqLworCisgICAgX19JTyB1aW50MzJfdCBDT047ICAgICAgICAgICAvKiBPZmZzZXQ6IDB4MDAgIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1RBVFVTOyAgICAgICAgLyogT2Zmc2V0OiAweDA0ICBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEVSUjsgICAgICAgICAgIC8qIE9mZnNldDogMHgwOCAgRXJyb3IgQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCVElNRTsgICAgICAgICAvKiBPZmZzZXQ6IDB4MEMgIEJpdCBUaW1pbmcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgSUlEUjsgICAgICAgICAgLyogT2Zmc2V0OiAweDEwICBJbnRlcnJ1cHQgSWRlbnRpZmllciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRFU1Q7ICAgICAgICAgIC8qIE9mZnNldDogMHgxNCAgVGVzdCBSZWdpc3RlciAoUmVnaXN0ZXIgTWFwIE5vdGUgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCUlBFOyAgICAgICAgICAvKiBPZmZzZXQ6IDB4MTggIEJhdWQgUmF0ZSBQcmVzY2FsZXIgRXh0ZW5zaW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMV07CisgICAgX19JTyBDQU5fSUZfVCBJRlsyXTsgICAgICAgICAvKiBPZmZzZXQ6IDB4MjB+MHhGQyAgQ0FOIEludGVyZmFjZSBSZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbOF07CisgICAgX19JICB1aW50MzJfdCBUWFJFUTE7ICAgICAgICAvKiBPZmZzZXQ6IDB4MTAwICBUcmFuc21pc3Npb24gUmVxdWVzdCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgVFhSRVEyOyAgICAgICAgLyogT2Zmc2V0OiAweDEwNCAgVHJhbnNtaXNzaW9uIFJlcXVlc3QgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUzWzZdOworICAgIF9fSSAgdWludDMyX3QgTkRBVDE7ICAgICAgICAgLyogT2Zmc2V0OiAweDEyMCAgTmV3IERhdGEgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IE5EQVQyOyAgICAgICAgIC8qIE9mZnNldDogMHgxMjQgIE5ldyBEYXRhIFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNFs2XTsKKyAgICBfX0kgIHVpbnQzMl90IElQTkQxOyAgICAgICAgIC8qIE9mZnNldDogMHgxNDAgIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBJUE5EMjsgICAgICAgICAvKiBPZmZzZXQ6IDB4MTQ0ICBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTVbNl07CisgICAgX19JICB1aW50MzJfdCBNVkxEMTsgICAgICAgICAvKiBPZmZzZXQ6IDB4MTYwICBNZXNzYWdlIFZhbGlkIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgTVZMRDI7ICAgICAgICAgLyogT2Zmc2V0OiAweDE2NCAgTWVzc2FnZSBWYWxpZCBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFdVX0VOOyAgICAgICAgIC8qIE9mZnNldDogMHgxNjggIFdha2UtdXAgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBXVV9TVEFUVVM7ICAgICAvKiBPZmZzZXQ6IDB4MTZDICBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IENBTl9UOworCisKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgQ0FOX0NPTlNUIENBTiBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBDQU4gQ29udHJvbGxlcgorQHsgKi8KKy8qIENBTiBDT04gQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9DT05fVEVTVF9Qb3MgICAgICAgICAgIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IFRFU1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0NPTl9URVNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IENBTl9DT05fVEVTVF9Qb3MpICAgICAgICAgIC8qITwgQ0FOX1Q6OkNPTjogVEVTVCBNYXNrICAgICAqLworCisjZGVmaW5lIENBTl9DT05fQ0NFX1BvcyAgICAgICAgICAgIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IENDRSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0FOX0NPTl9DQ0VfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENBTl9DT05fQ0NFX1BvcykgICAgICAgICAgIC8qITwgQ0FOX1Q6OkNPTjogQ0NFIE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9DT05fREFSX1BvcyAgICAgICAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IERBUiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0FOX0NPTl9EQVJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENBTl9DT05fREFSX1BvcykgICAgICAgICAgIC8qITwgQ0FOX1Q6OkNPTjogREFSIE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9DT05fRUlFX1BvcyAgICAgICAgICAgIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IEVJRSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0FOX0NPTl9FSUVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENBTl9DT05fRUlFX1BvcykgICAgICAgICAgIC8qITwgQ0FOX1Q6OkNPTjogRUlFIE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9DT05fU0lFX1BvcyAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IFNJRSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0FOX0NPTl9TSUVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENBTl9DT05fU0lFX1BvcykgICAgICAgICAgIC8qITwgQ0FOX1Q6OkNPTjogU0lFIE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9DT05fSUVfUG9zICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IElFIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgQ0FOX0NPTl9JRV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENBTl9DT05fSUVfUG9zKSAgICAgICAgICAgIC8qITwgQ0FOX1Q6OkNPTjogSUUgTWFzayAgICAgICAqLworCisjZGVmaW5lIENBTl9DT05fSU5JVF9Qb3MgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpDT046IElOSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0NPTl9JTklUX01zayAgICAgICAgICAgKDB4MXVsIDw8IENBTl9DT05fSU5JVF9Qb3MpICAgICAgICAgIC8qITwgQ0FOX1Q6OkNPTjogSU5JVCBNYXNrICAgICAqLworCisvKiBDQU4gU1RBVFVTIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fU1RBVFVTX0JPRkZfUG9zICAgICAgICA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6U1RBVFVTOiBCT0ZGIFBvc2l0aW9uICAqLworI2RlZmluZSBDQU5fU1RBVFVTX0JPRkZfTXNrICAgICAgICAoMHgxdWwgPDwgQ0FOX1NUQVRVU19CT0ZGX1BvcykgICAgICAgLyohPCBDQU5fVDo6U1RBVFVTOiBCT0ZGIE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9TVEFUVVNfRVdBUk5fUG9zICAgICAgIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpTVEFUVVM6IEVXQVJOIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9TVEFUVVNfRVdBUk5fTXNrICAgICAgICgweDF1bCA8PCBDQU5fU1RBVFVTX0VXQVJOX1BvcykgICAgICAvKiE8IENBTl9UOjpTVEFUVVM6IEVXQVJOIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX1NUQVRVU19FUEFTU19Qb3MgICAgICAgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OlNUQVRVUzogRVBBU1MgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX1NUQVRVU19FUEFTU19Nc2sgICAgICAgKDB4MXVsIDw8IENBTl9TVEFUVVNfRVBBU1NfUG9zKSAgICAgIC8qITwgQ0FOX1Q6OlNUQVRVUzogRVBBU1MgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fU1RBVFVTX1JYT0tfUG9zICAgICAgICA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6U1RBVFVTOiBSWE9LIFBvc2l0aW9uICAqLworI2RlZmluZSBDQU5fU1RBVFVTX1JYT0tfTXNrICAgICAgICAoMHgxdWwgPDwgQ0FOX1NUQVRVU19SWE9LX1BvcykgICAgICAgLyohPCBDQU5fVDo6U1RBVFVTOiBSWE9LIE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9TVEFUVVNfVFhPS19Qb3MgICAgICAgIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpTVEFUVVM6IFRYT0sgUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9TVEFUVVNfVFhPS19Nc2sgICAgICAgICgweDF1bCA8PCBDQU5fU1RBVFVTX1RYT0tfUG9zKSAgICAgICAvKiE8IENBTl9UOjpTVEFUVVM6IFRYT0sgTWFzayAgICAgICovCisKKyNkZWZpbmUgQ0FOX1NUQVRVU19MRUNfUG9zICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OlNUQVRVUzogTEVDIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgQ0FOX1NUQVRVU19MRUNfTXNrICAgICAgICAgKDB4N3VsIDw8IENBTl9TVEFUVVNfTEVDX1BvcykgICAgICAgIC8qITwgQ0FOX1Q6OlNUQVRVUzogTEVDIE1hc2sgICAgICAgKi8KKworLyogQ0FOIEVSUiBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0VSUl9SUF9Qb3MgICAgICAgICAgICAgMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OkVSUjogUlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0FOX0VSUl9SUF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENBTl9FUlJfUlBfUG9zKSAgICAgICAgICAgIC8qITwgQ0FOX1Q6OkVSUjogUlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDQU5fRVJSX1JFQ19Qb3MgICAgICAgICAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6RVJSOiBSRUMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDQU5fRVJSX1JFQ19Nc2sgICAgICAgICAgICAoMHg3RnVsIDw8IENBTl9FUlJfUkVDX1BvcykgICAgICAgICAgLyohPCBDQU5fVDo6RVJSOiBSRUMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENBTl9FUlJfVEVDX1BvcyAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpFUlI6IFRFQyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENBTl9FUlJfVEVDX01zayAgICAgICAgICAgICgweEZGdWwgPDwgQ0FOX0VSUl9URUNfUG9zKSAgICAgICAgICAvKiE8IENBTl9UOjpFUlI6IFRFQyBNYXNrICAgICAgICAgICovCisKKy8qIENBTiBCVElNRSBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0JUSU1FX1RTRUcyX1BvcyAgICAgICAgMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OkJUSU1FOiBUU0VHMiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ0FOX0JUSU1FX1RTRUcyX01zayAgICAgICAgKDB4N3VsIDw8IENBTl9CVElNRV9UU0VHMl9Qb3MpICAgICAgIC8qITwgQ0FOX1Q6OkJUSU1FOiBUU0VHMiBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fQlRJTUVfVFNFRzFfUG9zICAgICAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6QlRJTUU6IFRTRUcxIFBvc2l0aW9uICAqLworI2RlZmluZSBDQU5fQlRJTUVfVFNFRzFfTXNrICAgICAgICAoMHhGdWwgPDwgQ0FOX0JUSU1FX1RTRUcxX1BvcykgICAgICAgLyohPCBDQU5fVDo6QlRJTUU6IFRTRUcxIE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9CVElNRV9TSldfUG9zICAgICAgICAgIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpCVElNRTogU0pXIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENBTl9CVElNRV9TSldfTXNrICAgICAgICAgICgweDN1bCA8PCBDQU5fQlRJTUVfU0pXX1BvcykgICAgICAgICAvKiE8IENBTl9UOjpCVElNRTogU0pXIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ0FOX0JUSU1FX0JSUF9Qb3MgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OkJUSU1FOiBCUlAgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ0FOX0JUSU1FX0JSUF9Nc2sgICAgICAgICAgKDB4M0Z1bCA8PCBDQU5fQlRJTUVfQlJQX1BvcykgICAgICAgIC8qITwgQ0FOX1Q6OkJUSU1FOiBCUlAgTWFzayAgICAgICAgKi8KKworLyogQ0FOIElJRFIgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JSURSX0lOVElEX1BvcyAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpJSURSOiBJTlRJRCBQb3NpdGlvbiAgICovCisjZGVmaW5lIENBTl9JSURSX0lOVElEX01zayAgICAgICAgICgweEZGRkZ1bCA8PCBDQU5fSUlEUl9JTlRJRF9Qb3MpICAgICAvKiE8IENBTl9UOjpJSURSOiBJTlRJRCBNYXNrICAgICAgICovCisKKy8qIENBTiBURVNUIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fVEVTVF9SWF9Qb3MgICAgICAgICAgICA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6VEVTVDogUlggUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDQU5fVEVTVF9SWF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0FOX1RFU1RfUlhfUG9zKSAgICAgICAgICAgLyohPCBDQU5fVDo6VEVTVDogUlggTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENBTl9URVNUX1RYX1BvcyAgICAgICAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpURVNUOiBUWCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENBTl9URVNUX1RYX01zayAgICAgICAgICAgICgweDN1bCA8PCBDQU5fVEVTVF9UWF9Qb3MpICAgICAgICAgICAvKiE8IENBTl9UOjpURVNUOiBUWCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0FOX1RFU1RfTEJBQ0tfUG9zICAgICAgICAgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OlRFU1Q6IExCQUNLIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgQ0FOX1RFU1RfTEJBQ0tfTXNrICAgICAgICAgKDB4MXVsIDw8IENBTl9URVNUX0xCQUNLX1BvcykgICAgICAgIC8qITwgQ0FOX1Q6OlRFU1Q6IExCQUNLIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBDQU5fVEVTVF9TSUxFTlRfUG9zICAgICAgICAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6VEVTVDogU2lsZW50IFBvc2l0aW9uICAqLworI2RlZmluZSBDQU5fVEVTVF9TSUxFTlRfTXNrICAgICAgICAoMHgxdWwgPDwgQ0FOX1RFU1RfU0lMRU5UX1BvcykgICAgICAgLyohPCBDQU5fVDo6VEVTVDogU2lsZW50IE1hc2sgICAgICAqLworCisjZGVmaW5lIENBTl9URVNUX0JBU0lDX1BvcyAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpURVNUOiBCYXNpYyBQb3NpdGlvbiAgICovCisjZGVmaW5lIENBTl9URVNUX0JBU0lDX01zayAgICAgICAgICgweDF1bCA8PCBDQU5fVEVTVF9CQVNJQ19Qb3MpICAgICAgICAvKiE8IENBTl9UOjpURVNUOiBCYXNpYyBNYXNrICAgICAgICovCisKKy8qIENBTiBCUFJFIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fQlJQRV9CUlBFX1BvcyAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6QlJQRTogQlJQRSBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDQU5fQlJQRV9CUlBFX01zayAgICAgICAgICAoMHhGdWwgPDwgQ0FOX0JSUEVfQlJQRV9Qb3MpICAgICAgICAgLyohPCBDQU5fVDo6QlJQRTogQlJQRSBNYXNrICAgICAgICAqLworCisvKiBDQU4gSUZuX0NSRVEgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JRl9DUkVRX0JVU1lfUG9zICAgICAgIDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNSRVE6IEJVU1kgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0NSRVFfQlVTWV9Nc2sgICAgICAgKDB4MXVsIDw8IENBTl9JRl9DUkVRX0JVU1lfUG9zKSAgICAgICAgLyohPCBDQU5fSUZfVDo6Q1JFUTogQlVTWSBNYXNrICAgICAqLworCisjZGVmaW5lIENBTl9JRl9DUkVRX01TR05VTV9Qb3MgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNSRVE6IE1TR05VTSBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfQ1JFUV9NU0dOVU1fTXNrICAgICAoMHgzRnVsIDw8IENBTl9JRl9DUkVRX01TR05VTV9Qb3MpICAgICAvKiE8IENBTl9JRl9UOjpDUkVROiBNU0dOVU0gTWFzayAgICAgKi8KKworLyogQ0FOIElGbl9DTUFTSyBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX1dSUkRfUG9zICAgICAgNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IFdSUkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX1dSUkRfTXNrICAgICAgKDB4MXVsIDw8IENBTl9JRl9DTUFTS19XUlJEX1BvcykgICAgICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IFdSUkQgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfQ01BU0tfTUFTS19Qb3MgICAgICA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpDTUFTSzogTUFTSyBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfQ01BU0tfTUFTS19Nc2sgICAgICAoMHgxdWwgPDwgQ0FOX0lGX0NNQVNLX01BU0tfUG9zKSAgICAgICAvKiE8IENBTl9JRl9UOjpDTUFTSzogTUFTSyBNYXNrICAgICAqLworCisjZGVmaW5lIENBTl9JRl9DTUFTS19BUkJfUG9zICAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBBUkIgUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9JRl9DTUFTS19BUkJfTXNrICAgICAgICgweDF1bCA8PCBDQU5fSUZfQ01BU0tfQVJCX1BvcykgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBBUkIgTWFzayAgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX0NPTlRST0xfUG9zICAgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpDTUFTSzogQ09OVFJPTCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfQ01BU0tfQ09OVFJPTF9Nc2sgICAoMHgxdWwgPDwgQ0FOX0lGX0NNQVNLX0NPTlRST0xfUG9zKSAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBDT05UUk9MIE1hc2sgKi8KKworI2RlZmluZSBDQU5fSUZfQ01BU0tfQ0xSSU5UUE5EX1BvcyAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IENMUklOVFBORCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfQ01BU0tfQ0xSSU5UUE5EX01zayAoMHgxdWwgPDwgQ0FOX0lGX0NNQVNLX0NMUklOVFBORF9Qb3MpICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IENMUklOVFBORCBNYXNrICovCisKKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX1RYUlFTVE5FV0RBVF9Qb3MgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IFRYUlFTVE5FV0RBVCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfQ01BU0tfVFhSUVNUTkVXREFUX01zayAoMHgxdWwgPDwgQ0FOX0lGX0NNQVNLX1RYUlFTVE5FV0RBVF9Qb3MpICAvKiE8IENBTl9JRl9UOjpDTUFTSzogVFhSUVNUTkVXREFUIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX0RBVEFBX1BvcyAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBEQVRBQSBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfQ01BU0tfREFUQUFfTXNrICAgICAoMHgxdWwgPDwgQ0FOX0lGX0NNQVNLX0RBVEFBX1BvcykgICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IERBVEFBIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX0NNQVNLX0RBVEFCX1BvcyAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkNNQVNLOiBEQVRBQiBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfQ01BU0tfREFUQUJfTXNrICAgICAoMHgxdWwgPDwgQ0FOX0lGX0NNQVNLX0RBVEFCX1BvcykgICAgLyohPCBDQU5fSUZfVDo6Q01BU0s6IERBVEFCIE1hc2sgICAgICovCisKKy8qIENBTiBJRm5fTUFTSzEgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JRl9NQVNLMV9NU0tfUG9zICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpNQVNLMTogTVNLIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgQ0FOX0lGX01BU0sxX01TS19Nc2sgICAgICAgKDB4RkZ1bCA8PCBDQU5fSUZfTUFTSzFfTVNLX1BvcykgICAgIC8qITwgQ0FOX0lGX1Q6Ok1BU0sxOiBNU0sgTWFzayAgICAgICAqLworCisvKiBDQU4gSUZuX01BU0syIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fSUZfTUFTSzJfTVhURF9Qb3MgICAgICAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUFTSzI6IE1YVEQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX01BU0syX01YVERfTXNrICAgICAgKDB4MXVsIDw8IENBTl9JRl9NQVNLMl9NWFREX1BvcykgICAgIC8qITwgQ0FOX0lGX1Q6Ok1BU0syOiBNWFREIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ0FOX0lGX01BU0syX01ESVJfUG9zICAgICAgMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6Ok1BU0syOiBNRElSIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9NQVNLMl9NRElSX01zayAgICAgICgweDF1bCA8PCBDQU5fSUZfTUFTSzJfTURJUl9Qb3MpICAgICAvKiE8IENBTl9JRl9UOjpNQVNLMjogTURJUiBNYXNrICAgICAqLworCisjZGVmaW5lIENBTl9JRl9NQVNLMl9NU0tfUG9zICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpNQVNLMjogTVNLIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9NQVNLMl9NU0tfTXNrICAgICAgICgweDFGRnVsIDw8IENBTl9JRl9NQVNLMl9NU0tfUG9zKSAgICAvKiE8IENBTl9JRl9UOjpNQVNLMjogTVNLIE1hc2sgICAgICovCisKKy8qIENBTiBJRm5fQVJCMSBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0lGX0FSQjFfSURfUG9zICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkFSQjE6IElEIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgQ0FOX0lGX0FSQjFfSURfTXNrICAgICAgICAgKDB4RkZGRnVsIDw8IENBTl9JRl9BUkIxX0lEX1BvcykgICAgIC8qITwgQ0FOX0lGX1Q6OkFSQjE6IElEIE1hc2sgICAgICAgKi8KKworLyogQ0FOIElGbl9BUkIyIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fSUZfQVJCMl9NU0dWQUxfUG9zICAgICAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6QVJCMjogTVNHVkFMIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9BUkIyX01TR1ZBTF9Nc2sgICAgICgweDF1bCA8PCBDQU5fSUZfQVJCMl9NU0dWQUxfUG9zKSAgICAvKiE8IENBTl9JRl9UOjpBUkIyOiBNU0dWQUwgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfQVJCMl9YVERfUG9zICAgICAgICAxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6QVJCMjogWFREIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENBTl9JRl9BUkIyX1hURF9Nc2sgICAgICAgICgweDF1bCA8PCBDQU5fSUZfQVJCMl9YVERfUG9zKSAgICAgICAvKiE8IENBTl9JRl9UOjpBUkIyOiBYVEQgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfQVJCMl9ESVJfUG9zICAgICAgICAxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6QVJCMjogRElSIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENBTl9JRl9BUkIyX0RJUl9Nc2sgICAgICAgICgweDF1bCA8PCBDQU5fSUZfQVJCMl9ESVJfUG9zKSAgICAgICAvKiE8IENBTl9JRl9UOjpBUkIyOiBESVIgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfQVJCMl9JRF9Qb3MgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6QVJCMjogSUQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENBTl9JRl9BUkIyX0lEX01zayAgICAgICAgICgweDFGRkZ1bCA8PCBDQU5fSUZfQVJCMl9JRF9Qb3MpICAgICAvKiE8IENBTl9JRl9UOjpBUkIyOiBJRCBNYXNrICAgICAgICAgKi8KKworLyogQ0FOIElGbl9NQ09OIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fSUZfTUNPTl9ORVdEQVRfUG9zICAgICAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogTkVXREFUIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9NQ09OX05FV0RBVF9Nc2sgICAgICgweDF1bCA8PCBDQU5fSUZfTUNPTl9ORVdEQVRfUG9zKSAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBORVdEQVQgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUNPTl9NU0dMU1RfUG9zICAgICAxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogTVNHTFNUIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9NQ09OX01TR0xTVF9Nc2sgICAgICgweDF1bCA8PCBDQU5fSUZfTUNPTl9NU0dMU1RfUG9zKSAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBNU0dMU1QgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUNPTl9JTlRQTkRfUG9zICAgICAxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogSU5UUE5EIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9NQ09OX0lOVFBORF9Nc2sgICAgICgweDF1bCA8PCBDQU5fSUZfTUNPTl9JTlRQTkRfUG9zKSAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBJTlRQTkQgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUNPTl9VTUFTS19Qb3MgICAgICAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogVU1BU0sgUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9JRl9NQ09OX1VNQVNLX01zayAgICAgICgweDF1bCA8PCBDQU5fSUZfTUNPTl9VTUFTS19Qb3MpICAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBVTUFTSyBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUNPTl9UWElFX1BvcyAgICAgICAxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogVFhJRSBQb3NpdGlvbiAgICovCisjZGVmaW5lIENBTl9JRl9NQ09OX1RYSUVfTXNrICAgICAgICgweDF1bCA8PCBDQU5fSUZfTUNPTl9UWElFX1BvcykgICAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBUWElFIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUNPTl9SWElFX1BvcyAgICAgICAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogUlhJRSBQb3NpdGlvbiAgICovCisjZGVmaW5lIENBTl9JRl9NQ09OX1JYSUVfTXNrICAgICAgICgweDF1bCA8PCBDQU5fSUZfTUNPTl9SWElFX1BvcykgICAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBSWElFIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUNPTl9STVRFTl9Qb3MgICAgICA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogUk1URU4gUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9JRl9NQ09OX1JNVEVOX01zayAgICAgICgweDF1bCA8PCBDQU5fSUZfTUNPTl9STVRFTl9Qb3MpICAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBSTVRFTiBNYXNrICAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUNPTl9UWFJRU1RfUG9zICAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogVFhSUVNUIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9NQ09OX1RYUlFTVF9Nc2sgICAgICgweDF1bCA8PCBDQU5fSUZfTUNPTl9UWFJRU1RfUG9zKSAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBUWFJRU1QgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUNPTl9FT0JfUG9zICAgICAgICA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogRU9CIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENBTl9JRl9NQ09OX0VPQl9Nc2sgICAgICAgICgweDF1bCA8PCBDQU5fSUZfTUNPTl9FT0JfUG9zKSAgICAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBFT0IgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfTUNPTl9ETENfUG9zICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6TUNPTjogRExDIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENBTl9JRl9NQ09OX0RMQ19Nc2sgICAgICAgICgweEZ1bCA8PCBDQU5fSUZfTUNPTl9ETENfUG9zKSAgICAgICAvKiE8IENBTl9JRl9UOjpNQ09OOiBETEMgTWFzayAgICAgICAgKi8KKworLyogQ0FOIElGbl9EQVRBX0ExIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fSUZfREFUX0ExX0RBVEExX1BvcyAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6REFUQUExOiBEQVRBMSBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfREFUX0ExX0RBVEExX01zayAgICAoMHhGRnVsIDw8IENBTl9JRl9EQVRfQTFfREFUQTFfUG9zKSAgLyohPCBDQU5fSUZfVDo6REFUQUExOiBEQVRBMSBNYXNrICAgICAqLworCisjZGVmaW5lIENBTl9JRl9EQVRfQTFfREFUQTBfUG9zICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpEQVRBQTE6IERBVEEwIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9EQVRfQTFfREFUQTBfTXNrICAgICgweEZGdWwgPDwgQ0FOX0lGX0RBVF9BMV9EQVRBMF9Qb3MpICAvKiE8IENBTl9JRl9UOjpEQVRBQTE6IERBVEEwIE1hc2sgICAgICovCisKKy8qIENBTiBJRm5fREFUQV9BMiBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0lGX0RBVF9BMl9EQVRBM19Qb3MgICAgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkRBVEFBMTogREFUQTMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0RBVF9BMl9EQVRBM19Nc2sgICAgKDB4RkZ1bCA8PCBDQU5fSUZfREFUX0EyX0RBVEEzX1BvcykgIC8qITwgQ0FOX0lGX1Q6OkRBVEFBMTogREFUQTMgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfREFUX0EyX0RBVEEyX1BvcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6REFUQUExOiBEQVRBMiBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfREFUX0EyX0RBVEEyX01zayAgICAoMHhGRnVsIDw8IENBTl9JRl9EQVRfQTJfREFUQTJfUG9zKSAgLyohPCBDQU5fSUZfVDo6REFUQUExOiBEQVRBMiBNYXNrICAgICAqLworCisvKiBDQU4gSUZuX0RBVEFfQjEgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JRl9EQVRfQjFfREFUQTVfUG9zICAgIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9JRl9UOjpEQVRBQjE6IERBVEE1IFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JRl9EQVRfQjFfREFUQTVfTXNrICAgICgweEZGdWwgPDwgQ0FOX0lGX0RBVF9CMV9EQVRBNV9Qb3MpICAvKiE8IENBTl9JRl9UOjpEQVRBQjE6IERBVEE1IE1hc2sgKi8KKworI2RlZmluZSBDQU5fSUZfREFUX0IxX0RBVEE0X1BvcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6REFUQUIxOiBEQVRBNCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfREFUX0IxX0RBVEE0X01zayAgICAoMHhGRnVsIDw8IENBTl9JRl9EQVRfQjFfREFUQTRfUG9zKSAgLyohPCBDQU5fSUZfVDo6REFUQUIxOiBEQVRBNCBNYXNrICovCisKKy8qIENBTiBJRm5fREFUQV9CMiBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0lGX0RBVF9CMl9EQVRBN19Qb3MgICAgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX0lGX1Q6OkRBVEFCMjogREFUQTcgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX0lGX0RBVF9CMl9EQVRBN19Nc2sgICAgKDB4RkZ1bCA8PCBDQU5fSUZfREFUX0IyX0RBVEE3X1BvcykgIC8qITwgQ0FOX0lGX1Q6OkRBVEFCMjogREFUQTcgTWFzayAgICAgKi8KKworI2RlZmluZSBDQU5fSUZfREFUX0IyX0RBVEE2X1BvcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fSUZfVDo6REFUQUIyOiBEQVRBNiBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSUZfREFUX0IyX0RBVEE2X01zayAgICAoMHhGRnVsIDw8IENBTl9JRl9EQVRfQjJfREFUQTZfUG9zKSAgLyohPCBDQU5fSUZfVDo6REFUQUIyOiBEQVRBNiBNYXNrICAgICAqLworCisvKiBDQU4gSUZuX1RYUlFTVDEgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9UWFJRU1QxX1RYUlFTVF9Qb3MgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6VFhSUVNUMTogVFhSUVNUIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9UWFJRU1QxX1RYUlFTVF9Nc2sgICgweEZGRkZ1bCA8PCBDQU5fVFhSUVNUMV9UWFJRU1RfUG9zKSAgLyohPCBDQU5fVDo6VFhSUVNUMTogVFhSUVNUIE1hc2sgICAgICovCisKKy8qIENBTiBJRm5fVFhSUVNUMiBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX1RYUlFTVDJfVFhSUVNUX1BvcyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpUWFJRU1QyOiBUWFJRU1QgUG9zaXRpb24gICovCisjZGVmaW5lIENBTl9UWFJRU1QyX1RYUlFTVF9Nc2sgICgweEZGRkZ1bCA8PCBDQU5fVFhSUVNUMl9UWFJRU1RfUG9zKSAgLyohPCBDQU5fVDo6VFhSUVNUMjogVFhSUVNUIE1hc2sgICAgICAqLworCisvKiBDQU4gSUZuX05EQVQxIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fTkRBVDFfTkVXREFUQV9Qb3MgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6Ok5EQVQxOiBORVdEQVRBIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9OREFUMV9ORVdEQVRBX01zayAgICgweEZGRkZ1bCA8PCBDQU5fTkRBVDFfTkVXREFUQV9Qb3MpICAgLyohPCBDQU5fVDo6TkRBVDE6IE5FV0RBVEEgTWFzayAgICAgKi8KKworLyogQ0FOIElGbl9OREFUMiBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX05EQVQyX05FV0RBVEFfUG9zICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpOREFUMjogTkVXREFUQSBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fTkRBVDJfTkVXREFUQV9Nc2sgICAoMHhGRkZGdWwgPDwgQ0FOX05EQVQyX05FV0RBVEFfUG9zKSAgIC8qITwgQ0FOX1Q6Ok5EQVQyOiBORVdEQVRBIE1hc2sgICAgICovCisKKy8qIENBTiBJRm5fSVBORDEgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9JUE5EMV9JTlRQTkRfUG9zICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6SVBORDE6IElOVFBORCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fSVBORDFfSU5UUE5EX01zayAgICgweEZGRkZ1bCA8PCBDQU5fSVBORDFfSU5UUE5EX1BvcykgICAgIC8qITwgQ0FOX1Q6OklQTkQxOiBJTlRQTkQgTWFzayAgICAgKi8KKworLyogQ0FOIElGbl9JUE5EMiBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX0lQTkQyX0lOVFBORF9Qb3MgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpJUE5EMjogSU5UUE5EIFBvc2l0aW9uICovCisjZGVmaW5lIENBTl9JUE5EMl9JTlRQTkRfTXNrICAgKDB4RkZGRnVsIDw8IENBTl9JUE5EMl9JTlRQTkRfUG9zKSAgICAgLyohPCBDQU5fVDo6SVBORDI6IElOVFBORCBNYXNrICAgICAqLworCisvKiBDQU4gSUZuX01WTEQxIEJpdCBGaWVsZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDQU5fTVZMRDFfTVNHVkFMX1BvcyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6Ok1WTEQxOiBNU0dWQUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ0FOX01WTEQxX01TR1ZBTF9Nc2sgICAoMHhGRkZGdWwgPDwgQ0FOX01WTEQxX01TR1ZBTF9Qb3MpICAgICAvKiE8IENBTl9UOjpNVkxEMTogTVNHVkFMIE1hc2sgICAgICovCisKKy8qIENBTiBJRm5fTVZMRDIgQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9NVkxEMl9NU0dWQUxfUG9zICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQU5fVDo6TVZMRDI6IE1TR1ZBTCBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fTVZMRDJfTVNHVkFMX01zayAgICgweEZGRkZ1bCA8PCBDQU5fTVZMRDJfTVNHVkFMX1BvcykgICAgIC8qITwgQ0FOX1Q6Ok1WTEQyOiBNU0dWQUwgTWFzayAgICAgKi8KKworLyogQ0FOIFdVRU4gQml0IEZpZWxkIERlZmluaXRpb25zICovCisjZGVmaW5lIENBTl9XVV9FTl9XQUtVUF9FTl9Qb3MgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FOX1Q6OldVX0VOOiBXQUtVUF9FTiBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fV1VfRU5fV0FLVVBfRU5fTXNrICAgICgweDF1bCA8PCBDQU5fV1VfRU5fV0FLVVBfRU5fUG9zKSAgICAgICAgICAgLyohPCBDQU5fVDo6V1VfRU46IFdBS1VQX0VOIE1hc2sgICAgICovCisKKy8qIENBTiBXVVNUQVRVUyBCaXQgRmllbGQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FOX1dVX1NUQVRVU19XQUtVUF9TVFNfUG9zICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENBTl9UOjpXVV9TVEFUVVM6IFdBS1VQX1NUUyBQb3NpdGlvbiAqLworI2RlZmluZSBDQU5fV1VfU1RBVFVTX1dBS1VQX1NUU19Nc2sgICAgKDB4MXVsIDw8IENBTl9XVV9TVEFUVVNfV0FLVVBfU1RTX1BvcykgICAvKiE8IENBTl9UOjpXVV9TVEFUVVM6IFdBS1VQX1NUUyBNYXNrICAgICAqLworCisKKy8qKkB9Ki8gLyogQ0FOX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBDQU4gcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworI2VuZGlmIC8qIF9fQ0FOX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9jbGtfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY2xrX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTRhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY2xrX3JlZy5oCkBAIC0wLDAgKzEsMTU0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNsa19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgQ0xLIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0NMS19SRUdfSF9fCisjZGVmaW5lIF9fQ0xLX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTeXN0ZW0gQ2xvY2sgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIENMSyBTeXN0ZW0gQ2xvY2sgQ29udHJvbGxlcihDTEspCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIENMSyBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisgICAgLyoqCisgICAgICogQHZhciBDTEtfVDo6UFdSQ1RMCisgICAgICogT2Zmc2V0OiAweDAwICBTeXN0ZW0gUG93ZXItZG93biBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SFhURU4gICAgIHxIWFQgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIChIWFQpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgKEhYVCkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEhYVCBjYW5ub3QgYmUgZGlzYWJsZWQgYW5kIEhYVEVOIHdpbGwgYWx3YXlzIHJlYWQgYXMgMSBpZiBIQ0xLIGNsb2NrIHNvdXJjZSBpcyBzZWxlY3RlZCBmcm9tIEhYVCBvciBQTEwgKGNsb2NrIHNvdXJjZSBmcm9tIEhYVCkuCisgICAgICogfFsxXSAgICAgfExYVEVOICAgICB8TFhUIEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgKGV4dExYVCkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgKGV4dExYVCkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IExYVCBjYW5ub3QgYmUgZGlzYWJsZWQgYW5kIExYVEVOIHdpbGwgYWx3YXlzIHJlYWQgYXMgMSBpZiBIQ0xLIGNsb2NrIHNvdXJjZSBpcyBzZWxlY3RlZCBmcm9tIExYVCB3aGVuIHRoZSBMWFQgY2xvY2sgc291cmNlIGlzIHNlbGVjdGVkIGFzIGV4dExYVCBieSBzZXR0aW5nIEMzMktTKFJUQ19MWFRDVExbN10pIHRvIDEuCisgICAgICogfFsyXSAgICAgfEhJUkNFTiAgICB8SElSQyBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBIQ0xLIGRlZmF1bHQgY2xvY2sgc291cmNlIGlzIGZyb20gSElSQyBhbmQgdGhpcyBiaXQgZGVmYXVsdCB2YWx1ZSBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEhJUkMgY2Fubm90IGJlIGRpc2FibGVkIGFuZCBISVJDRU4gd2lsbCBhbHdheXMgcmVhZCBhcyAxIGlmIEZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBmdW5jdGlvbiBpcyBlbmFibGVkIG9yIEhDTEsgY2xvY2sgc291cmNlIGlzIHNlbGVjdGVkIGZyb20gSElSQyBvciBQTEwgKGNsb2NrIHNvdXJjZSBmcm9tIEhJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBmdW5jdGlvbiBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBGQURJUyAoRk1DX0NZQ0NUTFs4XSkuCisgICAgICogfFszXSAgICAgfExJUkNFTiAgICB8TElSQyBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBMSVJDIGNhbm5vdCBiZSBkaXNhYmxlZCBhbmQgTElSQ0VOIHdpbGwgYWx3YXlzIHJlYWQgYXMgMSBpZiBIQ0xLIGNsb2NrIHNvdXJjZSBpcyBzZWxlY3RlZCBmcm9tIExJUkMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIENXRFRFTihDT05GSUdbMzEsNDozXSkgaXMgc2V0IHRvIDExMSwgTElSQyBjbG9jayBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBieSBzZXR0aW5nIExJUkNFTihDTEtfUFdSQ1RMWzNdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBDV0RURU4oQ09ORklHMFszMSw0OjNdKSBpcyBub3Qgc2V0IHRvIDExMSwgTElSQyBjYW5ub3QgYmUgZGlzYWJsZWQgaW4gbm9ybWFsIG1vZGUgYW5kIExJUkNFTiB3aWxsIGFsd2F5cyByZWFkIGFzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBQb3dlci1kb3duIG1vZGUsIExJUkMgY2xvY2sgaXMgY29udHJvbGxlZCBieSBMSVJDRU4oQ0xLX1BXUkNUTFszXSkgYW5kIENXRFRQREVOIChDT05GSUcwWzMwXSkgc2V0dGluZy4KKyAgICAgKiB8WzVdICAgICB8UERXS0lFTiAgIHxQb3dlci1kb3duIE1vZGUgV2FrZS11cCBJbnRlcnJ1cHQgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUG93ZXItZG93biBtb2RlIHdha2UtdXAgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3dlci1kb3duIG1vZGUgd2FrZS11cCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhlIGludGVycnVwdCB3aWxsIG9jY3VyIHdoZW4gYm90aCBQRFdLSUYgYW5kIFBEV0tJRU4gYXJlIGhpZ2gsIGFmdGVyIHJlc3VtZSBmcm9tIFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs2XSAgICAgfFBEV0tJRiAgICB8UG93ZXItZG93biBNb2RlIFdha2UtdXAgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBieSBQb3dlci1kb3duIHdha2UtdXAgZXZlbnQsIGl0IGluZGljYXRlcyB0aGF0IHJlc3VtZSBmcm9tIFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZmxhZyBpcyBzZXQgaWYgdGhlIEVJTlQ3fjAsIEdQSU8sIFVBUlQwfjUsIFVTQkgsIFVTQkQsIE9URywgQ0FOMCwgQk9ELCBBQ01QLCBXRFQsIFNESDAsIFRNUjB+MywgSTJDMH4yLCBVU0NJMH4xLCBSVEMgd2FrZS11cCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGUgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IHdvcmtzIG9ubHkgaWYgUERXS0lFTiAoQ0xLX1BXUkNUTFs1XSkgc2V0IHRvIDEuCisgICAgICogfFs3XSAgICAgfFBERU4gICAgICB8U3lzdGVtIFBvd2VyLWRvd24gRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIDEsIFBvd2VyLWRvd24gbW9kZSBpcyBlbmFibGVkIGFuZCB0aGUgY2hpcCBrZWVwcyBhY3RpdmUgdGlsbCB0aGUgQ1BVIHNsZWVwIG1vZGUgaXMgYWxzbyBhY3RpdmUgYW5kIHRoZW4gdGhlIGNoaXAgZW50ZXJzIFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGNoaXAgd2FrZXMgdXAgZnJvbSBQb3dlci1kb3duIG1vZGUsIHRoaXMgYml0IGlzIGF1dG8gY2xlYXJlZC4gVXNlcnMgbmVlZCB0byBzZXQgdGhpcyBiaXQgYWdhaW4gZm9yIG5leHQgUG93ZXItZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBQb3dlci1kb3duIG1vZGUsIEhYVCwgSElSQywgSElSQzQ4LCBQTEwgYW5kIHN5c3RlbSBjbG9jayB3aWxsIGJlIGRpc2FibGVkIGFuZCBpZ25vcmVkIHRoZSBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uLiBUaGUgY2xvY2tzIG9mIHBlcmlwaGVyYWwgYXJlIG5vdCBjb250cm9sbGVkIGJ5IFBvd2VyLWRvd24gbW9kZSwgaWYgdGhlIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlIGlzIGZyb20gTFhUIG9yIExJUkMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoaXAgb3BlcmF0aW5nIG5vcm1hbGx5IG9yIGNoaXAgaW4gaWRsZSBtb2RlIGJlY2F1c2Ugb2YgV0ZJIGNvbW1hbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoaXAgd2FpdHMgQ1BVIHNsZWVwIGNvbW1hbmQgV0ZJIGFuZCB0aGVuIGVudGVycyBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMToxMF0gfEhYVEdBSU4gICB8SFhUIEdhaW4gQ29udHJvbCBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8R2FpbiBjb250cm9sIGlzIHVzZWQgdG8gZW5sYXJnZSB0aGUgZ2FpbiBvZiBjcnlzdGFsIHRvIG1ha2Ugc3VyZSBjcnlzdGFsIHdvcmsgbm9ybWFsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgZ2FpbiBjb250cm9sIGlzIGVuYWJsZWQsIGNyeXN0YWwgd2lsbCBjb25zdW1lIG1vcmUgcG93ZXIgdGhhbiBnYWluIGNvbnRyb2wgb2ZmLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gSFhUIGZyZXF1ZW5jeSBpcyBsb3dlciB0aGFuIGZyb20gOCBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBIWFQgZnJlcXVlbmN5IGlzIGZyb20gOCBNSHogdG8gMTIgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gSFhUIGZyZXF1ZW5jeSBpcyBmcm9tIDEyIE1IeiB0byAxNiBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBIWFQgZnJlcXVlbmN5IGlzIGhpZ2hlciB0aGFuIDE2IE1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEyXSAgICB8SFhUU0VMVFlQIHxIWFQgQ3J5c3RhbCBUeXBlIFNlbGVjdCBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNlbGVjdCBJTlYgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2VsZWN0IEdNIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxM10gICAgfEhYVFRCRU4gICB8SFhUIENyeXN0YWwgVFVSQk8gTW9kZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSFhUIENyeXN0YWwgVFVSQk8gbW9kZSBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSFhUIENyeXN0YWwgVFVSQk8gbW9kZSBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMThdICAgIHxISVJDNDhFTiAgfEhJUkM0OCBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSA0OCBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDNDgpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSA0OCBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDNDgpIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBDTEtfVDo6QUhCQ0xLCisgICAgICogT2Zmc2V0OiAweDA0ICBBSEIgRGV2aWNlcyBDbG9jayBFbmFibGUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFBETUEwQ0tFTiB8UERNQTAgQ29udHJvbGxlciBDbG9jayBFbmFibGUgQml0IChTZWN1cmUpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUEwIHBlcmlwaGVyYWwgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEwIHBlcmlwaGVyYWwgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8UERNQTFDS0VOIHxQRE1BMSBDb250cm9sbGVyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQTEgcGVyaXBoZXJhbCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQTEgcGVyaXBoZXJhbCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxJU1BDS0VOICAgfEZsYXNoIElTUCBDb250cm9sbGVyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmxhc2ggSVNQIHBlcmlwaGVyYWwgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZsYXNoIElTUCBwZXJpcGhlcmFsIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfEVCSUNLRU4gICB8RUJJIENvbnRyb2xsZXIgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQkkgcGVyaXBoZXJhbCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUJJIHBlcmlwaGVyYWwgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8U0RIMENLRU4gIHxTREhPU1QwIENvbnRyb2xsZXIgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTREhPU1QwIHBlcmlwaGVyYWwgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNESE9TVDAgcGVyaXBoZXJhbCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbN10gICAgIHxDUkNDS0VOICAgfENSQyBHZW5lcmF0b3IgQ29udHJvbGxlciBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENSQyBwZXJpcGhlcmFsIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDUkMgcGVyaXBoZXJhbCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxDUlBUQ0tFTiAgfENyeXB0b2dyYXBoaWMgQWNjZWxlcmF0b3IgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDcnlwdG9ncmFwaGljIEFjY2VsZXJhdG9yIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDcnlwdG9ncmFwaGljIEFjY2VsZXJhdG9yIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxNV0gICAgfEZNQ0lETEUgICB8Rmxhc2ggTWVtb3J5IENvbnRyb2xsZXIgQ2xvY2sgRW5hYmxlIEJpdCBpbiBJRExFIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRk1DIGNsb2NrIERpc2FibGVkIHdoZW4gY2hpcCBpcyB1bmRlciBJRExFIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZNQyBjbG9jayBFbmFibGVkIHdoZW4gY2hpcCBpcyB1bmRlciBJRExFIG1vZGUuCisgICAgICogfFsxNl0gICAgfFVTQkhDS0VOICB8VVNCIEhPU1QgMS4xIENvbnRyb2xsZXIgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0IgSE9TVCAxLjEgcGVyaXBoZXJhbCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIEhPU1QgMS4xIHBlcmlwaGVyYWwgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiBAdmFyIENMS19UOjpBUEJDTEswCisgICAgICogT2Zmc2V0OiAweDA4ICBBUEIgRGV2aWNlcyBDbG9jayBFbmFibGUgQ29udHJvbCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8V0RUQ0tFTiAgIHxXYXRjaGRvZyBUaW1lciBDbG9jayBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXYXRjaGRvZyB0aW1lciBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2F0Y2hkb2cgdGltZXIgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8UlRDQ0tFTiAgIHxSZWFsLXRpbWUtY2xvY2sgQVBCIEludGVyZmFjZSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBjb250cm9sIHRoZSBSVEMgQVBCIGNsb2NrIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFJUQyBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSBpcyBzZWxlY3RlZCBmcm9tIFJUQ1NFTChDTEtfQ0xLU0VMM1s4XSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBjYW4gYmUgc2VsZWN0ZWQgdG8gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCAoTFhUKSBvciAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSVEMgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJUQyBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxUTVIwQ0tFTiAgfFRpbWVyMCBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIwIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFRNUjFDS0VOICB8VGltZXIxIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIxIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjEgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8VE1SMkNLRU4gIHxUaW1lcjIgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjIgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMiBjbG9jayBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxUTVIzQ0tFTiAgfFRpbWVyMyBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMyBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIzIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFs2XSAgICAgfENMS09DS0VOICB8Q0xLTyBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENMS08gY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENMS08gY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzddICAgICB8QUNNUDAxQ0tFTnxBbmFsb2cgQ29tcGFyYXRvciAwLzEgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBbmFsb2cgY29tcGFyYXRvciAwLzEgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFuYWxvZyBjb21wYXJhdG9yIDAvMSBjbG9jayBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxJMkMwQ0tFTiAgfEkyQzAgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMwIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMkMwIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFs5XSAgICAgfEkyQzFDS0VOICB8STJDMSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyQzEgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQzEgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzEwXSAgICB8STJDMkNLRU4gIHxJMkMyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDMiBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDMiBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxRU1BJMENLRU4gfFFTUEkwIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUVNQSTAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFTUEkwIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxM10gICAgfFNQSTBDS0VOICB8U1BJMCBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNQSTAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSTAgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzE0XSAgICB8U1BJMUNLRU4gIHxTUEkxIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMSBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJMSBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTVdICAgIHxTUEkyQ0tFTiAgfFNQSTIgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkyIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkyIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxNl0gICAgfFVBUlQwQ0tFTiB8VUFSVDAgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVQVJUMCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDAgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzE3XSAgICB8VUFSVDFDS0VOIHxVQVJUMSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQxIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUMSBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMThdICAgIHxVQVJUMkNLRU4gfFVBUlQyIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDIgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQyIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxOV0gICAgfFVBUlQzQ0tFTiB8VUFSVDMgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVQVJUMyBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDMgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzIwXSAgICB8VUFSVDRDS0VOIHxVQVJUNCBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQ0IGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUNCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMjFdICAgIHxVQVJUNUNLRU4gfFVBUlQ1IENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDUgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQ1IGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsyNF0gICAgfENBTjBDS0VOICB8Q0FOMCBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENBTjAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENBTjAgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzI2XSAgICB8T1RHQ0tFTiAgIHxVU0IgT1RHIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNCIE9URyBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIE9URyBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMjddICAgIHxVU0JEQ0tFTiAgfFVTQiBEZXZpY2UgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0IgRGV2aWNlIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgRGV2aWNlIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsyOF0gICAgfEVBRENDS0VOICB8RW5oYW5jZWQgQW5hbG9nLWRpZ2l0YWwtY29udmVydGVyIChFQURDKSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVBREMgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVBREMgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzI5XSAgICB8STJTMENLRU4gIHxJMlMwIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJTMCBDbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJTMCBDbG9jayBFbmFibGVkLgorICAgICAqIEB2YXIgQ0xLX1Q6OkFQQkNMSzEKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIEFQQiBEZXZpY2VzIENsb2NrIEVuYWJsZSBDb250cm9sIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTQzBDS0VOICAgfFNtYXJ0IENhcmQgMCAoU0MwKSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDMCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0MwIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFNDMUNLRU4gICB8U21hcnQgQ2FyZCAxIChTQzEpIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0MxIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQzEgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8U0MyQ0tFTiAgIHxTbWFydCBDYXJkIDIgKFNDMikgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQzIgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDMiBjbG9jayBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxTUEkzQ0tFTiAgfFNQSTMgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkzIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkzIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFVTQ0kwQ0tFTiB8VVNDSTAgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0NJMCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNDSTAgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8VVNDSTFDS0VOIHxVU0NJMSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQ0kxIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0NJMSBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxEQUNDS0VOICAgfERBQyBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERBQyBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gREFDIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxNl0gICAgfEVQV00wQ0tFTiB8RVBXTTAgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNMCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTTAgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzE3XSAgICB8RVBXTTFDS0VOIHxFUFdNMSBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00xIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNMSBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMThdICAgIHxCUFdNMENLRU4gfEJQV00wIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTTAgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJQV00wIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsxOV0gICAgfEJQV00xQ0tFTiB8QlBXTTEgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNMSBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQlBXTTEgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzIyXSAgICB8UUVJMENLRU4gIHxRRUkwIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUUVJMCBjbG9jayBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJMCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMjNdICAgIHxRRUkxQ0tFTiAgfFFFSTEgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRRUkxIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRRUkxIGNsb2NrIEVuYWJsZWQuCisgICAgICogfFsyNV0gICAgfFRSTkdDS0VOICB8VFJORyBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRSTkcgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRSTkcgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzI2XSAgICB8RUNBUDBDS0VOIHxFQ0FQMCBDbG9jayBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQVAwIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0FQMCBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMjddICAgIHxFQ0FQMUNLRU4gfEVDQVAxIENsb2NrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUNBUDEgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVDQVAxIGNsb2NrIEVuYWJsZWQuCisgICAgICogQHZhciBDTEtfVDo6Q0xLU0VMMAorICAgICAqIE9mZnNldDogMHgxMCAgQ2xvY2sgU291cmNlIFNlbGVjdCBDb250cm9sIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxIQ0xLU0VMICAgfEhDTEsgQ2xvY2sgU291cmNlIFNlbGVjdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCZWZvcmUgY2xvY2sgc3dpdGNoaW5nLCB0aGUgcmVsYXRlZCBjbG9jayBzb3VyY2VzIChib3RoIHByZS1zZWxlY3QgYW5kIG5ldy1zZWxlY3QpIG11c3QgYmUgdHVybmVkIG9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IENsb2NrIHNvdXJjZSBmcm9tIEhYVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBDbG9jayBzb3VyY2UgZnJvbSBMWFQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IENsb2NrIHNvdXJjZSBmcm9tIExJUkMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gQ2xvY2sgc291cmNlIGZyb20gSElSQzQ4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IENsb2NrIHNvdXJjZSBmcm9tIEhJUkMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs1OjNdICAgfFNUQ0xLU0VMICB8U3lzVGljayBDbG9jayBTb3VyY2UgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFNZU1RfQ1RSTFsyXT0wLCBTeXNUaWNrIHVzZXMgbGlzdGVkIGNsb2NrIHNvdXJjZSBiZWxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBDbG9jayBzb3VyY2UgZnJvbSBIWFQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gQ2xvY2sgc291cmNlIGZyb20gTFhULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IENsb2NrIHNvdXJjZSBmcm9tIEhYVC8yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IENsb2NrIHNvdXJjZSBmcm9tIEhDTEsvMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBDbG9jayBzb3VyY2UgZnJvbSBISVJDLzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IGlmIFN5c1RpY2sgY2xvY2sgc291cmNlIGlzIG5vdCBmcm9tIEhDTEsgKGkuZSBTWVNUX0NUUkxbMl0gPSAwKSwgU3lzVGljayBjbG9jayBzb3VyY2UgbXVzdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gSENMSy8yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8VVNCU0VMICAgIHxVU0IgQ2xvY2sgU291cmNlIFNlbGVjdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2xvY2sgc291cmNlIGZyb20gSElSQzQ4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyMToyMF0gfFNESDBTRUwgICB8U0RIT1NUMCBQZXJpcGhlcmFsIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDbG9jayBzb3VyY2UgZnJvbSBIWFQgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gSElSQyBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIENMS19UOjpDTEtTRUwxCisgICAgICogT2Zmc2V0OiAweDE0ICBDbG9jayBTb3VyY2UgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfFdEVFNFTCAgICB8V2F0Y2hkb2cgVGltZXIgQ2xvY2sgU291cmNlIFNlbGVjdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIEhDTEsvMjA0OC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEwIGtIeiBpbnRlcm5hbCBsb3cgc3BlZWQgUkMgb3NjaWxsYXRvciAoTElSQykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMDo4XSAgfFRNUjBTRUwgICB8VElNRVIwIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBDbG9jayBzb3VyY2UgZnJvbSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gQ2xvY2sgc291cmNlIGZyb20gZXh0ZXJuYWwgY2xvY2sgVE0wIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHxbMTQ6MTJdIHxUTVIxU0VMICAgfFRJTUVSMSBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEswLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IENsb2NrIHNvdXJjZSBmcm9tIGV4dGVybmFsIGNsb2NrIFRNMSBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gQ2xvY2sgc291cmNlIGZyb20gMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzE4OjE2XSB8VE1SMlNFTCAgIHxUSU1FUjIgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IENsb2NrIHNvdXJjZSBmcm9tIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBDbG9jayBzb3VyY2UgZnJvbSBQQ0xLMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBDbG9jayBzb3VyY2UgZnJvbSBleHRlcm5hbCBjbG9jayBUTTIgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEwIGtIeiBpbnRlcm5hbCBsb3cgc3BlZWQgUkMgb3NjaWxsYXRvciAoTElSQykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfFsyMjoyMF0gfFRNUjNTRUwgICB8VElNRVIzIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBDbG9jayBzb3VyY2UgZnJvbSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gQ2xvY2sgc291cmNlIGZyb20gZXh0ZXJuYWwgY2xvY2sgVE0zIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHxbMjU6MjRdIHxVQVJUMFNFTCAgfFVBUlQwIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfFsyNzoyNl0gfFVBUlQxU0VMICB8VUFSVDEgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8WzI5OjI4XSB8Q0xLT1NFTCAgIHxDbG9jayBPdXRwdXQgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfFszMTozMF0gfFdXRFRTRUwgICB8V2luZG93IFdhdGNoZG9nIFRpbWVyIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSBIQ0xLLzIwNDguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgQ0xLX1Q6OkNMS1NFTDIKKyAgICAgKiBPZmZzZXQ6IDB4MTggIENsb2NrIFNvdXJjZSBTZWxlY3QgQ29udHJvbCBSZWdpc3RlciAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RVBXTTBTRUwgIHxFUFdNMCBDbG9jayBTb3VyY2UgU2VsZWN0aW9uIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlIG9mIEVQV00wIGlzIGRlZmluZWQgYnkgRVBXTTBTRUwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEswLgorICAgICAqIHxbMV0gICAgIHxFUFdNMVNFTCAgfEVQV00xIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24gKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2Ugb2YgRVBXTTEgaXMgZGVmaW5lZCBieSBFUFdNMVNFTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzEuCisgICAgICogfFszOjJdICAgfFFTUEkwU0VMICB8UVNQSTAgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSBQQ0xLMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHxbNTo0XSAgIHxTUEkwU0VMICAgfFNQSTAgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSBQQ0xLMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHxbNzo2XSAgIHxTUEkxU0VMICAgfFNQSTEgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSBQQ0xLMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHxbOF0gICAgIHxCUFdNMFNFTCAgfEJQV00wIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24gKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2Ugb2YgQlBXTTAgaXMgZGVmaW5lZCBieSBCUFdNMFNFTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzAuCisgICAgICogfFs5XSAgICAgfEJQV00xU0VMICB8QlBXTTEgQ2xvY2sgU291cmNlIFNlbGVjdGlvbiAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSBvZiBCUFdNMSBpcyBkZWZpbmVkIGJ5IEJQV00xU0VMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQQ0xLMS4KKyAgICAgKiB8WzExOjEwXSB8U1BJMlNFTCAgIHxTUEkyIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8WzEzOjEyXSB8U1BJM1NFTCAgIHxTUEkzIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiBAdmFyIENMS19UOjpDTEtTRUwzCisgICAgICogT2Zmc2V0OiAweDFDICBDbG9jayBTb3VyY2UgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfFNDMFNFTCAgICB8U21hcnQgQ2FyZCAwIChTQzApIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8WzM6Ml0gICB8U0MxU0VMICAgIHxTbWFydCBDYXJkIDEgKFNDMSkgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSBQQ0xLMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHxbNTo0XSAgIHxTQzJTRUwgICAgfFNtYXJ0IENhcmQgMiAoU0MyKSBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIFBDTEswLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfFs4XSAgICAgfFJUQ1NFTCAgICB8UlRDIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHxbMTc6MTZdIHxJMlMwU0VMICAgfEkyUzAgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gSFhUIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gUENMSzAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSBISVJDIGNsb2NrLgorICAgICAqIHxbMjU6MjRdIHxVQVJUMlNFTCAgfFVBUlQyIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogfFsyNzoyNl0gfFVBUlQzU0VMICB8VUFSVDMgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ2xvY2sgc291cmNlIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDbG9jayBzb3VyY2UgZnJvbSBQTEwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDbG9jayBzb3VyY2UgZnJvbSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDbG9jayBzb3VyY2UgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8WzI5OjI4XSB8VUFSVDRTRUwgIHxVQVJUNCBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDbG9jayBzb3VyY2UgZnJvbSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENsb2NrIHNvdXJjZSBmcm9tIFBMTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENsb2NrIHNvdXJjZSBmcm9tIDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENsb2NrIHNvdXJjZSBmcm9tIDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpLgorICAgICAqIHxbMzE6MzBdIHxVQVJUNVNFTCAgfFVBUlQ1IENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENsb2NrIHNvdXJjZSBmcm9tIDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ2xvY2sgc291cmNlIGZyb20gUExMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ2xvY2sgc291cmNlIGZyb20gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ2xvY2sgc291cmNlIGZyb20gMTIgTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykuCisgICAgICogQHZhciBDTEtfVDo6Q0xLRElWMAorICAgICAqIE9mZnNldDogMHgyMCAgQ2xvY2sgRGl2aWRlciBOdW1iZXIgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfEhDTEtESVYgICB8SENMSyBDbG9jayBEaXZpZGUgTnVtYmVyIGZyb20gSENMSyBDbG9jayBTb3VyY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIQ0xLIGNsb2NrIGZyZXF1ZW5jeSA9IChIQ0xLIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kpIC8gKEhDTEtESVYgKyAxKS4KKyAgICAgKiB8Wzc6NF0gICB8VVNCRElWICAgIHxVU0IgQ2xvY2sgRGl2aWRlIE51bWJlciBmcm9tIFBMTCBDbG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVTQiBjbG9jayBmcmVxdWVuY3kgPSAoUExMIGZyZXF1ZW5jeSkgLyAoVVNCRElWICsgMSkuCisgICAgICogfFsxMTo4XSAgfFVBUlQwRElWICB8VUFSVDAgQ2xvY2sgRGl2aWRlIE51bWJlciBmcm9tIFVBUlQwIENsb2NrIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVBUlQwIGNsb2NrIGZyZXF1ZW5jeSA9IChVQVJUMCBjbG9jayBzb3VyY2UgZnJlcXVlbmN5KSAvIChVQVJUMERJViArIDEpLgorICAgICAqIHxbMTU6MTJdIHxVQVJUMURJViAgfFVBUlQxIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBVQVJUMSBDbG9jayBTb3VyY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVQVJUMSBjbG9jayBmcmVxdWVuY3kgPSAoVUFSVDEgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoVUFSVDFESVYgKyAxKS4KKyAgICAgKiB8WzIzOjE2XSB8RUFEQ0RJViAgIHxFQURDIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBFQURDIENsb2NrIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVBREMgY2xvY2sgZnJlcXVlbmN5ID0gKEVBREMgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoRUFEQ0RJViArIDEpLgorICAgICAqIHxbMzE6MjRdIHxTREgwRElWICAgfFNESE9TVDAgQ2xvY2sgRGl2aWRlIE51bWJlciBmcm9tIFNESE9TVDAgQ2xvY2sgU291cmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0RIT1NUMCBjbG9jayBmcmVxdWVuY3kgPSAoU0RIT1NUMCBjbG9jayBzb3VyY2UgZnJlcXVlbmN5KSAvIChTREgwRElWICsgMSkuCisgICAgICogQHZhciBDTEtfVDo6Q0xLRElWMQorICAgICAqIE9mZnNldDogMHgyNCAgQ2xvY2sgRGl2aWRlciBOdW1iZXIgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFNDMERJViAgICB8U21hcnQgQ2FyZCAwIChTQzApIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBTQzAgQ2xvY2sgU291cmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0MwIGNsb2NrIGZyZXF1ZW5jeSA9IChTQzAgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoU0MwRElWICsgMSkuCisgICAgICogfFsxNTo4XSAgfFNDMURJViAgICB8U21hcnQgQ2FyZCAxIChTQzEpIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBTQzEgQ2xvY2sgU291cmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0MxIGNsb2NrIGZyZXF1ZW5jeSA9IChTQzEgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoU0MxRElWICsgMSkuCisgICAgICogfFsyMzoxNl0gfFNDMkRJViAgICB8U21hcnQgQ2FyZCAyIChTQzIpIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBTQzIgQ2xvY2sgU291cmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0MyIGNsb2NrIGZyZXF1ZW5jeSA9IChTQzIgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoU0MyRElWICsgMSkuCisgICAgICogQHZhciBDTEtfVDo6Q0xLRElWNAorICAgICAqIE9mZnNldDogMHgzMCAgQ2xvY2sgRGl2aWRlciBOdW1iZXIgUmVnaXN0ZXIgNAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFVBUlQyRElWICB8VUFSVDIgQ2xvY2sgRGl2aWRlIE51bWJlciBmcm9tIFVBUlQyIENsb2NrIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVBUlQyIGNsb2NrIGZyZXF1ZW5jeSA9IChVQVJUMiBjbG9jayBzb3VyY2UgZnJlcXVlbmN5KSAvIChVQVJUMkRJViArIDEpLgorICAgICAqIHxbNzo0XSAgIHxVQVJUM0RJViAgfFVBUlQzIENsb2NrIERpdmlkZSBOdW1iZXIgZnJvbSBVQVJUMyBDbG9jayBTb3VyY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVQVJUMyBjbG9jayBmcmVxdWVuY3kgPSAoVUFSVDMgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSkgLyAoVUFSVDNESVYgKyAxKS4KKyAgICAgKiB8WzExOjhdICB8VUFSVDRESVYgIHxVQVJUNCBDbG9jayBEaXZpZGUgTnVtYmVyIGZyb20gVUFSVDQgQ2xvY2sgU291cmNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VUFSVDQgY2xvY2sgZnJlcXVlbmN5ID0gKFVBUlQ0IGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kpIC8gKFVBUlQ0RElWICsgMSkuCisgICAgICogfFsxNToxMl0gfFVBUlQ1RElWICB8VUFSVDUgQ2xvY2sgRGl2aWRlIE51bWJlciBmcm9tIFVBUlQ1IENsb2NrIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVBUlQ1IGNsb2NrIGZyZXF1ZW5jeSA9IChVQVJUNSBjbG9jayBzb3VyY2UgZnJlcXVlbmN5KSAvIChVQVJUNURJViArIDEpLgorICAgICAqIEB2YXIgQ0xLX1Q6OlBDTEtESVYKKyAgICAgKiBPZmZzZXQ6IDB4MzQgIEFQQiBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8QVBCMERJViAgIHxBUEIwIENsb2NrIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBUEIwIGNsb2NrIGNhbiBiZSBkaXZpZGVkIGZyb20gSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBQQ0xLMCBmcmVxdWVuY3kgaXMgSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBQQ0xLMCBmcmVxdWVuY3kgaXMgMS8yIEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gUENMSzAgZnJlcXVlbmN5IGlzIDEvNCBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IFBDTEswIGZyZXF1ZW5jeSBpcyAxLzggSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBQQ0xLMCBmcmVxdWVuY3kgaXMgMS8xNiBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IFBDTEswIGZyZXF1ZW5jeSBpcyAxLzMyIEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfFs2OjRdICAgfEFQQjFESVYgICB8QVBCMSBDbG9jayBEaXZpZGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QVBCMSBjbG9jayBjYW4gYmUgZGl2aWRlZCBmcm9tIEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gUENMSzEgZnJlcXVlbmN5IGlzIEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gUENMSzEgZnJlcXVlbmN5IGlzIDEvMiBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFBDTEsxIGZyZXF1ZW5jeSBpcyAxLzQgSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBQQ0xLMSBmcmVxdWVuY3kgaXMgMS84IEhDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gUENMSzEgZnJlcXVlbmN5IGlzIDEvMTYgSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBQQ0xLMSBmcmVxdWVuY3kgaXMgMS8zMiBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICogQHZhciBDTEtfVDo6UExMQ1RMCisgICAgICogT2Zmc2V0OiAweDQwICBQTEwgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs4OjBdICAgfEZCRElWICAgICB8UExMIEZlZWRiYWNrIERpdmlkZXIgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWZlciB0byB0aGUgUExMIGZvcm11bGFzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTM6OV0gIHxJTkRJViAgICAgfFBMTCBJbnB1dCBEaXZpZGVyIENvbnRyb2wgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmZXIgdG8gdGhlIFBMTCBmb3JtdWxhcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE1OjE0XSB8T1VURElWICAgIHxQTEwgT3V0cHV0IERpdmlkZXIgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWZlciB0byB0aGUgUExMIGZvcm11bGFzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTZdICAgIHxQRCAgICAgICAgfFBvd2VyLWRvd24gTW9kZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUExMIGlzIGVuYWJsZSAoaW4gbm9ybWFsIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQTEwgaXMgZGlzYWJsZSAoaW4gUG93ZXItZG93biBtb2RlKSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIHNldCB0aGUgUERFTiBiaXQgdG8gMSBpbiBDTEtfUFdSQ1RMIHJlZ2lzdGVyLCB0aGUgUExMIHdpbGwgZW50ZXIgUG93ZXItZG93biBtb2RlLCB0b28uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTddICAgIHxCUCAgICAgICAgfFBMTCBCeXBhc3MgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUExMIGlzIGluIG5vcm1hbCBtb2RlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUExMIGNsb2NrIG91dHB1dCBpcyBzYW1lIGFzIFBMTCBpbnB1dCBjbG9jayBGSU4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxOF0gICAgfE9FICAgICAgICB8UExMIE9FIChGT1VUIEVuYWJsZSkgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUExMIEZPVVQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUExMIEZPVVQgaXMgZml4ZWQgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTldICAgIHxQTExTUkMgICAgfFBMTCBTb3VyY2UgQ2xvY2sgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQTEwgc291cmNlIGNsb2NrIGZyb20gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaC1zcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBMTCBzb3VyY2UgY2xvY2sgZnJvbSAxMiBNSHogaW50ZXJuYWwgaGlnaC1zcGVlZCBvc2NpbGxhdG9yIChISVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzIzXSAgICB8U1RCU0VMICAgIHxQTEwgU3RhYmxlIENvdW50ZXIgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQTEwgc3RhYmxlIHRpbWUgaXMgNjE0NCBQTEwgc291cmNlIGNsb2NrIChzdWl0YWJsZSBmb3Igc291cmNlIGNsb2NrIGlzIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiAxMiBNSHopLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQTEwgc3RhYmxlIHRpbWUgaXMgMTIyODggUExMIHNvdXJjZSBjbG9jayAoc3VpdGFibGUgZm9yIHNvdXJjZSBjbG9jayBpcyBsYXJnZXIgdGhhbiAxMiBNSHopLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgQ0xLX1Q6OlNUQVRVUworICAgICAqIE9mZnNldDogMHg1MCAgQ2xvY2sgU3RhdHVzIE1vbml0b3IgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxIWFRTVEIgICAgfEhYVCBDbG9jayBTb3VyY2UgU3RhYmxlIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkgY2xvY2sgaXMgbm90IHN0YWJsZSBvciBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkgY2xvY2sgaXMgc3RhYmxlIGFuZCBlbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxMWFRTVEIgICAgfExYVCBDbG9jayBTb3VyY2UgU3RhYmxlIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxMWFQgY2xvY2sgc291cmNlIGNhbiBiZSBzZWxlY3RlZCBhcyBleHRMWFQgb3IgTElSQzMyIGJ5IHNldHRpbmcgQzMyS1MoUlRDX0xYVENUTFs3XSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQzMyS1MgaXMgc2V0IHRvIDAgdGhlIExYVCBzdGFibGUgZmxhZyBpcyBzZXQgd2hlbiBleHRMWFQgY2xvY2sgc291cmNlIGlzIHN0YWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBDMzJLUyBpcyBzZXQgdG8gMSB0aGUgTFhUIHN0YWJsZSBmbGFnIGlzIHNldCB3aGVuIExJUkMzMiBjbG9jayBzb3VyY2UgaXMgc3RhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkgY2xvY2sgaXMgbm90IHN0YWJsZSBvciBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpIGNsb2NrIGlzIHN0YWJsZWQgYW5kIGVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFBMTFNUQiAgICB8SW50ZXJuYWwgUExMIENsb2NrIFNvdXJjZSBTdGFibGUgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcm5hbCBQTEwgY2xvY2sgaXMgbm90IHN0YWJsZSBvciBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJuYWwgUExMIGNsb2NrIGlzIHN0YWJsZSBhbmQgZW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8TElSQ1NUQiAgIHxMSVJDIENsb2NrIFNvdXJjZSBTdGFibGUgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpIGNsb2NrIGlzIG5vdCBzdGFibGUgb3IgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDEwIGtIeiBpbnRlcm5hbCBsb3cgc3BlZWQgUkMgb3NjaWxsYXRvciAoTElSQykgY2xvY2sgaXMgc3RhYmxlIGFuZCBlbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxISVJDU1RCICAgfEhJUkMgQ2xvY2sgU291cmNlIFN0YWJsZSBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpIGNsb2NrIGlzIG5vdCBzdGFibGUgb3IgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDEyIE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkMpIGNsb2NrIGlzIHN0YWJsZSBhbmQgZW5hYmxlZC4KKyAgICAgKiB8WzddICAgICB8Q0xLU0ZBSUwgIHxDbG9jayBTd2l0Y2hpbmcgRmFpbCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXBkYXRlZCB3aGVuIHNvZnR3YXJlIHN3aXRjaGVzIHN5c3RlbSBjbG9jayBzb3VyY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgc3dpdGNoIHRhcmdldCBjbG9jayBpcyBzdGFibGUsIHRoaXMgYml0IHdpbGwgYmUgc2V0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgc3dpdGNoIHRhcmdldCBjbG9jayBpcyBub3Qgc3RhYmxlLCB0aGlzIGJpdCB3aWxsIGJlIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDbG9jayBzd2l0Y2hpbmcgc3VjY2Vzcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgc3dpdGNoaW5nIGZhaWx1cmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIHNlbGVjdGVkIGNsb2NrIHNvdXJjZSBpcyBzdGFibGUsIGhhcmR3YXJlIHdpbGwgc3dpdGNoIHN5c3RlbSBjbG9jayB0byBzZWxlY3RlZCBjbG9jayBhdXRvbWF0aWNhbGx5LCBhbmQgQ0xLU0ZBSUwgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYnkgaGFyZHdhcmUuCisgICAgICogfFs4XSAgICAgfEVYVExYVFNUQiB8RVhUTFhUIENsb2NrIFNvdXJjZSBTdGFibGUgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKGV4dExYVCkgY2xvY2sgaXMgbm90IHN0YWJsZSBvciBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChleHRMWFQpIGNsb2NrIGlzIHN0YWJsZSBhbmQgZW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8TElSQzMyU1RCIHxMSVJDMzIgQ2xvY2sgU291cmNlIFN0YWJsZSBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDMyIGtIeiBpbnRlcm5hbCBsb3cgc3BlZWQgUkMgb3NjaWxsYXRvciAoTElSQzMyKSBjbG9jayBpcyBub3Qgc3RhYmxlIG9yIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAzMiBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMzMikgY2xvY2sgaXMgc3RhYmxlIGFuZCBlbmFibGVkLgorICAgICAqIEB2YXIgQ0xLX1Q6OkNMS09DVEwKKyAgICAgKiBPZmZzZXQ6IDB4NjAgIENsb2NrIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8RlJFUVNFTCAgIHxDbG9jayBPdXRwdXQgRnJlcXVlbmN5IFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmb3JtdWxhIG9mIG91dHB1dCBmcmVxdWVuY3kgaXMgRm91dCA9IEZpbi8yXihOKzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZpbiBpcyB0aGUgaW5wdXQgY2xvY2sgZnJlcXVlbmN5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvdXQgaXMgdGhlIGZyZXF1ZW5jeSBvZiBkaXZpZGVyIG91dHB1dCBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOIGlzIHRoZSA0LWJpdCB2YWx1ZSBvZiBGUkVRU0VMWzM6MF0uCisgICAgICogfFs0XSAgICAgfENMS09FTiAgICB8Q2xvY2sgT3V0cHV0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2xvY2sgT3V0cHV0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbG9jayBPdXRwdXQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8RElWMUVOICAgIHxDbG9jayBPdXRwdXQgRGl2aWRlIE9uZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENsb2NrIE91dHB1dCB3aWxsIG91dHB1dCBjbG9jayB3aXRoIHNvdXJjZSBmcmVxdWVuY3kgZGl2aWRlZCBieSBGUkVRU0VMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbG9jayBPdXRwdXQgd2lsbCBvdXRwdXQgY2xvY2sgd2l0aCBzb3VyY2UgZnJlcXVlbmN5LgorICAgICAqIHxbNl0gICAgIHxDTEsxSFpFTiAgfENsb2NrIE91dHB1dCAxSHogRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAxIEh6IGNsb2NrIG91dHB1dCBmb3IgMzIuNzY4IGtIeiBmcmVxdWVuY3kgY29tcGVuc2F0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAxIEh6IGNsb2NrIG91dHB1dCBmb3IgMzIuNzY4IGtIeiBmcmVxdWVuY3kgY29tcGVuc2F0aW9uIEVuYWJsZWQuCisgICAgICogQHZhciBDTEtfVDo6Q0xLRENUTAorICAgICAqIE9mZnNldDogMHg3MCAgQ2xvY2sgRmFpbCBEZXRlY3RvciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzRdICAgICB8SFhURkRFTiAgIHxIWFQgQ2xvY2sgRmFpbCBEZXRlY3RvciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGZhaWwgZGV0ZWN0b3IgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGZhaWwgZGV0ZWN0b3IgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8SFhURklFTiAgIHxIWFQgQ2xvY2sgRmFpbCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKSBjbG9jayBmYWlsIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkgY2xvY2sgZmFpbCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8TFhURkRFTiAgIHxMWFQgQ2xvY2sgRmFpbCBEZXRlY3RvciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKSBjbG9jayBmYWlsIGRldGVjdG9yIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkgY2xvY2sgZmFpbCBkZXRlY3RvciBFbmFibGVkLgorICAgICAqIHxbMTNdICAgIHxMWFRGSUVOICAgfExYVCBDbG9jayBGYWlsIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDMyLjc2OCBrSHogZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoTFhUKSBjbG9jayBmYWlsIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpIGNsb2NrIGZhaWwgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxNl0gICAgfEhYVEZRREVOICB8SFhUIENsb2NrIEZyZXF1ZW5jeSBNb25pdG9yIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkgY2xvY2sgZnJlcXVlbmN5IG1vbml0b3IgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGZyZXF1ZW5jeSBtb25pdG9yIEVuYWJsZWQuCisgICAgICogfFsxN10gICAgfEhYVEZRSUVOICB8SFhUIENsb2NrIEZyZXF1ZW5jeSBNb25pdG9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGZyZXF1ZW5jeSBtb25pdG9yIGZhaWwgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKSBjbG9jayBmcmVxdWVuY3kgbW9uaXRvciBmYWlsIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgQ0xLX1Q6OkNMS0RTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NzQgIENsb2NrIEZhaWwgRGV0ZWN0b3IgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SFhURklGICAgIHxIWFQgQ2xvY2sgRmFpbCBJbnRlcnJ1cHQgRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkgY2xvY2sgaXMgbm9ybWFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSA0fjI0IE1IeiBleHRlcm5hbCBoaWdoIHNwZWVkIGNyeXN0YWwgb3NjaWxsYXRvciAoSFhUKSBjbG9jayBzdG9wcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGUgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMV0gICAgIHxMWFRGSUYgICAgfExYVCBDbG9jayBGYWlsIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkgY2xvY2sgaXMgbm9ybWFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkgc3RvcHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8SFhURlFJRiAgIHxIWFQgQ2xvY2sgRnJlcXVlbmN5IE1vbml0b3IgSW50ZXJydXB0IEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDR+MjQgTUh6IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChIWFQpIGNsb2NrIGlzIG5vcm1hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gNH4yNCBNSHogZXh0ZXJuYWwgaGlnaCBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKEhYVCkgY2xvY2sgZnJlcXVlbmN5IGlzIGFibm9ybWFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBDTEtfVDo6Q0RVUEIKKyAgICAgKiBPZmZzZXQ6IDB4NzggIENsb2NrIEZyZXF1ZW5jeSBEZXRlY3RvciBVcHBlciBCb3VuZGFyeSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs5OjBdICAgfFVQRVJCRCAgICB8SFhUIENsb2NrIEZyZXF1ZW5jeSBEZXRlY3RvciBVcHBlciBCb3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXRzIGRlZmluZSB0aGUgaGlnaCB2YWx1ZSBvZiBmcmVxdWVuY3kgbW9uaXRvciB3aW5kb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBIWFQgZnJlcXVlbmN5IG1vbml0b3IgdmFsdWUgaGlnaGVyIHRoYW4gdGhpcyByZWdpc3RlciwgdGhlIEhYVCBmcmVxdWVuY3kgZGV0ZWN0IGZhaWwgaW50ZXJydXB0IGZsYWcgd2lsbCBzZXQgdG8gMS4KKyAgICAgKiBAdmFyIENMS19UOjpDRExPV0IKKyAgICAgKiBPZmZzZXQ6IDB4N0MgIENsb2NrIEZyZXF1ZW5jeSBEZXRlY3RvciBMb3dlciBCb3VuZGFyeSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs5OjBdICAgfExPV0VSQkQgICB8SFhUIENsb2NrIEZyZXF1ZW5jeSBEZXRlY3RvciBMb3dlciBCb3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXRzIGRlZmluZSB0aGUgbG93IHZhbHVlIG9mIGZyZXF1ZW5jeSBtb25pdG9yIHdpbmRvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEhYVCBmcmVxdWVuY3kgbW9uaXRvciB2YWx1ZSBsb3dlciB0aGFuIHRoaXMgcmVnaXN0ZXIsIHRoZSBIWFQgZnJlcXVlbmN5IGRldGVjdCBmYWlsIGludGVycnVwdCBmbGFnIHdpbGwgc2V0IHRvIDEuCisgICAgICogQHZhciBDTEtfVDo6UE1VQ1RMCisgICAgICogT2Zmc2V0OiAweDkwICBQb3dlciBNYW5hZ2VyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxQRE1TRUwgICAgfFBvd2VyLWRvd24gTW9kZSBTZWxlY3Rpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBjb250cm9sIGNoaXAgUG93ZXItZG93biBtb2RlIGdyYWRlIHNlbGVjdGlvbiB3aGVuIENQVSBleGVjdXRlIFdGSS9XRkUgaW5zdHJ1Y3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gUG93ZXItZG93biBtb2RlIGlzIHNlbGVjdGVkIChQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gTG93IGxlYWthZ2UgUG93ZXItZG93biBtb2RlIGlzIHNlbGVjdGVkIChMTFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBGYXN0IHdha2UtdXAgUG93ZXItZG93biAoRldQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gVWx0cmEgbG93IGxlYWthZ2UgUG93ZXItZG93biBtb2RlIGlzIHNlbGVjdGVkIChVTExQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gU3RhbmRieSBQb3dlci1kb3duIG1vZGUgaXMgc2VsZWN0ZWQgKFNQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gRGVlcCBQb3dlci1kb3duIG1vZGUgaXMgc2VsZWN0ZWQgKERQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs4XSAgICAgfFdLVE1SRU4gICB8V2FrZS11cCBUaW1lciBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXYWtlLXVwIHRpbWVyIERpc2FibGUgaW4gRGVlcCBQb3dlci1kb3duIG1vZGUgb3IgU3RhbmRieSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdha2UtdXAgdGltZXIgRW5hYmxlZCBpbiBEZWVwIFBvd2VyLWRvd24gbW9kZSBvciBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzExOjldICB8V0tUTVJJUyAgIHxXYWtlLXVwIFRpbWVyIFRpbWUtb3V0IEludGVydmFsIFNlbGVjdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGNvbnRyb2wgd2FrZS11cCB0aW1lciB0aW1lLW91dCBpbnRlcnZhbCB3aGVuIGNoaXAgdW5kZXIgRGVlcCBQb3dlci1kb3duIG1vZGUgb3IgU3RhbmRieSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gVGltZS1vdXQgaW50ZXJ2YWwgaXMgMTI4IExJUkMgY2xvY2tzICgxMi44bXMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFRpbWUtb3V0IGludGVydmFsIGlzIDI1NiBMSVJDIGNsb2NrcyAoMjUuNm1zKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBUaW1lLW91dCBpbnRlcnZhbCBpcyA1MTIgTElSQyBjbG9ja3MgKDUxLjJtcykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gVGltZS1vdXQgaW50ZXJ2YWwgaXMgMTAyNCBMSVJDIGNsb2NrcyAoMTAyLjRtcykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gVGltZS1vdXQgaW50ZXJ2YWwgaXMgNDA5NiBMSVJDIGNsb2NrcyAoNDA5LjZtcykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gVGltZS1vdXQgaW50ZXJ2YWwgaXMgODE5MiBMSVJDIGNsb2NrcyAoODE5LjJtcykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gVGltZS1vdXQgaW50ZXJ2YWwgaXMgMTYzODQgTElSQyBjbG9ja3MgKDE2MzguNG1zKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBUaW1lLW91dCBpbnRlcnZhbCBpcyA2NTUzNiBMSVJDIGNsb2NrcyAoNjU1My42bXMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTc6MTZdIHxXS1BJTkVOICAgfFdha2UtdXAgUGluIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFdha2UtdXAgcGluIERpc2FibGUgaW4gRGVlcCBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBXYWtlLXVwIHBpbiByaXNpbmcgZWRnZSBFbmFibGVkIGluIERlZXAgUG93ZXItZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gV2FrZS11cCBwaW4gZmFsbGluZyBlZGdlIEVuYWJsZWQgaW4gRGVlcCBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBXYWtlLXVwIHBpbiBib3RoIGVkZ2UgRW5hYmxlZCBpbiBEZWVwIFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE4XSAgICB8QUNNUFNQV0sgIHxBQ01QIFN0YW5kYnkgUG93ZXItZG93biBNb2RlIFdha2UtdXAgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBQ01QIHdha2UtdXAgRGlzYWJsZSBpbiBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUNNUCB3YWtlLXVwIEVuYWJsZWQgaW4gU3RhbmRieSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyM10gICAgfFJUQ1dLRU4gICB8UlRDIFdha2UtdXAgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgaXMgYSBwcm90ZWN0ZWQgcmVnaXN0ZXIuIFBsZWFzZSByZWZlciB0byBvcGVuIGxvY2sgc2VxdWVuY2UgdG8gcHJvZ3JhbSBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlRDIHdha2UtdXAgRGlzYWJsZSBpbiBEZWVwIFBvd2VyLWRvd24gbW9kZSBvciBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlRDIHdha2UtdXAgRW5hYmxlZCBpbiBEZWVwIFBvd2VyLWRvd24gbW9kZSBvciBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIENMS19UOjpQTVVTVFMKKyAgICAgKiBAdmFyIENMS19UOjpQTVVTVFMKKyAgICAgKiBPZmZzZXQ6IDB4OTQgIFBvd2VyIE1hbmFnZXIgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UElOV0sgICAgIHxQaW4gV2FrZS11cCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHdha2UtdXAgb2YgY2hpcCBmcm9tIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpIHdhcyByZXF1ZXN0ZWQgYnkgYSB0cmFuc2l0aW9uIG9mIHRoZSBXYWtlLXVwIHBpbiAoR1BDLjApLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpcyBjbGVhcmVkIHdoZW4gRFBEIG1vZGUgaXMgZW50ZXJlZC4KKyAgICAgKiB8WzFdICAgICB8VE1SV0sgICAgIHxUaW1lciBXYWtlLXVwIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgd2FrZS11cCBvZiBjaGlwIGZyb20gRGVlcCBQb3dlci1kb3duIG1vZGUgKERQRCkgb3IgU3RhbmRieSBQb3dlci1kb3duIChTUEQpIG1vZGUgd2FzIHJlcXVlc3RlZCBieSB3YWtldXAgdGltZXIgdGltZS1vdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIGNsZWFyZWQgd2hlbiBEUEQgb3IgU1BEIG1vZGUgaXMgZW50ZXJlZC4KKyAgICAgKiB8WzJdICAgICB8UlRDV0sgICAgIHxSVEMgV2FrZS11cCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHdha2V1cCBvZiBkZXZpY2UgZnJvbSBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKSBvciBTdGFuZGJ5IFBvd2VyLWRvd24gKFNQRCkgbW9kZSB3YXMgcmVxdWVzdGVkIHdpdGggYSBSVEMgYWxhcm0sIHRpY2sgdGltZSBvciB0YW1wZXIgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIGNsZWFyZWQgd2hlbiBEUEQgb3IgU1BEIG1vZGUgaXMgZW50ZXJlZC4KKyAgICAgKiB8WzhdICAgICB8R1BBV0sgICAgIHxHUEEgV2FrZS11cCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHdha2UtdXAgb2YgY2hpcCBmcm9tIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIHdhcyByZXF1ZXN0ZWQgYnkgYSB0cmFuc2l0aW9uIG9mIHNlbGVjdGVkIG9uZSBHUEEgZ3JvdXAgcGlucy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaXMgY2xlYXJlZCB3aGVuIFNQRCBtb2RlIGlzIGVudGVyZWQuCisgICAgICogfFs5XSAgICAgfEdQQldLICAgICB8R1BCIFdha2UtdXAgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB3YWtlLXVwIG9mIGNoaXAgZnJvbSBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSB3YXMgcmVxdWVzdGVkIGJ5IGEgdHJhbnNpdGlvbiBvZiBzZWxlY3RlZCBvbmUgR1BCIGdyb3VwIHBpbnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIGNsZWFyZWQgd2hlbiBTUEQgbW9kZSBpcyBlbnRlcmVkLgorICAgICAqIHxbMTBdICAgIHxHUENXSyAgICAgfEdQQyBXYWtlLXVwIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgd2FrZS11cCBvZiBjaGlwIGZyb20gU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgd2FzIHJlcXVlc3RlZCBieSBhIHRyYW5zaXRpb24gb2Ygc2VsZWN0ZWQgb25lIEdQQyBncm91cCBwaW5zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpcyBjbGVhcmVkIHdoZW4gU1BEIG1vZGUgaXMgZW50ZXJlZC4KKyAgICAgKiB8WzExXSAgICB8R1BEV0sgICAgIHxHUEQgV2FrZS11cCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHdha2UtdXAgb2YgY2hpcCBmcm9tIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIHdhcyByZXF1ZXN0ZWQgYnkgYSB0cmFuc2l0aW9uIG9mIHNlbGVjdGVkIG9uZSBHUEQgZ3JvdXAgcGlucy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaXMgY2xlYXJlZCB3aGVuIFNQRCBtb2RlIGlzIGVudGVyZWQuCisgICAgICogfFsxMl0gICAgfExWUldLICAgICB8TFZSIFdha2UtdXAgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB3YWtlLXVwIG9mIGRldmljZSBmcm9tIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIHdhcyByZXF1ZXN0ZWQgd2l0aCBhIExWUiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaXMgY2xlYXJlZCB3aGVuIFNQRCBtb2RlIGlzIGVudGVyZWQuCisgICAgICogfFsxM10gICAgfEJPRFdLICAgICB8Qk9EIFdha2UtdXAgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB3YWtlLXVwIG9mIGRldmljZSBmcm9tIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIHdhcyByZXF1ZXN0ZWQgd2l0aCBhIEJPRCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaXMgY2xlYXJlZCB3aGVuIFNQRCBtb2RlIGlzIGVudGVyZWQuCisgICAgICogfFsxNF0gICAgfEFDTVBXSyAgICB8QUNNUCBXYWtlLXVwIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgd2FrZS11cCBvZiBkZXZpY2UgZnJvbSBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSB3YXMgcmVxdWVzdGVkIHdpdGggYSBBQ01QIHRyYW5zaXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGlzIGNsZWFyZWQgd2hlbiBTUEQgbW9kZSBpcyBlbnRlcmVkLgorICAgICAqIHxbMzFdICAgIHxDTFJXSyAgICAgfENsZWFyIFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgYWxsIHdha2UtdXAgZmxhZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBhdXRvIGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogQHZhciBDTEtfVDo6U1dLREJDVEwKKyAgICAgKiBPZmZzZXQ6IDB4OUMgIFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIERlLWJvdW5jZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8U1dLREJDTEtTRUx8U3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBTYW1wbGUgd2FrZS11cCBpbnB1dCBvbmNlIHBlciAxIGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDQgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTYW1wbGUgd2FrZS11cCBpbnB1dCBvbmNlIHBlciA4IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMTYgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBTYW1wbGUgd2FrZS11cCBpbnB1dCBvbmNlIHBlciAzMiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDY0IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMTI4IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMioyNTYgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSBTYW1wbGUgd2FrZS11cCBpbnB1dCBvbmNlIHBlciA0KjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IFNhbXBsZSB3YWtlLXVwIGlucHV0IG9uY2UgcGVyIDgqMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMTYqMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMzIqMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgNjQqMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gU2FtcGxlIHdha2UtdXAgaW5wdXQgb25jZSBwZXIgMTI4KjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogRGUtYm91bmNlIGNvdW50ZXIgY2xvY2sgc291cmNlIGlzIHRoZSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIEB2YXIgQ0xLX1Q6OlBBU1dLQ1RMCisgICAgICogT2Zmc2V0OiAweEEwICBHUEEgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRU4gICAgICB8U3RhbmRieSBQb3dlci1kb3duIFBpbiBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BBIGdyb3VwIHBpbiB3YWtlLXVwIGZ1bmN0aW9uIGRkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BBIGdyb3VwIHBpbiB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFBSV0tFTiAgICB8UGluIFJpc2luZyBFZGdlIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUEEgZ3JvdXAgcGluIHJpc2luZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQQSBncm91cCBwaW4gcmlzaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxQRldLRU4gICAgfFBpbiBGYWxsaW5nIEVkZ2UgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQQSBncm91cCBwaW4gZmFsbGluZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQQSBncm91cCBwaW4gZmFsbGluZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8Wzc6NF0gICB8V0tQU0VMICAgIHxHUEEgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgUGluIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBHUEEuMCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEdQQS4xIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gR1BBLjIgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBHUEEuMyB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEdQQS40IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gR1BBLjUgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBHUEEuNiB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IEdQQS43IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gR1BBLjggd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBHUEEuOSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IEdQQS4xMCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IEdQQS4xMSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMCA9IEdQQS4xMiB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IEdQQS4xMyB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IEdQQS4xNCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IEdQQS4xNSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfERCRU4gICAgICB8R1BBIElucHV0IFNpZ25hbCBEZS1ib3VuY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBEQkVOIGJpdCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgZGUtYm91bmNlIGZ1bmN0aW9uIGZvciBlYWNoIGNvcnJlc3BvbmRpbmcgSU8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGlucHV0IHNpZ25hbCBwdWxzZSB3aWR0aCBjYW5ub3QgYmUgc2FtcGxlZCBieSBjb250aW51b3VzIHR3byBkZS1ib3VuY2Ugc2FtcGxlIGN5Y2xlLCB0aGUgaW5wdXQgc2lnbmFsIHRyYW5zaXRpb24gaXMgc2VlbiBhcyB0aGUgc2lnbmFsIGJvdW5jZSBhbmQgd2lsbCBub3QgdHJpZ2dlciB0aGUgd2FrZXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZS1ib3VuY2UgY2xvY2sgc291cmNlIGlzIHRoZSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdGFuZGJ5IHBvd2VyLWRvd24gd2FrZS11cCBwaW4gRGUtYm91bmNlIGZ1bmN0aW9uIERpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YW5kYnkgcG93ZXItZG93biB3YWtlLXVwIHBpbiBEZS1ib3VuY2UgZnVuY3Rpb24gRW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZS1ib3VuY2UgZnVuY3Rpb24gaXMgdmFsaWQgb25seSBmb3IgZWRnZSB0cmlnZ2VyZWQuCisgICAgICogQHZhciBDTEtfVDo6UEJTV0tDVEwKKyAgICAgKiBPZmZzZXQ6IDB4QTQgIEdQQiBTdGFuZGJ5IFBvd2VyLWRvd24gV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8V0tFTiAgICAgIHxTdGFuZGJ5IFBvd2VyLWRvd24gUGluIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUEIgZ3JvdXAgcGluIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQQiBncm91cCBwaW4gd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxQUldLRU4gICAgfFBpbiBSaXNpbmcgRWRnZSBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BCIGdyb3VwIHBpbiByaXNpbmcgZWRnZSB3YWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUEIgZ3JvdXAgcGluIHJpc2luZyBlZGdlIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UEZXS0VOICAgIHxQaW4gRmFsbGluZyBFZGdlIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUEIgZ3JvdXAgcGluIGZhbGxpbmcgZWRnZSB3YWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUEIgZ3JvdXAgcGluIGZhbGxpbmcgZWRnZSB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs3OjRdICAgfFdLUFNFTCAgICB8R1BCIFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIFBpbiBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gR1BCLjAgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBHUEIuMSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEdQQi4yIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gR1BCLjMgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBHUEIuNCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IEdQQi41IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gR1BCLjYgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBHUEIuNyB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IEdQQi44IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gR1BCLjkgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSBHUEIuMTAgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTEgPSBHUEIuMTEgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDAgPSBHUEIuMTIgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDEgPSBHUEIuMTMgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTAgPSBHUEIuMTQgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSBHUEIuMTUgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxEQkVOICAgICAgfEdQQiBJbnB1dCBTaWduYWwgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgREJFTiBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGRlLWJvdW5jZSBmdW5jdGlvbiBmb3IgZWFjaCBjb3JyZXNwb25kaW5nIElPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnB1dCBzaWduYWwgcHVsc2Ugd2lkdGggY2Fubm90IGJlIHNhbXBsZWQgYnkgY29udGludW91cyB0d28gZGUtYm91bmNlIHNhbXBsZSBjeWNsZSwgdGhlIGlucHV0IHNpZ25hbCB0cmFuc2l0aW9uIGlzIHNlZW4gYXMgdGhlIHNpZ25hbCBib3VuY2UgYW5kIHdpbGwgbm90IHRyaWdnZXIgdGhlIHdha2V1cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGNsb2NrIHNvdXJjZSBpcyB0aGUgMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RhbmRieSBwb3dlci1kb3duIHdha2UtdXAgcGluIERlLWJvdW5jZSBmdW5jdGlvbiBEaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTdGFuZGJ5IHBvd2VyLWRvd24gd2FrZS11cCBwaW4gRGUtYm91bmNlIGZ1bmN0aW9uIEVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgZm9yIGVkZ2UgdHJpZ2dlcmVkLgorICAgICAqIEB2YXIgQ0xLX1Q6OlBDU1dLQ1RMCisgICAgICogT2Zmc2V0OiAweEE4ICBHUEMgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRU4gICAgICB8U3RhbmRieSBQb3dlci1kb3duIFBpbiBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BDIGdyb3VwIHBpbiB3YWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUEMgZ3JvdXAgcGluIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8UFJXS0VOICAgIHxQaW4gUmlzaW5nIEVkZ2UgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQQyBncm91cCBwaW4gcmlzaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BDIGdyb3VwIHBpbiByaXNpbmcgZWRnZSB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFBGV0tFTiAgICB8UGluIEZhbGxpbmcgRWRnZSBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BDIGdyb3VwIHBpbiBmYWxsaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BDIGdyb3VwIHBpbiBmYWxsaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbNzo0XSAgIHxXS1BTRUwgICAgfEdQQyBTdGFuZGJ5IFBvd2VyLWRvd24gV2FrZS11cCBQaW4gU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEdQQy4wIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gR1BDLjEgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBHUEMuMiB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEdQQy4zIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gR1BDLjQgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBHUEMuNSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IEdQQy42IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gR1BDLjcgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBHUEMuOCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEdQQy45IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEwID0gR1BDLjEwIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gR1BDLjExIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gR1BDLjEyIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gR1BDLjEzIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IFJlc2VydmVkLgorICAgICAqIHxbOF0gICAgIHxEQkVOICAgICAgfEdQQyBJbnB1dCBTaWduYWwgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgREJFTiBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGRlLWJvdW5jZSBmdW5jdGlvbiBmb3IgZWFjaCBjb3JyZXNwb25kaW5nIElPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnB1dCBzaWduYWwgcHVsc2Ugd2lkdGggY2Fubm90IGJlIHNhbXBsZWQgYnkgY29udGludW91cyB0d28gZGUtYm91bmNlIHNhbXBsZSBjeWNsZSwgdGhlIGlucHV0IHNpZ25hbCB0cmFuc2l0aW9uIGlzIHNlZW4gYXMgdGhlIHNpZ25hbCBib3VuY2UgYW5kIHdpbGwgbm90IHRyaWdnZXIgdGhlIHdha2V1cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGNsb2NrIHNvdXJjZSBpcyB0aGUgMTAga0h6IGludGVybmFsIGxvdyBzcGVlZCBSQyBvc2NpbGxhdG9yIChMSVJDKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RhbmRieSBwb3dlci1kb3duIHdha2UtdXAgcGluIERlLWJvdW5jZSBmdW5jdGlvbiBEaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTdGFuZGJ5IHBvd2VyLWRvd24gd2FrZS11cCBwaW4gRGUtYm91bmNlIGZ1bmN0aW9uIEVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgZm9yIGVkZ2UgdHJpZ2dlcmVkLgorICAgICAqIEB2YXIgQ0xLX1Q6OlBEU1dLQ1RMCisgICAgICogT2Zmc2V0OiAweEFDICBHUEQgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRU4gICAgICB8U3RhbmRieSBQb3dlci1kb3duIFBpbiBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BEIGdyb3VwIHBpbiB3YWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUEQgZ3JvdXAgcGluIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8UFJXS0VOICAgIHxQaW4gUmlzaW5nIEVkZ2UgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQRCBncm91cCBwaW4gcmlzaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BEIGdyb3VwIHBpbiByaXNpbmcgZWRnZSB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFBGV0tFTiAgICB8UGluIEZhbGxpbmcgRWRnZSBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BEIGdyb3VwIHBpbiBmYWxsaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BEIGdyb3VwIHBpbiBmYWxsaW5nIGVkZ2Ugd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbNzo0XSAgIHxXS1BTRUwgICAgfEdQRCBTdGFuZGJ5IFBvd2VyLWRvd24gV2FrZS11cCBQaW4gU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEdQRC4wIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gR1BELjEgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBHUEQuMiB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEdQRC4zIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gR1BELjQgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBHUEQuNSB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IEdQRC42IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gR1BELjcgd2FrZS11cCBmdW5jdGlvbiBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBHUEQuOCB3YWtlLXVwIGZ1bmN0aW9uIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEdQRC45IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEwID0gR1BELjEwIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gR1BELjExIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gR1BELjEyIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gR1BELjEzIHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gR1BELjE0IHdha2UtdXAgZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gUmVzZXJ2ZWQuCisgICAgICogfFs4XSAgICAgfERCRU4gICAgICB8R1BEIElucHV0IFNpZ25hbCBEZS1ib3VuY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBEQkVOIGJpdCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgZGUtYm91bmNlIGZ1bmN0aW9uIGZvciBlYWNoIGNvcnJlc3BvbmRpbmcgSU8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGlucHV0IHNpZ25hbCBwdWxzZSB3aWR0aCBjYW5ub3QgYmUgc2FtcGxlZCBieSBjb250aW51b3VzIHR3byBkZS1ib3VuY2Ugc2FtcGxlIGN5Y2xlLCB0aGUgaW5wdXQgc2lnbmFsIHRyYW5zaXRpb24gaXMgc2VlbiBhcyB0aGUgc2lnbmFsIGJvdW5jZSBhbmQgd2lsbCBub3QgdHJpZ2dlciB0aGUgd2FrZXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZS1ib3VuY2UgY2xvY2sgc291cmNlIGlzIHRoZSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdGFuZGJ5IHBvd2VyLWRvd24gd2FrZS11cCBwaW4gRGUtYm91bmNlIGZ1bmN0aW9uIERpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YW5kYnkgcG93ZXItZG93biB3YWtlLXVwIHBpbiBEZS1ib3VuY2UgZnVuY3Rpb24gRW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZS1ib3VuY2UgZnVuY3Rpb24gaXMgdmFsaWQgb25seSBmb3IgZWRnZSB0cmlnZ2VyZWQuCisgICAgICogQHZhciBDTEtfVDo6SU9QRENUTAorICAgICAqIE9mZnNldDogMHhCMCAgR1BJTyBTdGFuZGJ5IFBvd2VyLWRvd24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfElPSFIgICAgICB8R1BJTyBIb2xkIFJlbGVhc2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEdQSU8gZW50ZXIgc3RhbmRieSBwb3dlci1kb3duIG1vZGUsIGFsbCBJL08gc3RhdHVzIGFyZSBob2xkIHRvIGtlZXAgbm9ybWFsIG9wZXJhdGluZyBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgY2hpcCB3YXMgd2FrZWQgdXAgZnJvbSBzdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSwgdGhlIEkvTyBzdGlsbCBrZWVwcyBob2xkIHN0YXR1cyB1bnRpbCB1c2VyIHNldHMgdGhpcyBiaXQgdG8gcmVsZWFzZSBJL08gaG9sZCBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgYXV0byBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIEB2YXIgQ0xLX1Q6OkhYVEZTRUwKKyAgICAgKiBPZmZzZXQ6IDB4QjQgIEhYVCBGaWx0ZXIgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxIWFRGU0VMICAgfEhYVCBGaWx0ZXIgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEhYVCBmcmVxdWVuY3kgaXMgPiAxMk1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSFhUIGZyZXF1ZW5jeSBpcyA8PSAxMk1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBhdXRvIGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICovCisKKworICAgIF9fSU8gdWludDMyX3QgUFdSQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFN5c3RlbSBQb3dlci1kb3duIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFIQkNMSzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBBSEIgRGV2aWNlcyBDbG9jayBFbmFibGUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBUEJDTEswOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gQVBCIERldmljZXMgQ2xvY2sgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQVBCQ0xLMTsgICAgICAgICAgICAgICAvKiE8IFsweDAwMENdIEFQQiBEZXZpY2VzIENsb2NrIEVuYWJsZSBDb250cm9sIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS1NFTDA7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBDbG9jayBTb3VyY2UgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtTRUwxOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAxNF0gQ2xvY2sgU291cmNlIFNlbGVjdCBDb250cm9sIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLU0VMMjsgICAgICAgICAgICAgICAvKiE8IFsweDAwMThdIENsb2NrIFNvdXJjZSBTZWxlY3QgQ29udHJvbCBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS1NFTDM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDFDXSBDbG9jayBTb3VyY2UgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtESVYwOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gQ2xvY2sgRGl2aWRlciBOdW1iZXIgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLRElWMTsgICAgICAgICAgICAgICAvKiE8IFsweDAwMjRdIENsb2NrIERpdmlkZXIgTnVtYmVyIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzJdOworICAgIF9fSU8gdWludDMyX3QgQ0xLRElWNDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMzBdIENsb2NrIERpdmlkZXIgTnVtYmVyIFJlZ2lzdGVyIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBDTEtESVY7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDM0XSBBUEIgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVsyXTsKKyAgICBfX0lPIHVpbnQzMl90IFBMTENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDQwXSBQTEwgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMlszXTsKKyAgICBfX0kgIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDUwXSBDbG9jayBTdGF0dXMgTW9uaXRvciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFM1szXTsKKyAgICBfX0lPIHVpbnQzMl90IENMS09DVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDYwXSBDbG9jayBPdXRwdXQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNFszXTsKKyAgICBfX0lPIHVpbnQzMl90IENMS0RDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDcwXSBDbG9jayBGYWlsIERldGVjdG9yIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtEU1RTOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA3NF0gQ2xvY2sgRmFpbCBEZXRlY3RvciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0RVUEI7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNzhdIENsb2NrIEZyZXF1ZW5jeSBEZXRlY3RvciBVcHBlciBCb3VuZGFyeSBSZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENETE9XQjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDdDXSBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgTG93IEJvdW5kYXJ5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNVs0XTsKKyAgICBfX0lPIHVpbnQzMl90IFBNVUNUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDkwXSBQb3dlciBNYW5hZ2VyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQTVVTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA5NF0gUG93ZXIgTWFuYWdlciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTZbMV07CisgICAgX19JTyB1aW50MzJfdCBTV0tEQkNUTDsgICAgICAgICAgICAgIC8qITwgWzB4MDA5Q10gU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgRGUtYm91bmNlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUEFTV0tDVEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwQTBdIEdQQSBTdGFuZGJ5IFBvd2VyLWRvd24gV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBCU1dLQ1RMOyAgICAgICAgICAgICAgLyohPCBbMHgwMEE0XSBHUEIgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQQ1NXS0NUTDsgICAgICAgICAgICAgIC8qITwgWzB4MDBBOF0gR1BDIFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUERTV0tDVEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwQUNdIEdQRCBTdGFuZGJ5IFBvd2VyLWRvd24gV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElPUERDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMEIwXSBHUElPIFN0YW5kYnkgUG93ZXItZG93biBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIWFRGU0VMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBCNF0gSFhUIEZpbHRlciBTZWxlY3QgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IENMS19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBDTEtfQ09OU1QgQ0xLIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIENMSyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIENMS19QV1JDVExfSFhURU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBIWFRFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUFdSQ1RMX0hYVEVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BXUkNUTF9IWFRFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogSFhURU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUFdSQ1RMX0xYVEVOX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogTFhURU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BXUkNUTF9MWFRFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QV1JDVExfTFhURU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IExYVEVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BXUkNUTF9ISVJDRU5fUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IEhJUkNFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QV1JDVExfSElSQ0VOX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUFdSQ1RMX0hJUkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBISVJDRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QV1JDVExfTElSQ0VOX1BvcyAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBMSVJDRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUFdSQ1RMX0xJUkNFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BXUkNUTF9MSVJDRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogTElSQ0VOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUFdSQ1RMX1BEV0tJRU5fUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogUERXS0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BXUkNUTF9QRFdLSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENMS19QV1JDVExfUERXS0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IFBEV0tJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BXUkNUTF9QRFdLSUZfUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IFBEV0tJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QV1JDVExfUERXS0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUFdSQ1RMX1BEV0tJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBQRFdLSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QV1JDVExfUERFTl9Qb3MgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBQREVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBDTEtfUFdSQ1RMX1BERU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BXUkNUTF9QREVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogUERFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUFdSQ1RMX0hYVEdBSU5fUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogSFhUR0FJTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BXUkNUTF9IWFRHQUlOX01zayAgICAgICAgICAgKDB4M3VsIDw8IENMS19QV1JDVExfSFhUR0FJTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IEhYVEdBSU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BXUkNUTF9IWFRTRUxUWVBfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IEhYVFNFTFRZUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19QV1JDVExfSFhUU0VMVFlQX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfUFdSQ1RMX0hYVFNFTFRZUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBIWFRTRUxUWVAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QV1JDVExfSFhUVEJFTl9Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UFdSQ1RMOiBIWFRUQkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfUFdSQ1RMX0hYVFRCRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BXUkNUTF9IWFRUQkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogSFhUVEJFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUFdSQ1RMX0hJUkM0OEVOX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBXUkNUTDogSElSQzQ4RU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BXUkNUTF9ISVJDNDhFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19QV1JDVExfSElSQzQ4RU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQV1JDVEw6IEhJUkM0OEVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FIQkNMS19QRE1BMENLRU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IFBETUEwQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BSEJDTEtfUERNQTBDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQUhCQ0xLX1BETUEwQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBQRE1BMENLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BSEJDTEtfUERNQTFDS0VOX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBQRE1BMUNLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQUhCQ0xLX1BETUExQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FIQkNMS19QRE1BMUNLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogUERNQTFDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQUhCQ0xLX0lTUENLRU5fUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogSVNQQ0tFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FIQkNMS19JU1BDS0VOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENMS19BSEJDTEtfSVNQQ0tFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IElTUENLRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FIQkNMS19FQklDS0VOX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IEVCSUNLRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19BSEJDTEtfRUJJQ0tFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDTEtfQUhCQ0xLX0VCSUNLRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBFQklDS0VOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BSEJDTEtfU0RIMENLRU5fUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBTREgwQ0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQUhCQ0xLX1NESDBDS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FIQkNMS19TREgwQ0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogU0RIMENLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQUhCQ0xLX0NSQ0NLRU5fUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogQ1JDQ0tFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FIQkNMS19DUkNDS0VOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENMS19BSEJDTEtfQ1JDQ0tFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IENSQ0NLRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FIQkNMS19DUlBUQ0tFTl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IENSUFRDS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19BSEJDTEtfQ1JQVENLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQUhCQ0xLX0NSUFRDS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBDUlBUQ0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BSEJDTEtfRk1DSURMRV9Qb3MgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QUhCQ0xLOiBGTUNJRExFIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQUhCQ0xLX0ZNQ0lETEVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FIQkNMS19GTUNJRExFX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogRk1DSURMRSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQUhCQ0xLX1VTQkhDS0VOX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFIQkNMSzogVVNCSENLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FIQkNMS19VU0JIQ0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19BSEJDTEtfVVNCSENLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBSEJDTEs6IFVTQkhDS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfV0RUQ0tFTl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBXRFRDS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1dEVENLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9XRFRDS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogV0RUQ0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1JUQ0NLRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogUlRDQ0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9SVENDS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfUlRDQ0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFJUQ0NLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9UTVIwQ0tFTl9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFRNUjBDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVE1SMENLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1RNUjBDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBUTVIwQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVE1SMUNLRU5fUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBUTVIxQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1RNUjFDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9UTVIxQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVE1SMUNLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1RNUjJDS0VOX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVE1SMkNLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9UTVIyQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfVE1SMkNLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFRNUjJDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9UTVIzQ0tFTl9Qb3MgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFRNUjNDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVE1SM0NLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1RNUjNDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBUTVIzQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfQ0xLT0NLRU5fUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBDTEtPQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX0NMS09DS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9DTEtPQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogQ0xLT0NLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX0FDTVAwMUNLRU5fUG9zICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogQUNNUDAxQ0tFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9BQ01QMDFDS0VOX01zayAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfQUNNUDAxQ0tFTl9Qb3MpICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IEFDTVAwMUNLRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9JMkMwQ0tFTl9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IEkyQzBDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfSTJDMENLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX0kyQzBDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBJMkMwQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfSTJDMUNLRU5fUG9zICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBJMkMxQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX0kyQzFDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9JMkMxQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogSTJDMUNLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX0kyQzJDS0VOX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogSTJDMkNLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9JMkMyQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfSTJDMkNLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IEkyQzJDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9RU1BJMENLRU5fUG9zICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFFTUEkwQ0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfUVNQSTBDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1FTUEkwQ0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBRU1BJMENLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfU1BJMENLRU5fUG9zICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBTUEkwQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1NQSTBDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9TUEkwQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogU1BJMENLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1NQSTFDS0VOX1BvcyAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogU1BJMUNLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9TUEkxQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfU1BJMUNLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFNQSTFDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9TUEkyQ0tFTl9Qb3MgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFNQSTJDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfU1BJMkNLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1NQSTJDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBTUEkyQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVUFSVDBDS0VOX1BvcyAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVQVJUMENLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1VBUlQwQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9VQVJUMENLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVUFSVDBDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1VBUlQxQ0tFTl9Qb3MgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVUFSVDFDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9VQVJUMUNLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfVUFSVDFDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVBUlQxQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9VQVJUMkNLRU5fUG9zICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVBUlQyQ0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVUFSVDJDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1VBUlQyQ0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVQVJUMkNLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVUFSVDNDS0VOX1BvcyAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVQVJUM0NLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1VBUlQzQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9VQVJUM0NLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVUFSVDNDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX1VBUlQ0Q0tFTl9Qb3MgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVUFSVDRDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9VQVJUNENLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfVUFSVDRDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVBUlQ0Q0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9VQVJUNUNLRU5fUG9zICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVBUlQ1Q0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVUFSVDVDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1VBUlQ1Q0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVQVJUNUNLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfQ0FOMENLRU5fUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBDQU4wQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX0NBTjBDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9DQU4wQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogQ0FOMENLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX09UR0NLRU5fUG9zICAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogT1RHQ0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9PVEdDS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfT1RHQ0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IE9UR0NLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9VU0JEQ0tFTl9Qb3MgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVTQkRDS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX1VTQkRDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9VU0JEQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogVVNCRENLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMF9VU0JEQ0tFTl9Qb3MgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IFVTQkRDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzBfVVNCRENLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEswX1VTQkRDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBVU0JEQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzBfRUFEQ0NLRU5fUG9zICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEswOiBFQURDQ0tFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEswX0VBRENDS0VOX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMF9FQURDQ0tFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogRUFEQ0NLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEswX0kyUzBDS0VOX1BvcyAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMDogSTJTMENLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMF9JMlMwQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzBfSTJTMENLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzA6IEkyUzBDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9TQzBDS0VOX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFNDMENLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfU0MwQ0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX1NDMENLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBTQzBDS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfU0MxQ0tFTl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBTQzFDS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX1NDMUNLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9TQzFDS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogU0MxQ0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX1NDMkNLRU5fUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogU0MyQ0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9TQzJDS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfU0MyQ0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFNDMkNLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9TUEkzQ0tFTl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFNQSTNDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfU1BJM0NLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX1NQSTNDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBTUEkzQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfVVNDSTBDS0VOX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBVU0NJMENLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX1VTQ0kwQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9VU0NJMENLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogVVNDSTBDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX1VTQ0kxQ0tFTl9Qb3MgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogVVNDSTFDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9VU0NJMUNLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfVVNDSTFDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFVTQ0kxQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9EQUNDS0VOX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IERBQ0NLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfREFDQ0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX0RBQ0NLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBEQUNDS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfRVBXTTBDS0VOX1BvcyAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBFUFdNMENLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX0VQV00wQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9FUFdNMENLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogRVBXTTBDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX0VQV00xQ0tFTl9Qb3MgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogRVBXTTFDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9FUFdNMUNLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfRVBXTTFDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IEVQV00xQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9CUFdNMENLRU5fUG9zICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IEJQV00wQ0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfQlBXTTBDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX0JQV00wQ0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBCUFdNMENLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfQlBXTTFDS0VOX1BvcyAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBCUFdNMUNLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX0JQV00xQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9CUFdNMUNLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogQlBXTTFDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX1FFSTBDS0VOX1BvcyAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogUUVJMENLRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9RRUkwQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfUUVJMENLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFFFSTBDS0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQVBCQ0xLMV9RRUkxQ0tFTl9Qb3MgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFFFSTFDS0VOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0FQQkNMSzFfUUVJMUNLRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19BUEJDTEsxX1FFSTFDS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBRRUkxQ0tFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfVFJOR0NLRU5fUG9zICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBUUk5HQ0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9UUk5HQ0tFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfVFJOR0NLRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IFRSTkdDS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0FQQkNMSzFfRUNBUDBDS0VOX1BvcyAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpBUEJDTEsxOiBFQ0FQMENLRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENMS19BUEJDTEsxX0VDQVAwQ0tFTl9Nc2sgICAgICAgICgweDF1bCA8PCBDTEtfQVBCQ0xLMV9FQ0FQMENLRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogRUNBUDBDS0VOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENMS19BUEJDTEsxX0VDQVAxQ0tFTl9Qb3MgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6QVBCQ0xLMTogRUNBUDFDS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDTEtfQVBCQ0xLMV9FQ0FQMUNLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgQ0xLX0FQQkNMSzFfRUNBUDFDS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkFQQkNMSzE6IEVDQVAxQ0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMF9IQ0xLU0VMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDA6IEhDTEtTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfSENMS1NFTF9Nc2sgICAgICAgICAgKDB4N3VsIDw8IENMS19DTEtTRUwwX0hDTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwwOiBIQ0xLU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwwOiBTVENMS1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NUQ0xLU0VMX01zayAgICAgICAgICgweDd1bCA8PCBDTEtfQ0xLU0VMMF9TVENMS1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMDogU1RDTEtTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwwX1VTQlNFTF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMDogVVNCU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMF9VU0JTRUxfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS1NFTDBfVVNCU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDA6IFVTQlNFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMF9TREgwU0VMX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDA6IFNESDBTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU0RIMFNFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwwX1NESDBTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwwOiBTREgwU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfV0RUU0VMX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBXRFRTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwxX1dEVFNFTF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMMV9XRFRTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogV0RUU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjBTRUxfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogVE1SMFNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIwU0VMX01zayAgICAgICAgICAoMHg3dWwgPDwgQ0xLX0NMS1NFTDFfVE1SMFNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFRNUjBTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIxU0VMX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFRNUjFTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMVNFTF9Nc2sgICAgICAgICAgKDB4N3VsIDw8IENMS19DTEtTRUwxX1RNUjFTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBUTVIxU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMlNFTF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBUTVIyU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjJTRUxfTXNrICAgICAgICAgICgweDd1bCA8PCBDTEtfQ0xLU0VMMV9UTVIyU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogVE1SMlNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjNTRUxfUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogVE1SM1NFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIzU0VMX01zayAgICAgICAgICAoMHg3dWwgPDwgQ0xLX0NMS1NFTDFfVE1SM1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFRNUjNTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9VQVJUMFNFTF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFVBUlQwU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVUFSVDBTRUxfTXNrICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwxX1VBUlQwU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBVQVJUMFNFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVUFSVDFTRUxfUG9zICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBVQVJUMVNFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwxX1VBUlQxU0VMX01zayAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMMV9VQVJUMVNFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogVUFSVDFTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX0NMS09TRUxfUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMTogQ0xLT1NFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9DTEtPU0VMX01zayAgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDFfQ0xLT1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IENMS09TRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9XV0RUU0VMX1BvcyAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDE6IFdXRFRTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfV1dEVFNFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwxX1dXRFRTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwxOiBXV0RUU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfRVBXTTBTRUxfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBFUFdNMFNFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwyX0VQV00wU0VMX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLU0VMMl9FUFdNMFNFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogRVBXTTBTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX0VQV00xU0VMX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogRVBXTTFTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9FUFdNMVNFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS1NFTDJfRVBXTTFTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IEVQV00xU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IFFTUEkwU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfTXNrICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBRU1BJMFNFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBTUEkwU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTBTRUxfTXNrICAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogU1BJMFNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTFTRUxfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogU1BJMVNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkxU0VMX01zayAgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IFNQSTFTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IFNQSTJTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBTUEkyU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfQlBXTTBTRUxfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBCUFdNMFNFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwyX0JQV00wU0VMX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLU0VMMl9CUFdNMFNFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogQlBXTTBTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX0JQV00xU0VMX1BvcyAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMjogQlBXTTFTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9CUFdNMVNFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS1NFTDJfQlBXTTFTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IEJQV00xU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDI6IFNQSTNTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwyOiBTUEkzU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MwU0VMX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBTQzBTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMFNFTF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMM19TQzBTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogU0MwU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMVNFTF9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogU0MxU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzFTRUxfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDNfU0MxU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFNDMVNFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzJTRUxfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFNDMlNFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MyU0VMX01zayAgICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwzX1NDMlNFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBTQzJTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfUlRDU0VMX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBSVENTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwzX1JUQ1NFTF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMM19SVENTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogUlRDU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX0kyUzBTRUxfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogSTJTMFNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19JMlMwU0VMX01zayAgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDNfSTJTMFNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IEkyUzBTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMM19VQVJUMlNFTF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFVBUlQyU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDJTRUxfTXNrICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwzX1VBUlQyU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBVQVJUMlNFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDNTRUxfUG9zICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBVQVJUM1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQzU0VMX01zayAgICAgICAgICgweDN1bCA8PCBDTEtfQ0xLU0VMM19VQVJUM1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogVUFSVDNTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1VBUlQ0U0VMX1BvcyAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLU0VMMzogVUFSVDRTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19VQVJUNFNFTF9Nc2sgICAgICAgICAoMHgzdWwgPDwgQ0xLX0NMS1NFTDNfVUFSVDRTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFVBUlQ0U0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMM19VQVJUNVNFTF9Qb3MgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS1NFTDM6IFVBUlQ1U0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDVTRUxfTXNrICAgICAgICAgKDB4M3VsIDw8IENMS19DTEtTRUwzX1VBUlQ1U0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtTRUwzOiBVQVJUNVNFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RJVjBfSENMS0RJVl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYwOiBIQ0xLRElWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtESVYwX0hDTEtESVZfTXNrICAgICAgICAgICgweGZ1bCA8PCBDTEtfQ0xLRElWMF9IQ0xLRElWX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMDogSENMS0RJViBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtESVYwX1VTQkRJVl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMDogVVNCRElWIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRElWMF9VU0JESVZfTXNrICAgICAgICAgICAoMHhmdWwgPDwgQ0xLX0NMS0RJVjBfVVNCRElWX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjA6IFVTQkRJViBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRElWMF9VQVJUMERJVl9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjA6IFVBUlQwRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjBfVUFSVDBESVZfTXNrICAgICAgICAgKDB4ZnVsIDw8IENMS19DTEtESVYwX1VBUlQwRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYwOiBVQVJUMERJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RJVjBfVUFSVDFESVZfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYwOiBVQVJUMURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtESVYwX1VBUlQxRElWX01zayAgICAgICAgICgweGZ1bCA8PCBDTEtfQ0xLRElWMF9VQVJUMURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMDogVUFSVDFESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtESVYwX0VBRENESVZfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMDogRUFEQ0RJViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRElWMF9FQURDRElWX01zayAgICAgICAgICAoMHhmZnVsIDw8IENMS19DTEtESVYwX0VBRENESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjA6IEVBRENESVYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRElWMF9TREgwRElWX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjA6IFNESDBESVYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjBfU0RIMERJVl9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBDTEtfQ0xLRElWMF9TREgwRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYwOiBTREgwRElWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RJVjFfU0MwRElWX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYxOiBTQzBESVYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19DTEtESVYxX1NDMERJVl9Nc2sgICAgICAgICAgICgweGZmdWwgPDwgQ0xLX0NMS0RJVjFfU0MwRElWX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMTogU0MwRElWIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtESVYxX1NDMURJVl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWMTogU0MxRElWIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRElWMV9TQzFESVZfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IENMS19DTEtESVYxX1NDMURJVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjE6IFNDMURJViBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRElWMV9TQzJESVZfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjE6IFNDMkRJViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjFfU0MyRElWX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBDTEtfQ0xLRElWMV9TQzJESVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVYxOiBTQzJESVYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RJVjRfVUFSVDJESVZfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVY0OiBVQVJUMkRJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQyRElWX01zayAgICAgICAgICgweGZ1bCA8PCBDTEtfQ0xLRElWNF9VQVJUMkRJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWNDogVUFSVDJESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQzRElWX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWNDogVUFSVDNESVYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLRElWNF9VQVJUM0RJVl9Nc2sgICAgICAgICAoMHhmdWwgPDwgQ0xLX0NMS0RJVjRfVUFSVDNESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjQ6IFVBUlQzRElWIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRElWNF9VQVJUNERJVl9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RJVjQ6IFVBUlQ0RElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjRfVUFSVDRESVZfTXNrICAgICAgICAgKDB4ZnVsIDw8IENMS19DTEtESVY0X1VBUlQ0RElWX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVY0OiBVQVJUNERJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RJVjRfVUFSVDVESVZfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtESVY0OiBVQVJUNURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQ1RElWX01zayAgICAgICAgICgweGZ1bCA8PCBDTEtfQ0xLRElWNF9VQVJUNURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRElWNDogVUFSVDVESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjBESVZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UENMS0RJVjogQVBCMERJViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX01zayAgICAgICAgICAoMHg3dWwgPDwgQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDTEtESVY6IEFQQjBESVYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIxRElWX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDTEtESVY6IEFQQjFESVYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9Nc2sgICAgICAgICAgKDB4N3VsIDw8IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQ0xLRElWOiBBUEIxRElWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF9GQkRJVl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IEZCRElWIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19QTExDVExfRkJESVZfTXNrICAgICAgICAgICAgICgweDFmZnVsIDw8IENMS19QTExDVExfRkJESVZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBGQkRJViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTExDVExfSU5ESVZfUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBJTkRJViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUExMQ1RMX0lORElWX01zayAgICAgICAgICAgICAoMHgxZnVsIDw8IENMS19QTExDVExfSU5ESVZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogSU5ESVYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUExMQ1RMX09VVERJVl9Qb3MgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogT1VURElWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF9PVVRESVZfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IENMS19QTExDVExfT1VURElWX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IE9VVERJViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF9QRF9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IFBEIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIENMS19QTExDVExfUERfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUExMQ1RMX1BEX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBQRCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTExDVExfQlBfUG9zICAgICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBCUCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBDTEtfUExMQ1RMX0JQX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BMTENUTF9CUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogQlAgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUExMQ1RMX09FX1BvcyAgICAgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogT0UgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF9PRV9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTExDVExfT0VfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IE9FIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF9QTExTUkNfUG9zICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTExDVEw6IFBMTFNSQyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QTExDVExfUExMU1JDX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUExMQ1RMX1BMTFNSQ19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBQTExTUkMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTExDVExfU1RCU0VMX1BvcyAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UExMQ1RMOiBTVEJTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUExMQ1RMX1NUQlNFTF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BMTENUTF9TVEJTRUxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBMTENUTDogU1RCU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfU1RBVFVTX0hYVFNUQl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogSFhUU1RCIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1NUQVRVU19IWFRTVEJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19TVEFUVVNfSFhUU1RCX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IEhYVFNUQiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1NUQVRVU19MWFRTVEJfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IExYVFNUQiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19TVEFUVVNfTFhUU1RCX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfU1RBVFVTX0xYVFNUQl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBMWFRTVEIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19TVEFUVVNfUExMU1RCX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBQTExTVEIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfU1RBVFVTX1BMTFNUQl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1NUQVRVU19QTExTVEJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogUExMU1RCIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfU1RBVFVTX0xJUkNTVEJfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogTElSQ1NUQiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1NUQVRVU19MSVJDU1RCX01zayAgICAgICAgICAgKDB4MXVsIDw8IENMS19TVEFUVVNfTElSQ1NUQl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IExJUkNTVEIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1NUQVRVU19ISVJDU1RCX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IEhJUkNTVEIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19TVEFUVVNfSElSQ1NUQl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDTEtfU1RBVFVTX0hJUkNTVEJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBISVJDU1RCIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19TVEFUVVNfSElSQzQ4U1RCX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBISVJDNDhTVEIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfU1RBVFVTX0hJUkM0OFNUQl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX1NUQVRVU19ISVJDNDhTVEJfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogSElSQzQ4U1RCIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfU1RBVFVTX0NMS1NGQUlMX1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogQ0xLU0ZBSUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1NUQVRVU19DTEtTRkFJTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19TVEFUVVNfQ0xLU0ZBSUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IENMS1NGQUlMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1NUQVRVU19FWFRMWFRTVEJfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpTVEFUVVM6IEVYVExYVFNUQiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENMS19TVEFUVVNfRVhUTFhUU1RCX01zayAgICAgICAgICgweDF1bCA8PCBDTEtfU1RBVFVTX0VYVExYVFNUQl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBFWFRMWFRTVEIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENMS19TVEFUVVNfTElSQzMyU1RCX1BvcyAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1RBVFVTOiBMSVJDMzJTVEIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfU1RBVFVTX0xJUkMzMlNUQl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX1NUQVRVU19MSVJDMzJTVEJfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNUQVRVUzogTElSQzMyU1RCIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLT0NUTF9GUkVRU0VMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS09DVEw6IEZSRVFTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS09DVExfRlJFUVNFTF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IENMS19DTEtPQ1RMX0ZSRVFTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtPQ1RMOiBGUkVRU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS09DVExfQ0xLT0VOX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtPQ1RMOiBDTEtPRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19DTEtPQ1RMX0NMS09FTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLT0NUTF9DTEtPRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLT0NUTDogQ0xLT0VOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtPQ1RMX0RJVjFFTl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLT0NUTDogRElWMUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLT0NUTF9ESVYxRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS09DVExfRElWMUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS09DVEw6IERJVjFFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLT0NUTF9DTEsxSFpFTl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS09DVEw6IENMSzFIWkVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS09DVExfQ0xLMUhaRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtPQ1RMX0NMSzFIWkVOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtPQ1RMOiBDTEsxSFpFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RDVExfSFhURkRFTl9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEQ1RMOiBIWFRGREVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtEQ1RMX0hYVEZERU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLRENUTF9IWFRGREVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRENUTDogSFhURkRFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtEQ1RMX0hYVEZJRU5fUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRENUTDogSFhURklFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRENUTF9IWFRGSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS0RDVExfSFhURklFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RDVEw6IEhYVEZJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRENUTF9MWFRGREVOX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RDVEw6IExYVEZERU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RDVExfTFhURkRFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtEQ1RMX0xYVEZERU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEQ1RMOiBMWFRGREVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RDVExfTFhURklFTl9Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEQ1RMOiBMWFRGSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19DTEtEQ1RMX0xYVEZJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLRENUTF9MWFRGSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRENUTDogTFhURklFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtEQ1RMX0hYVEZRREVOX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRENUTDogSFhURlFERU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDTEtfQ0xLRENUTF9IWFRGUURFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS0RDVExfSFhURlFERU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RDVEw6IEhYVEZRREVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRENUTF9IWFRGUUlFTl9Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RDVEw6IEhYVEZRSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RDVExfSFhURlFJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtEQ1RMX0hYVEZRSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEQ1RMOiBIWFRGUUlFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NMS0RTVFNfSFhURklGX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEU1RTOiBIWFRGSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19DTEtEU1RTX0hYVEZJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDTEtfQ0xLRFNUU19IWFRGSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRFNUUzogSFhURklGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DTEtEU1RTX0xYVEZJRl9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0xLRFNUUzogTFhURklGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0xLRFNUU19MWFRGSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0NMS0RTVFNfTFhURklGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RTVFM6IExYVEZJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfQ0xLRFNUU19IWFRGUUlGX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNMS0RTVFM6IEhYVEZRSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0NMS0RTVFNfSFhURlFJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19DTEtEU1RTX0hYVEZRSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDTEtEU1RTOiBIWFRGUUlGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX0NEVVBCX1VQRVJCRF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpDRFVQQjogVVBFUkJEIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19DRFVQQl9VUEVSQkRfTXNrICAgICAgICAgICAgICgweDNmZnVsIDw8IENMS19DRFVQQl9VUEVSQkRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0RVUEI6IFVQRVJCRCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19DRExPV0JfTE9XRVJCRF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6Q0RMT1dCOiBMT1dFUkJEIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfQ0RMT1dCX0xPV0VSQkRfTXNrICAgICAgICAgICAoMHgzZmZ1bCA8PCBDTEtfQ0RMT1dCX0xPV0VSQkRfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkNETE9XQjogTE9XRVJCRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VQ1RMX1BETVNFTF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVUNUTDogUERNU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9QRE1TRUxfTXNrICAgICAgICAgICAgKDB4N3VsPDwgQ0xLX1BNVUNUTF9QRE1TRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVDVEw6IFBETVNFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1RNUkVOX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVDVEw6IFdLVE1SRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENMS19QTVVDVExfV0tUTVJFTl9Nc2sgICAgICAgICAgICgweDF1bDw8IENMS19QTVVDVExfV0tUTVJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VQ1RMOiBXS1RNUkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVDVExfV0tUTVJJU19Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VQ1RMOiBXS1RNUklTIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SSVNfTXNrICAgICAgICAgICAoMHg3dWw8PCBDTEtfUE1VQ1RMX1dLVE1SSVNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVUNUTDogV0tUTVJJUyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VQ1RMX1dLUElORU5fUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVUNUTDogV0tQSU5FTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1BJTkVOX01zayAgICAgICAgICAgKDB4M3VsPDwgQ0xLX1BNVUNUTF9XS1BJTkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVDVEw6IFdLUElORU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVUNUTF9BQ01QU1BXS19Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVDVEw6IEFDTVBTUFdLIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QTVVDVExfQUNNUFNQV0tfTXNrICAgICAgICAgICgweDF1bDw8IENMS19QTVVDVExfQUNNUFNQV0tfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VQ1RMOiBBQ01QU1BXSyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVDVExfUlRDV0tFTl9Qb3MgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VQ1RMOiBSVENXS0VOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1JUQ1dLRU5fTXNrICAgICAgICAgICAoMHgxdWw8PCBDTEtfUE1VQ1RMX1JUQ1dLRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVUNUTDogUlRDV0tFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VU1RTX1BJTldLX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogUElOV0sgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVVNUU19QSU5XS19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTVVTVFNfUElOV0tfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IFBJTldLIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVVNUU19UTVJXS19Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IFRNUldLIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19QTVVTVFNfVE1SV0tfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUE1VU1RTX1RNUldLX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBUTVJXSyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVTVFNfUlRDV0tfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBSVENXSyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VU1RTX1JUQ1dLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BNVVNUU19SVENXS19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogUlRDV0sgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VU1RTX0dQQVdLX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogR1BBV0sgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVVNUU19HUEFXS19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTVVTVFNfR1BBV0tfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IEdQQVdLIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVVNUU19HUEJXS19Qb3MgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IEdQQldLIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19QTVVTVFNfR1BCV0tfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUE1VU1RTX0dQQldLX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBHUEJXSyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVTVFNfR1BDV0tfUG9zICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBHUENXSyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VU1RTX0dQQ1dLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BNVVNUU19HUENXS19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogR1BDV0sgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VU1RTX0dQRFdLX1BvcyAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogR1BEV0sgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVVNUU19HUERXS19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTVVTVFNfR1BEV0tfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IEdQRFdLIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVVNUU19MVlJXS19Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IExWUldLIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19QTVVTVFNfTFZSV0tfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUE1VU1RTX0xWUldLX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBMVlJXSyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QTVVTVFNfQk9EV0tfUG9zICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBCT0RXSyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfUE1VU1RTX0JPRFdLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BNVVNUU19CT0RXS19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogQk9EV0sgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUE1VU1RTX0FDTVBXS19Qb3MgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBNVVNUUzogQUNNUFdLIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BNVVNUU19BQ01QV0tfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QTVVTVFNfQUNNUFdLX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IEFDTVBXSyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BNVVNUU19DTFJXS19Qb3MgICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQTVVTVFM6IENMUldLIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENMS19QTVVTVFNfQ0xSV0tfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUE1VU1RTX0NMUldLX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UE1VU1RTOiBDTFJXSyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6U1dLREJDVEw6IFNXS0RCQ0xLU0VMIFBvc2l0aW9uICAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfTXNrICAgICAoMHhGdWw8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlNXS0RCQ1RMOiBTV0tEQkNMS1NFTCBNYXNrICAgICAgKi8KKworI2RlZmluZSBDTEtfUEFTV0tDVExfV0tFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBBU1dLQ1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BBU1dLQ1RMX1dLRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QQVNXS0NUTF9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQVNXS0NUTDogV0tFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BBU1dLQ1RMX1BSV0tFTl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQVNXS0NUTDogUFJXS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QQVNXS0NUTF9QUldLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfUEFTV0tDVExfUFJXS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEFTV0tDVEw6IFBSV0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQVNXS0NUTF9QRldLRU5fUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEFTV0tDVEw6IFBGV0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUEFTV0tDVExfUEZXS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BBU1dLQ1RMX1BGV0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBBU1dLQ1RMOiBQRldLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUEFTV0tDVExfV0tQU0VMX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBBU1dLQ1RMOiBXS1BTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BBU1dLQ1RMX1dLUFNFTF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IENMS19QQVNXS0NUTF9XS1BTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQVNXS0NUTDogV0tQU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BBU1dLQ1RMX0RCRU5fUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQVNXS0NUTDogREJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QQVNXS0NUTF9EQkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUEFTV0tDVExfREJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEFTV0tDVEw6IERCRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQlNXS0NUTF9XS0VOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEJTV0tDVEw6IFdLRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUEJTV0tDVExfV0tFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BCU1dLQ1RMX1dLRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBCU1dLQ1RMOiBXS0VOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUEJTV0tDVExfUFJXS0VOX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBCU1dLQ1RMOiBQUldLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BCU1dLQ1RMX1BSV0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19QQlNXS0NUTF9QUldLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQlNXS0NUTDogUFJXS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BCU1dLQ1RMX1BGV0tFTl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQlNXS0NUTDogUEZXS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QQlNXS0NUTF9QRldLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfUEJTV0tDVExfUEZXS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEJTV0tDVEw6IFBGV0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQlNXS0NUTF9XS1BTRUxfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UEJTV0tDVEw6IFdLUFNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUEJTV0tDVExfV0tQU0VMX01zayAgICAgICAgICAoMHhmdWwgPDwgQ0xLX1BCU1dLQ1RMX1dLUFNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBCU1dLQ1RMOiBXS1BTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUEJTV0tDVExfREJFTl9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBCU1dLQ1RMOiBEQkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BCU1dLQ1RMX0RCRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QQlNXS0NUTF9EQkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQlNXS0NUTDogREJFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BDU1dLQ1RMX1dLRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQ1NXS0NUTDogV0tFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QQ1NXS0NUTF9XS0VOX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUENTV0tDVExfV0tFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UENTV0tDVEw6IFdLRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQ1NXS0NUTF9QUldLRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UENTV0tDVEw6IFBSV0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUENTV0tDVExfUFJXS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BDU1dLQ1RMX1BSV0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDU1dLQ1RMOiBQUldLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUENTV0tDVExfUEZXS0VOX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDU1dLQ1RMOiBQRldLRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BDU1dLQ1RMX1BGV0tFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19QQ1NXS0NUTF9QRldLRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQ1NXS0NUTDogUEZXS0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BDU1dLQ1RMX1dLUFNFTF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQQ1NXS0NUTDogV0tQU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QQ1NXS0NUTF9XS1BTRUxfTXNrICAgICAgICAgICgweGZ1bCA8PCBDTEtfUENTV0tDVExfV0tQU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UENTV0tDVEw6IFdLUFNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QQ1NXS0NUTF9EQkVOX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UENTV0tDVEw6IERCRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDTEtfUENTV0tDVExfREJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BDU1dLQ1RMX0RCRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBDU1dLQ1RMOiBEQkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUERTV0tDVExfV0tFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBEU1dLQ1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BEU1dLQ1RMX1dLRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENMS19QRFNXS0NUTF9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQRFNXS0NUTDogV0tFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BEU1dLQ1RMX1BSV0tFTl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQRFNXS0NUTDogUFJXS0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENMS19QRFNXS0NUTF9QUldLRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDTEtfUERTV0tDVExfUFJXS0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UERTV0tDVEw6IFBSV0tFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19QRFNXS0NUTF9QRldLRU5fUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UERTV0tDVEw6IFBGV0tFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDTEtfUERTV0tDVExfUEZXS0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ0xLX1BEU1dLQ1RMX1BGV0tFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBEU1dLQ1RMOiBQRldLRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfUERTV0tDVExfV0tQU0VMX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OlBEU1dLQ1RMOiBXS1BTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BEU1dLQ1RMX1dLUFNFTF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IENMS19QRFNXS0NUTF9XS1BTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQRFNXS0NUTDogV0tQU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ0xLX1BEU1dLQ1RMX0RCRU5fUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpQRFNXS0NUTDogREJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENMS19QRFNXS0NUTF9EQkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBDTEtfUERTV0tDVExfREJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6UERTV0tDVEw6IERCRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENMS19JT1BEQ1RMX0lPSFJfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtfVDo6SU9QRENUTDogSU9IUiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDTEtfSU9QRENUTF9JT0hSX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ0xLX0lPUERDVExfSU9IUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OklPUERDVEw6IElPSFIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDTEtfSFhURlNFTF9IWFRGU0VMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLX1Q6OkhYVEZTRUw6IEhYVEZTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ0xLX0hYVEZTRUxfSFhURlNFTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENMS19IWFRGU0VMX0hYVEZTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENMS19UOjpIWFRGU0VMOiBIWFRGU0VMIE1hc2sgICAgICAgICAgICovCisKKworLyoqQH0qLyAvKiBDTEtfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIENMSyByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworI2VuZGlmIC8qIF9fQ0xLX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9jcmNfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY3JjX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZWJiZDYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY3JjX3JlZy5oCkBAIC0wLDAgKzEsMTUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY3JjX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBDUkMgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQ1JDX1JFR19IX18KKyNkZWZpbmUgX19DUkNfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEN5Y2xpYyBSZWR1bmRhbmN5IENoZWNrIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBDUkMgQ3ljbGljIFJlZHVuZGFuY3kgQ2hlY2sgQ29udHJvbGxlcihDUkMpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIENSQyBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIENSQ19UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIENSQyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1JDRU4gICAgIHxDUkMgQ2hhbm5lbCBHZW5lcmF0b3IgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCAxIHRvIGVuYWJsZSBDUkMgZ2VuZXJhdG9yIGZvciBDUkMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENSQyBvcGVyYXRpb24gZ2VuZXJhdG9yIGlzIGFjdGl2ZS4KKyAgICAgKiB8WzFdICAgICB8Q0hLU0lOSVQgIHxDaGVja3N1bSBJbml0aWFsaXphdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCB3aWxsIGF1dG8gcmVsb2FkIFNFRUQgKENSQ19TRUVEIFszMTowXSkgdG8gQ0hFQ0tTVU0gKENSQ19DSEVDS1NVTVszMTowXSkgYXMgQ1JDIG9wZXJhdGlvbiBpbml0aWFsIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlbG9hZCBTRUVEIHZhbHVlIHRvIENIRUNLU1VNIHJlZ2lzdGVyIGFzIENSQyBvcGVyYXRpb24gaW5pdGlhbCBjaGVja3N1bSB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgb3RoZXJzIGNvbnRlbnRzIG9mIENSQ19DVEwgcmVnaXN0ZXIgd2lsbCBub3QgYmUgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogU2V0dGluZyB0aGlzIGJpdCB3aWxsIHJlbG9hZCB0aGUgc2VlZCB2YWx1ZSBmcm9tIENSQ19TRUVEIHJlZ2lzdGVyIGFzIGNoZWNrc3VtIGluaXRpYWwgdmFsdWUuCisgICAgICogfFsyNF0gICAgfERBVFJFViAgICB8V3JpdGUgRGF0YSBCaXQgT3JkZXIgUmV2ZXJzZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGJpdCBvcmRlciByZXZlcnNlIGZ1bmN0aW9uIHBlciBieXRlIGZvciB3cml0ZSBkYXRhIHZhbHVlIERBVEEgKENSQ19EQVRBWzMxOjBdKSBpbiBDUkNfREFUIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCaXQgb3JkZXIgcmV2ZXJzZWQgZm9yIENSQ19EQVRBIHdyaXRlIGRhdGEgaW4gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJpdCBvcmRlciByZXZlcnNlZCBmb3IgQ1JDX0RBVEEgd3JpdGUgZGF0YSBpbiBFbmFibGVkIChwZXIgYnl0ZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdGhlIHdyaXRlIGRhdGEgaXMgMHhBQUJCQ0NERCwgdGhlIGJpdCBvcmRlciByZXZlcnNlIGZvciBDUkMgd3JpdGUgZGF0YSBpbiBpcyAweDU1REQzM0JCLgorICAgICAqIHxbMjVdICAgIHxDSEtTUkVWICAgfENoZWNrc3VtIEJpdCBPcmRlciBSZXZlcnNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgYml0IG9yZGVyIHJldmVyc2UgZnVuY3Rpb24gZm9yIGNoZWNrc3VtIHJlc3VsdCBDSEVDS1NVTSAoQ1JDX0NIRUNLU1VNWzMxOjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQml0IG9yZGVyIHJldmVyc2UgZm9yIENSQyBDSEVDS1NVTUNSQyBjaGVja3N1bSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQml0IG9yZGVyIHJldmVyc2UgZm9yIENSQyBDSEVDS1NVTUNSQyBjaGVja3N1bSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHRoZSBjaGVja3N1bSByZXN1bHQgaXMgMHhERDdCMEYyRSwgdGhlIGJpdCBvcmRlciByZXZlcnNlIHJlc3VsdCBmb3IgQ1JDIGNoZWNrc3VtIGlzIDB4NzRGMERFQkIuCisgICAgICogfFsyNl0gICAgfERBVEZNVCAgICB8V3JpdGUgRGF0YSAxJ3MgQ29tcGxlbWVudCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIDEncyBjb21wbGVtZW50IGZ1bmN0aW9uIGZvciB3cml0ZSBkYXRhIHZhbHVlIERBVEEgKENSQ19EQVRBWzMxOjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMSdzIGNvbXBsZW1lbnQgZm9yIENSQ19EQVRBIHdyaXRlcyBkYXRhIGluIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAxJ3MgY29tcGxlbWVudCBmb3IgQ1JDX0RBVEEgd3JpdGVzIGRhdGEgaW4gRW5hYmxlZC4KKyAgICAgKiB8WzI3XSAgICB8Q0hLU0ZNVCAgIHxDaGVja3N1bSAxJ3MgQ29tcGxlbWVudCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIDEncyBjb21wbGVtZW50IGZ1bmN0aW9uIGZvciBjaGVja3N1bSByZXN1bHQgaW4gQ0hFQ0tTVU0gKENSQ19DSEVDS1NVTVszMTowXSkgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IDEncyBjb21wbGVtZW50IGZvciBDUkMgQ0hFQ0tTVU0gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDEncyBjb21wbGVtZW50IGZvciBDUkMgQ0hFQ0tTVU1DUkMgRW5hYmxlZC4KKyAgICAgKiB8WzI5OjI4XSB8REFUTEVOICAgIHxDUFUgV3JpdGUgRGF0YSBMZW5ndGgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgdmFsaWQgd3JpdGUgZGF0YSBsZW5ndGggb2YgREFUQSAoQ1JDX0RBVFszMTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEYXRhIGxlbmd0aCBpcyA4LWJpdCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRGF0YSBsZW5ndGggaXMgMTYtYml0IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MXggPSBEYXRhIGxlbmd0aCBpcyAzMi1iaXQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRoZSB3cml0ZSBkYXRhIGxlbmd0aCBpcyA4LWJpdCBtb2RlLCB0aGUgdmFsaWQgZGF0YSBpbiBDUkNfREFUIHJlZ2lzdGVyIGlzIG9ubHkgREFUQVs3OjBdIGJpdHM7IGlmIHRoZSB3cml0ZSBkYXRhIGxlbmd0aCBpcyAxNi1iaXQgbW9kZSwgdGhlIHZhbGlkIGRhdGEgaW4gQ1JDX0RBVCByZWdpc3RlciBpcyBvbmx5IERBVEFbMTU6MF0KKyAgICAgKiB8WzMxOjMwXSB8Q1JDTU9ERSAgIHxDUkMgUG9seW5vbWlhbCBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIENSQyBvcGVyYXRpb24gcG9seW5vbWlhbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ1JDLUNDSVRUIFBvbHlub21pYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENSQy04IFBvbHlub21pYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENSQy0xNiBQb2x5bm9taWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDUkMtMzIgUG9seW5vbWlhbCBtb2RlLgorICAgICAqIEB2YXIgQ1JDX1Q6OkRBVAorICAgICAqIE9mZnNldDogMHgwNCAgQ1JDIFdyaXRlIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQVRBICAgICAgfENSQyBXcml0ZSBEYXRhIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiB3cml0ZSBkYXRhIGRpcmVjdGx5IGJ5IENQVSBtb2RlIG9yIHVzZSBQRE1BIGZ1bmN0aW9uIHRvIHdyaXRlIGRhdGEgdG8gdGhpcyBmaWVsZCB0byBwZXJmb3JtIENSQyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiB0aGUgd3JpdGUgZGF0YSBsZW5ndGggaXMgOC1iaXQgbW9kZSwgdGhlIHZhbGlkIGRhdGEgaW4gQ1JDX0RBVCByZWdpc3RlciBpcyBvbmx5IERBVEFbNzowXSBiaXRzOyBpZiB0aGUgd3JpdGUgZGF0YSBsZW5ndGggaXMgMTYtYml0IG1vZGUsIHRoZSB2YWxpZCBkYXRhIGluIENSQ19EQVQgcmVnaXN0ZXIgaXMgb25seSBEQVRBWzE1OjBdLgorICAgICAqIEB2YXIgQ1JDX1Q6OlNFRUQKKyAgICAgKiBPZmZzZXQ6IDB4MDggIENSQyBTZWVkIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8U0VFRCAgICAgIHxDUkMgU2VlZCBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBDUkMgc2VlZCB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBmaWVsZCBTRUVEIHZhbHVlIHdpbGwgYmUgcmVsb2FkZWQgdG8gYXMgY2hlY2tzdW0gaW5pdGlhbCB2YWx1ZSBDSEVDS1NVTSAoQ1JDX0NIRUNLU1VNWzMxOjBdKSByZWdpc3RlcikgYWZ0ZXIgcGVyZm9ybSBDUkMgZW5naW5lIHJlc2V0LCBDSEtTSU5JVCAoQ1JDX0NUTFsxXSkgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlIHZhbGlkIGJpdHMgb2YgQ1JDX1NFRURbMzE6MF0gaXMgY29ycmVsYXRlZCB0byBDUkNNT0RFIChDUkNfQ1RMWzMxOjMwXSkuCisgICAgICogQHZhciBDUkNfVDo6Q0hFQ0tTVU0KKyAgICAgKiBPZmZzZXQ6IDB4MEMgIENSQyBDaGVja3N1bSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENIRUNLU1VNICB8Q1JDIENoZWNrc3VtIFJlc3VsdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgQ1JDIGNoZWNrc3VtIHJlc3VsdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgdmFsaWQgYml0cyBvZiBDUkNfQ0hFQ0tTVU1bMzE6MF0gaXMgY29ycmVsYXRlZCB0byBDUkNNT0RFIChDUkNfQ1RMWzMxOjMwXSkuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gQ1JDIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgREFUOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIENSQyBXcml0ZSBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNFRUQ7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBDUkMgU2VlZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBDSEVDS1NVTTsgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gQ1JDIENoZWNrc3VtIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IENSQ19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBDUkNfQ09OU1QgQ1JDIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIENSQyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIENSQ19DVExfQ1JDRU5fUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBDUkNFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBDUkNfQ1RMX0NSQ0VOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgQ1JDX0NUTF9DUkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogQ1JDRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUkNfQ1RMX0NIS1NJTklUX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogQ0hLU0lOSVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ1JDX0NUTF9DSEtTSU5JVF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENSQ19DVExfQ0hLU0lOSVRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IENIS1NJTklUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JDX0NUTF9EQVRSRVZfUG9zICAgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IERBVFJFViBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIENSQ19DVExfREFUUkVWX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBDUkNfQ1RMX0RBVFJFVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBEQVRSRVYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSQ19DVExfQ0hLU1JFVl9Qb3MgICAgICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBDSEtTUkVWIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBDUkNfQ1RMX0NIS1NSRVZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgQ1JDX0NUTF9DSEtTUkVWX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogQ0hLU1JFViBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUkNfQ1RMX0RBVEZNVF9Qb3MgICAgICAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogREFURk1UIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JDX0NUTF9EQVRGTVRfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IENSQ19DVExfREFURk1UX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IERBVEZNVCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JDX0NUTF9DSEtTRk1UX1BvcyAgICAgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IENIS1NGTVQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIENSQ19DVExfQ0hLU0ZNVF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBDUkNfQ1RMX0NIS1NGTVRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBDSEtTRk1UIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSQ19DVExfREFUTEVOX1BvcyAgICAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6Q1RMOiBEQVRMRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBDUkNfQ1RMX0RBVExFTl9Nc2sgICAgICAgICAgICAgICAoMHgzdWwgPDwgQ1JDX0NUTF9EQVRMRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogREFUTEVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUkNfQ1RMX0NSQ01PREVfUG9zICAgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNUTDogQ1JDTU9ERSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JDX0NUTF9DUkNNT0RFX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IENSQ19DVExfQ1JDTU9ERV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpDVEw6IENSQ01PREUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JDX0RBVF9EQVRBX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSQ19UOjpEQVQ6IERBVEEgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIENSQ19EQVRfREFUQV9Nc2sgICAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JDX0RBVF9EQVRBX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6REFUOiBEQVRBIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSQ19TRUVEX1NFRURfUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkNfVDo6U0VFRDogU0VFRCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBDUkNfU0VFRF9TRUVEX01zayAgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSQ19TRUVEX1NFRURfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OlNFRUQ6IFNFRUQgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUkNfQ0hFQ0tTVU1fQ0hFQ0tTVU1fUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDX1Q6OkNIRUNLU1VNOiBDSEVDS1NVTSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JDX0NIRUNLU1VNX0NIRUNLU1VNX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUkNfQ0hFQ0tTVU1fQ0hFQ0tTVU1fUG9zKSAgICAgICAvKiE8IENSQ19UOjpDSEVDS1NVTTogQ0hFQ0tTVU0gTWFzayAgICAgICAgICovCisKKy8qKkB9Ki8gLyogQ1JDX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBDUkMgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX0NMS19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY3JwdF9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9jcnB0X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjY0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvY3JwdF9yZWcuaApAQCAtMCwwICsxLDIxODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjcnB0X3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBDUlBUIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0NSUFRfUkVHX0hfXworI2RlZmluZSBfX0NSUFRfUkVHX0hfXworCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ3J5cHRvZ3JhcGhpYyBBY2NlbGVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIENSUFQgQ3J5cHRvZ3JhcGhpYyBBY2NlbGVyYXRvcihDUlBUKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBDUlBUIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgQ1JQVF9UOjpJTlRFTgorICAgICAqIE9mZnNldDogMHgwMCAgQ3J5cHRvIEludGVycnVwdCBFbmFibGUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFFU0lFTiAgICB8QUVTIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBRVMgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRVMgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGFtb3VudCBvZiBkYXRhIHNldCBpbiBBRVNfRE1BX0NOVCBpcyBmZWQgaW50byB0aGUgQUVTIGVuZ2luZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIG1vZGUsIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBBRVMgZW5naW5lIGZpbmlzaGVzIHRoZSBvcGVyYXRpb24uCisgICAgICogfFsxXSAgICAgfEFFU0VJRU4gICB8QUVTIEVycm9yIEZsYWcgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQUVTIGVycm9yIGludGVycnVwdCBmbGFnIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRVMgZXJyb3IgaW50ZXJydXB0IGZsYWcgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8VERFU0lFTiAgIHxUREVTL0RFUyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVERFUy9ERVMgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUREVTL0RFUyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYW1vdW50IG9mIGRhdGEgc2V0IGluIFRERVNfRE1BX0NOVCBpcyBmZWQgaW50byB0aGUgVERFUyBlbmdpbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBtb2RlLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgVERFUyBlbmdpbmUgZmluaXNoZXMgdGhlIG9wZXJhdGlvbi4KKyAgICAgKiB8WzldICAgICB8VERFU0VJRU4gIHxUREVTL0RFUyBFcnJvciBGbGFnIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRERVMvREVTIGVycm9yIGludGVycnVwdCBmbGFnIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUREVTL0RFUyBlcnJvciBpbnRlcnJ1cHQgZmxhZyBFbmFibGVkLgorICAgICAqIHxbMTZdICAgIHxQUk5HSUVOICAgfFBSTkcgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBSTkcgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQUk5HIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjJdICAgIHxFQ0NJRU4gICAgfEVDQyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUNDIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUNDIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBhbW91bnQgb2YgZGF0YSBzZXQgaW4gRUNDX0RNQV9DTlQgaXMgZmVkIGludG8gdGhlIEVDQyBlbmdpbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBtb2RlLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgRUNDIGVuZ2luZSBmaW5pc2hlcyB0aGUgb3BlcmF0aW9uLgorICAgICAqIHxbMjNdICAgIHxFQ0NFSUVOICAgfEVDQyBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUNDIGVycm9yIGludGVycnVwdCBmbGFnIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0MgZXJyb3IgaW50ZXJydXB0IGZsYWcgRW5hYmxlZC4KKyAgICAgKiB8WzI0XSAgICB8SE1BQ0lFTiAgIHxTSEEvSE1BQyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0hBL0hNQUMgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTSEEvSE1BQyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYW1vdW50IG9mIGRhdGEgc2V0IGluIFNIQSBfRE1BX0NOVCBpcyBmZWQgaW50byB0aGUgU0hBL0hNQUMgZW5naW5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBtb2RlLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgU0hBL0hNQUMgZW5naW5lIGZpbmlzaGVzIHRoZSBvcGVyYXRpb24uCisgICAgICogfFsyNV0gICAgfEhNQUNFSUVOICB8U0hBL0hNQUMgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNIQS9ITUFDIGVycm9yIGludGVycnVwdCBmbGFnIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTSEEvSE1BQyBlcnJvciBpbnRlcnJ1cHQgZmxhZyBFbmFibGVkLgorICAgICAqIEB2YXIgQ1JQVF9UOjpJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIENyeXB0byBJbnRlcnJ1cHQgRmxhZworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFFU0lGICAgICB8QUVTIEZpbmlzaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxLCBhbmQgaXQgaGFzIG5vIGVmZmVjdCBieSB3cml0aW5nIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEFFUyBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gZG9uZSBpbnRlcnJ1cHQuCisgICAgICogfFsxXSAgICAgfEFFU0VJRiAgICB8QUVTIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSwgYW5kIGl0IGhhcyBubyBlZmZlY3QgYnkgd3JpdGluZyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBBRVMgZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gZG9uZSBpbnRlcnJ1cHQuCisgICAgICogfFs4XSAgICAgfFRERVNJRiAgICB8VERFUy9ERVMgRmluaXNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEsIGFuZCBpdCBoYXMgbm8gZWZmZWN0IGJ5IHdyaXRpbmcgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVERFUy9ERVMgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUREVTL0RFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gZG9uZSBpbnRlcnJ1cHQuCisgICAgICogfFs5XSAgICAgfFRERVNFSUYgICB8VERFUy9ERVMgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluY2x1ZGVzIHRoZSBvcGVyYXRpbmcgYW5kIHNldHRpbmcgZXJyb3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGV0YWlsZWQgZmxhZyBpcyBzaG93biBpbiB0aGUgVERFUyBfRkxBRyByZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgaW5jbHVkZXMgb3BlcmF0aW5nIGFuZCBzZXR0aW5nIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxLCBhbmQgaXQgaGFzIG5vIGVmZmVjdCBieSB3cml0aW5nIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFRERVMvREVTIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUREVTL0RFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gZXJyb3IgaW50ZXJydXB0LgorICAgICAqIHxbMTZdICAgIHxQUk5HSUYgICAgfFBSTkcgRmluaXNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEsIGFuZCBpdCBoYXMgbm8gZWZmZWN0IGJ5IHdyaXRpbmcgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUFJORyBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBSTkcga2V5IGdlbmVyYXRpb24gZG9uZSBpbnRlcnJ1cHQuCisgICAgICogfFsyMl0gICAgfEVDQ0lGICAgICB8RUNDIEZpbmlzaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxLCBhbmQgaXQgaGFzIG5vIGVmZmVjdCBieSB3cml0aW5nIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEVDQyBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVDQyBvcGVyYXRpb24gZG9uZSBpbnRlcnJ1cHQuCisgICAgICogfFsyM10gICAgfEVDQ0VJRiAgICB8RUNDIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGluY2x1ZGVzIG9wZXJhdGluZyBhbmQgc2V0dGluZyBlcnJvci4gVGhlIGRldGFpbCBmbGFnIGlzIHNob3duIGluIEVDQyBfRkxBRyByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSwgYW5kIGl0IGhhcyBubyBlZmZlY3QgYnkgd3JpdGluZyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBFQ0MgZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVDQyBlcnJvciBpbnRlcnJ1cHQuCisgICAgICogfFsyNF0gICAgfEhNQUNJRiAgICB8U0hBL0hNQUMgRmluaXNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEsIGFuZCBpdCBoYXMgbm8gZWZmZWN0IGJ5IHdyaXRpbmcgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gU0hBL0hNQUMgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTSEEvSE1BQyBvcGVyYXRpb24gZG9uZSBpbnRlcnJ1cHQuCisgICAgICogfFsyNV0gICAgfEhNQUNFSUYgICB8U0hBL0hNQUMgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgaW5jbHVkZXMgb3BlcmF0aW5nIGFuZCBzZXR0aW5nIGVycm9yLiBUaGUgZGV0YWlsIGZsYWcgaXMgc2hvd24gaW4gU0hBIF9GTEFHIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxLCBhbmQgaXQgaGFzIG5vIGVmZmVjdCBieSB3cml0aW5nIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNIQS9ITUFDIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTSEEvSE1BQyBlcnJvciBpbnRlcnJ1cHQuCisgICAgICogQHZhciBDUlBUX1Q6OlBSTkdfQ1RMCisgICAgICogT2Zmc2V0OiAweDA4ICBQUk5HIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTVEFSVCAgICAgfFN0YXJ0IFBSTkcgRW5naW5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0b3AgUFJORyBlbmdpbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdlbmVyYXRlIG5ldyBrZXkgYW5kIHN0b3JlIHRoZSBuZXcga2V5IHRvIHJlZ2lzdGVyIENSUFRfUFJOR19LRVl4ICwgd2hpY2ggd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIG5ldyBrZXkgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbMV0gICAgIHxTRUVEUkxEICAgfFJlbG9hZCBOZXcgU2VlZCBmb3IgUFJORyBFbmdpbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR2VuZXJhdGluZyBrZXkgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2VlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVsb2FkIG5ldyBzZWVkLgorICAgICAqIHxbMzoyXSAgIHxLRVlTWiAgICAgfFBSTkcgR2VuZXJhdGUgS2V5IFNpemUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IDY0IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSAxMjggYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IDE5MiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gMjU2IGJpdHMuCisgICAgICogfFs4XSAgICAgfEJVU1kgICAgICB8UFJORyBCdXN5IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBSTkcgZW5naW5lIGlzIGlkbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlIHRoYXQgdGhlIFBSTkcgZW5naW5lIGlzIGdlbmVyYXRpbmcgQ1JQVF9QUk5HX0tFWXguCisgICAgICogQHZhciBDUlBUX1Q6OlBSTkdfU0VFRAorICAgICAqIE9mZnNldDogMHgwQyAgU2VlZCBmb3IgUFJORworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNFRUQgICAgICB8U2VlZCBmb3IgUFJORyAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0cyBzdG9yZSB0aGUgc2VlZCBmb3IgUFJORyBlbmdpbmUuCisgICAgICogQHZhciBDUlBUX1Q6OlBSTkdfS0VZWzhdCisgICAgICogT2Zmc2V0OiAweDEwICBQUk5HIEdlbmVyYXRlZCBLZXkwfktleTcKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFN0b3JlIFBSTkcgR2VuZXJhdGVkIEtleSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXRzIHN0b3JlIHRoZSBrZXkgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgUFJORy4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTX0ZEQkNLWzRdCisgICAgICogT2Zmc2V0OiAweDUwICBBRVMgRW5naW5lIE91dHB1dCBGZWVkYmFjayBEYXRhIGFmdGVyIENyeXB0b2dyYXBoaWMgT3BlcmF0aW9uCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8RkRCQ0sgICAgIHxBRVMgRmVlZGJhY2sgSW5mb3JtYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZmVlZGJhY2sgdmFsdWUgaXMgMTI4IGJpdHMgaW4gc2l6ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQUVTIGVuZ2luZSB1c2VzIHRoZSBkYXRhIGZyb20gQ1JQVF9BRVNfRkRCQ0t4IGFzIHRoZSBkYXRhIGlucHV0dGVkIHRvIENSUFRfQUVTbl9JVnggZm9yIHRoZSBuZXh0IGJsb2NrIGluIERNQSBjYXNjYWRlIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFFUyBlbmdpbmUgb3V0cHV0cyBmZWVkYmFjayBpbmZvcm1hdGlvbiBmb3IgSVYgaW4gdGhlIG5leHQgYmxvY2sncyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gdXNlIHRoaXMgZmVlZGJhY2sgaW5mb3JtYXRpb24gdG8gaW1wbGVtZW50IG1vcmUgdGhhbiBmb3VyIERNQSBjaGFubmVscworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiBzdG9yZSB0aGF0IGZlZWRiYWNrIHZhbHVlIHRlbXBvcmFyaWx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgc3dpdGNoaW5nIGJhY2ssIGZpbGwgdGhlIHN0b3JlZCBmZWVkYmFjayB2YWx1ZSB0byB0aGlzIHJlZ2lzdGVyIGluIHRoZSBzYW1lIGNoYW5uZWwgb3BlcmF0aW9uLCBhbmQgdGhlbiBjb250aW51ZSB0aGUgb3BlcmF0aW9uIHdpdGggdGhlIG9yaWdpbmFsIHNldHRpbmcuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVNfRkRCQ0tICisgICAgICogT2Zmc2V0OiAweDYwICBUREVTL0RFUyBFbmdpbmUgT3V0cHV0IEZlZWRiYWNrIEhpZ2ggV29yZCBEYXRhIGFmdGVyIENyeXB0b2dyYXBoaWMgT3BlcmF0aW9uCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8RkRCQ0sgICAgIHxUREVTL0RFUyBGZWVkYmFjaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmZWVkYmFjayB2YWx1ZSBpcyA2NCBiaXRzIGluIHNpemUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRERVMvREVTIGVuZ2luZSB1c2VzIHRoZSBkYXRhIGZyb20ge0NSUFRfVERFU19GREJDS0gsIENSUFRfVERFU19GREJDS0x9IGFzIHRoZSBkYXRhIGlucHV0dGVkIHRvIHtDUlBUX1RERVNuX0lWSCwgQ1JQVF9UREVTbl9JVkx9IGZvciB0aGUgbmV4dCBibG9jayBpbiBETUEgY2FzY2FkZSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZlZWRiYWNrIHJlZ2lzdGVyIGlzIGZvciBDQkMsIENGQiwgYW5kIE9GQiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRERVMvREVTIGVuZ2luZSBvdXRwdXRzIGZlZWRiYWNrIGluZm9ybWF0aW9uIGZvciBJViBpbiB0aGUgbmV4dCBibG9jaydzIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiB1c2UgdGhpcyBmZWVkYmFjayBpbmZvcm1hdGlvbiB0byBpbXBsZW1lbnQgbW9yZSB0aGFuIGZvdXIgRE1BIGNoYW5uZWxzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIHN0b3JlIHRoYXQgZmVlZGJhY2sgdmFsdWUgdGVtcG9yYXJpbHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBZnRlciBzd2l0Y2hpbmcgYmFjaywgZmlsbCB0aGUgc3RvcmVkIGZlZWRiYWNrIHZhbHVlIHRvIHRoaXMgcmVnaXN0ZXIgaW4gdGhlIHNhbWUgY2hhbm5lbCBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVuIGNhbiBjb250aW51ZSB0aGUgb3BlcmF0aW9uIHdpdGggdGhlIG9yaWdpbmFsIHNldHRpbmcuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVNfRkRCQ0tMCisgICAgICogT2Zmc2V0OiAweDY0ICBUREVTL0RFUyBFbmdpbmUgT3V0cHV0IEZlZWRiYWNrIExvdyBXb3JkIERhdGEgYWZ0ZXIgQ3J5cHRvZ3JhcGhpYyBPcGVyYXRpb24KKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxGREJDSyAgICAgfFRERVMvREVTIEZlZWRiYWNrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZlZWRiYWNrIHZhbHVlIGlzIDY0IGJpdHMgaW4gc2l6ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVERFUy9ERVMgZW5naW5lIHVzZXMgdGhlIGRhdGEgZnJvbSB7Q1JQVF9UREVTX0ZEQkNLSCwgQ1JQVF9UREVTX0ZEQkNLTH0gYXMgdGhlIGRhdGEgaW5wdXR0ZWQgdG8ge0NSUFRfVERFU25fSVZILCBDUlBUX1RERVNuX0lWTH0gZm9yIHRoZSBuZXh0IGJsb2NrIGluIERNQSBjYXNjYWRlIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZmVlZGJhY2sgcmVnaXN0ZXIgaXMgZm9yIENCQywgQ0ZCLCBhbmQgT0ZCIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VERFUy9ERVMgZW5naW5lIG91dHB1dHMgZmVlZGJhY2sgaW5mb3JtYXRpb24gZm9yIElWIGluIHRoZSBuZXh0IGJsb2NrJ3Mgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIHVzZSB0aGlzIGZlZWRiYWNrIGluZm9ybWF0aW9uIHRvIGltcGxlbWVudCBtb3JlIHRoYW4gZm91ciBETUEgY2hhbm5lbHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gc3RvcmUgdGhhdCBmZWVkYmFjayB2YWx1ZSB0ZW1wb3JhcmlseQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIHN3aXRjaGluZyBiYWNrLCBmaWxsIHRoZSBzdG9yZWQgZmVlZGJhY2sgdmFsdWUgdG8gdGhpcyByZWdpc3RlciBpbiB0aGUgc2FtZSBjaGFubmVsIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZW4gY2FuIGNvbnRpbnVlIHRoZSBvcGVyYXRpb24gd2l0aCB0aGUgb3JpZ2luYWwgc2V0dGluZy4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTX0NUTAorICAgICAqIE9mZnNldDogMHgxMDAgIEFFUyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1RBUlQgICAgIHxBRVMgRW5naW5lIFN0YXJ0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RhcnQgQUVTIGVuZ2luZS4gQlVTWSBmbGFnIHdpbGwgYmUgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGFsd2F5cyAwIHdoZW4gaXQncyByZWFkIGJhY2suCisgICAgICogfFsxXSAgICAgfFNUT1AgICAgICB8QUVTIEVuZ2luZSBTdG9wCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RvcCBBRVMgZW5naW5lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGFsd2F5cyAwIHdoZW4gaXQncyByZWFkIGJhY2suCisgICAgICogfFszOjJdICAgfEtFWVNaICAgICB8QUVTIEtleSBTaXplCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aHJlZSBkaWZmZXJlbnQga2V5IHNpemUgZm9yIEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MidiMDAgPSAxMjggYml0cyBrZXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MidiMDEgPSAxOTIgYml0cyBrZXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MidiMTAgPSAyNTYgYml0cyBrZXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MidiMTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBCVVNZIGlzIDEsIHVwZGF0aW5nIHRoaXMgcmVnaXN0ZXIgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8WzVdICAgICB8RE1BTEFTVCAgIHxBRVMgTGFzdCBCbG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCB0aGlzIGJpdCBtdXN0IGJlIHNldCBhcyBiZWdpbm5pbmcgdGhlIGxhc3QgRE1BIGNhc2NhZGUgcm91bmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBtb2RlLCB0aGlzIGJpdCBtdXN0IGJlIHNldCB3aGVuIGZlZWRpbmcgaW4gdGhlIGxhc3QgYmxvY2sgb2YgZGF0YSBpbiBFQ0IsIENCQywgQ1RSLCBPRkIsIGFuZCBDRkIgbW9kZSwgYW5kIGZlZWRpbmcgaW4gdGhlIChsYXN0LTEpIGJsb2NrIG9mIGRhdGEgYXQgQ0JDLUNTMSwgQ0JDLUNTMiwgYW5kIENCQy1DUzMgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBhbHdheXMgMCB3aGVuIGl0J3MgcmVhZCBiYWNrLiBNdXN0IGJlIHdyaXR0ZW4gYWdhaW4gb25jZSBTVEFSVCBpcyB0cmlnZ2VyZWQuCisgICAgICogfFs2XSAgICAgfERNQUNTQ0FEICB8QUVTIEVuZ2luZSBETUEgd2l0aCBDYXNjYWRlIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRE1BIGNhc2NhZGUgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluIERNQSBjYXNjYWRlIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgRE1BIHNvdXJjZSBhZGRyZXNzIHJlZ2lzdGVyLCBkZXN0aW5hdGlvbiBhZGRyZXNzIHJlZ2lzdGVyLCBhbmQgYnl0ZSBjb3VudCByZWdpc3RlciBkdXJpbmcgYSBjYXNjYWRlIG9wZXJhdGlvbiwgd2l0aG91dCBmaW5pc2hpbmcgdGhlIGFjY2VsZXJhdG9yIG9wZXJhdGlvbi4KKyAgICAgKiB8WzddICAgICB8RE1BRU4gICAgIHxBRVMgRW5naW5lIERNQSBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBRVMgRE1BIGVuZ2luZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQUVTIGVuZ2luZSBvcGVyYXRlcyBpbiBOb24tRE1BIG1vZGUsIGFuZCBnZXRzIGRhdGEgZnJvbSB0aGUgcG9ydCBDUlBUX0FFU19EQVRJTi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUVTX0RNQSBlbmdpbmUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQUVTIGVuZ2luZSBvcGVyYXRlcyBpbiBETUEgbW9kZSwgYW5kIGRhdGEgbW92ZW1lbnQgZnJvbS90byB0aGUgZW5naW5lIGlzIGRvbmUgYnkgRE1BIGxvZ2ljLgorICAgICAqIHxbMTU6OF0gIHxPUE1PREUgICAgfEFFUyBFbmdpbmUgT3BlcmF0aW9uIE1vZGVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwMCA9IEVDQiAoRWxlY3Ryb25pYyBDb2RlYm9vayBNb2RlKSAgMHgwMSA9IENCQyAoQ2lwaGVyIEJsb2NrIENoYWluaW5nIE1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDIgPSBDRkIgKENpcGhlciBGZWVkYmFjayBNb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAzID0gT0ZCIChPdXRwdXQgRmVlZGJhY2sgTW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwNCA9IENUUiAoQ291bnRlciBNb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDEwID0gQ0JDLUNTMSAoQ0JDIENpcGhlcnRleHQtU3RlYWxpbmcgMSBNb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDExID0gQ0JDLUNTMiAoQ0JDIENpcGhlcnRleHQtU3RlYWxpbmcgMiBNb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDEyID0gQ0JDLUNTMyAoQ0JDIENpcGhlcnRleHQtU3RlYWxpbmcgMyBNb2RlKS4KKyAgICAgKiB8WzE2XSAgICB8RU5DUlBUICAgIHxBRVMgRW5jcnlwdGlvbi9EZWNyeXB0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFFUyBlbmdpbmUgZXhlY3V0ZXMgZGVjcnlwdGlvbiBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFFUyBlbmdpbmUgZXhlY3V0ZXMgZW5jcnlwdGlvbiBvcGVyYXRpb24uCisgICAgICogfFsyMl0gICAgfE9VVFNXQVAgICB8QUVTIEVuZ2luZSBPdXRwdXQgRGF0YSBTd2FwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEtlZXAgdGhlIG9yaWdpbmFsIG9yZGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgb3JkZXIgdGhhdCBDUFUgb3V0cHV0cyBkYXRhIGZyb20gdGhlIGFjY2VsZXJhdG9yIHdpbGwgYmUgY2hhbmdlZCBmcm9tIHtieXRlMywgYnl0ZTIsIGJ5dGUxLCBieXRlMH0gdG8ge2J5dGUwLCBieXRlMSwgYnl0ZTIsIGJ5dGUzfS4KKyAgICAgKiB8WzIzXSAgICB8SU5TV0FQICAgIHxBRVMgRW5naW5lIElucHV0IERhdGEgU3dhcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLZWVwIHRoZSBvcmlnaW5hbCBvcmRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG9yZGVyIHRoYXQgQ1BVIGZlZWRzIGRhdGEgdG8gdGhlIGFjY2VsZXJhdG9yIHdpbGwgYmUgY2hhbmdlZCBmcm9tIHtieXRlMywgYnl0ZTIsIGJ5dGUxLCBieXRlMH0gdG8ge2J5dGUwLCBieXRlMSwgYnl0ZTIsIGJ5dGUzfS4KKyAgICAgKiB8WzI1OjI0XSB8Q0hBTk5FTCAgIHxBRVMgRW5naW5lIFdvcmtpbmcgQ2hhbm5lbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ3VycmVudCBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcgaXMgZm9yIGNoYW5uZWwgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEN1cnJlbnQgY29udHJvbCByZWdpc3RlciBzZXR0aW5nIGlzIGZvciBjaGFubmVsIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDdXJyZW50IGNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZyBpcyBmb3IgY2hhbm5lbCAyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ3VycmVudCBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcgaXMgZm9yIGNoYW5uZWwgMy4KKyAgICAgKiB8WzMwOjI2XSB8S0VZVU5QUlQgIHxVbnByb3RlY3QgS2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyAwIHRvIENSUFRfQUVTX0NUTFszMV0gYW5kIC4uLjEwMTEwIHRvIENSUFRfQUVTX0NUTFszMDoyNl0gaXMgdG8gdW5wcm90ZWN0IHRoZSBBRVMga2V5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBLRVlVTlBSVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gaXQgaXMgd3JpdHRlbiBhcyB0aGUgQUVTIGVuZ2luZSBpcyBvcGVyYXRpbmcsIEJVU1kgZmxhZyBpcyAxLCB0aGVyZSB3b3VsZCBiZSBubyBlZmZlY3Qgb24gS0VZVU5QUlQuCisgICAgICogfFszMV0gICAgfEtFWVBSVCAgICB8UHJvdGVjdCBLZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIGFzIGEgZmxhZyB0byByZWZsZWN0IEtFWVBSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQcm90ZWN0IHRoZSBjb250ZW50IG9mIHRoZSBBRVMga2V5IGZyb20gcmVhZGluZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZXR1cm4gdmFsdWUgZm9yIHJlYWRpbmcgQ1JQVF9BRVNuX0tFWXggaXMgbm90IHRoZSBjb250ZW50IG9mIHRoZSByZWdpc3RlcnMgQ1JQVF9BRVNuX0tFWXgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbmNlIGl0IGlzIHNldCwgaXQgY2FuIGJlIGNsZWFyZWQgYnkgYXNzZXJ0aW5nIEtFWVVOUFJUCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QW5kIHRoZSBrZXkgY29udGVudCB3b3VsZCBiZSBjbGVhcmVkIGFzIHdlbGwuCisgICAgICogQHZhciBDUlBUX1Q6OkFFU19TVFMKKyAgICAgKiBPZmZzZXQ6IDB4MTA0ICBBRVMgRW5naW5lIEZsYWcKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCVVNZICAgICAgfEFFUyBFbmdpbmUgQnVzeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgQUVTIGVuZ2luZSBpcyBpZGxlIG9yIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgQUVTIGVuZ2luZSBpcyB1bmRlciBwcm9jZXNzaW5nLgorICAgICAqIHxbOF0gICAgIHxJTkJVRkVNUFRZfEFFUyBJbnB1dCBCdWZmZXIgRW1wdHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlcmUgYXJlIHNvbWUgZGF0YSBpbiBpbnB1dCBidWZmZXIgd2FpdGluZyBmb3IgdGhlIEFFUyBlbmdpbmUgdG8gcHJvY2Vzcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUVTIGlucHV0IGJ1ZmZlciBpcyBlbXB0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIG5lZWRzIHRvIGZlZWQgZGF0YSB0byB0aGUgQUVTIGVuZ2luZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVyd2lzZSwgdGhlIEFFUyBlbmdpbmUgd2lsbCBiZSBwZW5kaW5nIHRvIHdhaXQgZm9yIGlucHV0IGRhdGEuCisgICAgICogfFs5XSAgICAgfElOQlVGRlVMTCB8QUVTIElucHV0IEJ1ZmZlciBGdWxsIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQUVTIGlucHV0IGJ1ZmZlciBpcyBub3QgZnVsbC4gU29mdHdhcmUgY2FuIGZlZWQgdGhlIGRhdGEgaW50byB0aGUgQUVTIGVuZ2luZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUVTIGlucHV0IGJ1ZmZlciBpcyBmdWxsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2Fubm90IGZlZWQgZGF0YSB0byB0aGUgQUVTIGVuZ2luZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVyd2lzZSwgdGhlIGZsYWcgSU5CVUZFUlIgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8WzEwXSAgICB8SU5CVUZFUlIgIHxBRVMgSW5wdXQgQnVmZmVyIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVycm9yIGhhcHBlbnMgZHVyaW5nIGZlZWRpbmcgZGF0YSB0byB0aGUgQUVTIGVuZ2luZS4KKyAgICAgKiB8WzEyXSAgICB8Q05URVJSICAgIHxDUlBUX0FFU25fQ05UIFNldHRpbmcgRXJyb3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXJyb3IgaW4gQ1JQVF9BRVNuX0NOVCBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDUlBUX0FFU25fQ05UIGlzIG5vdCBhIG11bHRpcGx5IG9mIDE2IGluIEVDQiwgQ0JDLCBDRkIsIE9GQiwgYW5kIENUUiBtb2RlLgorICAgICAqIHxbMTZdICAgIHxPVVRCVUZFTVBUWXxBRVMgT3V0IEJ1ZmZlciBFbXB0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBRVMgb3V0cHV0IGJ1ZmZlciBpcyBub3QgZW1wdHkuIFRoZXJlIGFyZSBzb21lIHZhbGlkIGRhdGEga2VwdCBpbiBvdXRwdXQgYnVmZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRVMgb3V0cHV0IGJ1ZmZlciBpcyBlbXB0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbm5vdCBnZXQgZGF0YSBmcm9tIENSUFRfQUVTX0RBVE9VVAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVyd2lzZSwgdGhlIGZsYWcgT1VUQlVGRVJSIHdpbGwgYmUgc2V0IHRvIDEgc2luY2UgdGhlIG91dHB1dCBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfFsxN10gICAgfE9VVEJVRkZVTEx8QUVTIE91dCBCdWZmZXIgRnVsbCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFFUyBvdXRwdXQgYnVmZmVyIGlzIG5vdCBmdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRVMgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCBhbmQgc29mdHdhcmUgbmVlZHMgdG8gZ2V0IGRhdGEgZnJvbSBDUlBUX0FFU19EQVRPVVQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcndpc2UsIHRoZSBBRVMgZW5naW5lIHdpbGwgYmUgcGVuZGluZyBzaW5jZSB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLgorICAgICAqIHxbMThdICAgIHxPVVRCVUZFUlIgfEFFUyBPdXQgQnVmZmVyIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVycm9yIGhhcHBlbnMgZHVyaW5nIGdldHRpbmcgdGhlIHJlc3VsdCBmcm9tIEFFUyBlbmdpbmUuCisgICAgICogfFsyMF0gICAgfEJVU0VSUiAgICB8QUVTIERNQSBBY2Nlc3MgQnVzIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1cyBlcnJvciB3aWxsIHN0b3AgRE1BIG9wZXJhdGlvbiBhbmQgQUVTIGVuZ2luZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTX0RBVElOCisgICAgICogT2Zmc2V0OiAweDEwOCAgQUVTIEVuZ2luZSBEYXRhIElucHV0IFBvcnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQVRJTiAgICAgfEFFUyBFbmdpbmUgSW5wdXQgUG9ydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENQVSBmZWVkcyBkYXRhIHRvIEFFUyBlbmdpbmUgdGhyb3VnaCB0aGlzIHBvcnQgYnkgY2hlY2tpbmcgQ1JQVF9BRVNfU1RTLiBGZWVkIGRhdGEgYXMgSU5CVUZGVUxMIGlzIDAuCisgICAgICogQHZhciBDUlBUX1Q6OkFFU19EQVRPVVQKKyAgICAgKiBPZmZzZXQ6IDB4MTBDICBBRVMgRW5naW5lIERhdGEgT3V0cHV0IFBvcnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQVRPVVQgICAgfEFFUyBFbmdpbmUgT3V0cHV0IFBvcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUFUgZ2V0cyByZXN1bHRzIGZyb20gdGhlIEFFUyBlbmdpbmUgdGhyb3VnaCB0aGlzIHBvcnQgYnkgY2hlY2tpbmcgQ1JQVF9BRVNfU1RTCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8R2V0IGRhdGEgYXMgT1VUQlVGRU1QVFkgaXMgMC4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMF9LRVlbOF0KKyAgICAgKiBPZmZzZXQ6IDB4MTEwfjB4MTJDICBBRVMgS2V5IFdvcmQgMH43IFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfENSUFRfQUVTbl9LRVl4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEtFWSBrZWVwcyB0aGUgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG4gPSAwLCAxLi4zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHggPSAwLCAxLi43LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIEFFUyBhY2NlbGVyYXRvciBjYW4gYmUgMTI4LCAxOTIsIG9yIDI1NiBiaXRzIGFuZCBmb3VyLCBzaXgsIG9yIGVpZ2h0IDMyLWJpdCByZWdpc3RlcnMgYXJlIHRvIHN0b3JlIGVhY2ggc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e0NSUFRfQUVTbl9LRVkzLCBDUlBUX0FFU25fS0VZMiwgQ1JQVF9BRVNuX0tFWTEsIENSUFRfQUVTbl9LRVkwfSBzdG9yZXMgdGhlIDEyOC1iaXQgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e0NSUFRfQUVTbl9LRVk1LCBDUlBUX0FFU25fS0VZNCwgQ1JQVF9BRVNuX0tFWTMsIENSUFRfQUVTbl9LRVkyLCBDUlBUX0FFU25fS0VZMSwgQ1JQVF9BRVNuX0tFWTB9IHN0b3JlcyB0aGUgMTkyLWJpdCBzZWN1cml0eSBrZXkgZm9yIEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx7Q1JQVF9BRVNuX0tFWTcsIENSUFRfQUVTbl9LRVk2LCBDUlBUX0FFU25fS0VZNSwgQ1JQVF9BRVNuX0tFWTQsIENSUFRfQUVTbl9LRVkzLCBDUlBUX0FFU25fS0VZMiwgQ1JQVF9BRVNuX0tFWTEsIENSUFRfQUVTbl9LRVkwfSBzdG9yZXMgdGhlIDI1Ni1iaXQgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMwX0lWWzRdCisgICAgICogT2Zmc2V0OiAweDEzMH4weDEzQyAgQUVTIEluaXRpYWwgVmVjdG9yIFdvcmQgMH4zIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJViAgICAgICAgfEFFUyBJbml0aWFsIFZlY3RvcnMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuID0gMCwgMS4uMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx4ID0gMCwgMS4uMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3VyIGluaXRpYWwgdmVjdG9ycyAoQ1JQVF9BRVNuX0lWMCwgQ1JQVF9BRVNuX0lWMSwgQ1JQVF9BRVNuX0lWMiwgYW5kIENSUFRfQUVTbl9JVjMpIGFyZSBmb3IgQUVTIG9wZXJhdGluZyBpbiBDQkMsIENGQiwgYW5kIE9GQiBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm91ciByZWdpc3RlcnMgKENSUFRfQUVTbl9JVjAsIENSUFRfQUVTbl9JVjEsIENSUFRfQUVTbl9JVjIsIGFuZCBDUlBUX0FFU25fSVYzKSBhY3QgYXMgTm9uY2UgY291bnRlciB3aGVuIHRoZSBBRVMgZW5naW5lIGlzIG9wZXJhdGluZyBpbiBDVFIgbW9kZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMF9TQUREUgorICAgICAqIE9mZnNldDogMHgxNDAgIEFFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNBRERSICAgICB8QUVTIERNQSBTb3VyY2UgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBBRVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBwbGFpbiB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBTQUREUiBrZWVwcyB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBzb3VyY2UgdGV4dCBpcyBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgc291cmNlIGFkZHJlc3MsIHRoZSBBRVMgYWNjZWxlcmF0b3IgY2FuIHJlYWQgdGhlIHBsYWluIHRleHQgZnJvbSBzeXN0ZW0gbWVtb3J5IGFuZCBkbyBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIHNvdXJjZSBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgU0FERFIgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0FERFIgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIFNBRERSIHdoaWxlIHRoZSBBRVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIFNBRERSIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIERNQSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX0FFU25fU0FERFIgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbHVlIG9mIENSUFRfQUVTbl9TQUREUiBhbmQgQ1JQVF9BRVNuX0RBRERSIGNhbiBiZSB0aGUgc2FtZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMF9EQUREUgorICAgICAqIE9mZnNldDogMHgxNDQgIEFFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFERFIgICAgIHxBRVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQUVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgY2lwaGVyIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIERBRERSIGtlZXBzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgZW5naW5lIG91dHB1dCdzIHRleHQgd2lsbCBiZSBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcywgdGhlIEFFUyBhY2NlbGVyYXRvciBjYW4gd3JpdGUgdGhlIGNpcGhlciB0ZXh0IGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBhZnRlciB0aGUgQUVTIG9wZXJhdGlvbiBpcyBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBkZXN0aW5hdGlvbiBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgREFERFIgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8REFERFIgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIERBRERSIHdoaWxlIHRoZSBBRVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIERBRERSIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9BRVNuX0RBRERSIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWx1ZSBvZiBDUlBUX0FFU25fU0FERFIgYW5kIENSUFRfQUVTbl9EQUREUiBjYW4gYmUgdGhlIHNhbWUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzBfQ05UCisgICAgICogT2Zmc2V0OiAweDE0OCAgQUVTIEJ5dGUgQ291bnQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENOVCAgICAgICB8QUVTIEJ5dGUgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9BRVNuX0NOVCBrZWVwcyB0aGUgYnl0ZSBjb3VudCBvZiBzb3VyY2UgdGV4dCB0aGF0IGlzIGZvciB0aGUgQUVTIGVuZ2luZSBvcGVyYXRpbmcgaW4gRE1BIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9BRVNuX0NOVCBpcyAzMi1iaXQgYW5kIHRoZSBtYXhpbXVtIG9mIGJ5dGUgY291bnQgaXMgNEcgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9BRVNuX0NOVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9BRVNuX0NOVCB3aGlsZSB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX0FFU25fQ05UIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGJ5dGUgY291bnQgb2YgZGF0YSBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBY2NvcmRpbmcgdG8gQ0JDLUNTMSwgQ0JDLUNTMiwgYW5kIENCQy1DUzMgc3RhbmRhcmQsIHRoZSBjb3VudCBvZiBvcGVyYXRpb24gZGF0YSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBibG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9wZXJhdGlvbnMgdGhhdCBhcmUgbGVzcyB0aGFuIG9uZSBibG9jayB3aWxsIG91dHB1dCB1bmV4cGVjdGVkIHJlc3VsdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIEVDQiwgQ0JDLCBDRkIsIE9GQiwgYW5kIENUUiBtb2RlLCBDUlBUX0FFU25fQ05UIG11c3QgYmUgc2V0IGFzIGJ5dGUgY291bnQgZm9yIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgYmxvY2sgb2YgZGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgQ0JDLUNTMSwgQ0JDLUNTMiwgYW5kIENCQy1DUzMgbW9kZSwgQ1JQVF9BRVNuX0NOVCBtdXN0IGJlIHNldCBhcyBieXRlIGNvdW50IGZvciB0aGUgbGFzdCB0d28gYmxvY2tzIG9mIGRhdGEgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgdHdvIGJsb2NrcyBvZiBkYXRhLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMxX0tFWVs4XQorICAgICAqIE9mZnNldDogMHgxNEN+MHgxNjggIEFFUyBLZXkgV29yZCAwfjcgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8Q1JQVF9BRVNuX0tFWXgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgS0VZIGtlZXBzIHRoZSBzZWN1cml0eSBrZXkgZm9yIEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8biA9IDAsIDEuLjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8eCA9IDAsIDEuLjcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgQUVTIGFjY2VsZXJhdG9yIGNhbiBiZSAxMjgsIDE5Miwgb3IgMjU2IGJpdHMgYW5kIGZvdXIsIHNpeCwgb3IgZWlnaHQgMzItYml0IHJlZ2lzdGVycyBhcmUgdG8gc3RvcmUgZWFjaCBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx7Q1JQVF9BRVNuX0tFWTMsIENSUFRfQUVTbl9LRVkyLCBDUlBUX0FFU25fS0VZMSwgQ1JQVF9BRVNuX0tFWTB9IHN0b3JlcyB0aGUgMTI4LWJpdCBzZWN1cml0eSBrZXkgZm9yIEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx7Q1JQVF9BRVNuX0tFWTUsIENSUFRfQUVTbl9LRVk0LCBDUlBUX0FFU25fS0VZMywgQ1JQVF9BRVNuX0tFWTIsIENSUFRfQUVTbl9LRVkxLCBDUlBUX0FFU25fS0VZMH0gc3RvcmVzIHRoZSAxOTItYml0IHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHtDUlBUX0FFU25fS0VZNywgQ1JQVF9BRVNuX0tFWTYsIENSUFRfQUVTbl9LRVk1LCBDUlBUX0FFU25fS0VZNCwgQ1JQVF9BRVNuX0tFWTMsIENSUFRfQUVTbl9LRVkyLCBDUlBUX0FFU25fS0VZMSwgQ1JQVF9BRVNuX0tFWTB9IHN0b3JlcyB0aGUgMjU2LWJpdCBzZWN1cml0eSBrZXkgZm9yIEFFUyBvcGVyYXRpb24uCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzFfSVZbNF0KKyAgICAgKiBPZmZzZXQ6IDB4MTZDfjB4MTc4ICBBRVMgSW5pdGlhbCBWZWN0b3IgV29yZCAwfjMgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElWICAgICAgICB8QUVTIEluaXRpYWwgVmVjdG9ycworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG4gPSAwLCAxLi4zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHggPSAwLCAxLi4zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvdXIgaW5pdGlhbCB2ZWN0b3JzIChDUlBUX0FFU25fSVYwLCBDUlBUX0FFU25fSVYxLCBDUlBUX0FFU25fSVYyLCBhbmQgQ1JQVF9BRVNuX0lWMykgYXJlIGZvciBBRVMgb3BlcmF0aW5nIGluIENCQywgQ0ZCLCBhbmQgT0ZCIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3VyIHJlZ2lzdGVycyAoQ1JQVF9BRVNuX0lWMCwgQ1JQVF9BRVNuX0lWMSwgQ1JQVF9BRVNuX0lWMiwgYW5kIENSUFRfQUVTbl9JVjMpIGFjdCBhcyBOb25jZSBjb3VudGVyIHdoZW4gdGhlIEFFUyBlbmdpbmUgaXMgb3BlcmF0aW5nIGluIENUUiBtb2RlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMxX1NBRERSCisgICAgICogT2Zmc2V0OiAweDE3QyAgQUVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8U0FERFIgICAgIHxBRVMgRE1BIFNvdXJjZSBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIHBsYWluIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFNBRERSIGtlZXBzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIHNvdXJjZSB0ZXh0IGlzIHN0b3JlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2VkIG9uIHRoZSBzb3VyY2UgYWRkcmVzcywgdGhlIEFFUyBhY2NlbGVyYXRvciBjYW4gcmVhZCB0aGUgcGxhaW4gdGV4dCBmcm9tIHN5c3RlbSBtZW1vcnkgYW5kIGRvIEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2Ygc291cmNlIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBTQUREUiBhcmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTQUREUiBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gU0FERFIgd2hpbGUgdGhlIEFFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgU0FERFIgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgRE1BIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfQUVTbl9TQUREUiBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsdWUgb2YgQ1JQVF9BRVNuX1NBRERSIGFuZCBDUlBUX0FFU25fREFERFIgY2FuIGJlIHRoZSBzYW1lLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMxX0RBRERSCisgICAgICogT2Zmc2V0OiAweDE4MCAgQUVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQUREUiAgICAgfEFFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBBRVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBjaXBoZXIgdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgREFERFIga2VlcHMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBlbmdpbmUgb3V0cHV0J3MgdGV4dCB3aWxsIGJlIHN0b3JlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2VkIG9uIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLCB0aGUgQUVTIGFjY2VsZXJhdG9yIGNhbiB3cml0ZSB0aGUgY2lwaGVyIHRleHQgYmFjayB0byBzeXN0ZW0gbWVtb3J5IGFmdGVyIHRoZSBBRVMgb3BlcmF0aW9uIGlzIGZpbmlzaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBEQUREUiBhcmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEQUREUiBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gREFERFIgd2hpbGUgdGhlIEFFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgREFERFIgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX0FFU25fREFERFIgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbHVlIG9mIENSUFRfQUVTbl9TQUREUiBhbmQgQ1JQVF9BRVNuX0RBRERSIGNhbiBiZSB0aGUgc2FtZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMV9DTlQKKyAgICAgKiBPZmZzZXQ6IDB4MTg0ICBBRVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q05UICAgICAgIHxBRVMgQnl0ZSBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX0FFU25fQ05UIGtlZXBzIHRoZSBieXRlIGNvdW50IG9mIHNvdXJjZSB0ZXh0IHRoYXQgaXMgZm9yIHRoZSBBRVMgZW5naW5lIG9wZXJhdGluZyBpbiBETUEgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX0FFU25fQ05UIGlzIDMyLWJpdCBhbmQgdGhlIG1heGltdW0gb2YgYnl0ZSBjb3VudCBpcyA0RyBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX0FFU25fQ05UIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX0FFU25fQ05UIHdoaWxlIHRoZSBBRVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfQUVTbl9DTlQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgYnl0ZSBjb3VudCBvZiBkYXRhIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFjY29yZGluZyB0byBDQkMtQ1MxLCBDQkMtQ1MyLCBhbmQgQ0JDLUNTMyBzdGFuZGFyZCwgdGhlIGNvdW50IG9mIG9wZXJhdGlvbiBkYXRhIG11c3QgYmUgYXQgbGVhc3Qgb25lIGJsb2NrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3BlcmF0aW9ucyB0aGF0IGFyZSBsZXNzIHRoYW4gb25lIGJsb2NrIHdpbGwgb3V0cHV0IHVuZXhwZWN0ZWQgcmVzdWx0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgRUNCLCBDQkMsIENGQiwgT0ZCLCBhbmQgQ1RSIG1vZGUsIENSUFRfQUVTbl9DTlQgbXVzdCBiZSBzZXQgYXMgYnl0ZSBjb3VudCBmb3IgdGhlIGxhc3QgYmxvY2sgb2YgZGF0YSBiZWZvcmUgZmVlZGluZyBpbiB0aGUgbGFzdCBibG9jayBvZiBkYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBDQkMtQ1MxLCBDQkMtQ1MyLCBhbmQgQ0JDLUNTMyBtb2RlLCBDUlBUX0FFU25fQ05UIG11c3QgYmUgc2V0IGFzIGJ5dGUgY291bnQgZm9yIHRoZSBsYXN0IHR3byBibG9ja3Mgb2YgZGF0YSBiZWZvcmUgZmVlZGluZyBpbiB0aGUgbGFzdCB0d28gYmxvY2tzIG9mIGRhdGEuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzJfS0VZWzhdCisgICAgICogT2Zmc2V0OiAweDE4OH4weDFBNCAgQUVTIEtleSBXb3JkIDB+NyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxDUlBUX0FFU25fS0VZeAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBLRVkga2VlcHMgdGhlIHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuID0gMCwgMS4uMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx4ID0gMCwgMS4uNy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciBBRVMgYWNjZWxlcmF0b3IgY2FuIGJlIDEyOCwgMTkyLCBvciAyNTYgYml0cyBhbmQgZm91ciwgc2l4LCBvciBlaWdodCAzMi1iaXQgcmVnaXN0ZXJzIGFyZSB0byBzdG9yZSBlYWNoIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHtDUlBUX0FFU25fS0VZMywgQ1JQVF9BRVNuX0tFWTIsIENSUFRfQUVTbl9LRVkxLCBDUlBUX0FFU25fS0VZMH0gc3RvcmVzIHRoZSAxMjgtYml0IHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHtDUlBUX0FFU25fS0VZNSwgQ1JQVF9BRVNuX0tFWTQsIENSUFRfQUVTbl9LRVkzLCBDUlBUX0FFU25fS0VZMiwgQ1JQVF9BRVNuX0tFWTEsIENSUFRfQUVTbl9LRVkwfSBzdG9yZXMgdGhlIDE5Mi1iaXQgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e0NSUFRfQUVTbl9LRVk3LCBDUlBUX0FFU25fS0VZNiwgQ1JQVF9BRVNuX0tFWTUsIENSUFRfQUVTbl9LRVk0LCBDUlBUX0FFU25fS0VZMywgQ1JQVF9BRVNuX0tFWTIsIENSUFRfQUVTbl9LRVkxLCBDUlBUX0FFU25fS0VZMH0gc3RvcmVzIHRoZSAyNTYtYml0IHNlY3VyaXR5IGtleSBmb3IgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTMl9JVls0XQorICAgICAqIE9mZnNldDogMHgxQTh+MHgxQjQgIEFFUyBJbml0aWFsIFZlY3RvciBXb3JkIDB+MyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVYgICAgICAgIHxBRVMgSW5pdGlhbCBWZWN0b3JzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8biA9IDAsIDEuLjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8eCA9IDAsIDEuLjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm91ciBpbml0aWFsIHZlY3RvcnMgKENSUFRfQUVTbl9JVjAsIENSUFRfQUVTbl9JVjEsIENSUFRfQUVTbl9JVjIsIGFuZCBDUlBUX0FFU25fSVYzKSBhcmUgZm9yIEFFUyBvcGVyYXRpbmcgaW4gQ0JDLCBDRkIsIGFuZCBPRkIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvdXIgcmVnaXN0ZXJzIChDUlBUX0FFU25fSVYwLCBDUlBUX0FFU25fSVYxLCBDUlBUX0FFU25fSVYyLCBhbmQgQ1JQVF9BRVNuX0lWMykgYWN0IGFzIE5vbmNlIGNvdW50ZXIgd2hlbiB0aGUgQUVTIGVuZ2luZSBpcyBvcGVyYXRpbmcgaW4gQ1RSIG1vZGUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzJfU0FERFIKKyAgICAgKiBPZmZzZXQ6IDB4MUI4ICBBRVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTQUREUiAgICAgfEFFUyBETUEgU291cmNlIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQUVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgcGxhaW4gdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgU0FERFIga2VlcHMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgc291cmNlIHRleHQgaXMgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIHNvdXJjZSBhZGRyZXNzLCB0aGUgQUVTIGFjY2VsZXJhdG9yIGNhbiByZWFkIHRoZSBwbGFpbiB0ZXh0IGZyb20gc3lzdGVtIG1lbW9yeSBhbmQgZG8gQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBzb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIFNBRERSIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNBRERSIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBTQUREUiB3aGlsZSB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBTQUREUiB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBETUEgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9BRVNuX1NBRERSIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWx1ZSBvZiBDUlBUX0FFU25fU0FERFIgYW5kIENSUFRfQUVTbl9EQUREUiBjYW4gYmUgdGhlIHNhbWUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzJfREFERFIKKyAgICAgKiBPZmZzZXQ6IDB4MUJDICBBRVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfERBRERSICAgICB8QUVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEFFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIGNpcGhlciB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBEQUREUiBrZWVwcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIGVuZ2luZSBvdXRwdXQncyB0ZXh0IHdpbGwgYmUgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBBRVMgYWNjZWxlcmF0b3IgY2FuIHdyaXRlIHRoZSBjaXBoZXIgdGV4dCBiYWNrIHRvIHN5c3RlbSBtZW1vcnkgYWZ0ZXIgdGhlIEFFUyBvcGVyYXRpb24gaXMgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2YgZGVzdGluYXRpb24gYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIERBRERSIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERBRERSIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBEQUREUiB3aGlsZSB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBEQUREUiB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfQUVTbl9EQUREUiBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsdWUgb2YgQ1JQVF9BRVNuX1NBRERSIGFuZCBDUlBUX0FFU25fREFERFIgY2FuIGJlIHRoZSBzYW1lLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMyX0NOVAorICAgICAqIE9mZnNldDogMHgxQzAgIEFFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDTlQgICAgICAgfEFFUyBCeXRlIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfQUVTbl9DTlQga2VlcHMgdGhlIGJ5dGUgY291bnQgb2Ygc291cmNlIHRleHQgdGhhdCBpcyBmb3IgdGhlIEFFUyBlbmdpbmUgb3BlcmF0aW5nIGluIERNQSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfQUVTbl9DTlQgaXMgMzItYml0IGFuZCB0aGUgbWF4aW11bSBvZiBieXRlIGNvdW50IGlzIDRHIGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfQUVTbl9DTlQgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfQUVTbl9DTlQgd2hpbGUgdGhlIEFFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgQUVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9BRVNuX0NOVCB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBieXRlIGNvdW50IG9mIGRhdGEgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWNjb3JkaW5nIHRvIENCQy1DUzEsIENCQy1DUzIsIGFuZCBDQkMtQ1MzIHN0YW5kYXJkLCB0aGUgY291bnQgb2Ygb3BlcmF0aW9uIGRhdGEgbXVzdCBiZSBhdCBsZWFzdCBvbmUgYmxvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPcGVyYXRpb25zIHRoYXQgYXJlIGxlc3MgdGhhbiBvbmUgYmxvY2sgd2lsbCBvdXRwdXQgdW5leHBlY3RlZCByZXN1bHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBFQ0IsIENCQywgQ0ZCLCBPRkIsIGFuZCBDVFIgbW9kZSwgQ1JQVF9BRVNuX0NOVCBtdXN0IGJlIHNldCBhcyBieXRlIGNvdW50IGZvciB0aGUgbGFzdCBibG9jayBvZiBkYXRhIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIENCQy1DUzEsIENCQy1DUzIsIGFuZCBDQkMtQ1MzIG1vZGUsIENSUFRfQUVTbl9DTlQgbXVzdCBiZSBzZXQgYXMgYnl0ZSBjb3VudCBmb3IgdGhlIGxhc3QgdHdvIGJsb2NrcyBvZiBkYXRhIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IHR3byBibG9ja3Mgb2YgZGF0YS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTM19LRVlbOF0KKyAgICAgKiBPZmZzZXQ6IDB4MUM0fjB4MUUwICBBRVMgS2V5IFdvcmQgMH43IFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfENSUFRfQUVTbl9LRVl4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEtFWSBrZWVwcyB0aGUgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG4gPSAwLCAxLi4zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfHggPSAwLCAxLi43LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIEFFUyBhY2NlbGVyYXRvciBjYW4gYmUgMTI4LCAxOTIsIG9yIDI1NiBiaXRzIGFuZCBmb3VyLCBzaXgsIG9yIGVpZ2h0IDMyLWJpdCByZWdpc3RlcnMgYXJlIHRvIHN0b3JlIGVhY2ggc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e0NSUFRfQUVTbl9LRVkzLCBDUlBUX0FFU25fS0VZMiwgQ1JQVF9BRVNuX0tFWTEsIENSUFRfQUVTbl9LRVkwfSBzdG9yZXMgdGhlIDEyOC1iaXQgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8e0NSUFRfQUVTbl9LRVk1LCBDUlBUX0FFU25fS0VZNCwgQ1JQVF9BRVNuX0tFWTMsIENSUFRfQUVTbl9LRVkyLCBDUlBUX0FFU25fS0VZMSwgQ1JQVF9BRVNuX0tFWTB9IHN0b3JlcyB0aGUgMTkyLWJpdCBzZWN1cml0eSBrZXkgZm9yIEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx7Q1JQVF9BRVNuX0tFWTcsIENSUFRfQUVTbl9LRVk2LCBDUlBUX0FFU25fS0VZNSwgQ1JQVF9BRVNuX0tFWTQsIENSUFRfQUVTbl9LRVkzLCBDUlBUX0FFU25fS0VZMiwgQ1JQVF9BRVNuX0tFWTEsIENSUFRfQUVTbl9LRVkwfSBzdG9yZXMgdGhlIDI1Ni1iaXQgc2VjdXJpdHkga2V5IGZvciBBRVMgb3BlcmF0aW9uLgorICAgICAqIEB2YXIgQ1JQVF9UOjpBRVMzX0lWWzRdCisgICAgICogT2Zmc2V0OiAweDFFNH4weDFGMCAgQUVTIEluaXRpYWwgVmVjdG9yIFdvcmQgMH4zIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJViAgICAgICAgfEFFUyBJbml0aWFsIFZlY3RvcnMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuID0gMCwgMS4uMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx4ID0gMCwgMS4uMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3VyIGluaXRpYWwgdmVjdG9ycyAoQ1JQVF9BRVNuX0lWMCwgQ1JQVF9BRVNuX0lWMSwgQ1JQVF9BRVNuX0lWMiwgYW5kIENSUFRfQUVTbl9JVjMpIGFyZSBmb3IgQUVTIG9wZXJhdGluZyBpbiBDQkMsIENGQiwgYW5kIE9GQiBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm91ciByZWdpc3RlcnMgKENSUFRfQUVTbl9JVjAsIENSUFRfQUVTbl9JVjEsIENSUFRfQUVTbl9JVjIsIGFuZCBDUlBUX0FFU25fSVYzKSBhY3QgYXMgTm9uY2UgY291bnRlciB3aGVuIHRoZSBBRVMgZW5naW5lIGlzIG9wZXJhdGluZyBpbiBDVFIgbW9kZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTM19TQUREUgorICAgICAqIE9mZnNldDogMHgxRjQgIEFFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNBRERSICAgICB8QUVTIERNQSBTb3VyY2UgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBBRVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBwbGFpbiB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBTQUREUiBrZWVwcyB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBzb3VyY2UgdGV4dCBpcyBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgc291cmNlIGFkZHJlc3MsIHRoZSBBRVMgYWNjZWxlcmF0b3IgY2FuIHJlYWQgdGhlIHBsYWluIHRleHQgZnJvbSBzeXN0ZW0gbWVtb3J5IGFuZCBkbyBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIHNvdXJjZSBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgU0FERFIgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0FERFIgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIFNBRERSIHdoaWxlIHRoZSBBRVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIFNBRERSIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIERNQSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX0FFU25fU0FERFIgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbHVlIG9mIENSUFRfQUVTbl9TQUREUiBhbmQgQ1JQVF9BRVNuX0RBRERSIGNhbiBiZSB0aGUgc2FtZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6QUVTM19EQUREUgorICAgICAqIE9mZnNldDogMHgxRjggIEFFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFERFIgICAgIHxBRVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQUVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgY2lwaGVyIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIERBRERSIGtlZXBzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgZW5naW5lIG91dHB1dCdzIHRleHQgd2lsbCBiZSBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcywgdGhlIEFFUyBhY2NlbGVyYXRvciBjYW4gd3JpdGUgdGhlIGNpcGhlciB0ZXh0IGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBhZnRlciB0aGUgQUVTIG9wZXJhdGlvbiBpcyBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBkZXN0aW5hdGlvbiBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgREFERFIgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8REFERFIgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIERBRERSIHdoaWxlIHRoZSBBRVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IEFFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIERBRERSIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9BRVNuX0RBRERSIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWx1ZSBvZiBDUlBUX0FFU25fU0FERFIgYW5kIENSUFRfQUVTbl9EQUREUiBjYW4gYmUgdGhlIHNhbWUuCisgICAgICogQHZhciBDUlBUX1Q6OkFFUzNfQ05UCisgICAgICogT2Zmc2V0OiAweDFGQyAgQUVTIEJ5dGUgQ291bnQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENOVCAgICAgICB8QUVTIEJ5dGUgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9BRVNuX0NOVCBrZWVwcyB0aGUgYnl0ZSBjb3VudCBvZiBzb3VyY2UgdGV4dCB0aGF0IGlzIGZvciB0aGUgQUVTIGVuZ2luZSBvcGVyYXRpbmcgaW4gRE1BIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9BRVNuX0NOVCBpcyAzMi1iaXQgYW5kIHRoZSBtYXhpbXVtIG9mIGJ5dGUgY291bnQgaXMgNEcgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9BRVNuX0NOVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9BRVNuX0NOVCB3aGlsZSB0aGUgQUVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX0FFU25fQ05UIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGJ5dGUgY291bnQgb2YgZGF0YSBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBY2NvcmRpbmcgdG8gQ0JDLUNTMSwgQ0JDLUNTMiwgYW5kIENCQy1DUzMgc3RhbmRhcmQsIHRoZSBjb3VudCBvZiBvcGVyYXRpb24gZGF0YSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBibG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9wZXJhdGlvbnMgdGhhdCBhcmUgbGVzcyB0aGFuIG9uZSBibG9jayB3aWxsIG91dHB1dCB1bmV4cGVjdGVkIHJlc3VsdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIEVDQiwgQ0JDLCBDRkIsIE9GQiwgYW5kIENUUiBtb2RlLCBDUlBUX0FFU25fQ05UIG11c3QgYmUgc2V0IGFzIGJ5dGUgY291bnQgZm9yIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgYmxvY2sgb2YgZGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgQ0JDLUNTMSwgQ0JDLUNTMiwgYW5kIENCQy1DUzMgbW9kZSwgQ1JQVF9BRVNuX0NOVCBtdXN0IGJlIHNldCBhcyBieXRlIGNvdW50IGZvciB0aGUgbGFzdCB0d28gYmxvY2tzIG9mIGRhdGEgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgdHdvIGJsb2NrcyBvZiBkYXRhLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTX0NUTAorICAgICAqIE9mZnNldDogMHgyMDAgIFRERVMvREVTIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTVEFSVCAgICAgfFRERVMvREVTIEVuZ2luZSBTdGFydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YXJ0IFRERVMvREVTIGVuZ2luZS4gVGhlIGZsYWcgQlVTWSB3b3VsZCBiZSBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGJpdCBpcyBhbHdheXMgMCB3aGVuIGl0J3MgcmVhZCBiYWNrLgorICAgICAqIHxbMV0gICAgIHxTVE9QICAgICAgfFRERVMvREVTIEVuZ2luZSBTdG9wCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RvcCBUREVTL0RFUyBlbmdpbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGJpdCBpcyBhbHdheXMgMCB3aGVuIGl0J3MgcmVhZCBiYWNrLgorICAgICAqIHxbMl0gICAgIHxUTU9ERSAgICAgfFRERVMvREVTIEVuZ2luZSBPcGVyYXRpbmcgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTZXQgREVTIG1vZGUgZm9yIFRERVMvREVTIGVuZ2luZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IFRyaXBsZSBERVMgbW9kZSBmb3IgVERFUy9ERVMgZW5naW5lLgorICAgICAqIHxbM10gICAgIHwzS0VZUyAgICAgfFRERVMvREVTIEtleSBOdW1iZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2VsZWN0IEtFWTEgYW5kIEtFWTIgaW4gVERFUy9ERVMgZW5naW5lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmlwbGUga2V5cyBpbiBUREVTL0RFUyBlbmdpbmUgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8RE1BTEFTVCAgIHxUREVTL0RFUyBFbmdpbmUgU3RhcnQgZm9yIHRoZSBMYXN0IEJsb2NrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHRoaXMgYml0IG11c3QgYmUgc2V0IGFzIGJlZ2lubmluZyB0aGUgbGFzdCBETUEgY2FzY2FkZSByb3VuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIG1vZGUsIHRoaXMgYml0IG11c3QgYmUgc2V0IGFzIGZlZWRpbmcgaW4gbGFzdCBibG9jayBvZiBkYXRhLgorICAgICAqIHxbNl0gICAgIHxETUFDU0NBRCAgfFRERVMvREVTIEVuZ2luZSBETUEgd2l0aCBDYXNjYWRlIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRE1BIGNhc2NhZGUgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluIERNQSBDYXNjYWRlIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgRE1BIHNvdXJjZSBhZGRyZXNzIHJlZ2lzdGVyLCBkZXN0aW5hdGlvbiBhZGRyZXNzIHJlZ2lzdGVyLCBhbmQgYnl0ZSBjb3VudCByZWdpc3RlciBkdXJpbmcgYSBjYXNjYWRlIG9wZXJhdGlvbiwgd2l0aG91dCBmaW5pc2hpbmcgdGhlIGFjY2VsZXJhdG9yIG9wZXJhdGlvbi4KKyAgICAgKiB8WzddICAgICB8RE1BRU4gICAgIHxUREVTL0RFUyBFbmdpbmUgRE1BIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRERVNfRE1BIGVuZ2luZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUREVTIGVuZ2luZSBvcGVyYXRlcyBpbiBOb24tRE1BIG1vZGUsIGFuZCBnZXQgZGF0YSBmcm9tIHRoZSBwb3J0IENSUFRfVERFU19EQVRJTi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFU19ETUEgZW5naW5lIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VERFUyBlbmdpbmUgb3BlcmF0ZXMgaW4gRE1BIG1vZGUsIGFuZCBkYXRhIG1vdmVtZW50IGZyb20vdG8gdGhlIGVuZ2luZSBpcyBkb25lIGJ5IERNQSBsb2dpYy4KKyAgICAgKiB8WzEwOjhdICB8T1BNT0RFICAgIHxUREVTL0RFUyBFbmdpbmUgT3BlcmF0aW9uIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAwID0gRUNCIChFbGVjdHJvbmljIENvZGVib29rIE1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDEgPSBDQkMgKENpcGhlciBCbG9jayBDaGFpbmluZyBNb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAyID0gQ0ZCIChDaXBoZXIgRmVlZGJhY2sgTW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwMyA9IE9GQiAoT3V0cHV0IEZlZWRiYWNrIE1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDQgPSBDVFIgKENvdW50ZXIgTW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gQ1RSIChDb3VudGVyIE1vZGUpLgorICAgICAqIHxbMTZdICAgIHxFTkNSUFQgICAgfFRERVMvREVTIEVuY3J5cHRpb24vRGVjcnlwdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUREVTIGVuZ2luZSBleGVjdXRlcyBkZWNyeXB0aW9uIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFUyBlbmdpbmUgZXhlY3V0ZXMgZW5jcnlwdGlvbiBvcGVyYXRpb24uCisgICAgICogfFsyMV0gICAgfEJMS1NXQVAgICB8VERFUy9ERVMgRW5naW5lIEJsb2NrIERvdWJsZSBXb3JkIEVuZGlhbiBTd2FwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEtlZXAgdGhlIG9yaWdpbmFsIG9yZGVyLCBlLmcuIHtXT1JEX0gsIFdPUkRfTH0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHRoZSBUREVTIGVuZ2luZSB3b3VsZCBleGNoYW5nZSBoaWdoIGFuZCBsb3cgd29yZCBpbiB0aGUgc2VxdWVuY2Uge1dPUkRfTCwgV09SRF9IfS4KKyAgICAgKiB8WzIyXSAgICB8T1VUU1dBUCAgIHxUREVTL0RFUyBFbmdpbmUgT3V0cHV0IERhdGEgU3dhcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLZWVwIHRoZSBvcmlnaW5hbCBvcmRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG9yZGVyIHRoYXQgQ1BVIG91dHB1dHMgZGF0YSBmcm9tIHRoZSBhY2NlbGVyYXRvciB3aWxsIGJlIGNoYW5nZWQgZnJvbSB7Ynl0ZTMsIGJ5dGUyLCBieXRlMSwgYnl0ZTB9IHRvIHtieXRlMCwgYnl0ZTEsIGJ5dGUyLCBieXRlM30uCisgICAgICogfFsyM10gICAgfElOU1dBUCAgICB8VERFUy9ERVMgRW5naW5lIElucHV0IERhdGEgU3dhcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLZWVwIHRoZSBvcmlnaW5hbCBvcmRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG9yZGVyIHRoYXQgQ1BVIGZlZWRzIGRhdGEgdG8gdGhlIGFjY2VsZXJhdG9yIHdpbGwgYmUgY2hhbmdlZCBmcm9tIHtieXRlMywgYnl0ZTIsIGJ5dGUxLCBieXRlMH0gdG8ge2J5dGUwLCBieXRlMSwgYnl0ZTIsIGJ5dGUzfS4KKyAgICAgKiB8WzI1OjI0XSB8Q0hBTk5FTCAgIHxUREVTL0RFUyBFbmdpbmUgV29ya2luZyBDaGFubmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDdXJyZW50IGNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZyBpcyBmb3IgY2hhbm5lbCAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ3VycmVudCBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcgaXMgZm9yIGNoYW5uZWwgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEN1cnJlbnQgY29udHJvbCByZWdpc3RlciBzZXR0aW5nIGlzIGZvciBjaGFubmVsIDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDdXJyZW50IGNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZyBpcyBmb3IgY2hhbm5lbCAzLgorICAgICAqIHxbMzA6MjZdIHxLRVlVTlBSVCAgfFVucHJvdGVjdCBLZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIDAgdG8gQ1JQVF9UREVTX0NUTCBbMzFdIGFuZCAuLi4xMDExMCB0byBDUlBUX1RERVNfQ1RMIFszMDoyNl0gaXMgdG8gdW5wcm90ZWN0IFRERVMga2V5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBLRVlVTlBSVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gaXQgaXMgd3JpdHRlbiBhcyB0aGUgVERFUyBlbmdpbmUgaXMgb3BlcmF0aW5nLCBCVVNZIGZsYWcgaXMgMSwgdGhlcmUgd291bGQgYmUgbm8gZWZmZWN0IG9uIEtFWVVOUFJULgorICAgICAqIHxbMzFdICAgIHxLRVlQUlQgICAgfFByb3RlY3QgS2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBhcyBhIGZsYWcgdG8gcmVmbGVjdCBLRVlQUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhpcyBiaXQgaXMgdG8gcHJvdGVjdCB0aGUgY29udGVudCBvZiBUREVTIGtleSBmcm9tIHJlYWRpbmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmV0dXJuIHZhbHVlIGZvciByZWFkaW5nIENSUFRfIFRERVNuX0tFWXhIL0wgaXMgbm90IHRoZSBjb250ZW50IGluIHRoZSByZWdpc3RlcnMgQ1JQVF8gVERFU25fS0VZeEgvTAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uY2UgaXQgaXMgc2V0LCBpdCBjYW4gYmUgY2xlYXJlZCBieSBhc3NlcnRpbmcgS0VZVU5QUlQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IGNvbnRlbnQgd291bGQgYmUgY2xlYXJlZCBhcyB3ZWxsLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTX1NUUworICAgICAqIE9mZnNldDogMHgyMDQgIFRERVMvREVTIEVuZ2luZSBGbGFnCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlVTWSAgICAgIHxUREVTL0RFUyBFbmdpbmUgQnVzeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUREVTL0RFUyBlbmdpbmUgaXMgaWRsZSBvciBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFUy9ERVMgZW5naW5lIGlzIHVuZGVyIHByb2Nlc3NpbmcuCisgICAgICogfFs4XSAgICAgfElOQlVGRU1QVFl8VERFUy9ERVMgaW4gQnVmZmVyIEVtcHR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZXJlIGFyZSBzb21lIGRhdGEgaW4gaW5wdXQgYnVmZmVyIHdhaXRpbmcgZm9yIHRoZSBUREVTL0RFUyBlbmdpbmUgdG8gcHJvY2Vzcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFUy9ERVMgaW5wdXQgYnVmZmVyIGlzIGVtcHR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgbmVlZHMgdG8gZmVlZCBkYXRhIHRvIHRoZSBUREVTL0RFUyBlbmdpbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcndpc2UsIHRoZSBUREVTL0RFUyBlbmdpbmUgd2lsbCBiZSBwZW5kaW5nIHRvIHdhaXQgZm9yIGlucHV0IGRhdGEuCisgICAgICogfFs5XSAgICAgfElOQlVGRlVMTCB8VERFUy9ERVMgaW4gQnVmZmVyIEZ1bGwgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUREVTL0RFUyBpbnB1dCBidWZmZXIgaXMgbm90IGZ1bGwuIFNvZnR3YXJlIGNhbiBmZWVkIHRoZSBkYXRhIGludG8gdGhlIFRERVMvREVTIGVuZ2luZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFUyBpbnB1dCBidWZmZXIgaXMgZnVsbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbm5vdCBmZWVkIGRhdGEgdG8gdGhlIFRERVMvREVTIGVuZ2luZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVyd2lzZSwgdGhlIGZsYWcgSU5CVUZFUlIgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8WzEwXSAgICB8SU5CVUZFUlIgIHxUREVTL0RFUyBpbiBCdWZmZXIgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXJyb3IgaGFwcGVucyBkdXJpbmcgZmVlZGluZyBkYXRhIHRvIHRoZSBUREVTL0RFUyBlbmdpbmUuCisgICAgICogfFsxNl0gICAgfE9VVEJVRkVNUFRZfFRERVMvREVTIE91dHB1dCBCdWZmZXIgRW1wdHkgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUREVTL0RFUyBvdXRwdXQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gVGhlcmUgYXJlIHNvbWUgdmFsaWQgZGF0YSBrZXB0IGluIG91dHB1dCBidWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRERVMvREVTIG91dHB1dCBidWZmZXIgaXMgZW1wdHksIFNvZnR3YXJlIGNhbm5vdCBnZXQgZGF0YSBmcm9tIFRERVNfREFUQV9PVVQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcndpc2UgdGhlIGZsYWcgT1VUQlVGRVJSIHdpbGwgYmUgc2V0IHRvIDEsIHNpbmNlIG91dHB1dCBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfFsxN10gICAgfE9VVEJVRkZVTEx8VERFUy9ERVMgT3V0cHV0IEJ1ZmZlciBGdWxsIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVERFUy9ERVMgb3V0cHV0IGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVERFUy9ERVMgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCBhbmQgc29mdHdhcmUgbmVlZHMgdG8gZ2V0IGRhdGEgZnJvbSBUREVTX0RBVEFfT1VUCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJ3aXNlLCB0aGUgVERFUy9ERVMgZW5naW5lIHdpbGwgYmUgcGVuZGluZyBzaW5jZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwuCisgICAgICogfFsxOF0gICAgfE9VVEJVRkVSUiB8VERFUy9ERVMgT3V0IEJ1ZmZlciBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFcnJvciBoYXBwZW5zIGR1cmluZyBnZXR0aW5nIHRlc3QgcmVzdWx0IGZyb20gVERFUy9ERVMgZW5naW5lLgorICAgICAqIHxbMjBdICAgIHxCVVNFUlIgICAgfFRERVMvREVTIERNQSBBY2Nlc3MgQnVzIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1cyBlcnJvciB3aWxsIHN0b3AgRE1BIG9wZXJhdGlvbiBhbmQgVERFUy9ERVMgZW5naW5lLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMF9LRVkxSAorICAgICAqIE9mZnNldDogMHgyMDggIFRERVMvREVTIEtleSAxIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzBfS0VZMUwKKyAgICAgKiBPZmZzZXQ6IDB4MjBDICBUREVTL0RFUyBLZXkgMSBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzBfS0VZMkgKKyAgICAgKiBPZmZzZXQ6IDB4MjEwICBUREVTIEtleSAyIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzBfS0VZMkwKKyAgICAgKiBPZmZzZXQ6IDB4MjE0ICBUREVTIEtleSAyIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMF9LRVkzSAorICAgICAqIE9mZnNldDogMHgyMTggIFRERVMgS2V5IDMgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMF9LRVkzTAorICAgICAqIE9mZnNldDogMHgyMUMgIFRERVMgS2V5IDMgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMwX0lWSAorICAgICAqIE9mZnNldDogMHgyMjAgIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVYgICAgICAgIHxUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5pdGlhbCB2ZWN0b3IgKElWKSBpcyBmb3IgVERFUy9ERVMgZW5naW5lIGluIENCQywgQ0ZCLCBhbmQgT0ZCIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJViBpcyBOb25jZSBjb3VudGVyIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ1RSIG1vZGUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMwX0lWTAorICAgICAqIE9mZnNldDogMHgyMjQgIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJViAgICAgICAgfFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbml0aWFsIHZlY3RvciAoSVYpIGlzIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ0JDLCBDRkIsIGFuZCBPRkIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElWIGlzIE5vbmNlIGNvdW50ZXIgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDVFIgbW9kZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzBfU0FERFIKKyAgICAgKiBPZmZzZXQ6IDB4MjI4ICBUREVTL0RFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNBICAgICAgICB8VERFUy9ERVMgRE1BIFNvdXJjZSBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgcGxhaW4gdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9TQSBrZWVwcyB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBzb3VyY2UgdGV4dCBpcyBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgc291cmNlIGFkZHJlc3MsIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBjYW4gcmVhZCB0aGUgcGxhaW4gdGV4dCBmcm9tIHN5c3RlbSBtZW1vcnkgYW5kIGRvIFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBzb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIENSUFRfVERFU25fU0EgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9TQSBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9UREVTbl9TQSB3aGlsZSB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9UREVTbl9TQSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBETUEgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IFRERVMvREVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX1RERVNuX1NBIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fU0EgYW5kIENSUFRfVERFU25fREEgY2FuIGJlIHRoZSBzYW1lIGluIHRoZSB2YWx1ZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzBfREFERFIKKyAgICAgKiBPZmZzZXQ6IDB4MjJDICBUREVTL0RFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REEgICAgICAgIHxUREVTL0RFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIGNpcGhlciB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX1RERVNuX0RBIGtlZXBzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgZW5naW5lIG91dHB1dCdzIHRleHQgd2lsbCBiZSBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcywgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGNhbiB3cml0ZSB0aGUgY2lwaGVyIHRleHQgYmFjayB0byBzeXN0ZW0gbWVtb3J5IGFmdGVyIHRoZSBUREVTL0RFUyBvcGVyYXRpb24gaXMgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2YgZGVzdGluYXRpb24gYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIENSUFRfVERFU25fREEgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9EQSBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9UREVTbl9EQSB3aGlsZSB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9UREVTbl9EQSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgbmV4dCBUREVTL0RFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9UREVTbl9EQSBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX1NBRCBhbmQgQ1JQVF9UREVTbl9EQSBjYW4gYmUgdGhlIHNhbWUgaW4gdGhlIHZhbHVlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMF9DTlQKKyAgICAgKiBPZmZzZXQ6IDB4MjMwICBUREVTL0RFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDTlQgICAgICAgfFRERVMvREVTIEJ5dGUgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9DTlQga2VlcHMgdGhlIGJ5dGUgY291bnQgb2Ygc291cmNlIHRleHQgdGhhdCBpcyBmb3IgdGhlIFRERVMvREVTIGVuZ2luZSBvcGVyYXRpbmcgaW4gRE1BIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9DTlQgaXMgMzItYml0IGFuZCB0aGUgbWF4aW11bSBvZiBieXRlIGNvdW50IGlzIDRHIGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fQ05UIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX1RERVNuX0NOVCB3aGlsZSB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9UREVTbl9DTlQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgYnl0ZSBjb3VudCBvZiBkYXRhIGZvciB0aGUgbmV4dCBUREVTIC9ERVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgRUNCLCBDQkMsIENGQiwgT0ZCLCBhbmQgQ1RSIG1vZGUsIENSUFRfVERFU25fQ05UIG11c3QgYmUgc2V0IGFzIGJ5dGUgY291bnQgZm9yIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgYmxvY2sgb2YgZGF0YS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFU19EQVRJTgorICAgICAqIE9mZnNldDogMHgyMzQgIFRERVMvREVTIEVuZ2luZSBJbnB1dCBkYXRhIFdvcmQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQVRJTiAgICAgfFRERVMvREVTIEVuZ2luZSBJbnB1dCBQb3J0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1BVIGZlZWRzIGRhdGEgdG8gVERFUy9ERVMgZW5naW5lIHRocm91Z2ggdGhpcyBwb3J0IGJ5IGNoZWNraW5nIENSUFRfVERFU19TVFMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGZWVkIGRhdGEgYXMgSU5CVUZGVUxMIGlzIDAuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVNfREFUT1VUCisgICAgICogT2Zmc2V0OiAweDIzOCAgVERFUy9ERVMgRW5naW5lIE91dHB1dCBkYXRhIFdvcmQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQVRPVVQgICAgfFRERVMvREVTIEVuZ2luZSBPdXRwdXQgUG9ydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENQVSBnZXRzIHJlc3VsdCBmcm9tIHRoZSBUREVTL0RFUyBlbmdpbmUgdGhyb3VnaCB0aGlzIHBvcnQgYnkgY2hlY2tpbmcgQ1JQVF9UREVTX1NUUworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEdldCBkYXRhIGFzIE9VVEJVRkVNUFRZIGlzIDAuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMxX0tFWTFICisgICAgICogT2Zmc2V0OiAweDI0OCAgVERFUy9ERVMgS2V5IDEgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMV9LRVkxTAorICAgICAqIE9mZnNldDogMHgyNEMgIFRERVMvREVTIEtleSAxIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMV9LRVkySAorICAgICAqIE9mZnNldDogMHgyNTAgIFRERVMgS2V5IDIgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMV9LRVkyTAorICAgICAqIE9mZnNldDogMHgyNTQgIFRERVMgS2V5IDIgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMxX0tFWTNICisgICAgICogT2Zmc2V0OiAweDI1OCAgVERFUyBLZXkgMyBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMxX0tFWTNMCisgICAgICogT2Zmc2V0OiAweDI1QyAgVERFUyBLZXkgMyBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzFfSVZICisgICAgICogT2Zmc2V0OiAweDI2MCAgVERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJViAgICAgICAgfFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbml0aWFsIHZlY3RvciAoSVYpIGlzIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ0JDLCBDRkIsIGFuZCBPRkIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElWIGlzIE5vbmNlIGNvdW50ZXIgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDVFIgbW9kZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzFfSVZMCisgICAgICogT2Zmc2V0OiAweDI2NCAgVERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElWICAgICAgICB8VERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluaXRpYWwgdmVjdG9yIChJVikgaXMgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDQkMsIENGQiwgYW5kIE9GQiBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SVYgaXMgTm9uY2UgY291bnRlciBmb3IgVERFUy9ERVMgZW5naW5lIGluIENUUiBtb2RlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMV9TQUREUgorICAgICAqIE9mZnNldDogMHgyNjggIFRERVMvREVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8U0EgICAgICAgIHxUREVTL0RFUyBETUEgU291cmNlIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVERFUy9ERVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBwbGFpbiB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX1RERVNuX1NBIGtlZXBzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIHNvdXJjZSB0ZXh0IGlzIHN0b3JlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2VkIG9uIHRoZSBzb3VyY2UgYWRkcmVzcywgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGNhbiByZWFkIHRoZSBwbGFpbiB0ZXh0IGZyb20gc3lzdGVtIG1lbW9yeSBhbmQgZG8gVERFUy9ERVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIHNvdXJjZSBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgQ1JQVF9UREVTbl9TQSBhcmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX1NBIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX1RERVNuX1NBIHdoaWxlIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgVERFUy9ERVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX1RERVNuX1NBIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIERNQSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5leHQgVERFUy9ERVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfVERFU25fU0EgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9TQSBhbmQgQ1JQVF9UREVTbl9EQSBjYW4gYmUgdGhlIHNhbWUgaW4gdGhlIHZhbHVlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMV9EQUREUgorICAgICAqIE9mZnNldDogMHgyNkMgIFRERVMvREVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQSAgICAgICAgfFRERVMvREVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgY2lwaGVyIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fREEga2VlcHMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBlbmdpbmUgb3V0cHV0J3MgdGV4dCB3aWxsIGJlIHN0b3JlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2VkIG9uIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLCB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgY2FuIHdyaXRlIHRoZSBjaXBoZXIgdGV4dCBiYWNrIHRvIHN5c3RlbSBtZW1vcnkgYWZ0ZXIgdGhlIFRERVMvREVTIG9wZXJhdGlvbiBpcyBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBkZXN0aW5hdGlvbiBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvdGhlciB3b3JkcywgYml0IDEgYW5kIDAgb2YgQ1JQVF9UREVTbl9EQSBhcmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX0RBIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX1RERVNuX0RBIHdoaWxlIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgVERFUy9ERVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX1RERVNuX0RBIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBuZXh0IFRERVMvREVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX1RERVNuX0RBIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fU0FEIGFuZCBDUlBUX1RERVNuX0RBIGNhbiBiZSB0aGUgc2FtZSBpbiB0aGUgdmFsdWUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMxX0NOVAorICAgICAqIE9mZnNldDogMHgyNzAgIFRERVMvREVTIEJ5dGUgQ291bnQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENOVCAgICAgICB8VERFUy9ERVMgQnl0ZSBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX1RERVNuX0NOVCBrZWVwcyB0aGUgYnl0ZSBjb3VudCBvZiBzb3VyY2UgdGV4dCB0aGF0IGlzIGZvciB0aGUgVERFUy9ERVMgZW5naW5lIG9wZXJhdGluZyBpbiBETUEgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX1RERVNuX0NOVCBpcyAzMi1iaXQgYW5kIHRoZSBtYXhpbXVtIG9mIGJ5dGUgY291bnQgaXMgNEcgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9DTlQgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfVERFU25fQ05UIHdoaWxlIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyBvcGVyYXRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIGN1cnJlbnQgVERFUy9ERVMgb3BlcmF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnV0IHRoZSB2YWx1ZSBvZiBDUlBUX1RERVNuX0NOVCB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBieXRlIGNvdW50IG9mIGRhdGEgZm9yIHRoZSBuZXh0IFRERVMgL0RFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gTm9uLURNQSBFQ0IsIENCQywgQ0ZCLCBPRkIsIGFuZCBDVFIgbW9kZSwgQ1JQVF9UREVTbl9DTlQgbXVzdCBiZSBzZXQgYXMgYnl0ZSBjb3VudCBmb3IgdGhlIGxhc3QgYmxvY2sgb2YgZGF0YSBiZWZvcmUgZmVlZGluZyBpbiB0aGUgbGFzdCBibG9jayBvZiBkYXRhLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMl9LRVkxSAorICAgICAqIE9mZnNldDogMHgyODggIFRERVMvREVTIEtleSAxIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzJfS0VZMUwKKyAgICAgKiBPZmZzZXQ6IDB4MjhDICBUREVTL0RFUyBLZXkgMSBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzJfS0VZMkgKKyAgICAgKiBPZmZzZXQ6IDB4MjkwICBUREVTIEtleSAyIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzJfS0VZMkwKKyAgICAgKiBPZmZzZXQ6IDB4Mjk0ICBUREVTIEtleSAyIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMl9LRVkzSAorICAgICAqIE9mZnNldDogMHgyOTggIFRERVMgS2V5IDMgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMl9LRVkzTAorICAgICAqIE9mZnNldDogMHgyOUMgIFRERVMgS2V5IDMgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMyX0lWSAorICAgICAqIE9mZnNldDogMHgyQTAgIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVYgICAgICAgIHxUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5pdGlhbCB2ZWN0b3IgKElWKSBpcyBmb3IgVERFUy9ERVMgZW5naW5lIGluIENCQywgQ0ZCLCBhbmQgT0ZCIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJViBpcyBOb25jZSBjb3VudGVyIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ1RSIG1vZGUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMyX0lWTAorICAgICAqIE9mZnNldDogMHgyQTQgIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJViAgICAgICAgfFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbml0aWFsIHZlY3RvciAoSVYpIGlzIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ0JDLCBDRkIsIGFuZCBPRkIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElWIGlzIE5vbmNlIGNvdW50ZXIgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDVFIgbW9kZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzJfU0FERFIKKyAgICAgKiBPZmZzZXQ6IDB4MkE4ICBUREVTL0RFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNBICAgICAgICB8VERFUy9ERVMgRE1BIFNvdXJjZSBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIHN1cHBvcnRzIERNQSBmdW5jdGlvbiB0byB0cmFuc2ZlciB0aGUgcGxhaW4gdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9TQSBrZWVwcyB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBzb3VyY2UgdGV4dCBpcyBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgc291cmNlIGFkZHJlc3MsIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBjYW4gcmVhZCB0aGUgcGxhaW4gdGV4dCBmcm9tIHN5c3RlbSBtZW1vcnkgYW5kIGRvIFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBzb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIENSUFRfVERFU25fU0EgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9TQSBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9UREVTbl9TQSB3aGlsZSB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9UREVTbl9TQSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBETUEgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IFRERVMvREVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBETUEgbW9kZSwgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGUgbmV4dCBDUlBUX1RERVNuX1NBIGJlZm9yZSB0cmlnZ2VyaW5nIFNUQVJULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fU0EgYW5kIENSUFRfVERFU25fREEgY2FuIGJlIHRoZSBzYW1lIGluIHRoZSB2YWx1ZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzJfREFERFIKKyAgICAgKiBPZmZzZXQ6IDB4MkFDICBUREVTL0RFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REEgICAgICAgIHxUREVTL0RFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIGNpcGhlciB0ZXh0IGJldHdlZW4gc3lzdGVtIG1lbW9yeSBhbmQgZW1iZWRkZWQgRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX1RERVNuX0RBIGtlZXBzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgZW5naW5lIG91dHB1dCdzIHRleHQgd2lsbCBiZSBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcywgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGNhbiB3cml0ZSB0aGUgY2lwaGVyIHRleHQgYmFjayB0byBzeXN0ZW0gbWVtb3J5IGFmdGVyIHRoZSBUREVTL0RFUyBvcGVyYXRpb24gaXMgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2YgZGVzdGluYXRpb24gYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIENSUFRfVERFU25fREEgYXJlIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9EQSBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9UREVTbl9EQSB3aGlsZSB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9UREVTbl9EQSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgbmV4dCBUREVTL0RFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9UREVTbl9EQSBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX1NBRCBhbmQgQ1JQVF9UREVTbl9EQSBjYW4gYmUgdGhlIHNhbWUgaW4gdGhlIHZhbHVlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTMl9DTlQKKyAgICAgKiBPZmZzZXQ6IDB4MkIwICBUREVTL0RFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDTlQgICAgICAgfFRERVMvREVTIEJ5dGUgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9DTlQga2VlcHMgdGhlIGJ5dGUgY291bnQgb2Ygc291cmNlIHRleHQgdGhhdCBpcyBmb3IgdGhlIFRERVMvREVTIGVuZ2luZSBvcGVyYXRpbmcgaW4gRE1BIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9DTlQgaXMgMzItYml0IGFuZCB0aGUgbWF4aW11bSBvZiBieXRlIGNvdW50IGlzIDRHIGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fQ05UIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyB0byBDUlBUX1RERVNuX0NOVCB3aGlsZSB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFRERVMvREVTIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9UREVTbl9DTlQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgYnl0ZSBjb3VudCBvZiBkYXRhIGZvciB0aGUgbmV4dCBUREVTIC9ERVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE5vbi1ETUEgRUNCLCBDQkMsIENGQiwgT0ZCLCBhbmQgQ1RSIG1vZGUsIENSUFRfVERFU25fQ05UIG11c3QgYmUgc2V0IGFzIGJ5dGUgY291bnQgZm9yIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgYmxvY2sgb2YgZGF0YS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzNfS0VZMUgKKyAgICAgKiBPZmZzZXQ6IDB4MkM4ICBUREVTL0RFUyBLZXkgMSBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMzX0tFWTFMCisgICAgICogT2Zmc2V0OiAweDJDQyAgVERFUy9ERVMgS2V5IDEgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMzX0tFWTJICisgICAgICogT2Zmc2V0OiAweDJEMCAgVERFUyBLZXkgMiBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtFWSAgICAgICB8VERFUy9ERVMgS2V5IEhpZ2gvTG93IFdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUga2V5IHJlZ2lzdGVycyBmb3IgVERFUy9ERVMgYWxnb3JpdGhtIGNhbGN1bGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIDY0IGJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBpdCBuZWVkcyB0d28gMzItYml0IHJlZ2lzdGVycyB0byBzdG9yZSBhIHNlY3VyaXR5IGtleQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhIIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFs2MzozMl0gb2Ygc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uLCB3aGlsZSB0aGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4TCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbMzE6MF0uCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMzX0tFWTJMCisgICAgICogT2Zmc2V0OiAweDJENCAgVERFUyBLZXkgMiBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzNfS0VZM0gKKyAgICAgKiBPZmZzZXQ6IDB4MkQ4ICBUREVTIEtleSAzIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8S0VZICAgICAgIHxUREVTL0RFUyBLZXkgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBrZXkgcmVnaXN0ZXJzIGZvciBUREVTL0RFUyBhbGdvcml0aG0gY2FsY3VsYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc2VjdXJpdHkga2V5IGZvciB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgaXMgNjQgYml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGl0IG5lZWRzIHR3byAzMi1iaXQgcmVnaXN0ZXJzIHRvIHN0b3JlIGEgc2VjdXJpdHkga2V5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEggaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzYzOjMyXSBvZiBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBvcGVyYXRpb24sIHdoaWxlIHRoZSByZWdpc3RlciBDUlBUX1RERVNuX0tFWXhMIGlzIHVzZWQgdG8ga2VlcCB0aGUgYml0IFszMTowXS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzNfS0VZM0wKKyAgICAgKiBPZmZzZXQ6IDB4MkRDICBUREVTIEtleSAzIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVkgICAgICAgfFRERVMvREVTIEtleSBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGtleSByZWdpc3RlcnMgZm9yIFRERVMvREVTIGFsZ29yaXRobSBjYWxjdWxhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzZWN1cml0eSBrZXkgZm9yIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBpcyA2NCBiaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgaXQgbmVlZHMgdHdvIDMyLWJpdCByZWdpc3RlcnMgdG8gc3RvcmUgYSBzZWN1cml0eSBrZXkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgQ1JQVF9UREVTbl9LRVl4SCBpcyB1c2VkIHRvIGtlZXAgdGhlIGJpdCBbNjM6MzJdIG9mIHNlY3VyaXR5IGtleSBmb3IgdGhlIFRERVMvREVTIG9wZXJhdGlvbiwgd2hpbGUgdGhlIHJlZ2lzdGVyIENSUFRfVERFU25fS0VZeEwgaXMgdXNlZCB0byBrZWVwIHRoZSBiaXQgWzMxOjBdLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTM19JVkgKKyAgICAgKiBPZmZzZXQ6IDB4MkUwICBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElWICAgICAgICB8VERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgSGlnaC9Mb3cgV29yZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluaXRpYWwgdmVjdG9yIChJVikgaXMgZm9yIFRERVMvREVTIGVuZ2luZSBpbiBDQkMsIENGQiwgYW5kIE9GQiBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SVYgaXMgTm9uY2UgY291bnRlciBmb3IgVERFUy9ERVMgZW5naW5lIGluIENUUiBtb2RlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpUREVTM19JVkwKKyAgICAgKiBPZmZzZXQ6IDB4MkU0ICBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVYgICAgICAgIHxUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoL0xvdyBXb3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5pdGlhbCB2ZWN0b3IgKElWKSBpcyBmb3IgVERFUy9ERVMgZW5naW5lIGluIENCQywgQ0ZCLCBhbmQgT0ZCIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJViBpcyBOb25jZSBjb3VudGVyIGZvciBUREVTL0RFUyBlbmdpbmUgaW4gQ1RSIG1vZGUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMzX1NBRERSCisgICAgICogT2Zmc2V0OiAweDJFOCAgVERFUy9ERVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTQSAgICAgICAgfFRERVMvREVTIERNQSBTb3VyY2UgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIHBsYWluIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fU0Ega2VlcHMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciB3aGVyZSB0aGUgc291cmNlIHRleHQgaXMgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIHNvdXJjZSBhZGRyZXNzLCB0aGUgVERFUy9ERVMgYWNjZWxlcmF0b3IgY2FuIHJlYWQgdGhlIHBsYWluIHRleHQgZnJvbSBzeXN0ZW0gbWVtb3J5IGFuZCBkbyBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgc3RhcnQgb2Ygc291cmNlIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBDUlBUX1RERVNuX1NBIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fU0EgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfVERFU25fU0Egd2hpbGUgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfVERFU25fU0Egd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgRE1BIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCBUREVTL0RFUyBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIGNhbiB1cGRhdGUgdGhlIG5leHQgQ1JQVF9UREVTbl9TQSBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX1NBIGFuZCBDUlBUX1RERVNuX0RBIGNhbiBiZSB0aGUgc2FtZSBpbiB0aGUgdmFsdWUuCisgICAgICogQHZhciBDUlBUX1Q6OlRERVMzX0RBRERSCisgICAgICogT2Zmc2V0OiAweDJFQyAgVERFUy9ERVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfERBICAgICAgICB8VERFUy9ERVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVERFUy9ERVMgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBjaXBoZXIgdGV4dCBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIGVtYmVkZGVkIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9UREVTbl9EQSBrZWVwcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgd2hlcmUgdGhlIGVuZ2luZSBvdXRwdXQncyB0ZXh0IHdpbGwgYmUgc3RvcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzZWQgb24gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIHRoZSBUREVTL0RFUyBhY2NlbGVyYXRvciBjYW4gd3JpdGUgdGhlIGNpcGhlciB0ZXh0IGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBhZnRlciB0aGUgVERFUy9ERVMgb3BlcmF0aW9uIGlzIGZpbmlzaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHN0YXJ0IG9mIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgd29yZCBib3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG90aGVyIHdvcmRzLCBiaXQgMSBhbmQgMCBvZiBDUlBUX1RERVNuX0RBIGFyZSBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENSUFRfVERFU25fREEgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfVERFU25fREEgd2hpbGUgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfVERFU25fREEgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIG5leHQgVERFUy9ERVMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfVERFU25fREEgYmVmb3JlIHRyaWdnZXJpbmcgU1RBUlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9UREVTbl9TQUQgYW5kIENSUFRfVERFU25fREEgY2FuIGJlIHRoZSBzYW1lIGluIHRoZSB2YWx1ZS4KKyAgICAgKiBAdmFyIENSUFRfVDo6VERFUzNfQ05UCisgICAgICogT2Zmc2V0OiAweDJGMCAgVERFUy9ERVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q05UICAgICAgIHxUREVTL0RFUyBCeXRlIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fQ05UIGtlZXBzIHRoZSBieXRlIGNvdW50IG9mIHNvdXJjZSB0ZXh0IHRoYXQgaXMgZm9yIHRoZSBUREVTL0RFUyBlbmdpbmUgb3BlcmF0aW5nIGluIERNQSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfVERFU25fQ05UIGlzIDMyLWJpdCBhbmQgdGhlIG1heGltdW0gb2YgYnl0ZSBjb3VudCBpcyA0RyBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX1RERVNuX0NOVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9UREVTbl9DTlQgd2hpbGUgdGhlIFRERVMvREVTIGFjY2VsZXJhdG9yIGlzIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBUREVTL0RFUyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfVERFU25fQ05UIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIGJ5dGUgY291bnQgb2YgZGF0YSBmb3IgdGhlIG5leHQgVERFUyAvREVTIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIEVDQiwgQ0JDLCBDRkIsIE9GQiwgYW5kIENUUiBtb2RlLCBDUlBUX1RERVNuX0NOVCBtdXN0IGJlIHNldCBhcyBieXRlIGNvdW50IGZvciB0aGUgbGFzdCBibG9jayBvZiBkYXRhIGJlZm9yZSBmZWVkaW5nIGluIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEuCisgICAgICogQHZhciBDUlBUX1Q6OkhNQUNfQ1RMCisgICAgICogT2Zmc2V0OiAweDMwMCAgU0hBL0hNQUMgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNUQVJUICAgICB8U0hBL0hNQUMgRW5naW5lIFN0YXJ0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RhcnQgU0hBL0hNQUMgZW5naW5lLiBCVVNZIGZsYWcgd2lsbCBiZSBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgYWx3YXlzIDAgd2hlbiBpdCdzIHJlYWQgYmFjay4KKyAgICAgKiB8WzFdICAgICB8U1RPUCAgICAgIHxTSEEvSE1BQyBFbmdpbmUgU3RvcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0b3AgU0hBL0hNQUMgZW5naW5lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGFsd2F5cyAwIHdoZW4gaXQncyByZWFkIGJhY2suCisgICAgICogfFs1XSAgICAgfERNQUxBU1QgICB8U0hBL0hNQUMgTGFzdCBCbG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IG11c3QgYmUgc2V0IGFzIGZlZWRpbmcgaW4gbGFzdCBieXRlIG9mIGRhdGEuCisgICAgICogfFs3XSAgICAgfERNQUVOICAgICB8U0hBL0hNQUMgRW5naW5lIERNQSBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTSEEvSE1BQyBETUEgZW5naW5lIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNIQS9ITUFDIGVuZ2luZSBvcGVyYXRlcyBpbiBOb24tRE1BIG1vZGUsIGFuZCBnZXRzIGRhdGEgZnJvbSB0aGUgcG9ydCBDUlBUX0hNQUNfREFUSU4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNIQS9ITUFDIERNQSBlbmdpbmUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTSEEvSE1BQyBlbmdpbmUgb3BlcmF0ZXMgaW4gRE1BIG1vZGUsIGFuZCBkYXRhIG1vdmVtZW50IGZyb20vdG8gdGhlIGVuZ2luZSBpcyBkb25lIGJ5IERNQSBsb2dpYy4KKyAgICAgKiB8WzEwOjhdICB8T1BNT0RFICAgIHxTSEEvSE1BQyBFbmdpbmUgT3BlcmF0aW9uIE1vZGVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgweHg6IFNIQTE2MAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MTAwOiBTSEEyNTYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDEwMTogU0hBMjI0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgxMTA6IFNIQTUxMgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MTExOiBTSEEzODQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuLiBCdXQgd3JpdGluZyB0byB0aGVtIHdvdWxkbid0IHRha2UgZWZmZWN0IGFzIEJVU1kgaXMgMS4KKyAgICAgKiB8WzIyXSAgICB8T1VUU1dBUCAgIHxTSEEvSE1BQyBFbmdpbmUgT3V0cHV0IERhdGEgU3dhcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLZWVwIHRoZSBvcmlnaW5hbCBvcmRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIG9yZGVyIHRoYXQgQ1BVIGZlZWRzIGRhdGEgdG8gdGhlIGFjY2VsZXJhdG9yIHdpbGwgYmUgY2hhbmdlZCBmcm9tIHtieXRlMywgYnl0ZTIsIGJ5dGUxLCBieXRlMH0gdG8ge2J5dGUwLCBieXRlMSwgYnl0ZTIsIGJ5dGUzfS4KKyAgICAgKiB8WzIzXSAgICB8SU5TV0FQICAgIHxTSEEvSE1BQyBFbmdpbmUgSW5wdXQgRGF0YSBTd2FwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEtlZXAgdGhlIG9yaWdpbmFsIG9yZGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgb3JkZXIgdGhhdCBDUFUgZmVlZHMgZGF0YSB0byB0aGUgYWNjZWxlcmF0b3Igd2lsbCBiZSBjaGFuZ2VkIGZyb20ge2J5dGUzLCBieXRlMiwgYnl0ZTEsIGJ5dGUwfSB0byB7Ynl0ZTAsIGJ5dGUxLCBieXRlMiwgYnl0ZTN9LgorICAgICAqIEB2YXIgQ1JQVF9UOjpITUFDX1NUUworICAgICAqIE9mZnNldDogMHgzMDQgIFNIQS9ITUFDIFN0YXR1cyBGbGFnCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlVTWSAgICAgIHxTSEEvSE1BQyBFbmdpbmUgQnVzeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTSEEvSE1BQyBlbmdpbmUgaXMgaWRsZSBvciBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0hBL0hNQUMgZW5naW5lIGlzIGJ1c3kuCisgICAgICogfFsxXSAgICAgfERNQUJVU1kgICB8U0hBL0hNQUMgRW5naW5lIERNQSBCdXN5IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0hBL0hNQUMgRE1BIGVuZ2luZSBpcyBpZGxlIG9yIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTSEEvSE1BQyBETUEgZW5naW5lIGlzIGJ1c3kuCisgICAgICogfFs4XSAgICAgfERNQUVSUiAgICB8U0hBL0hNQUMgRW5naW5lIERNQSBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNob3cgdGhlIFNIQS9ITUFDIGVuZ2luZSBhY2Nlc3Mgbm9ybWFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTaG93IHRoZSBTSEEvSE1BQyBlbmdpbmUgYWNjZXNzIGVycm9yLgorICAgICAqIHxbMTZdICAgIHxEQVRJTlJFUSAgfFNIQS9ITUFDIE5vbi1ETUEgTW9kZSBEYXRhIElucHV0IFJlcXVlc3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXF1ZXN0IFNIQS9ITUFDIE5vbi1ETUEgbW9kZSBkYXRhIGlucHV0LgorICAgICAqIEB2YXIgQ1JQVF9UOjpITUFDX0RHU1RbMTZdCisgICAgICogT2Zmc2V0OiAweDMwOH4weDM0NCAgU0hBL0hNQUMgRGlnZXN0IE1lc3NhZ2UgMH4xNQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfERHU1QgICAgICB8U0hBL0hNQUMgRGlnZXN0IE1lc3NhZ2UgT3V0cHV0IFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNIQS0xNjAsIHRoZSBkaWdlc3QgaXMgc3RvcmVkIGluIENSUFRfSE1BQ19ER1NUMCB+IENSUFRfSE1BQ19ER1NUNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgU0hBLTIyNCwgdGhlIGRpZ2VzdCBpcyBzdG9yZWQgaW4gQ1JQVF9ITUFDX0RHU1QwIH4gQ1JQVF9ITUFDX0RHU1Q2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBTSEEtMjU2LCB0aGUgZGlnZXN0IGlzIHN0b3JlZCBpbiBDUlBUX0hNQUNfREdTVDAgfiBDUlBUX0hNQUNfREdTVDcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNIQS0zODQsIHRoZSBkaWdlc3QgaXMgc3RvcmVkIGluIENSUFRfSE1BQ19ER1NUMCB+IENSUFRfSE1BQ19ER1NUMTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNIQS01MTIsIHRoZSBkaWdlc3QgaXMgc3RvcmVkIGluIENSUFRfSE1BQ19ER1NUMCB+IENSUFRfSE1BQ19ER1NUMTUuCisgICAgICogQHZhciBDUlBUX1Q6OkhNQUNfS0VZQ05UCisgICAgICogT2Zmc2V0OiAweDM0OCAgU0hBL0hNQUMgS2V5IEJ5dGUgQ291bnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxLRVlDTlQgICAgfFNIQS9ITUFDIEtleSBCeXRlIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfSE1BQ19LRVlDTlQga2VlcHMgdGhlIGJ5dGUgY291bnQgb2Yga2V5IHRoYXQgU0hBL0hNQUMgZW5naW5lIG9wZXJhdGVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGlzIDMyLWJpdCBhbmQgdGhlIG1heGltdW0gYnl0ZSBjb3VudCBpcyA0RyBieXRlcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGNhbiBiZSByZWFkIGFuZCB3cml0dGVuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gdGhlIHJlZ2lzdGVyIENSUFRfSE1BQ19LRVlDTlQgYXMgdGhlIFNIQS9ITUFDIGFjY2VsZXJhdG9yIG9wZXJhdGluZyBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudCBTSEEvSE1BQyBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdXQgdGhlIHZhbHVlIG9mIENSUFRfU0hBIF9LRVlDTlQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q29uc2VxdWVudGx5LCBzb2Z0d2FyZSBjYW4gcHJlcGFyZSB0aGUga2V5IGNvdW50IGZvciB0aGUgbmV4dCBTSEEvSE1BQyBvcGVyYXRpb24uCisgICAgICogQHZhciBDUlBUX1Q6OkhNQUNfU0FERFIKKyAgICAgKiBPZmZzZXQ6IDB4MzRDICBTSEEvSE1BQyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTQUREUiAgICAgfFNIQS9ITUFDIERNQSBTb3VyY2UgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBTSEEvSE1BQyBhY2NlbGVyYXRvciBzdXBwb3J0cyBETUEgZnVuY3Rpb24gdG8gdHJhbnNmZXIgdGhlIHBsYWluIHRleHQgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBlbWJlZGRlZCBGSUZPCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfSE1BQ19TQUREUiBrZWVwcyB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIHRoZSBzb3VyY2UgdGV4dCBpcyBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgc291cmNlIGFkZHJlc3MsIHRoZSBTSEEvSE1BQyBhY2NlbGVyYXRvciBjYW4gcmVhZCB0aGUgcGxhaW4gdGV4dCBmcm9tIHN5c3RlbSBtZW1vcnkgYW5kIGRvIFNIQS9ITUFDIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBzb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgbG9jYXRlZCBhdCB3b3JkIGJvdW5kYXJ5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3RoZXIgd29yZHMsIGJpdCAxIGFuZCAwIG9mIENSUFRfSE1BQ19TQUREUiBhcmUgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX0hNQUNfU0FERFIgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRvIENSUFRfSE1BQ19TQUREUiB3aGlsZSB0aGUgU0hBL0hNQUMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFNIQS9ITUFDIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9ITUFDX1NBRERSIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENvbnNlcXVlbnRseSwgc29mdHdhcmUgY2FuIHByZXBhcmUgdGhlIERNQSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5leHQgU0hBL0hNQUMgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIERNQSBtb2RlLCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZSBuZXh0IENSUFRfSE1BQ19TQUREUiBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX0hNQUNfU0FERFIgYW5kIENSUFRfSE1BQ19EQUREUiBjYW4gYmUgdGhlIHNhbWUgaW4gdGhlIHZhbHVlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpITUFDX0RNQUNOVAorICAgICAqIE9mZnNldDogMHgzNTAgIFNIQS9ITUFDIEJ5dGUgQ291bnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxETUFDTlQgICAgfFNIQS9ITUFDIE9wZXJhdGlvbiBCeXRlIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENSUFRfSE1BQ19ETUFDTlQga2VlcHMgdGhlIGJ5dGUgY291bnQgb2Ygc291cmNlIHRleHQgdGhhdCBpcyBmb3IgdGhlIFNIQS9ITUFDIGVuZ2luZSBvcGVyYXRpbmcgaW4gRE1BIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1JQVF9ITUFDX0RNQUNOVCBpcyAzMi1iaXQgYW5kIHRoZSBtYXhpbXVtIG9mIGJ5dGUgY291bnQgaXMgNEcgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q1JQVF9ITUFDX0RNQUNOVCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdG8gQ1JQVF9ITUFDX0RNQUNOVCB3aGlsZSB0aGUgU0hBL0hNQUMgYWNjZWxlcmF0b3IgaXMgb3BlcmF0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBjdXJyZW50IFNIQS9ITUFDIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCB0aGUgdmFsdWUgb2YgQ1JQVF9ITUFDX0RNQUNOVCB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDb25zZXF1ZW50bHksIHNvZnR3YXJlIGNhbiBwcmVwYXJlIHRoZSBieXRlIGNvdW50IG9mIGRhdGEgZm9yIHRoZSBuZXh0IFNIQS9ITUFDIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBOb24tRE1BIG1vZGUsIENSUFRfSE1BQ19ETUFDTlQgbXVzdCBiZSBzZXQgYXMgdGhlIGJ5dGUgY291bnQgb2YgdGhlIGxhc3QgYmxvY2sgYmVmb3JlIGZlZWRpbmcgaW4gdGhlIGxhc3QgYmxvY2sgb2YgZGF0YS4KKyAgICAgKiBAdmFyIENSUFRfVDo6SE1BQ19EQVRJTgorICAgICAqIE9mZnNldDogMHgzNTQgIFNIQS9ITUFDIEVuZ2luZSBOb24tRE1BIE1vZGUgRGF0YSBJbnB1dCBQb3J0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REFUSU4gICAgIHxTSEEvSE1BQyBFbmdpbmUgSW5wdXQgUG9ydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENQVSBmZWVkcyBkYXRhIHRvIFNIQS9ITUFDIGVuZ2luZSB0aHJvdWdoIHRoaXMgcG9ydCBieSBjaGVja2luZyBDUlBUX0hNQUNfU1RTCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmVlZCBkYXRhIGFzIERBVElOUkVRIGlzIDEuCisgICAgICogQHZhciBDUlBUX1Q6OkVDQ19DVEwKKyAgICAgKiBPZmZzZXQ6IDB4ODAwICBFQ0MgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNUQVJUICAgICB8RUNDIEFjY2VsZXJhdG9yIFN0YXJ0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RhcnQgRUNDIGFjY2VsZXJhdG9yLiBCVVNZIGZsYWcgd2lsbCBiZSBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgYWx3YXlzIDAgd2hlbiBpdCdzIHJlYWQgYmFjay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFQ0MgYWNjZWxlcmF0b3Igd2lsbCBpZ25vcmUgdGhpcyBTVEFSVCBzaWduYWwgd2hlbiBCVVNZIGZsYWcgaXMgMS4KKyAgICAgKiB8WzFdICAgICB8U1RPUCAgICAgIHxFQ0MgQWNjZWxlcmF0b3IgU3RvcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFib3J0IEVDQyBhY2NlbGVyYXRvciBhbmQgbWFrZSBpdCBpbnRvIGlkbGUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgYWx3YXlzIDAgd2hlbiBpdCdzIHJlYWQgYmFjay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZW1lbWJlciB0byBjbGVhciBFQ0MgaW50ZXJydXB0IGZsYWcgYWZ0ZXIgc3RvcHBpbmcgRUNDIGFjY2VsZXJhdG9yLgorICAgICAqIHxbN10gICAgIHxETUFFTiAgICAgfEVDQyBBY2NlbGVyYXRvciBETUEgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUNDIERNQSBlbmdpbmUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVDQyBETUEgZW5naW5lIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25seSB3aGVuIFNUQVJUIGFuZCBETUFFTiBhcmUgMSwgRUNDIERNQSBlbmdpbmUgd2lsbCBiZSBhY3RpdmUKKyAgICAgKiB8WzhdICAgICB8RlNFTCAgICAgIHxGaWVsZCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQmluYXJ5IEZpZWxkIChHRigybSApKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHJpbWUgRmllbGQgKEdGKHApKS4KKyAgICAgKiB8WzEwOjldICB8RUNDT1AgICAgIHxQb2ludCBPcGVyYXRpb24gZm9yIEJGIGFuZCBQRgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUG9pbnQgbXVsdGlwbGljYXRpb24gOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfChQT0lOVFgxLCBQT0lOVFkxKSA9IFNDQUxBUksgKiAoUE9JTlRYMSwgUE9JTlRZMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBNb2R1bHVzIG9wZXJhdGlvbiA6IGNob29zZSBieSBNT0RPUCAoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQb2ludCBhZGRpdGlvbiA6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KFBPSU5UWDEsIFBPSU5UWTEpID0gKFBPSU5UWDEsIFBPSU5UWTEpICsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KFBPSU5UWDIsIFBPSU5UWTIpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQb2ludCBkb3VibGluZyA6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KFBPSU5UWDEsIFBPSU5UWTEpID0gMiAqIChQT0lOVFgxLCBQT0lOVFkxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCZXNpZGVzIGFib3ZlIHRocmVlIGlucHV0IGRhdGEsIHBvaW50IG9wZXJhdGlvbnMgc3RpbGwgbmVlZCB0aGUgcGFyYW1ldGVycyBvZiBlbGxpcHRpYyBjdXJ2ZSAoQ1VSVkVBLCBDVVJWRUIsIENVUlZFTiBhbmQgQ1VSVkVNKSBhcyBzaG93biBpbiBGaWd1cmUgNi4yNy0xMQorICAgICAqIHxbMTI6MTFdIHxNT0RPUCAgICAgfE1vZHVsdXMgT3BlcmF0aW9uIGZvciBQRgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRGl2aXNpb24gOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBPSU5UWDEgPSAoUE9JTlRZMSAvIFBPSU5UWDEpICUgQ1VSVkVOLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gTXVsdGlwbGljYXRpb24gOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBPSU5UWDEgPSAoUE9JTlRYMSAqIFBPSU5UWTEpICUgQ1VSVkVOLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQWRkaXRpb24gOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBPSU5UWDEgPSAoUE9JTlRYMSArIFBPSU5UWTEpICUgQ1VSVkVOLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gU3VidHJhY3Rpb24gOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBPSU5UWDEgPSAoUE9JTlRYMSAtIFBPSU5UWTEpICUgQ1VSVkVOLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1PRE9QIGlzIGFjdGl2ZSBvbmx5IHdoZW4gRUNDT1AgPSAwMS4KKyAgICAgKiB8WzE2XSAgICB8TERQMSAgICAgIHxUaGUgQ29udHJvbCBTaWduYWwgb2YgUmVnaXN0ZXIgZm9yIHRoZSBYIGFuZCBZIENvb3JkaW5hdGUgb2YgdGhlIEZpcnN0IFBvaW50IChQT0lOVFgxLCBQT0lOVFkxKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVnaXN0ZXIgZm9yIFBPSU5UWDEgYW5kIFBPSU5UWTEgaXMgbm90IG1vZGlmaWVkIGJ5IERNQSBvciB1c2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVnaXN0ZXIgZm9yIFBPSU5UWDEgYW5kIFBPSU5UWTEgaXMgbW9kaWZpZWQgYnkgRE1BIG9yIHVzZXIuCisgICAgICogfFsxN10gICAgfExEUDIgICAgICB8VGhlIENvbnRyb2wgU2lnbmFsIG9mIFJlZ2lzdGVyIGZvciB0aGUgWCBhbmQgWSBDb29yZGluYXRlIG9mIHRoZSBTZWNvbmQgUG9pbnQgKFBPSU5UWDIsIFBPSU5UWTIpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZWdpc3RlciBmb3IgUE9JTlRYMiBhbmQgUE9JTlRZMiBpcyBub3QgbW9kaWZpZWQgYnkgRE1BIG9yIHVzZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWdpc3RlciBmb3IgUE9JTlRYMiBhbmQgUE9JTlRZMiBpcyBtb2RpZmllZCBieSBETUEgb3IgdXNlci4KKyAgICAgKiB8WzE4XSAgICB8TERBICAgICAgIHxUaGUgQ29udHJvbCBTaWduYWwgb2YgUmVnaXN0ZXIgZm9yIHRoZSBQYXJhbWV0ZXIgQ1VSVkVBIG9mIEVsbGlwdGljIEN1cnZlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZWdpc3RlciBmb3IgQ1VSVkVBIGlzIG5vdCBtb2RpZmllZCBieSBETUEgb3IgdXNlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlZ2lzdGVyIGZvciBDVVJWRUEgaXMgbW9kaWZpZWQgYnkgRE1BIG9yIHVzZXIuCisgICAgICogfFsxOV0gICAgfExEQiAgICAgICB8VGhlIENvbnRyb2wgU2lnbmFsIG9mIFJlZ2lzdGVyIGZvciB0aGUgUGFyYW1ldGVyIENVUlZFQiBvZiBFbGxpcHRpYyBDdXJ2ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVnaXN0ZXIgZm9yIENVUlZFQiBpcyBub3QgbW9kaWZpZWQgYnkgRE1BIG9yIHVzZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWdpc3RlciBmb3IgQ1VSVkVCIGlzIG1vZGlmaWVkIGJ5IERNQSBvciB1c2VyLgorICAgICAqIHxbMjBdICAgIHxMRE4gICAgICAgfFRoZSBDb250cm9sIFNpZ25hbCBvZiBSZWdpc3RlciBmb3IgdGhlIFBhcmFtZXRlciBDVVJWRU4gb2YgRWxsaXB0aWMgQ3VydmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlZ2lzdGVyIGZvciBDVVJWRU4gaXMgbm90IG1vZGlmaWVkIGJ5IERNQSBvciB1c2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVnaXN0ZXIgZm9yIENVUlZFTiBpcyBtb2RpZmllZCBieSBETUEgb3IgdXNlci4KKyAgICAgKiB8WzIxXSAgICB8TERLICAgICAgIHxUaGUgQ29udHJvbCBTaWduYWwgb2YgUmVnaXN0ZXIgZm9yIFNDQUxBUksKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlZ2lzdGVyIGZvciBTQ0FMQVJLIGlzIG5vdCBtb2RpZmllZCBieSBETUEgb3IgdXNlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlZ2lzdGVyIGZvciBTQ0FMQVJLIGlzIG1vZGlmaWVkIGJ5IERNQSBvciB1c2VyLgorICAgICAqIHxbMzE6MjJdIHxDVVJWRU0gICAgfFRoZSBrZXkgbGVuZ3RoIG9mIGVsbGlwdGljIGN1cnZlLgorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfU1RTCisgICAgICogT2Zmc2V0OiAweDgwNCAgRUNDIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJVU1kgICAgICB8RUNDIEFjY2VsZXJhdG9yIEJ1c3kgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgRUNDIGFjY2VsZXJhdG9yIGlzIGlkbGUgb3IgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBFQ0MgYWNjZWxlcmF0b3IgaXMgdW5kZXIgcHJvY2Vzc2luZyBhbmQgcHJvdGVjdHMgYWxsIHJlZ2lzdGVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZW1lbWJlciB0byBjbGVhciBFQ0MgaW50ZXJydXB0IGZsYWcgYWZ0ZXIgRUNDIGFjY2VsZXJhdG9yIGZpbmlzaGVkCisgICAgICogfFsxXSAgICAgfERNQUJVU1kgICB8RUNDIERNQSBCdXN5IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUNDIERNQSBpcyBpZGxlIG9yIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0MgRE1BIGlzIGJ1c3kuCisgICAgICogfFsxNl0gICAgfEJVU0VSUiAgICB8RUNDIERNQSBBY2Nlc3MgQnVzIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXJyb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1cyBlcnJvciB3aWxsIHN0b3AgRE1BIG9wZXJhdGlvbiBhbmQgRUNDIGFjY2VsZXJhdG9yLgorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfWDFbMThdCisgICAgICogT2Zmc2V0OiAweDgwOH4weDg0QyAgRUNDIFRoZSBYLWNvb3JkaW5hdGUgd29yZCAwfjE3IG9mIHRoZSBmaXJzdCBwb2ludAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFBPSU5UWDEgICB8RUNDIHRoZSB4LWNvb3JkaW5hdGUgVmFsdWUgb2YgdGhlIEZpcnN0IFBvaW50IChQT0lOVFgxKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTE2MyBvciBLLTE2MywgUE9JTlRYMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDFfMDB+Q1JQVF9FQ0NfWDFfMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0yMzMgb3IgSy0yMzMsIFBPSU5UWDEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gxXzAwfkNSUFRfRUNDX1gxXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjgzIG9yIEstMjgzLCBQT0lOVFgxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMV8wMH5DUlBUX0VDQ19YMV8wOAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTQwOSBvciBLLTQwOSwgUE9JTlRYMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDFfMDB+Q1JQVF9FQ0NfWDFfMTIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi01NzEgb3IgSy01NzEsIFBPSU5UWDEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gxXzAwfkNSUFRfRUNDX1gxXzE3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMTkyLCBQT0lOVFgxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMV8wMH5DUlBUX0VDQ19YMV8wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTIyNCwgUE9JTlRYMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDFfMDB+Q1JQVF9FQ0NfWDFfMDYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yNTYsIFBPSU5UWDEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gxXzAwfkNSUFRfRUNDX1gxXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMzg0LCBQT0lOVFgxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMV8wMH5DUlBUX0VDQ19YMV8xMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTUyMSwgUE9JTlRYMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDFfMDB+Q1JQVF9FQ0NfWDFfMTYKKyAgICAgKiBAdmFyIENSUFRfVDo6RUNDX1kxWzE4XQorICAgICAqIE9mZnNldDogMHg4NTB+MHg4OTQgIEVDQyBUaGUgWS1jb29yZGluYXRlIHdvcmQgMH4xNyBvZiB0aGUgZmlyc3QgcG9pbnQKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxQT0lOVFkxICAgfEVDQyB0aGUgWS1jb29yZGluYXRlIFZhbHVlIG9mIHRoZSBGaXJzdCBQb2ludCAoUE9JTlRZMSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0xNjMgb3IgSy0xNjMsIFBPSU5UWTEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kxXzAwfkNSUFRfRUNDX1kxXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjMzIG9yIEstMjMzLCBQT0lOVFkxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMV8wMH5DUlBUX0VDQ19ZMV8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTI4MyBvciBLLTI4MywgUE9JTlRZMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTFfMDB+Q1JQVF9FQ0NfWTFfMDgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi00MDkgb3IgSy00MDksIFBPSU5UWTEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kxXzAwfkNSUFRfRUNDX1kxXzEyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNTcxIG9yIEstNTcxLCBQT0lOVFkxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMV8wMH5DUlBUX0VDQ19ZMV8xNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTE5MiwgUE9JTlRZMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTFfMDB+Q1JQVF9FQ0NfWTFfMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yMjQsIFBPSU5UWTEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kxXzAwfkNSUFRfRUNDX1kxXzA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjU2LCBQT0lOVFkxIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMV8wMH5DUlBUX0VDQ19ZMV8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTM4NCwgUE9JTlRZMSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTFfMDB+Q1JQVF9FQ0NfWTFfMTEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC01MjEsIFBPSU5UWTEgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kxXzAwfkNSUFRfRUNDX1kxXzE2CisgICAgICogQHZhciBDUlBUX1Q6OkVDQ19YMlsxOF0KKyAgICAgKiBPZmZzZXQ6IDB4ODk4fjB4OERDICBFQ0MgVGhlIFgtY29vcmRpbmF0ZSB3b3JkIDB+MTcgb2YgdGhlIHNlY29uZCBwb2ludAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFBPSU5UWDIgICB8RUNDIHRoZSB4LWNvb3JkaW5hdGUgVmFsdWUgb2YgdGhlIFNlY29uZCBQb2ludCAoUE9JTlRYMikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0xNjMgb3IgSy0xNjMsIFBPSU5UWDIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gyXzAwfkNSUFRfRUNDX1gyXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjMzIG9yIEstMjMzLCBQT0lOVFgyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMl8wMH5DUlBUX0VDQ19YMl8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTI4MyBvciBLLTI4MywgUE9JTlRYMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDJfMDB+Q1JQVF9FQ0NfWDJfMDgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi00MDkgb3IgSy00MDksIFBPSU5UWDIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gyXzAwfkNSUFRfRUNDX1gyXzEyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNTcxIG9yIEstNTcxLCBQT0lOVFgyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMl8wMH5DUlBUX0VDQ19YMl8xNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTE5MiwgUE9JTlRYMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDJfMDB+Q1JQVF9FQ0NfWDJfMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yMjQsIFBPSU5UWDIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gyXzAwfkNSUFRfRUNDX1gyXzA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjU2LCBQT0lOVFgyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19YMl8wMH5DUlBUX0VDQ19YMl8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTM4NCwgUE9JTlRYMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWDJfMDB+Q1JQVF9FQ0NfWDJfMTEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC01MjEsIFBPSU5UWDIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1gyXzAwfkNSUFRfRUNDX1gyXzE2CisgICAgICogQHZhciBDUlBUX1Q6OkVDQ19ZMlsxOF0KKyAgICAgKiBPZmZzZXQ6IDB4OEUwfjB4OTI0ICBFQ0MgVGhlIFktY29vcmRpbmF0ZSB3b3JkIDB+MTcgb2YgdGhlIHNlY29uZCBwb2ludAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFBPSU5UWTIgICB8RUNDIHRoZSBZLWNvb3JkaW5hdGUgVmFsdWUgb2YgdGhlIFNlY29uZCBQb2ludCAoUE9JTlRZMikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0xNjMgb3IgSy0xNjMsIFBPSU5UWTIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kyXzAwfkNSUFRfRUNDX1kyXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjMzIG9yIEstMjMzLCBQT0lOVFkyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMl8wMH5DUlBUX0VDQ19ZMl8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTI4MyBvciBLLTI4MywgUE9JTlRZMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTJfMDB+Q1JQVF9FQ0NfWTJfMDgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi00MDkgb3IgSy00MDksIFBPSU5UWTIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kyXzAwfkNSUFRfRUNDX1kyXzEyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNTcxIG9yIEstNTcxLCBQT0lOVFkyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMl8wMH5DUlBUX0VDQ19ZMl8xNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTE5MiwgUE9JTlRZMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTJfMDB+Q1JQVF9FQ0NfWTJfMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yMjQsIFBPSU5UWTIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kyXzAwfkNSUFRfRUNDX1kyXzA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjU2LCBQT0lOVFkyIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19ZMl8wMH5DUlBUX0VDQ19ZMl8wNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTM4NCwgUE9JTlRZMiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfWTJfMDB+Q1JQVF9FQ0NfWTJfMTEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC01MjEsIFBPSU5UWTIgaXMgc3RvcmVkIGluIENSUFRfRUNDX1kyXzAwfkNSUFRfRUNDX1kyXzE2CisgICAgICogQHZhciBDUlBUX1Q6OkVDQ19BWzE4XQorICAgICAqIE9mZnNldDogMHg5Mjh+MHg5NkMgIEVDQyBUaGUgcGFyYW1ldGVyIENVUlZFQSB3b3JkIDB+MTcgb2YgZWxsaXB0aWMgY3VydmUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDVVJWRUEgICAgfEVDQyB0aGUgUGFyYW1ldGVyIENVUlZFQSBWYWx1ZSBvZiBFbGxpcHRpYyBDdXJ2ZSAoQ1VSVkVBKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmb3JtdWxhIG9mIGVsbGlwdGljIGN1cnZlIGlzIHkyPXgzK0NVUlZFQSp4K0NVUlZFQiBpbiBHRihwKSBhbmQgeTIreCp5PXgzK0NVUlZFQSp4MitDVVJWRUIgaW4gR0YoMm0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTE2MyBvciBLLTE2MywgQ1VSVkVBIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19BXzAwfkNSUFRfRUNDX0FfMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0yMzMgb3IgSy0yMzMsIENVUlZFQSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQV8wMH5DUlBUX0VDQ19BXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjgzIG9yIEstMjgzLCBDVVJWRUEgaXMgc3RvcmVkIGluIENSUFRfRUNDX0FfMDB+Q1JQVF9FQ0NfQV8wOAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTQwOSBvciBLLTQwOSwgQ1VSVkVBIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19BXzAwfkNSUFRfRUNDX0FfMTIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi01NzEgb3IgSy01NzEsIENVUlZFQSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQV8wMH5DUlBUX0VDQ19BXzE3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMTkyLCBDVVJWRUEgaXMgc3RvcmVkIGluIENSUFRfRUNDX0FfMDB+Q1JQVF9FQ0NfQV8wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTIyNCwgQ1VSVkVBIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19BXzAwfkNSUFRfRUNDX0FfMDYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yNTYsIENVUlZFQSBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQV8wMH5DUlBUX0VDQ19BXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMzg0LCBDVVJWRUEgaXMgc3RvcmVkIGluIENSUFRfRUNDX0FfMDB+Q1JQVF9FQ0NfQV8xMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTUyMSwgQ1VSVkVBIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19BXzAwfkNSUFRfRUNDX0FfMTYKKyAgICAgKiBAdmFyIENSUFRfVDo6RUNDX0JbMThdCisgICAgICogT2Zmc2V0OiAweDk3MH4weDlCNCAgRUNDIFRoZSBwYXJhbWV0ZXIgQ1VSVkVCIHdvcmQgMH4xNyBvZiBlbGxpcHRpYyBjdXJ2ZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENVUlZFQiAgICB8RUNDIHRoZSBQYXJhbWV0ZXIgQ1VSVkVCIFZhbHVlIG9mIEVsbGlwdGljIEN1cnZlIChDVVJWRUEpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZvcm11bGEgb2YgZWxsaXB0aWMgY3VydmUgaXMgeTI9eDMrQ1VSVkVBKngrQ1VSVkVCIGluIEdGKHApIGFuZCB5Mit4Knk9eDMrQ1VSVkVBKngyK0NVUlZFQiBpbiBHRigybSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMTYzIG9yIEstMTYzLCBDVVJWRUIgaXMgc3RvcmVkIGluIENSUFRfRUNDX0JfMDB+Q1JQVF9FQ0NfQl8wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTIzMyBvciBLLTIzMywgQ1VSVkVCIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19CXzAwfkNSUFRfRUNDX0JfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0yODMgb3IgSy0yODMsIENVUlZFQiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQl8wMH5DUlBUX0VDQ19CXzA4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNDA5IG9yIEstNDA5LCBDVVJWRUIgaXMgc3RvcmVkIGluIENSUFRfRUNDX0JfMDB+Q1JQVF9FQ0NfQl8xMgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTUyMSBvciBLLTUyMSwgQ1VSVkVCIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19CXzAwfkNSUFRfRUNDX0JfMTcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0xOTIsIENVUlZFQiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQl8wMH5DUlBUX0VDQ19CXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjI0LCBDVVJWRUIgaXMgc3RvcmVkIGluIENSUFRfRUNDX0JfMDB+Q1JQVF9FQ0NfQl8wNgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTI1NiwgQ1VSVkVCIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19CXzAwfkNSUFRfRUNDX0JfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0zODQsIENVUlZFQiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfQl8wMH5DUlBUX0VDQ19CXzExCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtNTIxLCBDVVJWRUIgaXMgc3RvcmVkIGluIENSUFRfRUNDX0JfMDB+Q1JQVF9FQ0NfQl8xNgorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfTlsxOF0KKyAgICAgKiBPZmZzZXQ6IDB4OUI4fjB4OUZDICBFQ0MgVGhlIHBhcmFtZXRlciBDVVJWRU4gd29yZCAwfjE3IG9mIGVsbGlwdGljIGN1cnZlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q1VSVkVOICAgIHxFQ0MgdGhlIFBhcmFtZXRlciBDVVJWRU4gVmFsdWUgb2YgRWxsaXB0aWMgQ3VydmUgKENVUlZFTikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBHRihwKSwgQ1VSVkVOIGlzIHRoZSBwcmltZSBwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIEdGKDJtKSwgQ1VSVkVOIGlzIHRoZSBpcnJlZHVjaWJsZSBwb2x5bm9taWFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTE2MyBvciBLLTE2MywgQ1VSVkVOIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19OXzAwfkNSUFRfRUNDX05fMDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0yMzMgb3IgSy0yMzMsIENVUlZFTiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfTl8wMH5DUlBUX0VDQ19OXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjgzIG9yIEstMjgzLCBDVVJWRU4gaXMgc3RvcmVkIGluIENSUFRfRUNDX05fMDB+Q1JQVF9FQ0NfTl8wOAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTQwOSBvciBLLTQwOSwgQ1VSVkVOIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19OXzAwfkNSUFRfRUNDX05fMTIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi01NzEgb3IgSy01NzEsIENVUlZFTiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfTl8wMH5DUlBUX0VDQ19OXzE3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMTkyLCBDVVJWRU4gaXMgc3RvcmVkIGluIENSUFRfRUNDX05fMDB+Q1JQVF9FQ0NfTl8wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTIyNCwgQ1VSVkVOIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19OXzAwfkNSUFRfRUNDX05fMDYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0yNTYsIENVUlZFTiBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfTl8wMH5DUlBUX0VDQ19OXzA3CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMzg0LCBDVVJWRU4gaXMgc3RvcmVkIGluIENSUFRfRUNDX05fMDB+Q1JQVF9FQ0NfTl8xMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTUyMSwgQ1VSVkVOIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19OXzAwfkNSUFRfRUNDX05fMTYKKyAgICAgKiBAdmFyIENSUFRfVDo6RUNDX0tbMThdCisgICAgICogT2Zmc2V0OiAweEEwMH4weEE0NCAgRUNDIFRoZSBzY2FsYXIgU0NBTEFSSyB3b3JkIDB+MTcgb2YgcG9pbnQgbXVsdGlwbGljYXRpb24KKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTQ0FMQVJLICAgfEVDQyB0aGUgU2NhbGFyIFNDQUxBUksgVmFsdWUgb2YgUG9pbnQgTXVsdGlwbGljYXRpb24oU0NBTEFSSykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCZWNhdXNlIHRoZSBTQ0FMQVJLIHVzdWFsbHkgc3RvcmVzIHRoZSBwcml2YXRlIGtleSwgRUNDIGFjY2VsZXJhdG9yIGRvIG5vdCBhbGxvdyB0byByZWFkIHRoZSByZWdpc3RlciBTQ0FMQVJLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTE2MyBvciBLLTE2MywgU0NBTEFSSyBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfS18wMH5DUlBUX0VDQ19LXzA1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItMjMzIG9yIEstMjMzLCBTQ0FMQVJLIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19LXzAwfkNSUFRfRUNDX0tfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQi0yODMgb3IgSy0yODMsIFNDQUxBUksgaXMgc3RvcmVkIGluIENSUFRfRUNDX0tfMDB+Q1JQVF9FQ0NfS18wOAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBCLTQwOSBvciBLLTQwOSwgU0NBTEFSSyBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfS18wMH5DUlBUX0VDQ19LXzEyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEItNTcxIG9yIEstNTcxLCBTQ0FMQVJLIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19LXzAwfkNSUFRfRUNDX0tfMTcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0xOTIsIFNDQUxBUksgaXMgc3RvcmVkIGluIENSUFRfRUNDX0tfMDB+Q1JQVF9FQ0NfS18wNQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTIyNCwgU0NBTEFSSyBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfS18wMH5DUlBUX0VDQ19LXzA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFAtMjU2LCBTQ0FMQVJLIGlzIHN0b3JlZCBpbiBDUlBUX0VDQ19LXzAwfkNSUFRfRUNDX0tfMDcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgUC0zODQsIFNDQUxBUksgaXMgc3RvcmVkIGluIENSUFRfRUNDX0tfMDB+Q1JQVF9FQ0NfS18xMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBQLTUyMSwgU0NBTEFSSyBpcyBzdG9yZWQgaW4gQ1JQVF9FQ0NfS18wMH5DUlBUX0VDQ19LXzE2CisgICAgICogQHZhciBDUlBUX1Q6OkVDQ19TQUREUgorICAgICAqIE9mZnNldDogMHhBNDggIEVDQyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfREFERFIKKyAgICAgKiBPZmZzZXQ6IDB4QTRDICBFQ0MgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxEQUREUiAgICAgfEVDQyBETUEgRGVzdGluYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFQ0MgYWNjZWxlcmF0b3Igc3VwcG9ydHMgRE1BIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIHRoZSBEQVRBIGFuZCBQQVJBTUVURVIgYmV0d2VlbiBzeXN0ZW0gbWVtb3J5IGFuZCBFQ0MgYWNjZWxlcmF0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgREFERFIga2VlcHMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIGRhdGEgYnVmZmVyIHdoZXJlIG91dHB1dCBkYXRhIG9mIEVDQyBlbmdpbmUgd2lsbCBiZSBzdG9yZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNlZCBvbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcywgdGhlIEVDQyBhY2NlbGVyYXRvciBjYW4gd3JpdGUgdGhlIHJlc3VsdCBkYXRhIGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBhZnRlciB0aGUgRUNDIG9wZXJhdGlvbiBpcyBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzdGFydCBvZiBkZXN0aW5hdGlvbiBhZGRyZXNzIHNob3VsZCBiZSBsb2NhdGVkIGF0IHdvcmQgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGF0IGlzLCBiaXQgMSBhbmQgMCBvZiBEQUREUiBhcmUgaWdub3JlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERBRERSIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gRE1BIG1vZGUsIHNvZnR3YXJlIG11c3QgdXBkYXRlIHRoZSBDUlBUX0VDQ19EQUREUiBiZWZvcmUgdHJpZ2dlcmluZyBTVEFSVAorICAgICAqIEB2YXIgQ1JQVF9UOjpFQ0NfU1RBUlRSRUcKKyAgICAgKiBPZmZzZXQ6IDB4QTUwICBFQ0MgU3RhcnRpbmcgQWRkcmVzcyBvZiBVcGRhdGVkIFJlZ2lzdGVycworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNUQVJUUkVHICB8RUNDIFN0YXJ0aW5nIEFkZHJlc3Mgb2YgVXBkYXRlZCBSZWdpc3RlcnMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYWRkcmVzcyBvZiB0aGUgdXBkYXRlZCByZWdpc3RlcnMgdGhhdCBETUEgZmVlZHMgdGhlIGZpcnN0IGRhdGEgb3IgcGFyYW1ldGVyIHRvIEVDQyBlbmdpbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEVDQyBlbmdpbmUgaXMgYWN0aXZlLCBFQ0MgYWNjZWxlcmF0b3IgZG9lcyBub3QgYWxsb3cgdXNlcnMgdG8gbW9kaWZ5IFNUQVJUUkVHCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIGV4YW1wbGUsIHdlIHdhbnQgdG8gdXBkYXRlZCBpbnB1dCBkYXRhIGZyb20gcmVnaXN0ZXIgQ1JQVF9FQ0MgUE9JTlRYMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIHRoZSB2YWx1ZSBvZiBTVEFSVFJFRyBpcyAweDgwOC4KKyAgICAgKiBAdmFyIENSUFRfVDo6RUNDX1dPUkRDTlQKKyAgICAgKiBPZmZzZXQ6IDB4QTU0ICBFQ0MgRE1BIFdvcmQgQ291bnQKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxXT1JEQ05UICAgfEVDQyBETUEgV29yZCBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUlBUX0VDQ19XT1JEQ05UIGtlZXBzIHRoZSB3b3JkIGNvdW50IG9mIHNvdXJjZSBkYXRhIHRoYXQgaXMgZm9yIHRoZSByZXF1aXJlZCBpbnB1dCBkYXRhIG9mIEVDQyBhY2NlbGVyYXRvciB3aXRoIHZhcmlvdXMgb3BlcmF0aW9ucyBpbiBETUEgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFsdGhvdWdoIENSUFRfRUNDX1dPUkRDTlQgaXMgMzItYml0LCB0aGUgbWF4aW11bSBvZiB3b3JkIGNvdW50IGluIEVDQyBhY2NlbGVyYXRvciBpcyAxNDQgd29yZHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDUlBUX0VDQ19XT1JEQ05UIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gQ3J5cHRvIEludGVycnVwdCBFbmFibGUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5UU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIENyeXB0byBJbnRlcnJ1cHQgRmxhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBSTkdfQ1RMOyAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBQUk5HIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBQUk5HX1NFRUQ7ICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gU2VlZCBmb3IgUFJORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUFJOR19LRVlbOF07ICAgICAgICAgICAvKiE8IFsweDAwMTBdIH4gWzB4MDAyY10gUFJORyBHZW5lcmF0ZWQgS2V5MCB+IEtleTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzhdOworICAgIF9fSSAgdWludDMyX3QgQUVTX0ZEQkNLWzRdOyAgICAgICAgICAvKiE8IFsweDAwNTBdIH4gWzB4MDA1Y10gQUVTIEVuZ2luZSBPdXRwdXQgRmVlZGJhY2sgRGF0YSBhZnRlciBDcnlwdG9ncmFwaGljIE9wZXJhdGlvbiAgICAqLworICAgIF9fSSAgdWludDMyX3QgVERFU19GREJDS0g7ICAgICAgICAgICAvKiE8IFsweDAwNjBdIFRERVMvREVTIEVuZ2luZSBPdXRwdXQgRmVlZGJhY2sgSGlnaCBXb3JkIERhdGEgYWZ0ZXIgQ3J5cHRvZ3JhcGhpYyBPcGVyYXRpb24gKi8KKyAgICBfX0kgIHVpbnQzMl90IFRERVNfRkRCQ0tMOyAgICAgICAgICAgLyohPCBbMHgwMDY0XSBUREVTL0RFUyBFbmdpbmUgT3V0cHV0IEZlZWRiYWNrIExvdyBXb3JkIERhdGEgYWZ0ZXIgQ3J5cHRvZ3JhcGhpYyBPcGVyYXRpb24gKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzM4XTsKKyAgICBfX0lPIHVpbnQzMl90IEFFU19DVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMTAwXSBBRVMgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBBRVNfU1RTOyAgICAgICAgICAgICAgIC8qITwgWzB4MDEwNF0gQUVTIEVuZ2luZSBGbGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTX0RBVElOOyAgICAgICAgICAgICAvKiE8IFsweDAxMDhdIEFFUyBFbmdpbmUgRGF0YSBJbnB1dCBQb3J0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEFFU19EQVRPVVQ7ICAgICAgICAgICAgLyohPCBbMHgwMTBjXSBBRVMgRW5naW5lIERhdGEgT3V0cHV0IFBvcnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMwX0tFWVs4XTsgICAgICAgICAgIC8qITwgWzB4MDExMF0gfiBbMHgwMTJjXSBBRVMgS2V5IFdvcmQgMH43IFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMF9JVls0XTsgICAgICAgICAgICAvKiE8IFsweDAxMzBdIH4gWzB4MDEzY10gQUVTIEluaXRpYWwgVmVjdG9yIFdvcmQgMCB+IDMgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzBfU0FERFI7ICAgICAgICAgICAgLyohPCBbMHgwMTQwXSBBRVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMwX0RBRERSOyAgICAgICAgICAgIC8qITwgWzB4MDE0NF0gQUVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMF9DTlQ7ICAgICAgICAgICAgICAvKiE8IFsweDAxNDhdIEFFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzFfS0VZWzhdOyAgICAgICAgICAgLyohPCBbMHgwMTRjXSB+IFsweDAxNjhdIEFFUyBLZXkgV29yZCAwfjcgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMxX0lWWzRdOyAgICAgICAgICAgIC8qITwgWzB4MDE2Y10gfiBbMHgwMTc4XSBBRVMgSW5pdGlhbCBWZWN0b3IgV29yZCAwfjMgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMV9TQUREUjsgICAgICAgICAgICAvKiE8IFsweDAxN2NdIEFFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzFfREFERFI7ICAgICAgICAgICAgLyohPCBbMHgwMTgwXSBBRVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMxX0NOVDsgICAgICAgICAgICAgIC8qITwgWzB4MDE4NF0gQUVTIEJ5dGUgQ291bnQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMl9LRVlbOF07ICAgICAgICAgICAvKiE8IFsweDAxODhdIH4gWzB4MDFhNF0gQUVTIEtleSBXb3JkIDB+NyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzJfSVZbNF07ICAgICAgICAgICAgLyohPCBbMHgwMWE4XSB+IFsweDAxYjRdIEFFUyBJbml0aWFsIFZlY3RvciBXb3JkIDB+MyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMyX1NBRERSOyAgICAgICAgICAgIC8qITwgWzB4MDFiOF0gQUVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTMl9EQUREUjsgICAgICAgICAgICAvKiE8IFsweDAxYmNdIEFFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzJfQ05UOyAgICAgICAgICAgICAgLyohPCBbMHgwMWMwXSBBRVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMzX0tFWVs4XTsgICAgICAgICAgIC8qITwgWzB4MDFjNF0gfiBbMHgwMWUwXSBBRVMgS2V5IFdvcmQgMH43IFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTM19JVls0XTsgICAgICAgICAgICAvKiE8IFsweDAxZTRdIH4gWzB4MDFmMF0gQUVTIEluaXRpYWwgVmVjdG9yIFdvcmQgMH4zIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFFUzNfU0FERFI7ICAgICAgICAgICAgLyohPCBbMHgwMWY0XSBBRVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRVMzX0RBRERSOyAgICAgICAgICAgIC8qITwgWzB4MDFmOF0gQUVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUVTM19DTlQ7ICAgICAgICAgICAgICAvKiE8IFsweDAxZmNdIEFFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVNfQ1RMOyAgICAgICAgICAgICAgLyohPCBbMHgwMjAwXSBUREVTL0RFUyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBUREVTX1NUUzsgICAgICAgICAgICAgIC8qITwgWzB4MDIwNF0gVERFUy9ERVMgRW5naW5lIEZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzBfS0VZMUg7ICAgICAgICAgICAvKiE8IFsweDAyMDhdIFRERVMvREVTIEtleSAxIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMwX0tFWTFMOyAgICAgICAgICAgLyohPCBbMHgwMjBjXSBUREVTL0RFUyBLZXkgMSBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMF9LRVkySDsgICAgICAgICAgIC8qITwgWzB4MDIxMF0gVERFUyBLZXkgMiBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzBfS0VZMkw7ICAgICAgICAgICAvKiE8IFsweDAyMTRdIFRERVMgS2V5IDIgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMwX0tFWTNIOyAgICAgICAgICAgLyohPCBbMHgwMjE4XSBUREVTIEtleSAzIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMF9LRVkzTDsgICAgICAgICAgIC8qITwgWzB4MDIxY10gVERFUyBLZXkgMyBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzBfSVZIOyAgICAgICAgICAgICAvKiE8IFsweDAyMjBdIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMwX0lWTDsgICAgICAgICAgICAgLyohPCBbMHgwMjI0XSBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAwICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMF9TQUREUjsgICAgICAgICAgIC8qITwgWzB4MDIyOF0gVERFUy9ERVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzBfREFERFI7ICAgICAgICAgICAgICAvKiE8IFsweDAyMmNdIFRERVMvREVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMwX0NOVDsgICAgICAgICAgICAgLyohPCBbMHgwMjMwXSBUREVTL0RFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTX0RBVElOOyAgICAgICAgICAgIC8qITwgWzB4MDIzNF0gVERFUy9ERVMgRW5naW5lIElucHV0IGRhdGEgV29yZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgVERFU19EQVRPVVQ7ICAgICAgICAgICAvKiE8IFsweDAyMzhdIFRERVMvREVTIEVuZ2luZSBPdXRwdXQgZGF0YSBXb3JkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUyWzNdOworICAgIF9fSU8gdWludDMyX3QgVERFUzFfS0VZMUg7ICAgICAgICAgICAvKiE8IFsweDAyNDhdIFRERVMvREVTIEtleSAxIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMxX0tFWTFMOyAgICAgICAgICAgLyohPCBbMHgwMjRjXSBUREVTL0RFUyBLZXkgMSBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMV9LRVkySDsgICAgICAgICAgIC8qITwgWzB4MDI1MF0gVERFUyBLZXkgMiBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzFfS0VZMkw7ICAgICAgICAgICAvKiE8IFsweDAyNTRdIFRERVMgS2V5IDIgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMxX0tFWTNIOyAgICAgICAgICAgLyohPCBbMHgwMjU4XSBUREVTIEtleSAzIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMV9LRVkzTDsgICAgICAgICAgIC8qITwgWzB4MDI1Y10gVERFUyBLZXkgMyBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzFfSVZIOyAgICAgICAgICAgICAvKiE8IFsweDAyNjBdIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMxX0lWTDsgICAgICAgICAgICAgLyohPCBbMHgwMjY0XSBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAxICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMV9TQUREUjsgICAgICAgICAgIC8qITwgWzB4MDI2OF0gVERFUy9ERVMgRE1BIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzFfREFERFI7ICAgICAgICAgICAvKiE8IFsweDAyNmNdIFRERVMvREVTIERNQSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMxX0NOVDsgICAgICAgICAgICAgLyohPCBbMHgwMjcwXSBUREVTL0RFUyBCeXRlIENvdW50IFJlZ2lzdGVyIGZvciBDaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFM1s1XTsKKyAgICBfX0lPIHVpbnQzMl90IFRERVMyX0tFWTFIOyAgICAgICAgICAgLyohPCBbMHgwMjg4XSBUREVTL0RFUyBLZXkgMSBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMl9LRVkxTDsgICAgICAgICAgIC8qITwgWzB4MDI4Y10gVERFUy9ERVMgS2V5IDEgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzJfS0VZMkg7ICAgICAgICAgICAvKiE8IFsweDAyOTBdIFRERVMgS2V5IDIgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMyX0tFWTJMOyAgICAgICAgICAgLyohPCBbMHgwMjk0XSBUREVTIEtleSAyIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMl9LRVkzSDsgICAgICAgICAgIC8qITwgWzB4MDI5OF0gVERFUyBLZXkgMyBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzJfS0VZM0w7ICAgICAgICAgICAvKiE8IFsweDAyOWNdIFRERVMgS2V5IDMgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMyX0lWSDsgICAgICAgICAgICAgLyohPCBbMHgwMmEwXSBUREVTL0RFUyBJbml0aWFsIFZlY3RvciBIaWdoIFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMl9JVkw7ICAgICAgICAgICAgIC8qITwgWzB4MDJhNF0gVERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgTG93IFdvcmQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMiAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzJfU0FERFI7ICAgICAgICAgICAvKiE8IFsweDAyYThdIFRERVMvREVTIERNQSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMyX0RBRERSOyAgICAgICAgICAgLyohPCBbMHgwMmFjXSBUREVTL0RFUyBETUEgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTMl9DTlQ7ICAgICAgICAgICAgIC8qITwgWzB4MDJiMF0gVERFUy9ERVMgQnl0ZSBDb3VudCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTRbNV07CisgICAgX19JTyB1aW50MzJfdCBUREVTM19LRVkxSDsgICAgICAgICAgIC8qITwgWzB4MDJjOF0gVERFUy9ERVMgS2V5IDEgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzNfS0VZMUw7ICAgICAgICAgICAvKiE8IFsweDAyY2NdIFRERVMvREVTIEtleSAxIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMzX0tFWTJIOyAgICAgICAgICAgLyohPCBbMHgwMmQwXSBUREVTIEtleSAyIEhpZ2ggV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTM19LRVkyTDsgICAgICAgICAgIC8qITwgWzB4MDJkNF0gVERFUyBLZXkgMiBMb3cgV29yZCBSZWdpc3RlciBmb3IgQ2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzNfS0VZM0g7ICAgICAgICAgICAvKiE8IFsweDAyZDhdIFRERVMgS2V5IDMgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMzX0tFWTNMOyAgICAgICAgICAgLyohPCBbMHgwMmRjXSBUREVTIEtleSAzIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTM19JVkg7ICAgICAgICAgICAgIC8qITwgWzB4MDJlMF0gVERFUy9ERVMgSW5pdGlhbCBWZWN0b3IgSGlnaCBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzNfSVZMOyAgICAgICAgICAgICAvKiE8IFsweDAyZTRdIFRERVMvREVTIEluaXRpYWwgVmVjdG9yIExvdyBXb3JkIFJlZ2lzdGVyIGZvciBDaGFubmVsIDMgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRERVMzX1NBRERSOyAgICAgICAgICAgLyohPCBbMHgwMmU4XSBUREVTL0RFUyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMyAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUREVTM19EQUREUjsgICAgICAgICAgIC8qITwgWzB4MDJlY10gVERFUy9ERVMgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMyAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERFUzNfQ05UOyAgICAgICAgICAgICAvKiE8IFsweDAyZjBdIFRERVMvREVTIEJ5dGUgQ291bnQgUmVnaXN0ZXIgZm9yIENoYW5uZWwgMyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU1WzNdOworICAgIF9fSU8gdWludDMyX3QgSE1BQ19DVEw7ICAgICAgICAgICAgICAvKiE8IFsweDAzMDBdIFNIQS9ITUFDIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEhNQUNfU1RTOyAgICAgICAgICAgICAgLyohPCBbMHgwMzA0XSBTSEEvSE1BQyBTdGF0dXMgRmxhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBITUFDX0RHU1RbMTZdOyAgICAgICAgIC8qITwgWzB4MDMwOF0gfiBbMHgwMzQ0XSBTSEEvSE1BQyBEaWdlc3QgTWVzc2FnZSAwfjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSE1BQ19LRVlDTlQ7ICAgICAgICAgICAvKiE8IFsweDAzNDhdIFNIQS9ITUFDIEtleSBCeXRlIENvdW50IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhNQUNfU0FERFI7ICAgICAgICAgICAgLyohPCBbMHgwMzRjXSBTSEEvSE1BQyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBITUFDX0RNQUNOVDsgICAgICAgICAgIC8qITwgWzB4MDM1MF0gU0hBL0hNQUMgQnl0ZSBDb3VudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSE1BQ19EQVRJTjsgICAgICAgICAgICAvKiE8IFsweDAzNTRdIFNIQS9ITUFDIEVuZ2luZSBOb24tRE1BIE1vZGUgRGF0YSBJbnB1dCBQb3J0IFJlZ2lzdGVyICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU2WzI5OF07CisgICAgX19JTyB1aW50MzJfdCBFQ0NfQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDgwMF0gRUNDIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgRUNDX1NUUzsgICAgICAgICAgICAgICAvKiE8IFsweDA4MDRdIEVDQyBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVDQ19YMVsxOF07ICAgICAgICAgICAgLyohPCBbMHgwODA4XSB+IFsweDA4NGNdIEVDQyBUaGUgWC1jb29yZGluYXRlIHdvcmQgMH4xNyBvZiB0aGUgZmlyc3QgcG9pbnQgICAgICovCisgICAgX19JTyB1aW50MzJfdCBFQ0NfWTFbMThdOyAgICAgICAgICAgIC8qITwgWzB4MDg1MF0gfiBbMHgwODk0XSBFQ0MgVGhlIFktY29vcmRpbmF0ZSB3b3JkIDB+MTcgb2YgdGhlIGZpcnN0IHBvaW50ICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRUNDX1gyWzE4XTsgICAgICAgICAgICAvKiE8IFsweDA4OThdIH4gWzB4MDhkY10gRUNDIFRoZSBYLWNvb3JkaW5hdGUgd29yZCAwfjE3IG9mIHRoZSBzZWNvbmQgcG9pbnQgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVDQ19ZMlsxOF07ICAgICAgICAgICAgLyohPCBbMHgwOGUwXSB+IFsweDA5MjRdIEVDQyBUaGUgWS1jb29yZGluYXRlIHdvcmQgMH4xNyBvZiB0aGUgc2Vjb25kIHBvaW50ICAgICovCisgICAgX19JTyB1aW50MzJfdCBFQ0NfQVsxOF07ICAgICAgICAgICAgIC8qITwgWzB4MDkyOF0gfiBbMHgwOTZjXSBFQ0MgVGhlIHBhcmFtZXRlciBDVVJWRUEgd29yZCAwfjE3IG9mIGVsbGlwdGljIGN1cnZlICAqLworICAgIF9fSU8gdWludDMyX3QgRUNDX0JbMThdOyAgICAgICAgICAgICAvKiE8IFsweDA5NzBdIH4gWzB4MDliNF0gRUNDIFRoZSBwYXJhbWV0ZXIgQ1VSVkVCIHdvcmQgMH4xNyBvZiBlbGxpcHRpYyBjdXJ2ZSAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVDQ19OWzE4XTsgICAgICAgICAgICAgLyohPCBbMHgwOWI4XSB+IFsweDA5ZmNdIEVDQyBUaGUgcGFyYW1ldGVyIENVUlZFTiB3b3JkIDB+MTcgb2YgZWxsaXB0aWMgY3VydmUgICovCisgICAgX19PICB1aW50MzJfdCBFQ0NfS1sxOF07ICAgICAgICAgICAgIC8qITwgWzB4MGEwMF0gfiBbMHgwYTQ0XSBFQ0MgVGhlIHNjYWxhciBTQ0FMQVJLIHdvcmQgMH4xNyBvZiBwb2ludCBtdWx0aXBsaWNhdGlvbiAqLworICAgIF9fSU8gdWludDMyX3QgRUNDX1NBRERSOyAgICAgICAgICAgICAvKiE8IFsweDBhNDhdIEVDQyBETUEgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVDQ19EQUREUjsgICAgICAgICAgICAgLyohPCBbMHgwYTRjXSBFQ0MgRE1BIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBFQ0NfU1RBUlRSRUc7ICAgICAgICAgIC8qITwgWzB4MGE1MF0gRUNDIFN0YXJ0aW5nIEFkZHJlc3Mgb2YgVXBkYXRlZCBSZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRUNDX1dPUkRDTlQ7ICAgICAgICAgICAvKiE8IFsweDBhNTRdIEVDQyBETUEgV29yZCBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBDUlBUX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIENSUFRfQ09OU1QgQ1JQVCBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBDUlBUIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgQ1JQVF9JTlRFTl9BRVNJRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IEFFU0lFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfSU5URU5fQUVTSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVEVOX0FFU0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBBRVNJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5URU5fQUVTRUlFTl9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBBRVNFSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVEVOX0FFU0VJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRFTl9BRVNFSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogQUVTRUlFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVEVOX1RERVNJRU5fUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogVERFU0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRFTl9UREVTSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5URU5fVERFU0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IFRERVNJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRFTl9UREVTRUlFTl9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IFRERVNFSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfSU5URU5fVERFU0VJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVEVOX1RERVNFSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBUREVTRUlFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5URU5fUFJOR0lFTl9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBQUk5HSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVEVOX1BSTkdJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRFTl9QUk5HSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogUFJOR0lFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVEVOX0VDQ0lFTl9Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogRUNDSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRFTl9FQ0NJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5URU5fRUNDSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IEVDQ0lFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRFTl9FQ0NFSUVOX1BvcyAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IEVDQ0VJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfSU5URU5fRUNDRUlFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVEVOX0VDQ0VJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBFQ0NFSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5URU5fSE1BQ0lFTl9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVEVOOiBITUFDSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVEVOX0hNQUNJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRFTl9ITUFDSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogSE1BQ0lFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVEVOX0hNQUNFSUVOX1BvcyAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRFTjogSE1BQ0VJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRFTl9ITUFDRUlFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5URU5fSE1BQ0VJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5URU46IEhNQUNFSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRTVFNfQUVTSUZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBBRVNJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfSU5UU1RTX0FFU0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVFNUU19BRVNJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogQUVTSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5UU1RTX0FFU0VJRl9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogQUVTRUlGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVFNUU19BRVNFSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRTVFNfQUVTRUlGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IEFFU0VJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVFNUU19UREVTSUZfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IFRERVNJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRTVFNfVERFU0lGX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5UU1RTX1RERVNJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBUREVTSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRTVFNfVERFU0VJRl9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBUREVTRUlGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfSU5UU1RTX1RERVNFSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVFNUU19UREVTRUlGX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogVERFU0VJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5UU1RTX1BSTkdJRl9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogUFJOR0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVFNUU19QUk5HSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRTVFNfUFJOR0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IFBSTkdJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVFNUU19FQ0NJRl9Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IEVDQ0lGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRTVFNfRUNDSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5UU1RTX0VDQ0lGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBFQ0NJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9JTlRTVFNfRUNDRUlGX1BvcyAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBFQ0NFSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfSU5UU1RTX0VDQ0VJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0lOVFNUU19FQ0NFSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogRUNDRUlGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSU5UU1RTX0hNQUNJRl9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OklOVFNUUzogSE1BQ0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0lOVFNUU19ITUFDSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9JTlRTVFNfSE1BQ0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IEhNQUNJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0lOVFNUU19ITUFDRUlGX1BvcyAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpJTlRTVFM6IEhNQUNFSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9JTlRTVFNfSE1BQ0VJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfSU5UU1RTX0hNQUNFSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SU5UU1RTOiBITUFDRUlGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9QUk5HX0NUTF9TVEFSVF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6UFJOR19DVEw6IFNUQVJUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfUFJOR19DVExfU1RBUlRfTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX1BSTkdfQ1RMX1NUQVJUX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlBSTkdfQ1RMOiBTVEFSVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfUFJOR19DVExfU0VFRFJMRF9Qb3MgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlBSTkdfQ1RMOiBTRUVEUkxEIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX1BSTkdfQ1RMX1NFRURSTERfTXNrICAgICAgICAoMHgxdWwgPDwgQ1JQVF9QUk5HX0NUTF9TRUVEUkxEX1BvcykgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpQUk5HX0NUTDogU0VFRFJMRCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1BSTkdfQ1RMX0tFWVNaX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpQUk5HX0NUTDogS0VZU1ogUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9QUk5HX0NUTF9LRVlTWl9Nc2sgICAgICAgICAgKDB4M3VsIDw8IENSUFRfUFJOR19DVExfS0VZU1pfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6UFJOR19DVEw6IEtFWVNaIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9QUk5HX0NUTF9CVVNZX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6UFJOR19DVEw6IEJVU1kgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfUFJOR19DVExfQlVTWV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDUlBUX1BSTkdfQ1RMX0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlBSTkdfQ1RMOiBCVVNZIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfUFJOR19TRUVEX1NFRURfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlBSTkdfU0VFRDogU0VFRCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX1BSTkdfU0VFRF9TRUVEX01zayAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfUFJOR19TRUVEX1NFRURfUG9zKSAgICAgICAgIC8qITwgQ1JQVF9UOjpQUk5HX1NFRUQ6IFNFRUQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1BSTkdfS0VZeF9LRVlfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpQUk5HX0tFWVs4XTogS0VZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX1BSTkdfS0VZeF9LRVlfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfUFJOR19LRVl4X0tFWV9Qb3MpICAgICAgICAgIC8qITwgQ1JQVF9UOjpQUk5HX0tFWVs4XTogS0VZIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0ZEQkNLeF9GREJDS19Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19GREJDS1s0XTogRkRCQ0sgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfQUVTX0ZEQkNLeF9GREJDS19Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVNfRkRCQ0t4X0ZEQkNLX1BvcykgICAgICAgLyohPCBDUlBUX1Q6OkFFU19GREJDS1s0XTogRkRCQ0sgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0ZEQkNLSF9GREJDS19Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19GREJDS0g6IEZEQkNLIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENSUFRfVERFU19GREJDS0hfRkRCQ0tfTXNrICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTX0ZEQkNLSF9GREJDS19Qb3MpICAgICAgLyohPCBDUlBUX1Q6OlRERVNfRkRCQ0tIOiBGREJDSyBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19GREJDS0xfRkRCQ0tfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfRkRCQ0tMOiBGREJDSyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX1RERVNfRkRCQ0tMX0ZEQkNLX01zayAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFU19GREJDS0xfRkRCQ0tfUG9zKSAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0ZEQkNLTDogRkRCQ0sgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19DVExfU1RBUlRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBTVEFSVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX1NUQVJUX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX0NUTF9TVEFSVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogU1RBUlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX1NUT1BfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogU1RPUCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX0NUTF9TVE9QX01zayAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19DVExfU1RPUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IFNUT1AgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0NUTF9LRVlTWl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IEtFWVNaIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFU19DVExfS0VZU1pfTXNrICAgICAgICAgICAoMHgzdWwgPDwgQ1JQVF9BRVNfQ1RMX0tFWVNaX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBLRVlTWiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19DVExfRE1BTEFTVF9Qb3MgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBETUFMQVNUIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0RNQUxBU1RfTXNrICAgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX0NUTF9ETUFMQVNUX1BvcykgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogRE1BTEFTVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0RNQUNTQ0FEX1BvcyAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogRE1BQ1NDQUQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfQUVTX0NUTF9ETUFDU0NBRF9Nc2sgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19DVExfRE1BQ1NDQURfUG9zKSAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IERNQUNTQ0FEIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0NUTF9ETUFFTl9Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IERNQUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFU19DVExfRE1BRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfQ1RMX0RNQUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBETUFFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19DVExfT1BNT0RFX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBPUE1PREUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX09QTU9ERV9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBDUlBUX0FFU19DVExfT1BNT0RFX1BvcykgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogT1BNT0RFIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0VOQ1JQVF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogRU5DUlBUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX0NUTF9FTkNSUFRfTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19DVExfRU5DUlBUX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IEVOQ1JQVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0NUTF9PVVRTV0FQX1BvcyAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IE9VVFNXQVAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX0FFU19DVExfT1VUU1dBUF9Nc2sgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfQ1RMX09VVFNXQVBfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBPVVRTV0FQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19DVExfSU5TV0FQX1BvcyAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBJTlNXQVAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0lOU1dBUF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX0NUTF9JTlNXQVBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogSU5TV0FQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0NIQU5ORUxfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogQ0hBTk5FTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX0NUTF9DSEFOTkVMX01zayAgICAgICAgICgweDN1bCA8PCBDUlBUX0FFU19DVExfQ0hBTk5FTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IENIQU5ORUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0NUTF9LRVlVTlBSVF9Qb3MgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19DVEw6IEtFWVVOUFJUIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFU19DVExfS0VZVU5QUlRfTXNrICAgICAgICAoMHgxZnVsIDw8IENSUFRfQUVTX0NUTF9LRVlVTlBSVF9Qb3MpICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBLRVlVTlBSVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19DVExfS0VZUFJUX1BvcyAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfQ1RMOiBLRVlQUlQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfQ1RMX0tFWVBSVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX0NUTF9LRVlQUlRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0NUTDogS0VZUFJUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX0JVU1lfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogQlVTWSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX1NUU19CVVNZX01zayAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19TVFNfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IEJVU1kgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX1NUU19JTkJVRkVNUFRZX1BvcyAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IElOQlVGRU1QVFkgUG9zaXRpb24gICAqLworI2RlZmluZSBDUlBUX0FFU19TVFNfSU5CVUZFTVBUWV9Nc2sgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfU1RTX0lOQlVGRU1QVFlfUG9zKSAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBJTkJVRkVNUFRZIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19TVFNfSU5CVUZGVUxMX1BvcyAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBJTkJVRkZVTEwgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX0lOQlVGRlVMTF9Nc2sgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX1NUU19JTkJVRkZVTExfUG9zKSAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogSU5CVUZGVUxMIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX0lOQlVGRVJSX1BvcyAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogSU5CVUZFUlIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfQUVTX1NUU19JTkJVRkVSUl9Nc2sgICAgICAgICgweDF1bCA8PCBDUlBUX0FFU19TVFNfSU5CVUZFUlJfUG9zKSAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IElOQlVGRVJSIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX1NUU19DTlRFUlJfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IENOVEVSUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0FFU19TVFNfQ05URVJSX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfU1RTX0NOVEVSUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBDTlRFUlIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19TVFNfT1VUQlVGRU1QVFlfUG9zICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBPVVRCVUZFTVBUWSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX09VVEJVRkVNUFRZX01zayAgICAgKDB4MXVsIDw8IENSUFRfQUVTX1NUU19PVVRCVUZFTVBUWV9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogT1VUQlVGRU1QVFkgTWFzayAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX09VVEJVRkZVTExfUG9zICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogT1VUQlVGRlVMTCBQb3NpdGlvbiAgICovCisjZGVmaW5lIENSUFRfQUVTX1NUU19PVVRCVUZGVUxMX01zayAgICAgICgweDF1bCA8PCBDUlBUX0FFU19TVFNfT1VUQlVGRlVMTF9Qb3MpICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IE9VVEJVRkZVTEwgTWFzayAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX1NUU19PVVRCVUZFUlJfUG9zICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19TVFM6IE9VVEJVRkVSUiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX0FFU19TVFNfT1VUQlVGRVJSX01zayAgICAgICAoMHgxdWwgPDwgQ1JQVF9BRVNfU1RTX09VVEJVRkVSUl9Qb3MpICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBPVVRCVUZFUlIgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFU19TVFNfQlVTRVJSX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVNfU1RTOiBCVVNFUlIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVNfU1RTX0JVU0VSUl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IENSUFRfQUVTX1NUU19CVVNFUlJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX1NUUzogQlVTRVJSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVNfREFUSU5fREFUSU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTX0RBVElOOiBEQVRJTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfQUVTX0RBVElOX0RBVElOX01zayAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVNfREFUSU5fREFUSU5fUG9zKSAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19EQVRJTjogREFUSU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTX0RBVE9VVF9EQVRPVVRfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFU19EQVRPVVQ6IERBVE9VVCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX0FFU19EQVRPVVRfREFUT1VUX01zayAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTX0RBVE9VVF9EQVRPVVRfUG9zKSAgICAgIC8qITwgQ1JQVF9UOjpBRVNfREFUT1VUOiBEQVRPVVQgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzBfS0VZeF9LRVlfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMwX0tFWVs4XTogS0VZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFUzBfS0VZeF9LRVlfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMF9LRVl4X0tFWV9Qb3MpICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMwX0tFWVs4XTogS0VZIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTMF9JVnhfSVZfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzBfSVZbNF06IElWIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTMF9JVnhfSVZfTXNrICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMwX0lWeF9JVl9Qb3MpICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzBfSVZbNF06IElWIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMwX1NBRERSX1NBRERSX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMF9TQUREUjogU0FERFIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfQUVTMF9TQUREUl9TQUREUl9Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMwX1NBRERSX1NBRERSX1BvcykgICAgICAgLyohPCBDUlBUX1Q6OkFFUzBfU0FERFI6IFNBRERSIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTMF9EQUREUl9EQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzBfREFERFI6IERBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFUzBfREFERFJfREFERFJfTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMF9EQUREUl9EQUREUl9Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpBRVMwX0RBRERSOiBEQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzBfQ05UX0NOVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMwX0NOVDogQ05UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMwX0NOVF9DTlRfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzBfQ05UX0NOVF9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMF9DTlQ6IENOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMxX0tFWXhfS0VZX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMV9LRVlbOF06IEtFWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMxX0tFWXhfS0VZX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzFfS0VZeF9LRVlfUG9zKSAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMV9LRVlbOF06IEtFWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzFfSVZ4X0lWX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMxX0lWWzRdOiBJViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFUzFfSVZ4X0lWX01zayAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMV9JVnhfSVZfUG9zKSAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMxX0lWWzRdOiBJViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTMV9TQUREUl9TQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzFfU0FERFI6IFNBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFUzFfU0FERFJfU0FERFJfTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMV9TQUREUl9TQUREUl9Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpBRVMxX1NBRERSOiBTQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzFfREFERFJfREFERFJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMxX0RBRERSOiBEQUREUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMxX0RBRERSX0RBRERSX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzFfREFERFJfREFERFJfUG9zKSAgICAgICAvKiE8IENSUFRfVDo6QUVTMV9EQUREUjogREFERFIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMxX0NOVF9DTlRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMV9DTlQ6IENOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTMV9DTlRfQ05UX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMxX0NOVF9DTlRfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzFfQ05UOiBDTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTMl9LRVl4X0tFWV9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzJfS0VZeDogS0VZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFUzJfS0VZeF9LRVlfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMl9LRVl4X0tFWV9Qb3MpICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMyX0tFWXg6IEtFWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzJfSVZ4X0lWX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMyX0lWeDogSVYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMyX0lWeF9JVl9Nc2sgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzJfSVZ4X0lWX1BvcykgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMl9JVng6IElWIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMyX1NBRERSX1NBRERSX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMl9TQUREUjogU0FERFIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfQUVTMl9TQUREUl9TQUREUl9Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMyX1NBRERSX1NBRERSX1BvcykgICAgICAgLyohPCBDUlBUX1Q6OkFFUzJfU0FERFI6IFNBRERSIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTMl9EQUREUl9EQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzJfREFERFI6IERBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFUzJfREFERFJfREFERFJfTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTMl9EQUREUl9EQUREUl9Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpBRVMyX0RBRERSOiBEQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzJfQ05UX0NOVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMyX0NOVDogQ05UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMyX0NOVF9DTlRfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzJfQ05UX0NOVF9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTMl9DTlQ6IENOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMzX0tFWXhfS0VZX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTM19LRVlbOF06IEtFWSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMzX0tFWXhfS0VZX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzNfS0VZeF9LRVlfUG9zKSAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTM19LRVlbOF06IEtFWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzNfSVZ4X0lWX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMzX0lWWzRdOiBJViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDUlBUX0FFUzNfSVZ4X0lWX01zayAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTM19JVnhfSVZfUG9zKSAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMzX0lWWzRdOiBJViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfQUVTM19TQUREUl9TQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzNfU0FERFI6IFNBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0FFUzNfU0FERFJfU0FERFJfTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfQUVTM19TQUREUl9TQUREUl9Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpBRVMzX1NBRERSOiBTQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0FFUzNfREFERFJfREFERFJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpBRVMzX0RBRERSOiBEQUREUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9BRVMzX0RBRERSX0RBRERSX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0FFUzNfREFERFJfREFERFJfUG9zKSAgICAgICAvKiE8IENSUFRfVDo6QUVTM19EQUREUjogREFERFIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9BRVMzX0NOVF9DTlRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6QUVTM19DTlQ6IENOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfQUVTM19DTlRfQ05UX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9BRVMzX0NOVF9DTlRfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OkFFUzNfQ05UOiBDTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfU1RBUlRfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBTVEFSVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMX1NUQVJUX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX0NUTF9TVEFSVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogU1RBUlQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMX1NUT1BfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogU1RPUCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9TVE9QX01zayAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19DVExfU1RPUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IFNUT1AgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9UTU9ERV9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IFRNT0RFIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfVE1PREVfTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfQ1RMX1RNT0RFX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBUTU9ERSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfM0tFWVNfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiAzS0VZUyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMXzNLRVlTX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX0NUTF8zS0VZU19Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogM0tFWVMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0RNQUxBU1RfUG9zICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogRE1BTEFTVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9ETUFMQVNUX01zayAgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19DVExfRE1BTEFTVF9Qb3MpICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IERNQUxBU1QgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9ETUFDU0NBRF9Qb3MgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IERNQUNTQ0FEIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfRE1BQ1NDQURfTXNrICAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfQ1RMX0RNQUNTQ0FEX1BvcykgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBETUFDU0NBRCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfRE1BRU5fUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBETUFFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0RNQUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX0NUTF9ETUFFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogRE1BRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMX09QTU9ERV9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogT1BNT0RFIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9PUE1PREVfTXNrICAgICAgICAgKDB4N3VsIDw8IENSUFRfVERFU19DVExfT1BNT0RFX1BvcykgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IE9QTU9ERSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9FTkNSUFRfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IEVOQ1JQVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfRU5DUlBUX01zayAgICAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfQ1RMX0VOQ1JQVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBFTkNSUFQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfQkxLU1dBUF9Qb3MgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBCTEtTV0FQIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0JMS1NXQVBfTXNrICAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX0NUTF9CTEtTV0FQX1BvcykgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogQkxLU1dBUCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMX09VVFNXQVBfUG9zICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogT1VUU1dBUCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9PVVRTV0FQX01zayAgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19DVExfT1VUU1dBUF9Qb3MpICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IE9VVFNXQVAgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9JTlNXQVBfUG9zICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IElOU1dBUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfSU5TV0FQX01zayAgICAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfQ1RMX0lOU1dBUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBJTlNXQVAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19DVExfQ0hBTk5FTF9Qb3MgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBDSEFOTkVMIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0NIQU5ORUxfTXNrICAgICAgICAoMHgzdWwgPDwgQ1JQVF9UREVTX0NUTF9DSEFOTkVMX1BvcykgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogQ0hBTk5FTCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfQ1RMX0tFWVVOUFJUX1BvcyAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0NUTDogS0VZVU5QUlQgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9LRVlVTlBSVF9Nc2sgICAgICAgKDB4MWZ1bCA8PCBDUlBUX1RERVNfQ1RMX0tFWVVOUFJUX1BvcykgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IEtFWVVOUFJUIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX0NUTF9LRVlQUlRfUG9zICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19DVEw6IEtFWVBSVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFU19DVExfS0VZUFJUX01zayAgICAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfQ1RMX0tFWVBSVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfQ1RMOiBLRVlQUlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19TVFNfQlVTWV9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBCVVNZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfU1RTX0JVU1lfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX1NUU19CVVNZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogQlVTWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfU1RTX0lOQlVGRU1QVFlfUG9zICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogSU5CVUZFTVBUWSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19JTkJVRkVNUFRZX01zayAgICAgKDB4MXVsIDw8IENSUFRfVERFU19TVFNfSU5CVUZFTVBUWV9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IElOQlVGRU1QVFkgTWFzayAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19JTkJVRkZVTExfUG9zICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IElOQlVGRlVMTCBQb3NpdGlvbiAgICovCisjZGVmaW5lIENSUFRfVERFU19TVFNfSU5CVUZGVUxMX01zayAgICAgICgweDF1bCA8PCBDUlBUX1RERVNfU1RTX0lOQlVGRlVMTF9Qb3MpICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBJTkJVRkZVTEwgTWFzayAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19TVFNfSU5CVUZFUlJfUG9zICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBJTkJVRkVSUiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX1RERVNfU1RTX0lOQlVGRVJSX01zayAgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX1NUU19JTkJVRkVSUl9Qb3MpICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogSU5CVUZFUlIgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfU1RTX09VVEJVRkVNUFRZX1BvcyAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogT1VUQlVGRU1QVFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19PVVRCVUZFTVBUWV9Nc2sgICAgKDB4MXVsIDw8IENSUFRfVERFU19TVFNfT1VUQlVGRU1QVFlfUG9zKSAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IE9VVEJVRkVNUFRZIE1hc2sgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19PVVRCVUZGVUxMX1BvcyAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IE9VVEJVRkZVTEwgUG9zaXRpb24gICovCisjZGVmaW5lIENSUFRfVERFU19TVFNfT1VUQlVGRlVMTF9Nc2sgICAgICgweDF1bCA8PCBDUlBUX1RERVNfU1RTX09VVEJVRkZVTExfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBPVVRCVUZGVUxMIE1hc2sgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19TVFNfT1VUQlVGRVJSX1BvcyAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfU1RTOiBPVVRCVUZFUlIgUG9zaXRpb24gICAqLworI2RlZmluZSBDUlBUX1RERVNfU1RTX09VVEJVRkVSUl9Nc2sgICAgICAoMHgxdWwgPDwgQ1JQVF9UREVTX1NUU19PVVRCVUZFUlJfUG9zKSAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogT1VUQlVGRVJSIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfU1RTX0JVU0VSUl9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX1NUUzogQlVTRVJSIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX1NUU19CVVNFUlJfTXNrICAgICAgICAgKDB4MXVsIDw8IENSUFRfVERFU19TVFNfQlVTRVJSX1BvcykgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFU19TVFM6IEJVU0VSUiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMF9LRVl4SF9LRVlfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzBfS0VZeEg6IEtFWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzBfS0VZeEhfS0VZX01zayAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMF9LRVl4SF9LRVlfUG9zKSAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX0tFWXhIOiBLRVkgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzBfS0VZeExfS0VZX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX0tFWXhMOiBLRVkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX1RERVMwX0tFWXhMX0tFWV9Nc2sgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzBfS0VZeExfS0VZX1BvcykgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMF9LRVl4TDogS0VZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMwX0lWSF9JVl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMF9JVkg6IElWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMF9JVkhfSVZfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMwX0lWSF9JVl9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzBfSVZIOiBJViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMF9JVkxfSVZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzBfSVZMOiBJViBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzBfSVZMX0lWX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMF9JVkxfSVZfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX0lWTDogSVYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzBfU0FERFJfU0FERFJfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX1NBRERSOiBTQUREUiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX1RERVMwX1NBRERSX1NBRERSX01zayAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzBfU0FERFJfU0FERFJfUG9zKSAgICAgIC8qITwgQ1JQVF9UOjpUREVTMF9TQUREUjogU0FERFIgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMwX0RBRERSX0RBRERSX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMF9EQUREUjogREFERFIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMF9EQUREUl9EQUREUl9Nc2sgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMwX0RBRERSX0RBRERSX1BvcykgICAgICAvKiE8IENSUFRfVDo6VERFUzBfREFERFI6IERBRERSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMF9DTlRfQ05UX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzBfQ05UOiBDTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzBfQ05UX0NOVF9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMF9DTlRfQ05UX1BvcykgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMwX0NOVDogQ05UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFU19EQVRJTl9EQVRJTl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVNfREFUSU46IERBVElOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX1RERVNfREFUSU5fREFUSU5fTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFU19EQVRJTl9EQVRJTl9Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0RBVElOOiBEQVRJTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVNfREFUT1VUX0RBVE9VVF9Qb3MgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTX0RBVE9VVDogREFUT1VUIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTX0RBVE9VVF9EQVRPVVRfTXNrICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVNfREFUT1VUX0RBVE9VVF9Qb3MpICAgICAvKiE8IENSUFRfVDo6VERFU19EQVRPVVQ6IERBVE9VVCBNYXNrICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMV9LRVl4SF9LRVlfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzFfS0VZeEg6IEtFWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzFfS0VZeEhfS0VZX01zayAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMV9LRVl4SF9LRVlfUG9zKSAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX0tFWXhIOiBLRVkgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzFfS0VZeExfS0VZX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX0tFWXhMOiBLRVkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX1RERVMxX0tFWXhMX0tFWV9Nc2sgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzFfS0VZMUxfS0VZX1BvcykgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMV9LRVl4TDogS0VZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMxX0lWSF9JVl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMV9JVkg6IElWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMV9JVkhfSVZfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMxX0lWSF9JVl9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzFfSVZIOiBJViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMV9JVkxfSVZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzFfSVZMOiBJViBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzFfSVZMX0lWX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMV9JVkxfSVZfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX0lWTDogSVYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzFfU0FERFJfU0FERFJfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX1NBRERSOiBTQUREUiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX1RERVMxX1NBRERSX1NBRERSX01zayAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzFfU0FERFJfU0FERFJfUG9zKSAgICAgIC8qITwgQ1JQVF9UOjpUREVTMV9TQUREUjogU0FERFIgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMxX0RBRERSX0RBRERSX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMV9EQUREUjogREFERFIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMV9EQUREUl9EQUREUl9Nc2sgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMxX0RBRERSX0RBRERSX1BvcykgICAgICAvKiE8IENSUFRfVDo6VERFUzFfREFERFI6IERBRERSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMV9DTlRfQ05UX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzFfQ05UOiBDTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzFfQ05UX0NOVF9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMV9DTlRfQ05UX1BvcykgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMxX0NOVDogQ05UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzJfS0VZeEhfS0VZX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMyX0tFWXhIOiBLRVkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX1RERVMyX0tFWXhIX0tFWV9Nc2sgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzJfS0VZeEhfS0VZX1BvcykgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9LRVl4SDogS0VZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMyX0tFWXhMX0tFWV9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9LRVl4TDogS0VZIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMl9LRVl4TF9LRVlfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMyX0tFWXhMX0tFWV9Qb3MpICAgICAgICAvKiE8IENSUFRfVDo6VERFUzJfS0VZeEw6IEtFWSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMl9JVkhfSVZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzJfSVZIOiBJViBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzJfSVZIX0lWX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMl9JVkhfSVZfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMyX0lWSDogSVYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzJfSVZMX0lWX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMyX0lWTDogSVYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVMyX0lWTF9JVl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzJfSVZMX0lWX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9JVkw6IElWIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMyX1NBRERSX1NBRERSX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9TQUREUjogU0FERFIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTMl9TQUREUl9TQUREUl9Nc2sgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMyX1NBRERSX1NBRERSX1BvcykgICAgICAvKiE8IENSUFRfVDo6VERFUzJfU0FERFI6IFNBRERSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTMl9EQUREUl9EQUREUl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzJfREFERFI6IERBRERSIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENSUFRfVERFUzJfREFERFJfREFERFJfTXNrICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTMl9EQUREUl9EQUREUl9Qb3MpICAgICAgLyohPCBDUlBUX1Q6OlRERVMyX0RBRERSOiBEQUREUiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzJfQ05UX0NOVF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMyX0NOVDogQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVMyX0NOVF9DTlRfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzJfQ05UX0NOVF9Qb3MpICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTMl9DTlQ6IENOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMzX0tFWXhIX0tFWV9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTM19LRVl4SDogS0VZIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTM19LRVl4SF9LRVlfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMzX0tFWXhIX0tFWV9Qb3MpICAgICAgICAvKiE8IENSUFRfVDo6VERFUzNfS0VZeEg6IEtFWSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTM19LRVl4TF9LRVlfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzNfS0VZeEw6IEtFWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfVERFUzNfS0VZeExfS0VZX01zayAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTM19LRVl4TF9LRVlfUG9zKSAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMzX0tFWXhMOiBLRVkgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzNfSVZIX0lWX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMzX0lWSDogSVYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX1RERVMzX0lWSF9JVl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzNfSVZIX0lWX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTM19JVkg6IElWIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMzX0lWTF9JVl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTM19JVkw6IElWIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTM19JVkxfSVZfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMzX0lWTF9JVl9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzNfSVZMOiBJViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9UREVTM19TQUREUl9TQUREUl9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzNfU0FERFI6IFNBRERSIFBvc2l0aW9uICAgICovCisjZGVmaW5lIENSUFRfVERFUzNfU0FERFJfU0FERFJfTXNrICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9UREVTM19TQUREUl9TQUREUl9Qb3MpICAgICAgLyohPCBDUlBUX1Q6OlRERVMzX1NBRERSOiBTQUREUiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIENSUFRfVERFUzNfREFERFJfREFERFJfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OlRERVMzX0RBRERSOiBEQUREUiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX1RERVMzX0RBRERSX0RBRERSX01zayAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfVERFUzNfREFERFJfREFERFJfUG9zKSAgICAgIC8qITwgQ1JQVF9UOjpUREVTM19EQUREUjogREFERFIgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX1RERVMzX0NOVF9DTlRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpUREVTM19DTlQ6IENOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9UREVTM19DTlRfQ05UX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX1RERVMzX0NOVF9DTlRfUG9zKSAgICAgICAgICAvKiE8IENSUFRfVDo6VERFUzNfQ05UOiBDTlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX0NUTF9TVEFSVF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19DVEw6IFNUQVJUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfSE1BQ19DVExfU1RBUlRfTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0hNQUNfQ1RMX1NUQVJUX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBTVEFSVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19DVExfU1RPUF9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBTVE9QIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfQ1RMX1NUT1BfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9ITUFDX0NUTF9TVE9QX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0NUTDogU1RPUCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfQ1RMX0RNQUxBU1RfUG9zICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0NUTDogRE1BTEFTVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX0NUTF9ETUFMQVNUX01zayAgICAgICAgKDB4MXVsIDw8IENSUFRfSE1BQ19DVExfRE1BTEFTVF9Qb3MpICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19DVEw6IERNQUxBU1QgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX0NUTF9ETUFFTl9Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19DVEw6IERNQUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfSE1BQ19DVExfRE1BRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBDUlBUX0hNQUNfQ1RMX0RNQUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBETUFFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19DVExfT1BNT0RFX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBPUE1PREUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfQ1RMX09QTU9ERV9Nc2sgICAgICAgICAoMHg3dWwgPDwgQ1JQVF9ITUFDX0NUTF9PUE1PREVfUG9zKSAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0NUTDogT1BNT0RFIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfQ1RMX09VVFNXQVBfUG9zICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0NUTDogT1VUU1dBUCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX0NUTF9PVVRTV0FQX01zayAgICAgICAgKDB4MXVsIDw8IENSUFRfSE1BQ19DVExfT1VUU1dBUF9Qb3MpICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19DVEw6IE9VVFNXQVAgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX0NUTF9JTlNXQVBfUG9zICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19DVEw6IElOU1dBUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfSE1BQ19DVExfSU5TV0FQX01zayAgICAgICAgICgweDF1bCA8PCBDUlBUX0hNQUNfQ1RMX0lOU1dBUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfQ1RMOiBJTlNXQVAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19TVFNfQlVTWV9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfU1RTOiBCVVNZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfU1RTX0JVU1lfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9ITUFDX1NUU19CVVNZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX1NUUzogQlVTWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfU1RTX0RNQUJVU1lfUG9zICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX1NUUzogRE1BQlVTWSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX1NUU19ETUFCVVNZX01zayAgICAgICAgKDB4MXVsIDw8IENSUFRfSE1BQ19TVFNfRE1BQlVTWV9Qb3MpICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19TVFM6IERNQUJVU1kgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX1NUU19ETUFFUlJfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19TVFM6IERNQUVSUiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfSE1BQ19TVFNfRE1BRVJSX01zayAgICAgICAgICgweDF1bCA8PCBDUlBUX0hNQUNfU1RTX0RNQUVSUl9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfU1RTOiBETUFFUlIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19TVFNfREFUSU5SRVFfUG9zICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfU1RTOiBEQVRJTlJFUSBQb3NpdGlvbiAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfU1RTX0RBVElOUkVRX01zayAgICAgICAoMHgxdWwgPDwgQ1JQVF9ITUFDX1NUU19EQVRJTlJFUV9Qb3MpICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX1NUUzogREFUSU5SRVEgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfREdTVHhfREdTVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0RHU1R4OiBER1NUIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX0RHU1R4X0RHU1RfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0hNQUNfREdTVHhfREdTVF9Qb3MpICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19ER1NUeDogREdTVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX0tFWUNOVF9LRVlDTlRfUG9zICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19LRVlDTlQ6IEtFWUNOVCBQb3NpdGlvbiAgICovCisjZGVmaW5lIENSUFRfSE1BQ19LRVlDTlRfS0VZQ05UX01zayAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9ITUFDX0tFWUNOVF9LRVlDTlRfUG9zKSAgICAgLyohPCBDUlBUX1Q6OkhNQUNfS0VZQ05UOiBLRVlDTlQgTWFzayAgICAgICAqLworCisjZGVmaW5lIENSUFRfSE1BQ19TQUREUl9TQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfU0FERFI6IFNBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBDUlBUX0hNQUNfU0FERFJfU0FERFJfTXNrICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfSE1BQ19TQUREUl9TQUREUl9Qb3MpICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX1NBRERSOiBTQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0hNQUNfRE1BQ05UX0RNQUNOVF9Qb3MgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpITUFDX0RNQUNOVDogRE1BQ05UIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgQ1JQVF9ITUFDX0RNQUNOVF9ETUFDTlRfTXNrICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0hNQUNfRE1BQ05UX0RNQUNOVF9Qb3MpICAgICAvKiE8IENSUFRfVDo6SE1BQ19ETUFDTlQ6IERNQUNOVCBNYXNrICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9ITUFDX0RBVElOX0RBVElOX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6SE1BQ19EQVRJTjogREFUSU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIENSUFRfSE1BQ19EQVRJTl9EQVRJTl9Nc2sgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9ITUFDX0RBVElOX0RBVElOX1BvcykgICAgICAgLyohPCBDUlBUX1Q6OkhNQUNfREFUSU46IERBVElOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0NUTF9TVEFSVF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IFNUQVJUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19DVExfU1RBUlRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9FQ0NfQ1RMX1NUQVJUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBTVEFSVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19DVExfU1RPUF9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBTVE9QIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX1NUT1BfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfRUNDX0NUTF9TVE9QX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogU1RPUCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0RNQUVOX1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogRE1BRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0NUTF9ETUFFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0VDQ19DVExfRE1BRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IERNQUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0NUTF9GU0VMX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IEZTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19DVExfRlNFTF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9FQ0NfQ1RMX0ZTRUxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBGU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19DVExfRUNDT1BfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBFQ0NPUCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0VDQ09QX01zayAgICAgICAgICAgKDB4M3VsIDw8IENSUFRfRUNDX0NUTF9FQ0NPUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogRUNDT1AgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX01PRE9QX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogTU9ET1AgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0NUTF9NT0RPUF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBDUlBUX0VDQ19DVExfTU9ET1BfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IE1PRE9QIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0NUTF9MRFAxX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IExEUDEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19DVExfTERQMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9FQ0NfQ1RMX0xEUDFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBMRFAxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19DVExfTERQMl9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBMRFAyIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0xEUDJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfRUNDX0NUTF9MRFAyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogTERQMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0xEQV9Qb3MgICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogTERBIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0NUTF9MREFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0VDQ19DVExfTERBX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IExEQSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0NUTF9MREJfUG9zICAgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IExEQiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19DVExfTERCX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9FQ0NfQ1RMX0xEQl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBMREIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19DVExfTEROX1BvcyAgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBMRE4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0xETl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfRUNDX0NUTF9MRE5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogTEROIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfQ1RMX0xES19Qb3MgICAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0NUTDogTERLIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0NUTF9MREtfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBDUlBUX0VDQ19DVExfTERLX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IExESyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0NUTF9DVVJWRU1fUG9zICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19DVEw6IENVUlZFTSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19DVExfQ1VSVkVNX01zayAgICAgICAgICAoMHgzZmZ1bCA8PCBDUlBUX0VDQ19DVExfQ1VSVkVNX1BvcykgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQ1RMOiBDVVJWRU0gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19TVFNfQlVTWV9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfU1RTOiBCVVNZIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfU1RTX0JVU1lfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IENSUFRfRUNDX1NUU19CVVNZX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1NUUzogQlVTWSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfU1RTX0RNQUJVU1lfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1NUUzogRE1BQlVTWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX1NUU19ETUFCVVNZX01zayAgICAgICAgICgweDF1bCA8PCBDUlBUX0VDQ19TVFNfRE1BQlVTWV9Qb3MpICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19TVFM6IERNQUJVU1kgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX1NUU19CVVNFUlJfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19TVFM6IEJVU0VSUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19TVFNfQlVTRVJSX01zayAgICAgICAgICAoMHgxdWwgPDwgQ1JQVF9FQ0NfU1RTX0JVU0VSUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfU1RTOiBCVVNFUlIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19YMV9QT0lOVFgxX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfWDE6ICBQT0lOVFgxIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfWDFfUE9JTlRYMV9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0VDQ19YMV9QT0lOVFgxX1BvcykgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1gxOiAgUE9JTlRYMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfWTFfUE9JTlRZMV9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1kxOiBQT0lOVFkxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX1kxX1BPSU5UWTFfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9FQ0NfWTFfUE9JTlRZMV9Qb3MpICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19ZMTogUE9JTlRZMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX1gyX1BPSU5UWDJfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19YMjogUE9JTlRYMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19YMl9QT0lOVFgyX01zayAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfRUNDX1gyX1BPSU5UWDJfUG9zKSAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfWDI6IFBPSU5UWDIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19ZMl9QT0lOVFkyX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfWTI6IFBPSU5UWTIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfWTJfUE9JTlRZMl9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0VDQ19ZMl9QT0lOVFkyX1BvcykgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1kyOiBQT0lOVFkyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfQV9DVVJWRUFfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0E6IENVUlZFQSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0FfQ1VSVkVBX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9FQ0NfQV9DVVJWRUFfUG9zKSAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19BOiBDVVJWRUEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0JfQ1VSVkVCX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19COiBDVVJWRUIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19CX0NVUlZFQl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfRUNDX0JfQ1VSVkVCX1BvcykgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfQjogQ1VSVkVCIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19OX0NVUlZFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfTjogQ1VSVkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfTl9DVVJWRU5fTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0VDQ19OX0NVUlZFTl9Qb3MpICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX046IENVUlZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfS19TQ0FMQVJLX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX0s6IFNDQUxBUksgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIENSUFRfRUNDX0tfU0NBTEFSS19Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9FQ0NfS19TQ0FMQVJLX1BvcykgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19LOiBTQ0FMQVJLIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIENSUFRfRUNDX0RBRERSX0RBRERSX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUlBUX1Q6OkVDQ19EQUREUjogREFERFIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBDUlBUX0VDQ19EQUREUl9EQUREUl9Nc2sgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IENSUFRfRUNDX0RBRERSX0RBRERSX1BvcykgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfREFERFI6IERBRERSIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBDUlBUX0VDQ19TVEFSVFJFR19TVEFSVFJFR19Qb3MgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JQVF9UOjpFQ0NfU1RBUlRSRUc6IFNUQVJUUkVHIFBvc2l0aW9uKi8KKyNkZWZpbmUgQ1JQVF9FQ0NfU1RBUlRSRUdfU1RBUlRSRUdfTXNrICAgKDB4ZmZmZmZmZmZ1bCA8PCBDUlBUX0VDQ19TVEFSVFJFR19TVEFSVFJFR19Qb3MpICAvKiE8IENSUFRfVDo6RUNDX1NUQVJUUkVHOiBTVEFSVFJFRyBNYXNrICAgICovCisKKyNkZWZpbmUgQ1JQVF9FQ0NfV09SRENOVF9XT1JEQ05UX1BvcyAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENSUFRfVDo6RUNDX1dPUkRDTlQ6IFdPUkRDTlQgUG9zaXRpb24gICovCisjZGVmaW5lIENSUFRfRUNDX1dPUkRDTlRfV09SRENOVF9Nc2sgICAgICgweGZmZmZmZmZmdWwgPDwgQ1JQVF9FQ0NfV09SRENOVF9XT1JEQ05UX1BvcykgICAgLyohPCBDUlBUX1Q6OkVDQ19XT1JEQ05UOiBXT1JEQ05UIE1hc2sgICAgICAqLworCisvKipAfSovIC8qIENSUFRfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIENSUFQgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworI2VuZGlmIC8qIF9fQ1JQVF9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZGFjX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2RhY19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODUzYWQwCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2RhY19yZWcuaApAQCAtMCwwICsxLDIwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGRhY19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgREFDIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0RBQ19SRUdfSF9fCisjZGVmaW5lIF9fREFDX1JFR19IX18KKworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEaWdpdGFsIHRvIEFuYWxvZyBDb252ZXJ0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBEQUMgRGlnaXRhbCB0byBBbmFsb2cgQ29udmVydGVyKERBQykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgREFDIENvbnRyb2xsZXIKK0B7ICovCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIERBQ19UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIERBQyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8REFDRU4gICAgIHxEQUMgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEQUMgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERBQyBpcyBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxEQUNJRU4gICAgfERBQyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBpcyBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxETUFFTiAgICAgfERNQSBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRE1BIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERNQSBtb2RlIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfERNQVVSSUVOICB8RE1BIFVuZGVyLXJ1biBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBETUEgdW5kZXItcnVuIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRE1BIHVuZGVyLXJ1biBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8VFJHRU4gICAgIHxUcmlnZ2VyIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEQUMgZXZlbnQgdHJpZ2dlciBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEQUMgZXZlbnQgdHJpZ2dlciBtb2RlIEVuYWJsZWQuCisgICAgICogfFs3OjVdICAgfFRSR1NFTCAgICB8VHJpZ2dlciBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gU29mdHdhcmUgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBFeHRlcm5hbCBwaW4gREFDMF9TVCB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFRpbWVyIDAgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBUaW1lciAxIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gVGltZXIgMiB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IFRpbWVyIDMgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBFUFdNMCB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IEVQV00xIHRyaWdnZXIuCisgICAgICogfFs4XSAgICAgfEJZUEFTUyAgICB8QnlwYXNzIEJ1ZmZlciBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCB2b2x0YWdlIGJ1ZmZlciBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXRwdXQgdm9sdGFnZSBidWZmZXIgRGlzYWJsZWQuCisgICAgICogfFsxMF0gICAgfExBTElHTiAgICB8REFDIERhdGEgTGVmdC1hbGlnbmVkIEVuYWJsZWQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSaWdodCBhbGlnbm1lbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExlZnQgYWxpZ25tZW50LgorICAgICAqIHxbMTM6MTJdIHxFVFJHU0VMICAgfEV4dGVybmFsIFBpbiBUcmlnZ2VyIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTG93IGxldmVsIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBIaWdoIGxldmVsIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBGYWxsaW5nIGVkZ2UgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJpc2luZyBlZGdlIHRyaWdnZXIuCisgICAgICogfFsxNToxNF0gfEJXU0VMICAgICB8REFDIERhdGEgQml0LXdpZHRoIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gZGF0YSBpcyAxMiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gZGF0YSBpcyA4IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gcmVzZXJ2ZWQuCisgICAgICogfFsxNl0gICAgfEdSUEVOICAgICB8REFDIEdyb3VwIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEQUMwIGFuZCBEQUMxIGFyZSBub3QgZ3JvdXBlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gREFDMCBhbmQgREFDMSBhcmUgZ3JvdXBlZC4KKyAgICAgKiBAdmFyIERBQ19UOjpTV1RSRworICAgICAqIE9mZnNldDogMHgwNCAgREFDIFNvZnR3YXJlIFRyaWdnZXIgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNXVFJHICAgICB8U29mdHdhcmUgVHJpZ2dlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTb2Z0d2FyZSB0cmlnZ2VyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTb2Z0d2FyZSB0cmlnZ2VyIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciB3cml0ZXMgdGhpcyBiaXQgdG8gZ2VuZXJhdGUgb25lIHNob3QgcHVsc2UgYW5kIGl0IGlzIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5OyBSZWFkaW5nIHRoaXMgYml0IHdpbGwgYWx3YXlzIGdldCAwLgorICAgICAqIEB2YXIgREFDX1Q6OkRBVAorICAgICAqIE9mZnNldDogMHgwOCAgREFDIERhdGEgSG9sZGluZyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfERBQ0RBVCAgICB8REFDIDEyLWJpdCBIb2xkaW5nIERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB3cml0dGVuIGJ5IHVzZXIgc29mdHdhcmUgd2hpY2ggc3BlY2lmaWVzIDEyLWJpdCBjb252ZXJzaW9uIGRhdGEgZm9yIERBQyBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHVudXNlZCBiaXRzIChEQUNEQVRbMzowXSBpbiBsZWZ0LWFsaWdubWVudCBtb2RlIGFuZCBEQUNEQVRbMTU6MTJdIGluIHJpZ2h0IGFsaWdubWVudCBtb2RlKSBhcmUgaWdub3JlZCBieSBEQUMgY29udHJvbGxlciBoYXJkd2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMiBiaXQgbGVmdCBhbGlnbm1lbnQ6IHVzZXIgaGFzIHRvIGxvYWQgZGF0YSBpbnRvIERBQ0RBVFsxNTo0XSBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEyIGJpdCByaWdodCBhbGlnbm1lbnQ6IHVzZXIgaGFzIHRvIGxvYWQgZGF0YSBpbnRvIERBQ0RBVFsxMTowXSBiaXRzLgorICAgICAqIEB2YXIgREFDX1Q6OkRBVE9VVAorICAgICAqIE9mZnNldDogMHgwQyAgREFDIERhdGEgT3V0cHV0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzExOjBdICB8REFUT1VUICAgIHxEQUMgMTItYml0IE91dHB1dCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgY3VycmVudCBkaWdpdGFsIGRhdGEgZm9yIERBQyBvdXRwdXQgY29udmVyc2lvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBsb2FkZWQgZnJvbSBEQUNfREFUIHJlZ2lzdGVyIGFuZCB1c2VyIGNhbm5vdCB3cml0ZSBpdCBkaXJlY3RseS4KKyAgICAgKiBAdmFyIERBQ19UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIERBQyBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxGSU5JU0ggICAgfERBQyBDb252ZXJzaW9uIENvbXBsZXRlIEZpbmlzaCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERBQyBpcyBpbiBjb252ZXJzaW9uIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEQUMgY29udmVyc2lvbiBmaW5pc2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2V0IHRvIDEgd2hlbiBjb252ZXJzaW9uIHRpbWUgY291bnRlciBjb3VudHMgdG8gU0VUVExFVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIHRvIDAgd2hlbiBEQUMgc3RhcnRzIGEgbmV3IGNvbnZlcnNpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciB3cml0ZXMgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHxbMV0gICAgIHxETUFVRFIgICAgfERNQSBVbmRlci1ydW4gSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gRE1BIHVuZGVyLXJ1biBlcnJvciBjb25kaXRpb24gb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERNQSB1bmRlci1ydW4gZXJyb3IgY29uZGl0aW9uIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgd3JpdGVzIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFs4XSAgICAgfEJVU1kgICAgICB8REFDIEJ1c3kgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEQUMgaXMgcmVhZHkgZm9yIG5leHQgY29udmVyc2lvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gREFDIGlzIGJ1c3kgaW4gY29udmVyc2lvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGlzIHJlYWQgb25seSBiaXQuCisgICAgICogQHZhciBEQUNfVDo6VENUTAorICAgICAqIE9mZnNldDogMHgxNCAgREFDIFRpbWluZyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzk6MF0gICB8U0VUVExFVCAgIHxEQUMgT3V0cHV0IFNldHRsaW5nIFRpbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIHNvZnR3YXJlIG5lZWRzIHRvIHdyaXRlIGFwcHJvcHJpYXRlIHZhbHVlIHRvIHRoZXNlIGJpdHMgdG8gbWVldCBEQUMgY29udmVyc2lvbiBzZXR0bGluZyB0aW1lIGJhc2Ugb24gUENMSyAoQVBCIGNsb2NrKSBzcGVlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgZXhhbXBsZSwgREFDIGNvbnRyb2xsZXIgY2xvY2sgc3BlZWQgaXMgNjRNSHogYW5kIERBQyBjb252ZXJzaW9uIHNldHRpbmcgdGltZSBpcyAxIHVzLCBTRVRUTEVUIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDB4NDAuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gREFDIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1dUUkc7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIERBQyBTb2Z0d2FyZSBUcmlnZ2VyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERBVDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBEQUMgRGF0YSBIb2xkaW5nIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBEQVRPVVQ7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gREFDIERhdGEgT3V0cHV0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1RBVFVTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIERBQyBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRDVEw7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBEQUMgVGltaW5nIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gREFDX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIERBQ19DT05TVCBEQUMgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgREFDIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgREFDX0NUTF9EQUNFTl9Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IERBQ0VOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIERBQ19DVExfREFDRU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBEQUNfQ1RMX0RBQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBEQUNFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19DVExfREFDSUVOX1BvcyAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBEQUNJRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBEQUNfQ1RMX0RBQ0lFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgREFDX0NUTF9EQUNJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogREFDSUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfQ1RMX0RNQUVOX1BvcyAgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogRE1BRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX0NUTF9ETUFFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IERBQ19DVExfRE1BRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IERNQUVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX0NUTF9ETUFVUklFTl9Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IERNQVVSSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIERBQ19DVExfRE1BVVJJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBEQUNfQ1RMX0RNQVVSSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBETUFVUklFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19DVExfVFJHRU5fUG9zICAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBUUkdFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBEQUNfQ1RMX1RSR0VOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgREFDX0NUTF9UUkdFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogVFJHRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfQ1RMX1RSR1NFTF9Qb3MgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogVFJHU0VMIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX0NUTF9UUkdTRUxfTXNrICAgICAgICAgICAgICAgKDB4N3VsIDw8IERBQ19DVExfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IFRSR1NFTCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX0NUTF9CWVBBU1NfUG9zICAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IEJZUEFTUyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIERBQ19DVExfQllQQVNTX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBEQUNfQ1RMX0JZUEFTU19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBCWVBBU1MgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19DVExfTEFMSUdOX1BvcyAgICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBMQUxJR04gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBEQUNfQ1RMX0xBTElHTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgREFDX0NUTF9MQUxJR05fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogTEFMSUdOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfQ1RMX0VUUkdTRUxfUG9zICAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogRVRSR1NFTCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX0NUTF9FVFJHU0VMX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IERBQ19DVExfRVRSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IEVUUkdTRUwgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX0NUTF9CV1NFTF9Qb3MgICAgICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpDVEw6IEJXU0VMIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIERBQ19DVExfQldTRUxfTXNrICAgICAgICAgICAgICAgICgweDN1bCA8PCBEQUNfQ1RMX0JXU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBCV1NFTCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19DVExfR1JQRU5fUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6Q1RMOiBHUlBFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBEQUNfQ1RMX0dSUEVOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgREFDX0NUTF9HUlBFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkNUTDogR1JQRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfU1dUUkdfU1dUUkdfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OlNXVFJHOiBTV1RSRyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX1NXVFJHX1NXVFJHX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IERBQ19TV1RSR19TV1RSR19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpTV1RSRzogU1dUUkcgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX0RBVF9EQUNEQVRfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpEQVQ6IERBQ0RBVCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIERBQ19EQVRfREFDREFUX01zayAgICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBEQUNfREFUX0RBQ0RBVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6REFUOiBEQUNEQVQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19EQVRPVVRfREFUT1VUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6REFUT1VUOiBEQVRPVVQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBEQUNfREFUT1VUX0RBVE9VVF9Nc2sgICAgICAgICAgICAoMHhmZmZ1bCA8PCBEQUNfREFUT1VUX0RBVE9VVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OkRBVE9VVDogREFUT1VUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfU1RBVFVTX0ZJTklTSF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OlNUQVRVUzogRklOSVNIIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgREFDX1NUQVRVU19GSU5JU0hfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IERBQ19TVEFUVVNfRklOSVNIX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpTVEFUVVM6IEZJTklTSCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgREFDX1NUQVRVU19ETUFVRFJfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpTVEFUVVM6IERNQVVEUiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIERBQ19TVEFUVVNfRE1BVURSX01zayAgICAgICAgICAgICgweDF1bCA8PCBEQUNfU1RBVFVTX0RNQVVEUl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6U1RBVFVTOiBETUFVRFIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBQ19TVEFUVVNfQlVTWV9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUNfVDo6U1RBVFVTOiBCVVNZIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBEQUNfU1RBVFVTX0JVU1lfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgREFDX1NUQVRVU19CVVNZX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OlNUQVRVUzogQlVTWSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfVENUTF9TRVRUTEVUX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDX1Q6OlRDVEw6IFNFVFRMRVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgREFDX1RDVExfU0VUVExFVF9Nc2sgICAgICAgICAgICAgKDB4M2ZmdWwgPDwgREFDX1RDVExfU0VUVExFVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IERBQ19UOjpUQ1RMOiBTRVRUTEVUIE1hc2sgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogREFDX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBEQUMgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX0RBQ19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZWFkY19yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9lYWRjX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzA3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZWFkY19yZWcuaApAQCAtMCwwICsxLDE3MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBlYWRjX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBFQURDIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0VBRENfUkVHX0hfXworI2RlZmluZSBfX0VBRENfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFbmhhbmNlZCBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBFQURDIEVuaGFuY2VkIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRlcihFQURDKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBFQURDIENvbnRyb2xsZXIKK0B7ICovCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBFQURDX1Q6OkRBVFsxOV0KKyAgICAgKiBPZmZzZXQ6IDB4MDAgIEFEQyBEYXRhIFJlZ2lzdGVyIDB+MTggZm9yIFNhbXBsZSBNb2R1bGUgMH4xOAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFJFU1VMVCAgICB8QURDIENvbnZlcnNpb24gUmVzdWx0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjb250YWlucyAxMiBiaXRzIGNvbnZlcnNpb24gcmVzdWx0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gRE1PRiAoRUFEQ19DVExbOV0pIGlzIHNldCB0byAwLCAxMi1iaXQgQURDIGNvbnZlcnNpb24gcmVzdWx0IHdpdGggdW5zaWduZWQgZm9ybWF0IHdpbGwgYmUgZmlsbGVkIGluIFJFU1VMVFsxMTowXSBhbmQgemVybyB3aWxsIGJlIGZpbGxlZCBpbiBSRVNVTFRbMTU6MTJdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gRE1PRiAoRUFEQ19DVExbOV0pIHNldCB0byAxLCAxMi1iaXQgQURDIGNvbnZlcnNpb24gcmVzdWx0IHdpdGggMidjb21wbGVtZW50IGZvcm1hdCB3aWxsIGJlIGZpbGxlZCBpbiBSRVNVTFRbMTE6MF0gYW5kIHNpZ25lZCBiaXRzIHRvIHdpbGwgYmUgZmlsbGVkIGluIFJFU1VMVFsxNToxMl0uCisgICAgICogfFsxNl0gICAgfE9WICAgICAgICB8T3ZlcnJ1biBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgY29udmVydGVkIGRhdGEgaW4gUkVTVUxUWzExOjBdIGhhcyBub3QgYmVlbiByZWFkIGJlZm9yZSBuZXcgY29udmVyc2lvbiByZXN1bHQgaXMgbG9hZGVkIHRvIHRoaXMgcmVnaXN0ZXIsIE9WIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIGluIFJFU1VMVFsxMTowXSBpcyByZWNlbnQgY29udmVyc2lvbiByZXN1bHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgaW4gUkVTVUxUWzExOjBdIGlzIG92ZXJ3cml0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIEVBRENfREFUIHJlZ2lzdGVyIGlzIHJlYWQuCisgICAgICogfFsxN10gICAgfFZBTElEICAgICB8VmFsaWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byAxIHdoZW4gY29ycmVzcG9uZGluZyBzYW1wbGUgbW9kdWxlIGNoYW5uZWwgYW5hbG9nIGlucHV0IGNvbnZlcnNpb24gaXMgY29tcGxldGVkIGFuZCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIEVBRENfREFUIHJlZ2lzdGVyIGlzIHJlYWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgaW4gUkVTVUxUWzExOjBdIGJpdHMgaXMgbm90IHZhbGlkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEYXRhIGluIFJFU1VMVFsxMTowXSBiaXRzIGlzIHZhbGlkLgorICAgICAqIEB2YXIgRUFEQ19UOjpDVVJEQVQKKyAgICAgKiBPZmZzZXQ6IDB4NEMgIEFEQyBQRE1BIEN1cnJlbnQgVHJhbnNmZXIgRGF0YSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNzowXSAgfENVUkRBVCAgICB8QURDIFBETUEgQ3VycmVudCBUcmFuc2ZlciBEYXRhIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBpcyBhIHNoYWRvdyByZWdpc3RlciBvZiBFQURDX0RBVG4gKG49MH4xOCkgZm9yIFBETUEgc3VwcG9ydC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGlzIGEgcmVhZCBvbmx5IHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRUFEQ19UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NTAgIEFEQyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QURDRU4gICAgIHxBREMgQ29udmVydGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGlzYWJsZWQgRUFEQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZCBFQURDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEJlZm9yZSBzdGFydGluZyBBREMgY29udmVyc2lvbiBmdW5jdGlvbiwgdGhpcyBiaXQgc2hvdWxkIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2xlYXIgaXQgdG8gMCB0byBkaXNhYmxlIEFEQyBjb252ZXJ0ZXIgYW5hbG9nIGNpcmN1aXQgcG93ZXIgY29uc3VtcHRpb24uCisgICAgICogfFsxXSAgICAgfEFEQ1JTVCAgICB8QURDIENvbnZlcnRlciBDb250cm9sIENpcmN1aXRzIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2F1c2UgQURDIGNvbnRyb2wgY2lyY3VpdHMgcmVzZXQgdG8gaW5pdGlhbCBzdGF0ZSwgYnV0IG5vdCBjaGFuZ2UgdGhlIEFEQyByZWdpc3RlcnMgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQURDUlNUIGJpdCByZW1haW5zIDEgZHVyaW5nIEFEQyByZXNldCwgd2hlbiBBREMgcmVzZXQgZW5kLCB0aGUgQURDUlNUIGJpdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgdG8gMC4KKyAgICAgKiB8WzJdICAgICB8QURDSUVOMCAgIHxTcGVjaWZpYyBTYW1wbGUgTW9kdWxlIEFEQyBBRElOVDAgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQURDIGNvbnZlcnRlciBnZW5lcmF0ZXMgYSBjb252ZXJzaW9uIGVuZCBBRElGMCAoRUFEQ19TVEFUVVMyWzBdKSB1cG9uIHRoZSBlbmQgb2Ygc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBBREMgY29udmVyc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEFEQ0lFTjAgYml0IGlzIHNldCB0aGVuIGNvbnZlcnNpb24gZW5kIGludGVycnVwdCByZXF1ZXN0IEFESU5UMCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIEFESU5UMCBpbnRlcnJ1cHQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIEFESU5UMCBpbnRlcnJ1cHQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8QURDSUVOMSAgIHxTcGVjaWZpYyBTYW1wbGUgTW9kdWxlIEFEQyBBRElOVDEgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQURDIGNvbnZlcnRlciBnZW5lcmF0ZXMgYSBjb252ZXJzaW9uIGVuZCBBRElGMSAoRUFEQ19TVEFUVVMyWzFdKSB1cG9uIHRoZSBlbmQgb2Ygc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBBREMgY29udmVyc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEFEQ0lFTjEgYml0IGlzIHNldCB0aGVuIGNvbnZlcnNpb24gZW5kIGludGVycnVwdCByZXF1ZXN0IEFESU5UMSBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIEFESU5UMSBpbnRlcnJ1cHQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIEFESU5UMSBpbnRlcnJ1cHQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8QURDSUVOMiAgIHxTcGVjaWZpYyBTYW1wbGUgTW9kdWxlIEFEQyBBRElOVDIgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQURDIGNvbnZlcnRlciBnZW5lcmF0ZXMgYSBjb252ZXJzaW9uIGVuZCBBRElGMiAoRUFEQ19TVEFUVVMyWzJdKSB1cG9uIHRoZSBlbmQgb2Ygc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBBREMgY29udmVyc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEFEQ0lFTjIgYml0IGlzIHNldCB0aGVuIGNvbnZlcnNpb24gZW5kIGludGVycnVwdCByZXF1ZXN0IEFESU5UMiBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIEFESU5UMiBpbnRlcnJ1cHQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIEFESU5UMiBpbnRlcnJ1cHQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8QURDSUVOMyAgIHxTcGVjaWZpYyBTYW1wbGUgTW9kdWxlIEFEQyBBRElOVDMgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQURDIGNvbnZlcnRlciBnZW5lcmF0ZXMgYSBjb252ZXJzaW9uIGVuZCBBRElGMyAoRUFEQ19TVEFUVVMyWzNdKSB1cG9uIHRoZSBlbmQgb2Ygc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBBREMgY29udmVyc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEFEQ0lFTjMgYml0IGlzIHNldCB0aGVuIGNvbnZlcnNpb24gZW5kIGludGVycnVwdCByZXF1ZXN0IEFESU5UMyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIEFESU5UMyBpbnRlcnJ1cHQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIEFESU5UMyBpbnRlcnJ1cHQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8Wzc6Nl0gICB8UkVTU0VMICAgIHxSZXNvbHV0aW9uIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gNi1iaXQgQURDIHJlc3VsdCB3aWxsIGJlIHB1dCBhdCBSRVNVTFQgKEVBRENfREFUbls1OjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IDgtYml0IEFEQyByZXN1bHQgd2lsbCBiZSBwdXQgYXQgUkVTVUxUIChFQURDX0RBVG5bNzowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSAxMC1iaXQgQURDIHJlc3VsdCB3aWxsIGJlIHB1dCBhdCBSRVNVTFQgKEVBRENfREFUbls5OjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IDEyLWJpdCBBREMgcmVzdWx0IHdpbGwgYmUgcHV0IGF0IFJFU1VMVCAoRUFEQ19EQVRuWzExOjBdKS4KKyAgICAgKiB8WzhdICAgICB8RElGRkVOICAgIHxEaWZmZXJlbnRpYWwgQW5hbG9nIElucHV0IE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTaW5nbGUtZW5kIGFuYWxvZyBpbnB1dCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEaWZmZXJlbnRpYWwgYW5hbG9nIGlucHV0IG1vZGUuCisgICAgICogfFs5XSAgICAgfERNT0YgICAgICB8QURDIERpZmZlcmVudGlhbCBJbnB1dCBNb2RlIE91dHB1dCBGb3JtYXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQURDIGNvbnZlcnNpb24gcmVzdWx0IHdpbGwgYmUgZmlsbGVkIGluIFJFU1VMVCAoRUFEQ19EQVRuWzE1OjBdICwgbj0gMCB+MTgpIHdpdGggdW5zaWduZWQgZm9ybWF0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBREMgY29udmVyc2lvbiByZXN1bHQgd2lsbCBiZSBmaWxsZWQgaW4gUkVTVUxUIChFQURDX0RBVG5bMTU6MF0gLCBuPSAwIH4xOCkgd2l0aCAyJ2NvbXBsZW1lbnQgZm9ybWF0LgorICAgICAqIHxbMTFdICAgIHxQRE1BRU4gICAgfFBETUEgVHJhbnNmZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gQURDIGNvbnZlcnNpb24gaXMgY29tcGxldGVkLCB0aGUgY29udmVydGVkIGRhdGEgaXMgbG9hZGVkIGludG8gRUFEQ19EQVRuIChuOiAwIH4gMTgpIHJlZ2lzdGVyLCB1c2VyIGNhbiBlbmFibGUgdGhpcyBiaXQgdG8gZ2VuZXJhdGUgYSBQRE1BIGRhdGEgdHJhbnNmZXIgcmVxdWVzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBkYXRhIHRyYW5zZmVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIGRhdGEgdHJhbnNmZXIgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHNldCB0aGlzIGJpdCBmaWVsZCB0byAxLCB1c2VyIG11c3Qgc2V0IEFEQ0lFTm4gKEVBRENfQ1RMWzU6Ml0sIG49MH4zKSA9IDAgdG8gZGlzYWJsZSBpbnRlcnJ1cHQuCisgICAgICogQHZhciBFQURDX1Q6OlNXVFJHCisgICAgICogT2Zmc2V0OiAweDU0ICBBREMgU2FtcGxlIE1vZHVsZSBTb2Z0d2FyZSBTdGFydCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxODowXSAgfFNXVFJHICAgICB8QURDIFNhbXBsZSBNb2R1bGUgMH4xOCBTb2Z0d2FyZSBGb3JjZSB0byBTdGFydCBBREMgQ29udmVyc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhdXNlIGFuIEFEQyBjb252ZXJzaW9uIHdoZW4gdGhlIHByaW9yaXR5IGlzIGdpdmVuIHRvIHNhbXBsZSBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQWZ0ZXIgd3JpdGUgdGhpcyByZWdpc3RlciB0byBzdGFydCBBREMgY29udmVyc2lvbiwgdGhlIEVBRENfUEVORFNUUyByZWdpc3RlciB3aWxsIHNob3cgd2hpY2ggc2FtcGxlIG1vZHVsZSB3aWxsIGNvbnZlcnNpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1c2VyIHdhbnQgdG8gZGlzYWJsZSB0aGUgY29udmVyc2lvbiBvZiB0aGUgc2FtcGxlIG1vZHVsZSwgdXNlciBjYW4gd3JpdGUgRUFEQ19QRU5EU1RTIHJlZ2lzdGVyIHRvIGNsZWFyIGl0LgorICAgICAqIEB2YXIgRUFEQ19UOjpQRU5EU1RTCisgICAgICogT2Zmc2V0OiAweDU4ICBBREMgU3RhcnQgb2YgQ29udmVyc2lvbiBQZW5kaW5nIEZsYWcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTg6MF0gIHxTVFBGICAgICAgfEFEQyBTYW1wbGUgTW9kdWxlIDB+MTggU3RhcnQgb2YgQ29udmVyc2lvbiBQZW5kaW5nIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGVyZSBpcyBubyBwZW5kaW5nIGNvbnZlcnNpb24gZm9yIHNhbXBsZSBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBtb2R1bGUgQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24gaXMgcGVuZGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gY2xlYXIgcGVuZGluZyBmbGFnIGFuZCBjYW5jZWwgdGhlIGNvbnZlcnNpb24gZm9yIHNhbXBsZSBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgcmVtYWlucyAxIGR1cmluZyBwZW5kaW5nIHN0YXRlLCB3aGVuIHRoZSByZXNwZWN0aXZlIEFEQyBjb252ZXJzaW9uIGlzIGVuZCwgdGhlIFNUUEZuIChuPTB+MTgpIGJpdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgdG8gMAorICAgICAqIEB2YXIgRUFEQ19UOjpPVlNUUworICAgICAqIE9mZnNldDogMHg1QyAgQURDIFNhbXBsZSBNb2R1bGUgU3RhcnQgb2YgQ29udmVyc2lvbiBPdmVycnVuIEZsYWcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTg6MF0gIHxTUE9WRiAgICAgfEFEQyBTQU1QTEUwfjE4IE92ZXJydW4gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBzYW1wbGUgbW9kdWxlIGV2ZW50IG92ZXJydW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyBhIG5ldyBzYW1wbGUgbW9kdWxlIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGlsZSBhbiBvbGQgb25lIGV2ZW50IGlzIHBlbmRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogQHZhciBFQURDX1Q6OlNDVExbMTldCisgICAgICogT2Zmc2V0OiAweDgwICBBREMgU2FtcGxlIE1vZHVsZSAwfjE4IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxDSFNFTCAgICAgfEFEQyBTYW1wbGUgTW9kdWxlIENoYW5uZWwgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDBIID0gRUFEQ19DSDAgKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDFIID0gRUFEQ19DSDEgKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDJIID0gRUFEQ19DSDIgKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDNIID0gRUFEQ19DSDMgKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDRIID0gRUFEQ19DSDQgKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDVIID0gRUFEQ19DSDUgKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDZIID0gRUFEQ19DSDYgKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDdIID0gRUFEQ19DSDcgKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDhIID0gRUFEQ19DSDggKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDlIID0gRUFEQ19DSDkgKHNsb3cgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MEFIID0gRUFEQ19DSDEwIChmYXN0IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDBCSCA9IEVBRENfQ0gxMSAoZmFzdCBjaGFubmVsKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwQ0ggPSBFQURDX0NIMTIgKGZhc3QgY2hhbm5lbCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MERIID0gRUFEQ19DSDEzIChmYXN0IGNoYW5uZWwpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDBFSCA9IEVBRENfQ0gxNCAoZmFzdCBjaGFubmVsKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwRkggPSBFQURDX0NIMTUgKGZhc3QgY2hhbm5lbCkuCisgICAgICogfFs0XSAgICAgfEVYVFJFTiAgICB8QURDIEV4dGVybmFsIFRyaWdnZXIgUmlzaW5nIEVkZ2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSaXNpbmcgZWRnZSBEaXNhYmxlZCB3aGVuIEFEQyBzZWxlY3RzIEVBREMwX1NUIGFzIHRyaWdnZXIgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgZWRnZSBFbmFibGVkIHdoZW4gQURDIHNlbGVjdHMgRUFEQzBfU1QgYXMgdHJpZ2dlciBzb3VyY2UuCisgICAgICogfFs1XSAgICAgfEVYVEZFTiAgICB8QURDIEV4dGVybmFsIFRyaWdnZXIgRmFsbGluZyBFZGdlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmFsbGluZyBlZGdlIERpc2FibGVkIHdoZW4gQURDIHNlbGVjdHMgRUFEQzBfU1QgYXMgdHJpZ2dlciBzb3VyY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgZWRnZSBFbmFibGVkIHdoZW4gQURDIHNlbGVjdHMgRUFEQzBfU1QgYXMgdHJpZ2dlciBzb3VyY2UuCisgICAgICogfFs3OjZdICAgfFRSR0RMWURJViB8QURDIFNhbXBsZSBNb2R1bGUgU3RhcnQgb2YgQ29udmVyc2lvbiBUcmlnZ2VyIERlbGF5IENsb2NrIERpdmlkZXIgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VHJpZ2dlciBkZWxheSBjbG9jayBmcmVxdWVuY3k6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBBRENfQ0xLLzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBBRENfQ0xLLzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBBRENfQ0xLLzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBBRENfQ0xLLzE2LgorICAgICAqIHxbMTU6OF0gIHxUUkdETFlDTlQgfEFEQyBTYW1wbGUgTW9kdWxlIFN0YXJ0IG9mIENvbnZlcnNpb24gVHJpZ2dlciBEZWxheSBUaW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VHJpZ2dlciBkZWxheSB0aW1lID0gVFJHRExZQ05UIHggQURDX0NMSyB4IG4gKG49MSwyLDQsMTYgZnJvbSBUUkdETFlESVYgc2V0dGluZykuCisgICAgICogfFsyMDoxNl0gfFRSR1NFTCAgICB8QURDIFNhbXBsZSBNb2R1bGUgU3RhcnQgb2YgQ29udmVyc2lvbiBUcmlnZ2VyIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwSCA9IERpc2FibGUgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxSCA9IEV4dGVybmFsIHRyaWdnZXIgZnJvbSBFQURDMF9TVCBwaW4gaW5wdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MkggPSBBREMgQURJTlQwIGludGVycnVwdCBFT0MgKEVuZCBvZiBjb252ZXJzaW9uKSBwdWxzZSB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDNIID0gQURDIEFESU5UMSBpbnRlcnJ1cHQgRU9DIChFbmQgb2YgY29udmVyc2lvbikgcHVsc2UgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0SCA9IFRpbWVyMCBvdmVyZmxvdyBwdWxzZSB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDVIID0gVGltZXIxIG92ZXJmbG93IHB1bHNlIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NkggPSBUaW1lcjIgb3ZlcmZsb3cgcHVsc2UgdHJpZ2dlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw3SCA9IFRpbWVyMyBvdmVyZmxvdyBwdWxzZSB0cmlnZ2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDhIID0gRVBXTTBURzAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8OUggPSBFUFdNMFRHMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBSCA9IEVQV00wVEcyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJIID0gRVBXTTBURzMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q0ggPSBFUFdNMFRHNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxESCA9IEVQV00wVEc1LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVIID0gRVBXTTFURzAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RkggPSBFUFdNMVRHMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMEggPSBFUFdNMVRHMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMUggPSBFUFdNMVRHMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMkggPSBFUFdNMVRHNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxM0ggPSBFUFdNMVRHNS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxNEggPSBCUFdNMFRHLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE1SCA9IEJQV00xVEcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8b3RoZXIgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzIyXSAgICB8SU5UUE9TICAgIHxJbnRlcnJ1cHQgRmxhZyBQb3NpdGlvbiBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2V0IEFESUZuIChFQURDX1NUQVRVUzJbbl0sIG49MH4zKSBhdCBBREMgZW5kIG9mIGNvbnZlcnNpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBBRElGbiAoRUFEQ19TVEFUVVMyW25dLCBuPTB+MykgYXQgQURDIHN0YXJ0IG9mIGNvbnZlcnNpb24uCisgICAgICogfFsyM10gICAgfERCTUVOICAgICB8RG91YmxlIEJ1ZmZlciBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIGhhcyBvbmUgc2FtcGxlIHJlc3VsdCByZWdpc3Rlci4gKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgaGFzIHR3byBzYW1wbGUgcmVzdWx0IHJlZ2lzdGVycy4KKyAgICAgKiB8WzMxOjI0XSB8RVhUU01QVCAgIHxBREMgU2FtcGxpbmcgVGltZSBFeHRlbmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEFEQyBjb252ZXJ0aW5nIGF0IGhpZ2ggY29udmVyc2lvbiByYXRlLCB0aGUgc2FtcGxpbmcgdGltZSBvZiBhbmFsb2cgaW5wdXQgdm9sdGFnZSBtYXkgbm90IGVub3VnaCBpZiBpbnB1dCBjaGFubmVsIGxvYWRpbmcgaXMgaGVhdnksIHVzZXIgY2FuIGV4dGVuZCBBREMgc2FtcGxpbmcgdGltZSBhZnRlciB0cmlnZ2VyIHNvdXJjZSBpcyBjb21pbmcgdG8gZ2V0IGVub3VnaCBzYW1wbGluZyB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByYW5nZSBvZiBzdGFydCBkZWxheSB0aW1lIGlzIGZyb20gMH4yNTUgQURDIGNsb2NrLgorICAgICAqIEB2YXIgRUFEQ19UOjpJTlRTUkNbNF0KKyAgICAgKiBPZmZzZXQ6IDB4RDAgIEFEQyBpbnRlcnJ1cHQgMH4zIFNvdXJjZSBFbmFibGUgQ29udHJvbCBSZWdpc3Rlci4KKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTUExJRTAgICAgfFNhbXBsZSBNb2R1bGUgMCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDAgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDAgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFNQTElFMSAgICB8U2FtcGxlIE1vZHVsZSAxIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgMSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgMSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8U1BMSUUyICAgIHxTYW1wbGUgTW9kdWxlIDIgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSAyIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSAyIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxTUExJRTMgICAgfFNhbXBsZSBNb2R1bGUgMyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDMgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDMgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFNQTElFNCAgICB8U2FtcGxlIE1vZHVsZSA0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgNCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgNCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8U1BMSUU1ICAgIHxTYW1wbGUgTW9kdWxlIDUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSA1IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSA1IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxTUExJRTYgICAgfFNhbXBsZSBNb2R1bGUgNiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDYgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDYgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs3XSAgICAgfFNQTElFNyAgICB8U2FtcGxlIE1vZHVsZSA3IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgNyBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgNyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8U1BMSUU4ICAgIHxTYW1wbGUgTW9kdWxlIDggSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSA4IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSA4IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbOV0gICAgIHxTUExJRTkgICAgfFNhbXBsZSBNb2R1bGUgOSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDkgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDkgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMF0gICAgfFNQTElFMTAgICB8U2FtcGxlIE1vZHVsZSAxMCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDEwIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSAxMCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzExXSAgICB8U1BMSUUxMSAgIHxTYW1wbGUgTW9kdWxlIDExIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgMTEgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDExIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxTUExJRTEyICAgfFNhbXBsZSBNb2R1bGUgMTIgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSAxMiBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgMTIgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxM10gICAgfFNQTElFMTMgICB8U2FtcGxlIE1vZHVsZSAxMyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDEzIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSAxMyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE0XSAgICB8U1BMSUUxNCAgIHxTYW1wbGUgTW9kdWxlIDE0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgMTQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDE0IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTVdICAgIHxTUExJRTE1ICAgfFNhbXBsZSBNb2R1bGUgMTUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSAxNSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgMTUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxNl0gICAgfFNQTElFMTYgICB8U2FtcGxlIE1vZHVsZSAxNiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTYW1wbGUgTW9kdWxlIDE2IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2FtcGxlIE1vZHVsZSAxNiBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE3XSAgICB8U1BMSUUxNyAgIHxTYW1wbGUgTW9kdWxlIDE3IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNhbXBsZSBNb2R1bGUgMTcgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTYW1wbGUgTW9kdWxlIDE3IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMThdICAgIHxTUExJRTE4ICAgfFNhbXBsZSBNb2R1bGUgMTggSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2FtcGxlIE1vZHVsZSAxOCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNhbXBsZSBNb2R1bGUgMTggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogQHZhciBFQURDX1Q6OkNNUFs0XQorICAgICAqIE9mZnNldDogMHhFMCAgQURDIFJlc3VsdCBDb21wYXJlIFJlZ2lzdGVyIDB+MworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFEQ01QRU4gICB8QURDIFJlc3VsdCBDb21wYXJlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCB0byAxIHRvIGVuYWJsZSBjb21wYXJlIENNUERBVCAoRUFEQ19DTVBuWzI3OjE2XSwgbj0wfjMpIHdpdGggc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUgY29udmVyc2lvbiByZXN1bHQgd2hlbiBjb252ZXJ0ZWQgZGF0YSBpcyBsb2FkZWQgaW50byBFQURDX0RBVCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8QURDTVBJRSAgIHxBREMgUmVzdWx0IENvbXBhcmUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBmdW5jdGlvbiBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZnVuY3Rpb24gaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gaXMgZW5hYmxlZCBhbmQgdGhlIGNvbXBhcmUgY29uZGl0aW9uIG1hdGNoZXMgdGhlIHNldHRpbmcgb2YgQ01QQ09ORCAoRUFEQ19DTVBuWzJdLCBuPTB+MykgYW5kIENNUE1DTlQgKEVBRENfQ01QblsxMTo4XSwgbj0wfjMpLCBBRENNUEZuIChFQURDX1NUQVRVUzJbNzo0XSwgbj0wfjMpIHdpbGwgYmUgYXNzZXJ0ZWQsIGluIHRoZSBtZWFud2hpbGUsIGlmIEFEQ01QSUUgaXMgc2V0IHRvIDEsIGEgY29tcGFyZSBpbnRlcnJ1cHQgcmVxdWVzdCBpcyBnZW5lcmF0ZWQuCisgICAgICogfFsyXSAgICAgfENNUENPTkQgICB8Q29tcGFyZSBDb25kaXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwPSBTZXQgdGhlIGNvbXBhcmUgY29uZGl0aW9uIGFzIHRoYXQgd2hlbiBhIDEyLWJpdCBBREMgY29udmVyc2lvbiByZXN1bHQgaXMgbGVzcyB0aGFuIHRoZSAxMi1iaXQgQ01QREFUIChFQURDX0NNUG4gWzI3OjE2XSksIHRoZSBpbnRlcm5hbCBtYXRjaCBjb3VudGVyIHdpbGwgaW5jcmVhc2Ugb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE9IFNldCB0aGUgY29tcGFyZSBjb25kaXRpb24gYXMgdGhhdCB3aGVuIGEgMTItYml0IEFEQyBjb252ZXJzaW9uIHJlc3VsdCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSAxMi1iaXQgQ01QREFUIChFQURDX0NNUG4gWzI3OjE2XSksIHRoZSBpbnRlcm5hbCBtYXRjaCBjb3VudGVyIHdpbGwgaW5jcmVhc2Ugb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gdGhlIGludGVybmFsIGNvdW50ZXIgcmVhY2hlcyB0aGUgdmFsdWUgdG8gKENNUE1DTlQgKEVBRENfQ01QblsxMTo4XSwgbj0wfjMpICsxKSwgdGhlIENNUEYgYml0IHdpbGwgYmUgc2V0LgorICAgICAqIHxbNzozXSAgIHxDTVBTUEwgICAgfENvbXBhcmUgU2FtcGxlIE1vZHVsZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwMCA9IFNhbXBsZSBNb2R1bGUgMCBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDAgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMDEgPSBTYW1wbGUgTW9kdWxlIDEgY29udmVyc2lvbiByZXN1bHQgRUFEQ19EQVQxIGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEwID0gU2FtcGxlIE1vZHVsZSAyIGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMiBpcyBzZWxlY3RlZCB0byBiZSBjb21wYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxMSA9IFNhbXBsZSBNb2R1bGUgMyBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDMgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMDAgPSBTYW1wbGUgTW9kdWxlIDQgY29udmVyc2lvbiByZXN1bHQgRUFEQ19EQVQ0IGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAxID0gU2FtcGxlIE1vZHVsZSA1IGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUNSBpcyBzZWxlY3RlZCB0byBiZSBjb21wYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExMCA9IFNhbXBsZSBNb2R1bGUgNiBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDYgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMTEgPSBTYW1wbGUgTW9kdWxlIDcgY29udmVyc2lvbiByZXN1bHQgRUFEQ19EQVQ3IGlzIHNlbGVjdGVkIHRvIGJlIGNvbXBhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAwID0gU2FtcGxlIE1vZHVsZSA4IGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUOCBpcyBzZWxlY3RlZCB0byBiZSBjb21wYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwMSA9IFNhbXBsZSBNb2R1bGUgOSBjb252ZXJzaW9uIHJlc3VsdCBFQURDX0RBVDkgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMTAgPSBTYW1wbGUgTW9kdWxlIDEwIGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMTAgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMTEgPSBTYW1wbGUgTW9kdWxlIDExIGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMTEgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMDAgPSBTYW1wbGUgTW9kdWxlIDEyIGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMTIgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMDEgPSBTYW1wbGUgTW9kdWxlIDEzIGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMTMgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMTAgPSBTYW1wbGUgTW9kdWxlIDE0IGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMTQgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMTEgPSBTYW1wbGUgTW9kdWxlIDE1IGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMTUgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMDAgPSBTYW1wbGUgTW9kdWxlIDE2IGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMTYgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMDEgPSBTYW1wbGUgTW9kdWxlIDE3IGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMTcgaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMTAgPSBTYW1wbGUgTW9kdWxlIDE4IGNvbnZlcnNpb24gcmVzdWx0IEVBRENfREFUMTggaXMgc2VsZWN0ZWQgdG8gYmUgY29tcGFyZWQuCisgICAgICogfFsxMTo4XSAgfENNUE1DTlQgICB8Q29tcGFyZSBNYXRjaCBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHNwZWNpZmllZCBBREMgc2FtcGxlIG1vZHVsZSBhbmFsb2cgY29udmVyc2lvbiByZXN1bHQgbWF0Y2hlcyB0aGUgY29tcGFyZSBjb25kaXRpb24gZGVmaW5lZCBieSBDTVBDT05EIChFQURDX0NNUG5bMl0sIG49MH4zKSwgdGhlIGludGVybmFsIG1hdGNoIGNvdW50ZXIgd2lsbCBpbmNyZWFzZSAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGNvbXBhcmUgcmVzdWx0IGRvZXMgbm90IG1lZXQgdGhlIGNvbXBhcmUgY29uZGl0aW9uLCB0aGUgaW50ZXJuYWwgY29tcGFyZSBtYXRjaCBjb3VudGVyIHdpbGwgcmVzZXQgdG8gMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGludGVybmFsIGNvdW50ZXIgcmVhY2hlcyB0aGUgdmFsdWUgdG8gKENNUE1DTlQgKzEpLCB0aGUgQURDTVBGbiAoRUFEQ19TVEFUVVMyWzc6NF0sIG49MH4zKSB3aWxsIGJlIHNldC4KKyAgICAgKiB8WzE1XSAgICB8Q01QV0VOICAgIHxDb21wYXJlIFdpbmRvdyBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQURDTVBGMCAoRUFEQ19TVEFUVVMyWzRdKSB3aWxsIGJlIHNldCB3aGVuIEVBRENfQ01QMCBjb21wYXJlZCBjb25kaXRpb24gbWF0Y2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFEQ01QRjIgKEVBRENfU1RBVFVTMls2XSkgd2lsbCBiZSBzZXQgd2hlbiBFQURDX0NNUDIgY29tcGFyZWQgY29uZGl0aW9uIG1hdGNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQURDTVBGMCAoRUFEQ19TVEFUVVMyWzRdKSB3aWxsIGJlIHNldCB3aGVuIGJvdGggRUFEQ19DTVAwIGFuZCBFQURDX0NNUDEgY29tcGFyZWQgY29uZGl0aW9uIG1hdGNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBRENNUEYyIChFQURDX1NUQVRVUzJbNl0pIHdpbGwgYmUgc2V0IHdoZW4gYm90aCBFQURDX0NNUDIgYW5kIEVBRENfQ01QMyBjb21wYXJlZCBjb25kaXRpb24gbWF0Y2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IHByZXNlbnQgaW4gRUFEQ19DTVAwIGFuZCBFQURDX0NNUDIgcmVnaXN0ZXIuCisgICAgICogfFsyNzoxNl0gfENNUERBVCAgICB8Q29tcGFyaXNvbiBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIDEyIGJpdHMgZGF0YSBpcyB1c2VkIHRvIGNvbXBhcmUgd2l0aCBjb252ZXJzaW9uIHJlc3VsdCBvZiBzcGVjaWZpZWQgc2FtcGxlIG1vZHVsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHVzZSBpdCB0byBtb25pdG9yIHRoZSBleHRlcm5hbCBhbmFsb2cgaW5wdXQgcGluIHZvbHRhZ2UgdHJhbnNpdGlvbiB3aXRob3V0IGltcG9zaW5nIGEgbG9hZCBvbiBzb2Z0d2FyZS4KKyAgICAgKiBAdmFyIEVBRENfVDo6U1RBVFVTMAorICAgICAqIE9mZnNldDogMHhGMCAgQURDIFN0YXR1cyBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8VkFMSUQgICAgIHxFQURDX0RBVDB+MTUgRGF0YSBWYWxpZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYSBtaXJyb3Igb2YgVkFMSUQgYml0IGluIHNhbXBsZSBtb2R1bGUgQURDIHJlc3VsdCBkYXRhIHJlZ2lzdGVyIEVBRENfREFUbi4gKG49MH4xOCkuCisgICAgICogfFszMToxNl0gfE9WICAgICAgICB8RUFEQ19EQVQwfjE1IE92ZXJydW4gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGEgbWlycm9yIHRvIE9WIGJpdCBpbiBzYW1wbGUgbW9kdWxlIEFEQyByZXN1bHQgZGF0YSByZWdpc3RlciBFQURDX0RBVG4uIChuPTB+MTgpLgorICAgICAqIEB2YXIgRUFEQ19UOjpTVEFUVVMxCisgICAgICogT2Zmc2V0OiAweEY0ICBBREMgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxWQUxJRCAgICAgfEVBRENfREFUMTZ+MTggRGF0YSBWYWxpZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYSBtaXJyb3Igb2YgVkFMSUQgYml0IGluIHNhbXBsZSBtb2R1bGUgQURDIHJlc3VsdCBkYXRhIHJlZ2lzdGVyIEVBRENfREFUbi4gKG49MH4xOCkuCisgICAgICogfFsxODoxNl0gfE9WICAgICAgICB8RUFEQ19EQVQxNn4xOCBPdmVycnVuIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBhIG1pcnJvciB0byBPViBiaXQgaW4gc2FtcGxlIG1vZHVsZSBBREMgcmVzdWx0IGRhdGEgcmVnaXN0ZXIgRUFEQ19EQVRuLiAobj0wfjE4KS4KKyAgICAgKiBAdmFyIEVBRENfVDo6U1RBVFVTMgorICAgICAqIE9mZnNldDogMHhGOCAgQURDIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QURJRjAgICAgIHxBREMgQURJTlQwIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEFESU5UMCBpbnRlcnJ1cHQgcHVsc2UgcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFESU5UMCBpbnRlcnJ1cHQgcHVsc2UgaGFzIGJlZW4gcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOlRoaXMgYml0IGluZGljYXRlcyB3aGV0aGVyIGFuIEFEQyBjb252ZXJzaW9uIG9mIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgaGFzIGJlZW4gY29tcGxldGVkCisgICAgICogfFsxXSAgICAgfEFESUYxICAgICB8QURDIEFESU5UMSBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBBRElOVDEgaW50ZXJydXB0IHB1bHNlIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBRElOVDEgaW50ZXJydXB0IHB1bHNlIGhhcyBiZWVuIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjpUaGlzIGJpdCBpbmRpY2F0ZXMgd2hldGhlciBhbiBBREMgY29udmVyc2lvbiBvZiBzcGVjaWZpYyBzYW1wbGUgbW9kdWxlIGhhcyBiZWVuIGNvbXBsZXRlZAorICAgICAqIHxbMl0gICAgIHxBRElGMiAgICAgfEFEQyBBRElOVDIgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQURJTlQyIGludGVycnVwdCBwdWxzZSByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQURJTlQyIGludGVycnVwdCBwdWxzZSBoYXMgYmVlbiByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6VGhpcyBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gQURDIGNvbnZlcnNpb24gb2Ygc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBoYXMgYmVlbiBjb21wbGV0ZWQKKyAgICAgKiB8WzNdICAgICB8QURJRjMgICAgIHxBREMgQURJTlQzIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEFESU5UMyBpbnRlcnJ1cHQgcHVsc2UgcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFESU5UMyBpbnRlcnJ1cHQgcHVsc2UgaGFzIGJlZW4gcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOlRoaXMgYml0IGluZGljYXRlcyB3aGV0aGVyIGFuIEFEQyBjb252ZXJzaW9uIG9mIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgaGFzIGJlZW4gY29tcGxldGVkCisgICAgICogfFs0XSAgICAgfEFEQ01QRjAgICB8QURDIENvbXBhcmUgMCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBBREMgY29udmVyc2lvbiByZXN1bHQgbWVldHMgc2V0dGluZyBjb25kaXRpb24gaW4gRUFEQ19DTVAwIHRoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGRvZXMgbm90IG1lZXQgRUFEQ19DTVAwIHJlZ2lzdGVyIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIG1lZXRzIEVBRENfQ01QMCByZWdpc3RlciBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNV0gICAgIHxBRENNUEYxICAgfEFEQyBDb21wYXJlIDEgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHNwZWNpZmljIHNhbXBsZSBtb2R1bGUgQURDIGNvbnZlcnNpb24gcmVzdWx0IG1lZXRzIHNldHRpbmcgY29uZGl0aW9uIGluIEVBRENfQ01QMSB0aGVuIHRoaXMgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb252ZXJzaW9uIHJlc3VsdCBpbiBFQURDX0RBVCBkb2VzIG5vdCBtZWV0IEVBRENfQ01QMSByZWdpc3RlciBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb252ZXJzaW9uIHJlc3VsdCBpbiBFQURDX0RBVCBtZWV0cyBFQURDX0NNUDEgcmVnaXN0ZXIgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzZdICAgICB8QURDTVBGMiAgIHxBREMgQ29tcGFyZSAyIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBzcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEFEQyBjb252ZXJzaW9uIHJlc3VsdCBtZWV0cyBzZXR0aW5nIGNvbmRpdGlvbiBpbiBFQURDX0NNUDIgdGhlbiB0aGlzIGJpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgZG9lcyBub3QgbWVldCBFQURDX0NNUDIgcmVnaXN0ZXIgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgbWVldHMgRUFEQ19DTVAyIHJlZ2lzdGVyIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs3XSAgICAgfEFEQ01QRjMgICB8QURDIENvbXBhcmUgMyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBBREMgY29udmVyc2lvbiByZXN1bHQgbWVldHMgc2V0dGluZyBjb25kaXRpb24gaW4gRUFEQ19DTVAzIHRoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIGRvZXMgbm90IG1lZXQgRUFEQ19DTVAzIHJlZ2lzdGVyIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnZlcnNpb24gcmVzdWx0IGluIEVBRENfREFUIG1lZXRzIEVBRENfQ01QMyByZWdpc3RlciBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbOF0gICAgIHxBRE9WSUYwICAgfEFEQyBBRElOVDAgSW50ZXJydXB0IEZsYWcgT3ZlcnJ1bgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBRElOVDAgaW50ZXJydXB0IGZsYWcgaXMgbm90IG92ZXJ3cml0dGVuIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFESU5UMCBpbnRlcnJ1cHQgZmxhZyBpcyBvdmVyd3JpdHRlbiB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbOV0gICAgIHxBRE9WSUYxICAgfEFEQyBBRElOVDEgSW50ZXJydXB0IEZsYWcgT3ZlcnJ1bgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBRElOVDEgaW50ZXJydXB0IGZsYWcgaXMgbm90IG92ZXJ3cml0dGVuIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFESU5UMSBpbnRlcnJ1cHQgZmxhZyBpcyBvdmVyd3JpdHRlbiB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMTBdICAgIHxBRE9WSUYyICAgfEFEQyBBRElOVDIgSW50ZXJydXB0IEZsYWcgT3ZlcnJ1bgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBRElOVDIgaW50ZXJydXB0IGZsYWcgaXMgbm90IG92ZXJ3cml0dGVuIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFESU5UMiBpbnRlcnJ1cHQgZmxhZyBpcyBzIG92ZXJ3cml0dGVuIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxMV0gICAgfEFET1ZJRjMgICB8QURDIEFESU5UMyBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFESU5UMyBpbnRlcnJ1cHQgZmxhZyBpcyBub3Qgb3ZlcndyaXR0ZW4gdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQURJTlQzIGludGVycnVwdCBmbGFnIGlzIG92ZXJ3cml0dGVuIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxMl0gICAgfEFEQ01QTzAgICB8QURDIENvbXBhcmUgMCBPdXRwdXQgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIDEyIGJpdHMgY29tcGFyZTAgZGF0YSBDTVBEQVQwIChFQURDX0NNUDBbMjc6MTZdKSBpcyB1c2VkIHRvIGNvbXBhcmUgd2l0aCBjb252ZXJzaW9uIHJlc3VsdCBvZiBzcGVjaWZpZWQgc2FtcGxlIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiB1c2UgaXQgdG8gbW9uaXRvciB0aGUgZXh0ZXJuYWwgYW5hbG9nIGlucHV0IHBpbiB2b2x0YWdlIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgbGVzcyB0aGFuIENNUERBVDAgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgZ3JlYXQgdGhhbiBvciBlcXVhbCBDTVBEQVQwIHNldHRpbmcuCisgICAgICogfFsxM10gICAgfEFEQ01QTzEgICB8QURDIENvbXBhcmUgMSBPdXRwdXQgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIDEyIGJpdHMgY29tcGFyZTEgZGF0YSBDTVBEQVQxIChFQURDX0NNUDFbMjc6MTZdKSBpcyB1c2VkIHRvIGNvbXBhcmUgd2l0aCBjb252ZXJzaW9uIHJlc3VsdCBvZiBzcGVjaWZpZWQgc2FtcGxlIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiB1c2UgaXQgdG8gbW9uaXRvciB0aGUgZXh0ZXJuYWwgYW5hbG9nIGlucHV0IHBpbiB2b2x0YWdlIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgbGVzcyB0aGFuIENNUERBVDEgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgZ3JlYXQgdGhhbiBvciBlcXVhbCBDTVBEQVQxIHNldHRpbmcuCisgICAgICogfFsxNF0gICAgfEFEQ01QTzIgICB8QURDIENvbXBhcmUgMiBPdXRwdXQgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIDEyIGJpdHMgY29tcGFyZTIgZGF0YSBDTVBEQVQyIChFQURDX0NNUDJbMjc6MTZdKSBpcyB1c2VkIHRvIGNvbXBhcmUgd2l0aCBjb252ZXJzaW9uIHJlc3VsdCBvZiBzcGVjaWZpZWQgc2FtcGxlIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiB1c2UgaXQgdG8gbW9uaXRvciB0aGUgZXh0ZXJuYWwgYW5hbG9nIGlucHV0IHBpbiB2b2x0YWdlIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgbGVzcyB0aGFuIENNUERBVDIgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgZ3JlYXQgdGhhbiBvciBlcXVhbCBDTVBEQVQyIHNldHRpbmcuCisgICAgICogfFsxNV0gICAgfEFEQ01QTzMgICB8QURDIENvbXBhcmUgMyBPdXRwdXQgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIDEyIGJpdHMgY29tcGFyZTMgZGF0YSBDTVBEQVQzIChFQURDX0NNUDNbMjc6MTZdKSBpcyB1c2VkIHRvIGNvbXBhcmUgd2l0aCBjb252ZXJzaW9uIHJlc3VsdCBvZiBzcGVjaWZpZWQgc2FtcGxlIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiB1c2UgaXQgdG8gbW9uaXRvciB0aGUgZXh0ZXJuYWwgYW5hbG9nIGlucHV0IHBpbiB2b2x0YWdlIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgbGVzcyB0aGFuIENNUERBVDMgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29udmVyc2lvbiByZXN1bHQgaW4gRUFEQ19EQVQgZ3JlYXQgdGhhbiBvciBlcXVhbCBDTVBEQVQzIHNldHRpbmcuCisgICAgICogfFsyMDoxNl0gfENIQU5ORUwgICB8Q3VycmVudCBDb252ZXJzaW9uIENoYW5uZWwgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpbGVkIHJlZmxlY3RzIEFEQyBjdXJyZW50IGNvbnZlcnNpb24gY2hhbm5lbCB3aGVuIEJVU1k9MS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyByZWFkIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDBIID0gRUFEQ19DSDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDFIID0gRUFEQ19DSDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDJIID0gRUFEQ19DSDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDNIID0gRUFEQ19DSDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDRIID0gRUFEQ19DSDQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDVIID0gRUFEQ19DSDUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDZIID0gRUFEQ19DSDYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDdIID0gRUFEQ19DSDcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDhIID0gRUFEQ19DSDguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDlIID0gRUFEQ19DSDkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MEFIID0gRUFEQ19DSDEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDBCSCA9IEVBRENfQ0gxMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwQ0ggPSBFQURDX0NIMTIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MERIID0gRUFEQ19DSDEzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDBFSCA9IEVBRENfQ0gxNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwRkggPSBFQURDX0NIMTUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTBIID0gVkJHLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExSCA9IFZURU1QLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEySCA9IFZCQVQvNC4KKyAgICAgKiB8WzIzXSAgICB8QlVTWSAgICAgIHxCdXN5L0lkbGUgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUFEQyBpcyBpbiBpZGxlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQURDIGlzIGJ1c3kgYXQgY29udmVyc2lvbi4KKyAgICAgKiB8WzI0XSAgICB8QURPVklGICAgIHxBbGwgQURDIEludGVycnVwdCBGbGFnIE92ZXJydW4gQml0cyBDaGVjayAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG49MH4zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb25lIG9mIEFESU5UIGludGVycnVwdCBmbGFnIEFET1ZJRm4gKEVBRENfU1RBVFVTMlsxMTo4XSkgaXMgb3ZlcndyaXR0ZW4gdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQW55IG9uZSBvZiBBRElOVCBpbnRlcnJ1cHQgZmxhZyBBRE9WSUZuIChFQURDX1NUQVRVUzJbMTE6OF0pIGlzIG92ZXJ3cml0dGVuIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBrZWVwIDEgd2hlbiBhbnkgQURPVklGbiBGbGFnIGlzIGVxdWFsIHRvIDEuCisgICAgICogfFsyNV0gICAgfFNUT1ZGICAgICB8Zm9yIEFsbCBBREMgU2FtcGxlIE1vZHVsZSBTdGFydCBvZiBDb252ZXJzaW9uIE92ZXJydW4gRmxhZ3MgQ2hlY2sgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuPTB+MTguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vbmUgb2Ygc2FtcGxlIG1vZHVsZSBldmVudCBvdmVycnVuIGZsYWcgU1BPVkZuIChFQURDX09WU1RTW25dKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQW55IG9uZSBvZiBzYW1wbGUgbW9kdWxlIGV2ZW50IG92ZXJydW4gZmxhZyBTUE9WRm4gKEVBRENfT1ZTVFNbbl0pIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwga2VlcCAxIHdoZW4gYW55IFNQT1ZGbiBGbGFnIGlzIGVxdWFsIHRvIDEuCisgICAgICogfFsyNl0gICAgfEFWQUxJRCAgICB8Zm9yIEFsbCBTYW1wbGUgTW9kdWxlIEFEQyBSZXN1bHQgRGF0YSBSZWdpc3RlciBFQURDX0RBVCBEYXRhIFZhbGlkIEZsYWcgQ2hlY2sgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuPTB+MTguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vbmUgb2Ygc2FtcGxlIG1vZHVsZSBkYXRhIHJlZ2lzdGVyIHZhbGlkIGZsYWcgVkFMSURuIChFQURDX0RBVG5bMTddKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQW55IG9uZSBvZiBzYW1wbGUgbW9kdWxlIGRhdGEgcmVnaXN0ZXIgdmFsaWQgZmxhZyBWQUxJRG4gKEVBRENfREFUblsxN10pIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwga2VlcCAxIHdoZW4gYW55IFZBTElEbiBGbGFnIGlzIGVxdWFsIHRvIDEuCisgICAgICogfFsyN10gICAgfEFPViAgICAgICB8Zm9yIEFsbCBTYW1wbGUgTW9kdWxlIEFEQyBSZXN1bHQgRGF0YSBSZWdpc3RlciBPdmVycnVuIEZsYWdzIENoZWNrIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bj0wfjE4LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb25lIG9mIHNhbXBsZSBtb2R1bGUgZGF0YSByZWdpc3RlciBvdmVycnVuIGZsYWcgT1ZuIChFQURDX0RBVG5bMTZdKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQW55IG9uZSBvZiBzYW1wbGUgbW9kdWxlIGRhdGEgcmVnaXN0ZXIgb3ZlcnJ1biBmbGFnIE9WbiAoRUFEQ19EQVRuWzE2XSkgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBrZWVwIDEgd2hlbiBhbnkgT1ZuIEZsYWcgaXMgZXF1YWwgdG8gMS4KKyAgICAgKiBAdmFyIEVBRENfVDo6U1RBVFVTMworICAgICAqIE9mZnNldDogMHhGQyAgQURDIFN0YXR1cyBSZWdpc3RlciAzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzQ6MF0gICB8Q1VSU1BMICAgIHxBREMgQ3VycmVudCBTYW1wbGUgTW9kdWxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBzaG93IHRoZSBjdXJyZW50IEFEQyBpcyBjb250cm9sbGVkIGJ5IHdoaWNoIHNhbXBsZSBtb2R1bGUgY29udHJvbCBsb2dpYyBtb2R1bGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBBREMgaXMgSWRsZSwgdGhpcyBiaXQgZmlsZWQgd2lsbCBzZXQgdG8gMHgxRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGlzIGEgcmVhZCBvbmx5IHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRUFEQ19UOjpEREFUCisgICAgICogT2Zmc2V0OiAweDEwMC0weDEwQyAgQURDIERvdWJsZSBEYXRhIFJlZ2lzdGVyIG4gZm9yIFNhbXBsZSBNb2R1bGUgbiwgbj0wfjMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxSRVNVTFQgICAgfEFEQyBDb252ZXJzaW9uIFJlc3VsdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNvbnRhaW5zIDEyIGJpdHMgY29udmVyc2lvbiByZXN1bHRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIERNT0YgKEVBRENfQ1RMWzldKSBpcyBzZXQgdG8gMCwgMTItYml0IEFEQyBjb252ZXJzaW9uIHJlc3VsdCB3aXRoIHVuc2lnbmVkIGZvcm1hdCB3aWxsIGJlIGZpbGxlZCBpbiBSRVNVTFQgWzExOjBdIGFuZCB6ZXJvIHdpbGwgYmUgZmlsbGVkIGluIFJFU1VMVCBbMTU6MTJdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gRE1PRiAoRUFEQ19DVExbOV0pIHNldCB0byAxLCAxMi1iaXQgQURDIGNvbnZlcnNpb24gcmVzdWx0IHdpdGggMidjb21wbGVtZW50IGZvcm1hdCB3aWxsIGJlIGZpbGxlZCBpbiBSRVNVTFQgWzExOjBdIGFuZCBzaWduZWQgYml0cyB0byB3aWxsIGJlIGZpbGxlZCBpbiBSRVNVTFQgWzE1OjEyXS4KKyAgICAgKiB8WzE2XSAgICB8T1YgICAgICAgIHxPdmVycnVuIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSBpbiBSRVNVTFQgKEVBRENfREFUblsxNTowXSwgbj0wfjMpIGlzIHJlY2VudCBjb252ZXJzaW9uIHJlc3VsdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSBpbiBSRVNVTFQgKEVBRENfREFUblsxNTowXSwgbj0wfjMpIGlzIG92ZXJ3cml0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBjb252ZXJ0ZWQgZGF0YSBpbiBSRVNVTFRbMTU6MF0gaGFzIG5vdCBiZWVuIHJlYWQgYmVmb3JlIG5ldyBjb252ZXJzaW9uIHJlc3VsdCBpcyBsb2FkZWQgdG8gdGhpcyByZWdpc3RlciwgT1YgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBFQURDX0REQVQgcmVnaXN0ZXIgaXMgcmVhZC4KKyAgICAgKiB8WzE3XSAgICB8VkFMSUQgICAgIHxWYWxpZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERvdWJsZSBkYXRhIGluIFJFU1VMVCAoRUFEQ19EREFUblsxNTowXSkgaXMgbm90IHZhbGlkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEb3VibGUgZGF0YSBpbiBSRVNVTFQgKEVBRENfRERBVG5bMTU6MF0pIGlzIHZhbGlkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byAxIHdoZW4gY29ycmVzcG9uZGluZyBzYW1wbGUgbW9kdWxlIGNoYW5uZWwgYW5hbG9nIGlucHV0IGNvbnZlcnNpb24gaXMgY29tcGxldGVkIGFuZCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIEVBRENfRERBVG4gcmVnaXN0ZXIgaXMgcmVhZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwobj0wfjMpLgorICAgICAqIEB2YXIgRUFEQ19UOjpQV1JNCisgICAgICogT2Zmc2V0OiAweDExMCAgQURDIFBvd2VyIE1hbmFnZW1lbnQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQV1VQUkRZICAgfEFEQyBQb3dlci11cCBTZXF1ZW5jZSBDb21wbGV0ZWQgYW5kIFJlYWR5IGZvciBDb252ZXJzaW9uIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFEQyBpcyBub3QgcmVhZHkgZm9yIGNvbnZlcnNpb24gbWF5IGJlIGluIHBvd2VyIGRvd24gc3RhdGUgb3IgaW4gdGhlIHByb2dyZXNzIG9mIHBvd2VyIHVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBREMgaXMgcmVhZHkgZm9yIGNvbnZlcnNpb24uCisgICAgICogfFsxXSAgICAgfFBXVUNBTEVOICB8UG93ZXIgVXAgQ2FsaWJyYXRpb24gRnVuY3Rpb24gRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGlzYWJsZSB0aGUgZnVuY3Rpb24gb2YgY2FsaWJyYXRpb24gYXQgcG93ZXIgdXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZSB0aGUgZnVuY3Rpb24gb2YgY2FsaWJyYXRpb24gYXQgcG93ZXIgdXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd29yayB0b2dldGhlciB3aXRoIENBTFNFTCAoRUFEQ19DQUxDVEwgWzNdKSwgc2VlIHRoZSBmb2xsb3dpbmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx7UFdVQ0FMRU4sIENBTFNFTCB9IERlc2NyaXB0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBXVUNBTEVOIGlzIDAgYW5kIENBTFNFTCBpcyAwOiBObyBuZWVkIHRvIGNhbGlicmF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQV1VDQUxFTiBpcyAwIGFuZCBDQUxTRUwgaXMgMTogTm8gbmVlZCB0byBjYWxpYnJhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UFdVQ0FMRU4gaXMgMSBhbmQgQ0FMU0VMIGlzIDA6IExvYWQgY2FsaWJyYXRpb24gd29yZCB3aGVuIHBvd2VyIHVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBXVUNBTEVOIGlzIDEgYW5kIENBTFNFTCBpcyAxOiBDYWxpYnJhdGUgd2hlbiBwb3dlciB1cC4KKyAgICAgKiB8WzM6Ml0gICB8UFdETU9EICAgIHxBREMgUG93ZXItZG93biBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IGZpZWxkcyB0byBzZWxlY3QgQURDIHBvd2VyIGRvd24gbW9kZSB3aGVuIHN5c3RlbSBwb3dlci1kb3duLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQURDIERlZXAgcG93ZXIgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQURDIFBvd2VyIGRvd24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBBREMgU3RhbmRieSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQURDIERlZXAgcG93ZXIgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IERpZmZlcmVudCBQV0RNT0QgaGFzIGRpZmZlcmVudCBwb3dlciBkb3duL3VwIHNlcXVlbmNlLCBpbiBvcmRlciB0byBhdm9pZCBBREMgcG93ZXJpbmcgdXAgd2l0aCB3cm9uZyBzZXF1ZW5jZTsgdXNlciBtdXN0IGtlZXAgUFdNT0QgY29uc2lzdGVudCBlYWNoIHRpbWUgaW4gcG93ZXIgZG93biBhbmQgc3RhcnQgdXAKKyAgICAgKiB8WzE5OjhdICB8TERPU1VUICAgIHxBREMgSW50ZXJuYWwgTERPIFN0YXJ0LXVwIFRpbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgZmllbGRzIHRvIGNvbnRyb2wgTERPIHN0YXJ0LXVwIHRpbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgbWluaW11bSByZXF1aXJlZCBMRE8gc3RhcnQtdXAgdGltZSBpcyAyMHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TERPIHN0YXJ0LXVwIHRpbWUgPSAoMS9BRENfQ0xLKSB4IExET1NVVC4KKyAgICAgKiBAdmFyIEVBRENfVDo6Q0FMQ1RMCisgICAgICogT2Zmc2V0OiAweDExNCAgQURDIENhbGlicmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxDQUxTVEFSVCAgfENhbGlicmF0aW9uIEZ1bmN0aW9uYWwgQmxvY2sgU3RhcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RvcHMgY2FsaWJyYXRpb24gZnVuY3Rpb25hbCBibG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RhcnRzIGNhbGlicmF0aW9uIGZ1bmN0aW9uYWwgYmxvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgc2V0IGJ5IFNXIGFuZCBjbGVhciBieSBIVyBhZnRlciByZS1jYWxpYnJhdGlvbiBmaW5pc2gKKyAgICAgKiB8WzJdICAgICB8Q0FMRE9ORSAgIHxDYWxpYnJhdGlvbiBGdW5jdGlvbmFsIEJsb2NrIENvbXBsZXRlIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IER1cmluZyBhIGNhbGlicmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYWxpYnJhdGlvbiBpcyBjb21wbGV0ZWQuCisgICAgICogfFszXSAgICAgfENBTFNFTCAgICB8U2VsZWN0IENhbGlicmF0aW9uIEZ1bmN0aW9uYWwgQmxvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTG9hZCBjYWxpYnJhdGlvbiB3b3JkIHdoZW4gY2FsaWJyYXRpb24gZnVuY3Rpb25hbCBibG9jayBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV4ZWN1dGUgY2FsaWJyYXRpb24gd2hlbiBjYWxpYnJhdGlvbiBmdW5jdGlvbmFsIGJsb2NrIGlzIGFjdGl2ZS4KKyAgICAgKiBAdmFyIEVBRENfVDo6Q0FMRFdSRAorICAgICAqIE9mZnNldDogMHgxMTggIEFEQyBDYWxpYnJhdGlvbiBMb2FkIFdvcmQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNjowXSAgIHxDQUxXT1JEICAgfENhbGlicmF0aW9uIFdvcmQgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgd2l0aCB0aGUgcHJldmlvdXMgY2FsaWJyYXRpb24gd29yZCBiZWZvcmUgbG9hZCBjYWxpYnJhdGlvbiBhY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCB0aGlzIHJlZ2lzdGVyIGFmdGVyIGNhbGlicmF0aW9uIGRvbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGNhbGlicmF0aW9uIGJsb2NrIGNvbnRhaW5zIHR3byBwYXJ0cyBDQUxJQlJBVElPTiBhbmQgTE9BRCBDQUxJQlJBVElPTjsgaWYgdGhlIGNhbGlicmF0aW9uIGJsb2NrIGNvbmZpZ3VyZSBhcyBDQUxJQlJBVElPTjsgdGhlbiB0aGlzIHJlZ2lzdGVyIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIGNhbGlicmF0aW9uIHdoZW4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkOyBpZiBjb25maWd1cmUgYXMgTE9BRCBDQUxJQlJBVElPTiA7IGNvbmZpZ3VyZSB0aGlzIHJlZ2lzdGVyIGJlZm9yZSBsb2FkaW5nIGNhbGlicmF0aW9uIGFjdGlvbiwgYWZ0ZXIgbG9hZGluZyBjYWxpYnJhdGlvbiBjb21wbGV0ZSwgdGhlIGxhb2RlZCBjYWxpYnJhdGlvbiB3b3JkIHdpbGwgYXBwbHkgdG8gdGhlIEFEQzsgd2hpbGUgaW4gbG9hZGluZyBjYWxpYnJhdGlvbiBmdW5jdGlvbiB0aGUgbG9hZGVkIHZhbHVlIHdpbGwgbm90IGJlIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCBDQUxXT1JEIHVudGlsIGNhbGlicmF0aW9uIGlzIGRvbmUuCisgICAgICovCisKKyAgICBfX0kgIHVpbnQzMl90IERBVFsxOV07ICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwfjB4MDA0OF0gQURDIERhdGEgUmVnaXN0ZXIgbiBmb3IgU2FtcGxlIE1vZHVsZSBuLCBuPTB+MTggICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBDVVJEQVQ7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0Y10gQURDIFBETUEgQ3VycmVudCBUcmFuc2ZlciBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNTBdIEFEQyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFNXVFJHOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDU0XSBBREMgU2FtcGxlIE1vZHVsZSBTb2Z0d2FyZSBTdGFydCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQRU5EU1RTOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA1OF0gQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gUGVuZGluZyBGbGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgT1ZTVFM7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNWNdIEFEQyBTYW1wbGUgTW9kdWxlIFN0YXJ0IG9mIENvbnZlcnNpb24gT3ZlcnJ1biBGbGFnIFJlZ2lzdGVyICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzhdOworICAgIF9fSU8gdWludDMyX3QgU0NUTFsxOV07ICAgICAgICAgICAgICAvKiE8IFsweDAwODB+MHgwMGM4XSAgQURDIFNhbXBsZSBNb2R1bGUgbiBDb250cm9sIFJlZ2lzdGVyLCBuPTB+MTggICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzFdOworICAgIF9fSU8gdWludDMyX3QgSU5UU1JDWzRdOyAgICAgICAgICAgICAvKiE8IFsweDAwZDB+MHgwMGRjXSAgQURDIGludGVycnVwdCBuIFNvdXJjZSBFbmFibGUgQ29udHJvbCBSZWdpc3Rlciwgbj0wfjMgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENNUFs0XTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGUwfjB4MDBlY10gIEFEQyBSZXN1bHQgQ29tcGFyZSBSZWdpc3RlciBuLCBuPTB+MyAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTVEFUVVMwOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBmMF0gQURDIFN0YXR1cyBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU1RBVFVTMTsgICAgICAgICAgICAgICAvKiE8IFsweDAwZjRdIEFEQyBTdGF0dXMgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzI7ICAgICAgICAgICAgICAgLyohPCBbMHgwMGY4XSBBREMgU3RhdHVzIFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTVEFUVVMzOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBmY10gQURDIFN0YXR1cyBSZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgRERBVFs0XTsgICAgICAgICAgICAgICAvKiE8IFsweDAxMDB+MHgwMTBjXSAgQURDIERvdWJsZSBEYXRhIFJlZ2lzdGVyIG4gZm9yIFNhbXBsZSBNb2R1bGUgbiwgbj0wfjMgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBXUk07ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMTEwXSBBREMgUG93ZXIgTWFuYWdlbWVudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDQUxDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDExNF0gQURDIENhbGlicmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0FMRFdSRDsgICAgICAgICAgICAgICAvKiE8IFsweDAxMThdIEFEQyBDYWxpYnJhdGlvbiBMb2FkIFdvcmQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBFQURDX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIEVBRENfQ09OU1QgRUFEQyBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBFQURDIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgRUFEQ19EQVRfUkVTVUxUX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUX1JFU1VMVF9Nc2sgICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVF9SRVNVTFRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUX09WX1BvcyAgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVF9PVl9Nc2sgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVRfT1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUOiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVF9WQUxJRF9Qb3MgICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVRfVkFMSURfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQwX1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMDogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMF9SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDBfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDA6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMF9PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDA6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDBfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQwX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQwOiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDBfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQwOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQwX1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMF9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMDogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxX1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMV9SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDFfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMV9PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDFfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxOiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDFfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxX1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMV9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQyX1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMjogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMl9SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDJfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDI6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMl9PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDI6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDJfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQyX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQyOiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDJfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQyOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQyX1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMl9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMjogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQzX1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMzogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUM19SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDNfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDM6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUM19PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDM6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDNfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQzX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQzOiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDNfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQzOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQzX1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUM19WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMzogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ0X1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNDogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUNF9SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDRfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDQ6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUNF9PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDQ6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDRfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQ0X09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ0OiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDRfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ0OiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ0X1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUNF9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNDogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ1X1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNTogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUNV9SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDVfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDU6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUNV9PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDU6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDVfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQ1X09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ1OiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDVfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ1OiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ1X1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUNV9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNTogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ2X1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNjogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUNl9SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDZfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDY6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUNl9PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDY6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDZfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQ2X09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ2OiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDZfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ2OiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ2X1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUNl9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNjogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ3X1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNzogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUN19SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDdfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDc6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUN19PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDc6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDdfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQ3X09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ3OiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDdfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ3OiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ3X1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUN19WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUNzogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ4X1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUODogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUOF9SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDhfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDg6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUOF9PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDg6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDhfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQ4X09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ4OiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDhfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ4OiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ4X1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUOF9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUODogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQ5X1JFU1VMVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUOTogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUOV9SRVNVTFRfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDlfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDk6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUOV9PVl9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDk6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDlfT1ZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQ5X09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ5OiBPViBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDlfVkFMSURfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQ5OiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQ5X1ZBTElEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUOV9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUOTogVkFMSUQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxMF9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTA6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTBfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDEwX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEwOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTBfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEwOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDEwX09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxMF9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMDogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDEwX1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMDogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxMF9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTBfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTA6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxMV9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTE6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTFfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDExX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDExOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTFfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDExOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDExX09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxMV9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMTogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDExX1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMTogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxMV9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTFfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTE6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxMl9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTI6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTJfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDEyX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEyOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTJfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEyOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDEyX09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxMl9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMjogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDEyX1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMjogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxMl9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTJfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTI6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxM19SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTM6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTNfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDEzX1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEzOiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTNfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDEzOiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDEzX09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxM19PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMzogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDEzX1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxMzogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxM19WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTNfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTM6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxNF9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTQ6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTRfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDE0X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE0OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTRfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE0OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE0X09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxNF9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNDogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE0X1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNDogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxNF9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTRfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTQ6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxNV9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTU6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTVfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDE1X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE1OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTVfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE1OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE1X09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxNV9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNTogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE1X1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNTogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxNV9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTVfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTU6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxNl9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTY6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTZfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDE2X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE2OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTZfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE2OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE2X09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxNl9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNjogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE2X1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNjogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxNl9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTZfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTY6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxN19SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTc6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMTdfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDE3X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE3OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMTdfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE3OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE3X09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxN19PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNzogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE3X1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxNzogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxN19WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMTdfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTc6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EQVQxOF9SRVNVTFRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTg6IFJFU1VMVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfREFUMThfUkVTVUxUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX0RBVDE4X1JFU1VMVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE4OiBSRVNVTFQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfREFUMThfT1ZfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkRBVDE4OiBPViBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0RBVDE4X09WX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EQVQxOF9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxODogT1YgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0RBVDE4X1ZBTElEX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEQVQxODogVkFMSUQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EQVQxOF9WQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfREFUMThfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6REFUMTg6IFZBTElEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DVVJEQVRfQ1VSREFUX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1VSREFUOiBDVVJEQVQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfQ1VSREFUX0NVUkRBVF9Nc2sgICAgICAgICAgICgweDNmZmZmdWwgPDwgRUFEQ19DVVJEQVRfQ1VSREFUX1BvcykgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNVUkRBVDogQ1VSREFUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ1RMX0FEQ0VOX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogQURDRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NUTF9BRENFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DVExfQURDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IEFEQ0VOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NUTF9BRENSU1RfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IEFEQ1JTVCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DVExfQURDUlNUX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ1RMX0FEQ1JTVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBBRENSU1QgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DVExfQURDSUVOMF9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBBRENJRU4wIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ1RMX0FEQ0lFTjBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NUTF9BRENJRU4wX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogQURDSUVOMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ1RMX0FEQ0lFTjFfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogQURDSUVOMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NUTF9BRENJRU4xX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DVExfQURDSUVOMV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IEFEQ0lFTjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NUTF9BRENJRU4yX1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IEFEQ0lFTjIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DVExfQURDSUVOMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ1RMX0FEQ0lFTjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBBRENJRU4yIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DVExfQURDSUVOM19Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBBRENJRU4zIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ1RMX0FEQ0lFTjNfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NUTF9BRENJRU4zX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogQURDSUVOMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ1RMX1JFU1NFTF9Qb3MgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogUkVTU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NUTF9SRVNTRUxfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgRUFEQ19DVExfUkVTU0VMX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IFJFU1NFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NUTF9ESUZGRU5fUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IERJRkZFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DVExfRElGRkVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ1RMX0RJRkZFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBESUZGRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DVExfRE1PRl9Qb3MgICAgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q1RMOiBETU9GIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ1RMX0RNT0ZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NUTF9ETU9GX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogRE1PRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ1RMX1BETUFFTl9Qb3MgICAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNUTDogUERNQUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NUTF9QRE1BRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DVExfUERNQUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDVEw6IFBETUFFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NXVFJHX1NXVFJHX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTV1RSRzogU1dUUkcgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TV1RSR19TV1RSR19Nc2sgICAgICAgICAgICAgKDB4N2ZmZmZ1bCA8PCBFQURDX1NXVFJHX1NXVFJHX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1dUUkc6IFNXVFJHIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19QRU5EU1RTX1NUUEZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6UEVORFNUUzogU1RQRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfUEVORFNUU19TVFBGX01zayAgICAgICAgICAgICgweDdmZmZmdWwgPDwgRUFEQ19QRU5EU1RTX1NUUEZfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlBFTkRTVFM6IFNUUEYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfT1ZTVFNfU1BPVkZfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6Ok9WU1RTOiBTUE9WRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX09WU1RTX1NQT1ZGX01zayAgICAgICAgICAgICAoMHg3ZmZmZnVsIDw8IEVBRENfT1ZTVFNfU1BPVkZfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpPVlNUUzogU1BPVkYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVExfQ0hTRUxfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBDSFNFTCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMX0NIU0VMX01zayAgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTF9DSFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogQ0hTRUwgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMX0VYVFJFTl9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogRVhUUkVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTF9FWFRSRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVExfRVhUUkVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IEVYVFJFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTF9FWFRGRU5fUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IEVYVEZFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVExfRVhURkVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMX0VYVEZFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBFWFRGRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVExfVFJHRExZRElWX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBUUkdETFlESVYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMX1RSR0RMWURJVl9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTF9UUkdETFlESVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogVFJHRExZRElWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMX1RSR0RMWUNOVF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogVFJHRExZQ05UIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTF9UUkdETFlDTlRfTXNrICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMX1RSR0RMWUNOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IFRSR0RMWUNOVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTF9UUkdTRUxfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVExfVFJHU0VMX01zayAgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBUUkdTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVExfSU5UUE9TX1BvcyAgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBJTlRQT1MgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMX0lOVFBPU19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTF9JTlRQT1NfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogSU5UUE9TIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMX0RCTUVOX1BvcyAgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDogREJNRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTF9EQk1FTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVExfREJNRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IERCTUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTF9FWFRTTVBUX1BvcyAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVExfRVhUU01QVF9Nc2sgICAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTF9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOiBFWFRTTVBUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwwX0NIU0VMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogQ0hTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMF9DSFNFTF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDBfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IENIU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMF9FWFRSRU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDBfRVhUUkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwwX0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBFWFRSRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDBfRVhURkVOX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBFWFRGRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwwX0VYVEZFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMF9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogRVhURkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwwX1RSR0RMWURJVl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogVFJHRExZRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMF9UUkdETFlESVZfTXNrICAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDBfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IFRSR0RMWURJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMF9UUkdETFlDTlRfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDBfVFJHRExZQ05UX01zayAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMF9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBUUkdETFlDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDBfVFJHU0VMX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBUUkdTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwwX1RSR1NFTF9Nc2sgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDBfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogVFJHU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwwX0lOVFBPU19Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogSU5UUE9TIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMF9JTlRQT1NfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDBfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IElOVFBPUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMF9EQk1FTl9Qb3MgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDA6IERCTUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDBfREJNRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwwX0RCTUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBEQk1FTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDBfRVhUU01QVF9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwwOiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwwX0VYVFNNUFRfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDBfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMDogRVhUU01QVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxX0NIU0VMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogQ0hTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMV9DSFNFTF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDFfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IENIU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMV9FWFRSRU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDFfRVhUUkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxX0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBFWFRSRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDFfRVhURkVOX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBFWFRGRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxX0VYVEZFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMV9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogRVhURkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxX1RSR0RMWURJVl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogVFJHRExZRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMV9UUkdETFlESVZfTXNrICAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDFfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IFRSR0RMWURJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMV9UUkdETFlDTlRfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDFfVFJHRExZQ05UX01zayAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMV9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBUUkdETFlDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDFfVFJHU0VMX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBUUkdTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxX1RSR1NFTF9Nc2sgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDFfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogVFJHU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxX0lOVFBPU19Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogSU5UUE9TIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMV9JTlRQT1NfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDFfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IElOVFBPUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMV9EQk1FTl9Qb3MgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE6IERCTUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDFfREJNRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxX0RCTUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBEQk1FTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDFfRVhUU01QVF9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxOiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxX0VYVFNNUFRfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDFfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTogRVhUU01QVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwyX0NIU0VMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogQ0hTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMl9DSFNFTF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDJfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IENIU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMl9FWFRSRU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDJfRVhUUkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwyX0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBFWFRSRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDJfRVhURkVOX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBFWFRGRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwyX0VYVEZFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMl9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogRVhURkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwyX1RSR0RMWURJVl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogVFJHRExZRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMl9UUkdETFlESVZfTXNrICAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDJfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IFRSR0RMWURJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMl9UUkdETFlDTlRfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDJfVFJHRExZQ05UX01zayAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMl9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBUUkdETFlDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDJfVFJHU0VMX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBUUkdTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwyX1RSR1NFTF9Nc2sgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDJfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogVFJHU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwyX0lOVFBPU19Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogSU5UUE9TIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMl9JTlRQT1NfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDJfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IElOVFBPUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMl9EQk1FTl9Qb3MgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDI6IERCTUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDJfREJNRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwyX0RCTUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBEQk1FTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDJfRVhUU01QVF9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwyOiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwyX0VYVFNNUFRfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDJfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMjogRVhUU01QVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwzX0NIU0VMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogQ0hTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMM19DSFNFTF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDNfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IENIU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMM19FWFRSRU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDNfRVhUUkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwzX0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBFWFRSRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDNfRVhURkVOX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBFWFRGRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwzX0VYVEZFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMM19FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogRVhURkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwzX1RSR0RMWURJVl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogVFJHRExZRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMM19UUkdETFlESVZfTXNrICAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDNfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IFRSR0RMWURJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMM19UUkdETFlDTlRfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDNfVFJHRExZQ05UX01zayAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMM19UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBUUkdETFlDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDNfVFJHU0VMX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBUUkdTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwzX1RSR1NFTF9Nc2sgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDNfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogVFJHU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwzX0lOVFBPU19Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogSU5UUE9TIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMM19JTlRQT1NfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDNfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IElOVFBPUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMM19EQk1FTl9Qb3MgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDM6IERCTUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDNfREJNRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwzX0RCTUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBEQk1FTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDNfRVhUU01QVF9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwzOiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwzX0VYVFNNUFRfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDNfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMzogRVhUU01QVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw0X0NIU0VMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogQ0hTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNF9DSFNFTF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDRfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IENIU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNF9FWFRSRU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDRfRVhUUkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw0X0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBFWFRSRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDRfRVhURkVOX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBFWFRGRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw0X0VYVEZFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMNF9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogRVhURkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw0X1RSR0RMWURJVl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogVFJHRExZRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNF9UUkdETFlESVZfTXNrICAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDRfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IFRSR0RMWURJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNF9UUkdETFlDTlRfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDRfVFJHRExZQ05UX01zayAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMNF9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBUUkdETFlDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDRfVFJHU0VMX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBUUkdTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw0X1RSR1NFTF9Nc2sgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDRfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogVFJHU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw0X0lOVFBPU19Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNDogSU5UUE9TIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNF9JTlRQT1NfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDRfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IElOVFBPUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNF9FWFRTTVBUX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDQ6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDRfRVhUU01QVF9Nc2sgICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMNF9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw0OiBFWFRTTVBUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDVfQ0hTRUxfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBDSFNFTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw1X0NIU0VMX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19TQ1RMNV9DSFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogQ0hTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw1X0VYVFJFTl9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogRVhUUkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNV9FWFRSRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDVfRVhUUkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IEVYVFJFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNV9FWFRGRU5fUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IEVYVEZFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDVfRVhURkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw1X0VYVEZFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBFWFRGRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDVfVFJHRExZRElWX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBUUkdETFlESVYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEw1X1RSR0RMWURJVl9Nc2sgICAgICAgICAoMHgzdWwgPDwgRUFEQ19TQ1RMNV9UUkdETFlESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogVFJHRExZRElWIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw1X1RSR0RMWUNOVF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogVFJHRExZQ05UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNV9UUkdETFlDTlRfTXNrICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEw1X1RSR0RMWUNOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IFRSR0RMWUNOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNV9UUkdTRUxfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDVfVFJHU0VMX01zayAgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19TQ1RMNV9UUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBUUkdTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDVfSU5UUE9TX1BvcyAgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw1OiBJTlRQT1MgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw1X0lOVFBPU19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMNV9JTlRQT1NfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogSU5UUE9TIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw1X0VYVFNNUFRfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNTogRVhUU01QVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNV9FWFRTTVBUX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEw1X0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDU6IEVYVFNNUFQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNl9DSFNFTF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IENIU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDZfQ0hTRUxfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEw2X0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBDSFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDZfRVhUUkVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBFWFRSRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw2X0VYVFJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMNl9FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogRVhUUkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw2X0VYVEZFTl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogRVhURkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNl9FWFRGRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDZfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IEVYVEZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNl9UUkdETFlESVZfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDZfVFJHRExZRElWX01zayAgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEw2X1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBUUkdETFlESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDZfVFJHRExZQ05UX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBUUkdETFlDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEw2X1RSR0RMWUNOVF9Nc2sgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDZfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogVFJHRExZQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw2X1RSR1NFTF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogVFJHU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMNl9UUkdTRUxfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEw2X1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IFRSR1NFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMNl9JTlRQT1NfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDY6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDZfSU5UUE9TX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw2X0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBJTlRQT1MgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDZfRVhUU01QVF9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw2OiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw2X0VYVFNNUFRfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDZfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNjogRVhUU01QVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw3X0NIU0VMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogQ0hTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMN19DSFNFTF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDdfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IENIU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMN19FWFRSRU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDdfRVhUUkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw3X0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBFWFRSRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDdfRVhURkVOX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBFWFRGRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw3X0VYVEZFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMN19FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogRVhURkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw3X1RSR0RMWURJVl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogVFJHRExZRElWIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMN19UUkdETFlESVZfTXNrICAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDdfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IFRSR0RMWURJViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMN19UUkdETFlDTlRfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDdfVFJHRExZQ05UX01zayAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMN19UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBUUkdETFlDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDdfVFJHU0VMX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBUUkdTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw3X1RSR1NFTF9Nc2sgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDdfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogVFJHU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw3X0lOVFBPU19Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMNzogSU5UUE9TIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMN19JTlRQT1NfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDdfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IElOVFBPUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMN19FWFRTTVBUX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDc6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDdfRVhUU01QVF9Nc2sgICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMN19FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw3OiBFWFRTTVBUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDhfQ0hTRUxfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBDSFNFTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw4X0NIU0VMX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19TQ1RMOF9DSFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogQ0hTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw4X0VYVFJFTl9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogRVhUUkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOF9FWFRSRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDhfRVhUUkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IEVYVFJFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOF9FWFRGRU5fUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IEVYVEZFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDhfRVhURkVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw4X0VYVEZFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBFWFRGRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDhfVFJHRExZRElWX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBUUkdETFlESVYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEw4X1RSR0RMWURJVl9Nc2sgICAgICAgICAoMHgzdWwgPDwgRUFEQ19TQ1RMOF9UUkdETFlESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogVFJHRExZRElWIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw4X1RSR0RMWUNOVF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogVFJHRExZQ05UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOF9UUkdETFlDTlRfTXNrICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEw4X1RSR0RMWUNOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IFRSR0RMWUNOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOF9UUkdTRUxfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDhfVFJHU0VMX01zayAgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19TQ1RMOF9UUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBUUkdTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDhfSU5UUE9TX1BvcyAgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw4OiBJTlRQT1MgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw4X0lOVFBPU19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMOF9JTlRQT1NfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogSU5UUE9TIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw4X0VYVFNNUFRfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMODogRVhUU01QVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOF9FWFRTTVBUX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEw4X0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDg6IEVYVFNNUFQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOV9DSFNFTF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IENIU0VMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDlfQ0hTRUxfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEw5X0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBDSFNFTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDlfRVhUUkVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBFWFRSRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw5X0VYVFJFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMOV9FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogRVhUUkVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw5X0VYVEZFTl9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogRVhURkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOV9FWFRGRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDlfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IEVYVEZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOV9UUkdETFlESVZfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDlfVFJHRExZRElWX01zayAgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEw5X1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBUUkdETFlESVYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDlfVFJHRExZQ05UX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBUUkdETFlDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NDVEw5X1RSR0RMWUNOVF9Nc2sgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDlfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogVFJHRExZQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEw5X1RSR1NFTF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogVFJHU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMOV9UUkdTRUxfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEw5X1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IFRSR1NFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMOV9JTlRQT1NfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDk6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDlfSU5UUE9TX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEw5X0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBJTlRQT1MgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDlfRVhUU01QVF9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEw5OiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEw5X0VYVFNNUFRfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDlfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMOTogRVhUU01QVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMF9DSFNFTF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IENIU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTBfQ0hTRUxfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDEwX0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBDSFNFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTBfRVhUUkVOX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBFWFRSRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEwX0VYVFJFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxMF9FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogRVhUUkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEwX0VYVEZFTl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogRVhURkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMF9FWFRGRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTBfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IEVYVEZFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMF9UUkdETFlESVZfUG9zICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTBfVFJHRExZRElWX01zayAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDEwX1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBUUkdETFlESVYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTBfVFJHRExZQ05UX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBUUkdETFlDTlQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEwX1RSR0RMWUNOVF9Nc2sgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTBfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogVFJHRExZQ05UIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEwX1RSR1NFTF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogVFJHU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMF9UUkdTRUxfTXNrICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDEwX1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IFRSR1NFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMF9JTlRQT1NfUG9zICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTA6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTBfSU5UUE9TX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDEwX0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBJTlRQT1MgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTBfRVhUU01QVF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEwOiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEwX0VYVFNNUFRfTXNrICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTBfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMDogRVhUU01QVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDExX0NIU0VMX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogQ0hTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMV9DSFNFTF9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19TQ1RMMTFfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IENIU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMV9FWFRSRU5fUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTFfRVhUUkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDExX0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBFWFRSRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTFfRVhURkVOX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBFWFRGRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDExX0VYVEZFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxMV9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogRVhURkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDExX1RSR0RMWURJVl9Qb3MgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogVFJHRExZRElWIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMV9UUkdETFlESVZfTXNrICAgICAgICAoMHgzdWwgPDwgRUFEQ19TQ1RMMTFfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IFRSR0RMWURJViBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMV9UUkdETFlDTlRfUG9zICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTFfVFJHRExZQ05UX01zayAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxMV9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBUUkdETFlDTlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTFfVFJHU0VMX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBUUkdTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDExX1RSR1NFTF9Nc2sgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19TQ1RMMTFfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogVFJHU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDExX0lOVFBPU19Qb3MgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMTogSU5UUE9TIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMV9JTlRQT1NfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTFfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IElOVFBPUyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMV9FWFRTTVBUX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTE6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTFfRVhUU01QVF9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxMV9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDExOiBFWFRTTVBUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTJfQ0hTRUxfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBDSFNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEyX0NIU0VMX01zayAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEwxMl9DSFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogQ0hTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEyX0VYVFJFTl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogRVhUUkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMl9FWFRSRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTJfRVhUUkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IEVYVFJFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMl9FWFRGRU5fUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IEVYVEZFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTJfRVhURkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDEyX0VYVEZFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBFWFRGRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTJfVFJHRExZRElWX1BvcyAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBUUkdETFlESVYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEyX1RSR0RMWURJVl9Nc2sgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEwxMl9UUkdETFlESVZfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogVFJHRExZRElWIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEyX1RSR0RMWUNOVF9Qb3MgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogVFJHRExZQ05UIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMl9UUkdETFlDTlRfTXNrICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDEyX1RSR0RMWUNOVF9Qb3MpICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IFRSR0RMWUNOVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxMl9UUkdTRUxfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTJfVFJHU0VMX01zayAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEwxMl9UUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBUUkdTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTJfSU5UUE9TX1BvcyAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEyOiBJTlRQT1MgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEyX0lOVFBPU19Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxMl9JTlRQT1NfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogSU5UUE9TIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEyX0VYVFNNUFRfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMjogRVhUU01QVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxMl9FWFRTTVBUX01zayAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDEyX0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTI6IEVYVFNNUFQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxM19DSFNFTF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IENIU0VMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTNfQ0hTRUxfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfU0NUTDEzX0NIU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBDSFNFTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTNfRVhUUkVOX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBFWFRSRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEzX0VYVFJFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxM19FWFRSRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogRVhUUkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEzX0VYVEZFTl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogRVhURkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxM19FWFRGRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTNfRVhURkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IEVYVEZFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxM19UUkdETFlESVZfUG9zICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IFRSR0RMWURJViBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTNfVFJHRExZRElWX01zayAgICAgICAgKDB4M3VsIDw8IEVBRENfU0NUTDEzX1RSR0RMWURJVl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBUUkdETFlESVYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTNfVFJHRExZQ05UX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBUUkdETFlDTlQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEzX1RSR0RMWUNOVF9Nc2sgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTNfVFJHRExZQ05UX1BvcykgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogVFJHRExZQ05UIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDEzX1RSR1NFTF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogVFJHU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxM19UUkdTRUxfTXNrICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU0NUTDEzX1RSR1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IFRSR1NFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxM19JTlRQT1NfUG9zICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTM6IElOVFBPUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTNfSU5UUE9TX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDEzX0lOVFBPU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBJTlRQT1MgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTNfRVhUU01QVF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDEzOiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDEzX0VYVFNNUFRfTXNrICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTNfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxMzogRVhUU01QVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE0X0NIU0VMX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogQ0hTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNF9DSFNFTF9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19TQ1RMMTRfQ0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IENIU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNF9FWFRSRU5fUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IEVYVFJFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTRfRVhUUkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDE0X0VYVFJFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBFWFRSRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTRfRVhURkVOX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBFWFRGRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE0X0VYVEZFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxNF9FWFRGRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogRVhURkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE0X1RSR0RMWURJVl9Qb3MgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogVFJHRExZRElWIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNF9UUkdETFlESVZfTXNrICAgICAgICAoMHgzdWwgPDwgRUFEQ19TQ1RMMTRfVFJHRExZRElWX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IFRSR0RMWURJViBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNF9UUkdETFlDTlRfUG9zICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IFRSR0RMWUNOVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTRfVFJHRExZQ05UX01zayAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxNF9UUkdETFlDTlRfUG9zKSAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBUUkdETFlDTlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTRfVFJHU0VMX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBUUkdTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE0X1RSR1NFTF9Nc2sgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19TQ1RMMTRfVFJHU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogVFJHU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE0X0lOVFBPU19Qb3MgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNDogSU5UUE9TIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNF9JTlRQT1NfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTRfSU5UUE9TX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IElOVFBPUyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNF9FWFRTTVBUX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTQ6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTRfRVhUU01QVF9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxNF9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE0OiBFWFRTTVBUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTVfQ0hTRUxfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBDSFNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE1X0NIU0VMX01zayAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX1NDVEwxNV9DSFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogQ0hTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE1X0VYVFJFTl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogRVhUUkVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNV9FWFRSRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TQ1RMMTVfRVhUUkVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IEVYVFJFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNV9FWFRGRU5fUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IEVYVEZFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTVfRVhURkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU0NUTDE1X0VYVEZFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBFWFRGRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTVfVFJHRExZRElWX1BvcyAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBUUkdETFlESVYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE1X1RSR0RMWURJVl9Nc2sgICAgICAgICgweDN1bCA8PCBFQURDX1NDVEwxNV9UUkdETFlESVZfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogVFJHRExZRElWIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE1X1RSR0RMWUNOVF9Qb3MgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogVFJHRExZQ05UIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNV9UUkdETFlDTlRfTXNrICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDE1X1RSR0RMWUNOVF9Qb3MpICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IFRSR0RMWUNOVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNV9UUkdTRUxfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IFRSR1NFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTVfVFJHU0VMX01zayAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX1NDVEwxNV9UUkdTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBUUkdTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTVfSU5UUE9TX1BvcyAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE1OiBJTlRQT1MgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE1X0lOVFBPU19Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NDVEwxNV9JTlRQT1NfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogSU5UUE9TIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE1X0VYVFNNUFRfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNTogRVhUU01QVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxNV9FWFRTTVBUX01zayAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDE1X0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTU6IEVYVFNNUFQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NDVEwxNl9FWFRTTVBUX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTY6IEVYVFNNUFQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TQ1RMMTZfRVhUU01QVF9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBFQURDX1NDVEwxNl9FWFRTTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE2OiBFWFRTTVBUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TQ1RMMTdfRVhUU01QVF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U0NUTDE3OiBFWFRTTVBUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU0NUTDE3X0VYVFNNUFRfTXNrICAgICAgICAgICgweGZmdWwgPDwgRUFEQ19TQ1RMMTdfRVhUU01QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxNzogRVhUU01QVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU0NUTDE4X0VYVFNNUFRfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNDVEwxODogRVhUU01QVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX1NDVEwxOF9FWFRTTVBUX01zayAgICAgICAgICAoMHhmZnVsIDw8IEVBRENfU0NUTDE4X0VYVFNNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTQ1RMMTg6IEVYVFNNUFQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTFfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUUxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTJfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUyX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUzX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFNF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUU0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTRfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUU0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTVfUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUU1X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUU2X1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFNl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUU2IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFN19Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUU3IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTdfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUU3X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFNyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRThfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFOCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUU4X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFOF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTggTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUU5X1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFOV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUU5IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTBfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTEwX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUUxMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTExX1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFMTFfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTExIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxMl9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTEyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTEyX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTNfUG9zICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTEzX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUUxM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTE0X1BvcyAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFMTRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTE0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxNV9Qb3MgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTE1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTE1X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMTZfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxNiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTE2X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzBfU1BMSUUxNl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMF9TUExJRTE3X1BvcyAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzA6IFNQTElFMTcgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxN19Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMwX1NQTElFMTdfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTE3IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzBfU1BMSUUxOF9Qb3MgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMwOiBTUExJRTE4IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMwX1NQTElFMThfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMF9TUExJRTE4X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMDogU1BMSUUxOCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTBfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUUwX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTFfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUyX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFM19Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTNfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUUzX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTRfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUU0X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUU1X1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUU1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFNl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUU2IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTZfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUU2X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFNiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTdfUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFNyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUU3X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFN19Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTcgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUU4X1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTggUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFOF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRThfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUU4IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFOV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUU5IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTlfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUU5X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFOSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTEwX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFMTBfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTEwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxMV9Qb3MgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTExIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTExX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTJfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTEyX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUUxMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTEzX1BvcyAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFMTNfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTEzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxNF9Qb3MgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTE0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTRfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTE0X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTVfUG9zICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTE1X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUUxNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTE2X1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxNl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMxX1NQTElFMTZfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTE2IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzFfU1BMSUUxN19Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMxOiBTUExJRTE3IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMTdfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMV9TUExJRTE3X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxNyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMxX1NQTElFMThfUG9zICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMTogU1BMSUUxOCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMV9TUExJRTE4X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzFfU1BMSUUxOF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzE6IFNQTElFMTggTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUwX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTJfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUUyX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTNfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUzX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUU0X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUU0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFNV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUU1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTVfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUU1X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTZfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFNiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUU2X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFNl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUU3X1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTcgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFN19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUU3IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFOF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUU4IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRThfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUU4X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFOCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTlfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFOSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUU5X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFOV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTkgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxMF9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTEwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTEwX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTFfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTExX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUUxMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTEyX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFMTJfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTEyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxM19Qb3MgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTEzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTEzX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTRfUG9zICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTE0X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUUxNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTE1X1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFMTVfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTE1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxNl9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTE2IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTZfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDMl9TUExJRTE2X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxNiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMyX1NQTElFMTdfUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMjogU1BMSUUxNyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTE3X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzJfU1BMSUUxN19Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTcgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDMl9TUExJRTE4X1BvcyAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzI6IFNQTElFMTggUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzJfU1BMSUUxOF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMyX1NQTElFMThfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMyOiBTUExJRTE4IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTFfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUUxX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTJfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUyX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUzX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFNF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUU0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTRfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUU0X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTVfUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUU1X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUU2X1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFNl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUU2IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFN19Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUU3IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTdfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUU3X1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFNyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRThfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFOCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUU4X01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFOF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTggTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUU5X1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFOV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUU5IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTBfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTEwX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUUxMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTExX1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFMTFfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTExIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxMl9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTEyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTEyX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTNfUG9zICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTEzX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUUxM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTE0X1BvcyAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFMTRfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTE0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxNV9Qb3MgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTE1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTVfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTE1X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMTZfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxNiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTE2X01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0lOVFNSQzNfU1BMSUUxNl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfSU5UU1JDM19TUExJRTE3X1BvcyAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OklOVFNSQzM6IFNQTElFMTcgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxN19Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19JTlRTUkMzX1NQTElFMTdfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTE3IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0lOVFNSQzNfU1BMSUUxOF9Qb3MgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpJTlRTUkMzOiBTUExJRTE4IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19JTlRTUkMzX1NQTElFMThfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfSU5UU1JDM19TUExJRTE4X1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6SU5UU1JDMzogU1BMSUUxOCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVBfQURDTVBFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QOiBBRENNUEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QX0FEQ01QRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUF9BRENNUEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQURDTVBFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QX0FEQ01QSUVfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQURDTVBJRSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUF9BRENNUElFX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVBfQURDTVBJRV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVA6IEFEQ01QSUUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUF9DTVBDT05EX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVA6IENNUENPTkQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVBfQ01QQ09ORF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QX0NNUENPTkRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QOiBDTVBDT05EIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVBfQ01QU1BMX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QOiBDTVBTUEwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QX0NNUFNQTF9Nc2sgICAgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19DTVBfQ01QU1BMX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQ01QU1BMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QX0NNUE1DTlRfUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQ01QTUNOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUF9DTVBNQ05UX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19DTVBfQ01QTUNOVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVA6IENNUE1DTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUF9DTVBXRU5fUG9zICAgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVA6IENNUFdFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVBfQ01QV0VOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QX0NNUFdFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QOiBDTVBXRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVBfQ01QREFUX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QOiBDTVBEQVQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QX0NNUERBVF9Nc2sgICAgICAgICAgICAgICgweGZmZnVsIDw8IEVBRENfQ01QX0NNUERBVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDogQ01QREFUIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMF9BRENNUEVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDA6IEFEQ01QRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDBfQURDTVBFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAwX0FEQ01QRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBBRENNUEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDBfQURDTVBJRV9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBBRENNUElFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAwX0FEQ01QSUVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QMF9BRENNUElFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMDogQURDTVBJRSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAwX0NNUENPTkRfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMDogQ01QQ09ORCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMF9DTVBDT05EX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDBfQ01QQ09ORF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDA6IENNUENPTkQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMF9DTVBTUExfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDA6IENNUFNQTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDBfQ01QU1BMX01zayAgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfQ01QMF9DTVBTUExfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBDTVBTUEwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDBfQ01QTUNOVF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBDTVBNQ05UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAwX0NNUE1DTlRfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfQ01QMF9DTVBNQ05UX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMDogQ01QTUNOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAwX0NNUFdFTl9Qb3MgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMDogQ01QV0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMF9DTVBXRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDBfQ01QV0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDA6IENNUFdFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMF9DTVBEQVRfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDA6IENNUERBVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDBfQ01QREFUX01zayAgICAgICAgICAgICAoMHhmZmZ1bCA8PCBFQURDX0NNUDBfQ01QREFUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAwOiBDTVBEQVQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDFfQURDTVBFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAxOiBBRENNUEVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAxX0FEQ01QRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QMV9BRENNUEVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQURDTVBFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAxX0FEQ01QSUVfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQURDTVBJRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMV9BRENNUElFX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDFfQURDTVBJRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDE6IEFEQ01QSUUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMV9DTVBDT05EX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDE6IENNUENPTkQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDFfQ01QQ09ORF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAxX0NNUENPTkRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAxOiBDTVBDT05EIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDFfQ01QU1BMX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAxOiBDTVBTUEwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAxX0NNUFNQTF9Nc2sgICAgICAgICAgICAgKDB4MWZ1bCA8PCBFQURDX0NNUDFfQ01QU1BMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQ01QU1BMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAxX0NNUE1DTlRfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQ01QTUNOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMV9DTVBNQ05UX01zayAgICAgICAgICAgICgweGZ1bCA8PCBFQURDX0NNUDFfQ01QTUNOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDE6IENNUE1DTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMV9DTVBXRU5fUG9zICAgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDE6IENNUFdFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDFfQ01QV0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAxX0NNUFdFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAxOiBDTVBXRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDFfQ01QREFUX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAxOiBDTVBEQVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAxX0NNUERBVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmdWwgPDwgRUFEQ19DTVAxX0NNUERBVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMTogQ01QREFUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAyX0FEQ01QRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMjogQURDTVBFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMl9BRENNUEVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDJfQURDTVBFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IEFEQ01QRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMl9BRENNUElFX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IEFEQ01QSUUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDJfQURDTVBJRV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAyX0FEQ01QSUVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAyOiBBRENNUElFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDJfQ01QQ09ORF9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAyOiBDTVBDT05EIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAyX0NNUENPTkRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QMl9DTVBDT05EX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMjogQ01QQ09ORCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAyX0NNUFNQTF9Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMjogQ01QU1BMIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMl9DTVBTUExfTXNrICAgICAgICAgICAgICgweDFmdWwgPDwgRUFEQ19DTVAyX0NNUFNQTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IENNUFNQTCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QMl9DTVBNQ05UX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IENNUE1DTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDJfQ01QTUNOVF9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgRUFEQ19DTVAyX0NNUE1DTlRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAyOiBDTVBNQ05UIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDJfQ01QV0VOX1BvcyAgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAyOiBDTVBXRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAyX0NNUFdFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QMl9DTVBXRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMjogQ01QV0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAyX0NNUERBVF9Qb3MgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMjogQ01QREFUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QMl9DTVBEQVRfTXNrICAgICAgICAgICAgICgweGZmZnVsIDw8IEVBRENfQ01QMl9DTVBEQVRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDI6IENNUERBVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QM19BRENNUEVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDM6IEFEQ01QRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDNfQURDTVBFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DTVAzX0FEQ01QRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBBRENNUEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDNfQURDTVBJRV9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBBRENNUElFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAzX0FEQ01QSUVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ01QM19BRENNUElFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMzogQURDTVBJRSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAzX0NNUENPTkRfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMzogQ01QQ09ORCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QM19DTVBDT05EX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDNfQ01QQ09ORF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDM6IENNUENPTkQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QM19DTVBTUExfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDM6IENNUFNQTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDNfQ01QU1BMX01zayAgICAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfQ01QM19DTVBTUExfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBDTVBTUEwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NNUDNfQ01QTUNOVF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBDTVBNQ05UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DTVAzX0NNUE1DTlRfTXNrICAgICAgICAgICAgKDB4ZnVsIDw8IEVBRENfQ01QM19DTVBNQ05UX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMzogQ01QTUNOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DTVAzX0NNUFdFTl9Qb3MgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q01QMzogQ01QV0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfQ01QM19DTVBXRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0NNUDNfQ01QV0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDM6IENNUFdFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ01QM19DTVBEQVRfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNNUDM6IENNUERBVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0NNUDNfQ01QREFUX01zayAgICAgICAgICAgICAoMHhmZmZ1bCA8PCBFQURDX0NNUDNfQ01QREFUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDTVAzOiBDTVBEQVQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzBfVkFMSURfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMwOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMwX1ZBTElEX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVBRENfU1RBVFVTMF9WQUxJRF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMDogVkFMSUQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMwX09WX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMDogT1YgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMF9PVl9Nc2sgICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBFQURDX1NUQVRVUzBfT1ZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzA6IE9WIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMV9WQUxJRF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzE6IFZBTElEIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzFfVkFMSURfTXNrICAgICAgICAgICAoMHg3dWwgPDwgRUFEQ19TVEFUVVMxX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMxOiBWQUxJRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzFfT1ZfUG9zICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMxOiBPViBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMxX09WX01zayAgICAgICAgICAgICAgKDB4N3VsIDw8IEVBRENfU1RBVFVTMV9PVl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMTogT1YgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FESUYwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURJRjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRElGMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURJRjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFESUYwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRElGMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFESUYxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURJRjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FESUYxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRElGMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURJRjJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRElGMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FESUYyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRElGMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURJRjIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FESUYzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURJRjMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRElGM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURJRjNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFESUYzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUEYwX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QRjAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBGMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FEQ01QRjBfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUEYwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBGMV9Qb3MgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUEYxIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QRjFfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRENNUEYxX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBGMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QRjJfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBGMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUEYyX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURDTVBGMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QRjIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUEYzX1BvcyAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QRjMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBGM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FEQ01QRjNfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUEYzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURPVklGMF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRE9WSUYwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FET1ZJRjBfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRE9WSUYwX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURPVklGMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FET1ZJRjFfUG9zICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURPVklGMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRE9WSUYxX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURPVklGMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFET1ZJRjEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRE9WSUYyX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFET1ZJRjIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURPVklGMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FET1ZJRjJfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRE9WSUYyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURPVklGM19Qb3MgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRE9WSUYzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FET1ZJRjNfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRE9WSUYzX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURPVklGMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QTzBfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBPMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUE8wX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURDTVBPMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QTzAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUE8xX1BvcyAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QTzEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBPMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX0FEQ01QTzFfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUE8xIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQURDTVBPMl9Qb3MgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBRENNUE8yIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QTzJfTXNrICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BRENNUE8yX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBPMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FEQ01QTzNfUG9zICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURDTVBPMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRENNUE8zX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURDTVBPM19Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFEQ01QTzMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9DSEFOTkVMX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IENIQU5ORUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfQ0hBTk5FTF9Nc2sgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU1RBVFVTMl9DSEFOTkVMX1BvcykgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBDSEFOTkVMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQlVTWV9Qb3MgICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBCVVNZIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0JVU1lfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9CVVNZX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQlVTWSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FET1ZJRl9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQURPVklGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BRE9WSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQURPVklGX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFET1ZJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTMl9TVE9WRl9Qb3MgICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IFNUT1ZGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzJfU1RPVkZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19TVEFUVVMyX1NUT1ZGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBTVE9WRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1NUQVRVUzJfQVZBTElEX1BvcyAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMyOiBBVkFMSUQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FWQUxJRF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVBRENfU1RBVFVTMl9BVkFMSURfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQVZBTElEIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19TVEFUVVMyX0FPVl9Qb3MgICAgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6U1RBVFVTMjogQU9WIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVBRENfU1RBVFVTMl9BT1ZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX1NUQVRVUzJfQU9WX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzI6IEFPViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfU1RBVFVTM19DVVJTUExfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlNUQVRVUzM6IENVUlNQTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX1NUQVRVUzNfQ1VSU1BMX01zayAgICAgICAgICAoMHgxZnVsIDw8IEVBRENfU1RBVFVTM19DVVJTUExfUG9zKSAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpTVEFUVVMzOiBDVVJTUEwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0REQVQwX1JFU1VMVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMDogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EREFUMF9SRVNVTFRfTXNrICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVBRENfRERBVDBfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDA6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EREFUMF9PVl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDA6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVBRENfRERBVDBfT1ZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0REQVQwX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQwOiBPViBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfRERBVDBfVkFMSURfUG9zICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQwOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0REQVQwX1ZBTElEX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EREFUMF9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMDogVkFMSUQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0REQVQxX1JFU1VMVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMTogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EREFUMV9SRVNVTFRfTXNrICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVBRENfRERBVDFfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDE6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EREFUMV9PVl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDE6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVBRENfRERBVDFfT1ZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0REQVQxX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQxOiBPViBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfRERBVDFfVkFMSURfUG9zICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQxOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0REQVQxX1ZBTElEX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EREFUMV9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMTogVkFMSUQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0REQVQyX1JFU1VMVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMjogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EREFUMl9SRVNVTFRfTXNrICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVBRENfRERBVDJfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDI6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EREFUMl9PVl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDI6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVBRENfRERBVDJfT1ZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0REQVQyX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQyOiBPViBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfRERBVDJfVkFMSURfUG9zICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQyOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0REQVQyX1ZBTElEX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EREFUMl9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMjogVkFMSUQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0REQVQzX1JFU1VMVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMzogUkVTVUxUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19EREFUM19SRVNVTFRfTXNrICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IEVBRENfRERBVDNfUkVTVUxUX1BvcykgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDM6IFJFU1VMVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19EREFUM19PVl9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6RERBVDM6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVBRENfRERBVDNfT1ZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBFQURDX0REQVQzX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQzOiBPViBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfRERBVDNfVkFMSURfUG9zICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkREQVQzOiBWQUxJRCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX0REQVQzX1ZBTElEX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19EREFUM19WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpEREFUMzogVkFMSUQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1BXUk1fUFdVUFJEWV9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpQV1JNOiBQV1VQUkRZIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19QV1JNX1BXVVBSRFlfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfUFdSTV9QV1VQUkRZX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6UFdSTTogUFdVUFJEWSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19QV1JNX1BXVUNBTEVOX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6UFdSTTogUFdVQ0FMRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVBRENfUFdSTV9QV1VDQUxFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQURDX1BXUk1fUFdVQ0FMRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlBXUk06IFBXVUNBTEVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfUFdSTV9QV0RNT0RfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OlBXUk06IFBXRE1PRCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQURDX1BXUk1fUFdETU9EX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgRUFEQ19QV1JNX1BXRE1PRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpQV1JNOiBQV0RNT0QgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX1BXUk1fTERPU1VUX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpQV1JNOiBMRE9TVVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19QV1JNX0xET1NVVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmdWwgPDwgRUFEQ19QV1JNX0xET1NVVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6UFdSTTogTERPU1VUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DQUxDVExfQ0FMU1RBUlRfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q0FMQ1RMOiBDQUxTVEFSVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfQ0FMQ1RMX0NBTFNUQVJUX01zayAgICAgICAgICgweDF1bCA8PCBFQURDX0NBTENUTF9DQUxTVEFSVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNBTENUTDogQ0FMU1RBUlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVBRENfQ0FMQ1RMX0NBTERPTkVfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNBTENUTDogQ0FMRE9ORSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQURDX0NBTENUTF9DQUxET05FX01zayAgICAgICAgICAoMHgxdWwgPDwgRUFEQ19DQUxDVExfQ0FMRE9ORV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDQUxDVEw6IENBTERPTkUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQURDX0NBTENUTF9DQUxTRUxfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUFEQ19UOjpDQUxDVEw6IENBTFNFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DQUxDVExfQ0FMU0VMX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVBRENfQ0FMQ1RMX0NBTFNFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q0FMQ1RMOiBDQUxTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUFEQ19DQUxEV1JEX0NBTFdPUkRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVBRENfVDo6Q0FMRFdSRDogQ0FMV09SRCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVBRENfQ0FMRFdSRF9DQUxXT1JEX01zayAgICAgICAgICgweDdmdWwgPDwgRUFEQ19DQUxEV1JEX0NBTFdPUkRfUG9zKSAgICAgICAgICAgICAgLyohPCBFQURDX1Q6OkNBTERXUkQ6IENBTFdPUkQgTWFzayAgICAgICAgICAqLworCisvKipAfSovIC8qIEVBRENfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIEVBREMgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworCisjZW5kaWYgLyogX19FQURDX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9lYmlfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZWJpX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDFkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZWJpX3JlZy5oCkBAIC0wLDAgKzEsMTYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZWJpX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBFQkkgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRUJJX1JFR19IX18KKyNkZWZpbmUgX19FQklfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIEVCSSBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIENvbnRyb2xsZXIoRUJJKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBFQkkgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBFQklfVDo6Q1RMMAorICAgICAqIE9mZnNldDogMHgwMCAgRXh0ZXJuYWwgQnVzIEludGVyZmFjZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RU4gICAgICAgIHxFQkkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHRoZSBmdW5jdGlvbmFsIGVuYWJsZSBiaXQgZm9yIEVCSS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUJJIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQkkgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8RFcxNiAgICAgIHxFQkkgRGF0YSBXaWR0aCAxNi1iaXQgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyBpZiB0aGUgRUJJIGRhdGEgd2lkdGggaXMgOC1iaXQgb3IgMTYtYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQkkgZGF0YSB3aWR0aCBpcyA4LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUJJIGRhdGEgd2lkdGggaXMgMTYtYml0LgorICAgICAqIHxbMl0gICAgIHxDU1BPTElOViAgfENoaXAgU2VsZWN0IFBpbiBQb2xhciBJbnZlcnNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgYWN0aXZlIGxldmVsIG9mIEVCSSBjaGlwIHNlbGVjdCBwaW4gKEVCSV9uQ1MpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGlwIHNlbGVjdCBwaW4gKEVCSV9uQ1MpIGlzIGFjdGl2ZSBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoaXAgc2VsZWN0IHBpbiAoRUJJX25DUykgaXMgYWN0aXZlIGhpZ2guCisgICAgICogfFszXSAgICAgfEFEU0VQRU4gICB8RUJJIEFkZHJlc3MvRGF0YSBCdXMgU2VwYXJhdGluZyBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQWRkcmVzcy9EYXRhIEJ1cyBTZXBhcmF0aW5nIE1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFkZHJlc3MvRGF0YSBCdXMgU2VwYXJhdGluZyBNb2RlIEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfENBQ0NFU1MgICB8Q29udGludW91cyBEYXRhIEFjY2VzcyBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBjb250aW51b3VzIGFjY2VzcyBtb2RlIGVuYWJsZWQsIHRoZSB0QVNVLCB0QUxFIGFuZCB0TEhEIGN5Y2xlcyBhcmUgYnlwYXNzIGZvciBjb250aW51b3VzIGRhdGEgdHJhbnNmZXIgcmVxdWVzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udGludW91cyBkYXRhIGFjY2VzcyBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb250aW51b3VzIGRhdGEgYWNjZXNzIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8WzEwOjhdICB8TUNMS0RJViAgIHxFeHRlcm5hbCBPdXRwdXQgQ2xvY2sgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmcmVxdWVuY3kgb2YgRUJJIG91dHB1dCBjbG9jayAoTUNMSykgaXMgY29udHJvbGxlZCBieSBNQ0xLRElWIGFzIGZvbGxvdzoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBIQ0xLLzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gSENMSy8yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IEhDTEsvNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBIQ0xLLzguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gSENMSy8xNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBIQ0xLLzMyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IEhDTEsvNjQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gSENMSy8xMjguCisgICAgICogfFsxODoxNl0gfFRBTEUgICAgICB8RXh0ZW5kIFRpbWUgb2YgQUxFCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEVCSV9BTEUgaGlnaCBwdWxzZSBwZXJpb2QgKHRBTEUpIHRvIGxhdGNoIHRoZSBhZGRyZXNzIGNhbiBiZSBjb250cm9sbGVkIGJ5IFRBTEUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8dEFMRSA9IChUQUxFKzEpKkVCSV9NQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgZmllbGQgb25seSBhdmFpbGFibGUgaW4gRUJJX0NUTDAgcmVnaXN0ZXIKKyAgICAgKiB8WzI0XSAgICB8V0JVRkVOICAgIHxFQkkgV3JpdGUgQnVmZmVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUJJIHdyaXRlIGJ1ZmZlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUJJIHdyaXRlIGJ1ZmZlciBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IG9ubHkgYXZhaWxhYmxlIGluIEVCSV9DVEwwIHJlZ2lzdGVyCisgICAgICogQHZhciBFQklfVDo6VENUTDAKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgVGltaW5nIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzozXSAgIHxUQUNDICAgICAgfEVCSSBEYXRhIEFjY2VzcyBUaW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VEFDQyBkZWZpbmUgZGF0YSBhY2Nlc3MgdGltZSAodEFDQykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8dEFDQyA9IChUQUNDKzEpICogRUJJX01DTEsuCisgICAgICogfFsxMDo4XSAgfFRBSEQgICAgICB8RUJJIERhdGEgQWNjZXNzIEhvbGQgVGltZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRBSEQgZGVmaW5lIGRhdGEgYWNjZXNzIGhvbGQgdGltZSAodEFIRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8dEFIRCA9IChUQUhEKzEpICogRUJJX01DTEsuCisgICAgICogfFsxNToxMl0gfFcyWCAgICAgICB8SWRsZSBDeWNsZSBBZnRlciBXcml0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIFcyWCBpZGxlIGN5Y2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFcyWCBpZGxlIGN5Y2xlID0gKFcyWCAqIEVCSV9NQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHdyaXRlIGFjdGlvbiBpcyBmaW5pc2gsIFcyWCBpZGxlIGN5Y2xlIGlzIGluc2VydGVkIGFuZCBFQklfbkNTIHJldHVybiB0byBpZGxlIHN0YXRlLgorICAgICAqIHxbMjJdICAgIHxSQUhET0ZGICAgfEFjY2VzcyBIb2xkIFRpbWUgRGlzYWJsZSBDb250cm9sIFdoZW4gUmVhZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgRGF0YSBBY2Nlc3MgSG9sZCBUaW1lICh0QUhEKSBkdXJpbmcgRUJJIHJlYWRpbmcgaXMgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIERhdGEgQWNjZXNzIEhvbGQgVGltZSAodEFIRCkgZHVyaW5nIEVCSSByZWFkaW5nIGlzIERpc2FibGVkLgorICAgICAqIHxbMjNdICAgIHxXQUhET0ZGICAgfEFjY2VzcyBIb2xkIFRpbWUgRGlzYWJsZSBDb250cm9sIFdoZW4gV3JpdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIERhdGEgQWNjZXNzIEhvbGQgVGltZSAodEFIRCkgZHVyaW5nIEVCSSB3cml0aW5nIGlzIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBEYXRhIEFjY2VzcyBIb2xkIFRpbWUgKHRBSEQpIGR1cmluZyBFQkkgd3JpdGluZyBpcyBEaXNhYmxlZC4KKyAgICAgKiB8WzI3OjI0XSB8UjJSICAgICAgIHxJZGxlIEN5Y2xlIEJldHdlZW4gUmVhZC10by1yZWFkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgUjJSIGlkbGUgY3ljbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UjJSIGlkbGUgY3ljbGUgPSAoUjJSICogRUJJX01DTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gcmVhZCBhY3Rpb24gaXMgZmluaXNoIGFuZCBuZXh0IGFjdGlvbiBpcyBnb2luZyB0byByZWFkLCBSMlIgaWRsZSBjeWNsZSBpcyBpbnNlcnRlZCBhbmQgRUJJX25DUyByZXR1cm4gdG8gaWRsZSBzdGF0ZS4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDA7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIEJhbmswIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUQ1RMMDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gRXh0ZXJuYWwgQnVzIEludGVyZmFjZSBCYW5rMCBUaW1pbmcgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMl07CisgICAgX19JTyB1aW50MzJfdCBDVEwxOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gRXh0ZXJuYWwgQnVzIEludGVyZmFjZSBCYW5rMSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVENUTDE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTRdIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgQmFuazEgVGltaW5nIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzJdOworICAgIF9fSU8gdWludDMyX3QgQ1RMMjsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgQmFuazIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRDVEwyOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDI0XSBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIEJhbmsyIFRpbWluZyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICovCisKK30gRUJJX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIEVCSV9DT05TVCBFQkkgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgRUJJIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgRUJJX0NUTF9FTl9Qb3MgICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBFTiBQb3NpdGlvbiAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9DVExfRU5fTXNrICAgICAgICAgICAgICAgICAgICgweDF1bCA8PCBFQklfQ1RMX0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogRU4gTWFzayAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVCSV9DVExfRFcxNl9Qb3MgICAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogRFcxNiBQb3NpdGlvbiAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQklfQ1RMX0RXMTZfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRUJJX0NUTF9EVzE2X1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OkNUTDA6IERXMTYgTWFzayAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQklfQ1RMX0NTUE9MSU5WX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OkNUTDA6IENTUE9MSU5WIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX0NUTF9DU1BPTElOVl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVCSV9DVExfQ1NQT0xJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBDU1BPTElOViBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX0NUTF9BRFNFUEVOX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBBRFNFUEVOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX0NUTF9BRFNFUEVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVCSV9DVExfQURTRVBFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBBRFNFUEVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQklfQ1RMX0NBQ0NFU1NfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OkNUTDA6IENBQ0NFU1MgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX0NUTF9DQUNDRVNTX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVCSV9DVExfQ0FDQ0VTU19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBDQUNDRVNTIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX0NUTF9NQ0xLRElWX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBNQ0xLRElWIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9DVExfTUNMS0RJVl9Nc2sgICAgICAgICAgICAgICgweDd1bCA8PCBFQklfQ1RMX01DTEtESVZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogTUNMS0RJViBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVCSV9DVExfVEFMRV9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6Q1RMMDogVEFMRSBQb3NpdGlvbiAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQklfQ1RMX1RBTEVfTXNrICAgICAgICAgICAgICAgICAoMHg3dWwgPDwgRUJJX0NUTF9UQUxFX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OkNUTDA6IFRBTEUgTWFzayAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQklfQ1RMX1dCVUZFTl9Qb3MgICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OkNUTDA6IFdCVUZFTiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX0NUTF9XQlVGRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEVCSV9DVExfV0JVRkVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpDVEwwOiBXQlVGRU4gTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX1RDVExfVEFDQ19Qb3MgICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpUQ1RMMDogVEFDQyBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9UQ1RMX1RBQ0NfTXNrICAgICAgICAgICAgICAgICgweDFmdWwgPDwgRUJJX1RDVExfVEFDQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6VENUTDA6IFRBQ0MgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVCSV9UQ1RMX1RBSERfUG9zICAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6VENUTDA6IFRBSEQgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBFQklfVENUTF9UQUhEX01zayAgICAgICAgICAgICAgICAoMHg3dWwgPDwgRUJJX1RDVExfVEFIRF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OlRDVEwwOiBUQUhEIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQklfVENUTF9XMlhfUG9zICAgICAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OlRDVEwwOiBXMlggUG9zaXRpb24gICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX1RDVExfVzJYX01zayAgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IEVCSV9UQ1RMX1cyWF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpUQ1RMMDogVzJYIE1hc2sgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUJJX1RDVExfUkFIRE9GRl9Qb3MgICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpUQ1RMMDogUkFIRE9GRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVCSV9UQ1RMX1JBSERPRkZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQklfVENUTF9SQUhET0ZGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6VENUTDA6IFJBSERPRkYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVCSV9UQ1RMX1dBSERPRkZfUG9zICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQklfVDo6VENUTDA6IFdBSERPRkYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFQklfVENUTF9XQUhET0ZGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUJJX1RDVExfV0FIRE9GRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OlRDVEwwOiBXQUhET0ZGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQklfVENUTF9SMlJfUG9zICAgICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUJJX1Q6OlRDVEwwOiBSMlIgUG9zaXRpb24gICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJJX1RDVExfUjJSX01zayAgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IEVCSV9UQ1RMX1IyUl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVCSV9UOjpUQ1RMMDogUjJSIE1hc2sgICAgICAgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogRUJJX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBFQkkgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworI2VuZGlmIC8qIF9fRUJJX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9lY2FwX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2VjYXBfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU3NDEyNAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9lY2FwX3JlZy5oCkBAIC0wLDAgKzEsMzg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZWNhcF9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgRUNBUCByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19FQ0FQX1JFR19IX18KKyNkZWZpbmUgX19FQ0FQX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRW5oYW5jZWQgSW5wdXQgQ2FwdHVyZSBUaW1lciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIEVDQVAgRW5oYW5jZWQgSW5wdXQgQ2FwdHVyZSBUaW1lcihFQ0FQKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBFQ0FQIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKyAgICAvKioKKyAgICAgKiBAdmFyIEVDQVBfVDo6Q05UCisgICAgICogT2Zmc2V0OiAweDAwICBJbnB1dCBDYXB0dXJlIENvdW50ZXIgKDI0LWJpdCB1cCBjb3VudGVyKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyMzowXSAgfENOVCAgICAgICB8SW5wdXQgQ2FwdHVyZSBUaW1lci9Db3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IENhcHR1cmUgVGltZXIvQ291bnRlciBpcyBhIDI0LWJpdCB1cC1jb3VudGluZyBjb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIGNvdW50ZXIgaXMgZnJvbSB0aGUgY2xvY2sgZGl2aWRlcgorICAgICAqIEB2YXIgRUNBUF9UOjpITEQwCisgICAgICogT2Zmc2V0OiAweDA0ICBJbnB1dCBDYXB0dXJlIEhvbGQgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyMzowXSAgfEhPTEQgICAgICB8SW5wdXQgQ2FwdHVyZSBDb3VudGVyIEhvbGQgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGFuIGFjdGl2ZSBpbnB1dCBjYXB0dXJlIGNoYW5uZWwgZGV0ZWN0cyBhIHZhbGlkIGVkZ2Ugc2lnbmFsIGNoYW5nZSwgdGhlIEVDQVBDTlQgdmFsdWUgaXMgbGF0Y2hlZCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGhvbGRpbmcgcmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGlucHV0IGNoYW5uZWwgaGFzIGl0cyBvd24gaG9sZGluZyByZWdpc3RlciBuYW1lZCBieSBFQ0FQX0hMRHggd2hlcmUgeCBpcyBmcm9tIDAgdG8gMiB0byBpbmRpY2F0ZSBpbnB1dHMgZnJvbSBJQzAgdG8gSUMyLCByZXNwZWN0aXZlbHkuCisgICAgICogQHZhciBFQ0FQX1Q6OkhMRDEKKyAgICAgKiBPZmZzZXQ6IDB4MDggIElucHV0IENhcHR1cmUgSG9sZCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzIzOjBdICB8SE9MRCAgICAgIHxJbnB1dCBDYXB0dXJlIENvdW50ZXIgSG9sZCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYW4gYWN0aXZlIGlucHV0IGNhcHR1cmUgY2hhbm5lbCBkZXRlY3RzIGEgdmFsaWQgZWRnZSBzaWduYWwgY2hhbmdlLCB0aGUgRUNBUENOVCB2YWx1ZSBpcyBsYXRjaGVkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgaG9sZGluZyByZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVhY2ggaW5wdXQgY2hhbm5lbCBoYXMgaXRzIG93biBob2xkaW5nIHJlZ2lzdGVyIG5hbWVkIGJ5IEVDQVBfSExEeCB3aGVyZSB4IGlzIGZyb20gMCB0byAyIHRvIGluZGljYXRlIGlucHV0cyBmcm9tIElDMCB0byBJQzIsIHJlc3BlY3RpdmVseS4KKyAgICAgKiBAdmFyIEVDQVBfVDo6SExEMgorICAgICAqIE9mZnNldDogMHgwQyAgSW5wdXQgQ2FwdHVyZSBIb2xkIFJlZ2lzdGVyIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjM6MF0gIHxIT0xEICAgICAgfElucHV0IENhcHR1cmUgQ291bnRlciBIb2xkIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBhbiBhY3RpdmUgaW5wdXQgY2FwdHVyZSBjaGFubmVsIGRldGVjdHMgYSB2YWxpZCBlZGdlIHNpZ25hbCBjaGFuZ2UsIHRoZSBFQ0FQQ05UIHZhbHVlIGlzIGxhdGNoZWQgaW50byB0aGUgY29ycmVzcG9uZGluZyBob2xkaW5nIHJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBpbnB1dCBjaGFubmVsIGhhcyBpdHMgb3duIGhvbGRpbmcgcmVnaXN0ZXIgbmFtZWQgYnkgRUNBUF9ITER4IHdoZXJlIHggaXMgZnJvbSAwIHRvIDIgdG8gaW5kaWNhdGUgaW5wdXRzIGZyb20gSUMwIHRvIElDMiwgcmVzcGVjdGl2ZWx5LgorICAgICAqIEB2YXIgRUNBUF9UOjpDTlRDTVAKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIElucHV0IENhcHR1cmUgQ29tcGFyZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyMzowXSAgfENOVENNUCAgICB8SW5wdXQgQ2FwdHVyZSBDb3VudGVyIENvbXBhcmUgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBpcyBlbmFibGVkIChDTVBFTiA9IDEpLCB0aGlzIHJlZ2lzdGVyIChFQ0FQX0NOVENNUCkgaXMgdXNlZCB0byBjb21wYXJlIHdpdGggdGhlIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSByZWxvYWQgY29udHJvbCBpcyBlbmFibGVkIChSTERFTltuXSA9IDEsIG49MH4zKSwgYW4gb3ZlcmZsb3cgZXZlbnQgb3IgY2FwdHVyZSBldmVudHMgd2lsbCB0cmlnZ2VyIHRoZSBoYXJkd2FyZSB0byBsb2FkIHRoZSB2YWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIChFQ0FQX0NOVENNUCkgaW50byBFQ0FQX0NOVC4KKyAgICAgKiBAdmFyIEVDQVBfVDo6Q1RMMAorICAgICAqIE9mZnNldDogMHgxNCAgSW5wdXQgQ2FwdHVyZSBDb250cm9sIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxORkNMS1NFTCAgfE5vaXNlIEZpbHRlciBDbG9jayBQcmUtZGl2aWRlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRvIGRldGVybWluZSB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBOb2lzZSBGaWx0ZXIgY2xvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBDQVBfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IENBUF9DTEsvMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBDQVBfQ0xLLzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gQ0FQX0NMSy8xNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBDQVBfQ0xLLzMyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IENBUF9DTEsvNjQuCisgICAgICogfFszXSAgICAgfENBUE5GRElTICB8SW5wdXQgQ2FwdHVyZSBOb2lzZSBGaWx0ZXIgRGlzYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vaXNlIGZpbHRlciBvZiBJbnB1dCBDYXB0dXJlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE5vaXNlIGZpbHRlciBvZiBJbnB1dCBDYXB0dXJlIERpc2FibGVkIChCeXBhc3MpLgorICAgICAqIHxbNF0gICAgIHxJQzBFTiAgICAgfFBvcnQgUGluIElDMCBJbnB1dCB0byBJbnB1dCBDYXB0dXJlIFVuaXQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSUMwIGlucHV0IHRvIElucHV0IENhcHR1cmUgVW5pdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSUMwIGlucHV0IHRvIElucHV0IENhcHR1cmUgVW5pdCBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxJQzFFTiAgICAgfFBvcnQgUGluIElDMSBJbnB1dCB0byBJbnB1dCBDYXB0dXJlIFVuaXQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSUMxIGlucHV0IHRvIElucHV0IENhcHR1cmUgVW5pdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSUMxIGlucHV0IHRvIElucHV0IENhcHR1cmUgVW5pdCBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxJQzJFTiAgICAgfFBvcnQgUGluIElDMiBJbnB1dCB0byBJbnB1dCBDYXB0dXJlIFVuaXQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSUMyIGlucHV0IHRvIElucHV0IENhcHR1cmUgVW5pdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSUMyIGlucHV0IHRvIElucHV0IENhcHR1cmUgVW5pdCBFbmFibGVkLgorICAgICAqIHxbOTo4XSAgIHxDQVBTRUwwICAgfENBUDAgSW5wdXQgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ0FQMCBpbnB1dCBpcyBmcm9tIHBvcnQgcGluIElDQVAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDQVAwIGlucHV0IGlzIGZyb20gc2lnbmFsIENIQSBvZiBRRUkgY29udHJvbGxlciB1bml0IG4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbnB1dCBjYXB0dXJlIHVuaXQgbiBtYXRjaGVzIFFFSW4sIHdoZXJlIG4gPSAwfjEuCisgICAgICogfFsxMToxMF0gfENBUFNFTDEgICB8Q0FQMSBJbnB1dCBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBDQVAxIGlucHV0IGlzIGZyb20gcG9ydCBwaW4gSUNBUDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENBUDEgaW5wdXQgaXMgZnJvbSBzaWduYWwgQ0hCIG9mIFFFSSBjb250cm9sbGVyIHVuaXQgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElucHV0IGNhcHR1cmUgdW5pdCBuIG1hdGNoZXMgUUVJbiwgd2hlcmUgbiA9IDB+MS4KKyAgICAgKiB8WzEzOjEyXSB8Q0FQU0VMMiAgIHxDQVAyIElucHV0IFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENBUDIgaW5wdXQgaXMgZnJvbSBwb3J0IHBpbiBJQ0FQMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ0FQMiBpbnB1dCBpcyBmcm9tIHNpZ25hbCBDSFggb2YgUUVJIGNvbnRyb2xsZXIgdW5pdCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW5wdXQgY2FwdHVyZSB1bml0IG4gbWF0Y2hlcyBRRUluLCB3aGVyZSBuID0gMH4xLgorICAgICAqIHxbMTZdICAgIHxDQVBJRU4wICAgfElucHV0IENhcHR1cmUgQ2hhbm5lbCAwIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgZmxhZyBDQVBURjAgY2FuIHRyaWdnZXIgSW5wdXQgQ2FwdHVyZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBmbGFnIENBUFRGMCBjYW4gdHJpZ2dlciBJbnB1dCBDYXB0dXJlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTddICAgIHxDQVBJRU4xICAgfElucHV0IENhcHR1cmUgQ2hhbm5lbCAxIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgZmxhZyBDQVBURjEgY2FuIHRyaWdnZXIgSW5wdXQgQ2FwdHVyZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBmbGFnIENBUFRGMSBjYW4gdHJpZ2dlciBJbnB1dCBDYXB0dXJlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMThdICAgIHxDQVBJRU4yICAgfElucHV0IENhcHR1cmUgQ2hhbm5lbCAyIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgZmxhZyBDQVBURjIgY2FuIHRyaWdnZXIgSW5wdXQgQ2FwdHVyZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBmbGFnIENBUFRGMiBjYW4gdHJpZ2dlciBJbnB1dCBDYXB0dXJlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjBdICAgIHxPVklFTiAgICAgfENBUE9WRiBUcmlnZ2VyIElucHV0IENhcHR1cmUgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBmbGFnIENBUE9WRiBjYW4gdHJpZ2dlciBJbnB1dCBDYXB0dXJlIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGZsYWcgQ0FQT1ZGIGNhbiB0cmlnZ2VyIElucHV0IENhcHR1cmUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyMV0gICAgfENNUElFTiAgICB8Q0FQQ01QRiBUcmlnZ2VyIElucHV0IENhcHR1cmUgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBmbGFnIENBUENNUEYgY2FuIHRyaWdnZXIgSW5wdXQgQ2FwdHVyZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBmbGFnIENBUENNUEYgY2FuIHRyaWdnZXIgSW5wdXQgQ2FwdHVyZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzI0XSAgICB8Q05URU4gICAgIHxJbnB1dCBDYXB0dXJlIENvdW50ZXIgU3RhcnQgQ291bnRpbmcgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgdGhpcyBiaXQgdG8gMSwgdGhlIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIHN0YXJ0cyB1cC1jb3VudGluZyBzeW5jaHJvbm91c2x5IHdpdGggdGhlIGNsb2NrIGZyb20gdGhlIC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUNBUF9DTlQgc3RvcCBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUNBUF9DTlQgc3RhcnRzIHVwLWNvdW50aW5nLgorICAgICAqIHxbMjVdICAgIHxDTVBDTFJFTiAgfElucHV0IENhcHR1cmUgQ291bnRlciBDbGVhcmVkIGJ5IENvbXBhcmUtbWF0Y2ggQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB0aGUgY2FwdHVyZSBjb3VudGVyIChFQ0FQX0NOVCkgd2lsbCBiZSBjbGVhcmVkIHRvIDAgd2hlbiB0aGUgY29tcGFyZS1tYXRjaCBldmVudCAoQ0FQQ01QRiA9IDEpIG9jY3Vycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZS1tYXRjaCBldmVudCAoQ0FQQ01QRikgY2FuIGNsZWFyIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlLW1hdGNoIGV2ZW50IChDQVBDTVBGKSBjYW4gY2xlYXIgY2FwdHVyZSBjb3VudGVyIChFQ0FQX0NOVCkgRW5hYmxlZC4KKyAgICAgKiB8WzI4XSAgICB8Q01QRU4gICAgIHxDb21wYXJlIEZ1bmN0aW9uIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvbXBhcmUgZnVuY3Rpb24gaW4gaW5wdXQgY2FwdHVyZSB0aW1lci9jb3VudGVyIGlzIHRvIGNvbXBhcmUgdGhlIGR5bmFtaWMgY291bnRpbmcgRUNBUF9DTlQgd2l0aCB0aGUgY29tcGFyZSByZWdpc3RlciBFQ0FQX0NOVENNUCwgaWYgRUNBUF9DTlQgdmFsdWUgcmVhY2hlcyBFQ0FQX0NOVENNUCwgdGhlIGZsYWcgQ0FQQ01QRiB3aWxsIGJlIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGNvbXBhcmUgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBjb21wYXJlIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyOV0gICAgfENBUEVOICAgICB8SW5wdXQgQ2FwdHVyZSBUaW1lci9Db3VudGVyIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElucHV0IENhcHR1cmUgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElucHV0IENhcHR1cmUgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiBAdmFyIEVDQVBfVDo6Q1RMMQorICAgICAqIE9mZnNldDogMHgxOCAgSW5wdXQgQ2FwdHVyZSBDb250cm9sIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxFREdFU0VMMCAgfENoYW5uZWwgMCBDYXB0dXJlZCBFZGdlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElucHV0IGNhcHR1cmUwIGNhbiBkZXRlY3QgZmFsbGluZyBlZGdlIGNoYW5nZSBvbmx5LCByaXNpbmcgZWRnZSBjaGFuZ2Ugb25seSBvciBib3RoIGVkZ2UgY2hhbmdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEZXRlY3QgcmlzaW5nIGVkZ2Ugb25seS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERldGVjdCBmYWxsaW5nIGVkZ2Ugb25seS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxeCA9IERldGVjdCBib3RoIHJpc2luZyBhbmQgZmFsbGluZyBlZGdlLgorICAgICAqIHxbMzoyXSAgIHxFREdFU0VMMSAgfENoYW5uZWwgMSBDYXB0dXJlZCBFZGdlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElucHV0IGNhcHR1cmUxIGNhbiBkZXRlY3QgZmFsbGluZyBlZGdlIGNoYW5nZSBvbmx5LCByaXNpbmcgZWRnZSBjaGFuZ2Ugb25seSBvciBib3RoIGVkZ2UgY2hhbmdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEZXRlY3QgcmlzaW5nIGVkZ2Ugb25seS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IERldGVjdCBmYWxsaW5nIGVkZ2Ugb25seS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxeCA9IERldGVjdCBib3RoIHJpc2luZyBhbmQgZmFsbGluZyBlZGdlLgorICAgICAqIHxbNTo0XSAgIHxFREdFU0VMMiAgfENoYW5uZWwgMiBDYXB0dXJlZCBFZGdlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElucHV0IGNhcHR1cmUyIGNhbiBkZXRlY3QgZmFsbGluZyBlZGdlIGNoYW5nZSBvbmx5LCByaXNpbmcgZWRnZSBjaGFuZ2Ugb25seSBvciBib3RoIGVkZ2UgY2hhbmdlcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRGV0ZWN0IHJpc2luZyBlZGdlIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBEZXRlY3QgZmFsbGluZyBlZGdlIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MXggPSBEZXRlY3QgYm90aCByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZS4KKyAgICAgKiB8WzhdICAgICB8Q0FQMFJMREVOIHxDYXB0dXJlIENvdW50ZXJ1MjAxOXMgUmVsb2FkIEZ1bmN0aW9uIFRyaWdnZXJlZCBieSBFdmVudCBDQVBURTAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVsb2FkIHRyaWdnZXJlZCBieSBFdmVudCBDQVBURTAgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWxvYWQgdHJpZ2dlcmVkIGJ5IEV2ZW50IENBUFRFMCBFbmFibGVkLgorICAgICAqIHxbOV0gICAgIHxDQVAxUkxERU4gfENhcHR1cmUgQ291bnRlcnUyMDE5cyBSZWxvYWQgRnVuY3Rpb24gVHJpZ2dlcmVkIGJ5IEV2ZW50IENBUFRFMSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZWxvYWQgdHJpZ2dlcmVkIGJ5IEV2ZW50IENBUFRFMSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHJlbG9hZCB0cmlnZ2VyZWQgYnkgRXZlbnQgQ0FQVEUxIEVuYWJsZWQuCisgICAgICogfFsxMF0gICAgfENBUDJSTERFTiB8Q2FwdHVyZSBDb3VudGVydTIwMTlzIFJlbG9hZCBGdW5jdGlvbiBUcmlnZ2VyZWQgYnkgRXZlbnQgQ0FQVEUyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlbG9hZCB0cmlnZ2VyZWQgYnkgRXZlbnQgQ0FQVEUyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVsb2FkIHRyaWdnZXJlZCBieSBFdmVudCBDQVBURTIgRW5hYmxlZC4KKyAgICAgKiB8WzExXSAgICB8T1ZSTERFTiAgIHxDYXB0dXJlIENvdW50ZXJ1MjAxOXMgUmVsb2FkIEZ1bmN0aW9uIFRyaWdnZXJlZCBieSBPdmVyZmxvdyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZWxvYWQgdHJpZ2dlcmVkIGJ5IENBUE9WIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVsb2FkIHRyaWdnZXJlZCBieSBDQVBPViBFbmFibGVkLgorICAgICAqIHxbMTQ6MTJdIHxDTEtTRUwgICAgfENhcHR1cmUgVGltZXIgQ2xvY2sgRGl2aWRlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjYXB0dXJlIHRpbWVyIGNsb2NrIGhhcyBhIHByZS1kaXZpZGVyIHdpdGggZWlnaHQgZGl2aWRlZCBvcHRpb25zIGNvbnRyb2xsZWQgYnkgQ0xLU0VMWzI6MF0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gQ0FQX0NMSy8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IENBUF9DTEsvNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBDQVBfQ0xLLzE2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IENBUF9DTEsvMzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gQ0FQX0NMSy82NC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBDQVBfQ0xLLzk2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IENBUF9DTEsvMTEyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IENBUF9DTEsvMTI4LgorICAgICAqIHxbMTc6MTZdIHxDTlRTUkNTRUwgfENhcHR1cmUgVGltZXIvQ291bnRlciBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2VsZWN0IHRoZSBjYXB0dXJlIHRpbWVyL2NvdW50ZXIgY2xvY2sgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQ0FQX0NMSyAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDQVAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ0FQMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IENBUDIuCisgICAgICogfFsyMF0gICAgfENBUDBDTFJFTiB8Q2FwdHVyZSBDb3VudGVyIENsZWFyZWQgYnkgQ2FwdHVyZSBFdmVudDAgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFdmVudCBDQVBURTAgY2FuIGNsZWFyIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFdmVudCBDQVBURTAgY2FuIGNsZWFyIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIEVuYWJsZWQuCisgICAgICogfFsyMV0gICAgfENBUDFDTFJFTiB8Q2FwdHVyZSBDb3VudGVyIENsZWFyZWQgYnkgQ2FwdHVyZSBFdmVudDEgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFdmVudCBDQVBURTEgY2FuIGNsZWFyIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFdmVudCBDQVBURTEgY2FuIGNsZWFyIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIEVuYWJsZWQuCisgICAgICogfFsyMl0gICAgfENBUDJDTFJFTiB8Q2FwdHVyZSBDb3VudGVyIENsZWFyZWQgYnkgQ2FwdHVyZSBFdmVudDIgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFdmVudCBDQVBURTIgY2FuIGNsZWFyIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFdmVudCBDQVBURTIgY2FuIGNsZWFyIGNhcHR1cmUgY291bnRlciAoRUNBUF9DTlQpIEVuYWJsZWQuCisgICAgICogQHZhciBFQ0FQX1Q6OlNUQVRVUworICAgICAqIE9mZnNldDogMHgxQyAgSW5wdXQgQ2FwdHVyZSBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDQVBURjAgICAgfElucHV0IENhcHR1cmUgQ2hhbm5lbCAwIFRyaWdnZXJlZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgaW5wdXQgY2FwdHVyZSBjaGFubmVsIDAgZGV0ZWN0cyBhIHZhbGlkIGVkZ2UgY2hhbmdlIGF0IENBUDAgaW5wdXQsIGl0IHdpbGwgc2V0IGZsYWcgQ0FQVEYwIHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHZhbGlkIGVkZ2UgY2hhbmdlIGhhcyBiZWVuIGRldGVjdGVkIGF0IENBUDAgaW5wdXQgc2luY2UgbGFzdCBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXQgbGVhc3QgYSB2YWxpZCBlZGdlIGNoYW5nZSBoYXMgYmVlbiBkZXRlY3RlZCBhdCBDQVAwIGlucHV0IHNpbmNlIGxhc3QgY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgb25seSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzFdICAgICB8Q0FQVEYxICAgIHxJbnB1dCBDYXB0dXJlIENoYW5uZWwgMSBUcmlnZ2VyZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGlucHV0IGNhcHR1cmUgY2hhbm5lbCAxIGRldGVjdHMgYSB2YWxpZCBlZGdlIGNoYW5nZSBhdCBDQVAxIGlucHV0LCBpdCB3aWxsIHNldCBmbGFnIENBUFRGMSB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB2YWxpZCBlZGdlIGNoYW5nZSBoYXMgYmVlbiBkZXRlY3RlZCBhdCBDQVAxIGlucHV0IHNpbmNlIGxhc3QgY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF0IGxlYXN0IGEgdmFsaWQgZWRnZSBjaGFuZ2UgaGFzIGJlZW4gZGV0ZWN0ZWQgYXQgQ0FQMSBpbnB1dCBzaW5jZSBsYXN0IGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsyXSAgICAgfENBUFRGMiAgICB8SW5wdXQgQ2FwdHVyZSBDaGFubmVsIDIgVHJpZ2dlcmVkIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBpbnB1dCBjYXB0dXJlIGNoYW5uZWwgMiBkZXRlY3RzIGEgdmFsaWQgZWRnZSBjaGFuZ2UgYXQgQ0FQMiBpbnB1dCwgaXQgd2lsbCBzZXQgZmxhZyBDQVBURjIgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gdmFsaWQgZWRnZSBjaGFuZ2UgaGFzIGJlZW4gZGV0ZWN0ZWQgYXQgQ0FQMiBpbnB1dCBzaW5jZSBsYXN0IGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdCBsZWFzdCBhIHZhbGlkIGVkZ2UgY2hhbmdlIGhhcyBiZWVuIGRldGVjdGVkIGF0IENBUDIgaW5wdXQgc2luY2UgbGFzdCBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNF0gICAgIHxDQVBDTVBGICAgfElucHV0IENhcHR1cmUgQ29tcGFyZS1tYXRjaCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGlucHV0IGNhcHR1cmUgY29tcGFyZSBmdW5jdGlvbiBpcyBlbmFibGVkLCB0aGUgZmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBjYXB0dXJlIGNvdW50ZXIgKEVDQVBfQ05UKSB1cCBjb3VudHMgYW5kIHJlYWNoZXMgdGhlIEVDQVBfQ05UQ01QIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQ0FQX0NOVCBoYXMgbm90IG1hdGNoZWQgRUNBUF9DTlRDTVAgdmFsdWUgc2luY2UgbGFzdCBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUNBUF9DTlQgaGFzIG1hdGNoZWQgRUNBUF9DTlRDTVAgdmFsdWUgYXQgbGVhc3Qgb25jZSBzaW5jZSBsYXN0IGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs1XSAgICAgfENBUE9WRiAgICB8SW5wdXQgQ2FwdHVyZSBDb3VudGVyIE92ZXJmbG93IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGNvdW50ZXIgKEVDQVBfQ05UKSBvdmVyZmxvd3MgZnJvbSAweDAwRkZfRkZGRiB0byB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBvdmVyZmxvdyBldmVudCBoYXMgb2NjdXJyZWQgc2luY2UgbGFzdCBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3ZlcmZsb3cgZXZlbnQocykgaGFzL2hhdmUgb2NjdXJyZWQgc2luY2UgbGFzdCBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNl0gICAgIHxDQVAwICAgICAgfFZhbHVlIG9mIElucHV0IENoYW5uZWwgMCwgQ0FQMCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlZmxlY3RpbmcgdGhlIHZhbHVlIG9mIGlucHV0IGNoYW5uZWwgMCwgQ0FQMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfChUaGUgYml0IGlzIHJlYWQgb25seSBhbmQgd3JpdGUgaXMgaWdub3JlZCkKKyAgICAgKiB8WzddICAgICB8Q0FQMSAgICAgIHxWYWx1ZSBvZiBJbnB1dCBDaGFubmVsIDEsIENBUDEgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWZsZWN0aW5nIHRoZSB2YWx1ZSBvZiBpbnB1dCBjaGFubmVsIDEsIENBUDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoVGhlIGJpdCBpcyByZWFkIG9ubHkgYW5kIHdyaXRlIGlzIGlnbm9yZWQpCisgICAgICogfFs4XSAgICAgfENBUDIgICAgICB8VmFsdWUgb2YgSW5wdXQgQ2hhbm5lbCAyLCBDQVAyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmbGVjdGluZyB0aGUgdmFsdWUgb2YgaW5wdXQgY2hhbm5lbCAyLCBDQVAyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfChUaGUgYml0IGlzIHJlYWQgb25seSBhbmQgd3JpdGUgaXMgaWdub3JlZCkKKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENOVDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBJbnB1dCBDYXB0dXJlIENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBITEQwOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gSW5wdXQgQ2FwdHVyZSBIb2xkIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSExEMTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIElucHV0IENhcHR1cmUgSG9sZCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhMRDI7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBJbnB1dCBDYXB0dXJlIEhvbGQgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTlRDTVA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gSW5wdXQgQ2FwdHVyZSBDb21wYXJlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMMDsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTRdIElucHV0IENhcHR1cmUgQ29udHJvbCBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDE7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE4XSBJbnB1dCBDYXB0dXJlIENvbnRyb2wgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxY10gSW5wdXQgQ2FwdHVyZSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IEVDQVBfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgRUNBUF9DT05TVCBFQ0FQIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIEVDQVAgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBFQ0FQX0NOVF9DTlRfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDTlQ6IENOVCBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DTlRfQ05UX01zayAgICAgICAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgRUNBUF9DTlRfQ05UX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q05UOiBDTlQgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9ITEQwX0hPTERfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6SExEMDogSE9MRCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfSExEMF9IT0xEX01zayAgICAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IEVDQVBfSExEMF9IT0xEX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkhMRDA6IEhPTEQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfSExEMV9IT0xEX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkhMRDE6IEhPTEQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX0hMRDFfSE9MRF9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBFQ0FQX0hMRDFfSE9MRF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpITEQxOiBIT0xEIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0hMRDJfSE9MRF9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpITEQyOiBIT0xEIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9ITEQyX0hPTERfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgRUNBUF9ITEQyX0hPTERfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6SExEMjogSE9MRCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DTlRDTVBfQ05UQ01QX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q05UQ01QOiBDTlRDTVAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVDQVBfQ05UQ01QX0NOVENNUF9Nc2sgICAgICAgICAgICgweGZmZmZmZnVsIDw8IEVDQVBfQ05UQ01QX0NOVENNUF9Qb3MpICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNOVENNUDogQ05UQ01QIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9ORkNMS1NFTF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IE5GQ0xLU0VMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfTkZDTEtTRUxfTXNrICAgICAgICAgICAoMHg3dWwgPDwgRUNBUF9DVEwwX05GQ0xLU0VMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBORkNMS1NFTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQTkZESVNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBORkRJUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0NBUE5GRElTX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMF9DQVBORkRJU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQTkZESVMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0lDMEVOX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogSUMwRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9JQzBFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDBfSUMwRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IElDMEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9JQzFFTl9Qb3MgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IElDMUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfSUMxRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwwX0lDMUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBJQzFFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfSUMyRU5fUG9zICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBJQzJFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0lDMkVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMF9JQzJFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogSUMyRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0NBUFNFTDBfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQU0VMMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBTRUwwX01zayAgICAgICAgICAgICgweDN1bCA8PCBFQ0FQX0NUTDBfQ0FQU0VMMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUFNFTDAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBTRUwxX1BvcyAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUFNFTDEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQU0VMMV9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRUNBUF9DVEwwX0NBUFNFTDFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBTRUwxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQU0VMMl9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBTRUwyIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0NBUFNFTDJfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEVDQVBfQ1RMMF9DQVBTRUwyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQU0VMMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0NBUElFTjBfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQSUVOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBJRU4wX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDBfQ0FQSUVOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUElFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9DQVBJRU4xX1BvcyAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENBUElFTjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQSUVOMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwwX0NBUElFTjFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBJRU4xIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQSUVOMl9Qb3MgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBJRU4yIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0NBUElFTjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMF9DQVBJRU4yX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQSUVOMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX09WSUVOX1BvcyAgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogT1ZJRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9PVklFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDBfT1ZJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IE9WSUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9DTVBJRU5fUG9zICAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENNUElFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfQ01QSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwwX0NNUElFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDTVBJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfQ05URU5fUG9zICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDTlRFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0NOVEVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMF9DTlRFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ05URU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwwX0NNUENMUkVOX1BvcyAgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ01QQ0xSRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMF9DTVBDTFJFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDBfQ01QQ0xSRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENNUENMUkVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMF9DTVBFTl9Qb3MgICAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDA6IENNUEVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDBfQ01QRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwwX0NNUEVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDTVBFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDBfQ0FQRU5fUG9zICAgICAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwwOiBDQVBFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwwX0NBUEVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMF9DQVBFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMDogQ0FQRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwxX0VER0VTRUwwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogRURHRVNFTDAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMV9FREdFU0VMMF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBFQ0FQX0NUTDFfRURHRVNFTDBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IEVER0VTRUwwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMV9FREdFU0VMMV9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IEVER0VTRUwxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDFfRURHRVNFTDFfTXNrICAgICAgICAgICAoMHgzdWwgPDwgRUNBUF9DVEwxX0VER0VTRUwxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBFREdFU0VMMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDFfRURHRVNFTDJfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBFREdFU0VMMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwxX0VER0VTRUwyX01zayAgICAgICAgICAgKDB4M3VsIDw8IEVDQVBfQ1RMMV9FREdFU0VMMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogRURHRVNFTDIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwxX0NBUDBSTERFTl9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ0FQMFJMREVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMV9DQVAwUkxERU5fTXNrICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDFfQ0FQMFJMREVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENBUDBSTERFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMV9DQVAxUkxERU5fUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENBUDFSTERFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDFfQ0FQMVJMREVOX01zayAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwxX0NBUDFSTERFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDQVAxUkxERU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDFfQ0FQMlJMREVOX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDQVAyUkxERU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwxX0NBUDJSTERFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMV9DQVAyUkxERU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ0FQMlJMREVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwxX09WUkxERU5fUG9zICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogT1ZSTERFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMV9PVlJMREVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDFfT1ZSTERFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IE9WUkxERU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMV9DTEtTRUxfUG9zICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENMS1NFTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDFfQ0xLU0VMX01zayAgICAgICAgICAgICAoMHg3dWwgPDwgRUNBUF9DVEwxX0NMS1NFTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDTEtTRUwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDFfQ05UU1JDU0VMX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDTlRTUkNTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwxX0NOVFNSQ1NFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IEVDQVBfQ1RMMV9DTlRTUkNTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ05UU1JDU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9DVEwxX0NBUDBDTFJFTl9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ0FQMENMUkVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVDQVBfQ1RMMV9DQVAwQ0xSRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBFQ0FQX0NUTDFfQ0FQMENMUkVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENBUDBDTFJFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfQ1RMMV9DQVAxQ0xSRU5fUG9zICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OkNUTDE6IENBUDFDTFJFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBFQ0FQX0NUTDFfQ0FQMUNMUkVOX01zayAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9DVEwxX0NBUDFDTFJFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDQVAxQ0xSRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX0NUTDFfQ0FQMkNMUkVOX1BvcyAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpDVEwxOiBDQVAyQ0xSRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRUNBUF9DVEwxX0NBUDJDTFJFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfQ1RMMV9DQVAyQ0xSRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6Q1RMMTogQ0FQMkNMUkVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQVEYwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVBURjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUFRGMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX1NUQVRVU19DQVBURjBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQVEYwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUFRGMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQVEYxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVBURjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9TVEFUVVNfQ0FQVEYxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUFRGMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVBURjJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUFRGMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQVEYyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfU1RBVFVTX0NBUFRGMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVBURjIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQQ01QRl9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVBDTVBGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUENNUEZfTXNrICAgICAgICAgICgweDF1bCA8PCBFQ0FQX1NUQVRVU19DQVBDTVBGX1BvcykgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQQ01QRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUE9WRl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQT1ZGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVBPVkZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9TVEFUVVNfQ0FQT1ZGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUE9WRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVAwX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUDAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEVDQVBfU1RBVFVTX0NBUDBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVAwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRUNBUF9TVEFUVVNfQ0FQMV9Qb3MgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQVBfVDo6U1RBVFVTOiBDQVAxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUDFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBFQ0FQX1NUQVRVU19DQVAxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVDQVBfU1RBVFVTX0NBUDJfUG9zICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0FQX1Q6OlNUQVRVUzogQ0FQMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBFQ0FQX1NUQVRVU19DQVAyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRUNBUF9TVEFUVVNfQ0FQMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRUNBUF9UOjpTVEFUVVM6IENBUDIgTWFzayAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBFQ0FQX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBFQ0FQIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX0VDQVBfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2Vwd21fcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZXB3bV9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWM3ZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2Vwd21fcmVnLmgKQEAgLTAsMCArMSwzNzMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZXB3bV9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgRVBXTSByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19FUFdNX1JFR19IX18KKyNkZWZpbmUgX19FUFdNX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFbmhhbmNlZCBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBFUFdNIEVuaGFuY2VkIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlcihFUFdNKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBFUFdNIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqCisgICAgICogQHZhciBFQ0FQREFUX1Q6OlJDQVBEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MjBDICBFUFdNIFJpc2luZyBDYXB0dXJlIERhdGEgUmVnaXN0ZXIgMH41CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UkNBUERBVCAgIHxFUFdNIFJpc2luZyBDYXB0dXJlIERhdGEgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHJpc2luZyBjYXB0dXJlIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhlIEVQV00gY291bnRlciB2YWx1ZSB3aWxsIGJlIHNhdmVkIGluIHRoaXMgcmVnaXN0ZXIuCisgICAgICogQHZhciBFQ0FQREFUX1Q6OkZDQVBEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MjEwICBFUFdNIEZhbGxpbmcgQ2FwdHVyZSBEYXRhIFJlZ2lzdGVyIDB+NQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfEZDQVBEQVQgICB8RVBXTSBGYWxsaW5nIENhcHR1cmUgRGF0YSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gZmFsbGluZyBjYXB0dXJlIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhlIEVQV00gY291bnRlciB2YWx1ZSB3aWxsIGJlIHNhdmVkIGluIHRoaXMgcmVnaXN0ZXIuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBSQ0FQREFUOyAvKiE8IFsweDIwQy8weDIxNC8weDIxQy8weDIyNC8weDIyQy8weDIzNF0gRVBXTSBSaXNpbmcgQ2FwdHVyZSBEYXRhIFJlZ2lzdGVyIDB+NSAqLworICAgIF9fSU8gdWludDMyX3QgRkNBUERBVDsgLyohPCBbMHgyMTAvMHgyMTgvMHgyMjAvMHgyMjgvMHgyMzAvMHgyMzhdIEVQV00gRmFsbGluZyBDYXB0dXJlIERhdGEgUmVnaXN0ZXIgMH41ICovCit9IEVDQVBEQVRfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBFUFdNX1Q6OkNUTDAKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIEVQV00gQ29udHJvbCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1RSTEQwICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0QwIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMCByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDAgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjAgcmVnaXN0ZXIgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZC4KKyAgICAgKiB8WzFdICAgICB8Q1RSTEQxICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0QxIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMSByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDEgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjEgcmVnaXN0ZXIgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZC4KKyAgICAgKiB8WzJdICAgICB8Q1RSTEQyICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0QyIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMiByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDIgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjIgcmVnaXN0ZXIgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZC4KKyAgICAgKiB8WzNdICAgICB8Q1RSTEQzICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0QzIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMyByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDMgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjMgcmVnaXN0ZXIgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZC4KKyAgICAgKiB8WzRdICAgICB8Q1RSTEQ0ICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0Q0IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGNCByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDQgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjQgcmVnaXN0ZXIgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZC4KKyAgICAgKiB8WzVdICAgICB8Q1RSTEQ1ICAgIHxDZW50ZXIgUmUtbG9hZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnRlciB0eXBlLCBQRVJJT0Q1IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGNSByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDUgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjUgcmVnaXN0ZXIgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBhIHBlcmlvZC4KKyAgICAgKiB8WzhdICAgICB8V0lOTERFTjAgIHxXaW5kb3cgTG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0QwIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMCByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDAgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjAgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvciBjZW50ZXIgcG9pbnQgb2YgZWFjaCBwZXJpb2QgYnkgc2V0dGluZyBDVFJMRDAgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QwIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMCBhbmQgQ01QREFUMCByZWdpc3RlcnMgd2lsbCBsb2FkIHRvIENNUEJVRjAgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZCB3aGVuIHZhbGlkIHJlbG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWxpZCByZWxvYWQgd2luZG93IGlzIHNldCBieSBzb2Z0d2FyZSB3cml0ZSAxIHRvIEVQV01fTE9BRCByZWdpc3RlciwgYW5kIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgbG9hZCBzdWNjZXNzLgorICAgICAqIHxbOV0gICAgIHxXSU5MREVOMSAgfFdpbmRvdyBMb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUklPRDEgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUYxIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUMSByZWdpc3RlciB3aWxsIGxvYWQgdG8gQ01QQlVGMSByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEMSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFUklPRDEgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUYxIGFuZCBDTVBEQVQxIHJlZ2lzdGVycyB3aWxsIGxvYWQgdG8gQ01QQlVGMSByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kIHdoZW4gdmFsaWQgcmVsb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbGlkIHJlbG9hZCB3aW5kb3cgaXMgc2V0IGJ5IHNvZnR3YXJlIHdyaXRlIDEgdG8gRVBXTV9MT0FEIHJlZ2lzdGVyLCBhbmQgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBsb2FkIHN1Y2Nlc3MuCisgICAgICogfFsxMF0gICAgfFdJTkxERU4yICB8V2luZG93IExvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EMiByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjIgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQyIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUYyIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQyIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EMiByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjIgYW5kIENNUERBVDIgcmVnaXN0ZXJzIHdpbGwgbG9hZCB0byBDTVBCVUYyIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2Qgd2hlbiB2YWxpZCByZWxvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsaWQgcmVsb2FkIHdpbmRvdyBpcyBzZXQgYnkgc29mdHdhcmUgd3JpdGUgMSB0byBFUFdNX0xPQUQgcmVnaXN0ZXIsIGFuZCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIGxvYWQgc3VjY2Vzcy4KKyAgICAgKiB8WzExXSAgICB8V0lOTERFTjMgIHxXaW5kb3cgTG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0QzIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMyByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDMgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjMgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvciBjZW50ZXIgcG9pbnQgb2YgZWFjaCBwZXJpb2QgYnkgc2V0dGluZyBDVFJMRDMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QzIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMyBhbmQgQ01QREFUMyByZWdpc3RlcnMgd2lsbCBsb2FkIHRvIENNUEJVRjMgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZCB3aGVuIHZhbGlkIHJlbG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWxpZCByZWxvYWQgd2luZG93IGlzIHNldCBieSBzb2Z0d2FyZSB3cml0ZSAxIHRvIEVQV01fTE9BRCByZWdpc3RlciwgYW5kIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgbG9hZCBzdWNjZXNzLgorICAgICAqIHxbMTJdICAgIHxXSU5MREVONCAgfFdpbmRvdyBMb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUklPRDQgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUY0IHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUNCByZWdpc3RlciB3aWxsIGxvYWQgdG8gQ01QQlVGNCByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxENCBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFUklPRDQgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUY0IGFuZCBDTVBEQVQ0IHJlZ2lzdGVycyB3aWxsIGxvYWQgdG8gQ01QQlVGNCByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kIHdoZW4gdmFsaWQgcmVsb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbGlkIHJlbG9hZCB3aW5kb3cgaXMgc2V0IGJ5IHNvZnR3YXJlIHdyaXRlIDEgdG8gRVBXTV9MT0FEIHJlZ2lzdGVyLCBhbmQgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBsb2FkIHN1Y2Nlc3MuCisgICAgICogfFsxM10gICAgfFdJTkxERU41ICB8V2luZG93IExvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9ENSByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjUgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQ1IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUY1IHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQ1IGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9ENSByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjUgYW5kIENNUERBVDUgcmVnaXN0ZXJzIHdpbGwgbG9hZCB0byBDTVBCVUY1IHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2Qgd2hlbiB2YWxpZCByZWxvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsaWQgcmVsb2FkIHdpbmRvdyBpcyBzZXQgYnkgc29mdHdhcmUgd3JpdGUgMSB0byBFUFdNX0xPQUQgcmVnaXN0ZXIsIGFuZCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIGxvYWQgc3VjY2Vzcy4KKyAgICAgKiB8WzE2XSAgICB8SU1NTERFTjAgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUklPRDAgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUYwIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUMCByZWdpc3RlciB3aWxsIGxvYWQgdG8gQ01QQlVGMCByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEMCBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFUklPRDAvQ01QREFUMCByZWdpc3RlcnMgd2lsbCBsb2FkIHRvIFBCVUYwIGFuZCBDTVBCVUYwIHJlZ2lzdGVyIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRDAvQ01QREFUMCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVOMCBiaXQgaXMgZW5hYmxlZCwgV0lOTERFTjAgYml0IGFuZCBDVFJMRDAgYml0cyB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsxN10gICAgfElNTUxERU4xICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0QxIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGMSByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDEgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjEgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvciBjZW50ZXIgcG9pbnQgb2YgZWFjaCBwZXJpb2QgYnkgc2V0dGluZyBDVFJMRDEgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QxL0NNUERBVDEgcmVnaXN0ZXJzIHdpbGwgbG9hZCB0byBQQlVGMSBhbmQgQ01QQlVGMSByZWdpc3RlciBpbW1lZGlhdGVseSB3aGVuIHNvZnR3YXJlIHVwZGF0ZSBQRVJJT0QxL0NNUERBVDEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTjEgYml0IGlzIGVuYWJsZWQsIFdJTkxERU4xIGJpdCBhbmQgQ1RSTEQxIGJpdHMgd2lsbCBiZSBpbnZhbGlkLgorICAgICAqIHxbMThdICAgIHxJTU1MREVOMiAgfEltbWVkaWF0ZWx5IExvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EMiByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjIgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQyIHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUYyIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQyIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9EMi9DTVBEQVQyIHJlZ2lzdGVycyB3aWxsIGxvYWQgdG8gUEJVRjIgYW5kIENNUEJVRjIgcmVnaXN0ZXIgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9EMi9DTVBEQVQyIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIElNTUxERU4yIGJpdCBpcyBlbmFibGVkLCBXSU5MREVOMiBiaXQgYW5kIENUUkxEMiBiaXRzIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzE5XSAgICB8SU1NTERFTjMgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBFUklPRDMgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIFBCVUYzIHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb2YgZWFjaCBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q01QREFUMyByZWdpc3RlciB3aWxsIGxvYWQgdG8gQ01QQlVGMyByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9yIGNlbnRlciBwb2ludCBvZiBlYWNoIHBlcmlvZCBieSBzZXR0aW5nIENUUkxEMyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFUklPRDMvQ01QREFUMyByZWdpc3RlcnMgd2lsbCBsb2FkIHRvIFBCVUYzIGFuZCBDTVBCVUYzIHJlZ2lzdGVyIGltbWVkaWF0ZWx5IHdoZW4gc29mdHdhcmUgdXBkYXRlIFBFUklPRDMvQ01QREFUMyByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBJTU1MREVOMyBiaXQgaXMgZW5hYmxlZCwgV0lOTERFTjMgYml0IGFuZCBDVFJMRDMgYml0cyB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsyMF0gICAgfElNTUxERU40ICB8SW1tZWRpYXRlbHkgTG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRVJJT0Q0IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBQQlVGNCByZWdpc3RlciBhdCB0aGUgZW5kIHBvaW50IG9mIGVhY2ggcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENNUERBVDQgcmVnaXN0ZXIgd2lsbCBsb2FkIHRvIENNUEJVRjQgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvciBjZW50ZXIgcG9pbnQgb2YgZWFjaCBwZXJpb2QgYnkgc2V0dGluZyBDVFJMRDQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0Q0L0NNUERBVDQgcmVnaXN0ZXJzIHdpbGwgbG9hZCB0byBQQlVGNCBhbmQgQ01QQlVGNCByZWdpc3RlciBpbW1lZGlhdGVseSB3aGVuIHNvZnR3YXJlIHVwZGF0ZSBQRVJJT0Q0L0NNUERBVDQgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTjQgYml0IGlzIGVuYWJsZWQsIFdJTkxERU40IGJpdCBhbmQgQ1RSTEQ0IGJpdHMgd2lsbCBiZSBpbnZhbGlkLgorICAgICAqIHxbMjFdICAgIHxJTU1MREVONSAgfEltbWVkaWF0ZWx5IExvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9ENSByZWdpc3RlciB3aWxsIGxvYWQgdG8gUEJVRjUgcmVnaXN0ZXIgYXQgdGhlIGVuZCBwb2ludCBvZiBlYWNoIHBlcmlvZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQ1IHJlZ2lzdGVyIHdpbGwgbG9hZCB0byBDTVBCVUY1IHJlZ2lzdGVyIGF0IHRoZSBlbmQgcG9pbnQgb3IgY2VudGVyIHBvaW50IG9mIGVhY2ggcGVyaW9kIGJ5IHNldHRpbmcgQ1RSTEQ1IGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVSSU9ENS9DTVBEQVQ1IHJlZ2lzdGVycyB3aWxsIGxvYWQgdG8gUEJVRjUgYW5kIENNUEJVRjUgcmVnaXN0ZXIgaW1tZWRpYXRlbHkgd2hlbiBzb2Z0d2FyZSB1cGRhdGUgUEVSSU9ENS9DTVBEQVQ1IHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIElNTUxERU41IGJpdCBpcyBlbmFibGVkLCBXSU5MREVONSBiaXQgYW5kIENUUkxENSBiaXRzIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgKiB8WzI0XSAgICB8R1JPVVBFTiAgIHxHcm91cCBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBvdXRwdXQgd2F2ZWZvcm0gb2YgZWFjaCBFUFdNIGNoYW5uZWwgYXJlIGluZGVwZW5kZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVbmlmeSB0aGUgRVBXTXhfQ0gyIGFuZCBFUFdNeF9DSDQgdG8gb3V0cHV0IHRoZSBzYW1lIHdhdmVmb3JtIGFzIEVQV014X0NIMCBhbmQgdW5pZnkgdGhlIEVQV014X0NIMyBhbmQgRVBXTXhfQ0g1IHRvIG91dHB1dCB0aGUgc2FtZSB3YXZlZm9ybSBhcyBFUFdNeF9DSDEuCisgICAgICogfFszMF0gICAgfERCR0hBTFQgICB8SUNFIERlYnVnIE1vZGUgQ291bnRlciBIYWx0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGNvdW50ZXIgaGFsdCBpcyBlbmFibGVkLCBFUFdNIGFsbCBjb3VudGVycyB3aWxsIGtlZXAgY3VycmVudCB2YWx1ZSB1bnRpbCBleGl0IElDRSBkZWJ1ZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJQ0UgZGVidWcgbW9kZSBjb3VudGVyIGhhbHQgZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSUNFIGRlYnVnIG1vZGUgY291bnRlciBoYWx0IGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzMxXSAgICB8REJHVFJJT0ZGIHxJQ0UgRGVidWcgTW9kZSBBY2tub3dsZWRnZSBEaXNhYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnZW1lbnQgZWZmZWN0cyBFUFdNIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIHBpbiB3aWxsIGJlIGZvcmNlZCBhcyB0cmktc3RhdGUgd2hpbGUgSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnZW1lbnQgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBwaW4gd2lsbCBrZWVwIG91dHB1dCBubyBtYXR0ZXIgSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ2VkIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBFUFdNX1Q6OkNUTDEKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIEVQV00gQ29udHJvbCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8Q05UVFlQRTAgIHxFUFdNIENvdW50ZXIgQmVoYXZpb3IgVHlwZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVXAgY291bnRlciB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRG93biBjb3VudCB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzM6Ml0gICB8Q05UVFlQRTEgIHxFUFdNIENvdW50ZXIgQmVoYXZpb3IgVHlwZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVXAgY291bnRlciB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRG93biBjb3VudCB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzU6NF0gICB8Q05UVFlQRTIgIHxFUFdNIENvdW50ZXIgQmVoYXZpb3IgVHlwZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVXAgY291bnRlciB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRG93biBjb3VudCB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8Wzc6Nl0gICB8Q05UVFlQRTMgIHxFUFdNIENvdW50ZXIgQmVoYXZpb3IgVHlwZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVXAgY291bnRlciB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRG93biBjb3VudCB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8Wzk6OF0gICB8Q05UVFlQRTQgIHxFUFdNIENvdW50ZXIgQmVoYXZpb3IgVHlwZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVXAgY291bnRlciB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRG93biBjb3VudCB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzExOjEwXSB8Q05UVFlQRTUgIHxFUFdNIENvdW50ZXIgQmVoYXZpb3IgVHlwZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVXAgY291bnRlciB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRG93biBjb3VudCB0eXBlIChzdXBwb3J0cyBpbiBjYXB0dXJlIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzE2XSAgICB8Q05UTU9ERTAgIHxFUFdNIENvdW50ZXIgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLXJlbG9hZCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPbmUtc2hvdCBtb2RlLgorICAgICAqIHxbMTddICAgIHxDTlRNT0RFMSAgfEVQV00gQ291bnRlciBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tcmVsb2FkIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9uZS1zaG90IG1vZGUuCisgICAgICogfFsxOF0gICAgfENOVE1PREUyICB8RVBXTSBDb3VudGVyIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1yZWxvYWQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT25lLXNob3QgbW9kZS4KKyAgICAgKiB8WzE5XSAgICB8Q05UTU9ERTMgIHxFUFdNIENvdW50ZXIgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLXJlbG9hZCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPbmUtc2hvdCBtb2RlLgorICAgICAqIHxbMjBdICAgIHxDTlRNT0RFNCAgfEVQV00gQ291bnRlciBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tcmVsb2FkIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9uZS1zaG90IG1vZGUuCisgICAgICogfFsyMV0gICAgfENOVE1PREU1ICB8RVBXTSBDb3VudGVyIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1yZWxvYWQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT25lLXNob3QgbW9kZS4KKyAgICAgKiB8WzI0XSAgICB8T1VUTU9ERTAgIHxFUFdNIE91dHB1dCBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgb3V0cHV0IG1vZGUgb2YgY29ycmVzcG9uZGluZyBFUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBpbmRlcGVuZGVudCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGluZyBpbiBncm91cCBmdW5jdGlvbiwgdGhlc2UgYml0cyBtdXN0IGFsbCBzZXQgdG8gdGhlIHNhbWUgbW9kZS4KKyAgICAgKiB8WzI1XSAgICB8T1VUTU9ERTIgIHxFUFdNIE91dHB1dCBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgb3V0cHV0IG1vZGUgb2YgY29ycmVzcG9uZGluZyBFUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBpbmRlcGVuZGVudCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGluZyBpbiBncm91cCBmdW5jdGlvbiwgdGhlc2UgYml0cyBtdXN0IGFsbCBzZXQgdG8gdGhlIHNhbWUgbW9kZS4KKyAgICAgKiB8WzI2XSAgICB8T1VUTU9ERTQgIHxFUFdNIE91dHB1dCBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBiaXQgbiBjb250cm9scyB0aGUgb3V0cHV0IG1vZGUgb2YgY29ycmVzcG9uZGluZyBFUFdNIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBpbmRlcGVuZGVudCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGluZyBpbiBncm91cCBmdW5jdGlvbiwgdGhlc2UgYml0cyBtdXN0IGFsbCBzZXQgdG8gdGhlIHNhbWUgbW9kZS4KKyAgICAgKiBAdmFyIEVQV01fVDo6U1lOQworICAgICAqIE9mZnNldDogMHgwOCAgRVBXTSBTeW5jaHJvbml6YXRpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQSFNFTjAgICAgfFNZTkMgUGhhc2UgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjb3VudGVyIGRpc2FibGUgdG8gbG9hZCBQSFMgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gY291bnRlciBlbmFibGUgdG8gbG9hZCBQSFMgdmFsdWUuCisgICAgICogfFsxXSAgICAgfFBIU0VOMiAgICB8U1lOQyBQaGFzZSBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNvdW50ZXIgZGlzYWJsZSB0byBsb2FkIFBIUyB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBjb3VudGVyIGVuYWJsZSB0byBsb2FkIFBIUyB2YWx1ZS4KKyAgICAgKiB8WzJdICAgICB8UEhTRU40ICAgIHxTWU5DIFBoYXNlIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY291bnRlciBkaXNhYmxlIHRvIGxvYWQgUEhTIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIGNvdW50ZXIgZW5hYmxlIHRvIGxvYWQgUEhTIHZhbHVlLgorICAgICAqIHxbOTo4XSAgIHxTSU5TUkMwICAgfEVQV00wX1NZTkNfSU4gU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gU3luY2hyb25pemUgc291cmNlIGZyb20gU1lOQ19JTiBvciBTV1NZTkMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBDb3VudGVyIGVxdWFsIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBDb3VudGVyIGVxdWFsIHRvIEVQV01fQ01QREFUbSwgbSBkZW5vdGVzIDEsIDMsIDUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBTWU5DX09VVCB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQuCisgICAgICogfFsxMToxMF0gfFNJTlNSQzIgICB8RVBXTTBfU1lOQ19JTiBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBTeW5jaHJvbml6ZSBzb3VyY2UgZnJvbSBTWU5DX0lOIG9yIFNXU1lOQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENvdW50ZXIgZXF1YWwgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENvdW50ZXIgZXF1YWwgdG8gRVBXTV9DTVBEQVRtLCBtIGRlbm90ZXMgMSwgMywgNS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFNZTkNfT1VUIHdpbGwgbm90IGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8WzEzOjEyXSB8U0lOU1JDNCAgIHxFUFdNMF9TWU5DX0lOIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFN5bmNocm9uaXplIHNvdXJjZSBmcm9tIFNZTkNfSU4gb3IgU1dTWU5DLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gQ291bnRlciBlcXVhbCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ291bnRlciBlcXVhbCB0byBFUFdNX0NNUERBVG0sIG0gZGVub3RlcyAxLCAzLCA1LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gU1lOQ19PVVQgd2lsbCBub3QgYmUgZ2VuZXJhdGVkLgorICAgICAqIHxbMTZdICAgIHxTTkZMVEVOICAgfEVQV00wX1NZTkNfSU4gTm9pc2UgRmlsdGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vaXNlIGZpbHRlciBvZiBpbnB1dCBwaW4gRVBXTTBfU1lOQ19JTiBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTm9pc2UgZmlsdGVyIG9mIGlucHV0IHBpbiBFUFdNMF9TWU5DX0lOIGlzIEVuYWJsZWQuCisgICAgICogfFsxOToxN10gfFNGTFRDU0VMICB8U1lOQyBFZGdlIERldGVjdG9yIEZpbHRlciBDbG9jayBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gRmlsdGVyIGNsb2NrID0gSENMSy84LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IEZpbHRlciBjbG9jayA9IEhDTEsvMTYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gRmlsdGVyIGNsb2NrID0gSENMSy8zMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzY0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvMTI4LgorICAgICAqIHxbMjI6MjBdIHxTRkxUQ05UICAgfFNZTkMgRWRnZSBEZXRlY3RvciBGaWx0ZXIgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgYml0cyBjb250cm9sIHRoZSBjb3VudGVyIG51bWJlciBvZiBlZGdlIGRldGVjdG9yLgorICAgICAqIHxbMjNdICAgIHxTSU5QSU5WICAgfFNZTkMgSW5wdXQgUGluIEludmVyc2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHN0YXRlIG9mIHBpbiBFUFdNMF9TWU5DX0lOIGlzIHBhc3NlZCB0byB0aGUgbmVnYXRpdmUgZWRnZSBkZXRlY3Rvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGludmVyc2Ugc3RhdGUgb2YgcGluIEVQV00wX1NZTkNfSU4gaXMgcGFzc2VkIHRvIHRoZSBuZWdhdGl2ZSBlZGdlIGRldGVjdG9yLgorICAgICAqIHxbMjRdICAgIHxQSFNESVIwICAgfEVQV00gUGhhc2UgRGlyZWN0aW9uIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udHJvbCBFUFdNIGNvdW50ZXIgY291bnQgZGVjcmVtZW50IGFmdGVyIHN5bmNocm9uaXppbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnRyb2wgRVBXTSBjb3VudGVyIGNvdW50IGluY3JlbWVudCBhZnRlciBzeW5jaHJvbml6aW5nLgorICAgICAqIHxbMjVdICAgIHxQSFNESVIyICAgfEVQV00gUGhhc2UgRGlyZWN0aW9uIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udHJvbCBFUFdNIGNvdW50ZXIgY291bnQgZGVjcmVtZW50IGFmdGVyIHN5bmNocm9uaXppbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnRyb2wgRVBXTSBjb3VudGVyIGNvdW50IGluY3JlbWVudCBhZnRlciBzeW5jaHJvbml6aW5nLgorICAgICAqIHxbMjZdICAgIHxQSFNESVI0ICAgfEVQV00gUGhhc2UgRGlyZWN0aW9uIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29udHJvbCBFUFdNIGNvdW50ZXIgY291bnQgZGVjcmVtZW50IGFmdGVyIHN5bmNocm9uaXppbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbnRyb2wgRVBXTSBjb3VudGVyIGNvdW50IGluY3JlbWVudCBhZnRlciBzeW5jaHJvbml6aW5nLgorICAgICAqIEB2YXIgRVBXTV9UOjpTV1NZTkMKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIEVQV00gU29mdHdhcmUgQ29udHJvbCBTeW5jaHJvbml6YXRpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTV1NZTkMwICAgfFNvZnR3YXJlIFNZTkMgRnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFNJTlNSQ24gKEVQV01fU1lOQ1sxMzo4XSkgaXMgc2VsZWN0ZWQgdG8gMCwgU1lOQ19PVVQgc291cmNlIGlzIGNvbWUgZnJvbSBTWU5DX0lOIG9yIHRoaXMgYml0LgorICAgICAqIHxbMV0gICAgIHxTV1NZTkMyICAgfFNvZnR3YXJlIFNZTkMgRnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFNJTlNSQ24gKEVQV01fU1lOQ1sxMzo4XSkgaXMgc2VsZWN0ZWQgdG8gMCwgU1lOQ19PVVQgc291cmNlIGlzIGNvbWUgZnJvbSBTWU5DX0lOIG9yIHRoaXMgYml0LgorICAgICAqIHxbMl0gICAgIHxTV1NZTkM0ICAgfFNvZnR3YXJlIFNZTkMgRnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFNJTlNSQ24gKEVQV01fU1lOQ1sxMzo4XSkgaXMgc2VsZWN0ZWQgdG8gMCwgU1lOQ19PVVQgc291cmNlIGlzIGNvbWUgZnJvbSBTWU5DX0lOIG9yIHRoaXMgYml0LgorICAgICAqIEB2YXIgRVBXTV9UOjpDTEtTUkMKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIEVQV00gQ2xvY2sgU291cmNlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzI6MF0gICB8RUNMS1NSQzAgIHxFUFdNX0NIMDEgRXh0ZXJuYWwgQ2xvY2sgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IEVQV014X0NMSywgeCBkZW5vdGVzIDAgb3IgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBUSU1FUjAgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gVElNRVIxIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IFRJTUVSMiBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBUSU1FUjMgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfFsxMDo4XSAgfEVDTEtTUkMyICB8RVBXTV9DSDIzIEV4dGVybmFsIENsb2NrIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBFUFdNeF9DTEssIHggZGVub3RlcyAwIG9yIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gVElNRVIwIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFRJTUVSMSBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBUSU1FUjIgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gVElNRVIzIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHxbMTg6MTZdIHxFQ0xLU1JDNCAgfEVQV01fQ0g0NSBFeHRlcm5hbCBDbG9jayBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gRVBXTXhfQ0xLLCB4IGRlbm90ZXMgMCBvciAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFRJTUVSMCBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBUSU1FUjEgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gVElNRVIyIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRJTUVSMyBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiBAdmFyIEVQV01fVDo6Q0xLUFNDWzNdCisgICAgICogT2Zmc2V0OiAweDE0ICBFUFdNIENsb2NrIFByZXNjYWxlIFJlZ2lzdGVyIDAvMSwgMi8zLCA0LzUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTE6MF0gIHxDTEtQU0MgICAgfEVQV00gQ291bnRlciBDbG9jayBQcmVzY2FsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjbG9jayBvZiBFUFdNIGNvdW50ZXIgaXMgZGVjaWRlZCBieSBjbG9jayBwcmVzY2FsZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIEVQV00gcGFpciBzaGFyZSBvbmUgRVBXTSBjb3VudGVyIGNsb2NrIHByZXNjYWxlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjbG9jayBvZiBFUFdNIGNvdW50ZXIgaXMgZGl2aWRlZCBieSAoQ0xLUFNDKyAxKQorICAgICAqIEB2YXIgRVBXTV9UOjpDTlRFTgorICAgICAqIE9mZnNldDogMHgyMCAgRVBXTSBDb3VudGVyIEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVEVOMCAgICB8RVBXTSBDb3VudGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGVyIFN0b3AgUnVubmluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb3VudGVyIGFuZCBjbG9jayBwcmVzY2FsZXIgU3RhcnQgUnVubmluZy4KKyAgICAgKiB8WzFdICAgICB8Q05URU4xICAgIHxFUFdNIENvdW50ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb3VudGVyIGFuZCBjbG9jayBwcmVzY2FsZXIgU3RvcCBSdW5uaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBTdGFydCBSdW5uaW5nLgorICAgICAqIHxbMl0gICAgIHxDTlRFTjIgICAgfEVQV00gQ291bnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBTdG9wIFJ1bm5pbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGVyIFN0YXJ0IFJ1bm5pbmcuCisgICAgICogfFszXSAgICAgfENOVEVOMyAgICB8RVBXTSBDb3VudGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGVyIFN0b3AgUnVubmluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb3VudGVyIGFuZCBjbG9jayBwcmVzY2FsZXIgU3RhcnQgUnVubmluZy4KKyAgICAgKiB8WzRdICAgICB8Q05URU40ICAgIHxFUFdNIENvdW50ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb3VudGVyIGFuZCBjbG9jayBwcmVzY2FsZXIgU3RvcCBSdW5uaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBTdGFydCBSdW5uaW5nLgorICAgICAqIHxbNV0gICAgIHxDTlRFTjUgICAgfEVQV00gQ291bnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvdW50ZXIgYW5kIGNsb2NrIHByZXNjYWxlciBTdG9wIFJ1bm5pbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGVyIFN0YXJ0IFJ1bm5pbmcuCisgICAgICogQHZhciBFUFdNX1Q6OkNOVENMUgorICAgICAqIE9mZnNldDogMHgyNCAgRVBXTSBDbGVhciBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q05UQ0xSMCAgIHxDbGVhciBFUFdNIENvdW50ZXIgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgMTYtYml0IEVQV00gY291bnRlciB0byAwMDAwSC4KKyAgICAgKiB8WzFdICAgICB8Q05UQ0xSMSAgIHxDbGVhciBFUFdNIENvdW50ZXIgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgMTYtYml0IEVQV00gY291bnRlciB0byAwMDAwSC4KKyAgICAgKiB8WzJdICAgICB8Q05UQ0xSMiAgIHxDbGVhciBFUFdNIENvdW50ZXIgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgMTYtYml0IEVQV00gY291bnRlciB0byAwMDAwSC4KKyAgICAgKiB8WzNdICAgICB8Q05UQ0xSMyAgIHxDbGVhciBFUFdNIENvdW50ZXIgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgMTYtYml0IEVQV00gY291bnRlciB0byAwMDAwSC4KKyAgICAgKiB8WzRdICAgICB8Q05UQ0xSNCAgIHxDbGVhciBFUFdNIENvdW50ZXIgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgMTYtYml0IEVQV00gY291bnRlciB0byAwMDAwSC4KKyAgICAgKiB8WzVdICAgICB8Q05UQ0xSNSAgIHxDbGVhciBFUFdNIENvdW50ZXIgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgMTYtYml0IEVQV00gY291bnRlciB0byAwMDAwSC4KKyAgICAgKiBAdmFyIEVQV01fVDo6TE9BRAorICAgICAqIE9mZnNldDogMHgyOCAgRVBXTSBMb2FkIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TE9BRDAgICAgIHxSZS1sb2FkIEVQV00gQ29tcGFyYXRvciBSZWdpc3RlciAoQ01QREFUKSBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNvZnR3YXJlIHdyaXRlLCBoYXJkd2FyZSBjbGVhciB3aGVuIGN1cnJlbnQgRVBXTSBwZXJpb2QgZW5kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgbG9hZCB3aW5kb3cgb2Ygd2luZG93IGxvYWRpbmcgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gbG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgb25seSB1c2UgaW4gd2luZG93IGxvYWRpbmcgbW9kZSwgV0lOTERFTjAoRVBXTV9DVEwwWzEzOjhdKSA9IDEuCisgICAgICogfFsxXSAgICAgfExPQUQxICAgICB8UmUtbG9hZCBFUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIgKENNUERBVCkgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzb2Z0d2FyZSB3cml0ZSwgaGFyZHdhcmUgY2xlYXIgd2hlbiBjdXJyZW50IEVQV00gcGVyaW9kIGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IGxvYWQgd2luZG93IG9mIHdpbmRvdyBsb2FkaW5nIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGxvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IG9ubHkgdXNlIGluIHdpbmRvdyBsb2FkaW5nIG1vZGUsIFdJTkxERU4xKEVQV01fQ1RMMFsxMzo4XSkgPSAxLgorICAgICAqIHxbMl0gICAgIHxMT0FEMiAgICAgfFJlLWxvYWQgRVBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyIChDTVBEQVQpIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc29mdHdhcmUgd3JpdGUsIGhhcmR3YXJlIGNsZWFyIHdoZW4gY3VycmVudCBFUFdNIHBlcmlvZCBlbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBsb2FkIHdpbmRvdyBvZiB3aW5kb3cgbG9hZGluZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBsb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBvbmx5IHVzZSBpbiB3aW5kb3cgbG9hZGluZyBtb2RlLCBXSU5MREVOMihFUFdNX0NUTDBbMTM6OF0pID0gMS4KKyAgICAgKiB8WzNdICAgICB8TE9BRDMgICAgIHxSZS1sb2FkIEVQV00gQ29tcGFyYXRvciBSZWdpc3RlciAoQ01QREFUKSBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNvZnR3YXJlIHdyaXRlLCBoYXJkd2FyZSBjbGVhciB3aGVuIGN1cnJlbnQgRVBXTSBwZXJpb2QgZW5kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgbG9hZCB3aW5kb3cgb2Ygd2luZG93IGxvYWRpbmcgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gbG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgb25seSB1c2UgaW4gd2luZG93IGxvYWRpbmcgbW9kZSwgV0lOTERFTjMoRVBXTV9DVEwwWzEzOjhdKSA9IDEuCisgICAgICogfFs0XSAgICAgfExPQUQ0ICAgICB8UmUtbG9hZCBFUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIgKENNUERBVCkgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzb2Z0d2FyZSB3cml0ZSwgaGFyZHdhcmUgY2xlYXIgd2hlbiBjdXJyZW50IEVQV00gcGVyaW9kIGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IGxvYWQgd2luZG93IG9mIHdpbmRvdyBsb2FkaW5nIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGxvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTG9hZCB3aW5kb3cgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IG9ubHkgdXNlIGluIHdpbmRvdyBsb2FkaW5nIG1vZGUsIFdJTkxERU40KEVQV01fQ1RMMFsxMzo4XSkgPSAxLgorICAgICAqIHxbNV0gICAgIHxMT0FENSAgICAgfFJlLWxvYWQgRVBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyIChDTVBEQVQpIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc29mdHdhcmUgd3JpdGUsIGhhcmR3YXJlIGNsZWFyIHdoZW4gY3VycmVudCBFUFdNIHBlcmlvZCBlbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBsb2FkIHdpbmRvdyBvZiB3aW5kb3cgbG9hZGluZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBsb2FkIHdpbmRvdyBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExvYWQgd2luZG93IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBvbmx5IHVzZSBpbiB3aW5kb3cgbG9hZGluZyBtb2RlLCBXSU5MREVObihFUFdNX0NUTDBbMTM6OF0pID0gMS4KKyAgICAgKiBAdmFyIEVQV01fVDo6UEVSSU9EWzZdCisgICAgICogT2Zmc2V0OiAweDMwICBFUFdNIFBlcmlvZCBSZWdpc3RlciAwfjUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxQRVJJT0QgICAgfEVQV00gUGVyaW9kIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXAtQ291bnQgbW9kZTogSW4gdGhpcyBtb2RlLCBFUFdNIGNvdW50ZXIgY291bnRzIGZyb20gMCB0byBQRVJJT0QsIGFuZCByZXN0YXJ0cyBmcm9tIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RG93bi1Db3VudCBtb2RlOiBJbiB0aGlzIG1vZGUsIEVQV00gY291bnRlciBjb3VudHMgZnJvbSBQRVJJT0QgdG8gMCwgYW5kIHJlc3RhcnRzIGZyb20gUEVSSU9ELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gcGVyaW9kIHRpbWUgPSAoUEVSSU9EKzEpICogRVBXTV9DTEsgcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVwLURvd24tQ291bnQgbW9kZTogSW4gdGhpcyBtb2RlLCBFUFdNIGNvdW50ZXIgY291bnRzIGZyb20gMCB0byBQRVJJT0QsIHRoZW4gZGVjcmVtZW50cyB0byAwIGFuZCByZXBlYXRzIGFnYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gcGVyaW9kIHRpbWUgPSAyICogUEVSSU9EICogRVBXTV9DTEsgcGVyaW9kLgorICAgICAqIEB2YXIgRVBXTV9UOjpDTVBEQVRbNl0KKyAgICAgKiBPZmZzZXQ6IDB4NTAgIEVQV00gQ29tcGFyYXRvciBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8Q01QICAgICAgIHxFUFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVAgdXNlIHRvIGNvbXBhcmUgd2l0aCBDTlRSIHRvIGdlbmVyYXRlIEVQV00gd2F2ZWZvcm0sIGludGVycnVwdCBhbmQgdHJpZ2dlciBFQURDL0RBQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBpbmRlcGVuZGVudCBtb2RlLCBDTVBEQVQwfjUgZGVub3RlIGFzIDYgaW5kZXBlbmRlbnQgRVBXTV9DSDB+NSBjb21wYXJlZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERBVDAsIDIsIDQgZGVub3RlIGFzIGZpcnN0IGNvbXBhcmVkIHBvaW50LCBhbmQgQ01QREFUMSwgMywgNSBkZW5vdGUgYXMgc2Vjb25kIGNvbXBhcmVkIHBvaW50IGZvciB0aGUgY29ycmVzcG9uZGluZyAzIGNvbXBsZW1lbnRhcnkgcGFpcnMgRVBXTV9DSDAgYW5kIEVQV01fQ0gxLCBFUFdNX0NIMiBhbmQgRVBXTV9DSDMsIEVQV01fQ0g0IGFuZCBFUFdNX0NINS4KKyAgICAgKiBAdmFyIEVQV01fVDo6RFRDVExbM10KKyAgICAgKiBPZmZzZXQ6IDB4NzAgIEVQV00gRGVhZC1UaW1lIENvbnRyb2wgUmVnaXN0ZXIgMC8xLDIvMyw0LzUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTE6MF0gIHxEVENOVCAgICAgfERlYWQtdGltZSBDb3VudGVyIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWFkLXRpbWUgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGZvcm11bGE6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGVhZC10aW1lID0gKERUQ05UWzExOjBdKzEpICogRVBXTV9DTEsgcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE2XSAgICB8RFRFTiAgICAgIHxFbmFibGUgRGVhZC10aW1lIEluc2VydGlvbiBmb3IgRVBXTSBQYWlyIChFUFdNX0NIMCwgRVBXTV9DSDEpIChFUFdNX0NIMiwgRVBXTV9DSDMpIChFUFdNX0NINCwgRVBXTV9DSDUpIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERlYWQtdGltZSBpbnNlcnRpb24gaXMgb25seSBhY3RpdmUgd2hlbiB0aGlzIHBhaXIgb2YgY29tcGxlbWVudGFyeSBFUFdNIGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBkZWFkLSB0aW1lIGluc2VydGlvbiBpcyBpbmFjdGl2ZSwgdGhlIG91dHB1dHMgb2YgcGluIHBhaXIgYXJlIGNvbXBsZW1lbnRhcnkgd2l0aG91dCBhbnkgZGVsYXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERlYWQtdGltZSBpbnNlcnRpb24gRGlzYWJsZWQgb24gdGhlIHBpbiBwYWlyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEZWFkLXRpbWUgaW5zZXJ0aW9uIEVuYWJsZWQgb24gdGhlIHBpbiBwYWlyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMjRdICAgIHxEVENLU0VMICAgfERlYWQtdGltZSBDbG9jayBTZWxlY3QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERlYWQtdGltZSBjbG9jayBzb3VyY2UgZnJvbSBFUFdNX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGVhZC10aW1lIGNsb2NrIHNvdXJjZSBmcm9tIHByZXNjYWxlciBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvUkVHV1JQUk9UIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRVBXTV9UOjpQSFNbM10KKyAgICAgKiBPZmZzZXQ6IDB4ODAgIEVQV00gQ291bnRlciBQaGFzZSBSZWdpc3RlciAwLzEsMi8zLDQvNQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFBIUyAgICAgICB8RVBXTSBTeW5jaHJvbm91cyBTdGFydCBQaGFzZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UEhTIGRldGVybWluZXMgdGhlIEVQV00gc3luY2hyb25vdXMgc3RhcnQgcGhhc2UgdmFsdWUuIFRoZXNlIGJpdHMgb25seSB1c2UgaW4gc3luY2hyb25vdXMgZnVuY3Rpb24uCisgICAgICogQHZhciBFUFdNX1Q6OkNOVFs2XQorICAgICAqIE9mZnNldDogMHg5MCAgRVBXTSBDb3VudGVyIFJlZ2lzdGVyIDB+NQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfENOVCAgICAgICB8RVBXTSBEYXRhIFJlZ2lzdGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gbW9uaXRvciBDTlRSIHRvIGtub3cgdGhlIGN1cnJlbnQgdmFsdWUgaW4gMTYtYml0IHBlcmlvZCBjb3VudGVyLgorICAgICAqIHxbMTZdICAgIHxESVJGICAgICAgfEVQV00gRGlyZWN0aW9uIEluZGljYXRvciBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvdW50ZXIgaXMgRG93biBjb3VudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ291bnRlciBpcyBVUCBjb3VudC4KKyAgICAgKiBAdmFyIEVQV01fVDo6V0dDVEwwCisgICAgICogT2Zmc2V0OiAweEIwICBFUFdNIEdlbmVyYXRpb24gUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfFpQQ1RMMCAgICB8RVBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFszOjJdICAgfFpQQ1RMMSAgICB8RVBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFs1OjRdICAgfFpQQ1RMMiAgICB8RVBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFs3OjZdICAgfFpQQ1RMMyAgICB8RVBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFs5OjhdICAgfFpQQ1RMNCAgICB8RVBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFsxMToxMF0gfFpQQ1RMNSAgICB8RVBXTSBaZXJvIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHplcm8gcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gemVybyBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIHplcm8uCisgICAgICogfFsxNzoxNl0gfFBSRFBDVEwwICB8RVBXTSBQZXJpb2QgKENlbnRlcikgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBFUFdNIGNvdW50ZXIgY291bnQgdG8gKFBFUklPRDArMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2VudGVyIHBvaW50IGNvbnRyb2wgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHxbMTk6MThdIHxQUkRQQ1RMMSAgfEVQV00gUGVyaW9kIChDZW50ZXIpIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIChQRVJJT0QxKzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNlbnRlciBwb2ludCBjb250cm9sIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cC1kb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8WzIxOjIwXSB8UFJEUENUTDIgIHxFUFdNIFBlcmlvZCAoQ2VudGVyKSBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byAoUEVSSU9EMisxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjZW50ZXIgcG9pbnQgY29udHJvbCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfFsyMzoyMl0gfFBSRFBDVEwzICB8RVBXTSBQZXJpb2QgKENlbnRlcikgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBFUFdNIGNvdW50ZXIgY291bnQgdG8gKFBFUklPRDMrMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2VudGVyIHBvaW50IGNvbnRyb2wgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwLWRvd24gY291bnRlciB0eXBlLgorICAgICAqIHxbMjU6MjRdIHxQUkRQQ1RMNCAgfEVQV00gUGVyaW9kIChDZW50ZXIpIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIHBlcmlvZCAoY2VudGVyKSBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGNvdW50IHRvIChQRVJJT0Q0KzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNlbnRlciBwb2ludCBjb250cm9sIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cC1kb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8WzI3OjI2XSB8UFJEUENUTDUgIHxFUFdNIFBlcmlvZCAoQ2VudGVyKSBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gcGVyaW9kIChjZW50ZXIpIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBwZXJpb2QgKGNlbnRlcikgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciBjb3VudCB0byAoUEVSSU9ENSsxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjZW50ZXIgcG9pbnQgY29udHJvbCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAtZG93biBjb3VudGVyIHR5cGUuCisgICAgICogQHZhciBFUFdNX1Q6OldHQ1RMMQorICAgICAqIE9mZnNldDogMHhCNCAgRVBXTSBHZW5lcmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxDTVBVQ1RMMCAgfEVQV00gQ29tcGFyZSBVcCBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVQ1RMMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVQ1RMIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFszOjJdICAgfENNUFVDVEwxICB8RVBXTSBDb21wYXJlIFVwIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzU6NF0gICB8Q01QVUNUTDIgIHxFUFdNIENvbXBhcmUgVXAgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUNUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUNUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbNzo2XSAgIHxDTVBVQ1RMMyAgfEVQV00gQ29tcGFyZSBVcCBQb2ludCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEbyBub3RoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBMb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IFRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiBjb250cm9sIG91dHB1dCBsZXZlbCB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVQ1RMMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVQ1RMIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFs5OjhdICAgfENNUFVDVEw0ICB8RVBXTSBDb21wYXJlIFVwIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgdXAgcG9pbnQgb3V0cHV0IExvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgSGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVDVEwxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVDVEwgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzExOjEwXSB8Q01QVUNUTDUgIHxFUFdNIENvbXBhcmUgVXAgUG9pbnQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRG8gbm90aGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gY29tcGFyZSB1cCBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBIaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gRVBXTSBjb21wYXJlIHVwIHBvaW50IG91dHB1dCBUb2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gY29udHJvbCBvdXRwdXQgbGV2ZWwgd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUNUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUNUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMTc6MTZdIHxDTVBEQ1RMMCAgfEVQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRENUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRENUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMTk6MThdIHxDTVBEQ1RMMSAgfEVQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRENUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRENUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjE6MjBdIHxDTVBEQ1RMMiAgfEVQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRENUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRENUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjM6MjJdIHxDTVBEQ1RMMyAgfEVQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRENUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRENUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjU6MjRdIHxDTVBEQ1RMNCAgfEVQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRENUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRENUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjc6MjZdIHxDTVBEQ1RMNSAgfEVQV00gQ29tcGFyZSBEb3duIFBvaW50IENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERvIG5vdGhpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgTG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBjb21wYXJlIGRvd24gcG9pbnQgb3V0cHV0IEhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIGNvbXBhcmUgZG93biBwb2ludCBvdXRwdXQgVG9nZ2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIGNvbnRyb2wgb3V0cHV0IGxldmVsIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRENUTDEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRENUTCBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIEB2YXIgRVBXTV9UOjpNU0tFTgorICAgICAqIE9mZnNldDogMHhCOCAgRVBXTSBNYXNrIEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfE1TS0VOMCAgICB8RVBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEVQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgRVBXTSBjaGFubmVsIDAgd2lsbCBvdXRwdXQgTVNLREFUMCAoRVBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVQwIGRhdGEuCisgICAgICogfFsxXSAgICAgfE1TS0VOMSAgICB8RVBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEVQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgRVBXTSBjaGFubmVsIDEgd2lsbCBvdXRwdXQgTVNLREFUMSAoRVBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVQxIGRhdGEuCisgICAgICogfFsyXSAgICAgfE1TS0VOMiAgICB8RVBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEVQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgRVBXTSBjaGFubmVsIDIgd2lsbCBvdXRwdXQgTVNLREFUMiAoRVBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVQyIGRhdGEuCisgICAgICogfFszXSAgICAgfE1TS0VOMyAgICB8RVBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEVQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgRVBXTSBjaGFubmVsIDMgd2lsbCBvdXRwdXQgTVNLREFUMyAoRVBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVQzIGRhdGEuCisgICAgICogfFs0XSAgICAgfE1TS0VONCAgICB8RVBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEVQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgRVBXTSBjaGFubmVsIDQgd2lsbCBvdXRwdXQgTVNLREFUNCAoRVBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVQ0IGRhdGEuCisgICAgICogfFs1XSAgICAgfE1TS0VONSAgICB8RVBXTSBNYXNrIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEVQV00gb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvcnJlc3BvbmRpbmcgRVBXTSBjaGFubmVsIDUgd2lsbCBvdXRwdXQgTVNLREFUNSAoRVBXTV9NU0tbNTowXSkgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gb3V0cHV0IHNpZ25hbCBpcyBtYXNrZWQgYW5kIG91dHB1dCBNU0tEQVQ1IGRhdGEuCisgICAgICogQHZhciBFUFdNX1Q6Ok1TSworICAgICAqIE9mZnNldDogMHhCQyAgRVBXTSBNYXNrIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxNU0tEQVQwICAgfEVQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgRVBXTV9DSDAgb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gRVBXTV9DSDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEVQV01fQ0gwLgorICAgICAqIHxbMV0gICAgIHxNU0tEQVQxICAgfEVQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgRVBXTV9DSDEgb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gRVBXTV9DSDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEVQV01fQ0gxLgorICAgICAqIHxbMl0gICAgIHxNU0tEQVQyICAgfEVQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgRVBXTV9DSDIgb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gRVBXTV9DSDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEVQV01fQ0gyLgorICAgICAqIHxbM10gICAgIHxNU0tEQVQzICAgfEVQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgRVBXTV9DSDMgb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gRVBXTV9DSDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEVQV01fQ0gzLgorICAgICAqIHxbNF0gICAgIHxNU0tEQVQ0ICAgfEVQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgRVBXTV9DSDQgb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gRVBXTV9DSDQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEVQV01fQ0g0LgorICAgICAqIHxbNV0gICAgIHxNU0tEQVQ1ICAgfEVQV00gTWFzayBEYXRhIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZGF0YSBiaXQgY29udHJvbCB0aGUgc3RhdGUgb2YgRVBXTV9DSDUgb3V0cHV0IHBpbiwgaWYgY29ycmVzcG9uZGluZyBtYXNrIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBsb3cgdG8gRVBXTV9DSDUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBoaWdoIHRvIEVQV01fQ0g1LgorICAgICAqIEB2YXIgRVBXTV9UOjpCTkYKKyAgICAgKiBPZmZzZXQ6IDB4QzAgIEVQV00gQnJha2UgTm9pc2UgRmlsdGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlJLME5GRU4gIHxFUFdNIEJyYWtlIDAgTm9pc2UgRmlsdGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9pc2UgZmlsdGVyIG9mIEVQV00gQnJha2UgMCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTm9pc2UgZmlsdGVyIG9mIEVQV00gQnJha2UgMCBFbmFibGVkLgorICAgICAqIHxbMzoxXSAgIHxCUkswTkZTRUwgfEJyYWtlIDAgRWRnZSBEZXRlY3RvciBGaWx0ZXIgQ2xvY2sgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gRmlsdGVyIGNsb2NrID0gSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gRmlsdGVyIGNsb2NrID0gSENMSy80LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvOC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzE2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvMzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gRmlsdGVyIGNsb2NrID0gSENMSy82NC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzEyOC4KKyAgICAgKiB8WzY6NF0gICB8QlJLMEZDTlQgIHxCcmFrZSAwIEVkZ2UgRGV0ZWN0b3IgRmlsdGVyIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGJpdHMgY29udHJvbCB0aGUgQnJha2UwIGZpbHRlciBjb3VudGVyIHRvIGNvdW50IGZyb20gMCB0byBCUkswRkNOVC4KKyAgICAgKiB8WzddICAgICB8QlJLMFBJTlYgIHxCcmFrZSAwIFBpbiBJbnZlcnNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzdGF0ZSBvZiBwaW4gRVBXTXhfQlJBS0UwIGlzIHBhc3NlZCB0byB0aGUgbmVnYXRpdmUgZWRnZSBkZXRlY3Rvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGludmVyc2VkIHN0YXRlIG9mIHBpbiBFUFdNeF9CUkFLRTAgaXMgcGFzc2VkIHRvIHRoZSBuZWdhdGl2ZSBlZGdlIGRldGVjdG9yLgorICAgICAqIHxbOF0gICAgIHxCUksxTkZFTiAgfEVQV00gQnJha2UgMSBOb2lzZSBGaWx0ZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb2lzZSBmaWx0ZXIgb2YgRVBXTSBCcmFrZSAxIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBOb2lzZSBmaWx0ZXIgb2YgRVBXTSBCcmFrZSAxIEVuYWJsZWQuCisgICAgICogfFsxMTo5XSAgfEJSSzFORlNFTCB8QnJha2UgMSBFZGdlIERldGVjdG9yIEZpbHRlciBDbG9jayBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gRmlsdGVyIGNsb2NrID0gSENMSy84LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IEZpbHRlciBjbG9jayA9IEhDTEsvMTYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gRmlsdGVyIGNsb2NrID0gSENMSy8zMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBGaWx0ZXIgY2xvY2sgPSBIQ0xLLzY0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IEZpbHRlciBjbG9jayA9IEhDTEsvMTI4LgorICAgICAqIHxbMTQ6MTJdIHxCUksxRkNOVCAgfEJyYWtlIDEgRWRnZSBEZXRlY3RvciBGaWx0ZXIgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgYml0cyBjb250cm9sIHRoZSBCcmFrZTEgZmlsdGVyIGNvdW50ZXIgdG8gY291bnQgZnJvbSAwIHRvIEJSSzFGQ05ULgorICAgICAqIHxbMTVdICAgIHxCUksxUElOViAgfEJyYWtlIDEgUGluIEludmVyc2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHN0YXRlIG9mIHBpbiBFUFdNeF9CUkFLRTEgaXMgcGFzc2VkIHRvIHRoZSBuZWdhdGl2ZSBlZGdlIGRldGVjdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgaW52ZXJzZWQgc3RhdGUgb2YgcGluIEVQV014X0JSQUtFMSBpcyBwYXNzZWQgdG8gdGhlIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0b3IuCisgICAgICogfFsxNl0gICAgfEJLMFNSQyAgICB8QnJha2UgMCBQaW4gU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBFUFdNMCBzZXR0aW5nOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcmFrZSAwIHBpbiBzb3VyY2UgY29tZSBmcm9tIEVQV00wX0JSQUtFMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgMCBwaW4gc291cmNlIGNvbWUgZnJvbSBFUFdNMV9CUkFLRTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEVQV00xIHNldHRpbmc6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyYWtlIDAgcGluIHNvdXJjZSBjb21lIGZyb20gRVBXTTFfQlJBS0UwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmFrZSAwIHBpbiBzb3VyY2UgY29tZSBmcm9tIEVQV00wX0JSQUtFMC4KKyAgICAgKiB8WzI0XSAgICB8QksxU1JDICAgIHxCcmFrZSAxIFBpbiBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEVQV00wIHNldHRpbmc6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyYWtlIDEgcGluIHNvdXJjZSBjb21lIGZyb20gRVBXTTBfQlJBS0UxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmFrZSAxIHBpbiBzb3VyY2UgY29tZSBmcm9tIEVQV00xX0JSQUtFMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgRVBXTTEgc2V0dGluZzoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJha2UgMSBwaW4gc291cmNlIGNvbWUgZnJvbSBFUFdNMV9CUkFLRTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyYWtlIDEgcGluIHNvdXJjZSBjb21lIGZyb20gRVBXTTBfQlJBS0UxLgorICAgICAqIEB2YXIgRVBXTV9UOjpGQUlMQlJLCisgICAgICogT2Zmc2V0OiAweEM0ICBFUFdNIFN5c3RlbSBGYWlsIEJyYWtlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDU1NCUktFTiAgfENsb2NrIFNlY3VyaXR5IFN5c3RlbSBEZXRlY3Rpb24gVHJpZ2dlciBFUFdNIEJyYWtlIEZ1bmN0aW9uIDAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgQ1NTIGRldGVjdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IENTUyBkZXRlY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8Qk9EQlJLRU4gIHxCcm93bi1vdXQgRGV0ZWN0aW9uIFRyaWdnZXIgRVBXTSBCcmFrZSBGdW5jdGlvbiAwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IEJPRCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IEJPRCBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxSQU1CUktFTiAgfFNSQU0gUGFyaXR5IEVycm9yIERldGVjdGlvbiBUcmlnZ2VyIEVQV00gQnJha2UgRnVuY3Rpb24gMCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBTUkFNIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBTUkFNIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8Q09SQlJLRU4gIHxDb3JlIExvY2t1cCBEZXRlY3Rpb24gVHJpZ2dlciBFUFdNIEJyYWtlIEZ1bmN0aW9uIDAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgQ29yZSBsb2NrdXAgZGV0ZWN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgQ29yZSBsb2NrdXAgZGV0ZWN0aW9uIEVuYWJsZWQuCisgICAgICogQHZhciBFUFdNX1Q6OkJSS0NUTFszXQorICAgICAqIE9mZnNldDogMHhDOCAgRVBXTSBCcmFrZSBFZGdlIERldGVjdCBDb250cm9sIFJlZ2lzdGVyIDAvMSwyLzMsNC81CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1BPMEVCRU4gIHxFbmFibGUgQUNNUDBfTyBEaWdpdGFsIE91dHB1dCBBcyBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFDTVAwX08gYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBQ01QMF9PIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8Q1BPMUVCRU4gIHxFbmFibGUgQUNNUDFfTyBEaWdpdGFsIE91dHB1dCBBcyBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFDTVAxX08gYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBQ01QMV9PIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzRdICAgICB8QlJLUDBFRU4gIHxFbmFibGUgRVBXTXhfQlJBS0UwIFBpbiBBcyBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV014X0JSQUtFMCBwaW4gYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNeF9CUkFLRTAgcGluIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzVdICAgICB8QlJLUDFFRU4gIHxFbmFibGUgRVBXTXhfQlJBS0UxIFBpbiBBcyBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV014X0JSQUtFMSBwaW4gYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNeF9CUkFLRTEgcGluIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzddICAgICB8U1lTRUJFTiAgIHxFbmFibGUgU3lzdGVtIEZhaWwgQXMgRWRnZS1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTeXN0ZW0gRmFpbCBjb25kaXRpb24gYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTeXN0ZW0gRmFpbCBjb25kaXRpb24gYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOF0gICAgIHxDUE8wTEJFTiAgfEVuYWJsZSBBQ01QMF9PIERpZ2l0YWwgT3V0cHV0IEFzIExldmVsLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFDTVAwX08gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUNNUDBfTyBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOV0gICAgIHxDUE8xTEJFTiAgfEVuYWJsZSBBQ01QMV9PIERpZ2l0YWwgT3V0cHV0IEFzIExldmVsLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFDTVAxX08gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUNNUDFfTyBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTJdICAgIHxCUktQMExFTiAgfEVuYWJsZSBCS1AwIFBpbiBBcyBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNeF9CUkFLRTAgcGluIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV014X0JSQUtFMCBwaW4gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEzXSAgICB8QlJLUDFMRU4gIHxFbmFibGUgQktQMSBQaW4gQXMgTGV2ZWwtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTXhfQlJBS0UxIHBpbiBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNeF9CUkFLRTEgcGluIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNV0gICAgfFNZU0xCRU4gICB8RW5hYmxlIFN5c3RlbSBGYWlsIEFzIExldmVsLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN5c3RlbSBGYWlsIGNvbmRpdGlvbiBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTeXN0ZW0gRmFpbCBjb25kaXRpb24gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE3OjE2XSB8QlJLQUVWRU4gIHxFUFdNIEJyYWtlIEFjdGlvbiBTZWxlY3QgZm9yIEV2ZW4gQ2hhbm5lbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IEVQV014IGJyYWtlIGV2ZW50IHdpbGwgbm90IGFmZmVjdCBldmVuIGNoYW5uZWxzIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gZXZlbiBjaGFubmVsIG91dHB1dCB0cmktc3RhdGUgd2hlbiBFUFdNeCBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV00gZXZlbiBjaGFubmVsIG91dHB1dCBsb3cgbGV2ZWwgd2hlbiBFUFdNeCBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEVQV00gZXZlbiBjaGFubmVsIG91dHB1dCBoaWdoIGxldmVsIHdoZW4gRVBXTXggYnJha2UgZXZlbnQgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTk6MThdIHxCUktBT0REICAgfEVQV00gQnJha2UgQWN0aW9uIFNlbGVjdCBmb3IgT2RkIENoYW5uZWwgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBFUFdNeCBicmFrZSBldmVudCB3aWxsIG5vdCBhZmZlY3Qgb2RkIGNoYW5uZWxzIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV00gb2RkIGNoYW5uZWwgb3V0cHV0IHRyaS1zdGF0ZSB3aGVuIEVQV014IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTSBvZGQgY2hhbm5lbCBvdXRwdXQgbG93IGxldmVsIHdoZW4gRVBXTXggYnJha2UgZXZlbnQgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBFUFdNIG9kZCBjaGFubmVsIG91dHB1dCBoaWdoIGxldmVsIHdoZW4gRVBXTXggYnJha2UgZXZlbnQgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMjBdICAgIHxFQURDRUJFTiAgfEVuYWJsZSBFQURDIFJlc3VsdCBNb25pdG9yIChFQURDUk0pIEFzIEVkZ2UtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUFEQ1JNIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUFEQ1JNIGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzI4XSAgICB8RUFEQ0xCRU4gIHxFbmFibGUgRUFEQyBSZXN1bHQgTW9uaXRvciAoRUFEQ1JNKSBBcyBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQURDUk0gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUFEQ1JNIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBFUFdNX1Q6OlBPTENUTAorICAgICAqIE9mZnNldDogMHhENCAgRVBXTSBQaW4gUG9sYXIgSW52ZXJzZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFBJTlYwICAgICB8RVBXTV9DSDAgUElOIFBvbGFyIEludmVyc2UgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBjb250cm9scyBwb2xhcml0eSBzdGF0ZSBvZiBFUFdNX0NIMCBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV01fQ0gwIG91dHB1dCBwb2xhciBpbnZlcnNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NIMCBvdXRwdXQgcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxQSU5WMSAgICAgfEVQV01fQ0gxIFBJTiBQb2xhciBJbnZlcnNlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgY29udHJvbHMgcG9sYXJpdHkgc3RhdGUgb2YgRVBXTV9DSDEgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NIMSBvdXRwdXQgcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDEgb3V0cHV0IHBvbGFyIGludmVyc2UgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UElOVjIgICAgIHxFUFdNX0NIMiBQSU4gUG9sYXIgSW52ZXJzZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGNvbnRyb2xzIHBvbGFyaXR5IHN0YXRlIG9mIEVQV01fQ0gyIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDIgb3V0cHV0IHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV01fQ0gyIG91dHB1dCBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFBJTlYzICAgICB8RVBXTV9DSDMgUElOIFBvbGFyIEludmVyc2UgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBjb250cm9scyBwb2xhcml0eSBzdGF0ZSBvZiBFUFdNX0NIMyBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV01fQ0gzIG91dHB1dCBwb2xhciBpbnZlcnNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NIMyBvdXRwdXQgcG9sYXIgaW52ZXJzZSBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxQSU5WNCAgICAgfEVQV01fQ0g0IFBJTiBQb2xhciBJbnZlcnNlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVnaXN0ZXIgY29udHJvbHMgcG9sYXJpdHkgc3RhdGUgb2YgRVBXTV9DSDQgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NINCBvdXRwdXQgcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9DSDQgb3V0cHV0IHBvbGFyIGludmVyc2UgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8UElOVjUgICAgIHxFUFdNX0NINSBQSU4gUG9sYXIgSW52ZXJzZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJlZ2lzdGVyIGNvbnRyb2xzIHBvbGFyaXR5IHN0YXRlIG9mIEVQV01fQ0g1IG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9DSDUgb3V0cHV0IHBvbGFyIGludmVyc2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV01fQ0g1IG91dHB1dCBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogQHZhciBFUFdNX1Q6OlBPRU4KKyAgICAgKiBPZmZzZXQ6IDB4RDggIEVQV00gT3V0cHV0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFBPRU4wICAgICB8RVBXTV9DSDAgUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NIMCBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NIMCBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFsxXSAgICAgfFBPRU4xICAgICB8RVBXTV9DSDEgUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NIMSBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NIMSBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFsyXSAgICAgfFBPRU4yICAgICB8RVBXTV9DSDIgUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NIMiBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NIMiBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFszXSAgICAgfFBPRU4zICAgICB8RVBXTV9DSDMgUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NIMyBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NIMyBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFs0XSAgICAgfFBPRU40ICAgICB8RVBXTV9DSDQgUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NINCBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NINCBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogfFs1XSAgICAgfFBPRU41ICAgICB8RVBXTV9DSDUgUGluIE91dHB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0NINSBwaW4gYXQgdHJpLXN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX0NINSBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogQHZhciBFUFdNX1Q6OlNXQlJLCisgICAgICogT2Zmc2V0OiAweERDICBFUFdNIFNvZnR3YXJlIEJyYWtlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCUktFVFJHMCAgfEVQV00gRWRnZSBCcmFrZSBTb2Z0d2FyZSBUcmlnZ2VyIChXcml0ZSBPbmx5KSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHRoaXMgYml0IHdpbGwgdHJpZ2dlciBlZGdlIGJyYWtlLCBhbmQgc2V0IEJSS0VJRjAgdG8gMSBpbiBFUFdNX0lOVFNUUzEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMV0gICAgIHxCUktFVFJHMiAgfEVQV00gRWRnZSBCcmFrZSBTb2Z0d2FyZSBUcmlnZ2VyIChXcml0ZSBPbmx5KSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHRoaXMgYml0IHdpbGwgdHJpZ2dlciBlZGdlIGJyYWtlLCBhbmQgc2V0IEJSS0VJRjIgdG8gMSBpbiBFUFdNX0lOVFNUUzEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMl0gICAgIHxCUktFVFJHNCAgfEVQV00gRWRnZSBCcmFrZSBTb2Z0d2FyZSBUcmlnZ2VyIChXcml0ZSBPbmx5KSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHRoaXMgYml0IHdpbGwgdHJpZ2dlciBlZGdlIGJyYWtlLCBhbmQgc2V0IEJSS0VJRjQgdG8gMSBpbiBFUFdNX0lOVFNUUzEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOF0gICAgIHxCUktMVFJHMCAgfEVQV00gTGV2ZWwgQnJha2UgU29mdHdhcmUgVHJpZ2dlciAoV3JpdGUgT25seSkgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byB0aGlzIGJpdCB3aWxsIHRyaWdnZXIgbGV2ZWwgYnJha2UsIGFuZCBzZXQgQlJLTElGMCB0byAxIGluIEVQV01fSU5UU1RTMSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs5XSAgICAgfEJSS0xUUkcyICB8RVBXTSBMZXZlbCBCcmFrZSBTb2Z0d2FyZSBUcmlnZ2VyIChXcml0ZSBPbmx5KSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHRoaXMgYml0IHdpbGwgdHJpZ2dlciBsZXZlbCBicmFrZSwgYW5kIHNldCBCUktMSUYyIHRvIDEgaW4gRVBXTV9JTlRTVFMxIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEwXSAgICB8QlJLTFRSRzQgIHxFUFdNIExldmVsIEJyYWtlIFNvZnR3YXJlIFRyaWdnZXIgKFdyaXRlIE9ubHkpIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gdGhpcyBiaXQgd2lsbCB0cmlnZ2VyIGxldmVsIGJyYWtlLCBhbmQgc2V0IEJSS0xJRjQgdG8gMSBpbiBFUFdNX0lOVFNUUzEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRVBXTV9UOjpJTlRFTjAKKyAgICAgKiBPZmZzZXQ6IDB4RTAgIEVQV00gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8WklFTjAgICAgIHxFUFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFplcm8gcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBaZXJvIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE9kZCBjaGFubmVscyB3aWxsIHJlYWQgYWx3YXlzIDAgYXQgY29tcGxlbWVudGFyeSBtb2RlLgorICAgICAqIHxbMV0gICAgIHxaSUVOMSAgICAgfEVQV00gWmVybyBQb2ludCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFplcm8gcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT2RkIGNoYW5uZWxzIHdpbGwgcmVhZCBhbHdheXMgMCBhdCBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfFsyXSAgICAgfFpJRU4yICAgICB8RVBXTSBaZXJvIFBvaW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBaZXJvIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBPZGQgY2hhbm5lbHMgd2lsbCByZWFkIGFsd2F5cyAwIGF0IGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8WzNdICAgICB8WklFTjMgICAgIHxFUFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFplcm8gcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBaZXJvIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE9kZCBjaGFubmVscyB3aWxsIHJlYWQgYWx3YXlzIDAgYXQgY29tcGxlbWVudGFyeSBtb2RlLgorICAgICAqIHxbNF0gICAgIHxaSUVONCAgICAgfEVQV00gWmVybyBQb2ludCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFplcm8gcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT2RkIGNoYW5uZWxzIHdpbGwgcmVhZCBhbHdheXMgMCBhdCBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfFs1XSAgICAgfFpJRU41ICAgICB8RVBXTSBaZXJvIFBvaW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBaZXJvIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBPZGQgY2hhbm5lbHMgd2lsbCByZWFkIGFsd2F5cyAwIGF0IGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8WzhdICAgICB8UElFTjAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIHVwLWRvd24gY291bnRlciB0eXBlIHBlcmlvZCBwb2ludCBtZWFucyBjZW50ZXIgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IE9kZCBjaGFubmVscyB3aWxsIHJlYWQgYWx3YXlzIDAgYXQgY29tcGxlbWVudGFyeSBtb2RlLgorICAgICAqIHxbOV0gICAgIHxQSUVOMSAgICAgfEVQV00gUGVyaW9kIFBvaW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdoZW4gdXAtZG93biBjb3VudGVyIHR5cGUgcGVyaW9kIHBvaW50IG1lYW5zIGNlbnRlciBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogT2RkIGNoYW5uZWxzIHdpbGwgcmVhZCBhbHdheXMgMCBhdCBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfFsxMF0gICAgfFBJRU4yICAgICB8RVBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV2hlbiB1cC1kb3duIGNvdW50ZXIgdHlwZSBwZXJpb2QgcG9pbnQgbWVhbnMgY2VudGVyIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBPZGQgY2hhbm5lbHMgd2lsbCByZWFkIGFsd2F5cyAwIGF0IGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8WzExXSAgICB8UElFTjMgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGVyaW9kIHBvaW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIHVwLWRvd24gY291bnRlciB0eXBlIHBlcmlvZCBwb2ludCBtZWFucyBjZW50ZXIgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IE9kZCBjaGFubmVscyB3aWxsIHJlYWQgYWx3YXlzIDAgYXQgY29tcGxlbWVudGFyeSBtb2RlLgorICAgICAqIHxbMTJdICAgIHxQSUVONCAgICAgfEVQV00gUGVyaW9kIFBvaW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdoZW4gdXAtZG93biBjb3VudGVyIHR5cGUgcGVyaW9kIHBvaW50IG1lYW5zIGNlbnRlciBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogT2RkIGNoYW5uZWxzIHdpbGwgcmVhZCBhbHdheXMgMCBhdCBjb21wbGVtZW50YXJ5IG1vZGUuCisgICAgICogfFsxM10gICAgfFBJRU41ICAgICB8RVBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBlcmlvZCBwb2ludCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV2hlbiB1cC1kb3duIGNvdW50ZXIgdHlwZSBwZXJpb2QgcG9pbnQgbWVhbnMgY2VudGVyIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBPZGQgY2hhbm5lbHMgd2lsbCByZWFkIGFsd2F5cyAwIGF0IGNvbXBsZW1lbnRhcnkgbW9kZS4KKyAgICAgKiB8WzE2XSAgICB8Q01QVUlFTjAgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUlFTjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUlFTiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMTddICAgIHxDTVBVSUVOMSAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVSUVOMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVSUVOIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsxOF0gICAgfENNUFVJRU4yICB8RVBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVJRU4xLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVJRU4gZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzE5XSAgICB8Q01QVUlFTjMgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUlFTjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUlFTiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjBdICAgIHxDTVBVSUVONCAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgdXAgY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVSUVOMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVSUVOIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyMV0gICAgfENNUFVJRU41ICB8RVBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVJRU4xLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVJRU4gZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI0XSAgICB8Q01QRElFTjAgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRElFTjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRElFTiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjVdICAgIHxDTVBESUVOMSAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBESUVOMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBESUVOIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyNl0gICAgfENNUERJRU4yICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERJRU4xLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERJRU4gZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI3XSAgICB8Q01QRElFTjMgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBkb3duIGNvdW50IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRElFTjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRElFTiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjhdICAgIHxDTVBESUVONCAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb21wYXJlIGRvd24gY291bnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBESUVOMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBESUVOIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyOV0gICAgfENNUERJRU41ICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERJRU4xLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERJRU4gZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiBAdmFyIEVQV01fVDo6SU5URU4xCisgICAgICogT2Zmc2V0OiAweEU0ICBFUFdNIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJSS0VJRU4wXzF8RVBXTSBFZGdlLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRW5hYmxlIGZvciBDaGFubmVsMC8xIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFZGdlLWRldGVjdCBCcmFrZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWwwLzEgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVkZ2UtZGV0ZWN0IEJyYWtlIGludGVycnVwdCBmb3IgY2hhbm5lbDAvMSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8QlJLRUlFTjJfM3xFUFdNIEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBFbmFibGUgZm9yIENoYW5uZWwyLzMgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVkZ2UtZGV0ZWN0IEJyYWtlIGludGVycnVwdCBmb3IgY2hhbm5lbDIvMyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRWRnZS1kZXRlY3QgQnJha2UgaW50ZXJydXB0IGZvciBjaGFubmVsMi8zIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMl0gICAgIHxCUktFSUVONF81fEVQV00gRWRnZS1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEVuYWJsZSBmb3IgQ2hhbm5lbDQvNSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRWRnZS1kZXRlY3QgQnJha2UgaW50ZXJydXB0IGZvciBjaGFubmVsNC81IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFZGdlLWRldGVjdCBCcmFrZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWw0LzUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs4XSAgICAgfEJSS0xJRU4wXzF8RVBXTSBMZXZlbC1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEVuYWJsZSBmb3IgQ2hhbm5lbDAvMSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTGV2ZWwtZGV0ZWN0IEJyYWtlIGludGVycnVwdCBmb3IgY2hhbm5lbDAvMSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTGV2ZWwtZGV0ZWN0IEJyYWtlIGludGVycnVwdCBmb3IgY2hhbm5lbDAvMSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzldICAgICB8QlJLTElFTjJfM3xFUFdNIExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRW5hYmxlIGZvciBDaGFubmVsMi8zIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMZXZlbC1kZXRlY3QgQnJha2UgaW50ZXJydXB0IGZvciBjaGFubmVsMi8zIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMZXZlbC1kZXRlY3QgQnJha2UgaW50ZXJydXB0IGZvciBjaGFubmVsMi8zIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTBdICAgIHxCUktMSUVONF81fEVQV00gTGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBFbmFibGUgZm9yIENoYW5uZWw0LzUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExldmVsLWRldGVjdCBCcmFrZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWw0LzUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExldmVsLWRldGVjdCBCcmFrZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWw0LzUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBFUFdNX1Q6OklOVFNUUzAKKyAgICAgKiBPZmZzZXQ6IDB4RTggIEVQV00gSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFpJRjAgICAgICB8RVBXTSBaZXJvIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHJlYWNoZXMgemVybywgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8WzFdICAgICB8WklGMSAgICAgIHxFUFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgcmVhY2hlcyB6ZXJvLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvLgorICAgICAqIHxbMl0gICAgIHxaSUYyICAgICAgfEVQV00gWmVybyBQb2ludCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciByZWFjaGVzIHplcm8sIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfFszXSAgICAgfFpJRjMgICAgICB8RVBXTSBaZXJvIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHJlYWNoZXMgemVybywgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8WzRdICAgICB8WklGNCAgICAgIHxFUFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgcmVhY2hlcyB6ZXJvLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvLgorICAgICAqIHxbNV0gICAgIHxaSUY1ICAgICAgfEVQV00gWmVybyBQb2ludCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciByZWFjaGVzIHplcm8sIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8uCisgICAgICogfFs4XSAgICAgfFBJRjAgICAgICB8RVBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgcmVhY2hlcyBFUFdNX1BFUklPRDAsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8KKyAgICAgKiB8WzldICAgICB8UElGMSAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciByZWFjaGVzIEVQV01fUEVSSU9EMSwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVybworICAgICAqIHxbMTBdICAgIHxQSUYyICAgICAgfEVQV00gUGVyaW9kIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHJlYWNoZXMgRVBXTV9QRVJJT0QyLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvCisgICAgICogfFsxMV0gICAgfFBJRjMgICAgICB8RVBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgcmVhY2hlcyBFUFdNX1BFUklPRDQsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8KKyAgICAgKiB8WzEyXSAgICB8UElGNCAgICAgIHxFUFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciByZWFjaGVzIEVQV01fUEVSSU9ENSwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVybworICAgICAqIHxbMTNdICAgIHxQSUY1ICAgICAgfEVQV00gUGVyaW9kIFBvaW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHJlYWNoZXMgRVBXTV9QRVJJT0RuLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvLgorICAgICAqIHxbMTZdICAgIHxDTVBVSUYwICAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IGFuZCByZWFjaGVzIEVQV01fQ01QREFUMCwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIHVwIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUlGMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVSUYgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzE3XSAgICB8Q01QVUlGMSAgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCBhbmQgcmVhY2hlcyBFUFdNX0NNUERBVDEsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiB1cCBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVJRjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUlGIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsxOF0gICAgfENNUFVJRjIgICB8RVBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgYW5kIHJlYWNoZXMgRVBXTV9DTVBEQVQyLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gdXAgY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVSUYxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVJRiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMTldICAgIHxDTVBVSUYzICAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IGFuZCByZWFjaGVzIEVQV01fQ01QREFUMywgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIHVwIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QVUlGMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBVSUYgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzIwXSAgICB8Q01QVUlGNCAgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCBhbmQgcmVhY2hlcyBFUFdNX0NNUERBVDQsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiB1cCBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUFVJRjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QVUlGIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyMV0gICAgfENNUFVJRjUgICB8RVBXTSBDb21wYXJlIFVwIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgYW5kIHJlYWNoZXMgRVBXTV9DTVBEQVQ1LCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gdXAgY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBVSUYxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUFVJRiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjRdICAgIHxDTVBESUYwICAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBFUFdNX0NNUERBVDAsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRElGMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBESUYgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI1XSAgICB8Q01QRElGMSAgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgRVBXTV9DTVBEQVQxLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gZG93biBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERJRjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRElGIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyNl0gICAgfENNUERJRjIgICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IGFuZCByZWFjaGVzIEVQV01fQ01QREFUMiwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBESUYxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERJRiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjddICAgIHxDTVBESUYzICAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCBhbmQgcmVhY2hlcyBFUFdNX0NNUERBVDMsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIENNUERBVCBlcXVhbCB0byBQRVJJT0QsIHRoaXMgZmxhZyBpcyBub3Qgd29ya2luZyBpbiBkb3duIGNvdW50ZXIgdHlwZSBzZWxlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ01QRElGMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDTVBESUYgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI4XSAgICB8Q01QRElGNCAgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgYW5kIHJlYWNoZXMgRVBXTV9DTVBEQVQ0LCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBDTVBEQVQgZXF1YWwgdG8gUEVSSU9ELCB0aGlzIGZsYWcgaXMgbm90IHdvcmtpbmcgaW4gZG93biBjb3VudGVyIHR5cGUgc2VsZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENNUERJRjEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ01QRElGIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyOV0gICAgfENNUERJRjUgICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IGFuZCByZWFjaGVzIEVQV01fQ01QREFUNSwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QREFUIGVxdWFsIHRvIFBFUklPRCwgdGhpcyBmbGFnIGlzIG5vdCB3b3JraW5nIGluIGRvd24gY291bnRlciB0eXBlIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDTVBESUYxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENNUERJRiBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIEB2YXIgRVBXTV9UOjpJTlRTVFMxCisgICAgICogT2Zmc2V0OiAweEVDICBFUFdNIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCUktFSUYwICAgfEVQV00gQ2hhbm5lbDAgRWRnZS1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDAgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDAgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMV0gICAgIHxCUktFSUYxICAgfEVQV00gQ2hhbm5lbDEgRWRnZS1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDEgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDEgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMl0gICAgIHxCUktFSUYyICAgfEVQV00gQ2hhbm5lbDIgRWRnZS1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDIgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDIgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbM10gICAgIHxCUktFSUYzICAgfEVQV00gQ2hhbm5lbDMgRWRnZS1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDMgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDMgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNF0gICAgIHxCUktFSUY0ICAgfEVQV00gQ2hhbm5lbDQgRWRnZS1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDQgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDQgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNV0gICAgIHxCUktFSUY1ICAgfEVQV00gQ2hhbm5lbDUgRWRnZS1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDUgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgZG8gbm90IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDUgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOF0gICAgIHxCUktMSUYwICAgfEVQV00gQ2hhbm5lbDAgTGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwwIGxldmVsLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMCBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOV0gICAgIHxCUktMSUYxICAgfEVQV00gQ2hhbm5lbDEgTGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwxIGxldmVsLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMSBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTBdICAgIHxCUktMSUYyICAgfEVQV00gQ2hhbm5lbDIgTGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwyIGxldmVsLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMiBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTFdICAgIHxCUktMSUYzICAgfEVQV00gQ2hhbm5lbDMgTGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwzIGxldmVsLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMyBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTJdICAgIHxCUktMSUY0ICAgfEVQV00gQ2hhbm5lbDQgTGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWw0IGxldmVsLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsNCBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTNdICAgIHxCUktMSUY1ICAgfEVQV00gQ2hhbm5lbDUgTGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWw1IGxldmVsLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsNSBsZXZlbC1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQsIHRoaXMgYml0IGlzIHNldCB0byAxLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTZdICAgIHxCUktFU1RTMCAgfEVQV00gQ2hhbm5lbDAgRWRnZS1kZXRlY3QgQnJha2UgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDAgZWRnZS1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMCBlZGdlLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWwwIGF0IGJyYWtlIHN0YXRlLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfFsxN10gICAgfEJSS0VTVFMxICB8RVBXTSBDaGFubmVsMSBFZGdlLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsMSBlZGdlLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwxIGVkZ2UtZGV0ZWN0IGJyYWtlIGRldGVjdHMgYSBmYWxsaW5nIGVkZ2Ugb2YgYW55IGVuYWJsZWQgYnJha2Ugc291cmNlOyB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIEVQV00gY2hhbm5lbDEgYXQgYnJha2Ugc3RhdGUsIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8WzE4XSAgICB8QlJLRVNUUzIgIHxFUFdNIENoYW5uZWwyIEVkZ2UtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwyIGVkZ2UtZGV0ZWN0IGJyYWtlIHN0YXRlIGlzIHJlbGVhc2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDIgZWRnZS1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsMiBhdCBicmFrZSBzdGF0ZSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHxbMTldICAgIHxCUktFU1RTMyAgfEVQV00gQ2hhbm5lbDMgRWRnZS1kZXRlY3QgQnJha2UgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gY2hhbm5lbDMgZWRnZS1kZXRlY3QgYnJha2Ugc3RhdGUgaXMgcmVsZWFzZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gRVBXTSBjaGFubmVsMyBlZGdlLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWwzIGF0IGJyYWtlIHN0YXRlLCB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfFsyMF0gICAgfEJSS0VTVFM0ICB8RVBXTSBDaGFubmVsNCBFZGdlLWRldGVjdCBCcmFrZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBjaGFubmVsNCBlZGdlLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWw0IGVkZ2UtZGV0ZWN0IGJyYWtlIGRldGVjdHMgYSBmYWxsaW5nIGVkZ2Ugb2YgYW55IGVuYWJsZWQgYnJha2Ugc291cmNlOyB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIEVQV00gY2hhbm5lbDQgYXQgYnJha2Ugc3RhdGUsIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8WzIxXSAgICB8QlJLRVNUUzUgIHxFUFdNIENoYW5uZWw1IEVkZ2UtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWw1IGVkZ2UtZGV0ZWN0IGJyYWtlIHN0YXRlIGlzIHJlbGVhc2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXaGVuIEVQV00gY2hhbm5lbDUgZWRnZS1kZXRlY3QgYnJha2UgZGV0ZWN0cyBhIGZhbGxpbmcgZWRnZSBvZiBhbnkgZW5hYmxlZCBicmFrZSBzb3VyY2U7IHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgRVBXTSBjaGFubmVsNSBhdCBicmFrZSBzdGF0ZSwgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHxbMjRdICAgIHxCUktMU1RTMCAgfEVQV00gQ2hhbm5lbDAgTGV2ZWwtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwwIGxldmVsLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwwIGxldmVsLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWwwIGF0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgYXV0byBjbGVhcmVkIGJ5IGhhcmR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBlbmFibGVkIGJyYWtlIHNvdXJjZSByZXR1cm4gdG8gaGlnaCBsZXZlbCwgRVBXTSB3aWxsIHJlbGVhc2UgYnJha2Ugc3RhdGUgdW50aWwgY3VycmVudCBFUFdNIHBlcmlvZCBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIHdhdmVmb3JtIHdpbGwgc3RhcnQgb3V0cHV0IGZyb20gbmV4dCBmdWxsIEVQV00gcGVyaW9kLgorICAgICAqIHxbMjVdICAgIHxCUktMU1RTMSAgfEVQV00gQ2hhbm5lbDEgTGV2ZWwtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwxIGxldmVsLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwxIGxldmVsLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWwxIGF0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgYXV0byBjbGVhcmVkIGJ5IGhhcmR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBlbmFibGVkIGJyYWtlIHNvdXJjZSByZXR1cm4gdG8gaGlnaCBsZXZlbCwgRVBXTSB3aWxsIHJlbGVhc2UgYnJha2Ugc3RhdGUgdW50aWwgY3VycmVudCBFUFdNIHBlcmlvZCBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIHdhdmVmb3JtIHdpbGwgc3RhcnQgb3V0cHV0IGZyb20gbmV4dCBmdWxsIEVQV00gcGVyaW9kLgorICAgICAqIHxbMjZdICAgIHxCUktMU1RTMiAgfEVQV00gQ2hhbm5lbDIgTGV2ZWwtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwyIGxldmVsLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwyIGxldmVsLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWwyIGF0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgYXV0byBjbGVhcmVkIGJ5IGhhcmR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBlbmFibGVkIGJyYWtlIHNvdXJjZSByZXR1cm4gdG8gaGlnaCBsZXZlbCwgRVBXTSB3aWxsIHJlbGVhc2UgYnJha2Ugc3RhdGUgdW50aWwgY3VycmVudCBFUFdNIHBlcmlvZCBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIHdhdmVmb3JtIHdpbGwgc3RhcnQgb3V0cHV0IGZyb20gbmV4dCBmdWxsIEVQV00gcGVyaW9kLgorICAgICAqIHxbMjddICAgIHxCUktMU1RTMyAgfEVQV00gQ2hhbm5lbDMgTGV2ZWwtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWwzIGxldmVsLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWwzIGxldmVsLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWwzIGF0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgYXV0byBjbGVhcmVkIGJ5IGhhcmR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBlbmFibGVkIGJyYWtlIHNvdXJjZSByZXR1cm4gdG8gaGlnaCBsZXZlbCwgRVBXTSB3aWxsIHJlbGVhc2UgYnJha2Ugc3RhdGUgdW50aWwgY3VycmVudCBFUFdNIHBlcmlvZCBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIHdhdmVmb3JtIHdpbGwgc3RhcnQgb3V0cHV0IGZyb20gbmV4dCBmdWxsIEVQV00gcGVyaW9kLgorICAgICAqIHxbMjhdICAgIHxCUktMU1RTNCAgfEVQV00gQ2hhbm5lbDQgTGV2ZWwtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWw0IGxldmVsLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWw0IGxldmVsLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWw0IGF0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgYXV0byBjbGVhcmVkIGJ5IGhhcmR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBlbmFibGVkIGJyYWtlIHNvdXJjZSByZXR1cm4gdG8gaGlnaCBsZXZlbCwgRVBXTSB3aWxsIHJlbGVhc2UgYnJha2Ugc3RhdGUgdW50aWwgY3VycmVudCBFUFdNIHBlcmlvZCBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIHdhdmVmb3JtIHdpbGwgc3RhcnQgb3V0cHV0IGZyb20gbmV4dCBmdWxsIEVQV00gcGVyaW9kLgorICAgICAqIHxbMjldICAgIHxCUktMU1RTNSAgfEVQV00gQ2hhbm5lbDUgTGV2ZWwtZGV0ZWN0IEJyYWtlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIGNoYW5uZWw1IGxldmVsLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBFUFdNIGNoYW5uZWw1IGxldmVsLWRldGVjdCBicmFrZSBkZXRlY3RzIGEgZmFsbGluZyBlZGdlIG9mIGFueSBlbmFibGVkIGJyYWtlIHNvdXJjZTsgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBFUFdNIGNoYW5uZWw1IGF0IGJyYWtlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgYXV0byBjbGVhcmVkIGJ5IGhhcmR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBlbmFibGVkIGJyYWtlIHNvdXJjZSByZXR1cm4gdG8gaGlnaCBsZXZlbCwgRVBXTSB3aWxsIHJlbGVhc2UgYnJha2Ugc3RhdGUgdW50aWwgY3VycmVudCBFUFdNIHBlcmlvZCBmaW5pc2hlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBFUFdNIHdhdmVmb3JtIHdpbGwgc3RhcnQgb3V0cHV0IGZyb20gbmV4dCBmdWxsIEVQV00gcGVyaW9kLgorICAgICAqIEB2YXIgRVBXTV9UOjpEQUNUUkdFTgorICAgICAqIE9mZnNldDogMHhGNCAgRVBXTSBUcmlnZ2VyIERBQyBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxaVEUwICAgICAgfEVQV00gWmVybyBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgRUFEQy9EQUMvRE1BIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIHplcm8gaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFpURTEgICAgICB8RVBXTSBaZXJvIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBFQURDL0RBQy9ETUEgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gemVybyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8WlRFMiAgICAgIHxFUFdNIFplcm8gUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIEVBREMvREFDL0RNQSB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byB6ZXJvIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxaVEUzICAgICAgfEVQV00gWmVybyBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgRUFEQy9EQUMvRE1BIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIHplcm8gaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFpURTQgICAgICB8RVBXTSBaZXJvIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBFQURDL0RBQy9ETUEgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gemVybyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBwZXJpb2QgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8WlRFNSAgICAgIHxFUFdNIFplcm8gUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIEVBREMvREFDL0RNQSB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byB6ZXJvIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxQVEUwICAgICAgfEVQV00gUGVyaW9kIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIChQRVJJT0RuKzEpIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbOV0gICAgIHxQVEUxICAgICAgfEVQV00gUGVyaW9kIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIChQRVJJT0RuKzEpIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTBdICAgIHxQVEUyICAgICAgfEVQV00gUGVyaW9kIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIChQRVJJT0RuKzEpIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTFdICAgIHxQVEUzICAgICAgfEVQV00gUGVyaW9kIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIChQRVJJT0RuKzEpIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxQVEU0ICAgICAgfEVQV00gUGVyaW9kIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIChQRVJJT0RuKzEpIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTNdICAgIHxQVEU1ICAgICAgfEVQV00gUGVyaW9kIFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIChQRVJJT0RuKzEpIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gcGVyaW9kIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHBlcmlvZCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTZdICAgIHxDVVRSR0UwICAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQgaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb21wYXJlIFVwIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvbXBhcmUgVXAgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgc2hvdWxkIGtlZXAgYXQgMCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ1VUUkdFMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDVVRSR0UgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzE3XSAgICB8Q1VUUkdFMSAgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIERBQyB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFUIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ29tcGFyZSBVcCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb21wYXJlIFVwIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHNob3VsZCBrZWVwIGF0IDAgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIGRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENVVFJHRTEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ1VUUkdFIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsxOF0gICAgfENVVFJHRTIgICB8RVBXTSBDb21wYXJlIFVwIENvdW50IFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVCBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvbXBhcmUgVXAgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ29tcGFyZSBVcCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBzaG91bGQga2VlcCBhdCAwIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiBkb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDVVRSR0UxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENVVFJHRSBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMTldICAgIHxDVVRSR0UzICAgfEVQV00gQ29tcGFyZSBVcCBDb3VudCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciB1cCBjb3VudCB0byBDTVBEQVQgaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb21wYXJlIFVwIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvbXBhcmUgVXAgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgc2hvdWxkIGtlZXAgYXQgMCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gZG93biBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ1VUUkdFMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDVVRSR0UgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzIwXSAgICB8Q1VUUkdFNCAgIHxFUFdNIENvbXBhcmUgVXAgQ291bnQgUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIERBQyB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gQ01QREFUIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ29tcGFyZSBVcCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb21wYXJlIFVwIHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHNob3VsZCBrZWVwIGF0IDAgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIGRvd24gY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENVVFJHRTEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ1VUUkdFIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyMV0gICAgfENVVFJHRTUgICB8RVBXTSBDb21wYXJlIFVwIENvdW50IFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVCBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvbXBhcmUgVXAgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ29tcGFyZSBVcCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBzaG91bGQga2VlcCBhdCAwIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiBkb3duIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDVVRSR0UxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENVVFJHRSBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjRdICAgIHxDRFRSR0UwICAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFUIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ29tcGFyZSBEb3duIGNvdW50IHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvbXBhcmUgRG93biBjb3VudCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBzaG91bGQga2VlcCBhdCAwIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cCBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ0RUUkdFMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDRFRSR0UgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI1XSAgICB8Q0RUUkdFMSAgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVCBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvbXBhcmUgRG93biBjb3VudCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb21wYXJlIERvd24gY291bnQgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgc2hvdWxkIGtlZXAgYXQgMCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAgY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENEVFJHRTEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ0RUUkdFIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyNl0gICAgfENEVFJHRTIgICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIERBQyB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byBDTVBEQVQgaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb21wYXJlIERvd24gY291bnQgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ29tcGFyZSBEb3duIGNvdW50IHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHNob3VsZCBrZWVwIGF0IDAgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDRFRSR0UxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENEVFJHRSBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIHxbMjddICAgIHxDRFRSR0UzICAgfEVQV00gQ29tcGFyZSBEb3duIENvdW50IFBvaW50IFRyaWdnZXIgREFDIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RVBXTSBjYW4gdHJpZ2dlciBEQUMgdG8gc3RhcnQgYWN0aW9uIHdoZW4gRVBXTSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFUIGlmIHRoaXMgYml0IGlzIHNldCB0bzEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ29tcGFyZSBEb3duIGNvdW50IHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENvbXBhcmUgRG93biBjb3VudCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBzaG91bGQga2VlcCBhdCAwIHdoZW4gRVBXTSBjb3VudGVyIG9wZXJhdGluZyBpbiB1cCBjb3VudGVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEluIGNvbXBsZW1lbnRhcnkgbW9kZSwgQ0RUUkdFMSwgMywgNSB1c2UgYXMgYW5vdGhlciBDRFRSR0UgZm9yIGNoYW5uZWwgMCwgMiwgNC4KKyAgICAgKiB8WzI4XSAgICB8Q0RUUkdFNCAgIHxFUFdNIENvbXBhcmUgRG93biBDb3VudCBQb2ludCBUcmlnZ2VyIERBQyBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVQV00gY2FuIHRyaWdnZXIgREFDIHRvIHN0YXJ0IGFjdGlvbiB3aGVuIEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIENNUERBVCBpZiB0aGlzIGJpdCBpcyBzZXQgdG8xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENvbXBhcmUgRG93biBjb3VudCBwb2ludCB0cmlnZ2VyIERBQyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDb21wYXJlIERvd24gY291bnQgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgc2hvdWxkIGtlZXAgYXQgMCB3aGVuIEVQV00gY291bnRlciBvcGVyYXRpbmcgaW4gdXAgY291bnRlciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJbiBjb21wbGVtZW50YXJ5IG1vZGUsIENEVFJHRTEsIDMsIDUgdXNlIGFzIGFub3RoZXIgQ0RUUkdFIGZvciBjaGFubmVsIDAsIDIsIDQuCisgICAgICogfFsyOV0gICAgfENEVFJHRTUgICB8RVBXTSBDb21wYXJlIERvd24gQ291bnQgUG9pbnQgVHJpZ2dlciBEQUMgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGNhbiB0cmlnZ2VyIERBQyB0byBzdGFydCBhY3Rpb24gd2hlbiBFUFdNIGNvdW50ZXIgZG93biBjb3VudCB0byBDTVBEQVQgaWYgdGhpcyBiaXQgaXMgc2V0IHRvMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDb21wYXJlIERvd24gY291bnQgcG9pbnQgdHJpZ2dlciBEQUMgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ29tcGFyZSBEb3duIGNvdW50IHBvaW50IHRyaWdnZXIgREFDIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHNob3VsZCBrZWVwIGF0IDAgd2hlbiBFUFdNIGNvdW50ZXIgb3BlcmF0aW5nIGluIHVwIGNvdW50ZXIgdHlwZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gY29tcGxlbWVudGFyeSBtb2RlLCBDRFRSR0UxLCAzLCA1IHVzZSBhcyBhbm90aGVyIENEVFJHRSBmb3IgY2hhbm5lbCAwLCAyLCA0LgorICAgICAqIEB2YXIgRVBXTV9UOjpFQURDVFMwCisgICAgICogT2Zmc2V0OiAweEY4ICBFUFdNIFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0IFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxUUkdTRUwwICAgfEVQV01fQ0gwIFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEVQV01fQ0gwIHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEVQV01fQ0gwIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gRVBXTV9DSDAgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEVQV01fQ0gwIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gRVBXTV9DSDAgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IEVQV01fQ0gxIHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IEVQV01fQ0gxIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gRVBXTV9DSDEgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IEVQV01fQ0gxIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gRVBXTV9DSDEgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IEVQV01fQ0gwIHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTEgPSBFUFdNX0NIMCBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDAgPSBFUFdNX0NIMiB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gRVBXTV9DSDIgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gRVBXTV9DSDQgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IEVQV01fQ0g0IGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfFs3XSAgICAgfFRSR0VOMCAgICB8RVBXTV9DSDAgVHJpZ2dlciBFQURDIGVuYWJsZSBiaXQKKyAgICAgKiB8WzExOjhdICB8VFJHU0VMMSAgIHxFUFdNX0NIMSBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBFUFdNX0NIMCB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBFUFdNX0NIMCBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEVQV01fQ0gwIHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBFUFdNX0NIMCB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEVQV01fQ0gwIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBFUFdNX0NIMSB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBFUFdNX0NIMSBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IEVQV01fQ0gxIHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBFUFdNX0NIMSB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEVQV01fQ0gxIGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSBFUFdNX0NIMCB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gRVBXTV9DSDAgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gRVBXTV9DSDIgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IEVQV01fQ0gyIGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IEVQV01fQ0g0IHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSBFUFdNX0NINCBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHxbMTVdICAgIHxUUkdFTjEgICAgfEVQV01fQ0gxIFRyaWdnZXIgRUFEQyBlbmFibGUgYml0CisgICAgICogfFsxOToxNl0gfFRSR1NFTDIgICB8RVBXTV9DSDIgVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gRVBXTV9DSDIgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gRVBXTV9DSDIgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBFUFdNX0NIMiB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gRVBXTV9DSDIgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBFUFdNX0NIMiBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gRVBXTV9DSDMgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gRVBXTV9DSDMgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBFUFdNX0NIMyB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gRVBXTV9DSDMgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBFUFdNX0NIMyBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEwID0gRVBXTV9DSDAgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IEVQV01fQ0gwIGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMCA9IEVQV01fQ0gyIHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDEgPSBFUFdNX0NIMiBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTAgPSBFUFdNX0NINCB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gRVBXTV9DSDQgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8WzIzXSAgICB8VFJHRU4yICAgIHxFUFdNX0NIMiBUcmlnZ2VyIEVBREMgZW5hYmxlIGJpdAorICAgICAqIHxbMjc6MjRdIHxUUkdTRUwzICAgfEVQV01fQ0gzIFRyaWdnZXIgRUFEQyBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEVQV01fQ0gyIHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEVQV01fQ0gyIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gRVBXTV9DSDIgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IEVQV01fQ0gyIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gRVBXTV9DSDIgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IEVQV01fQ0gzIHplcm8gcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IEVQV01fQ0gzIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gRVBXTV9DSDMgemVybyBvciBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IEVQV01fQ0gzIHVwLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gRVBXTV9DSDMgZG93bi1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IEVQV01fQ0gwIHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTEgPSBFUFdNX0NIMCBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDAgPSBFUFdNX0NIMiB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gRVBXTV9DSDIgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gRVBXTV9DSDQgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IEVQV01fQ0g0IGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfFszMV0gICAgfFRSR0VOMyAgICB8RVBXTV9DSDMgVHJpZ2dlciBFQURDIGVuYWJsZSBiaXQKKyAgICAgKiBAdmFyIEVQV01fVDo6RUFEQ1RTMQorICAgICAqIE9mZnNldDogMHhGQyAgRVBXTSBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdCBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8VFJHU0VMNCAgIHxFUFdNX0NINCBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBFUFdNX0NINCB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBFUFdNX0NINCBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IEVQV01fQ0g0IHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBFUFdNX0NINCB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IEVQV01fQ0g0IGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDEgPSBFUFdNX0NINSB6ZXJvIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBFUFdNX0NINSBwZXJpb2QgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IEVQV01fQ0g1IHplcm8gb3IgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAgPSBFUFdNX0NINSB1cC1jb3VudCBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IEVQV01fQ0g1IGRvd24tY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTAgPSBFUFdNX0NIMCB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gRVBXTV9DSDAgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gRVBXTV9DSDIgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IEVQV01fQ0gyIGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IEVQV01fQ0g0IHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSBFUFdNX0NINCBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHxbN10gICAgIHxUUkdFTjQgICAgfEVQV01fQ0g0IFRyaWdnZXIgRUFEQyBlbmFibGUgYml0CisgICAgICogfFsxMTo4XSAgfFRSR1NFTDUgICB8RVBXTV9DSDUgVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gRVBXTV9DSDQgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gRVBXTV9DSDQgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBFUFdNX0NINCB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gRVBXTV9DSDQgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBFUFdNX0NINCBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gRVBXTV9DSDUgemVybyBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gRVBXTV9DSDUgcGVyaW9kIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBFUFdNX0NINSB6ZXJvIG9yIHBlcmlvZCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gRVBXTV9DSDUgdXAtY291bnQgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBFUFdNX0NINSBkb3duLWNvdW50IENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEwID0gRVBXTV9DSDAgdXAtY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IEVQV01fQ0gwIGRvd24tY291bnQgZnJlZSBDTVBEQVQgcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMCA9IEVQV01fQ0gyIHVwLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDEgPSBFUFdNX0NIMiBkb3duLWNvdW50IGZyZWUgQ01QREFUIHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTAgPSBFUFdNX0NINCB1cC1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gRVBXTV9DSDQgZG93bi1jb3VudCBmcmVlIENNUERBVCBwb2ludC4KKyAgICAgKiB8WzE1XSAgICB8VFJHRU41ICAgIHxFUFdNX0NINSBUcmlnZ2VyIEVBREMgZW5hYmxlIGJpdAorICAgICAqIEB2YXIgRVBXTV9UOjpGVENNUERBVFszXQorICAgICAqIE9mZnNldDogMHgxMDAgIEVQV00gRnJlZSBUcmlnZ2VyIENvbXBhcmUgUmVnaXN0ZXIgMC8xLDIvMyw0LzUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxGVENNUCAgICAgfEVQV00gRnJlZSBUcmlnZ2VyIENvbXBhcmUgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGVENNUCB1c2UgdG8gY29tcGFyZSB3aXRoIGV2ZW4gQ05UUiB0byB0cmlnZ2VyIEVBREMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGVENNUERBVDAsIDIsIDQgY29ycmVzcG9uZGluZyBjb21wbGVtZW50YXJ5IHBhaXJzIEVQV01fQ0gwIGFuZCBFUFdNX0NIMSwgRVBXTV9DSDIgYW5kIEVQV01fQ0gzLCBFUFdNX0NINCBhbmQgRVBXTV9DSDUuCisgICAgICogQHZhciBFUFdNX1Q6OlNTQ1RMCisgICAgICogT2Zmc2V0OiAweDExMCAgRVBXTSBTeW5jaHJvbm91cyBTdGFydCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1NFTjAgICAgIHxFUFdNIFN5bmNocm9ub3VzIFN0YXJ0IEZ1bmN0aW9uIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBpcyBlbmFibGVkLCB0aGUgRVBXTSBjb3VudGVyIGVuYWJsZSByZWdpc3RlciAoRVBXTV9DTlRFTikgY2FuIGJlIGVuYWJsZWQgYnkgd3JpdGluZyBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IHRyaWdnZXIgYml0IChDTlRTRU4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFNTRU4xICAgICB8RVBXTSBTeW5jaHJvbm91cyBTdGFydCBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gaXMgZW5hYmxlZCwgdGhlIEVQV00gY291bnRlciBlbmFibGUgcmVnaXN0ZXIgKEVQV01fQ05URU4pIGNhbiBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgRVBXTSBzeW5jaHJvbm91cyBzdGFydCB0cmlnZ2VyIGJpdCAoQ05UU0VOKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxTU0VOMiAgICAgfEVQV00gU3luY2hyb25vdXMgU3RhcnQgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIGlzIGVuYWJsZWQsIHRoZSBFUFdNIGNvdW50ZXIgZW5hYmxlIHJlZ2lzdGVyIChFUFdNX0NOVEVOKSBjYW4gYmUgZW5hYmxlZCBieSB3cml0aW5nIEVQV00gc3luY2hyb25vdXMgc3RhcnQgdHJpZ2dlciBiaXQgKENOVFNFTikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8U1NFTjMgICAgIHxFUFdNIFN5bmNocm9ub3VzIFN0YXJ0IEZ1bmN0aW9uIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBpcyBlbmFibGVkLCB0aGUgRVBXTSBjb3VudGVyIGVuYWJsZSByZWdpc3RlciAoRVBXTV9DTlRFTikgY2FuIGJlIGVuYWJsZWQgYnkgd3JpdGluZyBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IHRyaWdnZXIgYml0IChDTlRTRU4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFNTRU40ICAgICB8RVBXTSBTeW5jaHJvbm91cyBTdGFydCBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gaXMgZW5hYmxlZCwgdGhlIEVQV00gY291bnRlciBlbmFibGUgcmVnaXN0ZXIgKEVQV01fQ05URU4pIGNhbiBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgRVBXTSBzeW5jaHJvbm91cyBzdGFydCB0cmlnZ2VyIGJpdCAoQ05UU0VOKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBzeW5jaHJvbm91cyBzdGFydCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxTU0VONSAgICAgfEVQV00gU3luY2hyb25vdXMgU3RhcnQgRnVuY3Rpb24gRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIGlzIGVuYWJsZWQsIHRoZSBFUFdNIGNvdW50ZXIgZW5hYmxlIHJlZ2lzdGVyIChFUFdNX0NOVEVOKSBjYW4gYmUgZW5hYmxlZCBieSB3cml0aW5nIEVQV00gc3luY2hyb25vdXMgc3RhcnQgdHJpZ2dlciBiaXQgKENOVFNFTikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gc3luY2hyb25vdXMgc3RhcnQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8Wzk6OF0gICB8U1NSQyAgICAgIHxFUFdNIFN5bmNocm9ub3VzIFN0YXJ0IFNvdXJjZSBTZWxlY3QgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWUgZnJvbSBFUFdNMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lIGZyb20gRVBXTTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZSBmcm9tIEJQV00wLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWUgZnJvbSBCUFdNMS4KKyAgICAgKiBAdmFyIEVQV01fVDo6U1NUUkcKKyAgICAgKiBPZmZzZXQ6IDB4MTE0ICBFUFdNIFN5bmNocm9ub3VzIFN0YXJ0IFRyaWdnZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDTlRTRU4gICAgfEVQV00gQ291bnRlciBTeW5jaHJvbm91cyBTdGFydCBFbmFibGUgKFdyaXRlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UE1XIGNvdW50ZXIgc3luY2hyb25vdXMgZW5hYmxlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFrZSBzZWxlY3RlZCBFUFdNIGNoYW5uZWxzIChpbmNsdWRlIEVQV00wX0NIeCBhbmQgRVBXTTFfQ0h4KSBzdGFydCBjb3VudGluZyBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgdGhpcyBiaXQgdG8gMSB3aWxsIGFsc28gc2V0IHRoZSBjb3VudGVyIGVuYWJsZSBiaXQgKENOVEVObiwgbiBkZW5vdGVzIGNoYW5uZWwgMCB0byA1KSBpZiBjb3JyZWxhdGVkIEVQV00gY2hhbm5lbCBjb3VudGVyIHN5bmNocm9ub3VzIHN0YXJ0IGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogQHZhciBFUFdNX1Q6OkxFQkNUTAorICAgICAqIE9mZnNldDogMHgxMTggIEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxMRUJFTiAgICAgfEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFNSQ0VOMCAgICB8RVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIEZyb20gRVBXTV9DSDAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgZnJvbSBFUFdNX0NIMCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIGZyb20gRVBXTV9DSDAgRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8U1JDRU4yICAgIHxFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgRnJvbSBFUFdNX0NIMiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFNvdXJjZSBmcm9tIEVQV01fQ0gyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgZnJvbSBFUFdNX0NIMiBFbmFibGVkLgorICAgICAqIHxbMTBdICAgIHxTUkNFTjQgICAgfEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFNvdXJjZSBGcm9tIEVQV01fQ0g0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIGZyb20gRVBXTV9DSDQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFNvdXJjZSBmcm9tIEVQV01fQ0g0IEVuYWJsZWQuCisgICAgICogfFsxNzoxNl0gfFRSR1RZUEUgICB8RVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgVHJpZ2dlciBUeXBlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdoZW4gZGV0ZWN0IGxlYWRpbmcgZWRnZSBibGFua2luZyBzb3VyY2UgcmlzaW5nIGVkZ2UsIGJsYW5raW5nIGNvdW50ZXIgc3RhcnQgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gZGV0ZWN0IGxlYWRpbmcgZWRnZSBibGFua2luZyBzb3VyY2UgZmFsbGluZyBlZGdlLCBibGFua2luZyBjb3VudGVyIHN0YXJ0IGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDIgPSBXaGVuIGRldGVjdCBsZWFkaW5nIGVkZ2UgYmxhbmtpbmcgc291cmNlIHJpc2luZyBvciBmYWxsaW5nIGVkZ2UsIGJsYW5raW5nIGNvdW50ZXIgc3RhcnQgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MyA9IFJlc2VydmVkLgorICAgICAqIEB2YXIgRVBXTV9UOjpMRUJDTlQKKyAgICAgKiBPZmZzZXQ6IDB4MTFDICBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzg6MF0gICB8TEVCQ05UICAgIHxFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBjb3VudGVyIHZhbHVlIGRlY2lkZXMgbGVhZGluZyBlZGdlIGJsYW5raW5nIHdpbmRvdyBzaXplLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJsYW5raW5nIHdpbmRvdyBzaXplID0gTEVCQ05UKzEsIGFuZCBMRUIgY291bnRlciBjbG9jayBiYXNlIGlzIEVDTEsuCisgICAgICogQHZhciBFUFdNX1Q6OlNUQVRVUworICAgICAqIE9mZnNldDogMHgxMjAgIEVQV00gU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q05UTUFYRjAgIHxUaW1lLWJhc2UgQ291bnRlciBFcXVhbCB0byAweEZGRkYgTGF0Y2hlZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgbmV2ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSAweEZGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxXSAgICAgfENOVE1BWEYxICB8VGltZS1iYXNlIENvdW50ZXIgRXF1YWwgdG8gMHhGRkZGIExhdGNoZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBpbmRpY2F0ZXMgdGhlIHRpbWUtYmFzZSBjb3VudGVyIG5ldmVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUgMHhGRkZGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBpbmRpY2F0ZXMgdGhlIHRpbWUtYmFzZSBjb3VudGVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMl0gICAgIHxDTlRNQVhGMiAgfFRpbWUtYmFzZSBDb3VudGVyIEVxdWFsIHRvIDB4RkZGRiBMYXRjaGVkIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciBuZXZlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIDB4RkZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzNdICAgICB8Q05UTUFYRjMgIHxUaW1lLWJhc2UgQ291bnRlciBFcXVhbCB0byAweEZGRkYgTGF0Y2hlZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgbmV2ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSAweEZGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGluZGljYXRlcyB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFs0XSAgICAgfENOVE1BWEY0ICB8VGltZS1iYXNlIENvdW50ZXIgRXF1YWwgdG8gMHhGRkZGIExhdGNoZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBpbmRpY2F0ZXMgdGhlIHRpbWUtYmFzZSBjb3VudGVyIG5ldmVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUgMHhGRkZGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBpbmRpY2F0ZXMgdGhlIHRpbWUtYmFzZSBjb3VudGVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbNV0gICAgIHxDTlRNQVhGNSAgfFRpbWUtYmFzZSBDb3VudGVyIEVxdWFsIHRvIDB4RkZGRiBMYXRjaGVkIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciBuZXZlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIDB4RkZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gaW5kaWNhdGVzIHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzhdICAgICB8U1lOQ0lORjAgIHxJbnB1dCBTeW5jaHJvbml6YXRpb24gTGF0Y2hlZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyBubyBTWU5DX0lOIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIFNZTkNfSU4gZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzldICAgICB8U1lOQ0lORjIgIHxJbnB1dCBTeW5jaHJvbml6YXRpb24gTGF0Y2hlZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyBubyBTWU5DX0lOIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIFNZTkNfSU4gZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzEwXSAgICB8U1lOQ0lORjQgIHxJbnB1dCBTeW5jaHJvbml6YXRpb24gTGF0Y2hlZCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyBubyBTWU5DX0lOIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIFNZTkNfSU4gZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzE2XSAgICB8RUFEQ1RSR0YwIHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzE3XSAgICB8RUFEQ1RSR0YxIHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzE4XSAgICB8RUFEQ1RSR0YyIHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzE5XSAgICB8RUFEQ1RSR0YzIHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzIwXSAgICB8RUFEQ1RSR0Y0IHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzIxXSAgICB8RUFEQ1RSR0Y1IHxFQURDIFN0YXJ0IG9mIENvbnZlcnNpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgbm8gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgYW4gRUFEQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzI0XSAgICB8REFDVFJHRiAgIHxEQUMgU3RhcnQgb2YgQ29udmVyc2lvbiBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyBubyBEQUMgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGV2ZW50IGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIGFuIERBQyBzdGFydCBvZiBjb252ZXJzaW9uIHRyaWdnZXIgZXZlbnQgaGFzIG9jY3VycmVkLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdAorICAgICAqIEB2YXIgRVBXTV9UOjpJRkFbNl0KKyAgICAgKiBPZmZzZXQ6IDB4MTMwICBFUFdNIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIFJlZ2lzdGVyIDB+NQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfElGQUNOVCAgICB8RVBXTV9DSG4gSW50ZXJydXB0IEZsYWcgQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZWdpc3RlciBzZXRzIHRoZSBjb3VudCBudW1iZXIgd2hpY2ggZGVmaW5lcyBob3cgbWFueSB0aW1lcyBvZiBFUFdNX0NIbiBwZXJpb2Qgb2NjdXJzIHRvIHNldCBiaXQgSUZBSUZuIHRvIHJlcXVlc3QgdGhlIEVQV00gcGVyaW9kIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFUFdNIGZsYWcgd2lsbCBiZSBzZXQgaW4gZXZlcnkgSUZBQ05UWzE1OjBdIHRpbWVzIG9mIEVQV00gcGVyaW9kLgorICAgICAqIHxbMjk6MjhdIHxJRkFTRUwgICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IENOVCBlcXVhbCB0byBaZXJvIGluIGNoYW5uZWwgbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IENOVCBlcXVhbCB0byBQRVJJT0QgaW4gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQ05UIGVxdWFsIHRvIENNUFUgaW4gY2hhbm5lbCBuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQ05UIGVxdWFsIHRvIENNUEQgaW4gY2hhbm5lbCBuLgorICAgICAqIHxbMzFdICAgIHxJRkFFTiAgICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV01fQ0huIGludGVycnVwdCBmbGFnIGFjY3VtdWxhdG9yIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV01fQ0huIGludGVycnVwdCBmbGFnIGFjY3VtdWxhdG9yIGVuYWJsZS4KKyAgICAgKiBAdmFyIEVQV01fVDo6QUlOVFNUUworICAgICAqIE9mZnNldDogMHgxNTAgIEVQV00gQWNjdW11bGF0b3IgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJRkFJRjAgICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBjb25kaXRpb24gbWF0Y2ggSUZBU0VMIGluIEVQV01fSUZBbiByZWdpc3Rlciwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzFdICAgICB8SUZBSUYxICAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gY29uZGl0aW9uIG1hdGNoIElGQVNFTCBpbiBFUFdNX0lGQW4gcmVnaXN0ZXIsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsyXSAgICAgfElGQUlGMiAgICB8RVBXTV9DSG4gSW50ZXJydXB0IEZsYWcgQWNjdW11bGF0b3IgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGNvbmRpdGlvbiBtYXRjaCBJRkFTRUwgaW4gRVBXTV9JRkFuIHJlZ2lzdGVyLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbM10gICAgIHxJRkFJRjMgICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBjb25kaXRpb24gbWF0Y2ggSUZBU0VMIGluIEVQV01fSUZBbiByZWdpc3Rlciwgc29mdHdhcmUgY2FuIGNsZWFyIHRoaXMgYml0IGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzRdICAgICB8SUZBSUY0ICAgIHxFUFdNX0NIbiBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gY29uZGl0aW9uIG1hdGNoIElGQVNFTCBpbiBFUFdNX0lGQW4gcmVnaXN0ZXIsIHNvZnR3YXJlIGNhbiBjbGVhciB0aGlzIGJpdCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs1XSAgICAgfElGQUlGNSAgICB8RVBXTV9DSG4gSW50ZXJydXB0IEZsYWcgQWNjdW11bGF0b3IgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGNvbmRpdGlvbiBtYXRjaCBJRkFTRUwgaW4gRVBXTV9JRkFuIHJlZ2lzdGVyLCBzb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIEB2YXIgRVBXTV9UOjpBSU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4MTU0ICBFUFdNIEFjY3VtdWxhdG9yIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJRkFJRU4wICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBGbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxJRkFJRU4xICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBGbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxJRkFJRU4yICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBGbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxJRkFJRU4zICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBGbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxJRkFJRU40ICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBGbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxJRkFJRU41ICAgfEVQV01fQ0huIEludGVycnVwdCBGbGFnIEFjY3VtdWxhdG9yIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBGbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgRVBXTV9UOjpBUERNQUNUTAorICAgICAqIE9mZnNldDogMHgxNTggIEVQV00gQWNjdW11bGF0b3IgUERNQSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QVBETUFFTjAgIHxDaGFubmVsIE4gQWNjdW11bGF0b3IgUERNQSBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGFubmVsIG4gUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbCBuIFBETUEgZnVuY3Rpb24gRW5hYmxlZCBmb3IgdGhlIGNoYW5uZWwgbiB0byB0cmlnZ2VyIFBETUEgdG8gdHJhbnNmZXIgbWVtb3J5IGRhdGEgdG8gcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfEFQRE1BRU4xICB8Q2hhbm5lbCBOIEFjY3VtdWxhdG9yIFBETUEgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hhbm5lbCBuIFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwgbiBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQgZm9yIHRoZSBjaGFubmVsIG4gdG8gdHJpZ2dlciBQRE1BIHRvIHRyYW5zZmVyIG1lbW9yeSBkYXRhIHRvIHJlZ2lzdGVyLgorICAgICAqIHxbMl0gICAgIHxBUERNQUVOMiAgfENoYW5uZWwgTiBBY2N1bXVsYXRvciBQRE1BIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoYW5uZWwgbiBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsIG4gUERNQSBmdW5jdGlvbiBFbmFibGVkIGZvciB0aGUgY2hhbm5lbCBuIHRvIHRyaWdnZXIgUERNQSB0byB0cmFuc2ZlciBtZW1vcnkgZGF0YSB0byByZWdpc3Rlci4KKyAgICAgKiB8WzNdICAgICB8QVBETUFFTjMgIHxDaGFubmVsIE4gQWNjdW11bGF0b3IgUERNQSBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGFubmVsIG4gUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbCBuIFBETUEgZnVuY3Rpb24gRW5hYmxlZCBmb3IgdGhlIGNoYW5uZWwgbiB0byB0cmlnZ2VyIFBETUEgdG8gdHJhbnNmZXIgbWVtb3J5IGRhdGEgdG8gcmVnaXN0ZXIuCisgICAgICogfFs0XSAgICAgfEFQRE1BRU40ICB8Q2hhbm5lbCBOIEFjY3VtdWxhdG9yIFBETUEgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hhbm5lbCBuIFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwgbiBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQgZm9yIHRoZSBjaGFubmVsIG4gdG8gdHJpZ2dlciBQRE1BIHRvIHRyYW5zZmVyIG1lbW9yeSBkYXRhIHRvIHJlZ2lzdGVyLgorICAgICAqIHxbNV0gICAgIHxBUERNQUVONSAgfENoYW5uZWwgTiBBY2N1bXVsYXRvciBQRE1BIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoYW5uZWwgbiBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsIG4gUERNQSBmdW5jdGlvbiBFbmFibGVkIGZvciB0aGUgY2hhbm5lbCBuIHRvIHRyaWdnZXIgUERNQSB0byB0cmFuc2ZlciBtZW1vcnkgZGF0YSB0byByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEVQV01fVDo6Q0FQSU5FTgorICAgICAqIE9mZnNldDogMHgyMDAgIEVQV00gQ2FwdHVyZSBJbnB1dCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDQVBJTkVOMCAgfENhcHR1cmUgSW5wdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBFUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBpcyBhbHdheXMgcmVnYXJkZWQgYXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEVQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGNvbWVzIGZyb20gY29ycmVsYXRpdmUgbXVsdGlmdW5jdGlvbiBwaW4uCisgICAgICogfFsxXSAgICAgfENBUElORU4xICB8Q2FwdHVyZSBJbnB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIERpc2FibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEVQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGlzIGFsd2F5cyByZWdhcmRlZCBhcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgRVBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gY29tZXMgZnJvbSBjb3JyZWxhdGl2ZSBtdWx0aWZ1bmN0aW9uIHBpbi4KKyAgICAgKiB8WzJdICAgICB8Q0FQSU5FTjIgIHxDYXB0dXJlIElucHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgRVBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gaXMgYWx3YXlzIHJlZ2FyZGVkIGFzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBFUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBjb21lcyBmcm9tIGNvcnJlbGF0aXZlIG11bHRpZnVuY3Rpb24gcGluLgorICAgICAqIHxbM10gICAgIHxDQVBJTkVOMyAgfENhcHR1cmUgSW5wdXQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBFUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBpcyBhbHdheXMgcmVnYXJkZWQgYXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTSBDaGFubmVsIGNhcHR1cmUgaW5wdXQgcGF0aCBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEVQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGNvbWVzIGZyb20gY29ycmVsYXRpdmUgbXVsdGlmdW5jdGlvbiBwaW4uCisgICAgICogfFs0XSAgICAgfENBUElORU40ICB8Q2FwdHVyZSBJbnB1dCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIERpc2FibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGlucHV0IG9mIEVQV00gY2hhbm5lbCBjYXB0dXJlIGZ1bmN0aW9uIGlzIGFsd2F5cyByZWdhcmRlZCBhcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNIENoYW5uZWwgY2FwdHVyZSBpbnB1dCBwYXRoIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgRVBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gY29tZXMgZnJvbSBjb3JyZWxhdGl2ZSBtdWx0aWZ1bmN0aW9uIHBpbi4KKyAgICAgKiB8WzVdICAgICB8Q0FQSU5FTjUgIHxDYXB0dXJlIElucHV0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5wdXQgb2YgRVBXTSBjaGFubmVsIGNhcHR1cmUgZnVuY3Rpb24gaXMgYWx3YXlzIHJlZ2FyZGVkIGFzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV00gQ2hhbm5lbCBjYXB0dXJlIGlucHV0IHBhdGggRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbnB1dCBvZiBFUFdNIGNoYW5uZWwgY2FwdHVyZSBmdW5jdGlvbiBjb21lcyBmcm9tIGNvcnJlbGF0aXZlIG11bHRpZnVuY3Rpb24gcGluLgorICAgICAqIEB2YXIgRVBXTV9UOjpDQVBDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MjA0ICBFUFdNIENhcHR1cmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENBUEVOMCAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBFUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFsxXSAgICAgfENBUEVOMSAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBFUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFsyXSAgICAgfENBUEVOMiAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBFUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFszXSAgICAgfENBUEVOMyAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBFUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFs0XSAgICAgfENBUEVONCAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBFUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFs1XSAgICAgfENBUEVONSAgICB8Q2FwdHVyZSBGdW5jdGlvbiBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZ1bmN0aW9uIERpc2FibGVkLiBSQ0FQREFUL0ZDQVBEQVQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2FwdHVyZSBsYXRjaGVkIHRoZSBFUFdNIGNvdW50ZXIgdmFsdWUgd2hlbiBkZXRlY3RlZCByaXNpbmcgb3IgZmFsbGluZyBlZGdlIG9mIGlucHV0IHNpZ25hbCBhbmQgc2F2ZWQgdG8gUkNBUERBVCAoUmlzaW5nIGxhdGNoKSBhbmQgRkNBUERBVCAoRmFsbGluZyBsYXRjaCkuCisgICAgICogfFs4XSAgICAgfENBUElOVjAgICB8Q2FwdHVyZSBJbnZlcnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRW5hYmxlZC4gUmV2ZXJzZSB0aGUgaW5wdXQgc2lnbmFsIGZyb20gR1BJTy4KKyAgICAgKiB8WzldICAgICB8Q0FQSU5WMSAgIHxDYXB0dXJlIEludmVydGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgc291cmNlIGludmVydGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBFbmFibGVkLiBSZXZlcnNlIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBHUElPLgorICAgICAqIHxbMTBdICAgIHxDQVBJTlYyICAgfENhcHR1cmUgSW52ZXJ0ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgc291cmNlIGludmVydGVyIEVuYWJsZWQuIFJldmVyc2UgdGhlIGlucHV0IHNpZ25hbCBmcm9tIEdQSU8uCisgICAgICogfFsxMV0gICAgfENBUElOVjMgICB8Q2FwdHVyZSBJbnZlcnRlciBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRW5hYmxlZC4gUmV2ZXJzZSB0aGUgaW5wdXQgc2lnbmFsIGZyb20gR1BJTy4KKyAgICAgKiB8WzEyXSAgICB8Q0FQSU5WNCAgIHxDYXB0dXJlIEludmVydGVyIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgc291cmNlIGludmVydGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHNvdXJjZSBpbnZlcnRlciBFbmFibGVkLiBSZXZlcnNlIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBHUElPLgorICAgICAqIHxbMTNdICAgIHxDQVBJTlY1ICAgfENhcHR1cmUgSW52ZXJ0ZXIgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBzb3VyY2UgaW52ZXJ0ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgc291cmNlIGludmVydGVyIEVuYWJsZWQuIFJldmVyc2UgdGhlIGlucHV0IHNpZ25hbCBmcm9tIEdQSU8uCisgICAgICogfFsxNl0gICAgfFJDUkxERU4wICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMTddICAgIHxSQ1JMREVOMSAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8UkNSTERFTjIgIHxSaXNpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsxOV0gICAgfFJDUkxERU4zICB8UmlzaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjBdICAgIHxSQ1JMREVONCAgfFJpc2luZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSaXNpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRW5hYmxlZC4KKyAgICAgKiB8WzIxXSAgICB8UkNSTERFTjUgIHxSaXNpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlzaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJpc2luZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyNF0gICAgfEZDUkxERU4wICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjVdICAgIHxGQ1JMREVOMSAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRW5hYmxlZC4KKyAgICAgKiB8WzI2XSAgICB8RkNSTERFTjIgIHxGYWxsaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogfFsyN10gICAgfEZDUkxERU4zICB8RmFsbGluZyBDYXB0dXJlIFJlbG9hZCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMjhdICAgIHxGQ1JMREVONCAgfEZhbGxpbmcgQ2FwdHVyZSBSZWxvYWQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGYWxsaW5nIGNhcHR1cmUgcmVsb2FkIGNvdW50ZXIgRW5hYmxlZC4KKyAgICAgKiB8WzI5XSAgICB8RkNSTERFTjUgIHxGYWxsaW5nIENhcHR1cmUgUmVsb2FkIEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhbGxpbmcgY2FwdHVyZSByZWxvYWQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRmFsbGluZyBjYXB0dXJlIHJlbG9hZCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogQHZhciBFUFdNX1Q6OkNBUFNUUworICAgICAqIE9mZnNldDogMHgyMDggIEVQV00gQ2FwdHVyZSBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDUkxJRk9WMCAgfENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDUkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENSTElGLgorICAgICAqIHxbMV0gICAgIHxDUkxJRk9WMSAgfENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDUkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENSTElGLgorICAgICAqIHxbMl0gICAgIHxDUkxJRk9WMiAgfENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDUkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENSTElGLgorICAgICAqIHxbM10gICAgIHxDUkxJRk9WMyAgfENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDUkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENSTElGLgorICAgICAqIHxbNF0gICAgIHxDUkxJRk9WNCAgfENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDUkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENSTElGLgorICAgICAqIHxbNV0gICAgIHxDUkxJRk9WNSAgfENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiByaXNpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDUkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENSTElGLgorICAgICAqIHxbOF0gICAgIHxDRkxJRk9WMCAgfENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgZmFsbGluZyBsYXRjaCBoYXBwZW5lZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIENGTElGIGlzIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0ZMSUYuCisgICAgICogfFs5XSAgICAgfENGTElGT1YxICB8Q2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiBmYWxsaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0ZMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDRkxJRi4KKyAgICAgKiB8WzEwXSAgICB8Q0ZMSUZPVjIgIHxDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcgT3ZlcnJ1biBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIGlmIGZhbGxpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDRkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENGTElGLgorICAgICAqIHxbMTFdICAgIHxDRkxJRk9WMyAgfENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZyBPdmVycnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgZmFsbGluZyBsYXRjaCBoYXBwZW5lZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIENGTElGIGlzIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGNsZWFyIGNvcnJlc3BvbmRpbmcgQ0ZMSUYuCisgICAgICogfFsxMl0gICAgfENGTElGT1Y0ICB8Q2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnIE92ZXJydW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyBpZiBmYWxsaW5nIGxhdGNoIGhhcHBlbmVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQ0ZMSUYgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHVzZXIgY2xlYXIgY29ycmVzcG9uZGluZyBDRkxJRi4KKyAgICAgKiB8WzEzXSAgICB8Q0ZMSUZPVjUgIHxDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcgT3ZlcnJ1biBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaW5kaWNhdGVzIGlmIGZhbGxpbmcgbGF0Y2ggaGFwcGVuZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDRkxJRiBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBjbGVhciBjb3JyZXNwb25kaW5nIENGTElGLgorICAgICAqIEB2YXIgRVBXTV9UOjpQRE1BQ1RMCisgICAgICogT2Zmc2V0OiAweDIzQyAgRVBXTSBQRE1BIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDSEVOMF8xICAgfENoYW5uZWwgMC8xIFBETUEgRW5hYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoYW5uZWwgMC8xIFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwgMC8xIFBETUEgZnVuY3Rpb24gRW5hYmxlZCBmb3IgdGhlIGNoYW5uZWwgMC8xIGNhcHR1cmVkIGRhdGEgYW5kIHRyYW5zZmVyIHRvIG1lbW9yeS4KKyAgICAgKiB8WzI6MV0gICB8Q0FQTU9EMF8xIHxTZWxlY3QgRVBXTV9SQ0FQREFUMC8xIG9yIEVQV01fRkNBUERBVDAvMSB0byBEbyBQRE1BIFRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV01fUkNBUERBVDAvMSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV01fRkNBUERBVDAvMSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJvdGggRVBXTV9SQ0FQREFUMC8xIGFuZCBFUFdNX0ZDQVBEQVQwLzEgcmVnaXN0ZXJzLgorICAgICAqIHxbM10gICAgIHxDQVBPUkQwXzEgfENhcHR1cmUgQ2hhbm5lbCAwLzEgUmlzaW5nL0ZhbGxpbmcgT3JkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEVQV01fUkNBUERBVDAvMSBvciBFUFdNX0ZDQVBEQVQwLzEgcmVnaXN0ZXIgaXMgdGhlIGZpcnN0IGNhcHR1cmVkIGRhdGEgdHJhbnNmZXJyZWQgdG8gbWVtb3J5IHRocm91Z2ggUERNQSB3aGVuIENBUE1PRDBfMSBiaXRzIGFyZSBzZXQgdG8gPSAweDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVQV01fRkNBUERBVDAvMSByZWdpc3RlciBpcyB0aGUgZmlyc3QgY2FwdHVyZWQgZGF0YSB0byBtZW1vcnkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVQV01fUkNBUERBVDAvMSByZWdpc3RlciBpcyB0aGUgZmlyc3QgY2FwdHVyZWQgZGF0YSB0byBtZW1vcnkuCisgICAgICogfFs0XSAgICAgfENIU0VMMF8xICB8U2VsZWN0IENoYW5uZWwgMC8xIHRvIERvIFBETUEgVHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hhbm5lbDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwxLgorICAgICAqIHxbOF0gICAgIHxDSEVOMl8zICAgfENoYW5uZWwgMi8zIFBETUEgRW5hYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoYW5uZWwgMi8zIFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwgMi8zIFBETUEgZnVuY3Rpb24gRW5hYmxlZCBmb3IgdGhlIGNoYW5uZWwgMi8zIGNhcHR1cmVkIGRhdGEgYW5kIHRyYW5zZmVyIHRvIG1lbW9yeS4KKyAgICAgKiB8WzEwOjldICB8Q0FQTU9EMl8zIHxTZWxlY3QgRVBXTV9SQ0FQREFUMi8zIG9yIEVQV01fRkNBT0RBVDIvMyB0byBEbyBQRE1BIFRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVQV01fUkNBUERBVDIvMyByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEVQV01fRkNBUERBVDIvMyByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJvdGggRVBXTV9SQ0FQREFUMi8zIGFuZCBFUFdNX0ZDQVBEQVQyLzMgcmVnaXN0ZXJzLgorICAgICAqIHxbMTFdICAgIHxDQVBPUkQyXzMgfENhcHR1cmUgQ2hhbm5lbCAyLzMgUmlzaW5nL0ZhbGxpbmcgT3JkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEVQV01fUkNBUERBVDIvMyBvciBFUFdNX0ZDQVBEQVQyLzMgcmVnaXN0ZXIgaXMgdGhlIGZpcnN0IGNhcHR1cmVkIGRhdGEgdHJhbnNmZXJyZWQgdG8gbWVtb3J5IHRocm91Z2ggUERNQSB3aGVuIENBUE1PRDJfMyBiaXRzIGFyZSBzZXQgdG8gPTB4My4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTV9GQ0FQREFUMi8zIHJlZ2lzdGVyIGlzIHRoZSBmaXJzdCBjYXB0dXJlZCBkYXRhIHRvIG1lbW9yeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRVBXTV9SQ0FQREFUMi8zIHJlZ2lzdGVyIGlzIHRoZSBmaXJzdCBjYXB0dXJlZCBkYXRhIHRvIG1lbW9yeS4KKyAgICAgKiB8WzEyXSAgICB8Q0hTRUwyXzMgIHxTZWxlY3QgQ2hhbm5lbCAyLzMgdG8gRG8gUERNQSBUcmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGFubmVsMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbDMuCisgICAgICogfFsxNl0gICAgfENIRU40XzUgICB8Q2hhbm5lbCA0LzUgUERNQSBFbmFibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hhbm5lbCA0LzUgUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbCA0LzUgUERNQSBmdW5jdGlvbiBFbmFibGVkIGZvciB0aGUgY2hhbm5lbCA0LzUgY2FwdHVyZWQgZGF0YSBhbmQgdHJhbnNmZXIgdG8gbWVtb3J5LgorICAgICAqIHxbMTg6MTddIHxDQVBNT0Q0XzUgfFNlbGVjdCBFUFdNX1JDQVBEQVQ0LzUgb3IgRVBXTV9GQ0FQREFUNC81IHRvIERvIFBETUEgVHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRVBXTV9SQ0FQREFUNC81IHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gRVBXTV9GQ0FQREFUNC81IHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gQm90aCBFUFdNX1JDQVBEQVQ0LzUgYW5kIEVQV01fRkNBUERBVDQvNSByZWdpc3RlcnMuCisgICAgICogfFsxOV0gICAgfENBUE9SRDRfNSB8Q2FwdHVyZSBDaGFubmVsIDQvNSBSaXNpbmcvRmFsbGluZyBPcmRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgRVBXTV9SQ0FQREFUNC81IG9yIEVQV01fRkNBUERBVDQvNSByZWdpc3RlciBpcyB0aGUgZmlyc3QgY2FwdHVyZWQgZGF0YSB0cmFuc2ZlcnJlZCB0byBtZW1vcnkgdGhyb3VnaCBQRE1BIHdoZW4gQ0FQTU9ENF81IGJpdHMgPWFyZSBzZXQgdG8gMHgzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNX0ZDQVBEQVQ0LzUgcmVnaXN0ZXIgaXMgdGhlIGZpcnN0IGNhcHR1cmVkIGRhdGEgdG8gbWVtb3J5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNX1JDQVBEQVQ0LzUgcmVnaXN0ZXIgaXMgdGhlIGZpcnN0IGNhcHR1cmVkIGRhdGEgdG8gbWVtb3J5LgorICAgICAqIHxbMjBdICAgIHxDSFNFTDRfNSAgfFNlbGVjdCBDaGFubmVsIDQvNSB0byBEbyBQRE1BIFRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoYW5uZWw0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsNS4KKyAgICAgKiBAdmFyIEVQV01fVDo6UERNQUNBUFszXQorICAgICAqIE9mZnNldDogMHgyNDAgIEVQV00gQ2FwdHVyZSBDaGFubmVsIDAxIFBETUEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxDQVBCVUYgICAgfEVQV00gQ2FwdHVyZSBQRE1BIFJlZ2lzdGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBpcyB1c2UgYXMgYSBidWZmZXIgdG8gdHJhbnNmZXIgRVBXTSBjYXB0dXJlIHJpc2luZyBvciBmYWxsaW5nIGRhdGEgdG8gbWVtb3J5IGJ5IFBETUEuCisgICAgICogQHZhciBFUFdNX1Q6OkNBUElFTgorICAgICAqIE9mZnNldDogMHgyNTAgIEVQV00gQ2FwdHVyZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q0FQUklFTjAgIHxFUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENBUFJJRU4wIGJpdCBtdXN0IGJlIGRpc2FibGVkLgorICAgICAqIHxbMV0gICAgIHxDQVBSSUVOMSAgfEVQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgcmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0FQUklFTjEgYml0IG11c3QgYmUgZGlzYWJsZWQuCisgICAgICogfFsyXSAgICAgfENBUFJJRU4yICB8RVBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDQVBSSUVOMiBiaXQgbXVzdCBiZSBkaXNhYmxlZC4KKyAgICAgKiB8WzNdICAgICB8Q0FQUklFTjMgIHxFUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIHJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENBUFJJRU4zIGJpdCBtdXN0IGJlIGRpc2FibGVkLgorICAgICAqIHxbNF0gICAgIHxDQVBSSUVONCAgfEVQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgcmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBlZGdlIGxhdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0FQUklFTjQgYml0IG11c3QgYmUgZGlzYWJsZWQuCisgICAgICogfFs1XSAgICAgfENBUFJJRU41ICB8RVBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSByaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDQVBSSUVONSBiaXQgbXVzdCBiZSBkaXNhYmxlZC4KKyAgICAgKiB8WzhdICAgICB8Q0FQRklFTjAgIHxFUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENBUEZJRU4wIGJpdCBtdXN0IGJlIGRpc2FibGVkLgorICAgICAqIHxbOV0gICAgIHxDQVBGSUVOMSAgfEVQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0FQRklFTjEgYml0IG11c3QgYmUgZGlzYWJsZWQuCisgICAgICogfFsxMF0gICAgfENBUEZJRU4yICB8RVBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgZmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDQVBGSUVOMiBiaXQgbXVzdCBiZSBkaXNhYmxlZC4KKyAgICAgKiB8WzExXSAgICB8Q0FQRklFTjMgIHxFUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRW5hYmxlIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBmYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENBUEZJRU4zIGJpdCBtdXN0IGJlIGRpc2FibGVkLgorICAgICAqIHxbMTJdICAgIHxDQVBGSUVONCAgfEVQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBFbmFibGUgQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDYXB0dXJlIGZhbGxpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0FQRklFTjQgYml0IG11c3QgYmUgZGlzYWJsZWQuCisgICAgICogfFsxM10gICAgfENBUEZJRU41ICB8RVBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEVuYWJsZSBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgZmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDQVBGSUVONSBiaXQgbXVzdCBiZSBkaXNhYmxlZC4KKyAgICAgKiBAdmFyIEVQV01fVDo6Q0FQSUYKKyAgICAgKiBPZmZzZXQ6IDB4MjU0ICBFUFdNIENhcHR1cmUgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDUkxJRjAgICAgfEVQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENSTElGMCBiaXQgd2lsbCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIFBETUEgdHJhbnNmZXIgZGF0YS4KKyAgICAgKiB8WzFdICAgICB8Q1JMSUYxICAgIHxFUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDUkxJRjEgYml0IHdpbGwgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGRhdGEuCisgICAgICogfFsyXSAgICAgfENSTElGMiAgICB8RVBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ1JMSUYyIGJpdCB3aWxsIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgUERNQSB0cmFuc2ZlciBkYXRhLgorICAgICAqIHxbM10gICAgIHxDUkxJRjMgICAgfEVQV00gQ2FwdHVyZSBSaXNpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENSTElGMyBiaXQgd2lsbCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIFBETUEgdHJhbnNmZXIgZGF0YS4KKyAgICAgKiB8WzRdICAgICB8Q1JMSUY0ICAgIHxFUFdNIENhcHR1cmUgUmlzaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgcmlzaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDUkxJRjQgYml0IHdpbGwgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGRhdGEuCisgICAgICogfFs1XSAgICAgfENSTElGNSAgICB8RVBXTSBDYXB0dXJlIFJpc2luZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSByaXNpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIHJpc2luZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ1JMSUY1IGJpdCB3aWxsIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgUERNQSB0cmFuc2ZlciBkYXRhLgorICAgICAqIHxbOF0gICAgIHxDRkxJRjAgICAgfEVQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENGTElGMCBiaXQgd2lsbCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIFBETUEgdHJhbnNmZXIgZGF0YS4KKyAgICAgKiB8WzldICAgICB8Q0ZMSUYxICAgIHxFUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDRkxJRjEgYml0IHdpbGwgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGRhdGEuCisgICAgICogfFsxMF0gICAgfENGTElGMiAgICB8RVBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0ZMSUYyIGJpdCB3aWxsIGNsZWFyZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgUERNQSB0cmFuc2ZlciBkYXRhLgorICAgICAqIHxbMTFdICAgIHxDRkxJRjMgICAgfEVQV00gQ2FwdHVyZSBGYWxsaW5nIExhdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGluZyAxIHRvIGNsZWFyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIGZhbGxpbmcgbGF0Y2ggY29uZGl0aW9uIGhhcHBlbmVkLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIENhcHR1cmUgd2l0aCBQRE1BIG9wZXJhdGluZywgY29ycmVzcG9uZGluZyBjaGFubmVsIENGTElGMyBiaXQgd2lsbCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIFBETUEgdHJhbnNmZXIgZGF0YS4KKyAgICAgKiB8WzEyXSAgICB8Q0ZMSUY0ICAgIHxFUFdNIENhcHR1cmUgRmFsbGluZyBMYXRjaCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHdyaXRpbmcgMSB0byBjbGVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gY2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FwdHVyZSBmYWxsaW5nIGxhdGNoIGNvbmRpdGlvbiBoYXBwZW5lZCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBDYXB0dXJlIHdpdGggUERNQSBvcGVyYXRpbmcsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBDRkxJRjQgYml0IHdpbGwgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGRhdGEuCisgICAgICogfFsxM10gICAgfENGTElGNSAgICB8RVBXTSBDYXB0dXJlIEZhbGxpbmcgTGF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB3cml0aW5nIDEgdG8gY2xlYXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGNhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgZmFsbGluZyBsYXRjaCBjb25kaXRpb24gaGFwcGVuZWQsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gQ2FwdHVyZSB3aXRoIFBETUEgb3BlcmF0aW5nLCBDQVBJRiBjb3JyZXNwb25kaW5nIGNoYW5uZWwgQ0ZMSUYgd2lsbCBjbGVhcmVkIGJ5IGhhcmR3YXJlIGFmdGVyIFBETUEgdHJhbnNmZXIgZGF0YS4KKyAgICAgKiBAdmFyIEVQV01fVDo6UEJVRls2XQorICAgICAqIE9mZnNldDogMHgzMDQgIEVQV00gUEVSSU9EMH41IEJ1ZmZlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFBCVUYgICAgICB8RVBXTSBQZXJpb2QgUmVnaXN0ZXIgQnVmZmVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlZCBhcyBQRVJJT0QgYWN0aXZlIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRVBXTV9UOjpDTVBCVUZbNl0KKyAgICAgKiBPZmZzZXQ6IDB4MzFDICBFUFdNIENNUERBVDB+NSBCdWZmZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxDTVBCVUYgICAgfEVQV00gQ29tcGFyYXRvciBSZWdpc3RlciBCdWZmZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VkIGFzIENNUCBhY3RpdmUgcmVnaXN0ZXIuCisgICAgICogQHZhciBFUFdNX1Q6OkNQU0NCVUZbM10KKyAgICAgKiBPZmZzZXQ6IDB4MzM0ICBFUFdNIENMS1BTQzBfMS8yXzMvNF81IEJ1ZmZlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMTowXSAgfENQU0NCVUYgICB8RVBXTSBDb3VudGVyIENsb2NrIFByZXNjYWxlIEJ1ZmZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZSBhcyBFUFdNIGNvdW50ZXIgY2xvY2sgcHJlc2NhbGUgYWN0aXZlIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRVBXTV9UOjpGVENCVUZbM10KKyAgICAgKiBPZmZzZXQ6IDB4MzQwICBFUFdNIEZUQ01QREFUMF8xLzJfMy80XzUgQnVmZmVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8RlRDTVBCVUYgIHxFUFdNIEZUQ01QREFUIEJ1ZmZlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZWQgYXMgRlRDTVBEQVQgYWN0aXZlIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRVBXTV9UOjpGVENJCisgICAgICogT2Zmc2V0OiAweDM0QyAgRVBXTSBGVENNUERBVCBJbmRpY2F0b3IgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxGVENNVTAgICAgfEVQV00gRlRDTVBEQVQgVXAgSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdG9yIHdpbGwgYmUgc2V0IHRvIGhpZ2ggd2hlbiBGVENNUERBVG4gZXF1YWwgdG8gQ05UbiBhbmQgRElSRj0xLCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzFdICAgICB8RlRDTVUyICAgIHxFUFdNIEZUQ01QREFUIFVwIEluZGljYXRvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRvciB3aWxsIGJlIHNldCB0byBoaWdoIHdoZW4gRlRDTVBEQVRuIGVxdWFsIHRvIENOVG4gYW5kIERJUkY9MSwgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsyXSAgICAgfEZUQ01VNCAgICB8RVBXTSBGVENNUERBVCBVcCBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0b3Igd2lsbCBiZSBzZXQgdG8gaGlnaCB3aGVuIEZUQ01QREFUbiBlcXVhbCB0byBDTlRuIGFuZCBESVJGPTEsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbOF0gICAgIHxGVENNRDAgICAgfEVQV00gRlRDTVBEQVQgRG93biBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0b3Igd2lsbCBiZSBzZXQgdG8gaGlnaCB3aGVuIEZUQ01QREFUbiBlcXVhbCB0byBDTlRuIGFuZCBESVJGPTAsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbOV0gICAgIHxGVENNRDIgICAgfEVQV00gRlRDTVBEQVQgRG93biBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0b3Igd2lsbCBiZSBzZXQgdG8gaGlnaCB3aGVuIEZUQ01QREFUbiBlcXVhbCB0byBDTlRuIGFuZCBESVJGPTAsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbMTBdICAgIHxGVENNRDQgICAgfEVQV00gRlRDTVBEQVQgRG93biBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0b3Igd2lsbCBiZSBzZXQgdG8gaGlnaCB3aGVuIEZUQ01QREFUbiBlcXVhbCB0byBDTlRuIGFuZCBESVJGPTAsIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMMDsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIEVQV00gQ29udHJvbCBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEwxOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gRVBXTSBDb250cm9sIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNZTkM7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBFUFdNIFN5bmNocm9uaXphdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1dTWU5DOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIEVQV00gU29mdHdhcmUgQ29udHJvbCBTeW5jaHJvbml6YXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtTUkM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gRVBXTSBDbG9jayBTb3VyY2UgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS1BTQ1szXTsgICAgICAgICAgICAgLyohPCBbMHgwMDE0fjB4MDAxY10gRVBXTSBDbG9jayBQcmVzY2FsZSBSZWdpc3RlciAwXzEsMl8zLDRfNSAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ05URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIEVQV00gQ291bnRlciBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTlRDTFI7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyNF0gRVBXTSBDbGVhciBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IExPQUQ7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDI4XSBFUFdNIExvYWQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMV07CisgICAgX19JTyB1aW50MzJfdCBQRVJJT0RbNl07ICAgICAgICAgICAgIC8qITwgWzB4MDAzMH4weDAwNDRdICBFUFdNIFBlcmlvZCBSZWdpc3RlciAwfjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzJdOworICAgIF9fSU8gdWludDMyX3QgQ01QREFUWzZdOyAgICAgICAgICAgICAvKiE8IFsweDAwNTB+MHgwMDY0XSAgRVBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyIDB+NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMlsyXTsKKyAgICBfX0lPIHVpbnQzMl90IERUQ1RMWzNdOyAgICAgICAgICAgICAgLyohPCBbMHgwMDcwfjB4MDA3OF0gRVBXTSBEZWFkLVRpbWUgQ29udHJvbCBSZWdpc3RlciAwXzEsMl8zLDRfNSAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTNbMV07CisgICAgX19JTyB1aW50MzJfdCBQSFNbM107ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA4MH4weDAwODhdIEVQV00gQ291bnRlciBQaGFzZSBSZWdpc3RlciAwXzEsMl8zLDRfNSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU0WzFdOworICAgIF9fSSAgdWludDMyX3QgQ05UWzZdOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwOTB+MHgwMEE0ICBFUFdNIENvdW50ZXIgUmVnaXN0ZXIgMH41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNVsyXTsKKyAgICBfX0lPIHVpbnQzMl90IFdHQ1RMMDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGIwXSBFUFdNIEdlbmVyYXRpb24gUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgV0dDVEwxOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwYjRdIEVQV00gR2VuZXJhdGlvbiBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNU0tFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDBiOF0gRVBXTSBNYXNrIEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE1TSzsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMGJjXSBFUFdNIE1hc2sgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQk5GOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwYzBdIEVQV00gQnJha2UgTm9pc2UgRmlsdGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBGQUlMQlJLOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBjNF0gRVBXTSBTeXN0ZW0gRmFpbCBCcmFrZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJSS0NUTFszXTsgICAgICAgICAgICAgLyohPCBbMHgwMGM4fjB4MDBkMF0gRVBXTSBCcmFrZSBFZGdlIERldGVjdCBDb250cm9sIFJlZ2lzdGVyIDBfMSwyXzMsNF81ICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUE9MQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwZDRdIEVQV00gUGluIFBvbGFyIEludmVyc2UgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQT0VOOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDBkOF0gRVBXTSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFNXQlJLOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMGRjXSBFUFdNIFNvZnR3YXJlIEJyYWtlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU4wOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwZTBdIEVQV00gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRFTjE7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDBlNF0gRVBXTSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzA7ICAgICAgICAgICAgICAgLyohPCBbMHgwMGU4XSBFUFdNIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5UU1RTMTsgICAgICAgICAgICAgICAvKiE8IFsweDAwZWNdIEVQV00gSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNlsxXTsKKyAgICBfX0lPIHVpbnQzMl90IERBQ1RSR0VOOyAgICAgICAgICAgICAgLyohPCBbMHgwMGY0XSBFUFdNIFRyaWdnZXIgREFDIEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRUFEQ1RTMDsgICAgICAgICAgICAgICAvKiE8IFsweDAwZjhdIEVQV00gVHJpZ2dlciBFQURDIFNvdXJjZSBTZWxlY3QgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBFQURDVFMxOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBmY10gRVBXTSBUcmlnZ2VyIEVBREMgU291cmNlIFNlbGVjdCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEZUQ01QREFUWzNdOyAgICAgICAgICAgLyohPCBbMHgwMTAwfjB4MTA4XSBFUFdNIEZyZWUgVHJpZ2dlciBDb21wYXJlIFJlZ2lzdGVyIDBfMSwyXzMsNF81ICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTdbMV07CisgICAgX19JTyB1aW50MzJfdCBTU0NUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDExMF0gRVBXTSBTeW5jaHJvbm91cyBTdGFydCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFNTVFJHOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMTE0XSBFUFdNIFN5bmNocm9ub3VzIFN0YXJ0IFRyaWdnZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTEVCQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAxMThdIEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBMRUJDTlQ7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDExY10gRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMTIwXSBFUFdNIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRThbM107CisgICAgX19JTyB1aW50MzJfdCBJRkFbNl07ICAgICAgICAgICAgICAgIC8qITwgWzB4MDEzMH4weDE0NF0gRVBXTSBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBSZWdpc3RlciAwfjUgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU5WzJdOworICAgIF9fSU8gdWludDMyX3QgQUlOVFNUUzsgICAgICAgICAgICAgICAvKiE8IFsweDAxNTBdIEVQV00gQWNjdW11bGF0b3IgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBSU5URU47ICAgICAgICAgICAgICAgIC8qITwgWzB4MDE1NF0gRVBXTSBBY2N1bXVsYXRvciBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFQRE1BQ1RMOyAgICAgICAgICAgICAgLyohPCBbMHgwMTU4XSBFUFdNIEFjY3VtdWxhdG9yIFBETUEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTEwWzQxXTsKKyAgICBfX0lPIHVpbnQzMl90IENBUElORU47ICAgICAgICAgICAgICAgLyohPCBbMHgwMjAwXSBFUFdNIENhcHR1cmUgSW5wdXQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0FQQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAyMDRdIEVQV00gQ2FwdHVyZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBDQVBTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDIwOF0gRVBXTSBDYXB0dXJlIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFQ0FQREFUX1QgQ0FQREFUWzZdOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDIwY34weDAyMzhdIEVQV00gUmlzaW5nIGFuZCBGYWxsaW5nIENhcHR1cmUgRGF0YSBSZWdpc3RlciAwfjUgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUERNQUNUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAyM2NdIEVQV00gUERNQSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBQRE1BQ0FQWzNdOyAgICAgICAgICAgIC8qITwgWzB4MDI0MH4weDI0OF0gRVBXTSBDYXB0dXJlIENoYW5uZWwgMF8xLDJfMyw0XzUgUERNQSBSZWdpc3RlciAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxMVsxXTsKKyAgICBfX0lPIHVpbnQzMl90IENBUElFTjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMjUwXSBFUFdNIENhcHR1cmUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0FQSUY7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAyNTRdIEVQV00gQ2FwdHVyZSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMTJbNDNdOworICAgIF9fSSAgdWludDMyX3QgUEJVRls2XTsgICAgICAgICAgICAgICAvKiE8IFsweDAzMDR+MHgwMzE4ICBFUFdNIFBFUklPRDB+NSBCdWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBDTVBCVUZbNl07ICAgICAgICAgICAgIC8qITwgWzB4MDMxQ34weDAzMzAgIEVQV00gQ01QREFUMH41IEJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IENQU0NCVUZbM107ICAgICAgICAgICAgLyohPCBbMHgwMzM0fjB4MzNjXSBFUFdNIENMS1BTQzBfMSwyXzMsNF81IEJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgRlRDQlVGWzNdOyAgICAgICAgICAgICAvKiE8IFsweDAzNDB+MHgzNDhdIEVQV00gRlRDTVBEQVQwXzEsMl8zLDRfNSBCdWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBGVENJOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDM0Y10gRVBXTSBGVENNUERBVCBJbmRpY2F0b3IgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBFUFdNX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIEVQV01fQ09OU1QgRVBXTSBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBFUFdNIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgRVBXTV9DVEwwX0NUUkxEMF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IENUUkxEMCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRVBXTV9DVEwwX0NUUkxEMF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBFUFdNX0NUTDBfQ1RSTEQwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBFUFdNX1Q6OkNUTDA6IENUUkxEMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQxX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQxIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBFUFdNX0NUTDBfQ1RSTEQxX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEVQV01fQ1RMMF9DVFJMRDFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQxIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDJfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBDVFJMRDIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDJfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0NUUkxEMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQyIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDNfUG9zICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBDVFJMRDMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDNfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0NUUkxEM19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQzIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDRfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBDVFJMRDQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0NUUkxENF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQ0IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDVfUG9zICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBDVFJMRDUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9DVFJMRDVfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0NUUkxENV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogQ1RSTEQ1IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVOMF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBXSU5MREVOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVOMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX1dJTkxERU4wX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVOMV9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBXSU5MREVOMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVOMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX1dJTkxERU4xX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVOMl9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBXSU5MREVOMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVOMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX1dJTkxERU4yX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVOM19Qb3MgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBXSU5MREVOMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVOM19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX1dJTkxERU4zX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVONF9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBXSU5MREVONCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVONF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX1dJTkxERU40X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVONV9Qb3MgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBXSU5MREVONSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9XSU5MREVONV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX1dJTkxERU41X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogV0lOTERFTjUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVOMF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBJTU1MREVOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVOMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0lNTUxERU4wX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVOMV9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBJTU1MREVOMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVOMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0lNTUxERU4xX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVOMl9Qb3MgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBJTU1MREVOMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVOMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0lNTUxERU4yX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVOM19Qb3MgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBJTU1MREVOMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVOM19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0lNTUxERU4zX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVONF9Qb3MgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBJTU1MREVONCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVONF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0lNTUxERU40X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVONV9Qb3MgICAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBJTU1MREVONSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9JTU1MREVONV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0lNTUxERU41X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogSU1NTERFTjUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9HUk9VUEVOX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBHUk9VUEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9HUk9VUEVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0dST1VQRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogR1JPVVBFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9EQkdIQUxUX1BvcyAgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBEQkdIQUxUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9EQkdIQUxUX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0RCR0hBTFRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogREJHSEFMVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMF9EQkdUUklPRkZfUG9zICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwwOiBEQkdUUklPRkYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMF9EQkdUUklPRkZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwwX0RCR1RSSU9GRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMDogREJHVFJJT0ZGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRUWVBFMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFMF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9DVEwxX0NOVFRZUEUwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFMV9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRUWVBFMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFMV9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9DVEwxX0NOVFRZUEUxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFMl9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRUWVBFMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFMl9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9DVEwxX0NOVFRZUEUyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFM19Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRUWVBFMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFM19Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9DVEwxX0NOVFRZUEUzX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFNF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRUWVBFNCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFNF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9DVEwxX0NOVFRZUEU0X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFNV9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRUWVBFNSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRUWVBFNV9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9DVEwxX0NOVFRZUEU1X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UVFlQRTUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFMF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRNT0RFMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwxX0NOVE1PREUwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFMV9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRNT0RFMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwxX0NOVE1PREUxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFMl9Qb3MgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRNT0RFMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwxX0NOVE1PREUyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFM19Qb3MgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRNT0RFMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFM19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwxX0NOVE1PREUzX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFNF9Qb3MgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRNT0RFNCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFNF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwxX0NOVE1PREU0X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFNV9Qb3MgICAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBDTlRNT0RFNSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9DTlRNT0RFNV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwxX0NOVE1PREU1X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogQ05UTU9ERTUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9PVVRNT0RFMF9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBPVVRNT0RFMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9PVVRNT0RFMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwxX09VVE1PREUwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogT1VUTU9ERTAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9PVVRNT0RFMl9Qb3MgICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBPVVRNT0RFMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9PVVRNT0RFMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwxX09VVE1PREUyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogT1VUTU9ERTIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1RMMV9PVVRNT0RFNF9Qb3MgICAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDVEwxOiBPVVRNT0RFNCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ1RMMV9PVVRNT0RFNF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DVEwxX09VVE1PREU0X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1RMMTogT1VUTU9ERTQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19QSFNFTjBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBQSFNFTjAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19QSFNFTjBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TWU5DX1BIU0VOMF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRU4wIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19QSFNFTjJfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBQSFNFTjIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19QSFNFTjJfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TWU5DX1BIU0VOMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRU4yIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19QSFNFTjRfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBQSFNFTjQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19QSFNFTjRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TWU5DX1BIU0VONF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRU40IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19TSU5TUkMwX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBTSU5TUkMwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19TSU5TUkMwX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9TWU5DX1NJTlNSQzBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0lOU1JDMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19TSU5TUkMyX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBTSU5TUkMyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19TSU5TUkMyX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9TWU5DX1NJTlNSQzJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0lOU1JDMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19TSU5TUkM0X1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBTSU5TUkM0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19TSU5TUkM0X01zayAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9TWU5DX1NJTlNSQzRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0lOU1JDNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19TTkZMVEVOX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBTTkZMVEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19TTkZMVEVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TWU5DX1NORkxURU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU05GTFRFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19TRkxUQ1NFTF9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBTRkxUQ1NFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19TRkxUQ1NFTF9Nc2sgICAgICAgICAgICAoMHg3dWwgPDwgRVBXTV9TWU5DX1NGTFRDU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0ZMVENTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19TRkxUQ05UX1BvcyAgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBTRkxUQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19TRkxUQ05UX01zayAgICAgICAgICAgICAoMHg3dWwgPDwgRVBXTV9TWU5DX1NGTFRDTlRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0ZMVENOVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19TSU5QSU5WX1BvcyAgICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBTSU5QSU5WIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19TSU5QSU5WX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TWU5DX1NJTlBJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogU0lOUElOViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19QSFNESVIwX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBQSFNESVIwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19QSFNESVIwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TWU5DX1BIU0RJUjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRElSMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19QSFNESVIyX1BvcyAgICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBQSFNESVIyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19QSFNESVIyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TWU5DX1BIU0RJUjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRElSMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1lOQ19QSFNESVI0X1BvcyAgICAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTWU5DOiBQSFNESVI0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1lOQ19QSFNESVI0X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TWU5DX1BIU0RJUjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1lOQzogUEhTRElSNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1dTWU5DX1NXU1lOQzBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTV1NZTkM6IFNXU1lOQzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1dTWU5DX1NXU1lOQzBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TV1NZTkNfU1dTWU5DMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dTWU5DOiBTV1NZTkMwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1dTWU5DX1NXU1lOQzJfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTV1NZTkM6IFNXU1lOQzIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1dTWU5DX1NXU1lOQzJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TV1NZTkNfU1dTWU5DMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dTWU5DOiBTV1NZTkMyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1dTWU5DX1NXU1lOQzRfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTV1NZTkM6IFNXU1lOQzQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1dTWU5DX1NXU1lOQzRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TV1NZTkNfU1dTWU5DNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dTWU5DOiBTV1NZTkM0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0xLU1JDX0VDTEtTUkMwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTEtTUkM6IEVDTEtTUkMwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0xLU1JDX0VDTEtTUkMwX01zayAgICAgICAgICAoMHg3dWwgPDwgRVBXTV9DTEtTUkNfRUNMS1NSQzBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLU1JDOiBFQ0xLU1JDMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0xLU1JDX0VDTEtTUkMyX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTEtTUkM6IEVDTEtTUkMyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0xLU1JDX0VDTEtTUkMyX01zayAgICAgICAgICAoMHg3dWwgPDwgRVBXTV9DTEtTUkNfRUNMS1NSQzJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLU1JDOiBFQ0xLU1JDMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0xLU1JDX0VDTEtTUkM0X1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTEtTUkM6IEVDTEtTUkM0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0xLU1JDX0VDTEtTUkM0X01zayAgICAgICAgICAoMHg3dWwgPDwgRVBXTV9DTEtTUkNfRUNMS1NSQzRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLU1JDOiBFQ0xLU1JDNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0xLUFNDMF8xX0NMS1BTQ19Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTEtQU0MwXzE6IENMS1BTQyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fQ0xLUFNDMF8xX0NMS1BTQ19Nc2sgICAgICAgICAoMHhmZmZ1bCA8PCBFUFdNX0NMS1BTQzBfMV9DTEtQU0NfUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLUFNDMF8xOiBDTEtQU0MgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0xLUFNDMl8zX0NMS1BTQ19Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTEtQU0MyXzM6IENMS1BTQyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fQ0xLUFNDMl8zX0NMS1BTQ19Nc2sgICAgICAgICAoMHhmZmZ1bCA8PCBFUFdNX0NMS1BTQzJfM19DTEtQU0NfUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLUFNDMl8zOiBDTEtQU0MgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0xLUFNDNF81X0NMS1BTQ19Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTEtQU0M0XzU6IENMS1BTQyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fQ0xLUFNDNF81X0NMS1BTQ19Nc2sgICAgICAgICAoMHhmZmZ1bCA8PCBFUFdNX0NMS1BTQzRfNV9DTEtQU0NfUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0xLUFNDNF81OiBDTEtQU0MgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU4wX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRFTjogQ05URU4wIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU4wX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRFTl9DTlRFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVOMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU4xX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRFTjogQ05URU4xIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU4xX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRFTl9DTlRFTjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVOMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU4yX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRFTjogQ05URU4yIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU4yX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRFTl9DTlRFTjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVOMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU4zX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRFTjogQ05URU4zIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU4zX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRFTl9DTlRFTjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVOMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU40X1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRFTjogQ05URU40IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU40X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRFTl9DTlRFTjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVONCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU41X1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRFTjogQ05URU41IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05URU5fQ05URU41X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRFTl9DTlRFTjVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05URU46IENOVEVONSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRDTFI6IENOVENMUjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRDTFJfQ05UQ0xSMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFIwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRDTFI6IENOVENMUjEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRDTFJfQ05UQ0xSMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFIxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRDTFI6IENOVENMUjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRDTFJfQ05UQ0xSMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFIyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRDTFI6IENOVENMUjMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRDTFJfQ05UQ0xSM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFIzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRDTFI6IENOVENMUjQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRDTFJfQ05UQ0xSNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFI0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlRDTFI6IENOVENMUjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UQ0xSX0NOVENMUjVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlRDTFJfQ05UQ0xSNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UQ0xSOiBDTlRDTFI1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTE9BRF9MT0FEMF9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMT0FEOiBMT0FEMCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTE9BRF9MT0FEMF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MT0FEX0xPQUQwX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDAgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTE9BRF9MT0FEMV9Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMT0FEOiBMT0FEMSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTE9BRF9MT0FEMV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MT0FEX0xPQUQxX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDEgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTE9BRF9MT0FEMl9Qb3MgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMT0FEOiBMT0FEMiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTE9BRF9MT0FEMl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MT0FEX0xPQUQyX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTE9BRF9MT0FEM19Qb3MgICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMT0FEOiBMT0FEMyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTE9BRF9MT0FEM19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MT0FEX0xPQUQzX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTE9BRF9MT0FENF9Qb3MgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMT0FEOiBMT0FENCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTE9BRF9MT0FENF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MT0FEX0xPQUQ0X1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTE9BRF9MT0FENV9Qb3MgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMT0FEOiBMT0FENSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTE9BRF9MT0FENV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MT0FEX0xPQUQ1X1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TE9BRDogTE9BRDUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEVSSU9EMF9QRVJJT0RfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRVJJT0QwOiBQRVJJT0QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fUEVSSU9EMF9QRVJJT0RfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QRVJJT0QwX1BFUklPRF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9EMDogUEVSSU9EIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEVSSU9EMV9QRVJJT0RfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRVJJT0QxOiBQRVJJT0QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fUEVSSU9EMV9QRVJJT0RfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QRVJJT0QxX1BFUklPRF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9EMTogUEVSSU9EIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEVSSU9EMl9QRVJJT0RfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRVJJT0QyOiBQRVJJT0QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fUEVSSU9EMl9QRVJJT0RfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QRVJJT0QyX1BFUklPRF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9EMjogUEVSSU9EIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEVSSU9EM19QRVJJT0RfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRVJJT0QzOiBQRVJJT0QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fUEVSSU9EM19QRVJJT0RfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QRVJJT0QzX1BFUklPRF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9EMzogUEVSSU9EIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEVSSU9ENF9QRVJJT0RfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRVJJT0Q0OiBQRVJJT0QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fUEVSSU9ENF9QRVJJT0RfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QRVJJT0Q0X1BFUklPRF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9ENDogUEVSSU9EIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEVSSU9ENV9QRVJJT0RfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRVJJT0Q1OiBQRVJJT0QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fUEVSSU9ENV9QRVJJT0RfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QRVJJT0Q1X1BFUklPRF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEVSSU9ENTogUEVSSU9EIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QREFUMF9DTVBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBEQVQwOiBDTVAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QREFUMF9DTVBfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBEQVQwX0NNUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUMDogQ01QIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QREFUMV9DTVBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBEQVQxOiBDTVAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QREFUMV9DTVBfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBEQVQxX0NNUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUMTogQ01QIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QREFUMl9DTVBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBEQVQyOiBDTVAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QREFUMl9DTVBfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBEQVQyX0NNUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUMjogQ01QIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QREFUM19DTVBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBEQVQzOiBDTVAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QREFUM19DTVBfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBEQVQzX0NNUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUMzogQ01QIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QREFUNF9DTVBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBEQVQ0OiBDTVAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QREFUNF9DTVBfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBEQVQ0X0NNUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUNDogQ01QIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QREFUNV9DTVBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBEQVQ1OiBDTVAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QREFUNV9DTVBfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBEQVQ1X0NNUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QREFUNTogQ01QIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRFRDVEwwXzFfRFRDTlRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEVENUTDBfMTogRFRDTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fRFRDVEwwXzFfRFRDTlRfTXNrICAgICAgICAgICAoMHhmZmZ1bCA8PCBFUFdNX0RUQ1RMMF8xX0RUQ05UX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwwXzE6IERUQ05UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRFRDVEwwXzFfRFRFTl9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEVENUTDBfMTogRFRFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fRFRDVEwwXzFfRFRFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EVENUTDBfMV9EVEVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwwXzE6IERURU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRFRDVEwwXzFfRFRDS1NFTF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEVENUTDBfMTogRFRDS1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRFRDVEwwXzFfRFRDS1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EVENUTDBfMV9EVENLU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwwXzE6IERUQ0tTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRFRDVEwyXzNfRFRDTlRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEVENUTDJfMzogRFRDTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fRFRDVEwyXzNfRFRDTlRfTXNrICAgICAgICAgICAoMHhmZmZ1bCA8PCBFUFdNX0RUQ1RMMl8zX0RUQ05UX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwyXzM6IERUQ05UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRFRDVEwyXzNfRFRFTl9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEVENUTDJfMzogRFRFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fRFRDVEwyXzNfRFRFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EVENUTDJfM19EVEVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwyXzM6IERURU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRFRDVEwyXzNfRFRDS1NFTF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEVENUTDJfMzogRFRDS1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRFRDVEwyXzNfRFRDS1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EVENUTDJfM19EVENLU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEwyXzM6IERUQ0tTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRFRDVEw0XzVfRFRDTlRfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEVENUTDRfNTogRFRDTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fRFRDVEw0XzVfRFRDTlRfTXNrICAgICAgICAgICAoMHhmZmZ1bCA8PCBFUFdNX0RUQ1RMNF81X0RUQ05UX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEw0XzU6IERUQ05UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRFRDVEw0XzVfRFRFTl9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEVENUTDRfNTogRFRFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fRFRDVEw0XzVfRFRFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EVENUTDRfNV9EVEVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEw0XzU6IERURU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRFRDVEw0XzVfRFRDS1NFTF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEVENUTDRfNTogRFRDS1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRFRDVEw0XzVfRFRDS1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EVENUTDRfNV9EVENLU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RFRDVEw0XzU6IERUQ0tTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEhTMF8xX1BIU19Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQSFMwXzE6IFBIUyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUEhTMF8xX1BIU19Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QSFMwXzFfUEhTX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEhTMF8xOiBQSFMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEhTMl8zX1BIU19Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQSFMyXzM6IFBIUyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUEhTMl8zX1BIU19Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QSFMyXzNfUEhTX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEhTMl8zOiBQSFMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEhTNF81X1BIU19Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQSFM0XzU6IFBIUyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUEhTNF81X1BIU19Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QSFM0XzVfUEhTX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEhTNF81OiBQSFMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UMF9DTlRfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQwOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UMF9DTlRfTXNrICAgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTlQwX0NOVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMDogQ05UIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UMF9ESVJGX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQwOiBESVJGIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UMF9ESVJGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlQwX0RJUkZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMDogRElSRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UMV9DTlRfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQxOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UMV9DTlRfTXNrICAgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTlQxX0NOVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMTogQ05UIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UMV9ESVJGX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQxOiBESVJGIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UMV9ESVJGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlQxX0RJUkZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMTogRElSRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UMl9DTlRfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQyOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UMl9DTlRfTXNrICAgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTlQyX0NOVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMjogQ05UIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UMl9ESVJGX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQyOiBESVJGIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UMl9ESVJGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlQyX0RJUkZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMjogRElSRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UM19DTlRfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQzOiBDTlQgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UM19DTlRfTXNrICAgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTlQzX0NOVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMzogQ05UIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UM19ESVJGX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQzOiBESVJGIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UM19ESVJGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlQzX0RJUkZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UMzogRElSRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UNF9DTlRfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQ0OiBDTlQgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UNF9DTlRfTXNrICAgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTlQ0X0NOVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UNDogQ05UIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UNF9ESVJGX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQ0OiBESVJGIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UNF9ESVJGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlQ0X0RJUkZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UNDogRElSRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UNV9DTlRfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQ1OiBDTlQgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UNV9DTlRfTXNrICAgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTlQ1X0NOVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UNTogQ05UIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ05UNV9ESVJGX1BvcyAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTlQ1OiBESVJGIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ05UNV9ESVJGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DTlQ1X0RJUkZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q05UNTogRElSRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFpQQ1RMMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMMF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfWlBDVEwwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMMV9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFpQQ1RMMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMMV9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfWlBDVEwxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMMl9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFpQQ1RMMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMMl9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfWlBDVEwyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMM19Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFpQQ1RMMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMM19Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfWlBDVEwzX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMNF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFpQQ1RMNCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMNF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfWlBDVEw0X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMNV9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFpQQ1RMNSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1pQQ1RMNV9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfWlBDVEw1X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBaUENUTDUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEwwX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFBSRFBDVEwwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEwwX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfUFJEUENUTDBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEwxX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFBSRFBDVEwxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEwxX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfUFJEUENUTDFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEwyX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFBSRFBDVEwyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEwyX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfUFJEUENUTDJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEwzX1BvcyAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFBSRFBDVEwzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEwzX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfUFJEUENUTDNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEw0X1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFBSRFBDVEw0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEw0X01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfUFJEUENUTDRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEw1X1BvcyAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDA6IFBSRFBDVEw1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwwX1BSRFBDVEw1X01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDBfUFJEUENUTDVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwwOiBQUkRQQ1RMNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEwwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUFVDVEwwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEwwX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QVUNUTDBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEwxX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUFVDVEwxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEwxX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QVUNUTDFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEwyX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUFVDVEwyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEwyX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QVUNUTDJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEwzX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUFVDVEwzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEwzX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QVUNUTDNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEw0X1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUFVDVEw0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEw0X01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QVUNUTDRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEw1X1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUFVDVEw1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUFVDVEw1X01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QVUNUTDVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBVQ1RMNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEwwX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUERDVEwwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEwwX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QRENUTDBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEwxX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUERDVEwxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEwxX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QRENUTDFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEwyX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUERDVEwyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEwyX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QRENUTDJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEwzX1BvcyAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUERDVEwzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEwzX01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QRENUTDNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEw0X1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUERDVEw0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEw0X01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QRENUTDRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEw1X1BvcyAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpXR0NUTDE6IENNUERDVEw1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fV0dDVEwxX0NNUERDVEw1X01zayAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9XR0NUTDFfQ01QRENUTDVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6V0dDVEwxOiBDTVBEQ1RMNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU4wX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0tFTjogTVNLRU4wIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU4wX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tFTl9NU0tFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VOMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU4xX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0tFTjogTVNLRU4xIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU4xX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tFTl9NU0tFTjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VOMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU4yX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0tFTjogTVNLRU4yIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU4yX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tFTl9NU0tFTjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VOMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU4zX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0tFTjogTVNLRU4zIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU4zX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tFTl9NU0tFTjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VOMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU40X1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0tFTjogTVNLRU40IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU40X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tFTl9NU0tFTjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VONCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU41X1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0tFTjogTVNLRU41IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLRU5fTVNLRU41X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tFTl9NU0tFTjVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLRU46IE1TS0VONSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0s6IE1TS0RBVDAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tfTVNLREFUMF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQwIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDFfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0s6IE1TS0RBVDEgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDFfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tfTVNLREFUMV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQxIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDJfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0s6IE1TS0RBVDIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDJfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tfTVNLREFUMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQyIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDNfUG9zICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0s6IE1TS0RBVDMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDNfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tfTVNLREFUM19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQzIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDRfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0s6IE1TS0RBVDQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tfTVNLREFUNF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQ0IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDVfUG9zICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpNU0s6IE1TS0RBVDUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTVNLX01TS0RBVDVfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9NU0tfTVNLREFUNV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TVNLOiBNU0tEQVQ1IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JSSzBORkVOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJSSzBORkVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JSSzBORkVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9CTkZfQlJLME5GRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUkswTkZFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JSSzBORlNFTF9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJSSzBORlNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JSSzBORlNFTF9Nc2sgICAgICAgICAgICAoMHg3dWwgPDwgRVBXTV9CTkZfQlJLME5GU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUkswTkZTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JSSzBGQ05UX1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJSSzBGQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JSSzBGQ05UX01zayAgICAgICAgICAgICAoMHg3dWwgPDwgRVBXTV9CTkZfQlJLMEZDTlRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUkswRkNOVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JSSzBQSU5WX1BvcyAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJSSzBQSU5WIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JSSzBQSU5WX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9CTkZfQlJLMFBJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUkswUElOViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JSSzFORkVOX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJSSzFORkVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JSSzFORkVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9CTkZfQlJLMU5GRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUksxTkZFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JSSzFORlNFTF9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJSSzFORlNFTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JSSzFORlNFTF9Nc2sgICAgICAgICAgICAoMHg3dWwgPDwgRVBXTV9CTkZfQlJLMU5GU0VMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUksxTkZTRUwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JSSzFGQ05UX1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJSSzFGQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JSSzFGQ05UX01zayAgICAgICAgICAgICAoMHg3dWwgPDwgRVBXTV9CTkZfQlJLMUZDTlRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUksxRkNOVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JSSzFQSU5WX1BvcyAgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJSSzFQSU5WIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JSSzFQSU5WX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9CTkZfQlJLMVBJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCUksxUElOViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JLMFNSQ19Qb3MgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJLMFNSQyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JLMFNSQ19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9CTkZfQkswU1JDX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCSzBTUkMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQk5GX0JLMVNSQ19Qb3MgICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCTkY6IEJLMVNSQyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQk5GX0JLMVNSQ19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9CTkZfQksxU1JDX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Qk5GOiBCSzFTUkMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkFJTEJSS19DU1NCUktFTl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQUlMQlJLOiBDU1NCUktFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkFJTEJSS19DU1NCUktFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GQUlMQlJLX0NTU0JSS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkFJTEJSSzogQ1NTQlJLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkFJTEJSS19CT0RCUktFTl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQUlMQlJLOiBCT0RCUktFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkFJTEJSS19CT0RCUktFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GQUlMQlJLX0JPREJSS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkFJTEJSSzogQk9EQlJLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkFJTEJSS19SQU1CUktFTl9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQUlMQlJLOiBSQU1CUktFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkFJTEJSS19SQU1CUktFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GQUlMQlJLX1JBTUJSS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkFJTEJSSzogUkFNQlJLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkFJTEJSS19DT1JCUktFTl9Qb3MgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQUlMQlJLOiBDT1JCUktFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkFJTEJSS19DT1JCUktFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GQUlMQlJLX0NPUkJSS0VOX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkFJTEJSSzogQ09SQlJLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0NQTzBFQkVOX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IENQTzBFQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0NQTzBFQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfQ1BPMEVCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBDUE8wRUJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0NQTzFFQkVOX1BvcyAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IENQTzFFQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0NQTzFFQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfQ1BPMUVCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBDUE8xRUJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS1AwRUVOX1BvcyAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IEJSS1AwRUVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS1AwRUVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfQlJLUDBFRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktQMEVFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS1AxRUVOX1BvcyAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IEJSS1AxRUVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS1AxRUVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfQlJLUDFFRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktQMUVFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX1NZU0VCRU5fUG9zICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IFNZU0VCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX1NZU0VCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfU1lTRUJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBTWVNFQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0NQTzBMQkVOX1BvcyAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IENQTzBMQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0NQTzBMQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfQ1BPMExCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBDUE8wTEJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0NQTzFMQkVOX1BvcyAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IENQTzFMQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0NQTzFMQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfQ1BPMUxCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBDUE8xTEJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS1AwTEVOX1BvcyAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IEJSS1AwTEVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS1AwTEVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfQlJLUDBMRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktQMExFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS1AxTEVOX1BvcyAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IEJSS1AxTEVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS1AxTEVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfQlJLUDFMRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktQMUxFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX1NZU0xCRU5fUG9zICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IFNZU0xCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX1NZU0xCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfU1lTTEJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBTWVNMQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS0FFVkVOX1BvcyAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IEJSS0FFVkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS0FFVkVOX01zayAgICAgICAoMHgzdWwgPDwgRVBXTV9CUktDVEwwXzFfQlJLQUVWRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktBRVZFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS0FPRERfUG9zICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IEJSS0FPREQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0JSS0FPRERfTXNrICAgICAgICAoMHgzdWwgPDwgRVBXTV9CUktDVEwwXzFfQlJLQU9ERF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBCUktBT0REIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0VBRENFQkVOX1BvcyAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IEVBRENFQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0VBRENFQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfRUFEQ0VCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBFQURDRUJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0VBRENMQkVOX1BvcyAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwwXzE6IEVBRENMQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMF8xX0VBRENMQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwwXzFfRUFEQ0xCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMF8xOiBFQURDTEJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0NQTzBFQkVOX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IENQTzBFQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0NQTzBFQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfQ1BPMEVCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBDUE8wRUJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0NQTzFFQkVOX1BvcyAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IENQTzFFQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0NQTzFFQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfQ1BPMUVCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBDUE8xRUJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS1AwRUVOX1BvcyAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IEJSS1AwRUVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS1AwRUVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfQlJLUDBFRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktQMEVFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS1AxRUVOX1BvcyAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IEJSS1AxRUVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS1AxRUVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfQlJLUDFFRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktQMUVFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX1NZU0VCRU5fUG9zICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IFNZU0VCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX1NZU0VCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfU1lTRUJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBTWVNFQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0NQTzBMQkVOX1BvcyAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IENQTzBMQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0NQTzBMQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfQ1BPMExCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBDUE8wTEJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0NQTzFMQkVOX1BvcyAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IENQTzFMQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0NQTzFMQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfQ1BPMUxCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBDUE8xTEJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS1AwTEVOX1BvcyAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IEJSS1AwTEVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS1AwTEVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfQlJLUDBMRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktQMExFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS1AxTEVOX1BvcyAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IEJSS1AxTEVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS1AxTEVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfQlJLUDFMRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktQMUxFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX1NZU0xCRU5fUG9zICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IFNZU0xCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX1NZU0xCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfU1lTTEJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBTWVNMQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS0FFVkVOX1BvcyAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IEJSS0FFVkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS0FFVkVOX01zayAgICAgICAoMHgzdWwgPDwgRVBXTV9CUktDVEwyXzNfQlJLQUVWRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktBRVZFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS0FPRERfUG9zICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IEJSS0FPREQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0JSS0FPRERfTXNrICAgICAgICAoMHgzdWwgPDwgRVBXTV9CUktDVEwyXzNfQlJLQU9ERF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBCUktBT0REIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0VBRENFQkVOX1BvcyAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IEVBRENFQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0VBRENFQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfRUFEQ0VCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBFQURDRUJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0VBRENMQkVOX1BvcyAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEwyXzM6IEVBRENMQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMMl8zX0VBRENMQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEwyXzNfRUFEQ0xCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMMl8zOiBFQURDTEJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0NQTzBFQkVOX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IENQTzBFQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0NQTzBFQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfQ1BPMEVCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBDUE8wRUJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0NQTzFFQkVOX1BvcyAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IENQTzFFQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0NQTzFFQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfQ1BPMUVCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBDUE8xRUJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS1AwRUVOX1BvcyAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IEJSS1AwRUVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS1AwRUVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfQlJLUDBFRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktQMEVFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS1AxRUVOX1BvcyAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IEJSS1AxRUVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS1AxRUVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfQlJLUDFFRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktQMUVFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X1NZU0VCRU5fUG9zICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IFNZU0VCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X1NZU0VCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfU1lTRUJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBTWVNFQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0NQTzBMQkVOX1BvcyAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IENQTzBMQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0NQTzBMQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfQ1BPMExCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBDUE8wTEJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0NQTzFMQkVOX1BvcyAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IENQTzFMQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0NQTzFMQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfQ1BPMUxCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBDUE8xTEJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS1AwTEVOX1BvcyAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IEJSS1AwTEVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS1AwTEVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfQlJLUDBMRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktQMExFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS1AxTEVOX1BvcyAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IEJSS1AxTEVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS1AxTEVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfQlJLUDFMRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktQMUxFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X1NZU0xCRU5fUG9zICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IFNZU0xCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X1NZU0xCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfU1lTTEJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBTWVNMQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS0FFVkVOX1BvcyAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IEJSS0FFVkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS0FFVkVOX01zayAgICAgICAoMHgzdWwgPDwgRVBXTV9CUktDVEw0XzVfQlJLQUVWRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktBRVZFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS0FPRERfUG9zICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IEJSS0FPREQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0JSS0FPRERfTXNrICAgICAgICAoMHgzdWwgPDwgRVBXTV9CUktDVEw0XzVfQlJLQU9ERF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBCUktBT0REIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0VBRENFQkVOX1BvcyAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IEVBRENFQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0VBRENFQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfRUFEQ0VCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBFQURDRUJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0VBRENMQkVOX1BvcyAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpCUktDVEw0XzU6IEVBRENMQkVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQlJLQ1RMNF81X0VBRENMQkVOX01zayAgICAgICAoMHgxdWwgPDwgRVBXTV9CUktDVEw0XzVfRUFEQ0xCRU5fUG9zKSAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QlJLQ1RMNF81OiBFQURDTEJFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlYwX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0xDVEw6IFBJTlYwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlYwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0xDVExfUElOVjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlYxX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0xDVEw6IFBJTlYxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlYxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0xDVExfUElOVjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlYyX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0xDVEw6IFBJTlYyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlYyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0xDVExfUElOVjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlYzX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0xDVEw6IFBJTlYzIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlYzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0xDVExfUElOVjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlY0X1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0xDVEw6IFBJTlY0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlY0X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0xDVExfUElOVjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlY1X1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0xDVEw6IFBJTlY1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9MQ1RMX1BJTlY1X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0xDVExfUElOVjVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9MQ1RMOiBQSU5WNSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9FTl9QT0VOMF9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0VOOiBQT0VOMCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9FTl9QT0VOMF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0VOX1BPRU4wX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjAgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9FTl9QT0VOMV9Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0VOOiBQT0VOMSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9FTl9QT0VOMV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0VOX1BPRU4xX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjEgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9FTl9QT0VOMl9Qb3MgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0VOOiBQT0VOMiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9FTl9QT0VOMl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0VOX1BPRU4yX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9FTl9QT0VOM19Qb3MgICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0VOOiBQT0VOMyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9FTl9QT0VOM19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0VOX1BPRU4zX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9FTl9QT0VONF9Qb3MgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0VOOiBQT0VONCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9FTl9QT0VONF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0VOX1BPRU40X1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUE9FTl9QT0VONV9Qb3MgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQT0VOOiBQT0VONSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUE9FTl9QT0VONV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QT0VOX1BPRU41X1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UE9FTjogUE9FTjUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1dCUktfQlJLRVRSRzBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTV0JSSzogQlJLRVRSRzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1dCUktfQlJLRVRSRzBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TV0JSS19CUktFVFJHMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0VUUkcwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1dCUktfQlJLRVRSRzJfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTV0JSSzogQlJLRVRSRzIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1dCUktfQlJLRVRSRzJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TV0JSS19CUktFVFJHMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0VUUkcyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1dCUktfQlJLRVRSRzRfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTV0JSSzogQlJLRVRSRzQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1dCUktfQlJLRVRSRzRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TV0JSS19CUktFVFJHNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0VUUkc0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1dCUktfQlJLTFRSRzBfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTV0JSSzogQlJLTFRSRzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1dCUktfQlJLTFRSRzBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TV0JSS19CUktMVFJHMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0xUUkcwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1dCUktfQlJLTFRSRzJfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTV0JSSzogQlJLTFRSRzIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1dCUktfQlJLTFRSRzJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TV0JSS19CUktMVFJHMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0xUUkcyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1dCUktfQlJLTFRSRzRfUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTV0JSSzogQlJLTFRSRzQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1dCUktfQlJLTFRSRzRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TV0JSS19CUktMVFJHNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1dCUks6IEJSS0xUUkc0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU4wX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFpJRU4wIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU4wX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfWklFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVOMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU4xX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFpJRU4xIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU4xX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfWklFTjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVOMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU4yX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFpJRU4yIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU4yX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfWklFTjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVOMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU4zX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFpJRU4zIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU4zX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfWklFTjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVOMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU40X1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFpJRU40IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU40X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfWklFTjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVONCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU41X1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFpJRU41IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1pJRU41X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfWklFTjVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBaSUVONSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU4wX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFBJRU4wIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU4wX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfUElFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVOMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU4xX1BvcyAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFBJRU4xIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU4xX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfUElFTjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVOMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU4yX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFBJRU4yIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU4yX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfUElFTjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVOMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU4zX1BvcyAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFBJRU4zIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU4zX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfUElFTjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVOMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU40X1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFBJRU40IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU40X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfUElFTjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVONCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU41X1BvcyAgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IFBJRU41IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX1BJRU41X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfUElFTjVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBQSUVONSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU4wX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUFVJRU4wIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QVUlFTjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVOMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU4xX1BvcyAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUFVJRU4xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QVUlFTjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVOMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU4yX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUFVJRU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU4yX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QVUlFTjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU4zX1BvcyAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUFVJRU4zIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QVUlFTjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVOMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU40X1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUFVJRU40IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU40X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QVUlFTjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVONCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU41X1BvcyAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUFVJRU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUFVJRU41X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QVUlFTjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBVSUVONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU4wX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUERJRU4wIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QRElFTjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVOMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU4xX1BvcyAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUERJRU4xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QRElFTjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVOMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU4yX1BvcyAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUERJRU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU4yX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QRElFTjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU4zX1BvcyAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUERJRU4zIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QRElFTjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVOMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU40X1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUERJRU40IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU40X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QRElFTjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVONCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU41X1BvcyAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjA6IENNUERJRU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5URU4wX0NNUERJRU41X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjBfQ01QRElFTjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4wOiBDTVBESUVONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0VJRU4wXzFfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjE6IEJSS0VJRU4wXzEgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0VJRU4wXzFfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjFfQlJLRUlFTjBfMV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktFSUVOMF8xIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0VJRU4yXzNfUG9zICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjE6IEJSS0VJRU4yXzMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0VJRU4yXzNfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjFfQlJLRUlFTjJfM19Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktFSUVOMl8zIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0VJRU40XzVfUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjE6IEJSS0VJRU40XzUgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0VJRU40XzVfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjFfQlJLRUlFTjRfNV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktFSUVONF81IE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0xJRU4wXzFfUG9zICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjE6IEJSS0xJRU4wXzEgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0xJRU4wXzFfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjFfQlJLTElFTjBfMV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktMSUVOMF8xIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0xJRU4yXzNfUG9zICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjE6IEJSS0xJRU4yXzMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0xJRU4yXzNfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjFfQlJLTElFTjJfM19Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktMSUVOMl8zIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0xJRU40XzVfUG9zICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRFTjE6IEJSS0xJRU40XzUgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fSU5URU4xX0JSS0xJRU40XzVfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRFTjFfQlJLTElFTjRfNV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5URU4xOiBCUktMSUVONF81IE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUYwX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBaSUYwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUYwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1pJRjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUYxX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBaSUYxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUYxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1pJRjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUYyX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBaSUYyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUYyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1pJRjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUYzX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBaSUYzIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUYzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1pJRjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUY0X1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBaSUY0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUY0X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1pJRjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUY1X1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBaSUY1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9aSUY1X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1pJRjVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogWklGNSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUYwX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBQSUYwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUYwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1BJRjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUYxX1BvcyAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBQSUYxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUYxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1BJRjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUYyX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBQSUYyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUYyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1BJRjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUYzX1BvcyAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBQSUYzIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUYzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1BJRjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUY0X1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBQSUY0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUY0X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1BJRjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUY1X1BvcyAgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBQSUY1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9QSUY1X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX1BJRjVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogUElGNSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUYwX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBVSUYwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUYwX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUFVJRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUYxX1BvcyAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBVSUYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUYxX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUFVJRjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUYyX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBVSUYyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUYyX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUFVJRjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUYzX1BvcyAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBVSUYzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUYzX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUFVJRjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUY0X1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBVSUY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUY0X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUFVJRjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUY1X1BvcyAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBVSUY1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBVSUY1X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUFVJRjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QVUlGNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUYwX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBESUYwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUYwX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUERJRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUYxX1BvcyAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBESUYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUYxX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUERJRjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUYyX1BvcyAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBESUYyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUYyX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUERJRjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUYzX1BvcyAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBESUYzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUYzX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUERJRjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUY0X1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBESUY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUY0X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUERJRjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUY1X1BvcyAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMwOiBDTVBESUY1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMF9DTVBESUY1X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMwX0NNUERJRjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMDogQ01QRElGNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUYwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFSUYwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUYwX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VJRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUYxX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFSUYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUYxX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VJRjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUYyX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFSUYyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUYyX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VJRjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUYzX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFSUYzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUYzX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VJRjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUY0X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFSUY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUY0X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VJRjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUY1X1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFSUY1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFSUY1X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VJRjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRUlGNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUYwX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMSUYwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUYwX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xJRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUYxX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMSUYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUYxX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xJRjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUYyX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMSUYyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUYyX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xJRjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUYzX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMSUYzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUYzX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xJRjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUY0X1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMSUY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUY0X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xJRjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUY1X1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMSUY1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMSUY1X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xJRjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTElGNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTMF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFU1RTMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VTVFMwX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTMV9Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFU1RTMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VTVFMxX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTMl9Qb3MgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFU1RTMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VTVFMyX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTM19Qb3MgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFU1RTMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VTVFMzX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTNF9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFU1RTNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VTVFM0X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTNV9Qb3MgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktFU1RTNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktFU1RTNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0VTVFM1X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLRVNUUzUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTMF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMU1RTMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xTVFMwX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTMV9Qb3MgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMU1RTMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xTVFMxX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTMl9Qb3MgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMU1RTMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xTVFMyX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTM19Qb3MgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMU1RTMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xTVFMzX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTNF9Qb3MgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMU1RTNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xTVFM0X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTNV9Qb3MgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJTlRTVFMxOiBCUktMU1RTNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fSU5UU1RTMV9CUktMU1RTNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JTlRTVFMxX0JSS0xTVFM1X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SU5UU1RTMTogQlJLTFNUUzUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogWlRFMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9aVEUwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFMV9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogWlRFMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9aVEUxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFMl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogWlRFMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9aVEUyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFM19Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogWlRFMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFM19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9aVEUzX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFNF9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogWlRFNCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFNF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9aVEU0X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFNV9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogWlRFNSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fWlRFNV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9aVEU1X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFpURTUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFMF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogUFRFMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9QVEUwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFMV9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogUFRFMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9QVEUxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFMl9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogUFRFMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9QVEUyX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFM19Qb3MgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogUFRFMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFM19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9QVEUzX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFNF9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogUFRFNCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFNF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9QVEU0X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFNV9Qb3MgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogUFRFNSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fUFRFNV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9QVEU1X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IFBURTUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFMF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ1VUUkdFMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DVVRSR0UwX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFMV9Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ1VUUkdFMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DVVRSR0UxX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFMl9Qb3MgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ1VUUkdFMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DVVRSR0UyX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFM19Qb3MgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ1VUUkdFMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DVVRSR0UzX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFNF9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ1VUUkdFNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DVVRSR0U0X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFNV9Qb3MgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ1VUUkdFNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ1VUUkdFNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DVVRSR0U1X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENVVFJHRTUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFMF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ0RUUkdFMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DRFRSR0UwX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFMV9Qb3MgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ0RUUkdFMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DRFRSR0UxX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFMl9Qb3MgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ0RUUkdFMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DRFRSR0UyX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFM19Qb3MgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ0RUUkdFMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DRFRSR0UzX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFNF9Qb3MgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ0RUUkdFNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DRFRSR0U0X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFNV9Qb3MgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpEQUNUUkdFTjogQ0RUUkdFNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fREFDVFJHRU5fQ0RUUkdFNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9EQUNUUkdFTl9DRFRSR0U1X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6REFDVFJHRU46IENEVFJHRTUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdTRUwwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMwOiBUUkdTRUwwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdTRUwwX01zayAgICAgICAgICAoMHhmdWwgPDwgRVBXTV9FQURDVFMwX1RSR1NFTDBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHU0VMMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdFTjBfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMwOiBUUkdFTjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdFTjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9FQURDVFMwX1RSR0VOMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHRU4wIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdTRUwxX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMwOiBUUkdTRUwxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdTRUwxX01zayAgICAgICAgICAoMHhmdWwgPDwgRVBXTV9FQURDVFMwX1RSR1NFTDFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHU0VMMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdFTjFfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMwOiBUUkdFTjEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdFTjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9FQURDVFMwX1RSR0VOMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHRU4xIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdTRUwyX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMwOiBUUkdTRUwyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdTRUwyX01zayAgICAgICAgICAoMHhmdWwgPDwgRVBXTV9FQURDVFMwX1RSR1NFTDJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHU0VMMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdFTjJfUG9zICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMwOiBUUkdFTjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdFTjJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9FQURDVFMwX1RSR0VOMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHRU4yIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdTRUwzX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMwOiBUUkdTRUwzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdTRUwzX01zayAgICAgICAgICAoMHhmdWwgPDwgRVBXTV9FQURDVFMwX1RSR1NFTDNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHU0VMMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdFTjNfUG9zICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMwOiBUUkdFTjMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMF9UUkdFTjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9FQURDVFMwX1RSR0VOM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMDogVFJHRU4zIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMV9UUkdTRUw0X1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMxOiBUUkdTRUw0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMV9UUkdTRUw0X01zayAgICAgICAgICAoMHhmdWwgPDwgRVBXTV9FQURDVFMxX1RSR1NFTDRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMTogVFJHU0VMNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMV9UUkdFTjRfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMxOiBUUkdFTjQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMV9UUkdFTjRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9FQURDVFMxX1RSR0VONF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMTogVFJHRU40IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMV9UUkdTRUw1X1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMxOiBUUkdTRUw1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMV9UUkdTRUw1X01zayAgICAgICAgICAoMHhmdWwgPDwgRVBXTV9FQURDVFMxX1RSR1NFTDVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMTogVFJHU0VMNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRUFEQ1RTMV9UUkdFTjVfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpFQURDVFMxOiBUUkdFTjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fRUFEQ1RTMV9UUkdFTjVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9FQURDVFMxX1RSR0VONV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RUFEQ1RTMTogVFJHRU41IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDTVBEQVQwXzFfRlRDTVBfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENNUERBVDBfMTogRlRDTVAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fRlRDTVBEQVQwXzFfRlRDTVBfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GVENNUERBVDBfMV9GVENNUF9Qb3MpICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDTVBEQVQwXzE6IEZUQ01QIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDTVBEQVQyXzNfRlRDTVBfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENNUERBVDJfMzogRlRDTVAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fRlRDTVBEQVQyXzNfRlRDTVBfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GVENNUERBVDJfM19GVENNUF9Qb3MpICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDTVBEQVQyXzM6IEZUQ01QIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDTVBEQVQ0XzVfRlRDTVBfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENNUERBVDRfNTogRlRDTVAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fRlRDTVBEQVQ0XzVfRlRDTVBfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GVENNUERBVDRfNV9GVENNUF9Qb3MpICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDTVBEQVQ0XzU6IEZUQ01QIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTU0NUTDogU1NFTjAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TU0NUTF9TU0VOMF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU4wIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjFfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTU0NUTDogU1NFTjEgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjFfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TU0NUTF9TU0VOMV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU4xIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjJfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTU0NUTDogU1NFTjIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjJfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TU0NUTF9TU0VOMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU4yIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjNfUG9zICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTU0NUTDogU1NFTjMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjNfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TU0NUTF9TU0VOM19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU4zIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjRfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTU0NUTDogU1NFTjQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TU0NUTF9TU0VONF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU40IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjVfUG9zICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTU0NUTDogU1NFTjUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1NDVExfU1NFTjVfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TU0NUTF9TU0VONV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTRU41IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1NDVExfU1NSQ19Qb3MgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTU0NUTDogU1NSQyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1NDVExfU1NSQ19Nc2sgICAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9TU0NUTF9TU1JDX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NDVEw6IFNTUkMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1NUUkdfQ05UU0VOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTU1RSRzogQ05UU0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fU1NUUkdfQ05UU0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TU1RSR19DTlRTRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1NUUkc6IENOVFNFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTEVCQ1RMX0xFQkVOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMRUJDVEw6IExFQkVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fTEVCQ1RMX0xFQkVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MRUJDVExfTEVCRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBMRUJFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTEVCQ1RMX1NSQ0VOMF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMRUJDVEw6IFNSQ0VOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fTEVCQ1RMX1NSQ0VOMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MRUJDVExfU1JDRU4wX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBTUkNFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTEVCQ1RMX1NSQ0VOMl9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMRUJDVEw6IFNSQ0VOMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fTEVCQ1RMX1NSQ0VOMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MRUJDVExfU1JDRU4yX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBTUkNFTjIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTEVCQ1RMX1NSQ0VONF9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMRUJDVEw6IFNSQ0VONCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fTEVCQ1RMX1NSQ0VONF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9MRUJDVExfU1JDRU40X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBTUkNFTjQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTEVCQ1RMX1RSR1RZUEVfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMRUJDVEw6IFRSR1RZUEUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fTEVCQ1RMX1RSR1RZUEVfTXNrICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9MRUJDVExfVFJHVFlQRV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ1RMOiBUUkdUWVBFIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fTEVCQ05UX0xFQkNOVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpMRUJDTlQ6IExFQkNOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fTEVCQ05UX0xFQkNOVF9Nc2sgICAgICAgICAgICAoMHgxZmZ1bCA8PCBFUFdNX0xFQkNOVF9MRUJDTlRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6TEVCQ05UOiBMRUJDTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEYwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IENOVE1BWEYwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEYwX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfQ05UTUFYRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEYxX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IENOVE1BWEYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEYxX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfQ05UTUFYRjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEYyX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IENOVE1BWEYyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEYyX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfQ05UTUFYRjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEYzX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IENOVE1BWEYzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEYzX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfQ05UTUFYRjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEY0X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IENOVE1BWEY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEY0X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfQ05UTUFYRjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEY1X1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IENOVE1BWEY1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0NOVE1BWEY1X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfQ05UTUFYRjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBDTlRNQVhGNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX1NZTkNJTkYwX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IFNZTkNJTkYwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX1NZTkNJTkYwX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfU1lOQ0lORjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBTWU5DSU5GMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX1NZTkNJTkYyX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IFNZTkNJTkYyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX1NZTkNJTkYyX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfU1lOQ0lORjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBTWU5DSU5GMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX1NZTkNJTkY0X1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IFNZTkNJTkY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX1NZTkNJTkY0X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfU1lOQ0lORjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBTWU5DSU5GNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGMF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IEVBRENUUkdGMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfRUFEQ1RSR0YwX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGMV9Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IEVBRENUUkdGMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfRUFEQ1RSR0YxX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGMl9Qb3MgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IEVBRENUUkdGMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfRUFEQ1RSR0YyX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGM19Qb3MgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IEVBRENUUkdGMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfRUFEQ1RSR0YzX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGNF9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IEVBRENUUkdGNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfRUFEQ1RSR0Y0X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGNV9Qb3MgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IEVBRENUUkdGNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0VBRENUUkdGNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfRUFEQ1RSR0Y1X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBFQURDVFJHRjUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fU1RBVFVTX0RBQ1RSR0ZfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpTVEFUVVM6IERBQ1RSR0YgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fU1RBVFVTX0RBQ1RSR0ZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9TVEFUVVNfREFDVFJHRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6U1RBVFVTOiBEQUNUUkdGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBMF9JRkFDTlRfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkEwOiBJRkFDTlQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBMF9JRkFDTlRfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9JRkEwX0lGQUNOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMDogSUZBQ05UIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBMF9JRkFTRUxfUG9zICAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkEwOiBJRkFTRUwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBMF9JRkFTRUxfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9JRkEwX0lGQVNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMDogSUZBU0VMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBMF9JRkFFTl9Qb3MgICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkEwOiBJRkFFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBMF9JRkFFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JRkEwX0lGQUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMDogSUZBRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBMV9JRkFDTlRfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkExOiBJRkFDTlQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBMV9JRkFDTlRfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9JRkExX0lGQUNOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMTogSUZBQ05UIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBMV9JRkFTRUxfUG9zICAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkExOiBJRkFTRUwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBMV9JRkFTRUxfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9JRkExX0lGQVNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMTogSUZBU0VMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBMV9JRkFFTl9Qb3MgICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkExOiBJRkFFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBMV9JRkFFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JRkExX0lGQUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMTogSUZBRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBMl9JRkFDTlRfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkEyOiBJRkFDTlQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBMl9JRkFDTlRfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9JRkEyX0lGQUNOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMjogSUZBQ05UIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBMl9JRkFTRUxfUG9zICAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkEyOiBJRkFTRUwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBMl9JRkFTRUxfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9JRkEyX0lGQVNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMjogSUZBU0VMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBMl9JRkFFTl9Qb3MgICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkEyOiBJRkFFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBMl9JRkFFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JRkEyX0lGQUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMjogSUZBRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBM19JRkFDTlRfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkEzOiBJRkFDTlQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBM19JRkFDTlRfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9JRkEzX0lGQUNOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMzogSUZBQ05UIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBM19JRkFTRUxfUG9zICAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkEzOiBJRkFTRUwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBM19JRkFTRUxfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9JRkEzX0lGQVNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMzogSUZBU0VMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBM19JRkFFTl9Qb3MgICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkEzOiBJRkFFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBM19JRkFFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JRkEzX0lGQUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBMzogSUZBRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBNF9JRkFDTlRfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkE0OiBJRkFDTlQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBNF9JRkFDTlRfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9JRkE0X0lGQUNOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNDogSUZBQ05UIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBNF9JRkFTRUxfUG9zICAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkE0OiBJRkFTRUwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBNF9JRkFTRUxfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9JRkE0X0lGQVNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNDogSUZBU0VMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBNF9JRkFFTl9Qb3MgICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkE0OiBJRkFFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBNF9JRkFFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JRkE0X0lGQUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNDogSUZBRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBNV9JRkFDTlRfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkE1OiBJRkFDTlQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBNV9JRkFDTlRfTXNrICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9JRkE1X0lGQUNOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNTogSUZBQ05UIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBNV9JRkFTRUxfUG9zICAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkE1OiBJRkFTRUwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBNV9JRkFTRUxfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgRVBXTV9JRkE1X0lGQVNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNTogSUZBU0VMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fSUZBNV9JRkFFTl9Qb3MgICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpJRkE1OiBJRkFFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fSUZBNV9JRkFFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9JRkE1X0lGQUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6SUZBNTogSUZBRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5UU1RTOiBJRkFJRjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5UU1RTX0lGQUlGMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUYwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5UU1RTOiBJRkFJRjEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5UU1RTX0lGQUlGMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUYxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5UU1RTOiBJRkFJRjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5UU1RTX0lGQUlGMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUYyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5UU1RTOiBJRkFJRjMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5UU1RTX0lGQUlGM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUYzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5UU1RTOiBJRkFJRjQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5UU1RTX0lGQUlGNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUY0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5UU1RTOiBJRkFJRjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVFNUU19JRkFJRjVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5UU1RTX0lGQUlGNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVFNUUzogSUZBSUY1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5URU46IElGQUlFTjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5URU5fSUZBSUVOMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU4wIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5URU46IElGQUlFTjEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5URU5fSUZBSUVOMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU4xIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5URU46IElGQUlFTjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5URU5fSUZBSUVOMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU4yIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5URU46IElGQUlFTjMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5URU5fSUZBSUVOM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU4zIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5URU46IElGQUlFTjQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5URU5fSUZBSUVONF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU40IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBSU5URU46IElGQUlFTjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQUlOVEVOX0lGQUlFTjVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9BSU5URU5fSUZBSUVONV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QUlOVEVOOiBJRkFJRU41IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjBfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBUERNQUNUTDogQVBETUFFTjAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjBfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9BUERNQUNUTF9BUERNQUVOMF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU4wIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjFfUG9zICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBUERNQUNUTDogQVBETUFFTjEgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjFfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9BUERNQUNUTF9BUERNQUVOMV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU4xIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjJfUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBUERNQUNUTDogQVBETUFFTjIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjJfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9BUERNQUNUTF9BUERNQUVOMl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU4yIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjNfUG9zICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBUERNQUNUTDogQVBETUFFTjMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjNfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9BUERNQUNUTF9BUERNQUVOM19Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU4zIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjRfUG9zICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBUERNQUNUTDogQVBETUFFTjQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjRfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9BUERNQUNUTF9BUERNQUVONF9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU40IE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjVfUG9zICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpBUERNQUNUTDogQVBETUFFTjUgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fQVBETUFDVExfQVBETUFFTjVfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9BUERNQUNUTF9BUERNQUVONV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6QVBETUFDVEw6IEFQRE1BRU41IE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVOMF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJTkVOOiBDQVBJTkVOMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVOMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJTkVOX0NBUElORU4wX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVOMV9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJTkVOOiBDQVBJTkVOMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVOMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJTkVOX0NBUElORU4xX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVOMl9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJTkVOOiBDQVBJTkVOMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVOMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJTkVOX0NBUElORU4yX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVOM19Qb3MgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJTkVOOiBDQVBJTkVOMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVOM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJTkVOX0NBUElORU4zX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVONF9Qb3MgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJTkVOOiBDQVBJTkVONCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVONF9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJTkVOX0NBUElORU40X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVONV9Qb3MgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJTkVOOiBDQVBJTkVONSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSU5FTl9DQVBJTkVONV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJTkVOX0NBUElORU41X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSU5FTjogQ0FQSU5FTjUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVOMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUEVOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVOMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQRU4wX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVOMV9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUEVOMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVOMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQRU4xX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVOMl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUEVOMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVOMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQRU4yX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVOM19Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUEVOMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVOM19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQRU4zX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVONF9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUEVONCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVONF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQRU40X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVONV9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUEVONSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUEVONV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQRU41X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBFTjUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjBfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUElOVjAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQSU5WMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlYwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjFfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUElOVjEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQSU5WMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlYxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjJfUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUElOVjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQSU5WMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlYyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjNfUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUElOVjMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQSU5WM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlYzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjRfUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUElOVjQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQSU5WNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlY0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjVfUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IENBUElOVjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0NBUElOVjVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfQ0FQSU5WNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBDQVBJTlY1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU4wX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IFJDUkxERU4wIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfUkNSTERFTjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU4xX1BvcyAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IFJDUkxERU4xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfUkNSTERFTjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU4yX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IFJDUkxERU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU4yX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfUkNSTERFTjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU4zX1BvcyAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IFJDUkxERU4zIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfUkNSTERFTjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVOMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU40X1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IFJDUkxERU40IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU40X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfUkNSTERFTjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVONCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU41X1BvcyAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IFJDUkxERU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX1JDUkxERU41X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfUkNSTERFTjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBSQ1JMREVONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU4wX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IEZDUkxERU4wIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfRkNSTERFTjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU4xX1BvcyAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IEZDUkxERU4xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfRkNSTERFTjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU4yX1BvcyAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IEZDUkxERU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU4yX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfRkNSTERFTjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU4zX1BvcyAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IEZDUkxERU4zIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfRkNSTERFTjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVOMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU40X1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IEZDUkxERU40IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU40X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfRkNSTERFTjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVONCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU41X1BvcyAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBDVEw6IEZDUkxERU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQQ1RMX0ZDUkxERU41X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBDVExfRkNSTERFTjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQQ1RMOiBGQ1JMREVONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1YwX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENSTElGT1YwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1YwX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ1JMSUZPVjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1YxX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENSTElGT1YxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1YxX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ1JMSUZPVjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1YyX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENSTElGT1YyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1YyX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ1JMSUZPVjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1YzX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENSTElGT1YzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1YzX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ1JMSUZPVjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1Y0X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENSTElGT1Y0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1Y0X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ1JMSUZPVjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1Y1X1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENSTElGT1Y1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NSTElGT1Y1X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ1JMSUZPVjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDUkxJRk9WNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1YwX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENGTElGT1YwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1YwX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ0ZMSUZPVjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1YxX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENGTElGT1YxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1YxX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ0ZMSUZPVjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1YyX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENGTElGT1YyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1YyX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ0ZMSUZPVjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1YzX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENGTElGT1YzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1YzX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ0ZMSUZPVjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1Y0X1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENGTElGT1Y0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1Y0X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ0ZMSUZPVjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1Y1X1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBTVFM6IENGTElGT1Y1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQU1RTX0NGTElGT1Y1X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBTVFNfQ0ZMSUZPVjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQU1RTOiBDRkxJRk9WNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUkNBUERBVDBfUkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpSQ0FQREFUMDogUkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fUkNBUERBVDBfUkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9SQ0FQREFUMF9SQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDA6IFJDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkNBUERBVDBfRkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQ0FQREFUMDogRkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkNBUERBVDBfRkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GQ0FQREFUMF9GQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDA6IEZDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUkNBUERBVDFfUkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpSQ0FQREFUMTogUkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fUkNBUERBVDFfUkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9SQ0FQREFUMV9SQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDE6IFJDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkNBUERBVDFfRkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQ0FQREFUMTogRkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkNBUERBVDFfRkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GQ0FQREFUMV9GQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDE6IEZDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUkNBUERBVDJfUkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpSQ0FQREFUMjogUkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fUkNBUERBVDJfUkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9SQ0FQREFUMl9SQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDI6IFJDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkNBUERBVDJfRkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQ0FQREFUMjogRkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkNBUERBVDJfRkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GQ0FQREFUMl9GQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDI6IEZDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUkNBUERBVDNfUkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpSQ0FQREFUMzogUkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fUkNBUERBVDNfUkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9SQ0FQREFUM19SQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDM6IFJDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkNBUERBVDNfRkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQ0FQREFUMzogRkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkNBUERBVDNfRkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GQ0FQREFUM19GQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDM6IEZDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUkNBUERBVDRfUkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpSQ0FQREFUNDogUkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fUkNBUERBVDRfUkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9SQ0FQREFUNF9SQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDQ6IFJDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkNBUERBVDRfRkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQ0FQREFUNDogRkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkNBUERBVDRfRkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GQ0FQREFUNF9GQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDQ6IEZDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUkNBUERBVDVfUkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpSQ0FQREFUNTogUkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fUkNBUERBVDVfUkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9SQ0FQREFUNV9SQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6UkNBUERBVDU6IFJDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRkNBUERBVDVfRkNBUERBVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGQ0FQREFUNTogRkNBUERBVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fRkNBUERBVDVfRkNBUERBVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GQ0FQREFUNV9GQ0FQREFUX1BvcykgICAgICAgICAgICAvKiE8IEVQV01fVDo6RkNBUERBVDU6IEZDQVBEQVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSEVOMF8xX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDSEVOMF8xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSEVOMF8xX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QRE1BQ1RMX0NIRU4wXzFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hFTjBfMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBNT0QwXzFfUG9zICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDQVBNT0QwXzEgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBNT0QwXzFfTXNrICAgICAgICAoMHgzdWwgPDwgRVBXTV9QRE1BQ1RMX0NBUE1PRDBfMV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQTU9EMF8xIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBPUkQwXzFfUG9zICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDQVBPUkQwXzEgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBPUkQwXzFfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9QRE1BQ1RMX0NBUE9SRDBfMV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQT1JEMF8xIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSFNFTDBfMV9Qb3MgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDSFNFTDBfMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSFNFTDBfMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QRE1BQ1RMX0NIU0VMMF8xX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hTRUwwXzEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSEVOMl8zX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDSEVOMl8zIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSEVOMl8zX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QRE1BQ1RMX0NIRU4yXzNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hFTjJfMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBNT0QyXzNfUG9zICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDQVBNT0QyXzMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBNT0QyXzNfTXNrICAgICAgICAoMHgzdWwgPDwgRVBXTV9QRE1BQ1RMX0NBUE1PRDJfM19Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQTU9EMl8zIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBPUkQyXzNfUG9zICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDQVBPUkQyXzMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBPUkQyXzNfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9QRE1BQ1RMX0NBUE9SRDJfM19Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQT1JEMl8zIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSFNFTDJfM19Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDSFNFTDJfMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSFNFTDJfM19Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QRE1BQ1RMX0NIU0VMMl8zX1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hTRUwyXzMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSEVONF81X1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDSEVONF81IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSEVONF81X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QRE1BQ1RMX0NIRU40XzVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hFTjRfNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBNT0Q0XzVfUG9zICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDQVBNT0Q0XzUgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBNT0Q0XzVfTXNrICAgICAgICAoMHgzdWwgPDwgRVBXTV9QRE1BQ1RMX0NBUE1PRDRfNV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQTU9ENF81IE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBPUkQ0XzVfUG9zICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDQVBPUkQ0XzUgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DQVBPUkQ0XzVfTXNrICAgICAgICAoMHgxdWwgPDwgRVBXTV9QRE1BQ1RMX0NBUE9SRDRfNV9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0FQT1JENF81IE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSFNFTDRfNV9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ1RMOiBDSFNFTDRfNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEVQV01fUERNQUNUTF9DSFNFTDRfNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgRVBXTV9QRE1BQ1RMX0NIU0VMNF81X1BvcykgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNUTDogQ0hTRUw0XzUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNBUDBfMV9DQVBCVUZfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ0FQMF8xOiBDQVBCVUYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fUERNQUNBUDBfMV9DQVBCVUZfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QRE1BQ0FQMF8xX0NBUEJVRl9Qb3MpICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNBUDBfMTogQ0FQQlVGIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNBUDJfM19DQVBCVUZfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ0FQMl8zOiBDQVBCVUYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fUERNQUNBUDJfM19DQVBCVUZfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QRE1BQ0FQMl8zX0NBUEJVRl9Qb3MpICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNBUDJfMzogQ0FQQlVGIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUERNQUNBUDRfNV9DQVBCVUZfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQRE1BQ0FQNF81OiBDQVBCVUYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEVQV01fUERNQUNBUDRfNV9DQVBCVUZfTXNrICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QRE1BQ0FQNF81X0NBUEJVRl9Qb3MpICAgICAgICAgICAvKiE8IEVQV01fVDo6UERNQUNBUDRfNTogQ0FQQlVGIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU4wX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUFJJRU4wIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQUklFTjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVOMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU4xX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUFJJRU4xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQUklFTjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVOMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU4yX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUFJJRU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU4yX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQUklFTjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU4zX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUFJJRU4zIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQUklFTjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVOMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU40X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUFJJRU40IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU40X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQUklFTjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVONCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU41X1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUFJJRU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUFJJRU41X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQUklFTjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBSSUVONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU4wX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUEZJRU4wIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU4wX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQRklFTjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVOMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU4xX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUEZJRU4xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQRklFTjFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVOMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU4yX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUEZJRU4yIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU4yX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQRklFTjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVOMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU4zX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUEZJRU4zIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU4zX01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQRklFTjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVOMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU40X1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUEZJRU40IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU40X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQRklFTjRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVONCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU41X1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRU46IENBUEZJRU41IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUVOX0NBUEZJRU41X01zayAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRU5fQ0FQRklFTjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUVOOiBDQVBGSUVONSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUYwX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ1JMSUYwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUYwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DUkxJRjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUYxX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ1JMSUYxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUYxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DUkxJRjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUYyX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ1JMSUYyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUYyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DUkxJRjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUYzX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ1JMSUYzIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUYzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DUkxJRjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUY0X1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ1JMSUY0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUY0X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DUkxJRjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUY1X1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ1JMSUY1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ1JMSUY1X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DUkxJRjVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENSTElGNSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUYwX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ0ZMSUYwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUYwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DRkxJRjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUYxX1BvcyAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ0ZMSUYxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUYxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DRkxJRjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUYyX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ0ZMSUYyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUYyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DRkxJRjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUYzX1BvcyAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ0ZMSUYzIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUYzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DRkxJRjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUY0X1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ0ZMSUY0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUY0X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DRkxJRjRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUY1X1BvcyAgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDQVBJRjogQ0ZMSUY1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEVQV01fQ0FQSUZfQ0ZMSUY1X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9DQVBJRl9DRkxJRjVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q0FQSUY6IENGTElGNSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEJVRjBfUEJVRl9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQQlVGMDogUEJVRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUEJVRjBfUEJVRl9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QQlVGMF9QQlVGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjA6IFBCVUYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEJVRjFfUEJVRl9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQQlVGMTogUEJVRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUEJVRjFfUEJVRl9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QQlVGMV9QQlVGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjE6IFBCVUYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEJVRjJfUEJVRl9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQQlVGMjogUEJVRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUEJVRjJfUEJVRl9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QQlVGMl9QQlVGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjI6IFBCVUYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEJVRjNfUEJVRl9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQQlVGMzogUEJVRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUEJVRjNfUEJVRl9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QQlVGM19QQlVGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjM6IFBCVUYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEJVRjRfUEJVRl9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQQlVGNDogUEJVRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUEJVRjRfUEJVRl9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QQlVGNF9QQlVGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjQ6IFBCVUYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fUEJVRjVfUEJVRl9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpQQlVGNTogUEJVRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEVQV01fUEJVRjVfUEJVRl9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9QQlVGNV9QQlVGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6UEJVRjU6IFBCVUYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QQlVGMF9DTVBCVUZfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBCVUYwOiBDTVBCVUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QQlVGMF9DTVBCVUZfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBCVUYwX0NNUEJVRl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGMDogQ01QQlVGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QQlVGMV9DTVBCVUZfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBCVUYxOiBDTVBCVUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QQlVGMV9DTVBCVUZfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBCVUYxX0NNUEJVRl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGMTogQ01QQlVGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QQlVGMl9DTVBCVUZfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBCVUYyOiBDTVBCVUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QQlVGMl9DTVBCVUZfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBCVUYyX0NNUEJVRl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGMjogQ01QQlVGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QQlVGM19DTVBCVUZfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBCVUYzOiBDTVBCVUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QQlVGM19DTVBCVUZfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBCVUYzX0NNUEJVRl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGMzogQ01QQlVGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QQlVGNF9DTVBCVUZfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBCVUY0OiBDTVBCVUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QQlVGNF9DTVBCVUZfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBCVUY0X0NNUEJVRl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGNDogQ01QQlVGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ01QQlVGNV9DTVBCVUZfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDTVBCVUY1OiBDTVBCVUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEVQV01fQ01QQlVGNV9DTVBCVUZfTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9DTVBCVUY1X0NNUEJVRl9Qb3MpICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6Q01QQlVGNTogQ01QQlVGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1BTQ0JVRjBfMV9DUFNDQlVGX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDUFNDQlVGMF8xOiBDUFNDQlVGIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQ1BTQ0JVRjBfMV9DUFNDQlVGX01zayAgICAgICAoMHhmZmZ1bCA8PCBFUFdNX0NQU0NCVUYwXzFfQ1BTQ0JVRl9Qb3MpICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1BTQ0JVRjBfMTogQ1BTQ0JVRiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1BTQ0JVRjJfM19DUFNDQlVGX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDUFNDQlVGMl8zOiBDUFNDQlVGIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQ1BTQ0JVRjJfM19DUFNDQlVGX01zayAgICAgICAoMHhmZmZ1bCA8PCBFUFdNX0NQU0NCVUYyXzNfQ1BTQ0JVRl9Qb3MpICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1BTQ0JVRjJfMzogQ1BTQ0JVRiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fQ1BTQ0JVRjRfNV9DUFNDQlVGX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpDUFNDQlVGNF81OiBDUFNDQlVGIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fQ1BTQ0JVRjRfNV9DUFNDQlVGX01zayAgICAgICAoMHhmZmZ1bCA8PCBFUFdNX0NQU0NCVUY0XzVfQ1BTQ0JVRl9Qb3MpICAgICAgICAgICAvKiE8IEVQV01fVDo6Q1BTQ0JVRjRfNTogQ1BTQ0JVRiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDQlVGMF8xX0ZUQ01QQlVGX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENCVUYwXzE6IEZUQ01QQlVGIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fRlRDQlVGMF8xX0ZUQ01QQlVGX01zayAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GVENCVUYwXzFfRlRDTVBCVUZfUG9zKSAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDQlVGMF8xOiBGVENNUEJVRiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDQlVGMl8zX0ZUQ01QQlVGX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENCVUYyXzM6IEZUQ01QQlVGIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fRlRDQlVGMl8zX0ZUQ01QQlVGX01zayAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GVENCVUYyXzNfRlRDTVBCVUZfUG9zKSAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDQlVGMl8zOiBGVENNUEJVRiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDQlVGNF81X0ZUQ01QQlVGX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENCVUY0XzU6IEZUQ01QQlVGIFBvc2l0aW9uICAgICovCisjZGVmaW5lIEVQV01fRlRDQlVGNF81X0ZUQ01QQlVGX01zayAgICAgICAoMHhmZmZmdWwgPDwgRVBXTV9GVENCVUY0XzVfRlRDTVBCVUZfUG9zKSAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDQlVGNF81OiBGVENNUEJVRiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDSV9GVENNVTBfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENJOiBGVENNVTAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fRlRDSV9GVENNVTBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GVENJX0ZUQ01VMF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTVUwIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDSV9GVENNVTJfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENJOiBGVENNVTIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fRlRDSV9GVENNVTJfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GVENJX0ZUQ01VMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTVUyIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDSV9GVENNVTRfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENJOiBGVENNVTQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fRlRDSV9GVENNVTRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GVENJX0ZUQ01VNF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTVU0IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDSV9GVENNRDBfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENJOiBGVENNRDAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fRlRDSV9GVENNRDBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GVENJX0ZUQ01EMF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTUQwIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDSV9GVENNRDJfUG9zICAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENJOiBGVENNRDIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fRlRDSV9GVENNRDJfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GVENJX0ZUQ01EMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTUQyIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVQV01fRlRDSV9GVENNRDRfUG9zICAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVBXTV9UOjpGVENJOiBGVENNRDQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEVQV01fRlRDSV9GVENNRDRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgRVBXTV9GVENJX0ZUQ01ENF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEVQV01fVDo6RlRDSTogRlRDTUQ0IE1hc2sgICAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIEVQV01fQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIEVQV00gcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworCisjZW5kaWYgLyogX19FUFdNX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9mbWNfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZm1jX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzQ5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZm1jX3JlZy5oCkBAIC0wLDAgKzEsNzI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZm1jX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBGTUMgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRk1DX1JFR19IX18KKyNkZWZpbmUgX19GTUNfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZsYXNoIE1lbW9yeSBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgRk1DIEZsYXNoIE1lbW9yeSBDb250cm9sbGVyKEZNQykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgRk1DIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgRk1DX1Q6OklTUENUTAorICAgICAqIE9mZnNldDogMHgwMCAgSVNQIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJU1BFTiAgICAgfElTUCBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElTUCBmdW5jdGlvbiBlbmFibGUgYml0LiBTZXQgdGhpcyBiaXQgdG8gZW5hYmxlIElTUCBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSVNQIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJU1AgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8QlMgICAgICAgIHxCb290IFNlbGVjdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIE1CUyBpbiBDT05GSUcwIGlzIDEsIHNldC9jbGVhciB0aGlzIGJpdCB0byBzZWxlY3QgbmV4dCBib290aW5nIGZyb20gTERST00vQVBST00sIHJlc3BlY3RpdmVseQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGFsc28gZnVuY3Rpb25zIGFzIGNoaXAgYm9vdGluZyBzdGF0dXMgZmxhZywgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hlcmUgY2hpcCBib290ZWQgZnJvbQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGluaXRpYXRlZCB3aXRoIHRoZSBpbnZlcnNlIHZhbHVlIG9mIENCU1sxXSAoQ09ORklHMFs3XSkgYWZ0ZXIgYW55IHJlc2V0IGlzIGhhcHBlbmVkIGV4Y2VwdCBDUFUgcmVzZXQgKENQVSBpcyAxKSBvciBzeXN0ZW0gcmVzZXQgKFNZUykgaXMgaGFwcGVuZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQm9vdGluZyBmcm9tIEFQUk9NIHdoZW4gTUJTIChDT05GSUcwWzVdKSBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCb290aW5nIGZyb20gTERST00gd2hlbiBNQlMgKENPTkZJRzBbNV0pIGlzIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszXSAgICAgfEFQVUVOICAgICB8QVBST00gVXBkYXRlIEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFQUk9NIGNhbm5vdCBiZSB1cGRhdGVkIHdoZW4gdGhlIGNoaXAgcnVucyBpbiBBUFJPTS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQVBST00gY2FuIGJlIHVwZGF0ZWQgd2hlbiB0aGUgY2hpcCBydW5zIGluIEFQUk9NLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNF0gICAgIHxDRkdVRU4gICAgfENPTkZJRyBVcGRhdGUgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ09ORklHIGNhbm5vdCBiZSB1cGRhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDT05GSUcgY2FuIGJlIHVwZGF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs1XSAgICAgfExEVUVOICAgICB8TERST00gVXBkYXRlIEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TERST00gdXBkYXRlIGVuYWJsZSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExEUk9NIGNhbm5vdCBiZSB1cGRhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMRFJPTSBjYW4gYmUgdXBkYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzZdICAgICB8SVNQRkYgICAgIHxJU1AgRmFpbCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGEgdHJpZ2dlcmVkIElTUCBtZWV0cyBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IG5lZWRzIHRvIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxKSBBUFJPTSB3cml0ZXMgdG8gaXRzZWxmIGlmIEFQVUVOIGlzIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgyKSBMRFJPTSB3cml0ZXMgdG8gaXRzZWxmIGlmIExEVUVOIGlzIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgzKSBDT05GSUcgaXMgZXJhc2VkL3Byb2dyYW1tZWQgaWYgQ0ZHVUVOIGlzIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg0KSBQYWdlIEVyYXNlIGNvbW1hbmQgYXQgTE9DSyBtb2RlIHdpdGggSUNFIGNvbm5lY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoNSkgRXJhc2Ugb3IgUHJvZ3JhbSBjb21tYW5kIGF0IGJyb3duLW91dCBkZXRlY3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg2KSBEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIGlsbGVnYWwsIHN1Y2ggYXMgb3ZlciBhbiBhdmFpbGFibGUgcmFuZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDcpIEludmFsaWQgSVNQIGNvbW1hbmRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDgpIEtQUk9NIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIEtFWUxPQ0sgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoOSkgQVBST00gaXMgZXJhc2VkL3Byb2dyYW1tZWQgaWYgS0VZTE9DSyBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxMCkgTERST00gaXMgZXJhc2VkL3Byb2dyYW1tZWQgaWYgS0VZTE9DSyBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxMSkgQ09ORklHIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIEtFWUxPQ0sgaXMgc2V0IHRvIDEgYW5kIEtFWUVOUk9NWzBdIGlzIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTIpIFJlYWQgYW55IGNvbnRlbnQgb2YgYm9vdCBsb2FkZXIgd2l0aCBJQ0UgY29ubmVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxMykgVGhlIGFkZHJlc3Mgb2YgYmxvY2sgZXJhc2UgYW5kIGJhbmsgZXJhc2UgaXMgbm90IGluIEFQUk9NCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDE0KSBJU1AgQ01EIGluIFhPTSByZWdpb24sIGV4Y2VwdCBtYXNzIGVyYXNlLCBwYWdlIGVyYXNlIGFuZCBjaGtzdW0gY29tbWFuZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxNSkgVGhlIHdyb25nIHNldHRpbmcgb2YgcGFnZSBlcmFzZSBJU1AgQ01EIGluIFhPTQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxNikgVmlvbGF0ZSBYT00gc2V0dGluZyBvbmUgdGltZSBwcm90ZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDE3KSBQYWdlIGVyYXNlIElTUCBDTUQgaW4gU2VjdXJlL05vbi1zZWN1cmUgcmVnaW9uIHNldHRpbmcgcGFnZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxOCkgTWFzcyBlcmFzZSB3aGVuIE1FUkFTRSAoQ0ZHMFsxM10pIGlzIGRpc2FibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTkpIFBhZ2UgZXJhc2UsIG1hc3MgZXJhc2UgLCBtdWx0aS13b3JkIHByb2dyYW0gb3IgNjQtYml0IHdvcmQgcHJvZ3JhbSBpbiBPVFAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE2XSAgICB8QkwgICAgICAgIHxCb290IExvYWRlciBCb290aW5nIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGluaXRpYXRlZCB3aXRoIHRoZSBpbnZlcnNlcyB2YWx1ZSBvZiBNQlMgKENPTkZJRzBbNV0pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QW55IHJlc2V0LCBleGNlcHQgQ1BVIHJlc2V0IChDUFUgaXMgMSkgb3Igc3lzdGVtIHJlc2V0IChTWVMpLCBCTCB3aWxsIGJlIHJlbG9hZGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBjaGVjayBjaGlwIGJvb3QgZnJvbSBCb290IExvYWRlciBvciBub3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIHNob3VsZCBrZWVwIG9yaWdpbmFsIHZhbHVlIG9mIHRoaXMgYml0IHdoZW4gdXBkYXRpbmcgRk1DX0lTUENUTCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQm9vdGluZyBmcm9tIEFQUk9NIG9yIExEUk9NLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCb290aW5nIGZyb20gQm9vdCBMb2FkZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyNF0gICAgfElOVEVOICAgICB8SW50ZXJydXB0IEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSVNQIElOVCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSVNQIElOVCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLiBCZWZvcmUgdXNlIElOVCwgdXNlciBuZWVkIHRvIGNsZWFyIHRoZSBJTlRGTEFHKEZNQ19JU1BTVFNbMjRdKSBtYWtlIHN1cmUgSU5UIGhhcHBlbiBhdCBjb3JyZWN0IHRpbWUuCisgICAgICogQHZhciBGTUNfVDo6SVNQQUREUgorICAgICAqIE9mZnNldDogMHgwNCAgSVNQIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJU1BBRERSICAgfElTUCBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIE51TWljcm8gTTIzNTEgc2VyaWVzIGlzIGVxdWlwcGVkIHdpdGggZW1iZWRkZWQgZmxhc2gKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJU1BBRERSWzE6MF0gbXVzdCBiZSBrZXB0IDAwIGZvciBJU1AgMzItYml0IG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElTUEFERFJbMjowXSBtdXN0IGJlIGtlcHQgMDAwIGZvciBJU1AgNjQtYml0IG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgQ1JDMzIgQ2hlY2tzdW0gQ2FsY3VsYXRpb24gY29tbWFuZCwgdGhpcyBmaWVsZCBpcyB0aGUgZmxhc2ggc3RhcnRpbmcgYWRkcmVzcyBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb24sIDIgS0J5dGVzIGFsaWdubWVudCBpcyBuZWNlc3NhcnkgZm9yIENSQzMyIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBGTEFTSCAzMi1iaXQgUHJvZ3JhbSwgSVNQIGFkZHJlc3MgbmVlZHMgd29yZCBhbGlnbm1lbnQgKDQtYnl0ZSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgRkxBU0ggNjQtYml0IFByb2dyYW0sIElTUCBhZGRyZXNzIG5lZWRzIGRvdWJsZSB3b3JkIGFsaWdubWVudCAoOC1ieXRlKS4KKyAgICAgKiBAdmFyIEZNQ19UOjpJU1BEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MDggIElTUCBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVNQREFUICAgIHxJU1AgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIGRhdGEgdG8gdGhpcyByZWdpc3RlciBiZWZvcmUgSVNQIHByb2dyYW0gb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgZGF0YSBmcm9tIHRoaXMgcmVnaXN0ZXIgYWZ0ZXIgSVNQIHJlYWQgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gSVNQRkYgKEZNQ19JU1BDVExbNl0pIGlzIDEsIElTUERBVCA9IDB4ZmZmZl9mZmZmCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFJ1biBDUkMzMiBDaGVja3N1bSBDYWxjdWxhdGlvbiBjb21tYW5kLCBJU1BEQVQgaXMgdGhlIG1lbW9yeSBzaXplIChieXRlKSBhbmQgMiBLQnl0ZXMgYWxpZ25tZW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIElTUCBSZWFkIENSQzMyIENoZWNrc3VtIGNvbW1hbmQsIElTUERBVCBpcyB0aGUgY2hlY2tzdW0gcmVzdWx0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgSVNQREFUID0gMHgwMDAwXzAwMDAsIGl0IG1lYW5zIHRoYXQgKDEpIHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbiBpcyBpbiBwcm9ncmVzcywgb3IgKDIpIHRoZSBtZW1vcnkgcmFuZ2UgZm9yIGNoZWNrc3VtIGNhbGN1bGF0aW9uIGlzIGluY29ycmVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBYT00gcGFnZSBlcmFzZSBmdW5jdGlvbiwgLCBJU1BEQVQgPSAweDAwNTVfYWEwMy4KKyAgICAgKiBAdmFyIEZNQ19UOjpJU1BDTUQKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIElTUCBDb21tYW5kIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzY6MF0gICB8Q01EICAgICAgIHxJU1AgQ29tbWFuZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElTUCBjb21tYW5kIHRhYmxlIGlzIHNob3duIGJlbG93OgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MDA9IEZMQVNIIFJlYWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwND0gUmVhZCBVbmlxdWUgSUQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwOD0gUmVhZCBGbGFzaCBBbGwtT25lIFJlc3VsdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDBCPSBSZWFkIENvbXBhbnkgSUQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwQz0gUmVhZCBEZXZpY2UgSUQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwRD0gUmVhZCBDaGVja3N1bS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDIxPSBGTEFTSCAzMi1iaXQgUHJvZ3JhbS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDIyPSBGTEFTSCBQYWdlIEVyYXNlLiBFcmFzZSBhbnkgcGFnZSBpbiB0d28gYmFua3MsIGV4Y2VwdCBmb3IgT1RQLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MjM9IEZMQVNIIEJhbmsgRXJhc2UuIEVyYXNlIGFsbCBwYWdlcyBvZiBBUFJPTSBpbiBCQU5LMCBvciBCQU5LMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDI1PSBGTEFTSCBCbG9jayBFcmFzZSBFcmFzZSBmb3VyIHBhZ2VzIGFsaWdubWVudCBvZiBBUFJPTSBpbiBCQU5LMCBvciBCQU5LMS4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgyNz0gRkxBU0ggTXVsdGktV29yZCBQcm9ncmFtLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4Mjg9IFJ1biBGbGFzaCBBbGwtT25lIFZlcmlmaWNhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDJEPSBSdW4gQ2hlY2tzdW0gQ2FsY3VsYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgyRT0gVmVjdG9yIFJlbWFwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NDA9IEZMQVNIIDY0LWJpdCBSZWFkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NjE9IEZMQVNIIDY0LWJpdCBQcm9ncmFtLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBvdGhlciBjb21tYW5kcyBhcmUgaW52YWxpZC4KKyAgICAgKiBAdmFyIEZNQ19UOjpJU1BUUkcKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIElTUCBUcmlnZ2VyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJU1BHTyAgICAgfElTUCBTdGFydCBUcmlnZ2VyIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc3RhcnQgSVNQIG9wZXJhdGlvbiBhbmQgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseSB3aGVuIElTUCBvcGVyYXRpb24gaXMgZmluaXNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIElTUEdPPTEsIHRoZSBvcGVyYXRpb24gb2YgYWNjZXNzaW5nIHZhbHVlIGZyb20gYWRkcmVzcyBGTUNfQkErMHgwMCB0byBGTUNfQkErMHg2OCB3b3VsZCBoYWx0IENQVSBzdGlsbCBJU1BHTyA9MAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHVzZXIgd2FudCB0byBtb25pdG9yIHdoZXRoZXIgSVNQIGZpbmlzaCBvciBub3QsdXNlciBjYW4gYWNjZXNzIEZNQ19NUFNUU1swXSBNUEJVU1kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElTUCBvcGVyYXRpb24gaXMgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElTUCBpcyBwcm9ncmVzc2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRk1DX1Q6OklTUFNUUworICAgICAqIE9mZnNldDogMHg0MCAgSVNQIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfElTUEJVU1kgICB8SVNQIEJ1c3kgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc3RhcnQgSVNQIG9wZXJhdGlvbiBhbmQgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseSB3aGVuIElTUCBvcGVyYXRpb24gaXMgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdGhlIG1pcnJvciBvZiBJU1BHTyhGTUNfSVNQVFJHWzBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSVNQIG9wZXJhdGlvbiBpcyBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSVNQIGlzIHByb2dyZXNzZWQuCisgICAgICogfFsyXSAgICAgfENCUyAgICAgICB8Qm9vdCBTZWxlY3Rpb24gb2YgQ09ORklHIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgaW5pdGlhdGVkIHdpdGggdGhlIENCUyAoQ09ORklHMFs3XSkgYWZ0ZXIgYW55IHJlc2V0IGlzIGhhcHBlbmVkIGV4Y2VwdCBDUFUgcmVzZXQgKENQVSBpcyAxKSBvciBzeXN0ZW0gcmVzZXQgKFNZUykgaXMgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyB2YWxpZCB3aGVuIE1CUyAoRk1DX0lTUFNUU1szXSk9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExEUk9NIHdpdGggSUFQIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFQUk9NIHdpdGggSUFQIG1vZGUuCisgICAgICogfFszXSAgICAgfE1CUyAgICAgICB8Qm9vdCBGcm9tIEJvb3QgTG9hZGVyIFNlbGVjdGlvbiBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgaW5pdGlhdGVkIHdpdGggdGhlIE1CUyAoQ09ORklHMFs1XSkgYWZ0ZXIgYW55IHJlc2V0IGlzIGhhcHBlbmVkIGV4Y2VwdCBDUFUgcmVzZXQgKENQVSBpcyAxKSBvciBzeXN0ZW0gcmVzZXQgKFNZUykgaXMgaGFwcGVuZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQm9vdGluZyBmcm9tIEJvb3QgTG9hZGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCb290aW5nIGZyb20gTERST00vQVBST00uKC5zZWUgQ0JTIGJpdCBzZXR0aW5nKQorICAgICAqIHxbNF0gICAgIHxGQ1lDRElTICAgfEZsYXNoIEFjY2VzcyBDeWNsZSBBdXRvLXR1bmluZyBEaXNhYmxlZCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIGZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBmdW5jdGlvbiBpcyBkaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBhdXRvLXR1bmluZyBmdW5jdGlvbiBpcyBkaXNhYmxlZCBieSBGQURJUyhGTUNfQ1lDQ1RMWzhdKSBvciBISVJDIGNsb2NrIGlzIG5vdCByZWFkeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmxhc2ggYWNjZXNzIGN5Y2xlIGF1dG8tdHVuaW5nIGlzIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBpcyBEaXNhYmxlZC4KKyAgICAgKiB8WzVdICAgICB8UEdGRiAgICAgIHxGbGFzaCBQcm9ncmFtIHdpdGggRmFzdCBWZXJpZmljYXRpb24gRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBkYXRhIGlzIG1pc21hdGNoZWQgYXQgSVNQIHByb2dyYW1taW5nIHZlcmlmaWNhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGNsZWFyIGJ5IHBlcmZvcm1pbmcgSVNQIGZsYXNoIGVyYXNlIG9yIElTUCByZWFkIENJRCBvcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmxhc2ggUHJvZ3JhbSBpcyBzdWNjZXNzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGbGFzaCBQcm9ncmFtIGlzIGZhaWwuIFByb2dyYW0gZGF0YSBpcyBkaWZmZXJlbnQgd2l0aCBkYXRhIGluIHRoZSBmbGFzaCBtZW1vcnkKKyAgICAgKiB8WzZdICAgICB8SVNQRkYgICAgIHxJU1AgRmFpbCBGbGFnIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHRoZSBtaXJyb3Igb2YgSVNQRkYgKEZNQ19JU1BDVExbNl0pLCBpdCBuZWVkcyB0byBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBGTUNfSVNQQ1RMWzZdIG9yIEZNQ19JU1BTVFNbNl0gaWYgdGhpcyBiaXQgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGEgdHJpZ2dlcmVkIElTUCBtZWV0cyBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxKSBBUFJPTSB3cml0ZXMgdG8gaXRzZWxmIGlmIEFQVUVOIGlzIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgyKSBMRFJPTSB3cml0ZXMgdG8gaXRzZWxmIGlmIExEVUVOIGlzIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgzKSBDT05GSUcgaXMgZXJhc2VkL3Byb2dyYW1tZWQgaWYgQ0ZHVUVOIGlzIHNldCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg0KSBQYWdlIEVyYXNlIGNvbW1hbmQgYXQgTE9DSyBtb2RlIHdpdGggSUNFIGNvbm5lY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoNSkgRXJhc2Ugb3IgUHJvZ3JhbSBjb21tYW5kIGF0IGJyb3duLW91dCBkZXRlY3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg2KSBEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIGlsbGVnYWwsIHN1Y2ggYXMgb3ZlciBhbiBhdmFpbGFibGUgcmFuZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDcpIEludmFsaWQgSVNQIGNvbW1hbmRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDgpIEtQUk9NIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIEtFWUxPQ0sgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoOSkgQVBST00gaXMgZXJhc2VkL3Byb2dyYW1tZWQgaWYgS0VZTE9DSyBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxMCkgTERST00gaXMgZXJhc2VkL3Byb2dyYW1tZWQgaWYgS0VZTE9DSyBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxMSkgQ09ORklHIGlzIGVyYXNlZC9wcm9ncmFtbWVkIGlmIEtFWUxPQ0sgaXMgc2V0IHRvIDEgYW5kIEtFWUVOUk9NWzBdIGlzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDEyKSBSZWFkIGFueSBjb250ZW50IG9mIGJvb3QgbG9hZGVyIHdpdGggSUNFIGNvbm5lY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTMpIFRoZSBhZGRyZXNzIG9mIGJsb2NrIGVyYXNlIGFuZCBiYW5rIGVyYXNlIGlzIG5vdCBpbiBBUFJPTQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxNCkgSVNQIENNRCBpbiBYT00gcmVnaW9uLCBleGNlcHQgbWFzcyBlcmFzZSwgcGFnZSBlcmFzZSBhbmQgY2hrc3VtIGNvbW1hbmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTUpIFRoZSB3cm9uZyBzZXR0aW5nIG9mIHBhZ2UgZXJhc2UgSVNQIENNRCBpbiBYT00KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTYpIFZpb2xhdGUgWE9NIHNldHRpbmcgb25lIHRpbWUgcHJvdGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxNykgUGFnZSBlcmFzZSBJU1AgQ01EIGluIFNlY3VyZS9Ob24tc2VjdXJlIHJlZ2lvbiBzZXR0aW5nIHBhZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoMTgpIE1hc3MgZXJhc2Ugd2hlbiBNRVJBU0UgKENGRzBbMTNdKSBpcyBkaXNhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDE5KSBQYWdlIGVyYXNlLCBtYXNzIGVyYXNlICwgbXVsdGktd29yZCBwcm9ncmFtIG9yIDY0LWJpdCB3b3JkIHByb2dyYW0gaW4gT1RQCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs3XSAgICAgfEFMTE9ORSAgICB8Rmxhc2ggQWxsLW9uZSBWZXJpZmljYXRpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSBpZiBhbGwgb2YgZmxhc2ggYml0cyBhcmUgMSwgYW5kIGNsZWFyIGlmIGZsYXNoIGJpdHMgYXJlIG5vdCBhbGwgMSBhZnRlciBSdW4gRmxhc2ggQWxsLU9uZSBWZXJpZmljYXRpb24gY29tcGxldGU7IHRoaXMgYml0IGFsc28gY2FuIGJlIGNsZWFyIGJ5IHdyaXRpbmcgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBbGwgb2YgZmxhc2ggYml0cyBhcmUgMSBhZnRlciBSdW4gRmxhc2ggQWxsLU9uZSBWZXJpZmljYXRpb24gY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZsYXNoIGJpdHMgYXJlIG5vdCBhbGwgMSBhZnRlciBSdW4gRmxhc2ggQWxsLU9uZSBWZXJpZmljYXRpb24gY29tcGxldGUuCisgICAgICogfFsyMzo5XSAgfFZFQ01BUCAgICB8VmVjdG9yIFBhZ2UgTWFwcGluZyBBZGRyZXNzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWxsIGFjY2VzcyB0byAweDAwMDBfMDAwMH4weDAwMDBfMDFGRiBpcyByZW1hcHBlZCB0byB0aGUgZmxhc2ggbWVtb3J5IGFkZHJlc3Mge1ZFQ01BUFsxNDowXSwgOSdoMDAwfSB+IHtWRUNNQVBbMTQ6MF0sIDknaDFGRn0KKyAgICAgKiB8WzI0XSAgICB8SU5URkxBRyAgIHxJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJU1AgaXMgbm90IGZpbmlzaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSVNQIGRvbmUgb3IgSVNQRkYgc2V0LgorICAgICAqIEB2YXIgRk1DX1Q6OkNZQ0NUTAorICAgICAqIE9mZnNldDogMHg0QyAgRmxhc2ggQWNjZXNzIEN5Y2xlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxDWUNMRSAgICAgfEZsYXNoIEFjY2VzcyBDeWNsZSBDb250cm9sIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgaXMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGhhcmR3YXJlIHdoaWxlIEZDWUNESVMgKEZNQ19JU1BTVFNbNF0pIGlzIDAsIGFuZCB1cGRhdGVkIGJ5IHNvZnR3YXJlIHdoaWxlIGF1dG8tdHVuaW5nIGZ1bmN0aW9uIGRpc2FibGVkICggRkFESVMgKEZNQ19DWUNUTFs4XSkgaXMgMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBhdXRvLXR1bmluZyBmdW5jdGlvbiBkaXNhYmxlZCwgdXNlciBuZWVkcyB0byBjaGVjayB0aGUgc3BlZWQgb2YgSENMSyBhbmQgc2V0IHRoZSBjeWNsZSA+MC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gQ1BVIGFjY2VzcyB3aXRoIHplcm8gd2FpdCBjeWNsZSA7IEZsYXNoIGFjY2VzcyBjeWNsZSBpcyAxLiBUaGUgSENMSyB3b3JraW5nIGZyZXF1ZW5jeSByYW5nZSBpcyA8MjdNSHo7IENhY2hlIGlzIGRpc2FibGVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBDUFUgYWNjZXNzIHdpdGggb25lIHdhaXQgY3ljbGUgaWYgY2FjaGUgbWlzczsgRmxhc2ggYWNjZXNzIGN5Y2xlIGlzIDEuIFRoZSBIQ0xLIHdvcmtpbmcgZnJlcXVlbmN5IHJhbmdlIHJhbmdlIGlzPDI3TUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBDUFUgYWNjZXNzIHdpdGggdHdvIHdhaXQgY3ljbGVzIGlmIGNhY2hlIG1pc3M7IEZsYXNoIGFjY2VzcyBjeWNsZSBpcyAyLiBUaGUgb3B0aW1pemVkIEhDTEsgd29ya2luZyBmcmVxdWVuY3kgcmFuZ2UgaXMgMjV+NTIgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBDUFUgYWNjZXNzIHdpdGggdGhyZWUgd2FpdCBjeWNsZXMgaWYgY2FjaGUgbWlzczsgRmxhc2ggYWNjZXNzIGN5Y2xlIGlzIDMuIFRoZSBvcHRpbWl6ZWQgSENMSyB3b3JraW5nIGZyZXF1ZW5jeSByYW5nZSBpcyA0OX43OU1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8RkFESVMgICAgIHxGbGFzaCBBY2Nlc3MgQ3ljbGUgQXV0by10dW5pbmcgRGlzYWJsZWQgQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gZGlzYWJsZSBmbGFzaCBhY2Nlc3MgY3ljbGUgYXV0by10dW5pbmcgZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmxhc2ggYWNjZXNzIGN5Y2xlIGF1dG8tdHVuaW5nIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIEZNQ19UOjpLUEtFWTAKKyAgICAgKiBPZmZzZXQ6IDB4NTAgIEtQUk9NIEtFWTAgRGF0YSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtQS0VZMCAgICB8S1BST00gS0VZMCBEYXRhIChXcml0ZSBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIEtQS0VZMCBkYXRhIHRvIHRoaXMgcmVnaXN0ZXIgYmVmb3JlIEtFWSBDb21wYXJpc29uIG9wZXJhdGlvbi4KKyAgICAgKiBAdmFyIEZNQ19UOjpLUEtFWTEKKyAgICAgKiBPZmZzZXQ6IDB4NTQgIEtQUk9NIEtFWTEgRGF0YSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtQS0VZMSAgICB8S1BST00gS0VZMSBEYXRhIChXcml0ZSBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIEtQS0VZMSBkYXRhIHRvIHRoaXMgcmVnaXN0ZXIgYmVmb3JlIEtFWSBDb21wYXJpc29uIG9wZXJhdGlvbi4KKyAgICAgKiBAdmFyIEZNQ19UOjpLUEtFWTIKKyAgICAgKiBPZmZzZXQ6IDB4NTggIEtQUk9NIEtFWTIgRGF0YSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEtQS0VZMiAgICB8S1BST00gS0VZMiBEYXRhIChXcml0ZSBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIEtQS0VZMiBkYXRhIHRvIHRoaXMgcmVnaXN0ZXIgYmVmb3JlIEtFWSBDb21wYXJpc29uIG9wZXJhdGlvbi4KKyAgICAgKiBAdmFyIEZNQ19UOjpLUEtFWVRSRworICAgICAqIE9mZnNldDogMHg1QyAgS1BST00gS0VZIENvbXBhcmlzb24gVHJpZ2dlciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8S1BLRVlHTyAgIHxLUFJPTSBLRVkgQ29tcGFyaXNvbiBTdGFydCBUcmlnZ2VyIChXcml0ZSBQcm90ZWN0aW9uKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc3RhcnQgS0VZIGNvbXBhcmlzb24gb3BlcmF0aW9uIGFuZCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IHdoZW4gS0VZIGNvbXBhcmlzb24gb3BlcmF0aW9uIGlzIGZpbmlzaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyB0cmlnZ2VyIG9wZXJhdGlvbiBpcyB2YWxpZCB3aGlsZSBGT1JCSUQgKEZNQ19LUEtFWVNUUyBbM10pIGlzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEtFWSBjb21wYXJpc29uIG9wZXJhdGlvbiBpcyBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gS0VZIGNvbXBhcmlzb24gaXMgcHJvZ3Jlc3NlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZS1wcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzFdICAgICB8VENFTiAgICAgIHxUaW1lb3V0IENvdW50aW5nIEVuYWJsZSAoV3JpdGUgUHJvdGVjdGlvbikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZW91dCBjb3VudGluZyBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZW91dCBjb3VudGluZyBpcyBlbmFibGVkIGlmIGlucHV0IGtleSBpcyBtYXRjaGVkIGFmdGVyIGtleSBjb21wYXJpc29uIGZpbmlzaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCBtaW51dGVzIGlzIGF0IGxlYXN0IGZvciB0aW1lb3V0LCBhbmQgYXZlcmFnZSBpcyBhYm91dCAyMCBtaW51dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlLXByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgRk1DX1Q6OktQS0VZU1RTCisgICAgICogT2Zmc2V0OiAweDYwICBLUFJPTSBLRVkgQ29tcGFyaXNvbiBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxLRVlCVVNZICAgfEtFWSBDb21wYXJpc29uIEJ1c3kgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gS0VZIGNvbXBhcmlzb24gaXMgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEtFWSBjb21wYXJpc29uIGlzIGJ1c3kuCisgICAgICogfFsxXSAgICAgfEtFWUxPQ0sgICB8S0VZIExPQ0sgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byAxIGlmIEtFWU1BVENIIChGTUNfS1BLRVlTVFMgWzJdKSBpcyAwIGFuZCBjbGVhcmVkIHRvIDAgaWYgS0VZTUFUQ0ggaXMgMSBpbiBTZWN1cml0eSBLZXkgcHJvdGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIE1hc3MgRXJhc2Ugb3BlcmF0aW9uLCB1c2VycyBtdXN0IHJlc2V0IG9yIHBvd2VyIG9uIC9vZmYgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGFsc28gY2FuIGJlIHNldCB0byAxIHdoaWxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBDUFUgd3JpdGUgMSB0byBLRVlMT0NLKEZNQ19LUEtFWVNUU1sxXSkgb3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxsIEtFWUZMQUcoRk1DX0tQS0VZU1RTWzRdKSBpcyAxIGF0IHBvd2VyLW9uIG9yIHJlc2V0IG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBLRVlFTlJPTSBpcyBwcm9ncmFtbWVkIGEgbm9uLTB4NWEgdmFsdWUgb3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxsIFRpbWVvdXQgZXZlbnQgb3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxsIEZPUkJJRChGTUNfS1BLRVlTVFNbM10pIGlzIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gS1BST00sIExEUk9NIGFuZCBBUFJPTSAobm90IGluY2x1ZGUgRGF0YSBGbGFzaCkgaXMgbm90IGluIHdyaXRlIHByb3RlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEtQUk9NLCBMRFJPTSBhbmQgQVBST00gKG5vdCBpbmNsdWRlIERhdGEgRmxhc2gpIGlzIGluIHdyaXRlIHByb3RlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q09ORklHIHdyaXRlIHByb3RlY3QgaXMgZGVwZW5kZWQgb24gQ0ZHRkxBRworICAgICAqIHxbMl0gICAgIHxLRVlNQVRDSCAgfEtFWSBNYXRjaCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIDEgYWZ0ZXIgS0VZIGNvbXBhcmlzb24gY29tcGxldGUgaWYgdGhlIEtFWTAsIEtFWTEgYW5kIEtFWTIgYXJlIG1hdGNoZWQgd2l0aCB0aGUgOTYtYml0IHNlY3VyaXR5IGtleXMgaW4gS1BST007IGFuZCBjbGVhcmVkIHRvIDAgaWYgS0VZcyBhcmUgdW5tYXRjaGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgYWxzbyBjbGVhcmVkIHRvIDAgd2hpbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxsIENQVSB3cml0aW5nIDEgdG8gS0VZTE9DSyhGTUNfS1BLRVlTVFNbMV0pIG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBUaW1lb3V0IGV2ZW50IG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8bCBLUFJPTSBpcyBlcmFzZWQgb3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxsIEtFWUVOUk9NIGlzIHByb2dyYW1tZWQgdG8gYSBub24tMHg1YSB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxsIENoaXAgaXMgaW4gcG93ZXIgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLRVkwLCBLRVkxLCBhbmQgS0VZMiBhcmUgdW5tYXRjaGVkIHdpdGggdGhlIEtQUk9NIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEtFWTAsIEtFWTEsIGFuZCBLRVkyIGFyZSBtYXRjaGVkIHdpdGggdGhlIEtQUk9NIHNldHRpbmcuCisgICAgICogfFszXSAgICAgfEZPUkJJRCAgICB8S0VZIENvbXBhcmlzb24gRm9yYmlkZGVuIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gMSB3aGVuIEtQS0VDTlQoRk1DX0tQS0VZMFs0OjBdKSBpcyBtb3JlIHRoYW4gS1BLRU1BWCAoRk1DX0tQS0VZMFsxMjo4XSkgb3IgS1BDTlQgKEZNQ19LUENOVCBbMjowXSkgaXMgbW9yZSB0aGFuIEtQTUFYIChGTUNfS1BDTlQgWzEwOjhdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gS0VZIGNvbXBhcmlzb24gaXMgbm90IGZvcmJpZGRlbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gS0VZIGNvbXBhcmlzb24gaXMgZm9yYmlkZGVuLCBLRVlHTyAoRk1DX0tFWVRSRyBbMF0pIGNhbm5vdCB0cmlnZ2VyLgorICAgICAqIHxbNF0gICAgIHxLRVlGTEFHICAgfEtFWSBQcm90ZWN0aW9uIEVuYWJsZWQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGlsZSB0aGUgS0VZRU5ST00gWzc6MF0gaXMgbm90IDB4NWEgYXQgcG93ZXItb24gb3IgcmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgd2hpbGUgS1BST00gaXMgZXJhc2VkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIDEgYnkgaGFyZHdhcmUgd2hpbGUgS0VZRU5ST00gaXMgcHJvZ3JhbW1lZCB0byBhIG5vbi0weDVhIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTZWN1cml0eSBLZXkgcHJvdGVjdGlvbiBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2VjdXJpdHkgS2V5IHByb3RlY3Rpb24gaXMgZW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8Q0ZHRkxBRyAgIHxDT05GSUcgV3JpdGUtcHJvdGVjdGlvbiBFbmFibGVkIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hpbGUgdGhlIEtFWUVOUk9NIFswXSBpcyAwIGF0IHBvd2VyLW9uIG9yIHJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCB0byAwIGJ5IGhhcmR3YXJlIHdoaWxlIEtQUk9NIGlzIGVyYXNlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byAxIGJ5IGhhcmR3YXJlIHdoaWxlIEtFWUVOUk9NWzBdIGlzIHByb2dyYW1tZWQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ09ORklHIHdyaXRlLXByb3RlY3Rpb24gaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENPTkZJRyB3cml0ZS1wcm90ZWN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFNCS1BCVVNZICB8U2VjdXJlIEJvb3QgS2V5IFByb2dyYW1taW5nIEJVU1kgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gMSB3aGlsZSBzZWN1cmUgYm9vdCBrZXkgcHJvZ3JhbSBmdW5jdGlvbiBpcyBydW5uaW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCB0byAwIHdoaWxlIHNlY3VyZSBib290IGtleSBrZXkgcHJvZ3JhbSBmdW5jdGlvbiBoYWQgYmVlbiBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTZWN1cmUgYm9vdCBrZXkgcHJvZ3JhbSBmdW5jdGlvbiBpcyBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZWN1cmUgYm9vdCBrZXkgcHJvZ3JhbSBmdW5jdGlvbiBpcyBidXN5LgorICAgICAqIHxbOV0gICAgIHxTQktQRkxBRyAgfFNlY3VyZSBCb290IEtleSBQcm9ncmFtbWluZyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIDEgd2hpbGUgc2VjdXJlIGJvb3Qga2V5IHByb2dyYW0gZnVuY3Rpb24gZmFpbHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhcmVkIHRvIDAgd2hpbGUgc2VjdXJlIGJvb3Qga2V5IGhhZCBiZWVuIHByb2dyYW1tZWQgaW50byBmbGFzaCBtZW1vcnkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNlY3VyZSBib290IGtleSBwcm9ncmFtIGZ1bmN0aW9uIGlzIHN1Y2Nlc3NmdWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNlY3VyZSBib290IGtleSBwcm9ncmFtIGZ1bmN0aW9uIGZhaWxzLgorICAgICAqIEB2YXIgRk1DX1Q6OktQS0VZQ05UCisgICAgICogT2Zmc2V0OiAweDY0ICBLUFJPTSBLRVktVW5tYXRjaGVkIENvdW50aW5nIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzU6MF0gICB8S1BLRUNOVCAgIHxFcnJvciBLZXkgRW50cnkgQ291bnRlciBhdCBFYWNoIFBvd2VyLW9uIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8S1BLRUNOVCBpcyBpbmNyZWFzZWQgd2hlbiBlbnRyeSBrZXlzIGlzIHdyb25nIGluIFNlY3VyaXR5IEtleSBwcm90ZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8S1BLRUNOVCBpcyBjbGVhcmVkIHRvIDAgaWYga2V5IGNvbXBhcmlzb24gaXMgbWF0Y2hlZCBvciBzeXN0ZW0gcG93ZXItb24uCisgICAgICogfFsxMzo4XSAgfEtQS0VNQVggICB8TWF4aW11bSBOdW1iZXIgZm9yIEVycm9yIEtleSBFbnRyeSBhdCBFYWNoIFBvd2VyLW9uIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8S1BLRU1BWCBpcyB0aGUgbWF4aW11bSBlcnJvciBrZXkgZW50cnkgbnVtYmVyIGF0IGVhY2ggcG93ZXItb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEtQS0VNQVhST00gb2YgS1BST00gaXMgZXJhc2VkIG9yIHByb2dyYW1tZWQsIEtQS0VNQVggd2lsbCBhbHNvIGJlIHVwZGF0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxLUEtFTUFYIGlzIHVzZWQgdG8gbGltaXQgS1BLRUNOVChGTUNfS1BLRVkwWzU6MF0pIG1heGltdW0gY291bnRpbmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgRk9SQklEIChGTUNfS1BLRVlTVFMgWzNdKSB3aWxsIGJlIHNldCB0byAxIHdoZW4gS1BLRUNOVCBpcyBtb3JlIHRoYW4gS1BLRU1BWC4KKyAgICAgKiBAdmFyIEZNQ19UOjpLUENOVAorICAgICAqIE9mZnNldDogMHg2OCAgS1BST00gS0VZLVVubWF0Y2hlZCBQb3dlci1PbiBDb3VudGluZyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfEtQQ05UICAgICB8UG93ZXItb24gQ291bnRlciBmb3IgRXJyb3IgS2V5IEVudHJ5KFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxLUENOVCBpcyB0aGUgcG93ZXItb24gY291bnRpbmcgZm9yIGVycm9yIGtleSBlbnRyeSBpbiBTZWN1cml0eSBLZXkgcHJvdGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEtQQ05UIGlzIGNsZWFyZWQgdG8gMCBpZiBrZXkgY29tcGFyaXNvbiBpcyBtYXRjaGVkLgorICAgICAqIHxbMTE6OF0gIHxLUE1BWCAgICAgfFBvd2VyLW9uIE1heGltdW0gTnVtYmVyIGZvciBFcnJvciBLZXkgRW50cnkgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxLUE1BWCBpcyB0aGUgcG93ZXItb24gbWF4aW11bSBudW1iZXIgZm9yIGVycm9yIGtleSBlbnRyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gS1BNQVhST00gb2YgS1BST00gaXMgZXJhc2VkIG9yIHByb2dyYW1tZWQsIEtQTUFYIHdpbGwgYWxzbyBiZSB1cGRhdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8S1BNQVggaXMgdXNlZCB0byBsaW1pdCBLUENOVCAoRk1DX0tQQ05UIFszOjBdKSBtYXhpbXVtIGNvdW50aW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEZPUkJJRChGTUNfS1BLRVlTVFNbM10pIHdpbGwgYmUgc2V0IHRvIDEgd2hlbiBLUENOVCBpcyBtb3JlIHRoYW4gS1BNQVgKKyAgICAgKiBAdmFyIEZNQ19UOjpNUERBVDAKKyAgICAgKiBPZmZzZXQ6IDB4ODAgIElTUCBEYXRhMCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfElTUERBVDAgICB8SVNQIERhdGEgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgaXMgdGhlIGZpcnN0IDMyLWJpdCBkYXRhIGZvciAzMi1iaXQvNjQtYml0L211bHRpLXdvcmQgcHJvZ3JhbW1pbmcsIGFuZCBpdCBpcyBhbHNvIHRoZSBtaXJyb3Igb2YgRk1DX0lTUERBVCwgYm90aCByZWdpc3RlcnMga2VlcCB0aGUgc2FtZSBkYXRhCisgICAgICogQHZhciBGTUNfVDo6TVBEQVQxCisgICAgICogT2Zmc2V0OiAweDg0ICBJU1AgRGF0YTEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJU1BEQVQxICAgfElTUCBEYXRhIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGlzIHRoZSBzZWNvbmQgMzItYml0IGRhdGEgZm9yIDY0LWJpdC9tdWx0aS13b3JkIHByb2dyYW1taW5nLgorICAgICAqIEB2YXIgRk1DX1Q6Ok1QREFUMgorICAgICAqIE9mZnNldDogMHg4OCAgSVNQIERhdGEyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8SVNQREFUMiAgIHxJU1AgRGF0YSAyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBpcyB0aGUgdGhpcmQgMzItYml0IGRhdGEgZm9yIG11bHRpLXdvcmQgcHJvZ3JhbW1pbmcuCisgICAgICogQHZhciBGTUNfVDo6TVBEQVQzCisgICAgICogT2Zmc2V0OiAweDhDICBJU1AgRGF0YTMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxJU1BEQVQzICAgfElTUCBEYXRhIDMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGlzIHRoZSBmb3VydGggMzItYml0IGRhdGEgZm9yIG11bHRpLXdvcmQgcHJvZ3JhbW1pbmcuCisgICAgICogQHZhciBGTUNfVDo6TVBTVFMKKyAgICAgKiBPZmZzZXQ6IDB4QzAgIElTUCBNdWx0aS1Qcm9ncmFtIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfE1QQlVTWSAgICB8SVNQIE11bHRpLXdvcmQgUHJvZ3JhbSBCdXN5IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHN0YXJ0IElTUCBNdWx0aS1Xb3JkIHByb2dyYW0gb3BlcmF0aW9uIGFuZCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IHdoZW4gSVNQIE11bHRpLVdvcmQgcHJvZ3JhbSBvcGVyYXRpb24gaXMgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdGhlIG1pcnJvciBvZiBJU1BHTyhGTUNfSVNQVFJHWzBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSVNQIE11bHRpLVdvcmQgcHJvZ3JhbSBvcGVyYXRpb24gaXMgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElTUCBNdWx0aS1Xb3JkIHByb2dyYW0gb3BlcmF0aW9uIGlzIHByb2dyZXNzZWQuCisgICAgICogfFsxXSAgICAgfFBQR08gICAgICB8SVNQIE11bHRpLXByb2dyYW0gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElTUCBtdWx0aS13b3JkIHByb2dyYW0gb3BlcmF0aW9uIGlzIG5vdCBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElTUCBtdWx0aS13b3JkIHByb2dyYW0gb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLgorICAgICAqIHxbMl0gICAgIHxJU1BGRiAgICAgfElTUCBGYWlsIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB0aGUgbWlycm9yIG9mIElTUEZGIChGTUNfSVNQQ1RMWzZdKSwgaXQgbmVlZHMgdG8gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gRk1DX0lTUENUTFs2XSBvciBGTUNfSVNQU1RTWzZdCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gYSB0cmlnZ2VyZWQgSVNQIG1lZXRzIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDEpIEFQUk9NIHdyaXRlcyB0byBpdHNlbGYgaWYgQVBVRU4gaXMgc2V0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDIpIExEUk9NIHdyaXRlcyB0byBpdHNlbGYgaWYgTERVRU4gaXMgc2V0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDMpIENPTkZJRyBpcyBlcmFzZWQvcHJvZ3JhbW1lZCBpZiBDRkdVRU4gaXMgc2V0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDQpIFBhZ2UgRXJhc2UgY29tbWFuZCBhdCBMT0NLIG1vZGUgd2l0aCBJQ0UgY29ubmVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCg1KSBFcmFzZSBvciBQcm9ncmFtIGNvbW1hbmQgYXQgYnJvd24tb3V0IGRldGVjdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8KDYpIERlc3RpbmF0aW9uIGFkZHJlc3MgaXMgaWxsZWdhbCwgc3VjaCBhcyBvdmVyIGFuIGF2YWlsYWJsZSByYW5nZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoNykgSW52YWxpZCBJU1AgY29tbWFuZHMKKyAgICAgKiB8WzRdICAgICB8RDAgICAgICAgIHxJU1AgREFUQSAwIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBGTUNfTVBEQVQwIGlzIHdyaXR0ZW4gYW5kIGF1dG8tY2xlYXIgdG8gMCB3aGVuIHRoZSBGTUNfTVBEQVQwIGRhdGEgaXMgcHJvZ3JhbW1lZCB0byBmbGFzaCBjb21wbGV0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRk1DX01QREFUMCByZWdpc3RlciBpcyBlbXB0eSwgb3IgcHJvZ3JhbSB0byBmbGFzaCBjb21wbGV0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRk1DX01QREFUMCByZWdpc3RlciBoYXMgYmVlbiB3cml0dGVuLCBhbmQgbm90IHByb2dyYW0gdG8gZmxhc2ggY29tcGxldGUuCisgICAgICogfFs1XSAgICAgfEQxICAgICAgICB8SVNQIERBVEEgMSBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gRk1DX01QREFUMSBpcyB3cml0dGVuIGFuZCBhdXRvLWNsZWFyIHRvIDAgd2hlbiB0aGUgRk1DX01QREFUMSBkYXRhIGlzIHByb2dyYW1tZWQgdG8gZmxhc2ggY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZNQ19NUERBVDEgcmVnaXN0ZXIgaXMgZW1wdHksIG9yIHByb2dyYW0gdG8gZmxhc2ggY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZNQ19NUERBVDEgcmVnaXN0ZXIgaGFzIGJlZW4gd3JpdHRlbiwgYW5kIG5vdCBwcm9ncmFtIHRvIGZsYXNoIGNvbXBsZXRlLgorICAgICAqIHxbNl0gICAgIHxEMiAgICAgICAgfElTUCBEQVRBIDIgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIEZNQ19NUERBVDIgaXMgd3JpdHRlbiBhbmQgYXV0by1jbGVhciB0byAwIHdoZW4gdGhlIEZNQ19NUERBVDIgZGF0YSBpcyBwcm9ncmFtbWVkIHRvIGZsYXNoIGNvbXBsZXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBGTUNfTVBEQVQyIHJlZ2lzdGVyIGlzIGVtcHR5LCBvciBwcm9ncmFtIHRvIGZsYXNoIGNvbXBsZXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBGTUNfTVBEQVQyIHJlZ2lzdGVyIGhhcyBiZWVuIHdyaXR0ZW4sIGFuZCBub3QgcHJvZ3JhbSB0byBmbGFzaCBjb21wbGV0ZS4KKyAgICAgKiB8WzddICAgICB8RDMgICAgICAgIHxJU1AgREFUQSAzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBGTUNfTVBEQVQzIGlzIHdyaXR0ZW4gYW5kIGF1dG8tY2xlYXIgdG8gMCB3aGVuIHRoZSBGTUNfTVBEQVQzIGRhdGEgaXMgcHJvZ3JhbW1lZCB0byBmbGFzaCBjb21wbGV0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRk1DX01QREFUMyByZWdpc3RlciBpcyBlbXB0eSwgb3IgcHJvZ3JhbSB0byBmbGFzaCBjb21wbGV0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRk1DX01QREFUMyByZWdpc3RlciBoYXMgYmVlbiB3cml0dGVuLCBhbmQgbm90IHByb2dyYW0gdG8gZmxhc2ggY29tcGxldGUuCisgICAgICogQHZhciBGTUNfVDo6TVBBRERSCisgICAgICogT2Zmc2V0OiAweEM0ICBJU1AgTXVsdGktUHJvZ3JhbSBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8TVBBRERSICAgIHxJU1AgTXVsdGktd29yZCBQcm9ncmFtIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNUEFERFIgaXMgdGhlIGFkZHJlc3Mgb2YgSVNQIG11bHRpLXdvcmQgcHJvZ3JhbSBvcGVyYXRpb24gd2hlbiBJU1BHTyBmbGFnIGlzIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TVBBRERSIHdpbGwga2VlcCB0aGUgZmluYWwgSVNQIGFkZHJlc3Mgd2hlbiBJU1AgbXVsdGktd29yZCBwcm9ncmFtIGlzIGNvbXBsZXRlLgorICAgICAqIEB2YXIgRk1DX1Q6OlhPTVIwU1RTCisgICAgICogT2Zmc2V0OiAweEQwICBYT00gUmVnaW9uIDAgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8U0laRSAgICAgIHxYT00gUmVnaW9uIDAgU2l6ZSAoUGFnZS1hbGlnbmVkKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNJWkUgaXMgdGhlIHBhZ2UgbnVtYmVyIG9mIFhPTSBSZWdpb24gMC4KKyAgICAgKiB8WzMxOjhdICB8QkFTRSAgICAgIHxYT00gUmVnaW9uIDAgQmFzZSBBZGRyZXNzIChQYWdlLWFsaWduZWQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QkFTRSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIFhPTSBSZWdpb24gMC4KKyAgICAgKiBAdmFyIEZNQ19UOjpYT01SMVNUUworICAgICAqIE9mZnNldDogMHhENCAgWE9NIFJlZ2lvbiAxIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFNJWkUgICAgICB8WE9NIFJlZ2lvbiAxIFNpemUgKFBhZ2UtYWxpZ25lZCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTSVpFIGlzIHRoZSBwYWdlIG51bWJlciBvZiBYT00gUmVnaW9uIDEuCisgICAgICogfFszMTo4XSAgfEJBU0UgICAgICB8WE9NIFJlZ2lvbiAxIEJhc2UgQWRkcmVzcyAoUGFnZS1hbGlnbmVkKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJBU0UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBYT00gUmVnaW9uIDEuCisgICAgICogQHZhciBGTUNfVDo6WE9NUjJTVFMKKyAgICAgKiBPZmZzZXQ6IDB4RDggIFhPTSBSZWdpb24gMiBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxTSVpFICAgICAgfFhPTSBSZWdpb24gMiBTaXplIChQYWdlLWFsaWduZWQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0laRSBpcyB0aGUgcGFnZSBudW1iZXIgb2YgWE9NIFJlZ2lvbiAyLgorICAgICAqIHxbMzE6OF0gIHxCQVNFICAgICAgfFhPTSBSZWdpb24gMiBCYXNlIEFkZHJlc3MgKFBhZ2UtYWxpZ25lZCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCQVNFIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgWE9NIFJlZ2lvbiAyLgorICAgICAqIEB2YXIgRk1DX1Q6OlhPTVIzU1RTCisgICAgICogT2Zmc2V0OiAweERDICBYT00gUmVnaW9uIDMgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8U0laRSAgICAgIHxYT00gUmVnaW9uIDMgU2l6ZSAoUGFnZS1hbGlnbmVkKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNJWkUgaXMgdGhlIHBhZ2UgbnVtYmVyIG9mIFhPTSBSZWdpb24gMy4KKyAgICAgKiB8WzMxOjhdICB8QkFTRSAgICAgIHxYT00gUmVnaW9uIDMgQmFzZSBBZGRyZXNzIChQYWdlLWFsaWduZWQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QkFTRSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIFhPTSBSZWdpb24gMy4KKyAgICAgKiBAdmFyIEZNQ19UOjpYT01TVFMKKyAgICAgKiBPZmZzZXQ6IDB4RTAgIFhPTSBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxYT01SME9OICAgfFhPTSBSZWdpb24gMCBPbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFhPTSBSZWdpb24gMCBhY3RpdmUgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFhPTSByZWdpb24gMCBpcyBhY3RpdmUuCisgICAgICogfFsxXSAgICAgfFhPTVIxT04gICB8WE9NIFJlZ2lvbiAxIE9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8WE9NIFJlZ2lvbiAxIGFjdGl2ZSBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gWE9NIHJlZ2lvbiAxIGlzIGFjdGl2ZS4KKyAgICAgKiB8WzJdICAgICB8WE9NUjJPTiAgIHxYT00gUmVnaW9uIDIgT24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxYT00gUmVnaW9uIDIgYWN0aXZlIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBYT00gcmVnaW9uIDIgaXMgYWN0aXZlLgorICAgICAqIHxbM10gICAgIHxYT01SM09OICAgfFhPTSBSZWdpb24gMyBPbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFhPTSBSZWdpb24gMyBhY3RpdmUgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFhPTSByZWdpb24gMyBpcyBhY3RpdmUuCisgICAgICogfFs0XSAgICAgfFhPTVBFRiAgICB8WE9NIFBhZ2UgRXJhc2UgRnVuY3Rpb24gRmFpbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFhPTSBwYWdlIGVyYXNlIGZ1bmN0aW9uIHN0YXR1cy4gSWYgWE9NUEVGIGlzIHNldCB0byAxLCB1c2VyIG5lZWRzIHRvIGVyYXNlIFhPTSByZWdpb24gYWdhaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN1Y2Nlc3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZhaWwuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJU1BDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gSVNQIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSVNQQUREUjsgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIElTUCBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElTUERBVDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBJU1AgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJU1BDTUQ7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gSVNQIENvbW1hbmQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSVNQVFJHOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIElTUCBUcmlnZ2VyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzExXTsKKyAgICBfX0lPIHVpbnQzMl90IElTUFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDQwXSBJU1AgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVsyXTsKKyAgICBfX0lPIHVpbnQzMl90IENZQ0NUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDRjXSBGbGFzaCBBY2Nlc3MgQ3ljbGUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBLUEtFWTA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1MF0gS1BST00gS0VZMCBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgS1BLRVkxOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNTRdIEtQUk9NIEtFWTEgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IEtQS0VZMjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDU4XSBLUFJPTSBLRVkyIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBLUEtFWVRSRzsgICAgICAgICAgICAgIC8qITwgWzB4MDA1Y10gS1BST00gS0VZIENvbXBhcmlzb24gVHJpZ2dlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgS1BLRVlTVFM7ICAgICAgICAgICAgICAvKiE8IFsweDAwNjBdIEtQUk9NIEtFWSBDb21wYXJpc29uIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEtQS0VZQ05UOyAgICAgICAgICAgICAgLyohPCBbMHgwMDY0XSBLUFJPTSBLRVktVW5tYXRjaGVkIENvdW50aW5nIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBLUENOVDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA2OF0gS1BST00gS0VZLVVubWF0Y2hlZCBQb3dlci1PbiBDb3VudGluZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbNV07CisgICAgX19JTyB1aW50MzJfdCBNUERBVDA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA4MF0gSVNQIERhdGEwIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTVBEQVQxOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwODRdIElTUCBEYXRhMSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE1QREFUMjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDg4XSBJU1AgRGF0YTIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBNUERBVDM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA4Y10gSVNQIERhdGEzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTNbMTJdOworICAgIF9fSSAgdWludDMyX3QgTVBTVFM7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwYzBdIElTUCBNdWx0aS1Qcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IE1QQUREUjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGM0XSBJU1AgTXVsdGktUHJvZ3JhbSBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNFsyXTsKKyAgICBfX0kgIHVpbnQzMl90IFhPTVIwU1RTOyAgICAgICAgICAgICAgLyohPCBbMHgwMGQwXSBYT00gUmVnaW9uIDAgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBYT01SMVNUUzsgICAgICAgICAgICAgIC8qITwgWzB4MDBkNF0gWE9NIFJlZ2lvbiAxIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgWE9NUjJTVFM7ICAgICAgICAgICAgICAvKiE8IFsweDAwZDhdIFhPTSBSZWdpb24gMiBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFhPTVIzU1RTOyAgICAgICAgICAgICAgLyohPCBbMHgwMGRjXSBYT00gUmVnaW9uIDMgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBYT01TVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDBlMF0gWE9NIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IEZNQ19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBGTUNfQ09OU1QgRk1DIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIEZNQyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIEZNQ19JU1BDVExfSVNQRU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBJU1BFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ1RMX0lTUEVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUENUTF9JU1BFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogSVNQRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQQ1RMX0JTX1BvcyAgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogQlMgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUENUTF9CU19Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BDVExfQlNfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IEJTIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUENUTF9BUFVFTl9Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IEFQVUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDVExfQVBVRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQQ1RMX0FQVUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBBUFVFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BDVExfQ0ZHVUVOX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBDRkdVRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ1RMX0NGR1VFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUENUTF9DRkdVRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogQ0ZHVUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQQ1RMX0xEVUVOX1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogTERVRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUENUTF9MRFVFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BDVExfTERVRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IExEVUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUENUTF9JU1BGRl9Qb3MgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IElTUEZGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDVExfSVNQRkZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQQ1RMX0lTUEZGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBJU1BGRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BDVExfQkxfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQQ1RMOiBCTCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ1RMX0JMX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUENUTF9CTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogQkwgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQQ1RMX0lOVEVOX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENUTDogSU5URU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUENUTF9JTlRFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BDVExfSU5URU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDVEw6IElOVEVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUEFERFJfSVNQQUREUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BBRERSOiBJU1BBRERSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BBRERSX0lTUEFERFJfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgRk1DX0lTUEFERFJfSVNQQUREUl9Qb3MpICAgICAgICAgLyohPCBGTUNfVDo6SVNQQUREUjogSVNQQUREUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BEQVRfSVNQREFUX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQREFUOiBJU1BEQVQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQREFUX0lTUERBVF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IEZNQ19JU1BEQVRfSVNQREFUX1BvcykgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUERBVDogSVNQREFUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQQ01EX0NNRF9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUENNRDogQ01EIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUENNRF9DTURfTXNrICAgICAgICAgICAgICAgKDB4N2Z1bCA8PCBGTUNfSVNQQ01EX0NNRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BDTUQ6IENNRCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUFRSR19JU1BHT19Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BUUkc6IElTUEdPIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BUUkdfSVNQR09fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQVFJHX0lTUEdPX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQVFJHOiBJU1BHTyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BTVFNfSVNQQlVTWV9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBJU1BCVVNZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQU1RTX0lTUEJVU1lfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUFNUU19JU1BCVVNZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogSVNQQlVTWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQU1RTX0NCU19Qb3MgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogQ0JTIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUFNUU19DQlNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BTVFNfQ0JTX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IENCUyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUFNUU19NQlNfUG9zICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IE1CUyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BTVFNfTUJTX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQU1RTX01CU19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBNQlMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BTVFNfRkNZQ0RJU19Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBGQ1lDRElTIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQU1RTX0ZDWUNESVNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUFNUU19GQ1lDRElTX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogRkNZQ0RJUyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQU1RTX1BHRkZfUG9zICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogUEdGRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUFNUU19QR0ZGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19JU1BTVFNfUEdGRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IFBHRkYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUFNUU19JU1BGRl9Qb3MgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IElTUEZGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BTVFNfSVNQRkZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQU1RTX0lTUEZGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBJU1BGRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19JU1BTVFNfQUxMT05FX1BvcyAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBBTExPTkUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfSVNQU1RTX0FMTE9ORV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0lTUFNUU19BTExPTkVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogQUxMT05FIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfSVNQU1RTX1ZFQ01BUF9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OklTUFNUUzogVkVDTUFQIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0lTUFNUU19WRUNNQVBfTXNrICAgICAgICAgICAgKDB4N2ZmZnVsIDw8IEZNQ19JU1BTVFNfVkVDTUFQX1BvcykgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IFZFQ01BUCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0lTUFNUU19JTlRGTEFHX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpJU1BTVFM6IElOVEZMQUcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BTVFNfSU5URkxBR19Nc2sgICAgICAgICAgICgweDF1bCA8PCBGTUNfSVNQU1RTX0lOVEZMQUdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6SVNQU1RTOiBJTlRGTEFHIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19DWUNDVExfQ1lDTEVfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6Q1lDQ1RMOiBDWUNMRSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBGTUNfQ1lDQ1RMX0NZQ0xFX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgRk1DX0NZQ0NUTF9DWUNMRV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OkNZQ0NUTDogQ1lDTEUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfQ1lDQ1RMX0ZBRElTX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OkNZQ0NUTDogRkFESVMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0NZQ0NUTF9GQURJU19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19DWUNDVExfRkFESVNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpDWUNDVEw6IEZBRElTIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZMF9LUEtFWTBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWTA6IEtQS0VZMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19LUEtFWTBfS1BLRVkwX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgRk1DX0tQS0VZMF9LUEtFWTBfUG9zKSAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVkwOiBLUEtFWTAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWTFfS1BLRVkxX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVkxOiBLUEtFWTEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfS1BLRVkxX0tQS0VZMV9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IEZNQ19LUEtFWTFfS1BLRVkxX1BvcykgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZMTogS1BLRVkxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVkyX0tQS0VZMl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZMjogS1BLRVkyIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZMl9LUEtFWTJfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBGTUNfS1BLRVkyX0tQS0VZMl9Qb3MpICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWTI6IEtQS0VZMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZVFJHX0tQS0VZR09fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVRSRzogS1BLRVlHTyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEZNQ19LUEtFWVRSR19LUEtFWUdPX01zayAgICAgICAgICgweDF1bCA8PCBGTUNfS1BLRVlUUkdfS1BLRVlHT19Qb3MpICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlUUkc6IEtQS0VZR08gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWVRSR19UQ0VOX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlUUkc6IFRDRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfS1BLRVlUUkdfVENFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX0tQS0VZVFJHX1RDRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZVFJHOiBUQ0VOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVlTVFNfS0VZQlVTWV9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBLRVlCVVNZIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZU1RTX0tFWUJVU1lfTXNrICAgICAgICAgKDB4MXVsIDw8IEZNQ19LUEtFWVNUU19LRVlCVVNZX1BvcykgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogS0VZQlVTWSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZU1RTX0tFWUxPQ0tfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogS0VZTE9DSyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEZNQ19LUEtFWVNUU19LRVlMT0NLX01zayAgICAgICAgICgweDF1bCA8PCBGTUNfS1BLRVlTVFNfS0VZTE9DS19Qb3MpICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IEtFWUxPQ0sgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWVNUU19LRVlNQVRDSF9Qb3MgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IEtFWU1BVENIIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBGTUNfS1BLRVlTVFNfS0VZTUFUQ0hfTXNrICAgICAgICAoMHgxdWwgPDwgRk1DX0tQS0VZU1RTX0tFWU1BVENIX1BvcykgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBLRVlNQVRDSCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVlTVFNfRk9SQklEX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBGT1JCSUQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZU1RTX0ZPUkJJRF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEZNQ19LUEtFWVNUU19GT1JCSURfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogRk9SQklEIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZU1RTX0tFWUZMQUdfUG9zICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogS0VZRkxBRyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEZNQ19LUEtFWVNUU19LRVlGTEFHX01zayAgICAgICAgICgweDF1bCA8PCBGTUNfS1BLRVlTVFNfS0VZRkxBR19Qb3MpICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IEtFWUZMQUcgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWVNUU19DRkdGTEFHX1BvcyAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IENGR0ZMQUcgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBGTUNfS1BLRVlTVFNfQ0ZHRkxBR19Nc2sgICAgICAgICAoMHgxdWwgPDwgRk1DX0tQS0VZU1RTX0NGR0ZMQUdfUG9zKSAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBDRkdGTEFHIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVlTVFNfU0JLUEJVU1lfUG9zICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZU1RTOiBTQktQQlVTWSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZU1RTX1NCS1BCVVNZX01zayAgICAgICAgKDB4MXVsIDw8IEZNQ19LUEtFWVNUU19TQktQQlVTWV9Qb3MpICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogU0JLUEJVU1kgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQS0VZU1RTX1NCS1BGTEFHX1BvcyAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWVNUUzogU0JLUEZMQUcgUG9zaXRpb24gICAgICovCisjZGVmaW5lIEZNQ19LUEtFWVNUU19TQktQRkxBR19Nc2sgICAgICAgICgweDF1bCA8PCBGTUNfS1BLRVlTVFNfU0JLUEZMQUdfUG9zKSAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlTVFM6IFNCS1BGTEFHIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUEtFWUNOVF9LUEtFQ05UX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BLRVlDTlQ6IEtQS0VDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBGTUNfS1BLRVlDTlRfS1BLRUNOVF9Nc2sgICAgICAgICAoMHgzZnVsIDw8IEZNQ19LUEtFWUNOVF9LUEtFQ05UX1BvcykgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZQ05UOiBLUEtFQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfS1BLRVlDTlRfS1BLRU1BWF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQS0VZQ05UOiBLUEtFTUFYIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQS0VZQ05UX0tQS0VNQVhfTXNrICAgICAgICAgKDB4M2Z1bCA8PCBGTUNfS1BLRVlDTlRfS1BLRU1BWF9Qb3MpICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUEtFWUNOVDogS1BLRU1BWCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX0tQQ05UX0tQQ05UX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpLUENOVDogS1BDTlQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEZNQ19LUENOVF9LUENOVF9Nc2sgICAgICAgICAgICAgICgweGZ1bCA8PCBGTUNfS1BDTlRfS1BDTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BDTlQ6IEtQQ05UIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19LUENOVF9LUE1BWF9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6S1BDTlQ6IEtQTUFYIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBGTUNfS1BDTlRfS1BNQVhfTXNrICAgICAgICAgICAgICAoMHhmdWwgPDwgRk1DX0tQQ05UX0tQTUFYX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OktQQ05UOiBLUE1BWCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfTVBEQVQwX0lTUERBVDBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QREFUMDogSVNQREFUMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRk1DX01QREFUMF9JU1BEQVQwX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBGTUNfTVBEQVQwX0lTUERBVDBfUG9zKSAgICAgICAgICAvKiE8IEZNQ19UOjpNUERBVDA6IElTUERBVDAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX01QREFUMV9JU1BEQVQxX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUERBVDE6IElTUERBVDEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEZNQ19NUERBVDFfSVNQREFUMV9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgRk1DX01QREFUMV9JU1BEQVQxX1BvcykgICAgICAgICAgLyohPCBGTUNfVDo6TVBEQVQxOiBJU1BEQVQxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19NUERBVDJfSVNQREFUMl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBEQVQyOiBJU1BEQVQyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBGTUNfTVBEQVQyX0lTUERBVDJfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IEZNQ19NUERBVDJfSVNQREFUMl9Qb3MpICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QREFUMjogSVNQREFUMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfTVBEQVQzX0lTUERBVDNfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QREFUMzogSVNQREFUMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRk1DX01QREFUM19JU1BEQVQzX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBGTUNfTVBEQVQzX0lTUERBVDNfUG9zKSAgICAgICAgICAvKiE8IEZNQ19UOjpNUERBVDM6IElTUERBVDMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX01QU1RTX01QQlVTWV9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUFNUUzogTVBCVVNZIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEZNQ19NUFNUU19NUEJVU1lfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfTVBTVFNfTVBCVVNZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IE1QQlVTWSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19NUFNUU19QUEdPX1BvcyAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IFBQR08gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBGTUNfTVBTVFNfUFBHT19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX01QU1RTX1BQR09fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QU1RTOiBQUEdPIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfTVBTVFNfSVNQRkZfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QU1RTOiBJU1BGRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX01QU1RTX0lTUEZGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19NUFNUU19JU1BGRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUFNUUzogSVNQRkYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX01QU1RTX0QwX1BvcyAgICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUFNUUzogRDAgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19NUFNUU19EMF9Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfTVBTVFNfRDBfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IEQwIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19NUFNUU19EMV9Qb3MgICAgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IEQxIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfTVBTVFNfRDFfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgRk1DX01QU1RTX0QxX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QU1RTOiBEMSBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfTVBTVFNfRDJfUG9zICAgICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QU1RTOiBEMiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX01QU1RTX0QyX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19NUFNUU19EMl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUFNUUzogRDIgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX01QU1RTX0QzX1BvcyAgICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpNUFNUUzogRDMgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19NUFNUU19EM19Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBGTUNfTVBTVFNfRDNfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBTVFM6IEQzIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19NUEFERFJfTVBBRERSX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6TVBBRERSOiBNUEFERFIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfTVBBRERSX01QQUREUl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IEZNQ19NUEFERFJfTVBBRERSX1BvcykgICAgICAgICAgIC8qITwgRk1DX1Q6Ok1QQUREUjogTVBBRERSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfWE9NUjBTVFNfU0laRV9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIwU1RTOiBTSVpFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTVIwU1RTX1NJWkVfTXNrICAgICAgICAgICAgKDB4ZmZ1bCA8PCBGTUNfWE9NUjBTVFNfU0laRV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SMFNUUzogU0laRSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX1hPTVIwU1RTX0JBU0VfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SMFNUUzogQkFTRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19YT01SMFNUU19CQVNFX01zayAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IEZNQ19YT01SMFNUU19CQVNFX1BvcykgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjBTVFM6IEJBU0UgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19YT01SMVNUU19TSVpFX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjFTVFM6IFNJWkUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NUjFTVFNfU0laRV9Nc2sgICAgICAgICAgICAoMHhmZnVsIDw8IEZNQ19YT01SMVNUU19TSVpFX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIxU1RTOiBTSVpFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfWE9NUjFTVFNfQkFTRV9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIxU1RTOiBCQVNFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTVIxU1RTX0JBU0VfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgRk1DX1hPTVIxU1RTX0JBU0VfUG9zKSAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SMVNUUzogQkFTRSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX1hPTVIyU1RTX1NJWkVfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SMlNUUzogU0laRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19YT01SMlNUU19TSVpFX01zayAgICAgICAgICAgICgweGZmdWwgPDwgRk1DX1hPTVIyU1RTX1NJWkVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjJTVFM6IFNJWkUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19YT01SMlNUU19CQVNFX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjJTVFM6IEJBU0UgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NUjJTVFNfQkFTRV9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBGTUNfWE9NUjJTVFNfQkFTRV9Qb3MpICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIyU1RTOiBCQVNFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfWE9NUjNTVFNfU0laRV9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVIzU1RTOiBTSVpFIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTVIzU1RTX1NJWkVfTXNrICAgICAgICAgICAgKDB4ZmZ1bCA8PCBGTUNfWE9NUjNTVFNfU0laRV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SM1NUUzogU0laRSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX1hPTVIzU1RTX0JBU0VfUG9zICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01SM1NUUzogQkFTRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEZNQ19YT01SM1NUU19CQVNFX01zayAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IEZNQ19YT01SM1NUU19CQVNFX1BvcykgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NUjNTVFM6IEJBU0UgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19YT01TVFNfWE9NUjBPTl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NU1RTOiBYT01SME9OIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NU1RTX1hPTVIwT05fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRk1DX1hPTVNUU19YT01SME9OX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVNUUzogWE9NUjBPTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfWE9NU1RTX1hPTVIxT05fUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVNUUzogWE9NUjFPTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTVNUU19YT01SMU9OX01zayAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19YT01TVFNfWE9NUjFPTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01TVFM6IFhPTVIxT04gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgRk1DX1hPTVNUU19YT01SMk9OX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01TVFM6IFhPTVIyT04gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEZNQ19YT01TVFNfWE9NUjJPTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBGTUNfWE9NU1RTX1hPTVIyT05fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NU1RTOiBYT01SMk9OIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEZNQ19YT01TVFNfWE9NUjNPTl9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTUNfVDo6WE9NU1RTOiBYT01SM09OIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NU1RTX1hPTVIzT05fTXNrICAgICAgICAgICAoMHgxdWwgPDwgRk1DX1hPTVNUU19YT01SM09OX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVNUUzogWE9NUjNPTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBGTUNfWE9NU1RTX1hPTVBFRl9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRk1DX1Q6OlhPTVNUUzogWE9NUEVGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX1hPTVNUU19YT01QRUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEZNQ19YT01TVFNfWE9NUEVGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZNQ19UOjpYT01TVFM6IFhPTVBFRiBNYXNrICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogRk1DX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBGTUMgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX0ZNQ19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZ3Bpb19yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9ncGlvX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMWMwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvZ3Bpb19yZWcuaApAQCAtMCwwICsxLDk2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGdwaW9fcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIEdQSU8gcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fR1BJT19SRUdfSF9fCisjZGVmaW5lIF9fR1BJT19SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdlbmVyYWwgUHVycG9zZSBJbnB1dC9PdXRwdXQgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIEdQSU8gR2VuZXJhbCBQdXJwb3NlIElucHV0L091dHB1dCBDb250cm9sbGVyKEdQSU8pCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIEdQSU8gQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBHUElPX1Q6Ok1PREUKKyAgICAgKiBPZmZzZXQ6IDB4MDAvMHg0MC8weDgwLzB4QzAvMHgxMDAvMHgxNDAvMHgxODAvMHgxQzAgIFBBLUggSS9PIE1vZGUgQ29udHJvbAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsybisxOjJuXXxNT0RFbiAgICB8UG9ydCBBLUggSS9PIFBpbltuXSBNb2RlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZXRlcm1pbmUgZWFjaCBJL08gbW9kZSBvZiBQeC5uIHBpbnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQeC5uIGlzIGluIElucHV0IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQeC5uIGlzIGluIFB1c2gtcHVsbCBPdXRwdXQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFB4Lm4gaXMgaW4gT3Blbi1kcmFpbiBPdXRwdXQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFB4Lm4gaXMgaW4gUXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGlzIGZpZWxkIGlzIGRlZmluZWQgYnkgQ0lPSU5JIChDT05GSUcwIFsxMF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIENJT0lOSSBpcyBzZXQgdG8gMCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMHhGRkZGX0ZGRkYgYW5kIGFsbCBwaW5zIHdpbGwgYmUgcXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlIGFmdGVyIGNoaXAgcG93ZXJlZCBvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBDSU9JTkkgaXMgc2V0IHRvIDEsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDB4MDAwMF8wMDAwIGFuZCBhbGwgcGlucyB3aWxsIGJlIGlucHV0IG1vZGUgYWZ0ZXIgY2hpcCBwb3dlcmVkIG9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIEB2YXIgR1BJT19UOjpESU5PRkYKKyAgICAgKiBPZmZzZXQ6IDB4MDQvMHg0NC8weDg0LzB4QzQvMHgxMDQvMHgxNDQvMHgxODQvMHgxQzQgIFBBLUggRGlnaXRhbCBJbnB1dCBQYXRoIERpc2FibGUgQ29udHJvbAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFtuKzE2XSAgfERJTk9GRm4gICB8UG9ydCBBLUggUGluW25dIERpZ2l0YWwgSW5wdXQgUGF0aCBEaXNhYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIG9mIHRoZXNlIGJpdHMgaXMgdXNlZCB0byBjb250cm9sIGlmIHRoZSBkaWdpdGFsIGlucHV0IHBhdGggb2YgY29ycmVzcG9uZGluZyBQeC5uIHBpbiBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBpbnB1dCBpcyBhbmFsb2cgc2lnbmFsLCB1c2VycyBjYW4gZGlzYWJsZSBQeC5uIGRpZ2l0YWwgaW5wdXQgcGF0aCB0byBhdm9pZCBpbnB1dCBjdXJyZW50IGxlYWthZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFB4Lm4gZGlnaXRhbCBpbnB1dCBwYXRoIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFB4Lm4gZGlnaXRhbCBpbnB1dCBwYXRoIERpc2FibGVkIChkaWdpdGFsIGlucHV0IHRpZWQgdG8gbG93KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIEB2YXIgR1BJT19UOjpET1VUCisgICAgICogT2Zmc2V0OiAweDA4LzB4NDgvMHg4OC8weEM4LzB4MTA4LzB4MTQ4LzB4MTg4LzB4MUM4ICBQQS1IIERhdGEgT3V0cHV0IFZhbHVlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8W25dICAgICB8RE9VVG4gICAgIHxQb3J0IEEtSCBQaW5bbl0gT3V0cHV0IFZhbHVlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RWFjaCBvZiB0aGVzZSBiaXRzIGNvbnRyb2xzIHRoZSBzdGF0dXMgb2YgYSBQeC5uIHBpbiB3aGVuIHRoZSBQeC5uIGlzIGNvbmZpZ3VyZWQgYXMgUHVzaC1wdWxsIG91dHB1dCwgT3Blbi1kcmFpbiBvdXRwdXQgb3IgUXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQeC5uIHdpbGwgZHJpdmUgTG93IGlmIHRoZSBQeC5uIHBpbiBpcyBjb25maWd1cmVkIGFzIFB1c2gtcHVsbCBvdXRwdXQsIE9wZW4tZHJhaW4gb3V0cHV0IG9yIFF1YXNpLWJpZGlyZWN0aW9uYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHgubiB3aWxsIGRyaXZlIEhpZ2ggaWYgdGhlIFB4Lm4gcGluIGlzIGNvbmZpZ3VyZWQgYXMgUHVzaC1wdWxsIG91dHB1dCBvciBRdWFzaS1iaWRpcmVjdGlvbmFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIEdQSU9fVDo6REFUTVNLCisgICAgICogT2Zmc2V0OiAweDBDLzB4NEMvMHg4Qy8weENDLzB4MTBDLzB4MTRDLzB4MThDLzB4MUNDICBQQS1IIERhdGEgT3V0cHV0IFdyaXRlIE1hc2sKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbbl0gICAgIHxEQVRNU0tuICAgfFBvcnQgQS1IIFBpbltuXSBEYXRhIE91dHB1dCBXcml0ZSBNYXNrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBjb3JyZXNwb25kaW5nIERPVVQgKFB4X0RPVVRbbl0pIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBEQVRNU0sgKFB4X0RBVE1TS1tuXSkgYml0IGlzIHNldCB0byAxLCB0aGUgY29ycmVzcG9uZGluZyBET1VUIChQeF9ET1VUW25dKSBiaXQgaXMgcHJvdGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSB3cml0ZSBzaWduYWwgaXMgbWFza2VkLCB3cml0aW5nIGRhdGEgdG8gdGhlIHByb3RlY3QgYml0IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvcnJlc3BvbmRpbmcgRE9VVCAoUHhfRE9VVFtuXSkgYml0IGNhbiBiZSB1cGRhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb3JyZXNwb25kaW5nIERPVVQgKFB4X0RPVVRbbl0pIGJpdCBwcm90ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgZnVuY3Rpb24gb25seSBwcm90ZWN0cyB0aGUgY29ycmVzcG9uZGluZyBET1VUIChQeF9ET1VUW25dKSBiaXQsIGFuZCB3aWxsIG5vdCBwcm90ZWN0IHRoZSBjb3JyZXNwb25kaW5nIFBESU8gKFB4bl9QRElPWzBdKSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEEvQi9FLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMyBmb3IgcG9ydCBDLiBUaGUgUEMuMTQvIFBDLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE0IGZvciBwb3J0IEQuIFRoZSBQRC4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMiBmb3IgcG9ydCBGLiBUaGUgUEYuMTIvIFBGLjEzLyBQRi4xNC8gUEYuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgRy4gVGhlIFBHLjAvIFBHLjEvIFBHLjUvIFBHLjYvIFBHLjcvIFBHLjggaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTEgZm9yIHBvcnQgSC4gVGhlIFBILjAvIFBILjEvIFBILjIvIFBILjMvIFBILjEyLyBQSC4xMy8gUEguMTQvIFBILjE1IGlzIGlnbm9yZWQuCisgICAgICogQHZhciBHUElPX1Q6OlBJTgorICAgICAqIE9mZnNldDogMHgxMC8weDUwLzB4OTAvMHhEMC8weDExMC8weDE1MC8weDE5MC8weDFEMCAgUEEtSCBQaW4gVmFsdWUKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbbl0gICAgIHxQSU5uICAgICAgfFBvcnQgQS1IIFBpbltuXSBQaW4gVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFYWNoIGJpdCBvZiB0aGUgcmVnaXN0ZXIgcmVmbGVjdHMgdGhlIGFjdHVhbCBzdGF0dXMgb2YgdGhlIHJlc3BlY3RpdmUgUHgubiBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGJpdCBpcyAxLCBpdCBpbmRpY2F0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgcGluIHN0YXR1cyBpcyBoaWdoOyBlbHNlIHRoZSBwaW4gc3RhdHVzIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIEB2YXIgR1BJT19UOjpEQkVOCisgICAgICogT2Zmc2V0OiAweDE0LzB4NTQvMHg5NC8weEQ0LzB4MTE0LzB4MTU0LzB4MTk0LzB4MUQ0ICBQQS1IIERlLUJvdW5jZSBFbmFibGUgQ29udHJvbAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFtuXSAgICAgfERCRU5uICAgICB8UG9ydCBBLUggUGluW25dIElucHV0IFNpZ25hbCBEZS1ib3VuY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBEQkVOW25dIGJpdCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgZGUtYm91bmNlIGZ1bmN0aW9uIGZvciBlYWNoIGNvcnJlc3BvbmRpbmcgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBpbnB1dCBzaWduYWwgcHVsc2Ugd2lkdGggY2Fubm90IGJlIHNhbXBsZWQgYnkgY29udGludW91cyB0d28gZGUtYm91bmNlIHNhbXBsZSBjeWNsZSwgdGhlIGlucHV0IHNpZ25hbCB0cmFuc2l0aW9uIGlzIHNlZW4gYXMgdGhlIHNpZ25hbCBib3VuY2UgYW5kIHdpbGwgbm90IHRyaWdnZXIgdGhlIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGNsb2NrIHNvdXJjZSBpcyBjb250cm9sbGVkIGJ5IERCQ0xLU1JDIChQeF9EQkNUTCBbNF0pLCBvbmUgZGUtYm91bmNlIHNhbXBsZSBjeWNsZSBwZXJpb2QgaXMgY29udHJvbGxlZCBieSBEQkNMS1NFTCAoUHhfREJDVEwgWzM6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQeC5uIGRlLWJvdW5jZSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHgubiBkZS1ib3VuY2UgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGUtYm91bmNlIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgZm9yIGVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgaW50ZXJydXB0IG1vZGUgaXMgbGV2ZWwgdHJpZ2dlcmVkLCB0aGUgZGUtYm91bmNlIGVuYWJsZSBiaXQgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIEB2YXIgR1BJT19UOjpJTlRUWVBFCisgICAgICogT2Zmc2V0OiAweDE4LzB4NTgvMHg5OC8weEQ4LzB4MTE4LzB4MTU4LzB4MTk4LzB4MUQ4ICBQQS1IIEludGVycnVwdCBUcmlnZ2VyIFR5cGUgQ29udHJvbAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFtuXSAgICAgfFRZUEVuICAgICB8UG9ydCBBLUggUGluW25dIEVkZ2Ugb3IgTGV2ZWwgRGV0ZWN0aW9uIEludGVycnVwdCBUcmlnZ2VyIFR5cGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRZUEUgKFB4X0lOVFRZUEVbbl0pIGJpdCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHRyaWdnZXJlZCBpbnRlcnJ1cHQgaXMgYnkgbGV2ZWwgdHJpZ2dlciBvciBieSBlZGdlIHRyaWdnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGludGVycnVwdCBpcyBieSBlZGdlIHRyaWdnZXIsIHRoZSB0cmlnZ2VyIHNvdXJjZSBjYW4gYmUgY29udHJvbGxlZCBieSBkZS1ib3VuY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGludGVycnVwdCBpcyBieSBsZXZlbCB0cmlnZ2VyLCB0aGUgaW5wdXQgc291cmNlIGlzIHNhbXBsZWQgYnkgb25lIEhDTEsgY2xvY2sgYW5kIGdlbmVyYXRlcyB0aGUgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFZGdlIHRyaWdnZXIgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMZXZlbCB0cmlnZ2VyIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgcGluIGlzIHNldCBhcyB0aGUgbGV2ZWwgdHJpZ2dlciBpbnRlcnJ1cHQsIG9ubHkgb25lIGxldmVsIGNhbiBiZSBzZXQgb24gdGhlIHJlZ2lzdGVycyBSSElFTiAoUHhfSU5URU5bbisxNl0pL0ZMSUVOIChQeF9JTlRFTltuXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgYm90aCBsZXZlbHMgdG8gdHJpZ2dlciBpbnRlcnJ1cHQgYXJlIHNldCwgdGhlIHNldHRpbmcgaXMgaWdub3JlZCBhbmQgbm8gaW50ZXJydXB0IHdpbGwgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlLWJvdW5jZSBmdW5jdGlvbiBpcyB2YWxpZCBvbmx5IGZvciBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGludGVycnVwdCBtb2RlIGlzIGxldmVsIHRyaWdnZXJlZCwgdGhlIGRlLWJvdW5jZSBlbmFibGUgYml0IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIEdQSU9fVDo6SU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4MUMvMHg1Qy8weDlDLzB4REMvMHgxMUMvMHgxNUMvMHgxOUMvMHgxREMgIFBBLUggSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8W25dICAgICB8RkxJRU5uICAgIHxQb3J0IEEtSCBQaW5bbl0gRmFsbGluZyBFZGdlIG9yIExvdyBMZXZlbCBJbnRlcnJ1cHQgVHJpZ2dlciBUeXBlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgRkxJRU4gKFB4X0lOVEVOW25dKSBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGludGVycnVwdCBmb3IgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnB1dCBQeC5uIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgYml0IHRvIDEgYWxzbyBlbmFibGUgdGhlIHBpbiB3YWtlLXVwIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc2V0dGluZyB0aGUgRkxJRU4gKFB4X0lOVEVOW25dKSBiaXQgdG8gMSA6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGludGVycnVwdCBpcyBsZXZlbCB0cmlnZ2VyIChUWVBFIChQeF9JTlRUWVBFW25dKSBiaXQgaXMgc2V0IHRvIDEpLCB0aGUgaW5wdXQgUHgubiBwaW4gd2lsbCBnZW5lcmF0ZSB0aGUgaW50ZXJydXB0IHdoaWxlIHRoaXMgcGluIHN0YXRlIGlzIGF0IGxvdyBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgaW50ZXJydXB0IGlzIGVkZ2UgdHJpZ2dlcihUWVBFIChQeF9JTlRUWVBFW25dKSBiaXQgaXMgc2V0IHRvIDApLCB0aGUgaW5wdXQgUHgubiBwaW4gd2lsbCBnZW5lcmF0ZSB0aGUgaW50ZXJydXB0IHdoaWxlIHRoaXMgcGluIHN0YXRlIGNoYW5nZWQgZnJvbSBoaWdoIHRvIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUHgubiBsZXZlbCBsb3cgb3IgaGlnaCB0byBsb3cgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQeC5uIGxldmVsIGxvdyBvciBoaWdoIHRvIGxvdyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIHxbbisxNl0gIHxSSElFTm4gICAgfFBvcnQgQS1IIFBpbltuXSBSaXNpbmcgRWRnZSBvciBIaWdoIExldmVsIEludGVycnVwdCBUcmlnZ2VyIFR5cGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBSSElFTiAoUHhfSU5URU5bbisxNl0pIGJpdCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgaW50ZXJydXB0IGZvciBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGlucHV0IFB4Lm4gcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBiaXQgdG8gMSBhbHNvIGVuYWJsZSB0aGUgcGluIHdha2UtdXAgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBzZXR0aW5nIHRoZSBSSElFTiAoUHhfSU5URU5bbisxNl0pIGJpdCB0byAxIDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgaW50ZXJydXB0IGlzIGxldmVsIHRyaWdnZXIgKFRZUEUgKFB4X0lOVFRZUEVbbl0pIGJpdCBpcyBzZXQgdG8gMSksIHRoZSBpbnB1dCBQeC5uIHBpbiB3aWxsIGdlbmVyYXRlIHRoZSBpbnRlcnJ1cHQgd2hpbGUgdGhpcyBwaW4gc3RhdGUgaXMgYXQgaGlnaCBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgaW50ZXJydXB0IGlzIGVkZ2UgdHJpZ2dlciAoVFlQRSAoUHhfSU5UVFlQRVtuXSkgYml0IGlzIHNldCB0byAwKSwgdGhlIGlucHV0IFB4Lm4gcGluIHdpbGwgZ2VuZXJhdGUgdGhlIGludGVycnVwdCB3aGlsZSB0aGlzIHBpbiBzdGF0ZSBjaGFuZ2VkIGZyb20gbG93IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFB4Lm4gbGV2ZWwgaGlnaCBvciBsb3cgdG8gaGlnaCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFB4Lm4gbGV2ZWwgaGlnaCBvciBsb3cgdG8gaGlnaCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIEB2YXIgR1BJT19UOjpJTlRTUkMKKyAgICAgKiBPZmZzZXQ6IDB4MjAvMHg2MC8weEEwLzB4RTAvMHgxMjAvMHgxNjAvMHgxQTAvMHgxRTAgIFBBLUggSW50ZXJydXB0IFNvdXJjZSBGbGFnCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8W25dICAgICB8SU5UU1JDbiAgIHxQb3J0IEEtSCBQaW5bbl0gSW50ZXJydXB0IFNvdXJjZSBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uIDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciB0aGUgY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbiA6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGludGVycnVwdCBhdCBQeC5uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQeC5uIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIEdQSU9fVDo6U01URU4KKyAgICAgKiBPZmZzZXQ6IDB4MjQvMHg2NC8weEE0LzB4RTQvMHgxMjQvMHgxNjQvMHgxQTQvMHgxRTQgIFBBLUggSW5wdXQgU2NobWl0dCBUcmlnZ2VyIEVuYWJsZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFtuXSAgICAgfFNNVEVObiAgICB8UG9ydCBBLUggUGluW25dIElucHV0IFNjaG1pdHQgVHJpZ2dlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFB4Lm4gaW5wdXQgU2NobWl0dCB0cmlnZ2VyIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQeC5uIGlucHV0IFNjaG1pdHQgdHJpZ2dlciBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEEvQi9FLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMyBmb3IgcG9ydCBDLiBUaGUgUEMuMTQvIFBDLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE0IGZvciBwb3J0IEQuIFRoZSBQRC4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMiBmb3IgcG9ydCBGLiBUaGUgUEYuMTIvIFBGLjEzLyBQRi4xNC8gUEYuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgRy4gVGhlIFBHLjAvIFBHLjEvIFBHLjUvIFBHLjYvIFBHLjcvIFBHLjggaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTEgZm9yIHBvcnQgSC4gVGhlIFBILjAvIFBILjEvIFBILjIvIFBILjMvIFBILjEyLyBQSC4xMy8gUEguMTQvIFBILjE1IGlzIGlnbm9yZWQuCisgICAgICogQHZhciBHUElPX1Q6OlNMRVdDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MjgvMHg2OC8weEE4LzB4RTgvMHgxMjgvMHgxNjgvMHgxQTgvMHgxRTggIFBBLUggSGlnaCBTbGV3IFJhdGUgQ29udHJvbAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsybisxOjJuXXxIU1JFTm4gICB8UG9ydCBBLUggUGluW25dIEhpZ2ggU2xldyBSYXRlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFB4Lm4gb3V0cHV0IHdpdGggbm9ybWFsIHNsZXcgcmF0ZSBtb2RlIChtYXhpbXVtIDQwIE1IeiBhdCAyLjdWKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFB4Lm4gb3V0cHV0IHdpdGggaGlnaCBzbGV3IHJhdGUgbW9kZSAobWF4aW11bSA4MCBNSHogYXQgMi43VikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQeC5uIG91dHB1dCB3aXRoIGZhc3Qgc2xldyByYXRlIG1vZGUgKG1heGltdW0gMTAwIE1IeiBhdCAyLjdWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgQS9CL0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEzIGZvciBwb3J0IEMuIFRoZSBQQy4xNC8gUEMuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTQgZm9yIHBvcnQgRC4gVGhlIFBELjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTEyIGZvciBwb3J0IEYuIFRoZSBQRi4xMi8gUEYuMTMvIFBGLjE0LyBQRi4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBHLiBUaGUgUEcuMC8gUEcuMS8gUEcuNS8gUEcuNi8gUEcuNy8gUEcuOCBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMSBmb3IgcG9ydCBILiBUaGUgUEguMC8gUEguMS8gUEguMi8gUEguMy8gUEguMTIvIFBILjEzLyBQSC4xNC8gUEguMTUgaXMgaWdub3JlZC4KKyAgICAgKiBAdmFyIEdQSU9fVDo6UFVTRUwKKyAgICAgKiBPZmZzZXQ6IDB4MzAvMHg3MC8weEIwLzB4RjAvMHgxMzAvMHgxNzAvMHgxQjAvMHgxRjAgIFBBLUggUHVsbC11cCBhbmQgUHVsbC1kb3duIFNlbGVjdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsybisxOjJuXXxQVVNFTG4gICB8UG9ydCBBLUggUGluW25dIFB1bGwtdXAgYW5kIFB1bGwtZG93biBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZXRlcm1pbmUgZWFjaCBJL08gUHVsbC11cC9wdWxsLWRvd24gb2YgUHgubiBwaW5zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUHgubiBwdWxsLXVwIGFuZCBwdWxsLWRvd24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFB4Lm4gcHVsbC11cCBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQeC5uIHB1bGwtZG93biBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQeC5uIHB1bGwtdXAgYW5kIHB1bGwtZG93biBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2ljYWxseSwgdGhlIHB1bGwtdXAgY29udHJvbCBhbmQgcHVsbC1kb3duIGNvbnRyb2wgaGFzIGZvbGxvd2luZyBiZWhhdmlvciBsaW1pdGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLXVwIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE1PREVuIChQeF9NT0RFWzJuKzE6Mm5dKSBzZXQgYXMgdHJpLXN0YXRlIGFuZCBvcGVuLWRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtZG93biBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBNT0RFbiAoUHhfTU9ERVsybisxOjJuXSkgc2V0IGFzIHRyaS1zdGF0ZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYm90aCBwdWxsLXVwIHB1bGwtZG93biBpcyBzZXQgYXMgMSBhdCB0cmktc3RhdGUgbW9kZSwga2VlcCBJL08gaW4gdHJpLXN0YXRlIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEEvQi9FLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMyBmb3IgcG9ydCBDLiBUaGUgUEMuMTQvIFBDLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE0IGZvciBwb3J0IEQuIFRoZSBQRC4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xMiBmb3IgcG9ydCBGLiBUaGUgUEYuMTIvIFBGLjEzLyBQRi4xNC8gUEYuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTUgZm9yIHBvcnQgRy4gVGhlIFBHLjAvIFBHLjEvIFBHLjUvIFBHLjYvIFBHLjcvIFBHLjggaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTEgZm9yIHBvcnQgSC4gVGhlIFBILjAvIFBILjEvIFBILjIvIFBILjMvIFBILjEyLyBQSC4xMy8gUEguMTQvIFBILjE1IGlzIGlnbm9yZWQuCisgICAgICogQHZhciBHUElPX1Q6OkRCQ1RMCisgICAgICogT2Zmc2V0OiAweDM0LzB4NzQvMHhCNC8weEY0LzB4MTM0LzB4MTc0LzB4MUI0LzB4MUY0ICBQQS1IIEludGVycnVwdCBEZS1ib3VuY2UgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfERCQ0xLU0VMICB8RGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDEgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDIgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDQgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDggY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMDAgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDE2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciAzMiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IFNhbXBsZSBpbnRlcnJ1cHQgaW5wdXQgb25jZSBwZXIgNjQgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDEyOCBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IFNhbXBsZSBpbnRlcnJ1cHQgaW5wdXQgb25jZSBwZXIgMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAxID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciAyKjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IFNhbXBsZSBpbnRlcnJ1cHQgaW5wdXQgb25jZSBwZXIgNCoyNTYgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMTEgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDgqMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAwID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciAxNioyNTYgY2xvY2tzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDEgPSBTYW1wbGUgaW50ZXJydXB0IGlucHV0IG9uY2UgcGVyIDMyKjI1NiBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMCA9IFNhbXBsZSBpbnRlcnJ1cHQgaW5wdXQgb25jZSBwZXIgNjQqMjU2IGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gU2FtcGxlIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciAxMjgqMjU2IGNsb2Nrcy4KKyAgICAgKiB8WzRdICAgICB8REJDTEtTUkMgIHxEZS1ib3VuY2UgQ291bnRlciBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERlLWJvdW5jZSBjb3VudGVyIGNsb2NrIHNvdXJjZSBpcyB0aGUgSENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGUtYm91bmNlIGNvdW50ZXIgY2xvY2sgc291cmNlIGlzIHRoZSAxMCBrSHogaW50ZXJuYWwgbG93IHNwZWVkIFJDIG9zY2lsbGF0b3IgKExJUkMpLgorICAgICAqIHxbNV0gICAgIHxJQ0xLT04gICAgfEludGVycnVwdCBDbG9jayBvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVkZ2UgZGV0ZWN0aW9uIGNpcmN1aXQgaXMgYWN0aXZlIG9ubHkgaWYgSS9PIHBpbiBjb3JyZXNwb25kaW5nIFJISUVOIChQeF9JTlRFTltuKzE2XSkvRkxJRU4gKFB4X0lOVEVOW25dKSBiaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFsbCBJL08gcGlucyBlZGdlIGRldGVjdGlvbiBjaXJjdWl0IGlzIGFsd2F5cyBhY3RpdmUgYWZ0ZXIgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gZGlzYWJsZSB0aGlzIGJpdCB0byBzYXZlIHN5c3RlbSBwb3dlciBpZiBubyBzcGVjaWFsIGFwcGxpY2F0aW9uIGNvbmNlcm4uCisgICAgICovCisKKworICAgIF9fSU8gdWludDMyX3QgTU9ERTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwLzB4NDAvMHg4MC8weEMwLzB4MTAwLzB4MTQwLzB4MTgwLzB4MUMwXSBQb3J0IEEtSCBJL08gTW9kZSBDb250cm9sICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBESU5PRkY7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDQvMHg0NC8weDg0LzB4QzQvMHgxMDQvMHgxNDQvMHgxODQvMHgxQzRdIFBvcnQgQS1IIERpZ2l0YWwgSW5wdXQgUGF0aCBEaXNhYmxlIENvbnRyb2wgKi8KKyAgICBfX0lPIHVpbnQzMl90IERPVVQ7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwOC8weDQ4LzB4ODgvMHhDOC8weDEwOC8weDE0OC8weDE4OC8weDFDOF0gUG9ydCBBLUggRGF0YSBPdXRwdXQgVmFsdWUgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgREFUTVNLOyAgICAgICAgICAgICAgICAvKiE8IFsweDBDLzB4NEMvMHg4Qy8weENDLzB4MTBDLzB4MTRDLzB4MThDLzB4MUNDXSBQb3J0IEEtSCBEYXRhIE91dHB1dCBXcml0ZSBNYXNrICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBQSU47ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MTAvMHg1MC8weDkwLzB4RDAvMHgxMTAvMHgxNTAvMHgxOTAvMHgxRDBdIFBvcnQgQS1IIFBpbiBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERCRU47ICAgICAgICAgICAgICAgICAgLyohPCBbMHgxNC8weDU0LzB4OTQvMHhENC8weDExNC8weDE1NC8weDE5NC8weDFENF0gUG9ydCBBLUggRGUtQm91bmNlIEVuYWJsZSBDb250cm9sICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5UVFlQRTsgICAgICAgICAgICAgICAvKiE8IFsweDE4LzB4NTgvMHg5OC8weEQ4LzB4MTE4LzB4MTU4LzB4MTk4LzB4MUQ4XSBQb3J0IEEtSCBJbnRlcnJ1cHQgVHJpZ2dlciBUeXBlIENvbnRyb2wgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MUMvMHg1Qy8weDlDLzB4REMvMHgxMUMvMHgxNUMvMHgxOUMvMHgxRENdIFBvcnQgQS1IIEludGVycnVwdCBFbmFibGUgQ29udHJvbCAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNSQzsgICAgICAgICAgICAgICAgLyohPCBbMHgyMC8weDYwLzB4QTAvMHhFMC8weDEyMC8weDE2MC8weDFBMC8weDFFMF0gUG9ydCBBLUggSW50ZXJydXB0IFNvdXJjZSBGbGFnICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU01URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDI0LzB4NjQvMHhBNC8weEU0LzB4MTI0LzB4MTY0LzB4MUE0LzB4MUU0XSBQb3J0IEEtSCBJbnB1dCBTY2htaXR0IFRyaWdnZXIgRW5hYmxlICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTTEVXQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MjgvMHg2OC8weEE4LzB4RTgvMHgxMjgvMHgxNjgvMHgxQTgvMHgxRThdIFBvcnQgQS1IIEhpZ2ggU2xldyBSYXRlIENvbnRyb2wgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzFdOworICAgIF9fSU8gdWludDMyX3QgUFVTRUw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDMwLzB4NzAvMHhCMC8weEYwLzB4MTMwLzB4MTcwLzB4MUIwLzB4MUYwXSBQb3J0IEEtSCBQdWxsLXVwIGFuZCBQdWxsLWRvd24gU2VsZWN0aW9uIFJlZ2lzdGVyICovCisgICAgX19JTyB1aW50MzJfdCBEQkNUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MzQvMHg3NC8weEI0LzB4RjQvMHgxMzQvMHgxNzQvMHgxQjQvMHgxRjRdIFBvcnQgQS1IIEludGVycnVwdCBEZS1ib3VuY2UgQ29udHJvbCAgICAgICAgKi8KKworfSBHUElPX1Q7CisKKworCisvKioKKyAgICBAYWRkdG9ncm91cCBHUElPX0NPTlNUIEdQSU8gQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgR1BJTyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUwIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTBfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREUwX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTFfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREUxX01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFMV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTEgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREUyX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMl9Nc2sgICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERTJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUyIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFM19Qb3MgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUzIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTNfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREUzX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTRfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFNCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREU0X01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFNF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREU1X1BvcyAgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFNV9Nc2sgICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERTVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREU1IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFNl9Qb3MgICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREU2IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTZfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREU2X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFNiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTdfUG9zICAgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFNyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREU3X01zayAgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFN19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTcgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREU4X1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTggUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFOF9Nc2sgICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERThfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREU4IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFOV9Qb3MgICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREU5IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTlfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREU5X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFOSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTEwX1BvcyAgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMTAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREUxMF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFMTBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTEwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREUxMV9Qb3MgICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTExIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMTFfTXNrICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERTExX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUxMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMTJfUG9zICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUxMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTEyX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREUxMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMTIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX01PREVfTU9ERTEzX1BvcyAgICAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMTMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19NT0RFX01PREUxM19Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fTU9ERV9NT0RFMTNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTEzIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19NT0RFX01PREUxNF9Qb3MgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6TU9ERTogTU9ERTE0IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMTRfTXNrICAgICAgICAgICAgICgweDN1bCA8PCBHUElPX01PREVfTU9ERTE0X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUxNCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fTU9ERV9NT0RFMTVfUG9zICAgICAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6Ok1PREU6IE1PREUxNSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX01PREVfTU9ERTE1X01zayAgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19NT0RFX01PREUxNV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpNT0RFOiBNT0RFMTUgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYwX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMV9Qb3MgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjFfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkYxX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjJfUG9zICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYyX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYzX1BvcyAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGNF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkY0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjRfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkY0X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjVfUG9zICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkY1X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkY2X1BvcyAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGNl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkY2IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGN19Qb3MgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkY3IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjdfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkY3X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGNyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjhfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGOCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkY4X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGOF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjggTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkY5X1BvcyAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGOV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkY5IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMTBfUG9zICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYxMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjEwX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkYxMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMTAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjExX1BvcyAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMTEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYxMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGMTFfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjExIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYxMl9Qb3MgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjEyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMTJfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjEyX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYxMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMTNfUG9zICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYxMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjEzX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0RJTk9GRl9ESU5PRkYxM19Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMTMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRElOT0ZGX0RJTk9GRjE0X1BvcyAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRJTk9GRjogRElOT0ZGMTQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYxNF9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19ESU5PRkZfRElOT0ZGMTRfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjE0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RJTk9GRl9ESU5PRkYxNV9Qb3MgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpESU5PRkY6IERJTk9GRjE1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19ESU5PRkZfRElOT0ZGMTVfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRElOT0ZGX0RJTk9GRjE1X1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RElOT0ZGOiBESU5PRkYxNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQwX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQwIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMV9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQxIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDFfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQxX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDJfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQyX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDIgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQzX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUM19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQzIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUNF9Qb3MgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQ0IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQ0X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUNCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDVfUG9zICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUNSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQ1X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUNV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQ2X1BvcyAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUNl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQ2IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUN19Qb3MgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQ3IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDdfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQ3X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUNyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDhfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUOCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQ4X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUOF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDggTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQ5X1BvcyAgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDkgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUOV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDlfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQ5IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMTBfUG9zICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQxMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDEwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQxMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMTAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDExX1BvcyAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMTEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQxMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUMTFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDExIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQxMl9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDEyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMTJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDEyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQxMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMTNfUG9zICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQxMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RPVVRfRE9VVDEzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19ET1VUX0RPVVQxM19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMTMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RPVVRfRE9VVDE0X1BvcyAgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpET1VUOiBET1VUMTQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQxNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fRE9VVF9ET1VUMTRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDE0IE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19ET1VUX0RPVVQxNV9Qb3MgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6RE9VVDogRE9VVDE1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fRE9VVF9ET1VUMTVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RPVVRfRE9VVDE1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRPVVQ6IERPVVQxNSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0swX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0sxX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0syIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzJfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0syX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzNfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0szX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0s0X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0s0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLNV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0s1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzVfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0s1X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzZfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLNiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0s2X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLNl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0s3X1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzcgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLN19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0s3IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLOF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0s4IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzhfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0s4X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLOCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzlfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLOSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0s5X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLOV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzkgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0sxMF9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzEwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMTBfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzEwX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMTFfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzExX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0sxMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMTEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzEyX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMTIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0sxMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLMTJfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzEyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0sxM19Qb3MgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzEzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMTNfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREFUTVNLX0RBVE1TSzEzX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQVRNU0tfREFUTVNLMTRfUG9zICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REFUTVNLOiBEQVRNU0sxNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzE0X01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0RBVE1TS19EQVRNU0sxNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMTQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREFUTVNLX0RBVE1TSzE1X1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRBVE1TSzogREFUTVNLMTUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0RBVE1TS19EQVRNU0sxNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQVRNU0tfREFUTVNLMTVfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQVRNU0s6IERBVE1TSzE1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU4wX1BvcyAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjAgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElOMF9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjBfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4wIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElOMV9Qb3MgICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4xIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjFfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU4xX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMSBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjJfUG9zICAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU4yX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElOMl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjIgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU4zX1BvcyAgICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjMgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElOM19Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjNfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4zIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElONF9Qb3MgICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU40IFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjRfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU40X1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElONCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjVfUG9zICAgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElONSBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU41X01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElONV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjUgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU42X1BvcyAgICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjYgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElONl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU42IE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElON19Qb3MgICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU43IFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjdfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU43X1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElONyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjhfUG9zICAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOOCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU44X01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElOOF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjggTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU45X1BvcyAgICAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjkgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElOOV9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjlfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU45IE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElOMTBfUG9zICAgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4xMCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjEwX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU4xMF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMTAgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjExX1BvcyAgICAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMTEgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU4xMV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElOMTFfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjExIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU4xMl9Qb3MgICAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjEyIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElOMTJfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjEyX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4xMiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QSU5fUElOMTNfUG9zICAgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4xMyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUElOX1BJTjEzX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1BJTl9QSU4xM19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMTMgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUElOX1BJTjE0X1BvcyAgICAgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBJTjogUElOMTQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1BJTl9QSU4xNF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19QSU5fUElOMTRfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjE0IE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BJTl9QSU4xNV9Qb3MgICAgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQSU46IFBJTjE1IFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QSU5fUElOMTVfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fUElOX1BJTjE1X1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UElOOiBQSU4xNSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4wX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjAgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4wIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMV9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4xIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjFfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU4xX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjJfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4yX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVOMl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjIgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4zX1BvcyAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOM19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4zIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVONF9Qb3MgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU40IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU40X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVONCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjVfUG9zICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVONSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU41X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVONV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU42X1BvcyAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVONl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU42IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVON19Qb3MgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU43IFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjdfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU43X1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVONyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjhfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOOCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU44X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVOOF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjggTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU45X1BvcyAgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjkgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOOV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjlfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU45IE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMTBfUG9zICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4xMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjEwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU4xMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMTAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjExX1BvcyAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMTEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4xMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVOMTFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjExIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4xMl9Qb3MgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjEyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMTJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjEyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4xMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMTNfUG9zICAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4xMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBHUElPX0RCRU5fREJFTjEzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkVOX0RCRU4xM19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMTMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCRU5fREJFTjE0X1BvcyAgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkVOOiBEQkVOMTQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4xNF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fREJFTl9EQkVOMTRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjE0IE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkVOX0RCRU4xNV9Qb3MgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJFTjogREJFTjE1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fREJFTl9EQkVOMTVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCRU5fREJFTjE1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCRU46IERCRU4xNSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEUwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRTJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFM19Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEUzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEU0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEU1X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRTVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEU1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFNl9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEU2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEU2X1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTdfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFNyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEU3X01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFN19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEU4X1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFOF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRThfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEU4IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFOV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEU5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEU5X1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTEwX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFMTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTEwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxMV9Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTExIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMTFfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRTExX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUxMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMTJfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUxMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTEyX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEUxMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMTIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTEzX1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMTMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UVFlQRV9UWVBFMTNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTEzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRUWVBFX1RZUEUxNF9Qb3MgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UVFlQRTogVFlQRTE0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMTRfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFRZUEVfVFlQRTE0X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUxNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9UWVBFMTVfUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFRZUEU6IFRZUEUxNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFRZUEVfVFlQRTE1X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRUWVBFX1RZUEUxNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRUWVBFOiBUWVBFMTUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4wIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU4wX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjFfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xX01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVOMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4yX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4yIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOM19Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4zIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU4zX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjRfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVONCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU40X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVONF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU41X1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVONV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU41IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVONl9Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU42IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU42X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVONiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjdfUG9zICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVONyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU43X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVON19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjcgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU44X1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjggUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOOF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjhfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU44IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOOV9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU45IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjlfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU45X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOOSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjEwX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMTAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVOMTBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjEwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xMV9Qb3MgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjExIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMTFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjExX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4xMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMTJfUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4xMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjEyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU4xMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMTIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjEzX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMTMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX0ZMSUVOMTNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjEzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fRkxJRU4xNF9Qb3MgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBGTElFTjE0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMTRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9GTElFTjE0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4xNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX0ZMSUVOMTVfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogRkxJRU4xNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9GTElFTjE1X01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fRkxJRU4xNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IEZMSUVOMTUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjBfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4wX01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVOMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4xX1BvcyAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMl9Qb3MgICAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4yIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU4yX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjNfUG9zICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4zX01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVOM19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU40X1BvcyAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVONF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU40IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVONV9Qb3MgICAgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU41IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU41X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVONSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjZfUG9zICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVONiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU42X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVONl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU43X1BvcyAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjcgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVON19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjdfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU43IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOOF9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU44IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjhfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU44X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOOCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjlfUG9zICAgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOOSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU45X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVOOV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjkgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4xMF9Qb3MgICAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjEwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMTBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjEwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMTFfUG9zICAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjExX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU4xMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMTEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjEyX1BvcyAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMTIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4xMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVOMTJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjEyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4xM19Qb3MgICAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjEzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMTNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRFTl9SSElFTjEzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVEVOX1JISUVOMTRfUG9zICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRFTjogUkhJRU4xNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjE0X01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5URU5fUkhJRU4xNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMTQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRFTl9SSElFTjE1X1BvcyAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5URU46IFJISUVOMTUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5URU5fUkhJRU4xNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVEVOX1JISUVOMTVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVEVOOiBSSElFTjE1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMwX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMxX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzJfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkMyX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzNfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMzX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkM0X1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkM0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDNV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkM1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzVfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkM1X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzZfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDNiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkM2X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDNl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkM3X1BvcyAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzcgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDN19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkM3IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDOF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkM4IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzhfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkM4X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDOCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzlfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDOSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkM5X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDOV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzkgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMxMF9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzEwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMTBfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzEwX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMTFfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzExX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkMxMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMTEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzEyX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMTIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMxMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDMTJfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzEyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMxM19Qb3MgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzEzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMTNfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fSU5UU1JDX0lOVFNSQzEzX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19JTlRTUkNfSU5UU1JDMTRfUG9zICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6SU5UU1JDOiBJTlRTUkMxNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzE0X01zayAgICAgICAgICgweDF1bCA8PCBHUElPX0lOVFNSQ19JTlRTUkMxNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMTQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fSU5UU1JDX0lOVFNSQzE1X1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OklOVFNSQzogSU5UU1JDMTUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX0lOVFNSQ19JTlRTUkMxNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19JTlRTUkNfSU5UU1JDMTVfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpJTlRTUkM6IElOVFNSQzE1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4wIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU4wX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjFfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xX01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVOMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4yX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4yIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOM19Qb3MgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4zIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU4zX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjRfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVONCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU40X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVONF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU41X1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVONV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU41IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVONl9Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU42IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU42X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVONiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjdfUG9zICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVONyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU43X01zayAgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVON19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjcgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU44X1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjggUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOOF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjhfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU44IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOOV9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU45IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjlfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU45X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOOSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjEwX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMTAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVOMTBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjEwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xMV9Qb3MgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjExIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMTFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjExX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4xMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMTJfUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4xMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjEyX01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU4xMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMTIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjEzX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMTMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBHUElPX1NNVEVOX1NNVEVOMTNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjEzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU01URU5fU01URU4xNF9Qb3MgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNNVEVOOiBTTVRFTjE0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMTRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTVRFTl9TTVRFTjE0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4xNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NNVEVOX1NNVEVOMTVfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTVRFTjogU01URU4xNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTVRFTl9TTVRFTjE1X01zayAgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU01URU5fU01URU4xNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U01URU46IFNNVEVOMTUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4wIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjBfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU4wX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjFfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xX01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVOMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4yX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4yIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOM19Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4zIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjNfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU4zX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjRfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVONCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU40X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVONF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU41X1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVONV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU41IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVONl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU42IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjZfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU42X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVONiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjdfUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVONyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU43X01zayAgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVON19Qb3MpICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjcgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU44X1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjggUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOOF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjhfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU44IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOOV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU45IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjlfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU45X1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOOSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjEwX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMTAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xMF9Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVOMTBfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjEwIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xMV9Qb3MgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjExIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMTFfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjExX1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4xMSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMTJfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4xMiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjEyX01zayAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU4xMl9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMTIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjEzX1BvcyAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMTMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xM19Nc2sgICAgICAgICAoMHgxdWwgPDwgR1BJT19TTEVXQ1RMX0hTUkVOMTNfUG9zKSAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjEzIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1NMRVdDVExfSFNSRU4xNF9Qb3MgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpTTEVXQ1RMOiBIU1JFTjE0IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMTRfTXNrICAgICAgICAgKDB4MXVsIDw8IEdQSU9fU0xFV0NUTF9IU1JFTjE0X1BvcykgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4xNCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hTUkVOMTVfUG9zICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6U0xFV0NUTDogSFNSRU4xNSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9IU1JFTjE1X01zayAgICAgICAgICgweDF1bCA8PCBHUElPX1NMRVdDVExfSFNSRU4xNV9Qb3MpICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlNMRVdDVEw6IEhTUkVOMTUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwwX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMV9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwxIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDFfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUwxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDJfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwyX01zayAgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwzX1BvcyAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMM19Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwzIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMNF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUw0IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDRfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUw0X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMNCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDVfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMNSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUw1X01zayAgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMNV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUw2X1BvcyAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMNl9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUw2IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMN19Qb3MgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUw3IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDdfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUw3X1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMNyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDhfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMOCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUw4X01zayAgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMOF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDggTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUw5X1BvcyAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDkgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMOV9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDlfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUw5IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMTBfUG9zICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwxMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDEwX01zayAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUwxMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMTAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDExX1BvcyAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMTEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwxMV9Nc2sgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMMTFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDExIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwxMl9Qb3MgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDEyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMTJfTXNrICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDEyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwxMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMTNfUG9zICAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwxMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDEzX01zayAgICAgICAgICAgKDB4M3VsIDw8IEdQSU9fUFVTRUxfUFVTRUwxM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMTMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19QVVNFTF9QVVNFTDE0X1BvcyAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6UFVTRUw6IFBVU0VMMTQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwxNF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBHUElPX1BVU0VMX1BVU0VMMTRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDE0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fUFVTRUxfUFVTRUwxNV9Qb3MgICAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OlBVU0VMOiBQVVNFTDE1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVU0VMMTVfTXNrICAgICAgICAgICAoMHgzdWwgPDwgR1BJT19QVVNFTF9QVVNFTDE1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpQVVNFTDogUFVTRUwxNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkNUTDogREJDTEtTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IEdQSU9fREJDVExfREJDTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJDVEw6IERCQ0xLU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NSQ19Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU9fVDo6REJDVEw6IERCQ0xLU1JDIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTUkNfTXNrICAgICAgICAgICgweDF1bCA8PCBHUElPX0RCQ1RMX0RCQ0xLU1JDX1BvcykgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCQ1RMOiBEQkNMS1NSQyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEdQSU9fREJDVExfSUNMS09OX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPX1Q6OkRCQ1RMOiBJQ0xLT04gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBHUElPX0RCQ1RMX0lDTEtPTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgR1BJT19EQkNUTF9JQ0xLT05fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgR1BJT19UOjpEQkNUTDogSUNMS09OIE1hc2sgICAgICAgICAgICAgKi8KKworCisvKipAfSovIC8qIEdQSU9fQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIEdQSU8gcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworI2VuZGlmIC8qIF9fR1BJT19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvaGRpdl9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9oZGl2X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNzUxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvaGRpdl9yZWcuaApAQCAtMCwwICsxLDExMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGhkaXZfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIEhESVYgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSERJVl9SRUdfSF9fCisjZGVmaW5lIF9fSERJVl9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhcmR3YXJlIERpdmlkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgSERJViBIYXJkd2FyZSBEaXZpZGVyKEhESVYpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIEhESVYgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBIRElWX1Q6OkRJVklERU5ECisgICAgICogT2Zmc2V0OiAweDAwICBEaXZpZGVuZCBTb3VyY2UgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxESVZJREVORCAgfERpdmlkZW5kIFNvdXJjZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgaXMgZ2l2ZW4gdGhlIGRpdmlkZW5kIG9mIGRpdmlkZXIgYmVmb3JlIGNhbGN1bGF0aW9uIHN0YXJ0aW5nLgorICAgICAqIEB2YXIgSERJVl9UOjpESVZJU09SCisgICAgICogT2Zmc2V0OiAweDA0ICBEaXZpc29yIFNvdXJjZSBSZXNpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfERJVklTT1IgICB8RGl2aXNvciBTb3VyY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGlzIGdpdmVuIHRoZSBkaXZpc29yIG9mIGRpdmlkZXIgYmVmb3JlIGNhbGN1bGF0aW9uIHN0YXJ0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRoaXMgcmVnaXN0ZXIgaXMgd3JpdHRlbiwgaGFyZHdhcmUgZGl2aWRlciB3aWxsIHN0YXJ0IGNhbGN1bGF0ZS4KKyAgICAgKiBAdmFyIEhESVZfVDo6RElWUVVPCisgICAgICogT2Zmc2V0OiAweDA4ICBRdW90aWVudCBSZXN1bHQgUmVzaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxRVU9USUVOVCAgfFF1b3RpZW50IFJlc3VsdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgaG9sZHMgdGhlIHF1b3RpZW50IHJlc3VsdCBvZiBkaXZpZGVyIGFmdGVyIGNhbGN1bGF0aW9uIGNvbXBsZXRlLgorICAgICAqIEB2YXIgSERJVl9UOjpESVZSRU0KKyAgICAgKiBPZmZzZXQ6IDB4MEMgIFJlbWFpbmRlciBSZXN1bHQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxSRU1BSU5ERVIgfFJlbWFpbmRlciBSZXN1bHQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVtYWluZGVyIG9mIGhhcmR3YXJlIGRpdmlkZXIgaXMgMTYtYml0IHNpZ24gaW50ZWdlciAoUkVNQUlOREVSWzE1OjBdKSwgd2hpY2ggaG9sZHMgdGhlIHJlbWFpbmRlciByZXN1bHQgb2YgZGl2aWRlciBhZnRlciBjYWxjdWxhdGlvbiBjb21wbGV0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVtYWluZGVyIG9mIGhhcmR3YXJlIGRpdmlkZXIgd2l0aCBzaWduIGV4dGVuc2lvbiAoUkVNQUlOREVSWzMxOjE2XSkgdG8gMzItYml0IGludGVnZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyByZWdpc3RlciBob2xkcyB0aGUgcmVtYWluZGVyIHJlc3VsdCBvZiBkaXZpZGVyIGFmdGVyIGNhbGN1bGF0aW9uIGNvbXBsZXRlLgorICAgICAqIEB2YXIgSERJVl9UOjpESVZTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIERpdmlkZXIgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RklOSVNIICAgIHxEaXZpc2lvbiBGaW5pc2ggRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVbmRlciBDYWxjdWxhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FsY3VsYXRpb24gZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZsYWcgd2lsbCBiZWNvbWUgbG93IHdoZW4gdGhlIGRpdmlkZXIgaXMgaW4gY2FsY3VsYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZsYWcgd2lsbCBnbyBiYWNrIHRvIGhpZ2ggb25jZSB0aGUgY2FsY3VsYXRpb24gZmluaXNoZWQuCisgICAgICogfFsxXSAgICAgfERJVjAgICAgICB8RGl2aXNvciBaZXJvIFdhcm5pbmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGRpdmlzb3IgaXMgbm90IDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBkaXZpc29yIGlzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIERJVjAgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRlIGRpdmlkZS1ieS16ZXJvIHNpdHVhdGlvbiBhbmQgdXBkYXRlZCB3aGVuZXZlciBESVZJU09SIGlzIHdyaXR0ZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGlzIHJlYWQgb25seS4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERJVklERU5EOyAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBEaXZpZGVuZCBTb3VyY2UgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBESVZJU09SOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gRGl2aXNvciBTb3VyY2UgUmVzaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRElWUVVPOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIFF1b3RpZW50IFJlc3VsdCBSZXNpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERJVlJFTTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBSZW1haW5kZXIgUmVzdWx0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBESVZTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gRGl2aWRlciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IEhESVZfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgSERJVl9DT05TVCBIRElWIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIEhESVYgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBIRElWX0RJVklERU5EX0RJVklERU5EX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSERJVl9UOjpESVZJREVORDogRElWSURFTkQgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgSERJVl9ESVZJREVORF9ESVZJREVORF9Nc2sgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBIRElWX0RJVklERU5EX0RJVklERU5EX1BvcykgICAgICAvKiE8IEhESVZfVDo6RElWSURFTkQ6IERJVklERU5EIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgSERJVl9ESVZJU09SX0RJVklTT1JfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEhESVZfVDo6RElWSVNPUjogRElWSVNPUiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEhESVZfRElWSVNPUl9ESVZJU09SX01zayAgICAgICAgICgweGZmZmZ1bCA8PCBIRElWX0RJVklTT1JfRElWSVNPUl9Qb3MpICAgICAgICAgICAgLyohPCBIRElWX1Q6OkRJVklTT1I6IERJVklTT1IgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEhESVZfRElWUVVPX1FVT1RJRU5UX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBIRElWX1Q6OkRJVlFVTzogUVVPVElFTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBIRElWX0RJVlFVT19RVU9USUVOVF9Nc2sgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IEhESVZfRElWUVVPX1FVT1RJRU5UX1BvcykgICAgICAgIC8qITwgSERJVl9UOjpESVZRVU86IFFVT1RJRU5UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBIRElWX0RJVlJFTV9SRU1BSU5ERVJfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSERJVl9UOjpESVZSRU06IFJFTUFJTkRFUiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgSERJVl9ESVZSRU1fUkVNQUlOREVSX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBIRElWX0RJVlJFTV9SRU1BSU5ERVJfUG9zKSAgICAgICAvKiE8IEhESVZfVDo6RElWUkVNOiBSRU1BSU5ERVIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgSERJVl9ESVZTVFNfRklOSVNIX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEhESVZfVDo6RElWU1RTOiBGSU5JU0ggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEhESVZfRElWU1RTX0ZJTklTSF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBIRElWX0RJVlNUU19GSU5JU0hfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBIRElWX1Q6OkRJVlNUUzogRklOSVNIIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEhESVZfRElWU1RTX0RJVjBfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBIRElWX1Q6OkRJVlNUUzogRElWMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBIRElWX0RJVlNUU19ESVYwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSERJVl9ESVZTVFNfRElWMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSERJVl9UOjpESVZTVFM6IERJVjAgTWFzayAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBIRElWX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBIRElWIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX0hESVZfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2kyY19yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9pMmNfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4NzlmOAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9pMmNfcmVnLmgKQEAgLTAsMCArMSw3MTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBpMmNfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIEkyQyByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JMkNfUkVHX0hfXworI2RlZmluZSBfX0kyQ19SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEludGVyLUlDIEJ1cyBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgSTJDIEludGVyLUlDIEJ1cyBDb250cm9sbGVyKEkyQykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgSTJDIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgSTJDX1Q6OkNUTDAKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIEkyQyBDb250cm9sIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMl0gICAgIHxBQSAgICAgICAgfEFzc2VydCBBY2tub3dsZWRnZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBBQSA9MSBwcmlvciB0byBhZGRyZXNzIG9yIGRhdGEgaXMgcmVjZWl2ZWQsIGFuIGFja25vd2xlZGdlZCAobG93IGxldmVsIHRvIFNEQSkgd2lsbCBiZSByZXR1cm5lZCBkdXJpbmcgdGhlIGFja25vd2xlZGdlIGNsb2NrIHB1bHNlIG9uIHRoZSBTQ0wgbGluZSB3aGVuIDEuKSBBIHNsYXZlIGlzIGFja25vd2xlZGdpbmcgdGhlIGFkZHJlc3Mgc2VudCBmcm9tIG1hc3RlciwgMi4pIFRoZSByZWNlaXZlciBkZXZpY2VzIGFyZSBhY2tub3dsZWRnaW5nIHRoZSBkYXRhIHNlbnQgYnkgdHJhbnNtaXR0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEFBPTAgcHJpb3IgdG8gYWRkcmVzcyBvciBkYXRhIHJlY2VpdmVkLCBhIE5vdCBhY2tub3dsZWRnZWQgKGhpZ2ggbGV2ZWwgdG8gU0RBKSB3aWxsIGJlIHJldHVybmVkIGR1cmluZyB0aGUgYWNrbm93bGVkZ2UgY2xvY2sgcHVsc2Ugb24gdGhlIFNDTCBsaW5lCisgICAgICogfFszXSAgICAgfFNJICAgICAgICB8STJDIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBhIG5ldyBJMkMgc3RhdGUgaXMgcHJlc2VudCBpbiB0aGUgSTJDX1NUQVRVUyByZWdpc3RlciwgdGhlIFNJIGZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgYml0IElOVEVOIChJMkNfQ1RMIFs3XSkgaXMgc2V0LCB0aGUgSTJDIGludGVycnVwdCBpcyByZXF1ZXN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTSSBtdXN0IGJlIGNsZWFyZWQgYnkgc29mdHdhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDbGVhciBTSSBieSB3cml0aW5nIDEgdG8gdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIEFDS01FTiBpcyBzZXQgaW4gc2xhdmUgcmVhZCBtb2RlLCB0aGUgU0kgZmxhZyBpcyBzZXQgaW4gOHRoIGNsb2NrIHBlcmlvZCBmb3IgdXNlciB0byBjb25maXJtIHRoZSBhY2tub3dsZWRnZSBiaXQgYW5kIDl0aCBjbG9jayBwZXJpb2QgZm9yIHVzZXIgdG8gcmVhZCB0aGUgZGF0YSBpbiB0aGUgZGF0YSBidWZmZXIuCisgICAgICogfFs0XSAgICAgfFNUTyAgICAgICB8STJDIFNUT1AgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE1hc3RlciBtb2RlLCBzZXR0aW5nIFNUTyB0byB0cmFuc21pdCBhIFNUT1AgY29uZGl0aW9uIHRvIGJ1cyB0aGVuIEkyQyBjb250cm9sbGVyIHdpbGwgY2hlY2sgdGhlIGJ1cyBjb25kaXRpb24gaWYgYSBTVE9QIGNvbmRpdGlvbiBpcyBkZXRlY3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5LgorICAgICAqIHxbNV0gICAgIHxTVEEgICAgICAgfEkyQyBTVEFSVCBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0dGluZyBTVEEgdG8gbG9naWMgMSB0byBlbnRlciBNYXN0ZXIgbW9kZSwgdGhlIEkyQyBoYXJkd2FyZSBzZW5kcyBhIFNUQVJUIG9yIHJlcGVhdCBTVEFSVCBjb25kaXRpb24gdG8gYnVzIHdoZW4gdGhlIGJ1cyBpcyBmcmVlLgorICAgICAqIHxbNl0gICAgIHxJMkNFTiAgICAgfEkyQyBDb250cm9sbGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdG8gZW5hYmxlIEkyQyBzZXJpYWwgZnVuY3Rpb24gY29udHJvbGxlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gSTJDRU49MSB0aGUgSTJDIHNlcmlhbCBmdW5jdGlvbiBlbmFibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgbXVsdGktZnVuY3Rpb24gcGluIGZ1bmN0aW9uIG11c3Qgc2V0IHRvIFNEQSwgYW5kIFNDTCBvZiBJMkMgZnVuY3Rpb24gZmlyc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyQyBjb250cm9sbGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMkMgY29udHJvbGxlciBFbmFibGVkLgorICAgICAqIHxbN10gICAgIHxJTlRFTiAgICAgfEVuYWJsZSBJbnRlcnJ1cHQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgSTJDX1Q6OkFERFIwCisgICAgICogT2Zmc2V0OiAweDA0ICBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3RlcjAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxHQyAgICAgICAgfEdlbmVyYWwgQ2FsbCBGdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHZW5lcmFsIENhbGwgRnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdlbmVyYWwgQ2FsbCBGdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTA6MV0gIHxBRERSICAgICAgfEkyQyBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvbnRlbnQgb2YgdGhpcyByZWdpc3RlciBpcyBpcnJlbGV2YW50IHdoZW4gSTJDIGlzIGluIE1hc3RlciBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdGhlIHNsYXZlIG1vZGUsIHRoZSBzZXZlbiBtb3N0IHNpZ25pZmljYW50IGJpdHMgbXVzdCBiZSBsb2FkZWQgd2l0aCB0aGUgY2hpcCdzIG93biBhZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEkyQyBoYXJkd2FyZSB3aWxsIHJlYWN0IGlmIGVpdGhlciBvZiB0aGUgYWRkcmVzcyBpcyBtYXRjaGVkLgorICAgICAqIEB2YXIgSTJDX1Q6OkRBVAorICAgICAqIE9mZnNldDogMHgwOCAgSTJDIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxEQVQgICAgICAgfEkyQyBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Qml0IFs3OjBdIGlzIGxvY2F0ZWQgd2l0aCB0aGUgOC1iaXQgdHJhbnNmZXJyZWQvcmVjZWl2ZWQgZGF0YSBvZiBJMkMgc2VyaWFsIHBvcnQuCisgICAgICogQHZhciBJMkNfVDo6U1RBVFVTMAorICAgICAqIE9mZnNldDogMHgwQyAgSTJDIFN0YXR1cyBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8U1RBVFVTICAgIHxJMkMgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHRocmVlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgYXJlIGFsd2F5cyAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZpdmUgbW9zdCBzaWduaWZpY2FudCBiaXRzIGNvbnRhaW4gdGhlIHN0YXR1cyBjb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlcmUgYXJlIDI4IHBvc3NpYmxlIHN0YXR1cyBjb2RlcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGNvbnRlbnQgb2YgSTJDX1NUQVRVUzAgaXMgRjhILCBubyBzZXJpYWwgaW50ZXJydXB0IGlzIHJlcXVlc3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBJMkNfU1RBVFVTMCB2YWx1ZXMgY29ycmVzcG9uZCB0byBkZWZpbmVkIEkyQyBzdGF0ZXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGVhY2ggb2YgdGhlc2Ugc3RhdGVzIGlzIGVudGVyZWQsIGEgc3RhdHVzIGludGVycnVwdCBpcyByZXF1ZXN0ZWQgKFNJID0gMSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIHZhbGlkIHN0YXR1cyBjb2RlIGlzIHByZXNlbnQgaW4gSTJDX1NUQVRVUzAgb25lIGN5Y2xlIGFmdGVyIFNJIGlzIHNldCBieSBoYXJkd2FyZSBhbmQgaXMgc3RpbGwgcHJlc2VudCBvbmUgY3ljbGUgYWZ0ZXIgU0kgaGFzIGJlZW4gcmVzZXQgYnkgc29mdHdhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBhZGRpdGlvbiwgc3RhdGVzIDAwSCBzdGFuZHMgZm9yIGEgQnVzIEVycm9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSBCdXMgRXJyb3Igb2NjdXJzIHdoZW4gYSBTVEFSVCBvciBTVE9QIGNvbmRpdGlvbiBpcyBwcmVzZW50IGF0IGFuIGlsbGVnYWwgcG9zaXRpb24gaW4gdGhlIGZvcm1hdGlvbiBmcmFtZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEV4YW1wbGUgb2YgaWxsZWdhbCBwb3NpdGlvbiBhcmUgZHVyaW5nIHRoZSBzZXJpYWwgdHJhbnNmZXIgb2YgYW4gYWRkcmVzcyBieXRlLCBhIGRhdGEgYnl0ZSBvciBhbiBhY2tub3dsZWRnZSBiaXQuCisgICAgICogQHZhciBJMkNfVDo6Q0xLRElWCisgICAgICogT2Zmc2V0OiAweDEwICBJMkMgQ2xvY2sgRGl2aWRlZCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs5OjBdICAgfERJVklERVIgICB8STJDIENsb2NrIERpdmlkZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZXMgdGhlIEkyQyBjbG9jayByYXRlOiBEYXRhIEJhdWQgUmF0ZSBvZiBJMkMgPSAoc3lzdGVtIGNsb2NrKSAvICg0eCAoSTJDX0NMS0RJVisxKSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIG1pbmltdW0gdmFsdWUgb2YgSTJDX0NMS0RJViBpcyA0LgorICAgICAqIEB2YXIgSTJDX1Q6OlRPQ1RMCisgICAgICogT2Zmc2V0OiAweDE0ICBJMkMgVGltZS1vdXQgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFRPSUYgICAgICB8VGltZS1vdXQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIEkyQyB0aW1lLW91dCBoYXBwZW5lZCBhbmQgaXQgY2FuIGludGVycnVwdCBDUFUgaWYgSTJDIGludGVycnVwdCBlbmFibGUgYml0IChJTlRFTikgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogU29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxXSAgICAgfFRPQ0RJVjQgICB8VGltZS1vdXQgQ291bnRlciBJbnB1dCBDbG9jayBEaXZpZGVkIGJ5IDQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEVuYWJsZWQsIFRoZSB0aW1lLW91dCBwZXJpb2QgaXMgZXh0ZW5kIDQgdGltZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWUtb3V0IHBlcmlvZCBpcyBleHRlbmQgNCB0aW1lcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZS1vdXQgcGVyaW9kIGlzIGV4dGVuZCA0IHRpbWVzIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFRPQ0VOICAgICB8VGltZS1vdXQgQ291bnRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBFbmFibGVkLCB0aGUgMTQtYml0IHRpbWUtb3V0IGNvdW50ZXIgd2lsbCBzdGFydCBjb3VudGluZyB3aGVuIFNJIGlzIGNsZWFyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0dGluZyBmbGFnIFNJIHRvIHUyMDE4MScgd2lsbCByZXNldCBjb3VudGVyIGFuZCByZS1zdGFydCB1cCBjb3VudGluZyBhZnRlciBTSSBpcyBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lLW91dCBjb3VudGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lLW91dCBjb3VudGVyIEVuYWJsZWQuCisgICAgICogQHZhciBJMkNfVDo6QUREUjEKKyAgICAgKiBPZmZzZXQ6IDB4MTggIEkyQyBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEdDICAgICAgICB8R2VuZXJhbCBDYWxsIEZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdlbmVyYWwgQ2FsbCBGdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR2VuZXJhbCBDYWxsIEZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxMDoxXSAgfEFERFIgICAgICB8STJDIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29udGVudCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGlycmVsZXZhbnQgd2hlbiBJMkMgaXMgaW4gTWFzdGVyIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB0aGUgc2xhdmUgbW9kZSwgdGhlIHNldmVuIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBtdXN0IGJlIGxvYWRlZCB3aXRoIHRoZSBjaGlwJ3Mgb3duIGFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgSTJDIGhhcmR3YXJlIHdpbGwgcmVhY3QgaWYgZWl0aGVyIG9mIHRoZSBhZGRyZXNzIGlzIG1hdGNoZWQuCisgICAgICogQHZhciBJMkNfVDo6QUREUjIKKyAgICAgKiBPZmZzZXQ6IDB4MUMgIEkyQyBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEdDICAgICAgICB8R2VuZXJhbCBDYWxsIEZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdlbmVyYWwgQ2FsbCBGdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR2VuZXJhbCBDYWxsIEZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxMDoxXSAgfEFERFIgICAgICB8STJDIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29udGVudCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGlycmVsZXZhbnQgd2hlbiBJMkMgaXMgaW4gTWFzdGVyIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB0aGUgc2xhdmUgbW9kZSwgdGhlIHNldmVuIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBtdXN0IGJlIGxvYWRlZCB3aXRoIHRoZSBjaGlwJ3Mgb3duIGFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgSTJDIGhhcmR3YXJlIHdpbGwgcmVhY3QgaWYgZWl0aGVyIG9mIHRoZSBhZGRyZXNzIGlzIG1hdGNoZWQuCisgICAgICogQHZhciBJMkNfVDo6QUREUjMKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIEkyQyBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyMworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEdDICAgICAgICB8R2VuZXJhbCBDYWxsIEZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdlbmVyYWwgQ2FsbCBGdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR2VuZXJhbCBDYWxsIEZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxMDoxXSAgfEFERFIgICAgICB8STJDIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29udGVudCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGlycmVsZXZhbnQgd2hlbiBJMkMgaXMgaW4gTWFzdGVyIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB0aGUgc2xhdmUgbW9kZSwgdGhlIHNldmVuIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBtdXN0IGJlIGxvYWRlZCB3aXRoIHRoZSBjaGlwJ3Mgb3duIGFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgSTJDIGhhcmR3YXJlIHdpbGwgcmVhY3QgaWYgZWl0aGVyIG9mIHRoZSBhZGRyZXNzIGlzIG1hdGNoZWQuCisgICAgICogQHZhciBJMkNfVDo6QUREUk1TSzAKKyAgICAgKiBPZmZzZXQ6IDB4MjQgIEkyQyBTbGF2ZSBBZGRyZXNzIE1hc2sgUmVnaXN0ZXIwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzEwOjFdICB8QUREUk1TSyAgIHxJMkMgQWRkcmVzcyBNYXNrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc2sgRGlzYWJsZWQgKHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJpdCBzaG91bGQgYmUgZXhhY3QgdGhlIHNhbWUgYXMgYWRkcmVzcyByZWdpc3Rlci4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNYXNrIEVuYWJsZWQgKHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIGFkZHJlc3MgYml0IGlzIGRvbid0IGNhcmUuKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJMkMgYnVzIGNvbnRyb2xsZXJzIHN1cHBvcnQgbXVsdGlwbGUgYWRkcmVzcyByZWNvZ25pdGlvbiB3aXRoIGZvdXIgYWRkcmVzcyBtYXNrIHJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgYml0IGluIHRoZSBhZGRyZXNzIG1hc2sgcmVnaXN0ZXIgaXMgc2V0IHRvIG9uZSwgaXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBiaXQgaXMgZG9uJ3QtY2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBiaXQgaXMgc2V0IHRvIHplcm8sIHRoYXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYml0IHNob3VsZCBiZSBleGFjdCB0aGUgc2FtZSBhcyBhZGRyZXNzIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSB3YWtlLXVwIGZ1bmN0aW9uIGNhbiBub3QgdXNlIGFkZHJlc3MgbWFzay4KKyAgICAgKiBAdmFyIEkyQ19UOjpBRERSTVNLMQorICAgICAqIE9mZnNldDogMHgyOCAgSTJDIFNsYXZlIEFkZHJlc3MgTWFzayBSZWdpc3RlcjEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTA6MV0gIHxBRERSTVNLICAgfEkyQyBBZGRyZXNzIE1hc2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzayBEaXNhYmxlZCAodGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYml0IHNob3VsZCBiZSBleGFjdCB0aGUgc2FtZSBhcyBhZGRyZXNzIHJlZ2lzdGVyLikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE1hc2sgRW5hYmxlZCAodGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBiaXQgaXMgZG9uJ3QgY2FyZS4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEkyQyBidXMgY29udHJvbGxlcnMgc3VwcG9ydCBtdWx0aXBsZSBhZGRyZXNzIHJlY29nbml0aW9uIHdpdGggZm91ciBhZGRyZXNzIG1hc2sgcmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBiaXQgaW4gdGhlIGFkZHJlc3MgbWFzayByZWdpc3RlciBpcyBzZXQgdG8gb25lLCBpdCBtZWFucyB0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyBhZGRyZXNzIGJpdCBpcyBkb24ndC1jYXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGJpdCBpcyBzZXQgdG8gemVybywgdGhhdCBtZWFucyB0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyByZWdpc3RlciBiaXQgc2hvdWxkIGJlIGV4YWN0IHRoZSBzYW1lIGFzIGFkZHJlc3MgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIHdha2UtdXAgZnVuY3Rpb24gY2FuIG5vdCB1c2UgYWRkcmVzcyBtYXNrLgorICAgICAqIEB2YXIgSTJDX1Q6OkFERFJNU0syCisgICAgICogT2Zmc2V0OiAweDJDICBJMkMgU2xhdmUgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyMgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMDoxXSAgfEFERFJNU0sgICB8STJDIEFkZHJlc3MgTWFzaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXNrIERpc2FibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyByZWdpc3RlciBiaXQgc2hvdWxkIGJlIGV4YWN0IHRoZSBzYW1lIGFzIGFkZHJlc3MgcmVnaXN0ZXIuKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTWFzayBFbmFibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyBhZGRyZXNzIGJpdCBpcyBkb24ndCBjYXJlLikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8STJDIGJ1cyBjb250cm9sbGVycyBzdXBwb3J0IG11bHRpcGxlIGFkZHJlc3MgcmVjb2duaXRpb24gd2l0aCBmb3VyIGFkZHJlc3MgbWFzayByZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGJpdCBpbiB0aGUgYWRkcmVzcyBtYXNrIHJlZ2lzdGVyIGlzIHNldCB0byBvbmUsIGl0IG1lYW5zIHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIGFkZHJlc3MgYml0IGlzIGRvbid0LWNhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgYml0IGlzIHNldCB0byB6ZXJvLCB0aGF0IG1lYW5zIHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJpdCBzaG91bGQgYmUgZXhhY3QgdGhlIHNhbWUgYXMgYWRkcmVzcyByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgd2FrZS11cCBmdW5jdGlvbiBjYW4gbm90IHVzZSBhZGRyZXNzIG1hc2suCisgICAgICogQHZhciBJMkNfVDo6QUREUk1TSzMKKyAgICAgKiBPZmZzZXQ6IDB4MzAgIEkyQyBTbGF2ZSBBZGRyZXNzIE1hc2sgUmVnaXN0ZXIzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzEwOjFdICB8QUREUk1TSyAgIHxJMkMgQWRkcmVzcyBNYXNrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc2sgRGlzYWJsZWQgKHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJpdCBzaG91bGQgYmUgZXhhY3QgdGhlIHNhbWUgYXMgYWRkcmVzcyByZWdpc3Rlci4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNYXNrIEVuYWJsZWQgKHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIGFkZHJlc3MgYml0IGlzIGRvbid0IGNhcmUuKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJMkMgYnVzIGNvbnRyb2xsZXJzIHN1cHBvcnQgbXVsdGlwbGUgYWRkcmVzcyByZWNvZ25pdGlvbiB3aXRoIGZvdXIgYWRkcmVzcyBtYXNrIHJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgYml0IGluIHRoZSBhZGRyZXNzIG1hc2sgcmVnaXN0ZXIgaXMgc2V0IHRvIG9uZSwgaXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBiaXQgaXMgZG9uJ3QtY2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBiaXQgaXMgc2V0IHRvIHplcm8sIHRoYXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYml0IHNob3VsZCBiZSBleGFjdCB0aGUgc2FtZSBhcyBhZGRyZXNzIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSB3YWtlLXVwIGZ1bmN0aW9uIGNhbiBub3QgdXNlIGFkZHJlc3MgbWFzay4KKyAgICAgKiBAdmFyIEkyQ19UOjpXS0NUTAorICAgICAqIE9mZnNldDogMHgzQyAgSTJDIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRU4gICAgICB8STJDIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMgd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxPSBJMkMgd2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbN10gICAgIHxOSERCVVNFTiAgfEkyQyBObyBIb2xkIEJVUyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyQyBkb24ndCBob2xkIGJ1cyBhZnRlciB3YWtlLXVwIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MT0gSTJDIGRvbid0IGhvbGQgYnVzIGFmdGVyIHdha2UtdXAgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEkyQyBjb250cm9sbGVyIGNvdWxkIHJlc3BvbnNlIHdoZW4gV0tJRiBldmVudCBpcyBub3QgY2xlYXIsIGl0IG1heSBjYXVzZSBlcnJvciBkYXRhIHRyYW5zbWl0dGVkIG9yIHJlY2VpdmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgZGF0YSB0cmFuc21pdHRlZCBvciByZWNlaXZlZCB3aGVuIFdLSUYgZXZlbnQgaXMgbm90IGNsZWFyLCB1c2VyIG11c3QgcmVzZXQgSTJDIGNvbnRyb2xsZXIgYW5kIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiBhZ2Fpbi4KKyAgICAgKiBAdmFyIEkyQ19UOjpXS1NUUworICAgICAqIE9mZnNldDogMHg0MCAgSTJDIFdha2UtdXAgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8V0tJRiAgICAgIHxJMkMgV2FrZS11cCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBjaGlwIGlzIHdva2VuIHVwIGZyb20gUG93ZXItZG93biBtb2RlIGJ5IEkyQywgdGhpcyBiaXQgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzFdICAgICB8V0tBS0RPTkUgIHxXYWtldXAgQWRkcmVzcyBGcmFtZSBBY2tub3dsZWRnZSBCaXQgRG9uZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgQUNLIGJpdCBjeWNsZSBvZiBhZGRyZXNzIG1hdGNoIGZyYW1lIGlzbid0IGRvbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBBQ0sgYml0IGN5Y2xlIG9mIGFkZHJlc3MgbWF0Y2ggZnJhbWUgaXMgZG9uZSBpbiBwb3dlci1kb3duLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbid0IHJlbGVhc2UgV0tJRi4gU29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsyXSAgICAgfFdSU1RTV0sgICB8UmVhZC9Xcml0ZSBTdGF0dXMgQml0IGluIEFkZHJlc3MgV2FrZXVwIEZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdyaXRlIGNvbW1hbmQgYmUgcmVjb3JkIG9uIHRoZSBhZGRyZXNzIG1hdGNoIHdha2V1cCBmcmFtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVhZCBjb21tYW5kIGJlIHJlY29yZCBvbiB0aGUgYWRkcmVzcyBtYXRjaCB3YWtldXAgZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gV0tBS0RPTkUgYml0LgorICAgICAqIEB2YXIgSTJDX1Q6OkNUTDEKKyAgICAgKiBPZmZzZXQ6IDB4NDQgIEkyQyBDb250cm9sIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxUWFBETUFFTiAgfFBETUEgVHJhbnNtaXQgQ2hhbm5lbCBBdmFpbGFibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgUERNQSBmdW5jdGlvbiBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBQRE1BIGZ1bmN0aW9uIGVuYWJsZS4KKyAgICAgKiB8WzFdICAgICB8UlhQRE1BRU4gIHxQRE1BIFJlY2VpdmUgQ2hhbm5lbCBBdmFpbGFibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBQRE1BIGZ1bmN0aW9uIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgUERNQSBmdW5jdGlvbiBlbmFibGUuCisgICAgICogfFsyXSAgICAgfFBETUFSU1QgICB8UERNQSBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSBJMkMgcmVxdWVzdCB0byBQRE1BLiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHxbOF0gICAgIHxQRE1BU1RSICAgfFBETUEgU3RyZXRjaCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDIHNlbmQgU1RPUCBhdXRvbWF0aWNhbGx5IGFmdGVyIFBETUEgdHJhbnNmZXIgZG9uZS4gKG9ubHkgbWFzdGVyIFRYKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMkMgU0NMIGJ1cyBpcyBzdHJldGNoZWQgYnkgaGFyZHdhcmUgYWZ0ZXIgUERNQSB0cmFuc2ZlciBkb25lIGlmIHRoZSBTSSBpcyBub3QgY2xlYXJlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfChvbmx5IG1hc3RlciBUWCkKKyAgICAgKiB8WzldICAgICB8QUREUjEwRU4gIHxBZGRyZXNzIDEwLWJpdCBGdW5jdGlvbiBFbmFibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQWRkcmVzcyBtYXRjaCAxMC1iaXQgZnVuY3Rpb24gaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFkZHJlc3MgbWF0Y2ggMTAtYml0IGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgICAgICogQHZhciBJMkNfVDo6U1RBVFVTMQorICAgICAqIE9mZnNldDogMHg0OCAgSTJDIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QURNQVQwICAgIHxJMkMgQWRkcmVzcyAwIE1hdGNoIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYWRkcmVzcyAwIGlzIG1hdGNoZWQsIGhhcmR3YXJlIHdpbGwgaW5mb3JtIHdoaWNoIGFkZHJlc3MgdXNlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgc2V0IHRvIDEsIGFuZCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzFdICAgICB8QURNQVQxICAgIHxJMkMgQWRkcmVzcyAxIE1hdGNoIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYWRkcmVzcyAxIGlzIG1hdGNoZWQsIGhhcmR3YXJlIHdpbGwgaW5mb3JtIHdoaWNoIGFkZHJlc3MgdXNlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgc2V0IHRvIDEsIGFuZCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzJdICAgICB8QURNQVQyICAgIHxJMkMgQWRkcmVzcyAyIE1hdGNoIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYWRkcmVzcyAyIGlzIG1hdGNoZWQsIGhhcmR3YXJlIHdpbGwgaW5mb3JtIHdoaWNoIGFkZHJlc3MgdXNlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgc2V0IHRvIDEsIGFuZCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzNdICAgICB8QURNQVQzICAgIHxJMkMgQWRkcmVzcyAzIE1hdGNoIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYWRkcmVzcyAzIGlzIG1hdGNoZWQsIGhhcmR3YXJlIHdpbGwgaW5mb3JtIHdoaWNoIGFkZHJlc3MgdXNlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgc2V0IHRvIDEsIGFuZCBzb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzhdICAgICB8T05CVVNZICAgIHxPbiBCdXMgQnVzeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlcyB0aGF0IGEgY29tbXVuaWNhdGlvbiBpcyBpbiBwcm9ncmVzcyBvbiB0aGUgYnVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gYSBTVEFSVCBjb25kaXRpb24gaXMgZGV0ZWN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlIHdoZW4gYSBTVE9QIGNvbmRpdGlvbiBpcyBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGJ1cyBpcyBJRExFIChib3RoIFNDTEsgYW5kIFNEQSBIaWdoKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGJ1cyBpcyBidXN5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6VGhpcyBiaXQgaXMgcmVhZCBvbmx5LgorICAgICAqIEB2YXIgSTJDX1Q6OlRNQ1RMCisgICAgICogT2Zmc2V0OiAweDRDICBJMkMgVGltaW5nIENvbmZpZ3VyZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzg6MF0gICB8U1RDVEwgICAgIHxTZXR1cCBUaW1lIENvbmZpZ3VyZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgZGVsYXkgdGltaW5nIGJldHdlZW4gU0RBIGZhbGxpbmcgZWRnZSBhbmQgU0NMIHJpc2luZyBlZGdlIGluIHRyYW5zbWlzc2lvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWxheSBzZXR1cCB0aW1lIGlzIG51bWJlcnMgb2YgcGVyaXBoZXJhbCBjbG9jayA9IFNUQ1RMIHggUENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBTZXR1cCB0aW1lIHNldHRpbmcgc2hvdWxkIG5vdCBtYWtlIFNDTCBvdXRwdXQgbGVzcyB0aGFuIHRocmVlIFBDTEtzLgorICAgICAqIHxbMjQ6MTZdIHxIVENUTCAgICAgfEhvbGQgVGltZSBDb25maWd1cmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGVsYXkgdGltaW5nIGJldHdlZW4gU0NMIGZhbGxpbmcgZWRnZSBhbmQgU0RBIHJpc2luZyBlZGdlIGluIHRyYW5zbWlzc2lvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWxheSBob2xkIHRpbWUgaXMgbnVtYmVycyBvZiBwZXJpcGhlcmFsIGNsb2NrID0gSFRDVEwgeCBQQ0xLLgorICAgICAqIEB2YXIgSTJDX1Q6OkJVU0NUTAorICAgICAqIE9mZnNldDogMHg1MCAgSTJDIEJ1cyBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBQ0tNRU4gICAgfEFja25vd2xlZGdlIENvbnRyb2wgYnkgTWFudWFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3JkZXIgdG8gYWxsb3cgQUNLIGNvbnRyb2wgaW4gc2xhdmUgcmVjZXB0aW9uIGluY2x1ZGluZyB0aGUgY29tbWFuZCBhbmQgZGF0YSwgc2xhdmUgYnl0ZSBjb250cm9sIG1vZGUgbXVzdCBiZSBlbmFibGVkIGJ5IHNldHRpbmcgdGhlIEFDS01FTiBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIGJ5dGUgY29udHJvbCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgYnl0ZSBjb250cm9sIEVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgOXRoIGJpdCBjYW4gcmVzcG9uc2UgdGhlIEFDSyBvciBOQUNLIGFjY29yZGluZyB0aGUgcmVjZWl2ZWQgZGF0YSBieSB1c2VyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgYnl0ZSBpcyByZWNlaXZlZCwgc3RyZXRjaGluZyB0aGUgU0NMSyBzaWduYWwgbG93IGJldHdlZW4gdGhlIDh0aCBhbmQgOXRoIFNDTEsgcHVsc2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdGhlIEJNREVOID0xIGFuZCB0aGlzIGJpdCBpcyBlbmFibGVkLCB0aGUgaW5mb3JtYXRpb24gb2YgSTJDX1NUQVRVUyB3aWxsIGJlIGZpeGVkIGFzIDB4RjAgaW4gc2xhdmUgcmVjZWl2ZSBjb25kaXRpb24uCisgICAgICogfFsxXSAgICAgfFBFQ0VOICAgICB8UGFja2V0IEVycm9yIENoZWNraW5nIENhbGN1bGF0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGFja2V0IEVycm9yIENoZWNraW5nIENhbGN1bGF0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgQ2FsY3VsYXRpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIEkyQyBlbnRlciBwb3dlciBkb3duIG1vZGUsIHRoZSBiaXQgc2hvdWxkIGJlIGVuYWJsZWQgYWZ0ZXIgd2FrZS11cCBpZiBuZWVkZWQgUEVDIGNhbGN1bGF0aW9uLgorICAgICAqIHxbMl0gICAgIHxCTURFTiAgICAgfEJ1cyBNYW5hZ2VtZW50IERldmljZSBEZWZhdWx0IEFkZHJlc3MgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZXZpY2UgZGVmYXVsdCBhZGRyZXNzIERpc2FibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBhZGRyZXNzIDAnYjExMDAwMDF4IGNvbWluZyBhbmQgdGhlIGJvdGggb2YgQk1ERU4gYW5kIEFDS01FTiBhcmUgZW5hYmxlZCwgdGhlIGRldmljZSByZXNwb25zZXMgTkFDS2VkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERldmljZSBkZWZhdWx0IGFkZHJlc3MgRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGFkZHJlc3MgMCdiMTEwMDAwMXggY29taW5nIGFuZCB0aGUgYm90aCBvZiBCTURFTiBhbmQgQUNLTUVOIGFyZSBlbmFibGVkLCB0aGUgZGV2aWNlIHJlc3BvbnNlcyBBQ0tlZC4KKyAgICAgKiB8WzNdICAgICB8Qk1IRU4gICAgIHxCdXMgTWFuYWdlbWVudCBIb3N0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSG9zdCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSG9zdCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxBTEVSVEVOICAgfEJ1cyBNYW5hZ2VtZW50IEFsZXJ0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZXZpY2UgTW9kZSAoQk1IRU4gPTApLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWxlYXNlIHRoZSBCTV9BTEVSVCBwaW4gaGlnaCBhbmQgQWxlcnQgUmVzcG9uc2UgSGVhZGVyIGRpc2FibGVkOiAwMDAxMTAweCBmb2xsb3dlZCBieSBOQUNLIGlmIGJvdGggb2YgQk1ERU4gYW5kIEFDS01FTiBhcmUgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRHJpdmUgQk1fQUxFUlQgcGluIGxvdyBhbmQgQWxlcnQgUmVzcG9uc2UgQWRkcmVzcyBIZWFkZXIgZW5hYmxlczogMDAwMTEwMHggZm9sbG93ZWQgYnkgQUNLIGlmIGJvdGggb2YgQk1ERU4gYW5kIEFDS01FTiBhcmUgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIb3N0IE1vZGUgKEJNSEVOID0xKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQk1fQUxFUlQgcGluIG5vdCBzdXBwb3J0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJNX0FMRVJUIHBpbiBzdXBwb3J0ZWQuCisgICAgICogfFs1XSAgICAgfFNDVExPU1RTICB8U3VzcGVuZC9Db250cm9sIERhdGEgT3V0cHV0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgb3V0cHV0IG9mIFNVU0NPTiBwaW4gaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgb3V0cHV0IG9mIFNVU0NPTiBwaW4gaXMgaGlnaC4KKyAgICAgKiB8WzZdICAgICB8U0NUTE9FTiAgIHxTdXNwZW5kIG9yIENvbnRyb2wgUGluIE91dHB1dCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBTVVNDT04gcGluIGluIGlucHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgb3V0cHV0IGVuYWJsZSBpcyBhY3RpdmUgb24gdGhlIFNVU0NPTiBwaW4uCisgICAgICogfFs3XSAgICAgfEJVU0VOICAgICB8QlVTIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHN5c3RlbSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc3lzdGVtIG1hbmFnZW1lbnQgZnVuY3Rpb24gaXMgRW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gdGhlIGJpdCBpcyBlbmFibGVkLCB0aGUgaW50ZXJuYWwgMTQtYml0IGNvdW50ZXIgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHRpbWUgb3V0IGV2ZW50IG9mIGNsb2NrIGxvdyBjb25kaXRpb24uCisgICAgICogfFs4XSAgICAgfFBFQ1RYRU4gICB8UGFja2V0IEVycm9yIENoZWNraW5nIEJ5dGUgVHJhbnNtaXNzaW9uL1JlY2VwdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBQRUMgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBFQyB0cmFuc21pc3Npb24gaXMgcmVxdWVzdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IDEuVGhpcyBiaXQgaGFzIG5vIGVmZmVjdCBpbiBzbGF2ZSBtb2RlIHdoZW4gQUNLTUVOID0wLgorICAgICAqIHxbOV0gICAgIHxUSURMRSAgICAgfFRpbWVyIENoZWNrIGluIElkbGUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQlVTVE9VVCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdGltZS1vdXQgb2YgY2xvY2sgbG93IGluIGJ1cyBhY3RpdmUgYW5kIHRoZSBpZGxlIHBlcmlvZCBpbiBidXMgSWRsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIGNvbmRpdGlvbiBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgQlVTVE9VVCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgY2xvY2sgbG93IHBlcmlvZCBpbiBidXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgQlVTVE9VVCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgSURMRSBwZXJpb2QgaW4gYnVzIElkbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIEJVU1kgKEkyQ19CVVNTVFNbMF0pIGluZGljYXRlIHRoZSBjdXJyZW50IGJ1cyBzdGF0ZS4KKyAgICAgKiB8WzEwXSAgICB8UEVDQ0xSICAgIHxQRUMgQ2xlYXIgYXQgUmVwZWF0IFN0YXJ0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNhbGN1bGF0aW9uIG9mIFBFQyBzdGFydHMgd2hlbiBQRUNFTiBpcyBzZXQgdG8gMSBhbmQgaXQgaXMgY2xlYXIgd2hlbiB0aGUgU1RBIG9yIFNUTyBiaXQgaXMgZGV0ZWN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIFBFQ0NMUiBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIGNvbmRpdGlvbiBvZiBSRVBFQVQgU1RBUlQgY2FuIGNsZWFyIHRoZSBQRUMgY2FsY3VsYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBQRUMgY2FsY3VsYXRpb24gaXMgY2xlYXJlZCBieSBSZXBlYXQgU3RhcnQgZnVuY3Rpb24gaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBQRUMgY2FsY3VsYXRpb24gaXMgY2xlYXJlZCBieSBSZXBlYXQgU3RhcnQgZnVuY3Rpb24gaXMgRW5hYmxlZC4KKyAgICAgKiB8WzExXSAgICB8QUNLTTlTSSAgIHxBY2tub3dsZWRnZSBNYW51YWwgRW5hYmxlIEV4dHJhIFNJIEludGVycnVwdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGVyZSBpcyBubyBTSSBpbnRlcnJ1cHQgaW4gdGhlIDl0aCBjbG9jayBjeWNsZSB3aGVuIHRoZSBCVVNFTiA9MSBhbmQgQUNLTUVOID0xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBTSSBpbnRlcnJ1cHQgaW4gdGhlIDl0aCBjbG9jayBjeWNsZSB3aGVuIHRoZSBCVVNFTiA9MSBhbmQgQUNLTUVOID0xLgorICAgICAqIHxbMTJdICAgIHxCQ0RJRU4gICAgfFBhY2tldCBFcnJvciBDaGVja2luZyBCeXRlIENvdW50IERvbmUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBieXRlIGNvdW50IGRvbmUgaW50ZXJydXB0IGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgdGhlIGJ5dGUgY291bnQgZG9uZSBpbnRlcnJ1cHQgaXMgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB1c2VkIGluIFBFQ0VOID0xLgorICAgICAqIHxbMTNdICAgIHxQRUNESUVOICAgfFBhY2tldCBFcnJvciBDaGVja2luZyBCeXRlIFRyYW5zZmVyIERvbmUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBQRUMgdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGUgUEVDIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IGlzIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgdXNlZCBpbiBQRUNFTiA9MS4KKyAgICAgKiBAdmFyIEkyQ19UOjpCVVNUQ1RMCisgICAgICogT2Zmc2V0OiAweDU0ICBJMkMgQnVzIE1hbmFnZW1lbnQgVGltZXIgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJVU1RPRU4gICB8QnVzIFRpbWUgT3V0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBidXMgY2xvY2sgbG93IHRpbWUtb3V0IGRldGVjdGlvbiBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZSBidXMgY2xvY2sgbG93IHRpbWUtb3V0IGRldGVjdGlvbiBpcyBFbmFibGVkIChidXMgY2xvY2sgaXMgbG93IGZvciBtb3JlIHRoYW4gVGltZS1vdXQgKGluIEJJRExFPTApIG9yIGhpZ2ggbW9yZSB0aGFuIFRpbWUtb3V0KGluIEJJRExFID0xKQorICAgICAqIHxbMV0gICAgIHxDTEtUT0VOICAgfEN1bXVsYXRpdmUgQ2xvY2sgTG93IFRpbWUgT3V0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBjdW11bGF0aXZlIGNsb2NrIGxvdyB0aW1lLW91dCBkZXRlY3Rpb24gaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGUgY3VtdWxhdGl2ZSBjbG9jayBsb3cgdGltZS1vdXQgZGV0ZWN0aW9uIGlzIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIE1hc3RlciwgaXQgY2FsY3VsYXRlcyB0aGUgcGVyaW9kIGZyb20gU1RBUlQgdG8gQUNLCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNsYXZlLCBpdCBjYWxjdWxhdGVzIHRoZSBwZXJpb2QgZnJvbSBTVEFSVCB0byBTVE9QCisgICAgICogfFsyXSAgICAgfEJVU1RPSUVOICB8VGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCVVNZID0xLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgdGhlIFNDTEsgbG93IHRpbWUtb3V0IGludGVycnVwdCBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZSBTQ0xLIGxvdyB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCVVNZID0wLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgdGhlIGJ1cyBJRExFIHRpbWUtb3V0IGludGVycnVwdCBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZSBidXMgSURMRSB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8Q0xLVE9JRU4gIHxFeHRlbmRlZCBDbG9jayBUaW1lIE91dCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgdGhlIGNsb2NrIHRpbWUgb3V0IGludGVycnVwdCBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZSBjbG9jayB0aW1lIG91dCBpbnRlcnJ1cHQgaXMgRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8VE9SU1RFTiAgIHxUaW1lIE91dCBSZXNldCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyB0aGUgSTJDIHN0YXRlIG1hY2hpbmUgcmVzZXQgaXMgRGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZSBJMkMgc3RhdGUgbWFjaGluZSByZXNldCBpcyBFbmFibGUuIChUaGUgY2xvY2sgYW5kIGRhdGEgYnVzIHdpbGwgYmUgcmVsZWFzZWQgdG8gaGlnaCkKKyAgICAgKiBAdmFyIEkyQ19UOjpCVVNTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NTggIEkyQyBCdXMgTWFuYWdlbWVudCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCVVNZICAgICAgfEJ1cyBCdXN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGVzIHRoYXQgYSBjb21tdW5pY2F0aW9uIGlzIGluIHByb2dyZXNzIG9uIHRoZSBidXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBhIFNUQVJUIGNvbmRpdGlvbiBpcyBkZXRlY3RlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGNsZWFyZWQgYnkgaGFyZHdhcmUgd2hlbiBhIFNUT1AgY29uZGl0aW9uIGlzIGRldGVjdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBidXMgaXMgSURMRSAoYm90aCBTQ0xLIGFuZCBTREEgSGlnaCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBidXMgaXMgYnVzeS4KKyAgICAgKiB8WzFdICAgICB8QkNET05FICAgIHxCeXRlIENvdW50IFRyYW5zbWlzc2lvbi9SZWNlaXZlIERvbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5kaWNhdGVzIHRoZSBieXRlIGNvdW50IHRyYW5zbWlzc2lvbi8gcmVjZWl2ZSBpcyBub3QgZmluaXNoZWQgd2hlbiB0aGUgUEVDRU4gaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgdGhlIGJ5dGUgY291bnQgdHJhbnNtaXNzaW9uLyByZWNlaXZlIGlzIGZpbmlzaGVkIHdoZW4gdGhlIFBFQ0VOIGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBTb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzJdICAgICB8UEVDRVJSICAgIHxQRUMgRXJyb3IgaW4gUmVjZXB0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyB0aGUgUEVDIHZhbHVlIGVxdWFsIHRoZSByZWNlaXZlZCBQRUMgZGF0YSBwYWNrZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGUgUEVDIHZhbHVlIGRvZXNuJ3QgbWF0Y2ggdGhlIHJlY2VpdmUgUEVDIGRhdGEgcGFja2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbM10gICAgIHxBTEVSVCAgICAgfFNNQnVzIEFsZXJ0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERldmljZSBNb2RlIChCTUhFTiA9MCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZGljYXRlcyBTTUJBTEVSVCBwaW4gc3RhdGUgaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgU01CQUxFUlQgcGluIHN0YXRlIGlzIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SG9zdCBNb2RlIChCTUhFTiA9MSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNNQkFMRVJUIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgdGhlcmUgaXMgU01CQUxFUlQgZXZlbnQgKGZhbGxpbmcgZWRnZSkgaXMgZGV0ZWN0ZWQgaW4gU01BTEVSVCBwaW4gd2hlbiB0aGUgQk1IRU4gPSAxIChTTUJ1cyBob3N0IGNvbmZpZ3VyYXRpb24pIGFuZCB0aGUgQUxFUlRFTiA9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBTTUJBTEVSVCBwaW4gaXMgYW4gb3Blbi1kcmFpbiBwaW4sIHRoZSBwdWxsLWhpZ2ggcmVzaXN0b3IgaXMgbXVzdCBpbiB0aGUgc3lzdGVtCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbNF0gICAgIHxTQ1RMRElOICAgfEJ1cyBTdXNwZW5kIG9yIENvbnRyb2wgU2lnbmFsIElucHV0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgaW5wdXQgc3RhdHVzIG9mIFNVU0NPTiBwaW4gaXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGlucHV0IHN0YXR1cyBvZiBTVVNDT04gcGluIGlzIDEuCisgICAgICogfFs1XSAgICAgfEJVU1RPICAgICB8QnVzIFRpbWUtb3V0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubyBhbnkgdGltZS1vdXQgb3IgZXh0ZXJuYWwgY2xvY2sgdGltZS1vdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGljYXRlcyB0aGF0IGEgdGltZS1vdXQgb3IgZXh0ZXJuYWwgY2xvY2sgdGltZS1vdXQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gYnVzIGJ1c3ksIHRoZSBiaXQgaW5kaWNhdGVzIHRoZSB0b3RhbCBjbG9jayBsb3cgdGltZS1vdXQgZXZlbnQgb2NjdXJyZWQgb3RoZXJ3aXNlLCBpdCBpbmRpY2F0ZXMgdGhlIGJ1cyBpZGxlIHRpbWUtb3V0IGV2ZW50IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbNl0gICAgIHxDTEtUTyAgICAgfENsb2NrIExvdyBBY2N1bXVsYXRlIFRpbWUtb3V0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VtdWxhdGl2ZSBjbG9jayBsb3cgaXMgbm8gYW55IHRpbWUtb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VtdWxhdGl2ZSBjbG9jayBsb3cgdGltZS1vdXQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogU29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFs3XSAgICAgfFBFQ0RPTkUgICB8UEVDIEJ5dGUgVHJhbnNtaXNzaW9uL1JlY2VpdmUgRG9uZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgdGhlIFBFQyB0cmFuc21pc3Npb24vIHJlY2VpdmUgaXMgbm90IGZpbmlzaGVkIHdoZW4gdGhlIFBFQ0VOIGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5kaWNhdGVzIHRoZSBQRUMgdHJhbnNtaXNzaW9uLyByZWNlaXZlIGlzIGZpbmlzaGVkIHdoZW4gdGhlIFBFQ0VOIGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBTb2Z0d2FyZSBjYW4gd3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiBAdmFyIEkyQ19UOjpQS1RTSVpFCisgICAgICogT2Zmc2V0OiAweDVDICBJMkMgUGFja2V0IEVycm9yIENoZWNraW5nIEJ5dGUgTnVtYmVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzg6MF0gICB8UExEU0laRSAgIHxUcmFuc2ZlciBCeXRlIE51bWJlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB0cmFuc21pc3Npb24gb3IgcmVjZWl2ZSBieXRlIG51bWJlciBpbiBvbmUgdHJhbnNhY3Rpb24gd2hlbiB0aGUgUEVDRU4gaXMgc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIG1heGltdW0gdHJhbnNhY3Rpb24gb3IgcmVjZWl2ZSBieXRlIGlzIDI1NiBCeXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RpY2U6IFRoZSBieXRlIG51bWJlciBjb3VudGluZyBpbmNsdWRlcyBhZGRyZXNzLCBjb21tYW5kIGNvZGUsIGFuZCBkYXRhIGZyYW1lLgorICAgICAqIEB2YXIgSTJDX1Q6OlBLVENSQworICAgICAqIE9mZnNldDogMHg2MCAgSTJDIFBhY2tldCBFcnJvciBDaGVja2luZyBCeXRlIFZhbHVlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8UEVDQ1JDICAgIHxQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgQnl0ZSBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYnl0ZSBpbmRpY2F0ZXMgdGhlIHBhY2tldCBlcnJvciBjaGVja2luZyBjb250ZW50IGFmdGVyIHRyYW5zbWlzc2lvbiBvciByZWNlaXZlIGJ5dGUgY291bnQgYnkgdXNpbmcgdGhlIEMoeCkgPSBYOCArIFgyICsgWCArIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyByZWFkIG9ubHkuCisgICAgICogQHZhciBJMkNfVDo6QlVTVE9VVAorICAgICAqIE9mZnNldDogMHg2NCAgSTJDIEJ1cyBNYW5hZ2VtZW50IFRpbWVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8QlVTVE8gICAgIHxCdXMgTWFuYWdlbWVudCBUaW1lLW91dCBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHRoZSBidXMgdGltZS1vdXQgdmFsdWUgaW4gYnVzIGlzIElETEUgb3IgU0NMSyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdGhlIHVzZXIgd2FudHMgdG8gcmV2aXNlIHRoZSB2YWx1ZSBvZiBCVVNUT1VULCB0aGUgVE9SU1RFTiAoSTJDX0JVU1RDVExbNF0pIGJpdCBzaGFsbCBiZSBzZXQgdG8gMSBhbmQgY2xlYXIgdG8gMCBmaXJzdCBpbiB0aGUgQlVTRU4oSTJDX0JVU0NUTFs3XSkgaXMgc2V0LgorICAgICAqIEB2YXIgSTJDX1Q6OkNMS1RPVVQKKyAgICAgKiBPZmZzZXQ6IDB4NjggIEkyQyBCdXMgTWFuYWdlbWVudCBDbG9jayBMb3cgVGltZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxDTEtUTyAgICAgfEJ1cyBDbG9jayBMb3cgVGltZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZmllbGQgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIGN1bXVsYXRpdmUgY2xvY2sgZXh0ZW5zaW9uIHRpbWUtb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHRoZSB1c2VyIHdhbnRzIHRvIHJldmlzZSB0aGUgdmFsdWUgb2YgQ0xLTFRPVVQsIHRoZSBUT1JTVEVOIGJpdCBzaGFsbCBiZSBzZXQgdG8gMSBhbmQgY2xlYXIgdG8gMCBmaXJzdCBpbiB0aGUgQlVTRU4gaXMgc2V0LgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMMDsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIEkyQyBDb250cm9sIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFERFIwOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3RlcjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBEQVQ7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gSTJDIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU1RBVFVTMDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIEkyQyBTdGF0dXMgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS0RJVjsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBJMkMgQ2xvY2sgRGl2aWRlZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUT0NUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxNF0gSTJDIFRpbWUtb3V0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUREUjE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMThdIEkyQyBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFERFIyOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDFjXSBJMkMgU2xhdmUgQWRkcmVzcyBSZWdpc3RlcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRERSMzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gSTJDIFNsYXZlIEFkZHJlc3MgUmVnaXN0ZXIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUREUk1TSzA7ICAgICAgICAgICAgICAvKiE8IFsweDAwMjRdIEkyQyBTbGF2ZSBBZGRyZXNzIE1hc2sgUmVnaXN0ZXIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFERFJNU0sxOyAgICAgICAgICAgICAgLyohPCBbMHgwMDI4XSBJMkMgU2xhdmUgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRERSTVNLMjsgICAgICAgICAgICAgIC8qITwgWzB4MDAyY10gSTJDIFNsYXZlIEFkZHJlc3MgTWFzayBSZWdpc3RlcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUREUk1TSzM7ICAgICAgICAgICAgICAvKiE8IFsweDAwMzBdIEkyQyBTbGF2ZSBBZGRyZXNzIE1hc2sgUmVnaXN0ZXIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzJdOworICAgIF9fSU8gdWludDMyX3QgV0tDVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwM2NdIEkyQyBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFdLU1RTOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDQwXSBJMkMgV2FrZS11cCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEwxOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0NF0gSTJDIENvbnRyb2wgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1RBVFVTMTsgICAgICAgICAgICAgICAvKiE8IFsweDAwNDhdIEkyQyBTdGF0dXMgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRNQ1RMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDRjXSBJMkMgVGltaW5nIENvbmZpZ3VyZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCVVNDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1MF0gSTJDIEJ1cyBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlVTVENUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwNTRdIEkyQyBCdXMgTWFuYWdlbWVudCBUaW1lciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJVU1NUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDU4XSBJMkMgQnVzIE1hbmFnZW1lbnQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQS1RTSVpFOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA1Y10gSTJDIFBhY2tldCBFcnJvciBDaGVja2luZyBCeXRlIE51bWJlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUEtUQ1JDOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNjBdIEkyQyBQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgQnl0ZSBWYWx1ZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJVU1RPVVQ7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDY0XSBJMkMgQnVzIE1hbmFnZW1lbnQgVGltZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtUT1VUOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA2OF0gSTJDIEJ1cyBNYW5hZ2VtZW50IENsb2NrIExvdyBUaW1lciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworCit9IEkyQ19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBJMkNfQ09OU1QgSTJDIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIEkyQyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIEkyQ19DVEwwX0FBX1BvcyAgICAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMDogQUEgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMMF9BQV9Nc2sgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0NUTDBfQUFfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDA6IEFBIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQ1RMMF9TSV9Qb3MgICAgICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDA6IFNJIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTDBfU0lfTXNrICAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19DVEwwX1NJX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwwOiBTSSBNYXNrICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0NUTDBfU1RPX1BvcyAgICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwwOiBTVE8gUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVEwwX1NUT19Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQ1RMMF9TVE9fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMDogU1RPIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19DVEwwX1NUQV9Qb3MgICAgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMDogU1RBIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMMF9TVEFfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0NUTDBfU1RBX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDA6IFNUQSBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQ1RMMF9JMkNFTl9Qb3MgICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDA6IEkyQ0VOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTDBfSTJDRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19DVEwwX0kyQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwwOiBJMkNFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0NUTDBfSU5URU5fUG9zICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwwOiBJTlRFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVEwwX0lOVEVOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQ1RMMF9JTlRFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMDogSU5URU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19BRERSMF9HQ19Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjA6IEdDIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQUREUjBfR0NfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0FERFIwX0dDX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIwOiBHQyBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQUREUjBfQUREUl9Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIwOiBBRERSIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0FERFIwX0FERFJfTXNrICAgICAgICAgICAgICAgKDB4M2ZmdWwgPDwgSTJDX0FERFIwX0FERFJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMDogQUREUiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0RBVF9EQVRfUG9zICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpEQVQ6IERBVCBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19EQVRfREFUX01zayAgICAgICAgICAgICAgICAgICgweGZmdWwgPDwgSTJDX0RBVF9EQVRfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6REFUOiBEQVQgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19TVEFUVVMwX1NUQVRVU19Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6U1RBVFVTMDogU1RBVFVTIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMkNfU1RBVFVTMF9TVEFUVVNfTXNrICAgICAgICAgICAoMHhmZnVsIDw8IEkyQ19TVEFUVVMwX1NUQVRVU19Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlNUQVRVUzA6IFNUQVRVUyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQ0xLRElWX0RJVklERVJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNMS0RJVjogRElWSURFUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NMS0RJVl9ESVZJREVSX01zayAgICAgICAgICAgKDB4M2ZmdWwgPDwgSTJDX0NMS0RJVl9ESVZJREVSX1BvcykgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDTEtESVY6IERJVklERVIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1RPQ1RMX1RPSUZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpUT0NUTDogVE9JRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19UT0NUTF9UT0lGX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfVE9DVExfVE9JRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6VE9DVEw6IFRPSUYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19UT0NUTF9UT0NESVY0X1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6VE9DVEw6IFRPQ0RJVjQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfVE9DVExfVE9DRElWNF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX1RPQ1RMX1RPQ0RJVjRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlRPQ1RMOiBUT0NESVY0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfVE9DVExfVE9DRU5fUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlRPQ1RMOiBUT0NFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1RPQ1RMX1RPQ0VOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19UT0NUTF9UT0NFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpUT0NUTDogVE9DRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0FERFIxX0dDX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMTogR0MgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19BRERSMV9HQ19Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQUREUjFfR0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjE6IEdDIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19BRERSMV9BRERSX1BvcyAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjE6IEFERFIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQUREUjFfQUREUl9Nc2sgICAgICAgICAgICAgICAoMHgzZmZ1bCA8PCBJMkNfQUREUjFfQUREUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIxOiBBRERSIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQUREUjJfR0NfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIyOiBHQyBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0FERFIyX0dDX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19BRERSMl9HQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMjogR0MgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0FERFIyX0FERFJfUG9zICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMjogQUREUiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19BRERSMl9BRERSX01zayAgICAgICAgICAgICAgICgweDNmZnVsIDw8IEkyQ19BRERSMl9BRERSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjI6IEFERFIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19BRERSM19HQ19Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUjM6IEdDIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQUREUjNfR0NfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0FERFIzX0dDX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIzOiBHQyBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQUREUjNfQUREUl9Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFIzOiBBRERSIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0FERFIzX0FERFJfTXNrICAgICAgICAgICAgICAgKDB4M2ZmdWwgPDwgSTJDX0FERFIzX0FERFJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSMzogQUREUiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0FERFJNU0swX0FERFJNU0tfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSTVNLMDogQUREUk1TSyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEkyQ19BRERSTVNLMF9BRERSTVNLX01zayAgICAgICAgICgweDNmZnVsIDw8IEkyQ19BRERSTVNLMF9BRERSTVNLX1BvcykgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUk1TSzA6IEFERFJNU0sgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19BRERSTVNLMV9BRERSTVNLX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUk1TSzE6IEFERFJNU0sgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBJMkNfQUREUk1TSzFfQUREUk1TS19Nc2sgICAgICAgICAoMHgzZmZ1bCA8PCBJMkNfQUREUk1TSzFfQUREUk1TS19Qb3MpICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFJNU0sxOiBBRERSTVNLIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQUREUk1TSzJfQUREUk1TS19Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkFERFJNU0syOiBBRERSTVNLIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgSTJDX0FERFJNU0syX0FERFJNU0tfTXNrICAgICAgICAgKDB4M2ZmdWwgPDwgSTJDX0FERFJNU0syX0FERFJNU0tfUG9zKSAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSTVNLMjogQUREUk1TSyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0FERFJNU0szX0FERFJNU0tfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpBRERSTVNLMzogQUREUk1TSyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEkyQ19BRERSTVNLM19BRERSTVNLX01zayAgICAgICAgICgweDNmZnVsIDw8IEkyQ19BRERSTVNLM19BRERSTVNLX1BvcykgICAgICAgICAgICAgLyohPCBJMkNfVDo6QUREUk1TSzM6IEFERFJNU0sgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19XS0NUTF9XS0VOX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6V0tDVEw6IFdLRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMkNfV0tDVExfV0tFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX1dLQ1RMX1dLRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OldLQ1RMOiBXS0VOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfV0tDVExfTkhEQlVTRU5fUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OldLQ1RMOiBOSERCVVNFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1dLQ1RMX05IREJVU0VOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19XS0NUTF9OSERCVVNFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpXS0NUTDogTkhEQlVTRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1dLU1RTX1dLSUZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpXS1NUUzogV0tJRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19XS1NUU19XS0lGX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfV0tTVFNfV0tJRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6V0tTVFM6IFdLSUYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19XS1NUU19XS0FLRE9ORV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6V0tTVFM6IFdLQUtET05FIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMkNfV0tTVFNfV0tBS0RPTkVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJDX1dLU1RTX1dLQUtET05FX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OldLU1RTOiBXS0FLRE9ORSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfV0tTVFNfV1JTVFNXS19Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OldLU1RTOiBXUlNUU1dLIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1dLU1RTX1dSU1RTV0tfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19XS1NUU19XUlNUU1dLX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpXS1NUUzogV1JTVFNXSyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0NUTDFfVFhQRE1BRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwxOiBUWFBETUFFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVEwxX1RYUERNQUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQ1RMMV9UWFBETUFFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMTogVFhQRE1BRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19DVEwxX1JYUERNQUVOX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMTogUlhQRE1BRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMMV9SWFBETUFFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0NUTDFfUlhQRE1BRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDE6IFJYUERNQUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQ1RMMV9QRE1BUlNUX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDE6IFBETUFSU1QgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTDFfUERNQVJTVF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19DVEwxX1BETUFSU1RfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwxOiBQRE1BUlNUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0NUTDFfUERNQVNUUl9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDVEwxOiBQRE1BU1RSIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVEwxX1BETUFTVFJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQ1RMMV9QRE1BU1RSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMTogUERNQVNUUiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19DVEwxX0FERFIxMEVOX1BvcyAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q1RMMTogQUREUjEwRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMMV9BRERSMTBFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0NUTDFfQUREUjEwRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkNUTDE6IEFERFIxMEVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfU1RBVFVTMV9BRE1BVDBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlNUQVRVUzE6IEFETUFUMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1NUQVRVUzFfQURNQVQwX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19TVEFUVVMxX0FETUFUMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpTVEFUVVMxOiBBRE1BVDAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1NUQVRVUzFfQURNQVQxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpTVEFUVVMxOiBBRE1BVDEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19TVEFUVVMxX0FETUFUMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfU1RBVFVTMV9BRE1BVDFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6U1RBVFVTMTogQURNQVQxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19TVEFUVVMxX0FETUFUMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6U1RBVFVTMTogQURNQVQyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMkNfU1RBVFVTMV9BRE1BVDJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJDX1NUQVRVUzFfQURNQVQyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlNUQVRVUzE6IEFETUFUMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfU1RBVFVTMV9BRE1BVDNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlNUQVRVUzE6IEFETUFUMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1NUQVRVUzFfQURNQVQzX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19TVEFUVVMxX0FETUFUM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpTVEFUVVMxOiBBRE1BVDMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1NUQVRVUzFfT05CVVNZX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpTVEFUVVMxOiBPTkJVU1kgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19TVEFUVVMxX09OQlVTWV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfU1RBVFVTMV9PTkJVU1lfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6U1RBVFVTMTogT05CVVNZIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19UTUNUTF9TVENUTF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6VE1DVEw6IFNUQ1RMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBJMkNfVE1DVExfU1RDVExfTXNrICAgICAgICAgICAgICAoMHgxZmZ1bCA8PCBJMkNfVE1DVExfU1RDVExfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlRNQ1RMOiBTVENUTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfVE1DVExfSFRDVExfUG9zICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlRNQ1RMOiBIVENUTCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1RNQ1RMX0hUQ1RMX01zayAgICAgICAgICAgICAgKDB4MWZmdWwgPDwgSTJDX1RNQ1RMX0hUQ1RMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpUTUNUTDogSFRDVEwgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU0NUTF9BQ0tNRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IEFDS01FTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNDVExfQUNLTUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTQ1RMX0FDS01FTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBBQ0tNRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfUEVDRU5fUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBQRUNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX1BFQ0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9QRUNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogUEVDRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTQ1RMX0JNREVOX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogQk1ERU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU0NUTF9CTURFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNDVExfQk1ERU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IEJNREVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU0NUTF9CTUhFTl9Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IEJNSEVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNDVExfQk1IRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTQ1RMX0JNSEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBCTUhFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfQUxFUlRFTl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBBTEVSVEVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX0FMRVJURU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9BTEVSVEVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogQUxFUlRFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTQ1RMX1NDVExPU1RTX1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogU0NUTE9TVFMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU0NUTF9TQ1RMT1NUU19Nc2sgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNDVExfU0NUTE9TVFNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IFNDVExPU1RTIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU0NUTF9TQ1RMT0VOX1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IFNDVExPRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNDVExfU0NUTE9FTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTQ1RMX1NDVExPRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBTQ1RMT0VOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfQlVTRU5fUG9zICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBCVVNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX0JVU0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9CVVNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogQlVTRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTQ1RMX1BFQ1RYRU5fUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogUEVDVFhFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU0NUTF9QRUNUWEVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNDVExfUEVDVFhFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IFBFQ1RYRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU0NUTF9USURMRV9Qb3MgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IFRJRExFIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNDVExfVElETEVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTQ1RMX1RJRExFX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBUSURMRSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfUEVDQ0xSX1BvcyAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBQRUNDTFIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX1BFQ0NMUl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9QRUNDTFJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogUEVDQ0xSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTQ1RMX0FDS005U0lfUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogQUNLTTlTSSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU0NUTF9BQ0tNOVNJX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNDVExfQUNLTTlTSV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IEFDS005U0kgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU0NUTF9CQ0RJRU5fUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNDVEw6IEJDRElFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNDVExfQkNESUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTQ1RMX0JDRElFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBCQ0RJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNDVExfUEVDRElFTl9Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTQ1RMOiBQRUNESUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTQ1RMX1BFQ0RJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU0NUTF9QRUNESUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU0NUTDogUEVDRElFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTVENUTF9CVVNUT0VOX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1RDVEw6IEJVU1RPRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1RDVExfQlVTVE9FTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNUQ1RMX0JVU1RPRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNUQ1RMOiBCVVNUT0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1RDVExfQ0xLVE9FTl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNUQ1RMOiBDTEtUT0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNUQ1RMX0NMS1RPRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTVENUTF9DTEtUT0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTVENUTDogQ0xLVE9FTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNUQ1RMX0JVU1RPSUVOX1BvcyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTVENUTDogQlVTVE9JRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBJMkNfQlVTVENUTF9CVVNUT0lFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU1RDVExfQlVTVE9JRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1RDVEw6IEJVU1RPSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTVENUTF9DTEtUT0lFTl9Qb3MgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1RDVEw6IENMS1RPSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1RDVExfQ0xLVE9JRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNUQ1RMX0NMS1RPSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNUQ1RMOiBDTEtUT0lFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1RDVExfVE9SU1RFTl9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNUQ1RMOiBUT1JTVEVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNUQ1RMX1RPUlNURU5fTXNrICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTVENUTF9UT1JTVEVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTVENUTDogVE9SU1RFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNTVFNfQlVTWV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBCVVNZIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTU1RTX0JVU1lfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU1NUU19CVVNZX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogQlVTWSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTU1RTX0JDRE9ORV9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogQkNET05FIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1NUU19CQ0RPTkVfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNTVFNfQkNET05FX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IEJDRE9ORSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1NUU19QRUNFUlJfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IFBFQ0VSUiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNTVFNfUEVDRVJSX01zayAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTU1RTX1BFQ0VSUl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBQRUNFUlIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNTVFNfQUxFUlRfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBBTEVSVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTU1RTX0FMRVJUX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU1NUU19BTEVSVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogQUxFUlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTU1RTX1NDVExESU5fUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogU0NUTERJTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1NUU19TQ1RMRElOX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNTVFNfU0NUTERJTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IFNDVExESU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0JVU1NUU19CVVNUT19Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IEJVU1RPIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyQ19CVVNTVFNfQlVTVE9fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMkNfQlVTU1RTX0JVU1RPX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBCVVNUTyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19CVVNTVFNfQ0xLVE9fUG9zICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6QlVTU1RTOiBDTEtUTyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMkNfQlVTU1RTX0NMS1RPX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJDX0JVU1NUU19DTEtUT19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogQ0xLVE8gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTU1RTX1BFQ0RPTkVfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1NUUzogUEVDRE9ORSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1NUU19QRUNET05FX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyQ19CVVNTVFNfUEVDRE9ORV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNTVFM6IFBFQ0RPTkUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX1BLVFNJWkVfUExEU0laRV9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpQS1RTSVpFOiBQTERTSVpFIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyQ19QS1RTSVpFX1BMRFNJWkVfTXNrICAgICAgICAgICgweDFmZnVsIDw8IEkyQ19QS1RTSVpFX1BMRFNJWkVfUG9zKSAgICAgICAgICAgICAgLyohPCBJMkNfVDo6UEtUU0laRTogUExEU0laRSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyQ19QS1RDUkNfUEVDQ1JDX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6UEtUQ1JDOiBQRUNDUkMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMkNfUEtUQ1JDX1BFQ0NSQ19Nc2sgICAgICAgICAgICAoMHhmZnVsIDw8IEkyQ19QS1RDUkNfUEVDQ1JDX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OlBLVENSQzogUEVDQ1JDIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMkNfQlVTVE9VVF9CVVNUT19Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDX1Q6OkJVU1RPVVQ6IEJVU1RPIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0JVU1RPVVRfQlVTVE9fTXNrICAgICAgICAgICAgKDB4ZmZ1bCA8PCBJMkNfQlVTVE9VVF9CVVNUT19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpCVVNUT1VUOiBCVVNUTyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJDX0NMS1RPVVRfQ0xLVE9fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQ19UOjpDTEtUT1VUOiBDTEtUTyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyQ19DTEtUT1VUX0NMS1RPX01zayAgICAgICAgICAgICgweGZmdWwgPDwgSTJDX0NMS1RPVVRfQ0xLVE9fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMkNfVDo6Q0xLVE9VVDogQ0xLVE8gTWFzayAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIEkyQ19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgSTJDIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX0kyQ19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvaTJzX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2kyc19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJjZTVjCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL2kyc19yZWcuaApAQCAtMCwwICsxLDcwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGkyc19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgSTJTIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0kyU19SRUdfSF9fCisjZGVmaW5lIF9fSTJTX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSTJTIEludGVyZmFjZSBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgSTJTIEkyUyBJbnRlcmZhY2UgQ29udHJvbGxlcihJMlMpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIEkyUyBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIEkyU19UOjpDVEwwCisgICAgICogT2Zmc2V0OiAweDAwICBJMlMgQ29udHJvbCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8STJTRU4gICAgIHxJMlMgQ29udHJvbGxlciBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMlMgY29udHJvbGxlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJTIGNvbnRyb2xsZXIgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8VFhFTiAgICAgIHxUcmFuc21pdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIHRyYW5zbWlzc2lvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSB0cmFuc21pc3Npb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UlhFTiAgICAgIHxSZWNlaXZlIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgcmVjZWl2aW5nIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEYXRhIHJlY2VpdmluZyBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxNVVRFICAgICAgfFRyYW5zbWl0IE11dGUgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgZGF0YSBpcyBzaGlmdGVkIGZyb20gYnVmZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZW5kIHplcm8gb24gdHJhbnNtaXQgY2hhbm5lbC4KKyAgICAgKiB8WzU6NF0gICB8REFUV0lEVEggIHxEYXRhIFdpZHRoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGJpdC13aWR0aCBvZiBkYXRhIHdvcmQgaW4gZWFjaCBhdWRpbyBjaGFubmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBUaGUgYml0LXdpZHRoIG9mIGRhdGEgd29yZCBpcyA4LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFRoZSBiaXQtd2lkdGggb2YgZGF0YSB3b3JkIGlzIDE2LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFRoZSBiaXQtd2lkdGggb2YgZGF0YSB3b3JkIGlzIDI0LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFRoZSBiaXQtd2lkdGggb2YgZGF0YSB3b3JkIGlzIDMyLWJpdC4KKyAgICAgKiB8WzZdICAgICB8TU9OTyAgICAgIHxNb25hdXJhbCBEYXRhIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSBpcyBzdGVyZW8gZm9ybWF0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEYXRhIGlzIG1vbmF1cmFsIGZvcm1hdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiB3aGVuIGNoaXAgcmVjb3JkcyBkYXRhLCBSWExDSCAoSTJTX0NUTDBbMjNdKSBpbmRpY2F0ZXMgd2hpY2ggY2hhbm5lbCBkYXRhIHdpbGwgYmUgc2F2ZWQgaWYgbW9uYXVyYWwgZm9ybWF0IGlzIHNlbGVjdGVkLgorICAgICAqIHxbN10gICAgIHxPUkRFUiAgICAgfFN0ZXJlbyBEYXRhIE9yZGVyIGluIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiA4LWJpdC8xNi1iaXQgZGF0YSB3aWR0aCwgdGhpcyBiaXQgaXMgdXNlZCB0byBzZWxlY3Qgd2hldGhlciB0aGUgZXZlbiBvciBvZGQgY2hhbm5lbCBkYXRhIGlzIHN0b3JlZCBpbiBoaWdoZXIgYnl0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIDI0LWJpdCBkYXRhIHdpZHRoLCB0aGlzIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBsZWZ0L3JpZ2h0IGFsaWdubWVudCBtZXRob2Qgb2YgYXVkaW8gZGF0YSB3aGljaCBpcyBzdG9yZWQgaW4gZGF0YSBtZW1vcnkgY29uc2lzdGVkIG9mIDMyLWJpdCBGSUZPIGVudHJpZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEV2ZW4gY2hhbm5lbCBkYXRhIGF0IGhpZ2ggYnl0ZSBpbiA4LWJpdC8xNi1iaXQgZGF0YSB3aWR0aC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxMU0Igb2YgMjQtYml0IGF1ZGlvIGRhdGEgaW4gZWFjaCBjaGFubmVsIGlzIGFsaWduZWQgdG8gcmlnaHQgc2lkZSBpbiAzMi1iaXQgRklGTyBlbnRyaWVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFdmVuIGNoYW5uZWwgZGF0YSBhdCBsb3cgYnl0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwgTVNCIG9mIDI0LWJpdCBhdWRpbyBkYXRhIGluIGVhY2ggY2hhbm5lbCBpcyBhbGlnbmVkIHRvIGxlZnQgc2lkZSBpbiAzMi1iaXQgRklGTyBlbnRyaWVzLgorICAgICAqIHxbOF0gICAgIHxTTEFWRSAgICAgfFNsYXZlIE1vZGUgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzdGVyIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSTJTIGNhbiBvcGVyYXRlIGFzIG1hc3RlciBvciBzbGF2ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZvciBNYXN0ZXIgbW9kZSwgSTJTX0JDTEsgYW5kIEkyU19MUkNMSyBwaW5zIGFyZSBvdXRwdXQgbW9kZSBhbmQgc2VuZCBvdXQgYml0IGNsb2NrIHRvIEF1ZGlvIENPREVDIGNoaXAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTbGF2ZSBtb2RlLCBJMlNfQkNMSyBhbmQgSTJTX0xSQ0xLIHBpbnMgYXJlIGlucHV0IG1vZGUgYW5kIEkyU19CQ0xLIGFuZCBJMlNfTFJDTEsgc2lnbmFscyBhcmUgcmVjZWl2ZWQgZnJvbSBvdXRlciBBdWRpbyBDT0RFQyBjaGlwLgorICAgICAqIHxbMTVdICAgIHxNQ0xLRU4gICAgfE1hc3RlciBDbG9jayBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIE1DTEtFTiBpcyBzZXQgdG8gMSwgSTJTIGNvbnRyb2xsZXIgd2lsbCBnZW5lcmF0ZSBtYXN0ZXIgY2xvY2sgb24gSTJTX01DTEsgcGluIGZvciBleHRlcm5hbCBhdWRpbyBkZXZpY2VzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXN0ZXIgY2xvY2sgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE1hc3RlciBjbG9jayBFbmFibGVkLgorICAgICAqIHxbMThdICAgIHxUWEZCQ0xSICAgfFRyYW5zbWl0IEZJRk8gQnVmZmVyIENsZWFyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgVFggRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0cmFuc21pdCBGSUZPLCBpbnRlcm5hbCBwb2ludGVyIGlzIHJlc2V0IHRvIEZJRk8gc3RhcnQgcG9pbnQsIGFuZCBUWENOVCAoSTJTX1NUQVRVUzFbMTI6OF0pIHJldHVybnMgMCBhbmQgdHJhbnNtaXQgRklGTyBiZWNvbWVzIGVtcHR5IGJ1dCBkYXRhIGluIHRyYW5zbWl0IEZJRk8gaXMgbm90IGNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGNsZWFyIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHksIHJlYWQgaXQgcmV0dXJuIHplcm8uCisgICAgICogfFsxOV0gICAgfFJYRkJDTFIgICB8UmVjZWl2ZSBGSUZPIEJ1ZmZlciBDbGVhcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBFZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIFJYIEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgcmVjZWl2ZSBGSUZPLCBpbnRlcm5hbCBwb2ludGVyIGlzIHJlc2V0IHRvIEZJRk8gc3RhcnQgcG9pbnQsIGFuZCBSWENOVCAoSTJTX1NUQVRVUzFbMjA6MTZdKSByZXR1cm5zIDAgYW5kIHJlY2VpdmUgRklGTyBiZWNvbWVzIGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHksIHJlYWQgaXQgcmV0dXJuIHplcm8uCisgICAgICogfFsyMF0gICAgfFRYUERNQUVOICB8VHJhbnNtaXQgUERNQSBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyMV0gICAgfFJYUERNQUVOICB8UmVjZWl2ZSBQRE1BIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVyIFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVyIFBETUEgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzIzXSAgICB8UlhMQ0ggICAgIHxSZWNlaXZlIExlZnQgQ2hhbm5lbCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gbW9uYXVyYWwgZm9ybWF0IGlzIHNlbGVjdGVkIChNT05PID0gMSksIEkyUyB3aWxsIHJlY2VpdmUgY2hhbm5lbDEgZGF0YSBpZiBSWExDSCBpcyBzZXQgdG8gMCwgYW5kIHJlY2VpdmUgY2hhbm5lbDAgZGF0YSBpZiBSWExDSCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZXMgY2hhbm5lbDEgZGF0YSBpbiBNT05PIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVzIGNoYW5uZWwwIGRhdGEgaW4gTU9OTyBtb2RlLgorICAgICAqIHxbMjY6MjRdIHxGT1JNQVQgICAgfERhdGEgRm9ybWF0IFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IEkyUyBzdGFuZGFyZCBkYXRhIGZvcm1hdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBJMlMgd2l0aCBNU0IganVzdGlmaWVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IEkyUyB3aXRoIExTQiBqdXN0aWZpZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gUENNIHN0YW5kYXJkIGRhdGEgZm9ybWF0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IFBDTSB3aXRoIE1TQiBqdXN0aWZpZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gUENNIHdpdGggTFNCIGp1c3RpZmllZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzI3XSAgICB8UENNU1lOQyAgIHxQQ00gU3luY2hyb25pemF0aW9uIFB1bHNlIExlbmd0aCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgaGlnaCBwdWxzZSBsZW5ndGggb2YgZnJhbWUgc3luY2hyb25pemF0aW9uIHNpZ25hbCBpbiBQQ00gcHJvdG9jb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT25lIEJDTEsgcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPbmUgY2hhbm5lbCBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgb25seSBhdmFpbGFibGUgaW4gbWFzdGVyIG1vZGUKKyAgICAgKiB8WzI5OjI4XSB8Q0hXSURUSCAgIHxDaGFubmVsIFdpZHRoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGRzIGFyZSB1c2VkIHRvIGRlZmluZSB0aGUgbGVuZ3RoIG9mIGF1ZGlvIGNoYW5uZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBDSFdJRFRIIDwgREFUV0lEVEgsIHRoZSBoYXJkd2FyZSB3aWxsIHNldCB0aGUgcmVhbCBjaGFubmVsIGxlbmd0aCBhcyB0aGUgYml0LXdpZHRoIG9mIGF1ZGlvIGRhdGEgd2hpY2ggaXMgZGVmaW5lZCBieSBEQVRXSURUSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFRoZSBiaXQtd2lkdGggb2YgZWFjaCBhdWRpbyBjaGFubmVsIGlzIDgtYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gVGhlIGJpdC13aWR0aCBvZiBlYWNoIGF1ZGlvIGNoYW5uZWwgaXMgMTYtYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVGhlIGJpdC13aWR0aCBvZiBlYWNoIGF1ZGlvIGNoYW5uZWwgaXMgMjQtYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gVGhlIGJpdC13aWR0aCBvZiBlYWNoIGF1ZGlvIGNoYW5uZWwgaXMgMzItYml0LgorICAgICAqIHxbMzE6MzBdIHxURE1DSE5VTSAgfFRETSBDaGFubmVsIE51bWJlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkcyBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIFRETSBjaGFubmVsIG51bWJlciBpbiBvbmUgYXVkaW8gZnJhbWUgd2hpbGUgUENNIG1vZGUgKEZPUk1BVFsyXSA9IDEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gMiBjaGFubmVscyBpbiBhdWRpbyBmcmFtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IDQgY2hhbm5lbHMgaW4gYXVkaW8gZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSA2IGNoYW5uZWxzIGluIGF1ZGlvIGZyYW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gOCBjaGFubmVscyBpbiBhdWRpbyBmcmFtZS4KKyAgICAgKiBAdmFyIEkyU19UOjpDTEtESVYKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIEkyUyBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzU6MF0gICB8TUNMS0RJViAgIHxNYXN0ZXIgQ2xvY2sgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGNoaXAgZXh0ZXJuYWwgY3J5c3RhbCBmcmVxdWVuY3kgaXMgKDJ4TUNMS0RJVikqMjU2ZnMgdGhlbiBzb2Z0d2FyZSBjYW4gcHJvZ3JhbSB0aGVzZSBiaXRzIHRvIGdlbmVyYXRlIDI1NmZzIGNsb2NrIGZyZXF1ZW5jeSB0byBhdWRpbyBjb2RlYyBjaGlwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgTUNMS0RJViBpcyBzZXQgdG8gMCwgTUNMSyBpcyB0aGUgc2FtZSBhcyBleHRlcm5hbCBjbG9jayBpbnB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgZXhhbXBsZSwgc2FtcGxpbmcgcmF0ZSBpcyAyNCBrSHogYW5kIGNoaXAgZXh0ZXJuYWwgY3J5c3RhbCBjbG9jayBpcyAxMi4yODggTUh6LCBzZXQgTUNMS0RJViA9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rl9NQ0xLID0gRl9JMlNDTEsvKDJ4KE1DTEtESVYpKSAoV2hlbiBNQ0xLRElWIGlzID49IDEgKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGX01DTEsgPSBGX0kyU0NMSyAoV2hlbiBNQ0xLRElWIGlzIHNldCB0byAwICkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogRl9NQ0xLIGlzIHRoZSBmcmVxdWVuY3kgb2YgTUNMSywgYW5kIEZfSTJTQ0xLIGlzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIEkyU19DTEsKKyAgICAgKiB8WzE2OjhdICB8QkNMS0RJViAgIHxCaXQgQ2xvY2sgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBJMlMgY29udHJvbGxlciB3aWxsIGdlbmVyYXRlIGJpdCBjbG9jayBpbiBNYXN0ZXIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiBwcm9ncmFtIHRoZXNlIGJpdCBmaWVsZHMgdG8gZ2VuZXJhdGUgc2FtcGxpbmcgcmF0ZSBjbG9jayBmcmVxdWVuY3kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rl9CQ0xLPSBGX0kyU0NMSyAvICgyKihCQ0xLRElWICsgMSkpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEZfQkNMSyBpcyB0aGUgZnJlcXVlbmN5IG9mIEJDTEsgYW5kIEZfSTJTQ0xLIGlzIHRoZSBmcmVxdWVuY3kgb2YgSTJTX0NMSworICAgICAqIEB2YXIgSTJTX1Q6OklFTgorICAgICAqIE9mZnNldDogMHgwOCAgSTJTIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxSWFVERklFTiAgfFJlY2VpdmUgRklGTyBVbmRlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgc29mdHdhcmUgcmVhZHMgcmVjZWl2ZSBGSUZPIHdoZW4gaXQgaXMgZW1wdHkgdGhlbiBSWFVESUYgKEkyU19TVEFUVVMwWzhdKSBmbGFnIGlzIHNldCB0byAxLgorICAgICAqIHxbMV0gICAgIHxSWE9WRklFTiAgfFJlY2VpdmUgRklGTyBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbnRlcnJ1cHQgb2NjdXJzIGlmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBSWE9WSUYgKEkyU19TVEFUVVMwWzldKSBmbGFnIGlzIHNldCB0byAxCisgICAgICogfFsyXSAgICAgfFJYVEhJRU4gICB8UmVjZWl2ZSBGSUZPIFRocmVzaG9sZCBMZXZlbCBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIGRhdGEgd29yZCBpbiByZWNlaXZlIEZJRk8gaXMgZXF1YWwgb3IgaGlnaGVyIHRoYW4gUlhUSCAoSTJTX0NUTDFbMTk6MTZdKSBhbmQgdGhlIFJYVEhJRiAoSTJTX1NUQVRVUzBbMTBdKSBiaXQgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBSWFRISUVOIGJpdCBpcyBlbmFibGVkLCBpbnRlcnJ1cHQgb2NjdXIuCisgICAgICogfFs4XSAgICAgfFRYVURGSUVOICB8VHJhbnNtaXQgRklGTyBVbmRlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW50ZXJydXB0IG9jY3VyIGlmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBUWFVESUYgKEkyU19TVEFUVVMwWzE2XSkgZmxhZyBpcyBzZXQgdG8gMS4KKyAgICAgKiB8WzldICAgICB8VFhPVkZJRU4gIHxUcmFuc21pdCBGSUZPIE92ZXJmbG93IEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEludGVycnVwdCBvY2N1cnMgaWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIFRYT1ZJRiAoSTJTX1NUQVRVUzBbMTddKSBmbGFnIGlzIHNldCB0byAxCisgICAgICogfFsxMF0gICAgfFRYVEhJRU4gICB8VHJhbnNtaXQgRklGTyBUaHJlc2hvbGQgTGV2ZWwgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW50ZXJydXB0IG9jY3VycyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgZGF0YSB3b3JkcyBpbiB0cmFuc21pdCBGSUZPIGlzIGxlc3MgdGhhbiBUWFRIIChJMlNfQ1RMMVsxMTo4XSkuCisgICAgICogfFsxNl0gICAgfENIMFpDSUVOICB8Q2hhbm5lbDAgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSW50ZXJydXB0IG9jY3VycyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgY2hhbm5lbDAgemVyby1jcm9zcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBDaGFubmVsMCBhbHNvIG1lYW5zIGxlZnQgYXVkaW8gY2hhbm5lbCB3aGlsZSBJMlMgKEZPUk1BVFsyXT0wKSBvciAyLWNoYW5uZWwgUENNIG1vZGUuCisgICAgICogfFsxN10gICAgfENIMVpDSUVOICB8Q2hhbm5lbDEgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSW50ZXJydXB0IG9jY3VycyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgY2hhbm5lbDEgemVyby1jcm9zcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBDaGFubmVsMSBhbHNvIG1lYW5zIHJpZ2h0IGF1ZGlvIGNoYW5uZWwgd2hpbGUgSTJTIChGT1JNQVRbMl09MCkgb3IgMi1jaGFubmVsIFBDTSBtb2RlLgorICAgICAqIHxbMThdICAgIHxDSDJaQ0lFTiAgfENoYW5uZWwyIFplcm8tY3Jvc3MgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEludGVycnVwdCBvY2N1cnMgaWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIGNoYW5uZWwyIHplcm8tY3Jvc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8WzE5XSAgICB8Q0gzWkNJRU4gIHxDaGFubmVsMyBaZXJvLWNyb3NzIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJbnRlcnJ1cHQgb2NjdXJzIGlmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBjaGFubmVsMyB6ZXJvLWNyb3NzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfFsyMF0gICAgfENINFpDSUVOICB8Q2hhbm5lbDQgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSW50ZXJydXB0IG9jY3VycyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgY2hhbm5lbDQgemVyby1jcm9zcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHxbMjFdICAgIHxDSDVaQ0lFTiAgfENoYW5uZWw1IFplcm8tY3Jvc3MgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEludGVycnVwdCBvY2N1cnMgaWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIGNoYW5uZWw1IHplcm8tY3Jvc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8WzIyXSAgICB8Q0g2WkNJRU4gIHxDaGFubmVsNiBaZXJvLWNyb3NzIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJbnRlcnJ1cHQgb2NjdXJzIGlmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBjaGFubmVsNiB6ZXJvLWNyb3NzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfFsyM10gICAgfENIN1pDSUVOICB8Q2hhbm5lbDcgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSW50ZXJydXB0IG9jY3VycyBpZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgY2hhbm5lbDcgemVyby1jcm9zcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIEB2YXIgSTJTX1Q6OlNUQVRVUzAKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIEkyUyBTdGF0dXMgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEkyU0lOVCAgICB8STJTIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEkyUyBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyUyBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgd2lyZS1PUiBvZiBJMlNUWElOVCBhbmQgSTJTUlhJTlQgYml0cy4KKyAgICAgKiB8WzFdICAgICB8STJTUlhJTlQgIHxJMlMgUmVjZWl2ZSBJbnRlcnJ1cHQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVjZWl2ZSBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgaW50ZXJydXB0LgorICAgICAqIHxbMl0gICAgIHxJMlNUWElOVCAgfEkyUyBUcmFuc21pdCBJbnRlcnJ1cHQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gdHJhbnNtaXQgaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBpbnRlcnJ1cHQuCisgICAgICogfFs1OjNdICAgfERBVEFDSCAgICB8VHJhbnNtaXNzaW9uIERhdGEgQ2hhbm5lbCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkcyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCBhdWRpbyBjaGFubmVsIGlzIGN1cnJlbnQgdHJhbnNtaXQgZGF0YSBiZWxvbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gY2hhbm5lbDAgKG1lYW5zIGxlZnQgY2hhbm5lbCB3aGlsZSAyLWNoYW5uZWwgSTJTL1BDTSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBjaGFubmVsMSAobWVhbnMgcmlnaHQgY2hhbm5lbCB3aGlsZSAyLWNoYW5uZWwgSTJTL1BDTSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBjaGFubmVsMiAoYXZhaWxhYmxlIHdoaWxlIDQtY2hhbm5lbCBURE0gUENNIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IGNoYW5uZWwzIChhdmFpbGFibGUgd2hpbGUgNC1jaGFubmVsIFRETSBQQ00gbW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gY2hhbm5lbDQgKGF2YWlsYWJsZSB3aGlsZSA2LWNoYW5uZWwgVERNIFBDTSBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBjaGFubmVsNSAoYXZhaWxhYmxlIHdoaWxlIDYtY2hhbm5lbCBURE0gUENNIG1vZGUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IGNoYW5uZWw2IChhdmFpbGFibGUgd2hpbGUgOC1jaGFubmVsIFRETSBQQ00gbW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gY2hhbm5lbDcgKGF2YWlsYWJsZSB3aGlsZSA4LWNoYW5uZWwgVERNIFBDTSBtb2RlKS4KKyAgICAgKiB8WzhdICAgICB8UlhVRElGICAgIHxSZWNlaXZlIEZJRk8gVW5kZXJmbG93IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHVuZGVyZmxvdyBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVW5kZXJmbG93IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIHJlY2VpdmUgRklGTyBpcyBlbXB0eSwgYW5kIHNvZnR3YXJlIHJlYWRzIHRoZSByZWNlaXZlIEZJRk8gYWdhaW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIHNldCB0byAxLCBhbmQgaXQgaW5kaWNhdGVzIHVuZGVyZmxvdyBzaXR1YXRpb24gb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIHplcm8KKyAgICAgKiB8WzldICAgICB8UlhPVklGICAgIHxSZWNlaXZlIEZJRk8gT3ZlcmZsb3cgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gb3ZlcmZsb3cgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE92ZXJmbG93IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIHJlY2VpdmUgRklGTyBpcyBmdWxsIGFuZCByZWNlaXZlIGhhcmR3YXJlIGF0dGVtcHQgdG8gd3JpdGUgZGF0YSBpbnRvIHJlY2VpdmUgRklGTyB0aGVuIHRoaXMgYml0IGlzIHNldCB0byAxLCBkYXRhIGluIDFzdCBidWZmZXIgaXMgb3Zlcndyb3RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfFsxMF0gICAgfFJYVEhJRiAgICB8UmVjZWl2ZSBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIHdvcmQocykgaW4gRklGTyBpcyBub3QgaGlnaGVyIHRoYW4gdGhyZXNob2xkIGxldmVsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEYXRhIHdvcmQocykgaW4gRklGTyBpcyBoaWdoZXIgdGhhbiB0aHJlc2hvbGQgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBkYXRhIHdvcmQocykgaW4gcmVjZWl2ZSBGSUZPIGlzIGhpZ2hlciB0aGFuIHRocmVzaG9sZCB2YWx1ZSBzZXQgaW4gUlhUSCAoSTJTX0NUTDFbMTk6MTZdKSB0aGUgUlhUSElGIGJpdCBiZWNvbWVzIHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBrZWVwcyBhdCAxIHRpbGwgUlhDTlQgKEkyU19TVEFUVVMxWzIwOjE2XSkgaXMgbm90IGhpZ2hlciB0aGFuIFJYVEggKEkyU19DVEwxWzE5OjE2XSkgYWZ0ZXIgc29mdHdhcmUgcmVhZCBSWEZJRk8gcmVnaXN0ZXIuCisgICAgICogfFsxMV0gICAgfFJYRlVMTCAgICB8UmVjZWl2ZSBGSUZPIEZ1bGwgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgcmVmbGVjdHMgZGF0YSB3b3JkcyBudW1iZXIgaW4gcmVjZWl2ZSBGSUZPIGlzIDE2LgorICAgICAqIHxbMTJdICAgIHxSWEVNUFRZICAgfFJlY2VpdmUgRklGTyBFbXB0eSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHJlZmxlY3RzIGRhdGEgd29yZHMgbnVtYmVyIGluIHJlY2VpdmUgRklGTyBpcyB6ZXJvCisgICAgICogfFsxNl0gICAgfFRYVURJRiAgICB8VHJhbnNtaXQgRklGTyBVbmRlcmZsb3cgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gdW5kZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVbmRlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IHdpbGwgYmUgc2V0IHRvIDEgd2hlbiBzaGlmdCBsb2dpYyBoYXJkd2FyZSByZWFkIGRhdGEgZnJvbSB0cmFuc21pdHRpbmcgRklGTyBhbmQgdGhlIGZpbGxpbmcgZGF0YSBsZXZlbCBpbiB0cmFuc21pdHRpbmcgRklGTyBpcyBub3QgZW5vdWdoIGZvciBvbmUgYXVkaW8gZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8WzE3XSAgICB8VFhPVklGICAgIHxUcmFuc21pdCBGSUZPIE92ZXJmbG93IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgZGF0YSB0byB0cmFuc21pdCBGSUZPIHdoZW4gaXQgaXMgZnVsbCBhbmQgdGhpcyBiaXQgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHxbMThdICAgIHxUWFRISUYgICAgfFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgd29yZChzKSBpbiBGSUZPIGlzIGhpZ2hlciB0aGFuIHRocmVzaG9sZCBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSB3b3JkKHMpIGluIEZJRk8gaXMgZXF1YWwgb3IgbG93ZXIgdGhhbiB0aHJlc2hvbGQgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBkYXRhIHdvcmQocykgaW4gdHJhbnNtaXQgRklGTyBpcyBlcXVhbCBvciBsb3dlciB0aGFuIHRocmVzaG9sZCB2YWx1ZSBzZXQgaW4gVFhUSCAoSTJTX0NUTDFbMTE6OF0pIHRoZSBUWFRISUYgYml0IGJlY29tZXMgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGtlZXBzIGF0IDEgdGlsbCBUWENOVCAoSTJTX1NUQVRVUzFbMTI6OF0pIGlzIGhpZ2hlciB0aGFuIFRYVEggKEkyU19DVEwxWzExOjhdKSBhZnRlciBzb2Z0d2FyZSB3cml0ZSBUWEZJRk8gcmVnaXN0ZXIuCisgICAgICogfFsxOV0gICAgfFRYRlVMTCAgICB8VHJhbnNtaXQgRklGTyBGdWxsIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgcmVmbGVjdCBkYXRhIHdvcmQgbnVtYmVyIGluIHRyYW5zbWl0IEZJRk8gaXMgMTYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZ1bGwuCisgICAgICogfFsyMF0gICAgfFRYRU1QVFkgICB8VHJhbnNtaXQgRklGTyBFbXB0eSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHJlZmxlY3QgZGF0YSB3b3JkIG51bWJlciBpbiB0cmFuc21pdCBGSUZPIGlzIHplcm8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbXB0eS4KKyAgICAgKiB8WzIxXSAgICB8VFhCVVNZICAgIHxUcmFuc21pdCBCdXN5IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IHNoaWZ0IGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgc2hpZnQgYnVmZmVyIGlzIGJ1c3kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCB0byAwIHdoZW4gYWxsIGRhdGEgaW4gdHJhbnNtaXQgRklGTyBhbmQgc2hpZnQgYnVmZmVyIGlzIHNoaWZ0ZWQgb3V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QW5kIHNldCB0byAxIHdoZW4gMXN0IGRhdGEgaXMgbG9hZCB0byBzaGlmdCBidWZmZXIKKyAgICAgKiBAdmFyIEkyU19UOjpUWEZJRk8KKyAgICAgKiBPZmZzZXQ6IDB4MTAgIEkyUyBUcmFuc21pdCBGSUZPIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8VFhGSUZPICAgIHxUcmFuc21pdCBGSUZPIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJMlMgY29udGFpbnMgMTYgd29yZHMgKDE2eDMyIGJpdCkgZGF0YSBidWZmZXIgZm9yIGRhdGEgdHJhbnNtaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBkYXRhIHRvIHRoaXMgcmVnaXN0ZXIgdG8gcHJlcGFyZSBkYXRhIGZvciB0cmFuc21pdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZW1haW5pbmcgd29yZCBudW1iZXIgaXMgaW5kaWNhdGVkIGJ5IFRYQ05UIChJMlNfU1RBVFVTMVsxMjo4XSkuCisgICAgICogQHZhciBJMlNfVDo6UlhGSUZPCisgICAgICogT2Zmc2V0OiAweDE0ICBJMlMgUmVjZWl2ZSBGSUZPIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8UlhGSUZPICAgIHxSZWNlaXZlIEZJRk8gQml0cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEkyUyBjb250YWlucyAxNiB3b3JkcyAoMTZ4MzIgYml0KSBkYXRhIGJ1ZmZlciBmb3IgZGF0YSByZWNlaXZlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCB0aGlzIHJlZ2lzdGVyIHRvIGdldCBkYXRhIGluIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVtYWluaW5nIGRhdGEgd29yZCBudW1iZXIgaXMgaW5kaWNhdGVkIGJ5IFJYQ05UIChJMlNfU1RBVFVTMVsyMDoxNl0pLgorICAgICAqIEB2YXIgSTJTX1Q6OkNUTDEKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIEkyUyBDb250cm9sIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDSDBaQ0VOICAgfENoYW5uZWwwIFplcm8tY3Jvc3MgRGV0ZWN0aW9uIEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGNoYW5uZWwwIHplcm8tY3Jvc3MgZGV0ZWN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBjaGFubmVsMCB6ZXJvLWNyb3NzIGRldGVjdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBDaGFubmVsMCBhbHNvIG1lYW5zIGxlZnQgYXVkaW8gY2hhbm5lbCB3aGlsZSBJMlMgKEZPUk1BVFsyXT0wKSBvciAyLWNoYW5uZWwgUENNIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB3aGVuIGNoYW5uZWwwIGRhdGEgc2lnbiBiaXQgY2hhbmdlIG9yIG5leHQgc2hpZnQgZGF0YSBiaXRzIGFyZSBhbGwgemVybyB0aGVuIENIMFpDSUYoSTJTX1NUQVRVUzFbMF0pIGZsYWcgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIENIMFpDSUYgRmxhZyBpcyBzZXQgdG8gMSwgdGhlIGNoYW5uZWwwIHdpbGwgYmUgbXV0ZS4KKyAgICAgKiB8WzFdICAgICB8Q0gxWkNFTiAgIHxDaGFubmVsMSBaZXJvLWNyb3NzIERldGVjdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBjaGFubmVsMSB6ZXJvLWNyb3NzIGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gY2hhbm5lbDEgemVyby1jcm9zcyBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQ2hhbm5lbDEgYWxzbyBtZWFucyByaWdodCBhdWRpbyBjaGFubmVsIHdoaWxlIEkyUyAoRk9STUFUWzJdPTApIG9yIDItY2hhbm5lbCBQQ00gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHdoZW4gY2hhbm5lbDEgZGF0YSBzaWduIGJpdCBjaGFuZ2Ugb3IgbmV4dCBzaGlmdCBkYXRhIGJpdHMgYXJlIGFsbCB6ZXJvIHRoZW4gQ0gxWkNJRihJMlNfU1RBVFVTMVsxXSkgZmxhZyBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSWYgQ0gxWkNJRiBGbGFnIGlzIHNldCB0byAxLCB0aGUgY2hhbm5lbDEgd2lsbCBiZSBtdXRlLgorICAgICAqIHxbMl0gICAgIHxDSDJaQ0VOICAgfENoYW5uZWwyIFplcm8tY3Jvc3MgRGV0ZWN0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGNoYW5uZWwyIHplcm8tY3Jvc3MgZGV0ZWN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBjaGFubmVsMiB6ZXJvLWNyb3NzIGRldGVjdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd2hlbiBjaGFubmVsMiBkYXRhIHNpZ24gYml0IGNoYW5nZSBvciBuZXh0IHNoaWZ0IGRhdGEgYml0cyBhcmUgYWxsIHplcm8gdGhlbiBDSDJaQ0lGKEkyU19TVEFUVVMxWzJdKSBmbGFnIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBDSDJaQ0lGIEZsYWcgaXMgc2V0IHRvIDEsIHRoZSBjaGFubmVsMiB3aWxsIGJlIG11dGUuCisgICAgICogfFszXSAgICAgfENIM1pDRU4gICB8Q2hhbm5lbDMgWmVyby1jcm9zcyBEZXRlY3QgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gY2hhbm5lbDMgemVyby1jcm9zcyBkZXRlY3QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGNoYW5uZWwzIHplcm8tY3Jvc3MgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB3aGVuIGNoYW5uZWwzIGRhdGEgc2lnbiBiaXQgY2hhbmdlIG9yIG5leHQgc2hpZnQgZGF0YSBiaXRzIGFyZSBhbGwgemVybyB0aGVuIENIM1pDSUYoSTJTX1NUQVRVUzFbM10pIGZsYWcgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIENIM1pDSUYgRmxhZyBpcyBzZXQgdG8gMSwgdGhlIGNoYW5uZWwzIHdpbGwgYmUgbXV0ZS4KKyAgICAgKiB8WzRdICAgICB8Q0g0WkNFTiAgIHxDaGFubmVsNCBaZXJvLWNyb3NzIERldGVjdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBjaGFubmVsNCB6ZXJvLWNyb3NzIGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gY2hhbm5lbDQgemVyby1jcm9zcyBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHdoZW4gY2hhbm5lbDQgZGF0YSBzaWduIGJpdCBjaGFuZ2Ugb3IgbmV4dCBzaGlmdCBkYXRhIGJpdHMgYXJlIGFsbCB6ZXJvIHRoZW4gQ0g0WkNJRihJMlNfU1RBVFVTMVs0XSkgZmxhZyBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSWYgQ0g0WkNJRiBGbGFnIGlzIHNldCB0byAxLCB0aGUgY2hhbm5lbDQgd2lsbCBiZSBtdXRlLgorICAgICAqIHxbNV0gICAgIHxDSDVaQ0VOICAgfENoYW5uZWw1IFplcm8tY3Jvc3MgRGV0ZWN0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IGNoYW5uZWw1IHplcm8tY3Jvc3MgZGV0ZWN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBjaGFubmVsNSB6ZXJvLWNyb3NzIGRldGVjdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd2hlbiBjaGFubmVsNSBkYXRhIHNpZ24gYml0IGNoYW5nZSBvciBuZXh0IHNoaWZ0IGRhdGEgYml0cyBhcmUgYWxsIHplcm8gdGhlbiBDSDVaQ0lGKEkyU19TVEFUVVMxWzVdKSBmbGFnIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBDSDVaQ0lGIEZsYWcgaXMgc2V0IHRvIDEsIHRoZSBjaGFubmVsNSB3aWxsIGJlIG11dGUuCisgICAgICogfFs2XSAgICAgfENINlpDRU4gICB8Q2hhbm5lbDYgWmVyby1jcm9zcyBEZXRlY3QgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gY2hhbm5lbDYgemVyby1jcm9zcyBkZXRlY3QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGNoYW5uZWw2IHplcm8tY3Jvc3MgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB3aGVuIGNoYW5uZWw2IGRhdGEgc2lnbiBiaXQgY2hhbmdlIG9yIG5leHQgc2hpZnQgZGF0YSBiaXRzIGFyZSBhbGwgemVybyB0aGVuIENINlpDSUYoSTJTX1NUQVRVUzFbNl0pIGZsYWcgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIENINlpDSUYgRmxhZyBpcyBzZXQgdG8gMSwgdGhlIGNoYW5uZWw2IHdpbGwgYmUgbXV0ZS4KKyAgICAgKiB8WzddICAgICB8Q0g3WkNFTiAgIHxDaGFubmVsNyBaZXJvLWNyb3NzIERldGVjdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBjaGFubmVsNyB6ZXJvLWNyb3NzIGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gY2hhbm5lbDcgemVyby1jcm9zcyBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHdoZW4gY2hhbm5lbDcgZGF0YSBzaWduIGJpdCBjaGFuZ2Ugb3IgbmV4dCBzaGlmdCBkYXRhIGJpdHMgYXJlIGFsbCB6ZXJvIHRoZW4gQ0g3WkNJRiAoSTJTX1NUQVRVUzFbN10pIGZsYWcgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIENIN1pDSUYgRmxhZyBpcyBzZXQgdG8gMSwgdGhlIGNoYW5uZWw3IHdpbGwgYmUgbXV0ZS4KKyAgICAgKiB8WzExOjhdICB8VFhUSCAgICAgIHxUcmFuc21pdCBGSUZPIFRocmVzaG9sZCBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSAwIGRhdGEgd29yZCBpbiB0cmFuc21pdCBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSAxIGRhdGEgd29yZCBpbiB0cmFuc21pdCBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSAyIGRhdGEgd29yZHMgaW4gdHJhbnNtaXQgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gMTQgZGF0YSB3b3JkcyBpbiB0cmFuc21pdCBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSAxNSBkYXRhIHdvcmRzIGluIHRyYW5zbWl0IEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgcmVtYWluIGRhdGEgd29yZCBudW1iZXIgaW4gdHJhbnNtaXQgRklGTyBpcyB0aGUgc2FtZSBvciBsZXNzIHRoYW4gdGhyZXNob2xkIGxldmVsIHRoZW4gVFhUSElGIChJMlNfU1RBVFVTMFsxOF0pIGZsYWcgaXMgc2V0LgorICAgICAqIHxbMTk6MTZdIHxSWFRIICAgICAgfFJlY2VpdmUgRklGTyBUaHJlc2hvbGQgTGV2ZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gMSBkYXRhIHdvcmQgaW4gcmVjZWl2ZSBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSAyIGRhdGEgd29yZHMgaW4gcmVjZWl2ZSBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSAzIGRhdGEgd29yZHMgaW4gcmVjZWl2ZSBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfC4uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTAgPSAxNSBkYXRhIHdvcmRzIGluIHJlY2VpdmUgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gMTYgZGF0YSB3b3JkcyBpbiByZWNlaXZlIEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiByZWNlaXZlZCBkYXRhIHdvcmQgbnVtYmVyIGluIHJlY2VpdmUgYnVmZmVyIGlzIGdyZWF0ZXIgdGhhbiB0aHJlc2hvbGQgbGV2ZWwgdGhlbiBSWFRISUYgKEkyU19TVEFUVVMwWzEwXSkgZmxhZyBpcyBzZXQuCisgICAgICogfFsyNF0gICAgfFBCV0lEVEggICB8UGVyaXBoZXJhbCBCdXMgRGF0YSBXaWR0aCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIGNob2ljZSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lkdGggb2YgQVBCIGJ1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IG11c3QgYmUgc2V0IHRvIDEgd2hpbGUgUERNQSBmdW5jdGlvbiBpcyBlbmFibGUgYW5kIGl0IGlzIHNldCB0byAxNi1iaXQgdHJhbnNtaXNzaW9uIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMzIgYml0cyBkYXRhIHdpZHRoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSAxNiBiaXRzIGRhdGEgd2lkdGguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIFBCV0lEVEg9MSwgdGhlIGxvdyAxNiBiaXRzIG9mIDMyLWJpdCBkYXRhIGJ1cyBhcmUgYXZhaWxhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiBQQldJRFRIPTEsIHRoZSB0cmFuc21pdHRpbmcgRklGTyBsZXZlbCB3aWxsIGJlIGluY3JlYXNlZCBhZnRlciB0d28gRklGTyB3cml0ZSBvcGVyYXRpb25zLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBQQldJRFRIPTEsIHRoZSByZWNlaXZpbmcgRklGTyBsZXZlbCB3aWxsIGJlIGRlY3JlYXNlZCBhZnRlciB0d28gRklGTyByZWFkIG9wZXJhdGlvbnMuCisgICAgICogfFsyNV0gICAgfFBCMTZPUkQgICB8RklGTyBSZWFkL1dyaXRlIE9yZGVyIGluIDE2LWJpdCBXaWR0aCBvZiBQZXJpcGhlcmFsIEJ1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gUEJXSURUSCA9IDEsIHRoZSBkYXRhIEZJRk8gd2lsbCBiZSBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIGJ5IHR3byBwZXJpcGhlcmFsIGJ1cyBhY2Nlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgb3JkZXIgb2YgRklGTyBhY2Nlc3Mgb3BlcmF0aW9ucyB0byBtZWV0IHRoZSAzMi1iaXQgdHJhbnNtaXR0aW5nL3JlY2VpdmluZyBGSUZPIGVudHJpZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExvdyAxNi1iaXQgcmVhZC93cml0ZSBhY2Nlc3MgZmlyc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEhpZ2ggMTYtYml0IHJlYWQvd3JpdGUgYWNjZXNzIGZpcnN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBQQldJRFRIID0gMS4KKyAgICAgKiBAdmFyIEkyU19UOjpTVEFUVVMxCisgICAgICogT2Zmc2V0OiAweDI0ICBJMlMgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDSDBaQ0lGICAgfENoYW5uZWwwIFplcm8tY3Jvc3MgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpbmRpY2F0ZXMgY2hhbm5lbDAgbmV4dCBzYW1wbGUgZGF0YSBzaWduIGJpdCBpcyBjaGFuZ2VkIG9yIGFsbCBkYXRhIGJpdHMgYXJlIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHplcm8tY3Jvc3MgaW4gY2hhbm5lbDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwwIHplcm8tY3Jvc3MgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2hhbm5lbDAgYWxzbyBtZWFucyBsZWZ0IGF1ZGlvIGNoYW5uZWwgd2hpbGUgSTJTIChGT1JNQVRbMl09MCkgb3IgMi1jaGFubmVsIFBDTSBtb2RlLgorICAgICAqIHxbMV0gICAgIHxDSDFaQ0lGICAgfENoYW5uZWwxIFplcm8tY3Jvc3MgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpbmRpY2F0ZXMgY2hhbm5lbDEgbmV4dCBzYW1wbGUgZGF0YSBzaWduIGJpdCBpcyBjaGFuZ2VkIG9yIGFsbCBkYXRhIGJpdHMgYXJlIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHplcm8tY3Jvc3MgaW4gY2hhbm5lbDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWwxIHplcm8tY3Jvc3MgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2hhbm5lbDEgYWxzbyBtZWFucyByaWdodCBhdWRpbyBjaGFubmVsIHdoaWxlIEkyUyAoRk9STUFUWzJdPTApIG9yIDItY2hhbm5lbCBQQ00gbW9kZS4KKyAgICAgKiB8WzJdICAgICB8Q0gyWkNJRiAgIHxDaGFubmVsMiBaZXJvLWNyb3NzIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaW5kaWNhdGVzIGNoYW5uZWwyIG5leHQgc2FtcGxlIGRhdGEgc2lnbiBiaXQgaXMgY2hhbmdlZCBvciBhbGwgZGF0YSBiaXRzIGFyZSB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB6ZXJvLWNyb3NzIGluIGNoYW5uZWwyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsMiB6ZXJvLWNyb3NzIGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfFszXSAgICAgfENIM1pDSUYgICB8Q2hhbm5lbDMgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGluZGljYXRlcyBjaGFubmVsMyBuZXh0IHNhbXBsZSBkYXRhIHNpZ24gYml0IGlzIGNoYW5nZWQgb3IgYWxsIGRhdGEgYml0cyBhcmUgemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gemVyby1jcm9zcyBpbiBjaGFubmVsMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbDMgemVyby1jcm9zcyBpcyBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHxbNF0gICAgIHxDSDRaQ0lGICAgfENoYW5uZWw0IFplcm8tY3Jvc3MgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpbmRpY2F0ZXMgY2hhbm5lbDQgbmV4dCBzYW1wbGUgZGF0YSBzaWduIGJpdCBpcyBjaGFuZ2VkIG9yIGFsbCBkYXRhIGJpdHMgYXJlIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHplcm8tY3Jvc3MgaW4gY2hhbm5lbDQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWw0IHplcm8tY3Jvc3MgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8WzVdICAgICB8Q0g1WkNJRiAgIHxDaGFubmVsNSBaZXJvLWNyb3NzIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaW5kaWNhdGVzIGNoYW5uZWw1IG5leHQgc2FtcGxlIGRhdGEgc2lnbiBiaXQgaXMgY2hhbmdlZCBvciBhbGwgZGF0YSBiaXRzIGFyZSB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB6ZXJvLWNyb3NzIGluIGNoYW5uZWw1LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGFubmVsNSB6ZXJvLWNyb3NzIGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIGF2YWlsYWJsZSB3aGlsZSBtdWx0aS1jaGFubmVsIFBDTSBtb2RlIGFuZCBURE1DSE5VTSAoSTJTX0NUTDBbMzE6MzBdKSA9IDB4MSwgMHgyLCAweDMuCisgICAgICogfFs2XSAgICAgfENINlpDSUYgICB8Q2hhbm5lbDYgWmVyby1jcm9zcyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGluZGljYXRlcyBjaGFubmVsNiBuZXh0IHNhbXBsZSBkYXRhIHNpZ24gYml0IGlzIGNoYW5nZWQgb3IgYWxsIGRhdGEgYml0cyBhcmUgemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gemVyby1jcm9zcyBpbiBjaGFubmVsNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hhbm5lbDYgemVyby1jcm9zcyBpcyBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBhdmFpbGFibGUgd2hpbGUgbXVsdGktY2hhbm5lbCBQQ00gbW9kZSBhbmQgVERNQ0hOVU0gKEkyU19DVEwwWzMxOjMwXSkgPSAweDEsIDB4MiwgMHgzLgorICAgICAqIHxbN10gICAgIHxDSDdaQ0lGICAgfENoYW5uZWw3IFplcm8tY3Jvc3MgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpbmRpY2F0ZXMgY2hhbm5lbDcgbmV4dCBzYW1wbGUgZGF0YSBzaWduIGJpdCBpcyBjaGFuZ2VkIG9yIGFsbCBkYXRhIGJpdHMgYXJlIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHplcm8tY3Jvc3MgaW4gY2hhbm5lbDcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoYW5uZWw3IHplcm8tY3Jvc3MgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYXZhaWxhYmxlIHdoaWxlIG11bHRpLWNoYW5uZWwgUENNIG1vZGUgYW5kIFRETUNITlVNIChJMlNfQ1RMMFszMTozMF0pID0gMHgxLCAweDIsIDB4My4KKyAgICAgKiB8WzEyOjhdICB8VFhDTlQgICAgIHxUcmFuc21pdCBGSUZPIExldmVsIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBlbnRyaWVzIGluIHRyYW5zbWl0IEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwMCA9IE5vIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMDEgPSAxIHdvcmQgaW4gdHJhbnNtaXQgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxMCA9IDIgd29yZHMgaW4gdHJhbnNtaXQgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExMCA9IDE0IHdvcmRzIGluIHRyYW5zbWl0IEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMTEgPSAxNSB3b3JkcyBpbiB0cmFuc21pdCBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDAwID0gMTYgd29yZHMgaW4gdHJhbnNtaXQgRklGTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgYXJlIHJlc2VydmVkLgorICAgICAqIHxbMjA6MTZdIHxSWENOVCAgICAgfFJlY2VpdmUgRklGTyBMZXZlbCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgZW50cmllcyBpbiByZWNlaXZlIEZJRk8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwMCA9IE5vIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMDEgPSAxIHdvcmQgaW4gcmVjZWl2ZSBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEwID0gMiB3b3JkcyBpbiByZWNlaXZlIEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Li4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMTAgPSAxNCB3b3JkcyBpbiByZWNlaXZlIEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMTEgPSAxNSB3b3JkcyBpbiByZWNlaXZlIEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMDAgPSAxNiB3b3JkcyBpbiByZWNlaXZlIEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGFyZSByZXNlcnZlZC4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDA7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBJMlMgQ29udHJvbCBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTEtESVY7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gSTJTIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSUVOOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIEkyUyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzA7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBJMlMgU3RhdHVzIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBUWEZJRk87ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gSTJTIFRyYW5zbWl0IEZJRk8gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUlhGSUZPOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTRdIEkyUyBSZWNlaXZlIEZJRk8gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzJdOworICAgIF9fSU8gdWludDMyX3QgQ1RMMTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIEkyUyBDb250cm9sIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDI0XSBJMlMgU3RhdHVzIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gSTJTX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIEkyU19DT05TVCBJMlMgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgSTJTIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgSTJTX0NUTDBfSTJTRU5fUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBJMlNFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX0kyU0VOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9JMlNFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogSTJTRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX1RYRU5fUG9zICAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogVFhFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9UWEVOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfVFhFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFRYRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9SWEVOX1BvcyAgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFJYRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfUlhFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwwX1JYRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBSWEVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfTVVURV9Qb3MgICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBNVVRFIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX01VVEVfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9NVVRFX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogTVVURSBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX0RBVFdJRFRIX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogREFUV0lEVEggUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9EQVRXSURUSF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgSTJTX0NUTDBfREFUV0lEVEhfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IERBVFdJRFRIIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9NT05PX1BvcyAgICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IE1PTk8gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfTU9OT19Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwwX01PTk9fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBNT05PIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfT1JERVJfUG9zICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBPUkRFUiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX09SREVSX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9PUkRFUl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogT1JERVIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX1NMQVZFX1BvcyAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogU0xBVkUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9TTEFWRV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfU0xBVkVfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFNMQVZFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9NQ0xLRU5fUG9zICAgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IE1DTEtFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfTUNMS0VOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwwX01DTEtFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBNQ0xLRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfVFhGQkNMUl9Qb3MgICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBUWEZCQ0xSIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX1RYRkJDTFJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9UWEZCQ0xSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogVFhGQkNMUiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX1JYRkJDTFJfUG9zICAgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogUlhGQkNMUiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9SWEZCQ0xSX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfUlhGQkNMUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFJYRkJDTFIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9UWFBETUFFTl9Qb3MgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFRYUERNQUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfVFhQRE1BRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwwX1RYUERNQUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBUWFBETUFFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfUlhQRE1BRU5fUG9zICAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBSWFBETUFFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX1JYUERNQUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9SWFBETUFFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogUlhQRE1BRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX1JYTENIX1BvcyAgICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogUlhMQ0ggUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9SWExDSF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDBfUlhMQ0hfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFJYTENIIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9GT1JNQVRfUG9zICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IEZPUk1BVCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfRk9STUFUX01zayAgICAgICAgICAgICAgKDB4N3VsIDw8IEkyU19DVEwwX0ZPUk1BVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBGT1JNQVQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDBfUENNU1lOQ19Qb3MgICAgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBQQ01TWU5DIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwwX1BDTVNZTkNfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMF9QQ01TWU5DX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogUENNU1lOQyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwwX0NIV0lEVEhfUG9zICAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMDogQ0hXSURUSCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMF9DSFdJRFRIX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgSTJTX0NUTDBfQ0hXSURUSF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IENIV0lEVEggTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMF9URE1DSE5VTV9Qb3MgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDA6IFRETUNITlVNIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDBfVERNQ0hOVU1fTXNrICAgICAgICAgICAgKDB4M3VsIDw8IEkyU19DVEwwX1RETUNITlVNX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwwOiBURE1DSE5VTSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NMS0RJVl9NQ0xLRElWX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDTEtESVY6IE1DTEtESVYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyU19DTEtESVZfTUNMS0RJVl9Nc2sgICAgICAgICAgICgweDNmdWwgPDwgSTJTX0NMS0RJVl9NQ0xLRElWX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q0xLRElWOiBNQ0xLRElWIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DTEtESVZfQkNMS0RJVl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q0xLRElWOiBCQ0xLRElWIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfQ0xLRElWX0JDTEtESVZfTXNrICAgICAgICAgICAoMHgxZmZ1bCA8PCBJMlNfQ0xLRElWX0JDTEtESVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNMS0RJVjogQkNMS0RJViBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfSUVOX1JYVURGSUVOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogUlhVREZJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0lFTl9SWFVERklFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19JRU5fUlhVREZJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IFJYVURGSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9SWE9WRklFTl9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IFJYT1ZGSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fUlhPVkZJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX1JYT1ZGSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBSWE9WRklFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19JRU5fUlhUSElFTl9Qb3MgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBSWFRISUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBJMlNfSUVOX1JYVEhJRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0lFTl9SWFRISUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogUlhUSElFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfSUVOX1RYVURGSUVOX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogVFhVREZJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0lFTl9UWFVERklFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19JRU5fVFhVREZJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IFRYVURGSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9UWE9WRklFTl9Qb3MgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IFRYT1ZGSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fVFhPVkZJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX1RYT1ZGSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBUWE9WRklFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19JRU5fVFhUSElFTl9Qb3MgICAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBUWFRISUVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBJMlNfSUVOX1RYVEhJRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0lFTl9UWFRISUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogVFhUSElFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfSUVOX0NIMFpDSUVOX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0gwWkNJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0lFTl9DSDBaQ0lFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19JRU5fQ0gwWkNJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENIMFpDSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9DSDFaQ0lFTl9Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENIMVpDSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fQ0gxWkNJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX0NIMVpDSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDFaQ0lFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19JRU5fQ0gyWkNJRU5fUG9zICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDJaQ0lFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfSUVOX0NIMlpDSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0lFTl9DSDJaQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0gyWkNJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfSUVOX0NIM1pDSUVOX1BvcyAgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0gzWkNJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0lFTl9DSDNaQ0lFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19JRU5fQ0gzWkNJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENIM1pDSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9DSDRaQ0lFTl9Qb3MgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENINFpDSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fQ0g0WkNJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX0NINFpDSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDRaQ0lFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19JRU5fQ0g1WkNJRU5fUG9zICAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDVaQ0lFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfSUVOX0NINVpDSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0lFTl9DSDVaQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0g1WkNJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfSUVOX0NINlpDSUVOX1BvcyAgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OklFTjogQ0g2WkNJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0lFTl9DSDZaQ0lFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19JRU5fQ0g2WkNJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENINlpDSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0lFTl9DSDdaQ0lFTl9Qb3MgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpJRU46IENIN1pDSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19JRU5fQ0g3WkNJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfSUVOX0NIN1pDSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6SUVOOiBDSDdaQ0lFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX0kyU0lOVF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogSTJTSU5UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9JMlNJTlRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzBfSTJTSU5UX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IEkyU0lOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9JMlNSWElOVF9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IEkyU1JYSU5UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfSTJTUlhJTlRfTXNrICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMwX0kyU1JYSU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBJMlNSWElOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfSTJTVFhJTlRfUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBJMlNUWElOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX0kyU1RYSU5UX01zayAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9JMlNUWElOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogSTJTVFhJTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX0RBVEFDSF9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogREFUQUNIIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9EQVRBQ0hfTXNrICAgICAgICAgICAoMHg3dWwgPDwgSTJTX1NUQVRVUzBfREFUQUNIX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IERBVEFDSCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9SWFVESUZfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFJYVURJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfUlhVRElGX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMwX1JYVURJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBSWFVESUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfUlhPVklGX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBSWE9WSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX1JYT1ZJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9SWE9WSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogUlhPVklGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX1JYVEhJRl9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogUlhUSElGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9SWFRISUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzBfUlhUSElGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFJYVEhJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9SWEZVTExfUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFJYRlVMTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfUlhGVUxMX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMwX1JYRlVMTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBSWEZVTEwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfUlhFTVBUWV9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBSWEVNUFRZIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX1JYRU1QVFlfTXNrICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9SWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogUlhFTVBUWSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX1RYVURJRl9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogVFhVRElGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9UWFVESUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzBfVFhVRElGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFRYVURJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9UWE9WSUZfUG9zICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFRYT1ZJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfVFhPVklGX01zayAgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMwX1RYT1ZJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBUWE9WSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfVFhUSElGX1BvcyAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBUWFRISUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX1RYVEhJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9UWFRISUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogVFhUSElGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMwX1RYRlVMTF9Qb3MgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogVFhGVUxMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMF9UWEZVTExfTXNrICAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzBfVFhGVUxMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFRYRlVMTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMF9UWEVNUFRZX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzA6IFRYRU1QVFkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzBfVFhFTVBUWV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMwX1RYRU1QVFlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBUWEVNUFRZIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzBfVFhCVVNZX1BvcyAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMwOiBUWEJVU1kgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMwX1RYQlVTWV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMF9UWEJVU1lfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMDogVFhCVVNZIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19UWEZJRk9fVFhGSUZPX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6VFhGSUZPOiBUWEZJRk8gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBJMlNfVFhGSUZPX1RYRklGT19Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IEkyU19UWEZJRk9fVFhGSUZPX1BvcykgICAgICAgICAgIC8qITwgSTJTX1Q6OlRYRklGTzogVFhGSUZPIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfUlhGSUZPX1JYRklGT19Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlJYRklGTzogUlhGSUZPIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1JYRklGT19SWEZJRk9fTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBJMlNfUlhGSUZPX1JYRklGT19Qb3MpICAgICAgICAgICAvKiE8IEkyU19UOjpSWEZJRk86IFJYRklGTyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDFfQ0gwWkNFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDBaQ0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwxX0NIMFpDRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMV9DSDBaQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0gwWkNFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwxX0NIMVpDRU5fUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0gxWkNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMV9DSDFaQ0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDFfQ0gxWkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENIMVpDRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMV9DSDJaQ0VOX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENIMlpDRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDFfQ0gyWkNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwxX0NIMlpDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDJaQ0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDFfQ0gzWkNFTl9Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDNaQ0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwxX0NIM1pDRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMV9DSDNaQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0gzWkNFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwxX0NINFpDRU5fUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0g0WkNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMV9DSDRaQ0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDFfQ0g0WkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENINFpDRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMV9DSDVaQ0VOX1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENINVpDRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDFfQ0g1WkNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwxX0NINVpDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDVaQ0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDFfQ0g2WkNFTl9Qb3MgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBDSDZaQ0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwxX0NINlpDRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBJMlNfQ1RMMV9DSDZaQ0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0g2WkNFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwxX0NIN1pDRU5fUG9zICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogQ0g3WkNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMV9DSDdaQ0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDFfQ0g3WkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IENIN1pDRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMV9UWFRIX1BvcyAgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IFRYVEggUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDFfVFhUSF9Nc2sgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBUWFRIIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX0NUTDFfUlhUSF9Qb3MgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBSWFRIIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIEkyU19DVEwxX1JYVEhfTXNrICAgICAgICAgICAgICAgICgweGZ1bCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogUlhUSCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19DVEwxX1BCV0lEVEhfUG9zICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6Q1RMMTogUEJXSURUSCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJMlNfQ1RMMV9QQldJRFRIX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgSTJTX0NUTDFfUEJXSURUSF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IFBCV0lEVEggTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfQ1RMMV9QQjE2T1JEX1BvcyAgICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OkNUTDE6IFBCMTZPUkQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX0NUTDFfUEIxNk9SRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IEkyU19DVEwxX1BCMTZPUkRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpDVEwxOiBQQjE2T1JEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0gwWkNJRl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDBaQ0lGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMxX0NIMFpDSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMV9DSDBaQ0lGX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0gwWkNJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMxX0NIMVpDSUZfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0gxWkNJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDFaQ0lGX01zayAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzFfQ0gxWkNJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENIMVpDSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDJaQ0lGX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENIMlpDSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0gyWkNJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMxX0NIMlpDSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDJaQ0lGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0gzWkNJRl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDNaQ0lGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMxX0NIM1pDSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMV9DSDNaQ0lGX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0gzWkNJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMxX0NINFpDSUZfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0g0WkNJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDRaQ0lGX01zayAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzFfQ0g0WkNJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENINFpDSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDVaQ0lGX1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENINVpDSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0g1WkNJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IEkyU19TVEFUVVMxX0NINVpDSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDVaQ0lGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzFfQ0g2WkNJRl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBDSDZaQ0lGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMxX0NINlpDSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBJMlNfU1RBVFVTMV9DSDZaQ0lGX1BvcykgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0g2WkNJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIEkyU19TVEFUVVMxX0NIN1pDSUZfUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogQ0g3WkNJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBJMlNfU1RBVFVTMV9DSDdaQ0lGX01zayAgICAgICAgICAoMHgxdWwgPDwgSTJTX1NUQVRVUzFfQ0g3WkNJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IENIN1pDSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBJMlNfU1RBVFVTMV9UWENOVF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTX1Q6OlNUQVRVUzE6IFRYQ05UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgSTJTX1NUQVRVUzFfVFhDTlRfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBJMlNfU1RBVFVTMV9UWENOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBUWENOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJTX1NUQVRVUzFfUlhDTlRfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyU19UOjpTVEFUVVMxOiBSWENOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIEkyU19TVEFUVVMxX1JYQ05UX01zayAgICAgICAgICAgICgweDFmdWwgPDwgSTJTX1NUQVRVUzFfUlhDTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBJMlNfVDo6U1RBVFVTMTogUlhDTlQgTWFzayAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIEkyU19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgSTJTIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKworI2VuZGlmIC8qIF9fSTJTX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9vdGdfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvb3RnX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNDc0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvb3RnX3JlZy5oCkBAIC0wLDAgKzEsMzk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgb3RnX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBPVEcgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fT1RHX1JFR19IX18KKyNkZWZpbmUgX19PVEdfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVTQiBPbi1UaGUtR28gQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIE9URyBVU0IgT24tVGhlLUdvIENvbnRyb2xsZXIoT1RHKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBPVEcgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBPVEdfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwICBPVEcgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFZCVVNEUk9QICB8RHJvcCBWQlVTIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1c2VyIGFwcGxpY2F0aW9uIHJ1bm5pbmcgb24gdGhpcyBPVEcgQS1kZXZpY2Ugd2FudHMgdG8gY29uc2VydmUgcG93ZXIsIHNldCB0aGlzIGJpdCB0byBkcm9wIFZCVVMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCVVNSRVEgKE9UR19DVExbMV0pIHdpbGwgYmUgYWxzbyBjbGVhcmVkIG5vIG1hdHRlciBBLWRldmljZSBvciBCLWRldmljZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IGRyb3AgdGhlIFZCVVMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERyb3AgdGhlIFZCVVMuCisgICAgICogfFsxXSAgICAgfEJVU1JFUSAgICB8T1RHIEJ1cyBSZXF1ZXN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgT1RHIEEtZGV2aWNlIHdhbnRzIHRvIGRvIGRhdGEgdHJhbnNmZXJzIHZpYSBVU0IgYnVzLCBzZXR0aW5nIHRoaXMgYml0IHdpbGwgZHJpdmUgVkJVUyBoaWdoIHRvIGRldGVjdCBVU0IgZGV2aWNlIGNvbm5lY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1c2VyIHdvbid0IHVzZSB0aGUgYnVzIGFueSBtb3JlLCBjbGVhcmluZyB0aGlzIGJpdCB3aWxsIGRyb3AgVkJVUyB0byBzYXZlIHBvd2VyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gQS1kZXZpY2UgZ29lcyB0byBBX3dhaXRfdmZhbGwgc3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGFsc28gY2xlYXJlZCBpZiBWQlVTRFJPUCAoT1RHX0NUTFswXSkgYml0IGlzIHNldCBvciBJRFNUUyAoT1RHX1NUQVRVU1sxXSkgY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1c2VyIG9mIGFuIE9URy1CIERldmljZSB3YW50cyB0byByZXF1ZXN0IFZCVVMsIHNldHRpbmcgdGhpcyBiaXQgd2lsbCBydW4gU1JQIHByb3RvY29sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGlmIFNSUCBmYWlsdXJlIChPVEcgQS1kZXZpY2UgZG9lcyBub3QgcHJvdmlkZSBWQlVTIGFmdGVyIEItZGV2aWNlIGlzc3VlcyBTUlAgaW4gc3BlY2lmaWVkIGludGVydmFsLCBkZWZpbmVkIGluIE9URyBzcGVjaWZpY2F0aW9uKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgYWxzbyBjbGVhcmVkIGlmIFZCVVNEUk9QIChPVEdfQ1RMWzBdKSBiaXQgaXMgc2V0IG9yIElEU1RTIChPVEdfU1RBVFVTWzFdKSBjaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb3QgbGF1bmNoIFZCVVMgaW4gT1RHIEEtZGV2aWNlIG9yIG5vdCByZXF1ZXN0IFNSUCBpbiBPVEcgQi1kZXZpY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExhdW5jaCBWQlVTIGluIE9URyBBLWRldmljZSBvciByZXF1ZXN0IFNSUCBpbiBPVEcgQi1kZXZpY2UuCisgICAgICogfFsyXSAgICAgfEhOUFJFUUVOICB8T1RHIEhOUCBSZXF1ZXN0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFVTQiBmcmFtZSBhcyBBLWRldmljZSwgc2V0IHRoaXMgYml0IHdoZW4gQS1kZXZpY2UgYWxsb3dzIHRvIHByb2Nlc3MgSE5QIHByb3RvY29sIC0tIEEtZGV2aWNlIGNoYW5nZXMgcm9sZSBmcm9tIEhvc3QgdG8gUGVyaXBoZXJhbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIE9URyBzdGF0ZSBjaGFuZ2VzIGZyb20gYV9zdXNwZW5kIHRvIGFfcGVyaXBoZXJhbCBvciBnb2VzIGJhY2sgdG8gYV9pZGxlIHN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBVU0IgZnJhbWUgYXMgQi1kZXZpY2UsIHNldCB0aGlzIGJpdCBhZnRlciB0aGUgT1RHIEEtZGV2aWNlIHN1Y2Nlc3NmdWxseSBzZW5kcyBhIFNldEZlYXR1cmUgKGJfaG5wX2VuYWJsZSkgY29tbWFuZCB0byB0aGUgT1RHIEItZGV2aWNlIHRvIHN0YXJ0IHJvbGUgY2hhbmdlIC0tIEItZGV2aWNlIGNoYW5nZXMgcm9sZSBmcm9tIFBlcmlwaGVyYWwgdG8gSG9zdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIE9URyBzdGF0ZSBjaGFuZ2VzIGZyb20gYl9wZXJpcGhlcmFsIHRvIGJfd2FpdF9hY29uIG9yIGdvZXMgYmFjayB0byBiX2lkbGUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEhOUCByZXF1ZXN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBITlAgcmVxdWVzdCBFbmFibGVkIChBLWRldmljZSBjYW4gY2hhbmdlIHJvbGUgZnJvbSBIb3N0IHRvIFBlcmlwaGVyYWwgb3IgQi1kZXZpY2UgY2FuIGNoYW5nZSByb2xlIGZyb20gUGVyaXBoZXJhbCB0byBIb3N0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBSZWZlciB0byBPVEcgc3BlY2lmaWNhdGlvbiB0byBnZXQgYV9zdXNwZW5kLCBhX3BlcmlwaGVyYWwsIGFfaWRsZSBhbmQgYl9pZGxlIHN0YXRlLgorICAgICAqIHxbNF0gICAgIHxPVEdFTiAgICAgfE9URyBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBuZWVkcyB0byBzZXQgdGhpcyBiaXQgdG8gZW5hYmxlIE9URyBmdW5jdGlvbiB3aGlsZSBVU0IgZnJhbWUgY29uZmlndXJlZCBhcyBPVEcgZGV2aWNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBVU0IgZnJhbWUgbm90IGNvbmZpZ3VyZWQgYXMgT1RHIGRldmljZSwgdGhpcyBiaXQgaXMgbXVzdCBiZSBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MD0gT1RHIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPVEcgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8V0tFTiAgICAgIHxPVEcgSUQgUGluIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPVEcgSUQgcGluIHN0YXR1cyBjaGFuZ2Ugd2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT1RHIElEIHBpbiBzdGF0dXMgY2hhbmdlIHdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiBAdmFyIE9UR19UOjpQSFlDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIE9URyBQSFkgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfE9UR1BIWUVOICB8T1RHIFBIWSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBVU0IgZnJhbWUgaXMgY29uZmlndXJlZCBhcyBPVEctZGV2aWNlIG9yIElELWRlcGVuZGVudCwgdXNlciBuZWVkcyB0byBzZXQgdGhpcyBiaXQgYmVmb3JlIHVzaW5nIE9URyBmdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGRldmljZSBpcyBub3QgY29uZmlndXJlZCBhcyBPVEctZGV2aWNlIG5vciBJRC1kZXBlbmRlbnQgLCB0aGlzIGJpdCBpcyAiZG9uJ3QgY2FyZSIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9URyBQSFkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBQSFkgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8SURERVRFTiAgIHxJRCBEZXRlY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZXRlY3QgSUQgcGluIHN0YXR1cyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGV0ZWN0IElEIHBpbiBzdGF0dXMgRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8VkJFTlBPTCAgIHxPZmYtY2hpcCBVU0IgVkJVUyBQb3dlciBTd2l0Y2ggRW5hYmxlIFBvbGFyaXR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIE9URyBjb250cm9sbGVyIHdpbGwgZW5hYmxlIG9mZi1jaGlwIFVTQiBWQlVTIHBvd2VyIHN3aXRjaCB0byBwcm92aWRlIFZCVVMgcG93ZXIgd2hlbiBuZWVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSBVU0JfVkJVU19FTiBwaW4gaXMgdXNlZCB0byBjb250cm9sIHRoZSBvZmYtY2hpcCBVU0IgVkJVUyBwb3dlciBzd2l0Y2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBvbGFyaXR5IG9mIGVuYWJsaW5nIG9mZi1jaGlwIFVTQiBWQlVTIHBvd2VyIHN3aXRjaCAoaGlnaCBhY3RpdmUgb3IgbG93IGFjdGl2ZSkgZGVwZW5kcyBvbiB0aGUgc2VsZWN0ZWQgY29tcG9uZW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IGFzIGZvbGxvd2luZyBhY2NvcmRpbmcgdG8gdGhlIHBvbGFyaXR5IG9mIG9mZi1jaGlwIFVTQiBWQlVTIHBvd2VyIHN3aXRjaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIG9mZi1jaGlwIFVTQiBWQlVTIHBvd2VyIHN3aXRjaCBlbmFibGUgaXMgYWN0aXZlIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBvZmYtY2hpcCBVU0IgVkJVUyBwb3dlciBzd2l0Y2ggZW5hYmxlIGlzIGFjdGl2ZSBsb3cuCisgICAgICogfFs1XSAgICAgfFZCU1RTUE9MICB8T2ZmLWNoaXAgVVNCIFZCVVMgUG93ZXIgU3dpdGNoIFN0YXR1cyBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBwb2xhcml0eSBvZiBvZmYtY2hpcCBVU0IgVkJVUyBwb3dlciBzd2l0Y2ggdmFsaWQgc2lnbmFsIGRlcGVuZHMgb24gdGhlIHNlbGVjdGVkIGNvbXBvbmVudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgVVNCX1ZCVVNfU1QgcGluIGlzIHVzZWQgdG8gbW9uaXRvciB0aGUgdmFsaWQgc2lnbmFsIG9mIHRoZSBvZmYtY2hpcCBVU0IgVkJVUyBwb3dlciBzd2l0Y2gKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgYXMgZm9sbG93aW5nIGFjY29yZGluZyB0byB0aGUgcG9sYXJpdHkgb2Ygb2ZmLWNoaXAgVVNCIFZCVVMgcG93ZXIgc3dpdGNoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcG9sYXJpdHkgb2Ygb2ZmLWNoaXAgVVNCIFZCVVMgcG93ZXIgc3dpdGNoIHZhbGlkIHN0YXR1cyBpcyBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcG9sYXJpdHkgb2Ygb2ZmLWNoaXAgVVNCIFZCVVMgcG93ZXIgc3dpdGNoIHZhbGlkIHN0YXR1cyBpcyBsb3cuCisgICAgICogQHZhciBPVEdfVDo6SU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4MDggIE9URyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Uk9MRUNIR0lFTnxSb2xlIChIb3N0IG9yIFBlcmlwaGVyYWwpIENoYW5nZWQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8VkJFSUVOICAgIHxWQlVTIEVycm9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVkJVUyBlcnJvciBtZWFucyBnb2luZyB0byBhX3ZidXNfZXJyIHN0YXRlLiBQbGVhc2UgcmVmZXIgdG8gQS1kZXZpY2Ugc3RhdGUgZGlhZ3JhbSBpbiBPVEcgc3BlY2lmaWNhdGlvbi4KKyAgICAgKiB8WzJdICAgICB8U1JQRklFTiAgIHxTUlAgRmFpbCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxITlBGSUVOICAgfEhOUCBGYWlsIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfEdPSURMRUlFTiB8T1RHIERldmljZSBHb2VzIHRvIElETEUgU3RhdGUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBHb2luZyB0byBpZGxlIHN0YXRlIG1lYW5zIGdvaW5nIHRvIGFfaWRsZSBvciBiX2lkbGUgc3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQbGVhc2UgcmVmZXIgdG8gQS1kZXZpY2Ugc3RhdGUgZGlhZ3JhbSBhbmQgQi1kZXZpY2Ugc3RhdGUgZGlhZ3JhbSBpbiBPVEcgc3BlYy4KKyAgICAgKiB8WzVdICAgICB8SURDSEdJRU4gIHxJRFNUUyBDaGFuZ2VkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIElEU1RTIChPVEdfU1RBVFVTWzFdKSBzdGF0dXMgaXMgY2hhbmdlZCBmcm9tIGhpZ2ggdG8gbG93IG9yIGZyb20gbG93IHRvIGhpZ2gsIGFuIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxQREVWSUVOICAgfEFjdCBBcyBQZXJpcGhlcmFsIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIHRoZSBkZXZpY2UgaXMgY2hhbmdlZCBhcyBhIHBlcmlwaGVyYWwsIGFuIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGlzIGRldmljZSBhcyBhIHBlcmlwaGVyYWwgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGlzIGRldmljZSBhcyBhIHBlcmlwaGVyYWwgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs3XSAgICAgfEhPU1RJRU4gICB8QWN0IEFzIEhvc3QgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgdGhlIGRldmljZSBpcyBjaGFuZ2VkIGFzIGEgaG9zdCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoaXMgZGV2aWNlIGFzIGEgaG9zdCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgZGV2aWNlIGFzIGEgaG9zdCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8QlZMRENIR0lFTnxCLWRldmljZSBTZXNzaW9uIFZhbGlkIFN0YXR1cyBDaGFuZ2VkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIEJWTEQgKE9UR19TVEFUVVNbM10pIHN0YXR1cyBpcyBjaGFuZ2VkIGZyb20gaGlnaCB0byBsb3cgb3IgZnJvbSBsb3cgdG8gaGlnaCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs5XSAgICAgfEFWTERDSEdJRU58QS1kZXZpY2UgU2Vzc2lvbiBWYWxpZCBTdGF0dXMgQ2hhbmdlZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBBVkxEIChPVEdfU1RBVFVTWzRdKSBzdGF0dXMgaXMgY2hhbmdlZCBmcm9tIGhpZ2ggdG8gbG93IG9yIGZyb20gbG93IHRvIGhpZ2gsIGFuIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTBdICAgIHxWQkNIR0lFTiAgfFZCVVNWTEQgU3RhdHVzIENoYW5nZWQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgVkJVU1ZMRCAoT1RHX1NUQVRVU1s1XSkgc3RhdHVzIGlzIGNoYW5nZWQgZnJvbSBoaWdoIHRvIGxvdyBvciBmcm9tIGxvdyB0byBoaWdoLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzExXSAgICB8U0VDSEdJRU4gIHxTRVNTRU5EIFN0YXR1cyBDaGFuZ2VkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIFNFU1NFTkQgKE9UR19TVEFUVVNbMl0pIHN0YXR1cyBpcyBjaGFuZ2VkIGZyb20gaGlnaCB0byBsb3cgb3IgZnJvbSBsb3cgdG8gaGlnaCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxM10gICAgfFNSUERFVElFTiB8U1JQIERldGVjdGVkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogQHZhciBPVEdfVDo6SU5UU1RTCisgICAgICogT2Zmc2V0OiAweDBDICBPVEcgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJPTEVDSEdJRiB8T1RHIFJvbGUgQ2hhbmdlIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaXMgc2V0IHdoZW4gdGhlIHJvbGUgb2YgYW4gT1RHIGRldmljZSBjaGFuZ2VkIGZyb20gYSBob3N0IHRvIGEgcGVyaXBoZXJhbCwgb3IgY2hhbmdlZCBmcm9tIGEgcGVyaXBoZXJhbCB0byBhIGhvc3Qgd2hpbGUgVVNCX0lEIHBpbiBzdGF0dXMgZG9lcyBub3QgY2hhbmdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPVEcgZGV2aWNlIHJvbGUgbm90IGNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBkZXZpY2Ugcm9sZSBjaGFuZ2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBmbGFnLgorICAgICAqIHxbMV0gICAgIHxWQkVJRiAgICAgfFZCVVMgRXJyb3IgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgc2V0IHdoZW4gdm9sdGFnZSBvbiBWQlVTIGNhbm5vdCByZWFjaCBhIG1pbmltdW0gdmFsaWQgdGhyZXNob2xkIDQuNFYgd2l0aGluIGEgbWF4aW11bSB0aW1lIG9mIDEwMG1zIGFmdGVyIE9URyBBLWRldmljZSBzdGFydGluZyB0byBkcml2ZSBWQlVTIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9URyBBLWRldmljZSBkcml2ZXMgVkJVUyBvdmVyIHRocmVzaG9sZCB2b2x0YWdlIGJlZm9yZSB0aGlzIGludGVydmFsIGV4cGlyZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBBLWRldmljZSBjYW5ub3QgZHJpdmUgVkJVUyBvdmVyIHRocmVzaG9sZCB2b2x0YWdlIGJlZm9yZSB0aGlzIGludGVydmFsIGV4cGlyZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGZsYWcgYW5kIHJlY292ZXIgZnJvbSB0aGUgVkJVUyBlcnJvciBzdGF0ZS4KKyAgICAgKiB8WzJdICAgICB8U1JQRklGICAgIHxTUlAgRmFpbCBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgaW5pdGlhdGluZyBTUlAsIGFuIE9URyBCLWRldmljZSB3aWxsIHdhaXQgZm9yIHRoZSBPVEcgQS1kZXZpY2UgdG8gZHJpdmUgVkJVUyBoaWdoIGF0IGxlYXN0IFRCX1NSUF9GQUlMIG1pbmltdW0sIGRlZmluZWQgaW4gT1RHIHNwZWNpZmljYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZsYWcgaXMgc2V0IHdoZW4gdGhlIE9URyBCLWRldmljZSBkb2VzIG5vdCBnZXQgVkJVUyBoaWdoIGFmdGVyIHRoaXMgaW50ZXJ2YWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9URyBCLWRldmljZSBnZXRzIFZCVVMgaGlnaCBiZWZvcmUgdGhpcyBpbnRlcnZhbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT1RHIEItZGV2aWNlIGRvZXMgbm90IGdldCBWQlVTIGhpZ2ggYmVmb3JlIHRoaXMgaW50ZXJ2YWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGZsYWcuCisgICAgICogfFszXSAgICAgfEhOUEZJRiAgICB8SE5QIEZhaWwgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gQS1kZXZpY2UgaGFzIGdyYW50ZWQgQi1kZXZpY2UgdG8gYmUgaG9zdCBhbmQgVVNCIGJ1cyBpcyBpbiBTRTAgKGJvdGggVVNCX0QrIGFuZCBVU0JfRC0gbG93KSBzdGF0ZSwgdGhpcyBiaXQgd2lsbCBiZSBzZXQgd2hlbiBBLWRldmljZSBkb2VzIG5vdCBjb25uZWN0IGFmdGVyIHNwZWNpZmllZCBpbnRlcnZhbCBleHBpcmVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBLWRldmljZSBjb25uZWN0cyB0byBCLWRldmljZSBiZWZvcmUgc3BlY2lmaWVkIGludGVydmFsIGV4cGlyZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEtZGV2aWNlIGRvZXMgbm90IGNvbm5lY3QgdG8gQi1kZXZpY2UgYmVmb3JlIHNwZWNpZmllZCBpbnRlcnZhbCBleHBpcmVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBmbGFnLgorICAgICAqIHxbNF0gICAgIHxHT0lETEVJRiAgfE9URyBEZXZpY2UgR29lcyB0byBJRExFIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGbGFnIGlzIHNldCBpZiB0aGUgT1RHIGRldmljZSB0cmFuc2ZlcnMgZnJvbSBub24taWRsZSBzdGF0ZSB0byBpZGxlIHN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIE9URyBkZXZpY2Ugd2lsbCBiZSBuZWl0aGVyIGEgaG9zdCBub3IgYSBwZXJpcGhlcmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPVEcgZGV2aWNlIGRvZXMgbm90IGdvIGJhY2sgdG8gaWRsZSBzdGF0ZSAoYV9pZGxlIG9yIGJfaWRsZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBkZXZpY2UgZ29lcyBiYWNrIHRvIGlkbGUgc3RhdGUoYV9pZGxlIG9yIGJfaWRsZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZSAxOiBHb2luZyB0byBpZGxlIHN0YXRlIG1lYW5zIGdvaW5nIHRvIGFfaWRsZSBvciBiX2lkbGUgc3RhdGUuIFBsZWFzZSByZWZlciB0byBPVEcgc3BlY2lmaWNhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlIDI6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBmbGFnLgorICAgICAqIHxbNV0gICAgIHxJRENIR0lGICAgfElEIFN0YXRlIENoYW5nZSBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElEU1RTIChPVEdfU1RBVFVTWzFdKSBub3QgdG9nZ2xlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSURTVFMgKE9UR19TVEFUVVNbMV0pIGZyb20gaGlnaCB0byBsb3cgb3IgZnJvbSBsb3cgdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgZmxhZy4KKyAgICAgKiB8WzZdICAgICB8UERFVklGICAgIHxBY3QgQXMgUGVyaXBoZXJhbCBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MD0gVGhpcyBkZXZpY2UgZG9lcyBub3QgYWN0IGFzIGEgcGVyaXBoZXJhbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhpcyBkZXZpY2UgYWN0cyBhcyBhIHBlcmlwaGVyYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGZsYWcuCisgICAgICogfFs3XSAgICAgfEhPU1RJRiAgICB8QWN0IEFzIEhvc3QgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA9IFRoaXMgZGV2aWNlIGRvZXMgbm90IGFjdCBhcyBhIGhvc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgZGV2aWNlIGFjdHMgYXMgYSBob3N0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBmbGFnLgorICAgICAqIHxbOF0gICAgIHxCVkxEQ0hHSUYgfEItZGV2aWNlIFNlc3Npb24gVmFsaWQgU3RhdGUgQ2hhbmdlIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlZMRCAoT1RHX1NUQVRVU1szXSkgaXMgbm90IHRvZ2dsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJWTEQgKE9UR19TVEFUVVNbM10pIGZyb20gaGlnaCB0byBsb3cgb3IgbG93IHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIHN0YXR1cy4KKyAgICAgKiB8WzldICAgICB8QVZMRENIR0lGIHxBLWRldmljZSBTZXNzaW9uIFZhbGlkIFN0YXRlIENoYW5nZSBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFWTEQgKE9UR19TVEFUVVNbNF0pIG5vdCB0b2dnbGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBVkxEIChPVEdfU1RBVFVTWzRdKSBmcm9tIGhpZ2ggdG8gbG93IG9yIGxvdyB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBzdGF0dXMuCisgICAgICogfFsxMF0gICAgfFZCQ0hHSUYgICB8VkJVU1ZMRCBTdGF0ZSBDaGFuZ2UgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBWQlVTVkxEIChPVEdfU1RBVFVTWzVdKSBub3QgdG9nZ2xlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVkJVU1ZMRCAoT1RHX1NUQVRVU1s1XSkgZnJvbSBoaWdoIHRvIGxvdyBvciBmcm9tIGxvdyB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBzdGF0dXMuCisgICAgICogfFsxMV0gICAgfFNFQ0hHSUYgICB8U0VTU0VORCBTdGF0ZSBDaGFuZ2UgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTRVNTRU5EIChPVEdfU1RBVFVTWzJdKSBub3QgdG9nZ2xlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0VTU0VORCAoT1RHX1NUQVRVU1syXSkgZnJvbSBoaWdoIHRvIGxvdyBvciBmcm9tIGxvdyB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBmbGFnLgorICAgICAqIHxbMTNdICAgIHxTUlBERVRJRiAgfFNSUCBEZXRlY3RlZCBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNSUCBub3QgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNSUCBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgc3RhdHVzLgorICAgICAqIEB2YXIgT1RHX1Q6OlNUQVRVUworICAgICAqIE9mZnNldDogMHgxMCAgT1RHIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfE9WRVJDVVIgICB8T3ZlciBDdXJyZW50IENvbmRpdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2b2x0YWdlIG9uIFZCVVMgY2Fubm90IHJlYWNoIGEgbWluaW11bSBWQlVTIHZhbGlkIHRocmVzaG9sZCwgNC40ViBtaW5pbXVtLCB3aXRoaW4gYSBtYXhpbXVtIHRpbWUgb2YgMTAwbXMgYWZ0ZXIgT1RHIEEtZGV2aWNlIGRyaXZlcyBWQlVTIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9URyBBLWRldmljZSBkcml2ZXMgVkJVUyBzdWNjZXNzZnVsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBBLWRldmljZSBjYW5ub3QgZHJpdmVzIFZCVVMgaGlnaCBpbiB0aGlzIGludGVydmFsLgorICAgICAqIHxbMV0gICAgIHxJRFNUUyAgICAgfFVTQl9JRCBQaW4gU3RhdGUgb2YgTWluaS0vTWljcm8tIFBsdWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWluaS1BL01pY3JvLUEgcGx1ZyBpcyBhdHRhY2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTWluaS1CL01pY3JvLUIgcGx1ZyBpcyBhdHRhY2hlZC4KKyAgICAgKiB8WzJdICAgICB8U0VTU0VORCAgIHxTZXNzaW9uIEVuZCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFZCVVMgdm9sdGFnZSBpcyBsb3dlciB0aGFuIDAuNFYsIHRoaXMgYml0IHdpbGwgYmUgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXNzaW9uIGVuZCBtZWFucyBubyBtZWFuaW5nZnVsIHBvd2VyIG9uIFZCVVMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNlc3Npb24gaXMgbm90IGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2Vzc2lvbiBpcyBlbmQuCisgICAgICogfFszXSAgICAgfEJWTEQgICAgICB8Qi1kZXZpY2UgU2Vzc2lvbiBWYWxpZCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQi1kZXZpY2Ugc2Vzc2lvbiBpcyBub3QgdmFsaWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEItZGV2aWNlIHNlc3Npb24gaXMgdmFsaWQuCisgICAgICogfFs0XSAgICAgfEFWTEQgICAgICB8QS1kZXZpY2UgU2Vzc2lvbiBWYWxpZCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQS1kZXZpY2Ugc2Vzc2lvbiBpcyBub3QgdmFsaWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEtZGV2aWNlIHNlc3Npb24gaXMgdmFsaWQuCisgICAgICogfFs1XSAgICAgfFZCVVNWTEQgICB8VkJVUyBWYWxpZCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFZCVVMgaXMgbGFyZ2VyIHRoYW4gNC43ViwgdGhpcyBiaXQgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVkJVUyBpcyBub3QgdmFsaWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFZCVVMgaXMgdmFsaWQuCisgICAgICogfFs2XSAgICAgfEFTUEVSSSAgICB8QXMgUGVyaXBoZXJhbCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIE9URyBhcyBwZXJpcGhlcmFsLCB0aGlzIGJpdCBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDogT1RHIG5vdCBhcyBwZXJpcGhlcmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTogT1RHIGFzIHBlcmlwaGVyYWwKKyAgICAgKiB8WzddICAgICB8QVNIT1NUICAgIHxBcyBIb3N0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gT1RHIGFzIEhvc3QsIHRoaXMgYml0IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwOiBPVEcgbm90IGFzIEhvc3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxOiBPVEcgYXMgSG9zdAorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIE9URyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBIWUNUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBPVEcgUEhZIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gT1RHIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5UU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIE9URyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBPVEcgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gT1RHX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIE9UR19DT05TVCBPVEcgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgT1RHIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgT1RHX0NUTF9WQlVTRFJPUF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpDVEw6IFZCVVNEUk9QIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIE9UR19DVExfVkJVU0RST1BfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBPVEdfQ1RMX1ZCVVNEUk9QX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6Q1RMOiBWQlVTRFJPUCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19DVExfQlVTUkVRX1BvcyAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6Q1RMOiBCVVNSRVEgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBPVEdfQ1RMX0JVU1JFUV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0NUTF9CVVNSRVFfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OkNUTDogQlVTUkVRIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfQ1RMX0hOUFJFUUVOX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OkNUTDogSE5QUkVRRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0NUTF9ITlBSRVFFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19DVExfSE5QUkVRRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpDVEw6IEhOUFJFUUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0NUTF9PVEdFTl9Qb3MgICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpDVEw6IE9UR0VOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIE9UR19DVExfT1RHRU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBPVEdfQ1RMX09UR0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6Q1RMOiBPVEdFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19DVExfV0tFTl9Qb3MgICAgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6Q1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBPVEdfQ1RMX1dLRU5fTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0NUTF9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OkNUTDogV0tFTiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfUEhZQ1RMX09UR1BIWUVOX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlBIWUNUTDogT1RHUEhZRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgT1RHX1BIWUNUTF9PVEdQSFlFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IE9UR19QSFlDVExfT1RHUEhZRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpQSFlDVEw6IE9UR1BIWUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX1BIWUNUTF9JRERFVEVOX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpQSFlDVEw6IElEREVURU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIE9UR19QSFlDVExfSURERVRFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBPVEdfUEhZQ1RMX0lEREVURU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6UEhZQ1RMOiBJRERFVEVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19QSFlDVExfVkJFTlBPTF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6UEhZQ1RMOiBWQkVOUE9MIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBPVEdfUEhZQ1RMX1ZCRU5QT0xfTXNrICAgICAgICAgICAoMHgxdWwgPDwgT1RHX1BIWUNUTF9WQkVOUE9MX1BvcykgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlBIWUNUTDogVkJFTlBPTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfUEhZQ1RMX1ZCU1RTUE9MX1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlBIWUNUTDogVkJTVFNQT0wgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgT1RHX1BIWUNUTF9WQlNUU1BPTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IE9UR19QSFlDVExfVkJTVFNQT0xfUG9zKSAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpQSFlDVEw6IFZCU1RTUE9MIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVEVOX1JPTEVDSEdJRU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogUk9MRUNIR0lFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIE9UR19JTlRFTl9ST0xFQ0hHSUVOX01zayAgICAgICAgICgweDF1bCA8PCBPVEdfSU5URU5fUk9MRUNIR0lFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFJPTEVDSEdJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRFTl9WQkVJRU5fUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFZCRUlFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBPVEdfSU5URU5fVkJFSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVEVOX1ZCRUlFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBWQkVJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5URU5fU1JQRklFTl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBTUlBGSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVEVOX1NSUEZJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRFTl9TUlBGSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogU1JQRklFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVEVOX0hOUEZJRU5fUG9zICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogSE5QRklFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIE9UR19JTlRFTl9ITlBGSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5URU5fSE5QRklFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IEhOUEZJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRFTl9HT0lETEVJRU5fUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IEdPSURMRUlFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBPVEdfSU5URU5fR09JRExFSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVEVOX0dPSURMRUlFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBHT0lETEVJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5URU5fSURDSEdJRU5fUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBJRENIR0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVEVOX0lEQ0hHSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRFTl9JRENIR0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogSURDSEdJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVEVOX1BERVZJRU5fUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogUERFVklFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIE9UR19JTlRFTl9QREVWSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5URU5fUERFVklFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFBERVZJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRFTl9IT1NUSUVOX1BvcyAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IEhPU1RJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBPVEdfSU5URU5fSE9TVElFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVEVOX0hPU1RJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBIT1NUSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5URU5fQlZMRENIR0lFTl9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBCVkxEQ0hHSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVEVOX0JWTERDSEdJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRFTl9CVkxEQ0hHSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogQlZMRENIR0lFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVEVOX0FWTERDSEdJRU5fUG9zICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogQVZMRENIR0lFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIE9UR19JTlRFTl9BVkxEQ0hHSUVOX01zayAgICAgICAgICgweDF1bCA8PCBPVEdfSU5URU5fQVZMRENIR0lFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IEFWTERDSEdJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRFTl9WQkNIR0lFTl9Qb3MgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFZCQ0hHSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBPVEdfSU5URU5fVkJDSEdJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVEVOX1ZCQ0hHSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBWQkNIR0lFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5URU5fU0VDSEdJRU5fUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVEVOOiBTRUNIR0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVEVOX1NFQ0hHSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRFTl9TRUNIR0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogU0VDSEdJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVEVOX1NSUERFVElFTl9Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRFTjogU1JQREVUSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIE9UR19JTlRFTl9TUlBERVRJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5URU5fU1JQREVUSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5URU46IFNSUERFVElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRTVFNfUk9MRUNIR0lGX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBST0xFQ0hHSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBPVEdfSU5UU1RTX1JPTEVDSEdJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVFNUU19ST0xFQ0hHSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogUk9MRUNIR0lGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5UU1RTX1ZCRUlGX1BvcyAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogVkJFSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVFNUU19WQkVJRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRTVFNfVkJFSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IFZCRUlGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVFNUU19TUlBGSUZfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IFNSUEZJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIE9UR19JTlRTVFNfU1JQRklGX01zayAgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5UU1RTX1NSUEZJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBTUlBGSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRTVFNfSE5QRklGX1BvcyAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBITlBGSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBPVEdfSU5UU1RTX0hOUEZJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVFNUU19ITlBGSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogSE5QRklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5UU1RTX0dPSURMRUlGX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogR09JRExFSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVFNUU19HT0lETEVJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRTVFNfR09JRExFSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IEdPSURMRUlGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVFNUU19JRENIR0lGX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IElEQ0hHSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIE9UR19JTlRTVFNfSURDSEdJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5UU1RTX0lEQ0hHSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBJRENIR0lGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRTVFNfUERFVklGX1BvcyAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBQREVWSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBPVEdfSU5UU1RTX1BERVZJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVFNUU19QREVWSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogUERFVklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5UU1RTX0hPU1RJRl9Qb3MgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogSE9TVElGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVFNUU19IT1NUSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRTVFNfSE9TVElGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IEhPU1RJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVFNUU19CVkxEQ0hHSUZfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IEJWTERDSEdJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIE9UR19JTlRTVFNfQlZMRENIR0lGX01zayAgICAgICAgICgweDF1bCA8PCBPVEdfSU5UU1RTX0JWTERDSEdJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBCVkxEQ0hHSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRTVFNfQVZMRENIR0lGX1BvcyAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBBVkxEQ0hHSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBPVEdfSU5UU1RTX0FWTERDSEdJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVFNUU19BVkxEQ0hHSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogQVZMRENIR0lGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfSU5UU1RTX1ZCQ0hHSUZfUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogVkJDSEdJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgT1RHX0lOVFNUU19WQkNIR0lGX01zayAgICAgICAgICAgKDB4MXVsIDw8IE9UR19JTlRTVFNfVkJDSEdJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IFZCQ0hHSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX0lOVFNUU19TRUNIR0lGX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpJTlRTVFM6IFNFQ0hHSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIE9UR19JTlRTVFNfU0VDSEdJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBPVEdfSU5UU1RTX1NFQ0hHSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBTRUNIR0lGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19JTlRTVFNfU1JQREVUSUZfUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6SU5UU1RTOiBTUlBERVRJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBPVEdfSU5UU1RTX1NSUERFVElGX01zayAgICAgICAgICAoMHgxdWwgPDwgT1RHX0lOVFNUU19TUlBERVRJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OklOVFNUUzogU1JQREVUSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfU1RBVFVTX09WRVJDVVJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogT1ZFUkNVUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgT1RHX1NUQVRVU19PVkVSQ1VSX01zayAgICAgICAgICAgKDB4MXVsIDw8IE9UR19TVEFUVVNfT1ZFUkNVUl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IE9WRVJDVVIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX1NUQVRVU19JRFNUU19Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IElEU1RTIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIE9UR19TVEFUVVNfSURTVFNfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBPVEdfU1RBVFVTX0lEU1RTX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBJRFNUUyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19TVEFUVVNfU0VTU0VORF9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBTRVNTRU5EIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBPVEdfU1RBVFVTX1NFU1NFTkRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgT1RHX1NUQVRVU19TRVNTRU5EX1BvcykgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogU0VTU0VORCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfU1RBVFVTX0JWTERfUG9zICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogQlZMRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX1NUQVRVU19CVkxEX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19TVEFUVVNfQlZMRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IEJWTEQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX1NUQVRVU19BVkxEX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IEFWTEQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIE9UR19TVEFUVVNfQVZMRF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBPVEdfU1RBVFVTX0FWTERfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBBVkxEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIE9UR19TVEFUVVNfVkJVU1ZMRF9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBWQlVTVkxEIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBPVEdfU1RBVFVTX1ZCVVNWTERfTXNrICAgICAgICAgICAoMHgxdWwgPDwgT1RHX1NUQVRVU19WQlVTVkxEX1BvcykgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogVkJVU1ZMRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBPVEdfU1RBVFVTX0FTUEVSSV9Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RHX1Q6OlNUQVRVUzogQVNQRVJJIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgT1RHX1NUQVRVU19BU1BFUklfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IE9UR19TVEFUVVNfQVNQRVJJX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IEFTUEVSSSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgT1RHX1NUQVRVU19BU0hPU1RfUG9zICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9UR19UOjpTVEFUVVM6IEFTSE9TVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIE9UR19TVEFUVVNfQVNIT1NUX01zayAgICAgICAgICAgICgweDF1bCA8PCBPVEdfU1RBVFVTX0FTSE9TVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBPVEdfVDo6U1RBVFVTOiBBU0hPU1QgTWFzayAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIE9UR19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgT1RHIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKworI2VuZGlmIC8qIF9fT1RHX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9wZG1hX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3BkbWFfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwMGE1YQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9wZG1hX3JlZy5oCkBAIC0wLDAgKzEsNzc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcGRtYV9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgUERNQSByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19QRE1BX1JFR19IX18KKyNkZWZpbmUgX19QRE1BX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGVyaXBoZXJhbCBEaXJlY3QgTWVtb3J5IEFjY2VzcyBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgUERNQSBQZXJpcGhlcmFsIERpcmVjdCBNZW1vcnkgQWNjZXNzIENvbnRyb2xsZXIoUERNQSkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgUERNQSBDb250cm9sbGVyCitAeyAqLworCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKioKKyAgICAgKiBAdmFyIERTQ1RfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwLzB4MTAvMHgyMC8weDMwLzB4NDAvMHg1MC8weDYwLzB4NzAgIERlc2NyaXB0b3IgVGFibGUgQ29udHJvbCBSZWdpc3RlciBvZiBQRE1BIENoYW5uZWwgMH43CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8T1BNT0RFICAgIHxQRE1BIE9wZXJhdGlvbiBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gSWRsZSBzdGF0ZTogQ2hhbm5lbCBpcyBzdG9wcGVkIG9yIHRoaXMgdGFibGUgaXMgY29tcGxldGUsIHdoZW4gUERNQSBmaW5pc2ggY2hhbm5lbCB0YWJsZSB0YXNrLCBPUE1PREUgd2lsbCBiZSBjbGVhcmVkIHRvIGlkbGUgc3RhdGUgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEJhc2ljIG1vZGU6IFRoZSBkZXNjcmlwdG9yIHRhYmxlIG9ubHkgaGFzIG9uZSB0YXNrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGlzIHRhc2sgaXMgZmluaXNoZWQsIHRoZSBURElGKFBETUFfSU5UU1RTWzFdKSB3aWxsIGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gU2NhdHRlci1HYXRoZXIgbW9kZTogV2hlbiBvcGVyYXRpbmcgaW4gdGhpcyBtb2RlLCB1c2VyIG11c3QgZ2l2ZSB0aGUgZmlyc3QgZGVzY3JpcHRvciB0YWJsZSBhZGRyZXNzIGluIFBETUFfRFNDVF9GSVJTVCByZWdpc3RlcjsgUERNQSBjb250cm9sbGVyIHdpbGwgaWdub3JlIHRoaXMgdGFzaywgdGhlbiBsb2FkIHRoZSBuZXh0IHRhc2sgdG8gZXhlY3V0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEJlZm9yZSBmaWxsaW5nIHRyYW5zZmVyIHRhc2sgaW4gdGhlIERlc2NyaXB0b3IgVGFibGUsIHVzZXIgbXVzdCBjaGVjayBpZiB0aGUgZGVzY3JpcHRvciB0YWJsZSBpcyBjb21wbGV0ZS4KKyAgICAgKiB8WzJdICAgICB8VFhUWVBFICAgIHxUcmFuc2ZlciBUeXBlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJ1cnN0IHRyYW5zZmVyIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNpbmdsZSB0cmFuc2ZlciB0eXBlLgorICAgICAqIHxbNjo0XSAgIHxCVVJTSVpFICAgfEJ1cnN0IFNpemUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIHBlcmlwaGVyYWwgdG8gZGV0ZXJtaW5lIHRoZSBidXJzdCBzaXplIG9yIHVzZWQgZm9yIGRldGVybWluZSB0aGUgcmUtYXJiaXRyYXRpb24gc2l6ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSAxMjggVHJhbnNmZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IDY0IFRyYW5zZmVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSAzMiBUcmFuc2ZlcnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gMTYgVHJhbnNmZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IDggVHJhbnNmZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IDQgVHJhbnNmZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IDIgVHJhbnNmZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IDEgVHJhbnNmZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgZmllbGQgaXMgb25seSB1c2VmdWwgaW4gYnVyc3QgdHJhbnNmZXIgdHlwZS4KKyAgICAgKiB8WzddICAgICB8VEJJTlRESVMgIHxUYWJsZSBJbnRlcnJ1cHQgRGlzYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGVuYWJsZSB0YWJsZSBpbnRlcnJ1cHQgb3Igbm90CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIFRCSU5URElTIGJpdCBpcyBlbmFibGVkIHdoZW4gUERNQSBjb250cm9sbGVyIGZpbmlzaGVzIHRyYW5zZmVyIHRhc2ssIGl0IHdpbGwgbm90IGdlbmVyYXRlcyB0cmFuc2ZlciBkb25lIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFibGUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhYmxlIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiB0aGlzIGJpdCBzZXQgdG8gMSwgdGhlIFRFTVBUWUYgd2lsbCBub3QgYmUgc2V0LgorICAgICAqIHxbOTo4XSAgIHxTQUlOQyAgICAgfFNvdXJjZSBBZGRyZXNzIEluY3JlbWVudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBzZXQgdGhlIHNvdXJjZSBhZGRyZXNzIGluY3JlbWVudCBzaXplLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gTm8gaW5jcmVtZW50IChmaXhlZCBhZGRyZXNzKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBJbmNyZW1lbnQgYW5kIHNpemUgaXMgZGVwZW5kZWQgb24gVFhXSURUSCBzZWxlY3Rpb24uCisgICAgICogfFsxMToxMF0gfERBSU5DICAgICB8RGVzdGluYXRpb24gQWRkcmVzcyBJbmNyZW1lbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gc2V0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGluY3JlbWVudCBzaXplLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gTm8gaW5jcmVtZW50IChmaXhlZCBhZGRyZXNzKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBJbmNyZW1lbnQgYW5kIHNpemUgaXMgZGVwZW5kZWQgb24gVFhXSURUSCBzZWxlY3Rpb24uCisgICAgICogfFsxMzoxMl0gfFRYV0lEVEggICB8VHJhbnNmZXIgV2lkdGggU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciB0cmFuc2ZlciB3aWR0aC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE9uZSBieXRlICg4IGJpdCkgaXMgdHJhbnNmZXJyZWQgZm9yIGV2ZXJ5IG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IE9uZSBoYWxmLXdvcmQgKDE2IGJpdCkgaXMgdHJhbnNmZXJyZWQgZm9yIGV2ZXJ5IG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IE9uZSB3b3JkICgzMi1iaXQpIGlzIHRyYW5zZmVycmVkIGZvciBldmVyeSBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgUERNQSB0cmFuc2ZlciBzb3VyY2UgYWRkcmVzcyAoUERNQV9EU0NUX1NBKSBhbmQgUERNQSB0cmFuc2ZlciBkZXN0aW5hdGlvbiBhZGRyZXNzIChQRE1BX0RTQ1RfREEpIHNob3VsZCBiZSBhbGlnbm1lbnQgdW5kZXIgdGhlIFRYV0lEVEggc2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIGV4YW1wbGUsIGlmIHNvdXJjZSBhZGRyZXNzIGlzIDB4MjAwMF8wMjAyLCBidXQgVFhXSURUSCBpcyB3b3JkIHRyYW5zZmVyLCB0aGUgc291cmNlIGFkZHJlc3MgaXMgbm90IHdvcmQgYWxpZ25tZW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHNvdXJjZSBhZGRyZXNzIGlzIGFsaWduZWQgd2hlbiBUWFdJRFRIIGlzIGJ5dGUgb3IgaGFsZi13b3JkIHRyYW5zZmVyLgorICAgICAqIHxbMTRdICAgIHxUWEFDSyAgICAgfFRyYW5zZmVyIEFja25vd2xlZGdlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSB0cmFuc2ZlciBhY2sgd2hlbiB0cmFuc2ZlciBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSB0cmFuc2ZlciBhY2sgd2hlbiBQRE1BIGdldCB0cmFuc2ZlciBkYXRhLgorICAgICAqIHxbMTVdICAgIHxTVFJJREVFTiB8U3RyaWRlIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdHJpZGUgdHJhbnNmZXIgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RyaWRlIHRyYW5zZmVyIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8WzMxOjE2XSB8VFhDTlQgICAgIHxUcmFuc2ZlciBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUWENOVCByZXByZXNlbnRzIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgUERNQSB0cmFuc2ZlciwgdGhlIHJlYWwgdHJhbnNmZXIgY291bnQgaXMgKFRYQ05UICsgMSk7IFRoZSBtYXhpbXVtIHRyYW5zZmVyIGNvdW50IGlzIDE2Mzg0ICwgZXZlcnkgdHJhbnNmZXIgbWF5IGJlIGJ5dGUsIGhhbGYtd29yZCBvciB3b3JkIHRoYXQgaXMgZGVwZW5kZW50IG9uIFRYV0lEVEggZmllbGQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBQRE1BIGZpbmlzaCBlYWNoIHRyYW5zZmVyIGRhdGEsIHRoaXMgZmllbGQgd2lsbCBiZSBkZWNyZWFzZSBpbW1lZGlhdGVseS4KKyAgICAgKiBAdmFyIERTQ1RfVDo6U0EKKyAgICAgKiBPZmZzZXQ6IDB4MDQvMHgxNC8weDI0LzB4MzQvMHg0NC8weDU0LzB4NjQvMHg3NCAgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgb2YgUERNQSBDaGFubmVsIDB+NworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFNBICAgICAgICB8UERNQSBUcmFuc2ZlciBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIGEgMzItYml0IHNvdXJjZSBhZGRyZXNzIG9mIFBETUEgY29udHJvbGxlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgUERNQSB0cmFuc2ZlciBzb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgYWxpZ25lZCB3aXRoIHRoZSBUWFdJRFRIKFBETUFfRFNDVG5fQ1RMWzEzOjEyXSwgbj0wLDEuLjcpIHNlbGVjdGlvbi4KKyAgICAgKiBAdmFyIERTQ1RfVDo6REEKKyAgICAgKiBPZmZzZXQ6IDB4MDgvMHgxOC8weDI4LzB4MzgvMHg0OC8weDU4LzB4NjgvMHg3OCAgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBvZiBQRE1BIENoYW5uZWwgMH43CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8REEgICAgICAgIHxQRE1BIFRyYW5zZmVyIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyBhIDMyLWJpdCBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIFBETUEgY29udHJvbGxlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgUERNQSB0cmFuc2ZlciBkZXN0aW5hdGlvbiBhZGRyZXNzIHNob3VsZCBiZSBhbGlnbmVkIHdpdGggdGhlIFRYV0lEVEgoUERNQV9EU0NUbl9DVExbMTM6MTJdLCBuPTAsMS4uNykgc2VsZWN0aW9uLgorICAgICAqIEB2YXIgRFNDVF9UOjpORVhUCisgICAgICogT2Zmc2V0OiAweDBDLzB4MUMvMHgyQy8weDNDLzB4NEMvMHg1Qy8weDZDLzB4N0MgIEZpcnN0IFNjYXR0ZXItR2F0aGVyIERlc2NyaXB0b3IgVGFibGUgT2Zmc2V0IG9mIFBETUEgQ2hhbm5lbCAwfjcKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxGSVJTVCAgICAgfFBETUEgRmlyc3QgRGVzY3JpcHRvciBUYWJsZSBPZmZzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBkZXNjcmlwdG9yIHRhYmxlIGFkZHJlc3MgaW4gc3lzdGVtIG1lbW9yeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHN5c3RlbSBtZW1vcnkgYmFzZWQgYWRkcmVzcyBpcyAweDIwMDBfMDAwMCAoUERNQV9TQ0FUQkEpLCBhbmQgdGhlIGZpcnN0IGRlc2NyaXB0b3IgdGFibGUgaXMgc3RhcnQgZnJvbSAweDIwMDBfMDEwMCwgdGhlbiB0aGlzIGZpZWxkIG11c3QgZmlsbCBpbiAweDAxMDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBvcGVyYXRpbmcgaW4gc2NhdHRlci1nYXRoZXIgbW9kZSwgdGhlIGxhc3QgdHdvIGJpdHMgRklSU1RbMTowXSB3aWxsIGJlY29tZSByZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhlIGZpcnN0IGRlc2NyaXB0b3IgdGFibGUgYWRkcmVzcyBtdXN0IGJlIHdvcmQgYm91bmRhcnkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IEJlZm9yZSBmaWxsZWQgdHJhbnNmZXIgdGFzayBpbiB0aGUgZGVzY3JpcHRvciB0YWJsZSwgdXNlciBtdXN0IGNoZWNrIGlmIHRoZSBkZXNjcmlwdG9yIHRhYmxlIGlzIGNvbXBsZXRlLgorICAgICAqIHxbMzE6MTZdIHxORVhUICAgICAgfFBETUEgTmV4dCBEZXNjcmlwdG9yIFRhYmxlIE9mZnNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBvZmZzZXQgb2YgbmV4dCBkZXNjcmlwdG9yIHRhYmxlIGFkZHJlc3MgaW4gc3lzdGVtIG1lbW9yeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiB3cml0ZSBvcGVyYXRpb24gaXMgdXNlbGVzcyBpbiB0aGlzIGZpZWxkLgorICAgICAqLworCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgIC8qITwgWzB4MDAvMHgxMC8weDIwLzB4MzAvMHg0MC8weDUwLzB4NjAvMHg3MF0gRGVzY3JpcHRvciBUYWJsZSBDb250cm9sIFJlZ2lzdGVyIG9mIFBETUEgQ2hhbm5lbCAwfjcgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTQTsgICAgICAgICAgICAgIC8qITwgWzB4MDQvMHgxNC8weDI0LzB4MzQvMHg0NC8weDU0LzB4NjQvMHg3NF0gU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgb2YgUERNQSBDaGFubmVsIDB+NyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBEQTsgICAgICAgICAgICAgIC8qITwgWzB4MDgvMHgxOC8weDI4LzB4MzgvMHg0OC8weDU4LzB4NjgvMHg3OF0gRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciBvZiBQRE1BIENoYW5uZWwgMH43ICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBORVhUOyAgICAgICAgICAgIC8qITwgWzB4MEMvMHgxQy8weDJDLzB4M0MvMHg0Qy8weDVDLzB4NkMvMHg3Q11OZXh0IFNjYXR0ZXItR2F0aGVyIERlc2NyaXB0b3IgVGFibGUgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gRFNDVF9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKgorICAgICAqIEB2YXIgU1RSSURFX1Q6OlNUQ1IKKyAgICAgKiBPZmZzZXQ6IDB4NTAwLzB4NTA4LzB4NTEwLzB4NTE4LzB4NTIwLzB4NTI4ICBTdHJpZGUgVHJhbnNmZXIgQ291bnQgUmVnaXN0ZXIgb2YgUERNQSBDaGFubmVsIDB+NQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFNUQyAgICAgICB8UERNQSBTdHJpZGUgVHJhbnNmZXIgQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgMTYtYml0IHJlZ2lzdGVyIGRlZmluZXMgdGhlIHN0cmlkZSB0cmFuc2ZlciBjb3VudCBvZiBlYWNoIHJvdy4KKyAgICAgKiBAdmFyIFNUUklERV9UOjpBU09DUgorICAgICAqIE9mZnNldDogMHg1MDQvMHg1MEMvMHg1MTQvMHg1MUMvMHg1MjQvMHg1MkMgIEFkZHJlc3MgU3RyaWRlIE9mZnNldCBSZWdpc3RlciBvZiBQRE1BIENoYW5uZWwgMH41CisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8U0FTT0wgICAgIHxWRE1BIFNvdXJjZSBBZGRyZXNzIFN0cmlkZSBPZmZzZXQgTGVuZ3RoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIDE2LWJpdCByZWdpc3RlciBkZWZpbmVzIHRoZSBzb3VyY2UgYWRkcmVzcyBzdHJpZGUgdHJhbnNmZXIgb2Zmc2V0IGNvdW50IG9mIGVhY2ggcm93LgorICAgICAqIHxbMzE6MTZdIHxEQVNPTCAgICAgfFZETUEgRGVzdGluYXRpb24gQWRkcmVzcyBTdHJpZGUgT2Zmc2V0IExlbmd0aAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSAxNi1iaXQgcmVnaXN0ZXIgZGVmaW5lcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBzdHJpZGUgdHJhbnNmZXIgb2Zmc2V0IGNvdW50IG9mIGVhY2ggcm93LgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1RDUjsgICAgICAgICAgIC8qITwgWzB4MDUwMC8weDUwOC8weDUxMC8weDUxOC8weDUyMC8weDUyOF0gU3RyaWRlIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyIG9mIFBETUEgQ2hhbm5lbCAwfjcgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBU09DUjsgICAgICAgICAgLyohPCBbMHgwNTA0LzB4NTBDLzB4NTE0LzB4NTFDLzB4NTI0LzB4NTJDXSBBZGRyZXNzIFN0cmlkZSBPZmZzZXQgUmVnaXN0ZXIgb2YgUERNQSBDaGFubmVsIDAgICAgICAgICAgICAgICAgICAgKi8KK30gU1RSSURFX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgUERNQV9UOjpDVVJTQ0FUCisgICAgICogT2Zmc2V0OiAweDgwLzB4ODQvMHg4OC8weDhDLzB4OTAvMHg5NC8weDk4LzB4OUMgIEN1cnJlbnQgU2NhdHRlci1HYXRoZXIgRGVzY3JpcHRvciBUYWJsZSBBZGRyZXNzIG9mIFBETUEgQ2hhbm5lbCAwfjcKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDVVJBRERSICAgfFBETUEgQ3VycmVudCBEZXNjcmlwdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgYSAzMi1iaXQgY3VycmVudCBleHRlcm5hbCBkZXNjcmlwdGlvbiBhZGRyZXNzIG9mIFBETUEgY29udHJvbGxlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGZpZWxkIGlzIHJlYWQgb25seSBhbmQgb25seSB1c2VkIGZvciBTY2F0dGVyLUdhdGhlciBtb2RlIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IGV4dGVybmFsIGRlc2NyaXB0aW9uIGFkZHJlc3MuCisgICAgICogQHZhciBQRE1BX1Q6OkNIQ1RMCisgICAgICogT2Zmc2V0OiAweDQwMCAgUERNQSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxDSEVObiAgICAgfFBETUEgQ2hhbm5lbCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IHRvIDEgdG8gZW5hYmxlIFBETUFuIG9wZXJhdGlvbi4gQ2hhbm5lbCBjYW5ub3QgYmUgYWN0aXZlIGlmIGl0IGlzIG5vdCBzZXQgYXMgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBjaGFubmVsIFtuXSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQSBjaGFubmVsIFtuXSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFNldCBjb3JyZXNwb25kaW5nIGJpdCBvZiBQRE1BX1BBVVNFIG9yIFBETUFfQ0hSU1QgcmVnaXN0ZXIgd2lsbCBhbHNvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIEB2YXIgUERNQV9UOjpQQVVTRQorICAgICAqIE9mZnNldDogMHg0MDQgIFBETUEgVHJhbnNmZXIgUGF1c2UgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFBBVVNFbiAgICB8UERNQSBUcmFuc2ZlciBQYXVzZSBDb250cm9sIFJlZ2lzdGVyIChXcml0ZSBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHNldCBQQVVTRW4gYml0IGZpZWxkIHRvIHBhdXNlIHRoZSBQRE1BIHRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB1c2VyIHNldHMgUEFVU0VuIGJpdCwgdGhlIFBETUEgY29udHJvbGxlciB3aWxsIHBhdXNlIHRoZSBvbi1nb2luZyB0cmFuc2ZlciwgdGhlbiBjbGVhciB0aGUgY2hhbm5lbCBlbmFibGUgYml0IENIRU4oUERNQV9DSENUTCBbbl0sIG49MCwxLi43KSBhbmQgY2xlYXIgcmVxdWVzdCBhY3RpdmUgZmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHJlLWVuYWJsZSB0aGUgcGF1c2VkIGNoYW5uZWwgYWdhaW4sIHRoZSByZW1haW5pbmcgdHJhbnNmZXJzIHdpbGwgYmUgcHJvY2Vzc2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBhdXNlIFBETUEgY2hhbm5lbCBuIHRyYW5zZmVyLgorICAgICAqIEB2YXIgUERNQV9UOjpTV1JFUQorICAgICAqIE9mZnNldDogMHg0MDggIFBETUEgU29mdHdhcmUgUmVxdWVzdCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFNXUkVRbiAgICB8UERNQSBTb2Z0d2FyZSBSZXF1ZXN0IFJlZ2lzdGVyIChXcml0ZSBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCB0byAxIHRvIGdlbmVyYXRlIGEgc29mdHdhcmUgcmVxdWVzdCB0byBQRE1BIFtuXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHZW5lcmF0ZSBhIHNvZnR3YXJlIHJlcXVlc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFVzZXIgY2FuIHJlYWQgUERNQV9UUkdTVFMgcmVnaXN0ZXIgdG8ga25vdyB3aGljaCBjaGFubmVsIGlzIG9uIGFjdGl2ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFjdGl2ZSBmbGFnIG1heSBiZSB0cmlnZ2VyZWQgYnkgc29mdHdhcmUgcmVxdWVzdCBvciBwZXJpcGhlcmFsIHJlcXVlc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIHVzZXIgZG9lcyBub3QgZW5hYmxlIGNvcnJlc3BvbmRpbmcgUERNQSBjaGFubmVsLCB0aGUgc29mdHdhcmUgcmVxdWVzdCB3aWxsIGJlIGlnbm9yZWQuCisgICAgICogQHZhciBQRE1BX1Q6OlRSR1NUUworICAgICAqIE9mZnNldDogMHg0MEMgIFBETUEgQ2hhbm5lbCBSZXF1ZXN0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFJFUVNUU24gICB8UERNQSBDaGFubmVsIFJlcXVlc3QgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB3aGV0aGVyIGNoYW5uZWxbbl0gaGF2ZSBhIHJlcXVlc3Qgb3Igbm90LCBubyBtYXR0ZXIgcmVxdWVzdCBmcm9tIHNvZnR3YXJlIG9yIHBlcmlwaGVyYWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFBETUEgY29udHJvbGxlciBmaW5pc2hlcyBjaGFubmVsIHRyYW5zZmVyLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBDaGFubmVsIG4gaGFzIG5vIHJlcXVlc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEgQ2hhbm5lbCBuIGhhcyBhIHJlcXVlc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgdXNlciBwYXVzZXMgb3IgcmVzZXRzIGVhY2ggUERNQSB0cmFuc2ZlciBieSBzZXR0aW5nIFBETUFfUEFVU0Ugb3IgUERNQV9DSFJTVCByZWdpc3RlciByZXNwZWN0aXZlbHksIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGZpbmlzaGluZyBjdXJyZW50IHRyYW5zZmVyLgorICAgICAqIEB2YXIgUERNQV9UOjpQUklTRVQKKyAgICAgKiBPZmZzZXQ6IDB4NDEwICBQRE1BIEZpeGVkIFByaW9yaXR5IFNldHRpbmcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxGUFJJU0VUbiAgfFBETUEgRml4ZWQgUHJpb3JpdHkgU2V0dGluZyBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCB0byAxIHRvIGVuYWJsZSBmaXhlZCBwcmlvcml0eSBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IFBETUEgY2hhbm5lbCBbbl0gdG8gZml4ZWQgcHJpb3JpdHkgY2hhbm5lbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29ycmVzcG9uZGluZyBQRE1BIGNoYW5uZWwgaXMgcm91bmQtcm9iaW4gcHJpb3JpdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvcnJlc3BvbmRpbmcgUERNQSBjaGFubmVsIGlzIGZpeGVkIHByaW9yaXR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgZmllbGQgb25seSBzZXQgdG8gZml4ZWQgcHJpb3JpdHksIGNsZWFyIGZpeGVkIHByaW9yaXR5IHVzZSBQRE1BX1BSSUNMUiByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFBETUFfVDo6UFJJQ0xSCisgICAgICogT2Zmc2V0OiAweDQxNCAgUERNQSBGaXhlZCBQcmlvcml0eSBDbGVhciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfEZQUklDTFJuICB8UERNQSBGaXhlZCBQcmlvcml0eSBDbGVhciBSZWdpc3RlciAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gMSB0byBjbGVhciBmaXhlZCBwcmlvcml0eSBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciBQRE1BIGNoYW5uZWwgW25dIGZpeGVkIHByaW9yaXR5IHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVXNlciBjYW4gcmVhZCBQRE1BX1BSSVNFVCByZWdpc3RlciB0byBrbm93IHRoZSBjaGFubmVsIHByaW9yaXR5LgorICAgICAqIEB2YXIgUERNQV9UOjpJTlRFTgorICAgICAqIE9mZnNldDogMHg0MTggIFBETUEgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfElOVEVObiAgICB8UERNQSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciBlbmFibGluZyBQRE1BIGNoYW5uZWxbbl0gaW50ZXJydXB0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BIGNoYW5uZWwgbiBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEgY2hhbm5lbCBuIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgUERNQV9UOjpJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NDFDICBQRE1BIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBQlRJRiAgICAgfFBETUEgUmVhZC9Xcml0ZSBUYXJnZXQgQWJvcnQgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBQRE1BIGhhcyB0YXJnZXQgYWJvcnQgZXJyb3I7IFNvZnR3YXJlIGNhbiByZWFkIFBETUFfQUJUU1RTIHJlZ2lzdGVyIHRvIGZpbmQgd2hpY2ggY2hhbm5lbCBoYXMgdGFyZ2V0IGFib3J0IGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBBSEIgYnVzIEVSUk9SIHJlc3BvbnNlIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBSEIgYnVzIEVSUk9SIHJlc3BvbnNlIHJlY2VpdmVkLgorICAgICAqIHxbMV0gICAgIHxURElGICAgICAgfFRyYW5zZmVyIERvbmUgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBQRE1BIGNvbnRyb2xsZXIgaGFzIGZpbmlzaGVkIHRyYW5zbWlzc2lvbjsgVXNlciBjYW4gcmVhZCBQRE1BX1REU1RTIHJlZ2lzdGVyIHRvIGluZGljYXRlIHdoaWNoIGNoYW5uZWwgZmluaXNoZWQgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vdCBmaW5pc2hlZCB5ZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEgY2hhbm5lbCBoYXMgZmluaXNoZWQgdHJhbnNtaXNzaW9uLgorICAgICAqIHxbMl0gICAgIHxBTElHTkYgICAgfFRyYW5zZmVyIEFsaWdubWVudCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BIGNoYW5uZWwgc291cmNlIGFkZHJlc3MgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MgYm90aCBmb2xsb3cgdHJhbnNmZXIgd2lkdGggc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUERNQSBjaGFubmVsIHNvdXJjZSBhZGRyZXNzIG9yIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgbm90IGZvbGxvdyB0cmFuc2ZlciB3aWR0aCBzZXR0aW5nLgorICAgICAqIHxbOF0gICAgIHxSRVFUT0YwICAgfFJlcXVlc3QgVGltZS1vdXQgRmxhZyBmb3IgQ2hhbm5lbCAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IFBETUEgY29udHJvbGxlciBoYXMgd2FpdGVkIHBlcmlwaGVyYWwgcmVxdWVzdCBmb3IgYSBwZXJpb2QgZGVmaW5lZCBieSBQRE1BX1RPQzAsIHVzZXIgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhlc2UgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVxdWVzdCB0aW1lLW91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGVyaXBoZXJhbCByZXF1ZXN0IHRpbWUtb3V0LgorICAgICAqIHxbOV0gICAgIHxSRVFUT0YxICAgfFJlcXVlc3QgVGltZS1vdXQgRmxhZyBmb3IgQ2hhbm5lbCAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IFBETUEgY29udHJvbGxlciBoYXMgd2FpdGVkIHBlcmlwaGVyYWwgcmVxdWVzdCBmb3IgYSBwZXJpb2QgZGVmaW5lZCBieSBQRE1BX1RPQzEsIHVzZXIgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhlc2UgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVxdWVzdCB0aW1lLW91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGVyaXBoZXJhbCByZXF1ZXN0IHRpbWUtb3V0LgorICAgICAqIEB2YXIgUERNQV9UOjpBQlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NDIwICBQRE1BIENoYW5uZWwgUmVhZC9Xcml0ZSBUYXJnZXQgQWJvcnQgRmxhZyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfEFCVElGbiAgICB8UERNQSBSZWFkL1dyaXRlIFRhcmdldCBBYm9ydCBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgd2hpY2ggUERNQSBjb250cm9sbGVyIGhhcyB0YXJnZXQgYWJvcnQgZXJyb3I7IFVzZXIgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhlc2UgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQUhCIGJ1cyBFUlJPUiByZXNwb25zZSByZWNlaXZlZCB3aGVuIGNoYW5uZWwgbiB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUhCIGJ1cyBFUlJPUiByZXNwb25zZSByZWNlaXZlZCB3aGVuIGNoYW5uZWwgbiB0cmFuc2Zlci4KKyAgICAgKiBAdmFyIFBETUFfVDo6VERTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NDI0ICBQRE1BIENoYW5uZWwgVHJhbnNmZXIgRG9uZSBGbGFnIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8VERJRm4gICAgIHxUcmFuc2ZlciBEb25lIEZsYWcgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgd2hldGhlciBQRE1BIGNvbnRyb2xsZXIgY2hhbm5lbCB0cmFuc2ZlciBoYXMgYmVlbiBmaW5pc2hlZCBvciBub3QsIHVzZXIgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhlc2UgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBjaGFubmVsIHRyYW5zZmVyIGhhcyBub3QgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEgY2hhbm5lbCBoYXMgZmluaXNoZWQgdHJhbnNtaXNzaW9uLgorICAgICAqIEB2YXIgUERNQV9UOjpBTElHTgorICAgICAqIE9mZnNldDogMHg0MjggIFBETUEgVHJhbnNmZXIgQWxpZ25tZW50IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfEFMSUdObiAgICB8VHJhbnNmZXIgQWxpZ25tZW50IEZsYWcgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQSBjaGFubmVsIHNvdXJjZSBhZGRyZXNzIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzIGJvdGggZm9sbG93IHRyYW5zZmVyIHdpZHRoIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEgY2hhbm5lbCBzb3VyY2UgYWRkcmVzcyBvciBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIG5vdCBmb2xsb3cgdHJhbnNmZXIgd2lkdGggc2V0dGluZy4KKyAgICAgKiBAdmFyIFBETUFfVDo6VEFDVFNUUworICAgICAqIE9mZnNldDogMHg0MkMgIFBETUEgVHJhbnNmZXIgQWN0aXZlIEZsYWcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxUWEFDVEZuICAgfFRyYW5zZmVyIG9uIEFjdGl2ZSBGbGFnIFJlZ2lzdGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHdoaWNoIFBETUEgY2hhbm5lbCBpcyBpbiBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUEgY2hhbm5lbCBpcyBub3QgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEgY2hhbm5lbCBpcyBhY3RpdmUuCisgICAgICogQHZhciBQRE1BX1Q6OlRPVVRQU0MKKyAgICAgKiBPZmZzZXQ6IDB4NDMwICBQRE1BIFRpbWUtb3V0IFByZXNjYWxlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyOjBdICAgfFRPVVRQU0MwICB8UERNQSBDaGFubmVsIDAgVGltZS1vdXQgQ2xvY2sgU291cmNlIFByZXNjYWxlciBCaXRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gUERNQSBjaGFubmVsIDAgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl44LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFBETUEgY2hhbm5lbCAwIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeOS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBQRE1BIGNoYW5uZWwgMCB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IFBETUEgY2hhbm5lbCAwIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeMTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gUERNQSBjaGFubmVsIDAgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl4xMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBQRE1BIGNoYW5uZWwgMCB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjEzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IFBETUEgY2hhbm5lbCAwIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeMTQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gUERNQSBjaGFubmVsIDAgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl4xNS4KKyAgICAgKiB8WzY6NF0gICB8VE9VVFBTQzEgIHxQRE1BIENoYW5uZWwgMSBUaW1lLW91dCBDbG9jayBTb3VyY2UgUHJlc2NhbGVyIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBQRE1BIGNoYW5uZWwgMSB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gUERNQSBjaGFubmVsIDEgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl45LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFBETUEgY2hhbm5lbCAxIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeMTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gUERNQSBjaGFubmVsIDEgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl4xMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBQRE1BIGNoYW5uZWwgMSB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjEyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IFBETUEgY2hhbm5lbCAxIHRpbWUtb3V0IGNsb2NrIHNvdXJjZSBpcyBIQ0xLLzJeMTMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gUERNQSBjaGFubmVsIDEgdGltZS1vdXQgY2xvY2sgc291cmNlIGlzIEhDTEsvMl4xNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSBQRE1BIGNoYW5uZWwgMSB0aW1lLW91dCBjbG9jayBzb3VyY2UgaXMgSENMSy8yXjE1LgorICAgICAqIEB2YXIgUERNQV9UOjpUT1VURU4KKyAgICAgKiBPZmZzZXQ6IDB4NDM0ICBQRE1BIFRpbWUtb3V0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFRPVVRFTjAgICB8UERNQSBDaGFubmVsIDAgVGltZS1vdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BIENoYW5uZWwgMCB0aW1lLW91dCBmdW5jdGlvbiBEaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIENoYW5uZWwgMCB0aW1lLW91dCBmdW5jdGlvbiBFbmFibGUuCisgICAgICogfFsxXSAgICAgfFRPVVRFTjEgICB8UERNQSBDaGFubmVsIDEgVGltZS1vdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BIENoYW5uZWwgMSB0aW1lLW91dCBmdW5jdGlvbiBEaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIENoYW5uZWwgMSB0aW1lLW91dCBmdW5jdGlvbiBFbmFibGUuCisgICAgICogQHZhciBQRE1BX1Q6OlRPVVRJRU4KKyAgICAgKiBPZmZzZXQ6IDB4NDM4ICBQRE1BIFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxUT1VUSUVOMCAgfFBETUEgQ2hhbm5lbCAwIFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUEgQ2hhbm5lbCAwIHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIENoYW5uZWwgMCB0aW1lLW91dCBpbnRlcnJ1cHQgRW5hYmxlLgorICAgICAqIHxbMV0gICAgIHxUT1VUSUVOMSAgfFBETUEgQ2hhbm5lbCAxIFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBETUEgQ2hhbm5lbCAxIHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIENoYW5uZWwgMSB0aW1lLW91dCBpbnRlcnJ1cHQgRW5hYmxlLgorICAgICAqIEB2YXIgUERNQV9UOjpTQ0FUQkEKKyAgICAgKiBPZmZzZXQ6IDB4NDNDICBQRE1BIFNjYXR0ZXItR2F0aGVyIERlc2NyaXB0b3IgVGFibGUgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjE2XSB8U0NBVEJBICAgIHxQRE1BIFNjYXR0ZXItZ2F0aGVyIERlc2NyaXB0b3IgVGFibGUgQWRkcmVzcyBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNjYXR0ZXItR2F0aGVyIG1vZGUsIHRoaXMgaXMgdGhlIGJhc2UgYWRkcmVzcyBmb3IgY2FsY3VsYXRpbmcgdGhlIG5leHQgbGluayAtIGxpc3QgYWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBuZXh0IGxpbmsgYWRkcmVzcyBlcXVhdGlvbiBpcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5leHQgTGluayBBZGRyZXNzID0gUERNQV9TQ0FUQkEgKyBQRE1BX0RTQ1RfTkVYVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBPbmx5IHVzZWZ1bCBpbiBTY2F0dGVyLUdhdGhlciBtb2RlLgorICAgICAqIEB2YXIgUERNQV9UOjpUT0MwXzEKKyAgICAgKiBPZmZzZXQ6IDB4NDQwICBQRE1BIENoYW5uZWwgMCBhbmQgQ2hhbm5lbCAxIFRpbWUtb3V0IENvdW50ZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxUT0MwICAgICAgfFRpbWUtb3V0IENvdW50ZXIgZm9yIENoYW5uZWwgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgY29udHJvbHMgdGhlIHBlcmlvZCBvZiB0aW1lLW91dCBmdW5jdGlvbiBmb3IgY2hhbm5lbCAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNhbGN1bGF0aW9uIHVuaXQgaXMgYmFzZWQgb24gVE9VVFBTQzAgKFBETUFfVE9VVFBTQ1syOjBdKSBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaW1lLW91dCBwZXJpb2QgPSAoUGVyaW9kIG9mIHRpbWUtb3V0IGNsb2NrKSAqICgxNi1iaXQgVE9DbiksbiA9IDAsMS4KKyAgICAgKiB8WzMxOjE2XSB8VE9DMSAgICAgIHxUaW1lLW91dCBDb3VudGVyIGZvciBDaGFubmVsIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGNvbnRyb2xzIHRoZSBwZXJpb2Qgb2YgdGltZS1vdXQgZnVuY3Rpb24gZm9yIGNoYW5uZWwgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjYWxjdWxhdGlvbiB1bml0IGlzIGJhc2VkIG9uIFRPVVRQU0MxIChQRE1BX1RPVVRQU0NbNTozXSkgY2xvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZXhhbXBsZSBvZiB0aW1lLW91dCBwZXJpb2QgY2FuIHJlZmVyIFRPQzAgYml0IGRlc2NyaXB0aW9uLgorICAgICAqIEB2YXIgUERNQV9UOjpDSFJTVAorICAgICAqIE9mZnNldDogMHg0NjAgIFBETUEgQ2hhbm5lbCBSZXNldCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8Q0huUlNUICAgIHxDaGFubmVsIE4gUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gY29ycmVzcG9uZGluZyBjaGFubmVsIG4gbm90IHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBjb3JyZXNwb25kaW5nIGNoYW5uZWwgbiBpcyByZXNldC4KKyAgICAgKiBAdmFyIFBETUFfVDo6UkVRU0VMMF8zCisgICAgICogT2Zmc2V0OiAweDQ4MCAgUERNQSBDaGFubmVsIDAgdG8gQ2hhbm5lbCAzIFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs2OjBdICAgfFJFUVNSQzAgICB8Q2hhbm5lbCAwIFJlcXVlc3QgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmlsZWQgZGVmaW5lcyB3aGljaCBwZXJpcGhlcmFsIGlzIGNvbm5lY3RlZCB0byBQRE1BIGNoYW5uZWwgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGNvbmZpZ3VyZSB0aGUgcGVyaXBoZXJhbCBieSBzZXR0aW5nIFJFUVNSQzAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGUgUERNQS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MiA9IENoYW5uZWwgY29ubmVjdHMgdG8gVVNCX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDMgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFVTQl9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUMF9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUMF9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw2ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUMV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw3ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUMV9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw4ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUMl9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw5ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUMl9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDNfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFVBUlQzX1JYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEyID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUNF9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMyA9IENoYW5uZWwgY29ubmVjdHMgdG8gVUFSVDRfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTQgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFVBUlQ1X1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE1ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVQVJUNV9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxNiA9IENoYW5uZWwgY29ubmVjdHMgdG8gVVNDSTBfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTcgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFVTQ0kwX1JYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE4ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBVU0NJMV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxOSA9IENoYW5uZWwgY29ubmVjdHMgdG8gVVNDSTFfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MjAgPSBDaGFubmVsIGNvbm5lY3RzIHRvIFFTUEkwX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDIxID0gQ2hhbm5lbCBjb25uZWN0cyB0byBRU1BJMF9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyMiA9IENoYW5uZWwgY29ubmVjdHMgdG8gU1BJMF9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyMyA9IENoYW5uZWwgY29ubmVjdHMgdG8gU1BJMF9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyNCA9IENoYW5uZWwgY29ubmVjdHMgdG8gU1BJMV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyNSA9IENoYW5uZWwgY29ubmVjdHMgdG8gU1BJMV9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyNiA9IENoYW5uZWwgY29ubmVjdHMgdG8gU1BJMl9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyNyA9IENoYW5uZWwgY29ubmVjdHMgdG8gU1BJMl9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyOCA9IENoYW5uZWwgY29ubmVjdHMgdG8gU1BJM19UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyOSA9IENoYW5uZWwgY29ubmVjdHMgdG8gU1BJM19SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzMiA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTBfUDFfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MzMgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00wX1AyX1JYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDM0ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMF9QM19SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzNSA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTFfUDFfUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MzYgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00xX1AyX1JYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDM3ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMV9QM19SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzOCA9IENoYW5uZWwgY29ubmVjdHMgdG8gSTJDMF9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwzOSA9IENoYW5uZWwgY29ubmVjdHMgdG8gSTJDMF9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0MCA9IENoYW5uZWwgY29ubmVjdHMgdG8gSTJDMV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0MSA9IENoYW5uZWwgY29ubmVjdHMgdG8gSTJDMV9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0MiA9IENoYW5uZWwgY29ubmVjdHMgdG8gSTJDMl9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0MyA9IENoYW5uZWwgY29ubmVjdHMgdG8gSTJDMl9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0NCA9IENoYW5uZWwgY29ubmVjdHMgdG8gSTJTMF9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0NSA9IENoYW5uZWwgY29ubmVjdHMgdG8gSTJTMF9SWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0NiA9IENoYW5uZWwgY29ubmVjdHMgdG8gVE1SMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0NyA9IENoYW5uZWwgY29ubmVjdHMgdG8gVE1SMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0OCA9IENoYW5uZWwgY29ubmVjdHMgdG8gVE1SMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw0OSA9IENoYW5uZWwgY29ubmVjdHMgdG8gVE1SMy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1MCA9IENoYW5uZWwgY29ubmVjdHMgdG8gQURDX1JYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDUxID0gQ2hhbm5lbCBjb25uZWN0cyB0byBEQUMwX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDUyID0gQ2hhbm5lbCBjb25uZWN0cyB0byBEQUMxX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDUzID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMF9DSDBfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NTQgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00wX0NIMV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1NSA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTBfQ0gyX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDU2ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMF9DSDNfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NTcgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00wX0NINF9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw1OCA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTBfQ0g1X1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDU5ID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMV9DSDBfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NjAgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00xX0NIMV9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw2MSA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTFfQ0gyX1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDYyID0gQ2hhbm5lbCBjb25uZWN0cyB0byBFUFdNMV9DSDNfVFguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8NjMgPSBDaGFubmVsIGNvbm5lY3RzIHRvIEVQV00xX0NINF9UWC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHw2NCA9IENoYW5uZWwgY29ubmVjdHMgdG8gRVBXTTFfQ0g1X1RYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUgMTogQSByZXF1ZXN0IHNvdXJjZSBjYW5ub3QgYXNzaWduIHRvIHR3byBjaGFubmVscyBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUgMjogVGhpcyBmaWVsZCBpcyB1c2VsZXNzIHdoZW4gdHJhbnNmZXIgYmV0d2VlbiBtZW1vcnkgYW5kIG1lbW9yeS4KKyAgICAgKiB8WzE0OjhdICB8UkVRU1JDMSAgIHxDaGFubmVsIDEgUmVxdWVzdCBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWxlZCBkZWZpbmVzIHdoaWNoIHBlcmlwaGVyYWwgaXMgY29ubmVjdGVkIHRvIFBETUEgY2hhbm5lbCAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gY29uZmlndXJlIHRoZSBwZXJpcGhlcmFsIHNldHRpbmcgYnkgUkVRU1JDMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgY2hhbm5lbCBjb25maWd1cmF0aW9uIGlzIHRoZSBzYW1lIGFzIFJFUVNSQzAgZmllbGQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQbGVhc2UgcmVmZXIgdG8gdGhlIGV4cGxhbmF0aW9uIG9mIFJFUVNSQzAuCisgICAgICogfFsyMjoxNl0gfFJFUVNSQzIgICB8Q2hhbm5lbCAyIFJlcXVlc3QgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmlsZWQgZGVmaW5lcyB3aGljaCBwZXJpcGhlcmFsIGlzIGNvbm5lY3RlZCB0byBQRE1BIGNoYW5uZWwgMgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGNvbmZpZ3VyZSB0aGUgcGVyaXBoZXJhbCBzZXR0aW5nIGJ5IFJFUVNSQzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiBpcyB0aGUgc2FtZSBhcyBSRVFTUkMwIGZpZWxkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UGxlYXNlIHJlZmVyIHRvIHRoZSBleHBsYW5hdGlvbiBvZiBSRVFTUkMwLgorICAgICAqIHxbMzA6MjRdIHxSRVFTUkMzICAgfENoYW5uZWwgMyBSZXF1ZXN0IFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpbGVkIGRlZmluZXMgd2hpY2ggcGVyaXBoZXJhbCBpcyBjb25uZWN0ZWQgdG8gUERNQSBjaGFubmVsIDMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBjb25maWd1cmUgdGhlIHBlcmlwaGVyYWwgc2V0dGluZyBieSBSRVFTUkMzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHNhbWUgYXMgUkVRU1JDMCBmaWVsZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBsZWFzZSByZWZlciB0byB0aGUgZXhwbGFuYXRpb24gb2YgUkVRU1JDMC4KKyAgICAgKiBAdmFyIFBETUFfVDo6UkVRU0VMNF83CisgICAgICogT2Zmc2V0OiAweDQ4NCAgUERNQSBSZXF1ZXN0IFNvdXJjZSBTZWxlY3QgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs2OjBdICAgfFJFUVNSQzQgICB8Q2hhbm5lbCA0IFJlcXVlc3QgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmlsZWQgZGVmaW5lcyB3aGljaCBwZXJpcGhlcmFsIGlzIGNvbm5lY3RlZCB0byBQRE1BIGNoYW5uZWwgNAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGNvbmZpZ3VyZSB0aGUgcGVyaXBoZXJhbCBzZXR0aW5nIGJ5IFJFUVNSQzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiBpcyB0aGUgc2FtZSBhcyBSRVFTUkMwIGZpZWxkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UGxlYXNlIHJlZmVyIHRvIHRoZSBleHBsYW5hdGlvbiBvZiBSRVFTUkMwLgorICAgICAqIHxbMTQ6OF0gIHxSRVFTUkM1ICAgfENoYW5uZWwgNSBSZXF1ZXN0IFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpbGVkIGRlZmluZXMgd2hpY2ggcGVyaXBoZXJhbCBpcyBjb25uZWN0ZWQgdG8gUERNQSBjaGFubmVsIDUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBjb25maWd1cmUgdGhlIHBlcmlwaGVyYWwgc2V0dGluZyBieSBSRVFTUkM1LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHNhbWUgYXMgUkVRU1JDMCBmaWVsZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBsZWFzZSByZWZlciB0byB0aGUgZXhwbGFuYXRpb24gb2YgUkVRU1JDMC4KKyAgICAgKiB8WzIyOjE2XSB8UkVRU1JDNiAgIHxDaGFubmVsIDYgUmVxdWVzdCBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWxlZCBkZWZpbmVzIHdoaWNoIHBlcmlwaGVyYWwgaXMgY29ubmVjdGVkIHRvIFBETUEgY2hhbm5lbCA2CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gY29uZmlndXJlIHRoZSBwZXJpcGhlcmFsIHNldHRpbmcgYnkgUkVRU1JDNi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgY2hhbm5lbCBjb25maWd1cmF0aW9uIGlzIHRoZSBzYW1lIGFzIFJFUVNSQzAgZmllbGQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQbGVhc2UgcmVmZXIgdG8gdGhlIGV4cGxhbmF0aW9uIG9mIFJFUVNSQzAuCisgICAgICogfFszMDoyNF0gfFJFUVNSQzcgICB8Q2hhbm5lbCA3IFJlcXVlc3QgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmlsZWQgZGVmaW5lcyB3aGljaCBwZXJpcGhlcmFsIGlzIGNvbm5lY3RlZCB0byBQRE1BIGNoYW5uZWwgNworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIGNvbmZpZ3VyZSB0aGUgcGVyaXBoZXJhbCBzZXR0aW5nIGJ5IFJFUVNSQzcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiBpcyB0aGUgc2FtZSBhcyBSRVFTUkMwIGZpZWxkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UGxlYXNlIHJlZmVyIHRvIHRoZSBleHBsYW5hdGlvbiBvZiBSRVFTUkMwLgorICAgICAqLworCisgICAgRFNDVF9UICAgICAgICBEU0NUWzhdOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMCB+IDB4MDA3Q10gRE1BIEVtYmVkZGVkIERlc2NyaXB0aW9uIFRhYmxlIDB+NyAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ1VSU0NBVFs4XTsgICAgICAgICAgICAvKiE8IFsweDAwODB+MHgwMDlDXSBDdXJyZW50IFNjYXR0ZXItR2F0aGVyIERlc2NyaXB0b3IgVGFibGUgQWRkcmVzcyBvZiBQRE1BIENoYW5uZWwgMH43ICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsyMTZdOworICAgIF9fSU8gdWludDMyX3QgQ0hDVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDA0MDBdIFBETUEgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFBBVVNFOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwNDA0XSBQRE1BIFRyYW5zZmVyIFBhdXNlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBTV1JFUTsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDQwOF0gUERNQSBTb2Z0d2FyZSBSZXF1ZXN0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgVFJHU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDA0MGNdIFBETUEgQ2hhbm5lbCBSZXF1ZXN0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBSSVNFVDsgICAgICAgICAgICAgICAgLyohPCBbMHgwNDEwXSBQRE1BIEZpeGVkIFByaW9yaXR5IFNldHRpbmcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19PICB1aW50MzJfdCBQUklDTFI7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDQxNF0gUERNQSBGaXhlZCBQcmlvcml0eSBDbGVhciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDA0MThdIFBETUEgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwNDFjXSBQRE1BIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBQlRTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDQyMF0gUERNQSBDaGFubmVsIFJlYWQvV3JpdGUgVGFyZ2V0IEFib3J0IEZsYWcgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVERTVFM7ICAgICAgICAgICAgICAgICAvKiE8IFsweDA0MjRdIFBETUEgQ2hhbm5lbCBUcmFuc2ZlciBEb25lIEZsYWcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFMSUdOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwNDI4XSBQRE1BIFRyYW5zZmVyIEFsaWdubWVudCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBUQUNUU1RTOyAgICAgICAgICAgICAgIC8qITwgWzB4MDQyY10gUERNQSBUcmFuc2ZlciBBY3RpdmUgRmxhZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVE9VVFBTQzsgICAgICAgICAgICAgICAvKiE8IFsweDA0MzBdIFBETUEgVGltZS1vdXQgUHJlc2NhbGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRPVVRFTjsgICAgICAgICAgICAgICAgLyohPCBbMHgwNDM0XSBQRE1BIFRpbWUtb3V0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUT1VUSUVOOyAgICAgICAgICAgICAgIC8qITwgWzB4MDQzOF0gUERNQSBUaW1lLW91dCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU0NBVEJBOyAgICAgICAgICAgICAgICAvKiE8IFsweDA0M2NdIFBETUEgU2NhdHRlci1HYXRoZXIgRGVzY3JpcHRvciBUYWJsZSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRPQzBfMTsgICAgICAgICAgICAgICAgLyohPCBbMHgwNDQwXSBQRE1BIENoYW5uZWwgMCBhbmQgQ2hhbm5lbCAxIFRpbWUtb3V0IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVs3XTsKKyAgICBfX0lPIHVpbnQzMl90IENIUlNUOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwNDYwXSBQRE1BIENoYW5uZWwgUmVzZXQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMls3XTsKKyAgICBfX0lPIHVpbnQzMl90IFJFUVNFTDBfMzsgICAgICAgICAgICAgLyohPCBbMHgwNDgwXSBQRE1BIENoYW5uZWwgMCB0byBDaGFubmVsIDMgUmVxdWVzdCBTb3VyY2UgU2VsZWN0IFJlZ2lzdGVyICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBSRVFTRUw0Xzc7ICAgICAgICAgICAgIC8qITwgWzB4MDQ4NF0gUERNQSBDaGFubmVsIDQgdG8gQ2hhbm5lbCA3IFJlcXVlc3QgU291cmNlIFNlbGVjdCBSZWdpc3RlciAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTRbMzBdOworICAgIFNUUklERV9UICAgICAgU1RSSURFWzZdOyAgICAgICAgICAgICAvKiE8IFsweDA1MDAgfiAweDA1MkNdIFN0cmlkZSBmdW5jdGlvbiBjb250cm9sIHJlZ2lzdGVyIG9mIFBETUEgQ2hhbm5lbCAwIH4gNSAgKi8KKworfSBQRE1BX1Q7CisKKworCisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFBETUFfQ09OU1QgUERNQSBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBQRE1BIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9PUE1PREVfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogT1BNT0RFIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX09QTU9ERV9Nc2sgICAgICAgICgweDN1bCA8PCBQRE1BX0RTQ1RfQ1RMX09QTU9ERV9Qb3MpICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBPUE1PREUgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9UWFRZUEVfUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogVFhUWVBFIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX1RYVFlQRV9Nc2sgICAgICAgICgweDF1bCA8PCBQRE1BX0RTQ1RfQ1RMX1RYVFlQRV9Qb3MpICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBUWFRZUEUgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9CVVJTSVpFX1BvcyAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogQlVSU0laRSBQb3NpdGlvbiAgICAqLworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX0JVUlNJWkVfTXNrICAgICAgICgweDd1bCA8PCBQRE1BX0RTQ1RfQ1RMX0JVUlNJWkVfUG9zKSAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBCVVJTSVpFIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9UQklOVERJU19Qb3MgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogVEJJTlRESVMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX1RCSU5URElTX01zayAgICAgICgweDF1bCA8PCBQRE1BX0RTQ1RfQ1RMX1RCSU5URElTX1BvcykgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBUQklOVERJUyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9TQUlOQ19Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogU0FJTkMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX1NBSU5DX01zayAgICAgICAgICgweDN1bCA8PCBQRE1BX0RTQ1RfQ1RMX1NBSU5DX1BvcykgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBTQUlOQyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9EQUlOQ19Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogREFJTkMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX0RBSU5DX01zayAgICAgICAgICgweDN1bCA8PCBQRE1BX0RTQ1RfQ1RMX0RBSU5DX1BvcykgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBEQUlOQyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9UWFdJRFRIX1BvcyAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogVFhXSURUSCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX1RYV0lEVEhfTXNrICAgICAgICgweDN1bCA8PCBQRE1BX0RTQ1RfQ1RMX1RYV0lEVEhfUG9zKSAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBUWFdJRFRIIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9UWEFDS19Qb3MgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogVFhBQ0sgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBQRE1BX0RTQ1RfQ1RMX1RYQUNLX01zayAgICAgICAgICgweDF1bCA8PCBQRE1BX0RTQ1RfQ1RMX1RYQUNLX1BvcykgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkRTQ1RfQ1RMOiBUWEFDSyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9TVFJJREVFTl9Qb3MgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogU1RSSURFRU4gUG9zaXRpb24gICovCisjZGVmaW5lIFBETUFfRFNDVF9DVExfU1RSSURFRU5fTXNrICAgICAoMHgxdWwgPDwgUERNQV9EU0NUX0NUTF9TVFJJREVFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IFNUUklERUVOIE1hc2sgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9DVExfVFhDTlRfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9DVEw6IFRYQ05UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0NUTF9UWENOVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9EU0NUX0NUTF9UWENOVF9Qb3MpICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0NUTDogVFhDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9TQV9TQV9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9TQTogU0EgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX1NBX1NBX01zayAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFBETUFfRFNDVF9TQV9TQV9Qb3MpICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX1NBOiBTQSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9EQV9EQV9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9EQTogREEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX0RBX0RBX01zayAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFBETUFfRFNDVF9EQV9EQV9Qb3MpICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX0RBOiBEQSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9ORVhUX05FWFRfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9ORVhUOiBORVhUIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX05FWFRfTkVYVF9Nc2sgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9EU0NUX05FWFRfTkVYVF9Qb3MpICAgICAgICAgICAgIC8qITwgUERNQV9UOjpEU0NUX05FWFQ6IE5FWFQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfRFNDVF9ORVhUX0VYRU5FWFRfUG9zICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9GSVJTVDogTkVYVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUERNQV9EU0NUX05FWFRfRVhFTkVYVF9Nc2sgICAgICAoMHhmZmZmdWwgPDwgUERNQV9EU0NUX05FWFRfRVhFTkVYVF9Qb3MpICAgICAgICAgICAvKiE8IFBETUFfVDo6RFNDVF9GSVJTVDogTkVYVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0NVUlNDQVRfQ1VSQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkNVUlNDQVQ6IENVUkFERFIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFBETUFfQ1VSU0NBVF9DVVJBRERSX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBQRE1BX0NVUlNDQVRfQ1VSQUREUl9Qb3MpICAgICAgICAvKiE8IFBETUFfVDo6Q1VSU0NBVDogQ1VSQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0NIQ1RMX0NIRU5uX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkNIQ1RMOiBDSEVObiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBQRE1BX0NIQ1RMX0NIRU5uX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX0NIQ1RMX0NIRU5uX1BvcykgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkNIQ1RMOiBDSEVObiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfUEFVU0VfUEFVU0VuX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6UEFVU0U6IFBBVVNFbiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9QQVVTRV9QQVVTRW5fTXNrICAgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9QQVVTRV9QQVVTRW5fUG9zKSAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlBBVVNFOiBQQVVTRW4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9TV1JFUV9TV1JFUW5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6U1dSRVE6IFNXUkVRbiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFBETUFfU1dSRVFfU1dSRVFuX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX1NXUkVRX1NXUkVRbl9Qb3MpICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlNXUkVROiBTV1JFUW4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVFJHU1RTX1JFUVNUU25fUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRSR1NUUzogUkVRU1RTbiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBQRE1BX1RSR1NUU19SRVFTVFNuX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9UUkdTVFNfUkVRU1RTbl9Qb3MpICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUUkdTVFM6IFJFUVNUU24gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1BSSVNFVF9GUFJJU0VUbl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpQUklTRVQ6IEZQUklTRVRuIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUERNQV9QUklTRVRfRlBSSVNFVG5fTXNrICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfUFJJU0VUX0ZQUklTRVRuX1BvcykgICAgICAgICAgICAvKiE8IFBETUFfVDo6UFJJU0VUOiBGUFJJU0VUbiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9QUklDTFJfRlBSSUNMUm5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6UFJJQ0xSOiBGUFJJQ0xSbiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFBETUFfUFJJQ0xSX0ZQUklDTFJuX01zayAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX1BSSUNMUl9GUFJJQ0xSbl9Qb3MpICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlBSSUNMUjogRlBSSUNMUm4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfSU5URU5fSU5URU5uX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OklOVEVOOiBJTlRFTm4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBQRE1BX0lOVEVOX0lOVEVObl9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9JTlRFTl9JTlRFTm5fUG9zKSAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpJTlRFTjogSU5URU5uIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0lOVFNUU19BQlRJRl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpJTlRTVFM6IEFCVElGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9JTlRTVFNfQUJUSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfSU5UU1RTX0FCVElGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6SU5UU1RTOiBBQlRJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9JTlRTVFNfVERJRl9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6SU5UU1RTOiBURElGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFBETUFfSU5UU1RTX1RESUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0lOVFNUU19URElGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OklOVFNUUzogVERJRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfSU5UU1RTX0FMSUdORl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OklOVFNUUzogQUxJR05GIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0lOVFNUU19BTElHTkZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9JTlRTVFNfQUxJR05GX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpJTlRTVFM6IEFMSUdORiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0lOVFNUU19SRVFUT0YwX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpJTlRTVFM6IFJFUVRPRjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUERNQV9JTlRTVFNfUkVRVE9GMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFBETUFfSU5UU1RTX1JFUVRPRjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6SU5UU1RTOiBSRVFUT0YwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9JTlRTVFNfUkVRVE9GMV9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6SU5UU1RTOiBSRVFUT0YxIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFBETUFfSU5UU1RTX1JFUVRPRjFfTXNrICAgICAgICAgICgweDF1bCA8PCBQRE1BX0lOVFNUU19SRVFUT0YxX1BvcykgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OklOVFNUUzogUkVRVE9GMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUYwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGM19Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUYzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUY0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUY1X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUY1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGNl9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUY2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUY2X1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjdfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGNyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUY3X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGN19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUY4X1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGOF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjhfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUY4IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGOV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUY5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUY5X1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjEwX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYxMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjEwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMTAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxMV9Qb3MgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMTEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMTFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUYxMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjExIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMTJfUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjEyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjEyX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGMTJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYxMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjEzX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYxMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX0FCVFNUU19BQlRJRjEzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMTMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BQlRTVFNfQUJUSUYxNF9Qb3MgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBQlRTVFM6IEFCVElGMTQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMTRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9BQlRTVFNfQUJUSUYxNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjE0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUJUU1RTX0FCVElGMTVfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QUJUU1RTOiBBQlRJRjE1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX0FCVFNUU19BQlRJRjE1X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfQUJUU1RTX0FCVElGMTVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFCVFNUUzogQUJUSUYxNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUYwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUYwX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGMV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUYyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUYzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUYzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGNF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGNV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUY1X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUY2X1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUY2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUY2X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUY2IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjdfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjdfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGN19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGOF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGOCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGOF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUY4X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGOCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUY5X1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUY5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUY5X01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjlfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUY5IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjEwX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMTAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjEwX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjEwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMTAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGMTFfUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGMTFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGMTFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxMl9Qb3MgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjEyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUYxMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjEyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjEzX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMTMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfVERTVFNfVERJRjEzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFBETUFfVERTVFNfVERJRjEzX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlREU1RTOiBURElGMTMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9URFNUU19URElGMTRfUG9zICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9URFNUU19URElGMTRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUERNQV9URFNUU19URElGMTRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VERTVFM6IFRESUYxNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxNV9Qb3MgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjE1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBQRE1BX1REU1RTX1RESUYxNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBQRE1BX1REU1RTX1RESUYxNV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpURFNUUzogVERJRjE1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQUxJR05fQUxJR05uX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFMSUdOOiBBTElHTm4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFBETUFfQUxJR05fQUxJR05uX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfQUxJR05fQUxJR05uX1BvcykgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFMSUdOOiBBTElHTm4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9UQUNUU1RTX1RYQUNURm5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VEFDVFNUUzogVFhBQ1RGbiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFBETUFfVEFDVFNUU19UWEFDVEZuX01zayAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX1RBQ1RTVFNfVFhBQ1RGbl9Qb3MpICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRBQ1RTVFM6IFRYQUNURm4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVE9VVFBTQ19UT1VUUFNDMF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRPVVRQU0M6IFRPVVRQU0MwIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBQRE1BX1RPVVRQU0NfVE9VVFBTQzBfTXNrICAgICAgICAoMHg3dWwgPDwgUERNQV9UT1VUUFNDX1RPVVRQU0MwX1BvcykgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUT1VUUFNDOiBUT1VUUFNDMCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1RPVVRQU0NfVE9VVFBTQzFfUG9zICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUT1VUUFNDOiBUT1VUUFNDMSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUERNQV9UT1VUUFNDX1RPVVRQU0MxX01zayAgICAgICAgKDB4N3VsIDw8IFBETUFfVE9VVFBTQ19UT1VUUFNDMV9Qb3MpICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VE9VVFBTQzogVE9VVFBTQzEgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9UT1VURU5fVE9VVEVObl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VE9VVEVOOiBUT1VURU5uIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFBETUFfVE9VVEVOX1RPVVRFTm5fTXNrICAgICAgICAgICgweDN1bCA8PCBQRE1BX1RPVVRFTl9UT1VURU5uX1BvcykgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRPVVRFTjogVE9VVEVObiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVE9VVElFTl9UT1VUSUVObl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRPVVRJRU46IFRPVVRJRU5uIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBQRE1BX1RPVVRJRU5fVE9VVElFTm5fTXNrICAgICAgICAoMHgzdWwgPDwgUERNQV9UT1VUSUVOX1RPVVRJRU5uX1BvcykgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUT1VUSUVOOiBUT1VUSUVObiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1NDQVRCQV9TQ0FUQkFfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpTQ0FUQkE6IFNDQVRCQSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9TQ0FUQkFfU0NBVEJBX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfU0NBVEJBX1NDQVRCQV9Qb3MpICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6U0NBVEJBOiBTQ0FUQkEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9UT0MwXzFfVE9DMF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6VE9DMF8xOiBUT0MwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFBETUFfVE9DMF8xX1RPQzBfTXNrICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX1RPQzBfMV9UT0MwX1BvcykgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRPQzBfMTogVE9DMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfVE9DMF8xX1RPQzFfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlRPQzBfMTogVE9DMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBQRE1BX1RPQzBfMV9UT0MxX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9UT0MwXzFfVE9DMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpUT0MwXzE6IFRPQzEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX0NIUlNUX0NIblJTVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpDSFJTVDogQ0huUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9DSFJTVF9DSG5SU1RfTXNrICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfQ0hSU1RfQ0huUlNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6Q0hSU1Q6IENIblJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9SRVFTRUwwXzNfUkVRU1JDMF9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMMF8zOiBSRVFTUkMwIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFBETUFfUkVRU0VMMF8zX1JFUVNSQzBfTXNrICAgICAgICgweDdmdWwgPDwgUERNQV9SRVFTRUwwXzNfUkVRU1JDMF9Qb3MpICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDBfMzogUkVRU1JDMCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFBETUFfUkVRU0VMMF8zX1JFUVNSQzFfUG9zICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDBfMzogUkVRU1JDMSBQb3NpdGlvbiAgICAqLworI2RlZmluZSBQRE1BX1JFUVNFTDBfM19SRVFTUkMxX01zayAgICAgICAoMHg3ZnVsIDw8IFBETUFfUkVRU0VMMF8zX1JFUVNSQzFfUG9zKSAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUwwXzM6IFJFUVNSQzEgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1JFUVNFTDBfM19SRVFTUkMyX1BvcyAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUwwXzM6IFJFUVNSQzIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgUERNQV9SRVFTRUwwXzNfUkVRU1JDMl9Nc2sgICAgICAgKDB4N2Z1bCA8PCBQRE1BX1JFUVNFTDBfM19SRVFTUkMyX1BvcykgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMMF8zOiBSRVFTUkMyIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9SRVFTRUwwXzNfUkVRU1JDM19Qb3MgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMMF8zOiBSRVFTUkMzIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFBETUFfUkVRU0VMMF8zX1JFUVNSQzNfTXNrICAgICAgICgweDdmdWwgPDwgUERNQV9SRVFTRUwwXzNfUkVRU1JDM19Qb3MpICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDBfMzogUkVRU1JDMyBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFBETUFfUkVRU0VMNF83X1JFUVNSQzRfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDRfNzogUkVRU1JDNCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBQRE1BX1JFUVNFTDRfN19SRVFTUkM0X01zayAgICAgICAoMHg3ZnVsIDw8IFBETUFfUkVRU0VMNF83X1JFUVNSQzRfUG9zKSAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUw0Xzc6IFJFUVNSQzQgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1JFUVNFTDRfN19SRVFTUkM1X1BvcyAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUw0Xzc6IFJFUVNSQzUgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgUERNQV9SRVFTRUw0XzdfUkVRU1JDNV9Nc2sgICAgICAgKDB4N2Z1bCA8PCBQRE1BX1JFUVNFTDRfN19SRVFTUkM1X1BvcykgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMNF83OiBSRVFTUkM1IE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9SRVFTRUw0XzdfUkVRU1JDNl9Qb3MgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6UkVRU0VMNF83OiBSRVFTUkM2IFBvc2l0aW9uICAgICovCisjZGVmaW5lIFBETUFfUkVRU0VMNF83X1JFUVNSQzZfTXNrICAgICAgICgweDdmdWwgPDwgUERNQV9SRVFTRUw0XzdfUkVRU1JDNl9Qb3MpICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDRfNzogUkVRU1JDNiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFBETUFfUkVRU0VMNF83X1JFUVNSQzdfUG9zICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OlJFUVNFTDRfNzogUkVRU1JDNyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBQRE1BX1JFUVNFTDRfN19SRVFTUkM3X01zayAgICAgICAoMHg3ZnVsIDw8IFBETUFfUkVRU0VMNF83X1JFUVNSQzdfUG9zKSAgICAgICAgICAgIC8qITwgUERNQV9UOjpSRVFTRUw0Xzc6IFJFUVNSQzcgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBQRE1BX1NUQ1JuX1NUQ19Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpTVENSbjogU1RDIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERNQV9TVENSbl9TVENfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFBETUFfU1RDUm5fU1RDX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6U1RDUm46IFNUQyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUERNQV9BU09DUm5fU0FTT0xfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBETUFfVDo6QVNPQ1JuOiBTQVNPTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFBETUFfQVNPQ1JuX1NBU09MX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBQRE1BX0FTT0NSbl9TQVNPTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFTT0NSbjogU0FTT0wgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBETUFfQVNPQ1JuX0RBU09MX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE1BX1Q6OkFTT0NSbjogREFTT0wgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBQRE1BX0FTT0NSbl9EQVNPTF9Nc2sgICAgICAgICAgICAoMHhmZmZmdWwgPDwgUERNQV9BU09DUm5fREFTT0xfUG9zKSAgICAgICAgICAgICAgIC8qITwgUERNQV9UOjpBU09DUm46IERBU09MIE1hc2sgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBQRE1BX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBQRE1BIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX1BETUFfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3FlaV9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9xZWlfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkOGNmZgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9xZWlfcmVnLmgKQEAgLTAsMCArMSwzMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBxZWlfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFFFSSByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19RRUlfUkVHX0hfXworI2RlZmluZSBfX1FFSV9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFF1YWRyYXR1cmUgRW5jb2RlciBJbnRlcmZhY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBRRUkgUXVhZHJhdHVyZSBFbmNvZGVyIEludGVyZmFjZShRRUkpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFFFSSBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIFFFSV9UOjpDTlQKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFFFSSBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q05UICAgICAgIHxRdWFkcmF0dXJlIEVuY29kZXIgSW50ZXJmYWNlIENvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIDMyLWJpdCB1cC9kb3duIGNvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGFuIGVmZmVjdGl2ZSBwaGFzZSBwdWxzZSBpcyBkZXRlY3RlZCwgdGhpcyBjb3VudGVyIGlzIGluY3JlYXNlZCBieSBvbmUgaWYgdGhlIGJpdCBESVJGIChRRUlfU1RBVFVTWzhdKSBpcyBvbmUgb3IgZGVjcmVhc2VkIGJ5IG9uZSBpZiB0aGUgYml0IERJUkYgaXMgemVybworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgcGVyZm9ybXMgYW4gaW50ZWdyYXRvciB3aGljaCBjb3VudCB2YWx1ZSBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIGVuY29kZXIgcG9zaXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcHVsc2UgY291bnRlciBtYXkgYmUgaW5pdGlhbGl6ZWQgdG8gYSBwcmVkZXRlcm1pbmVkIHZhbHVlIGJ5IG9uZSBvZiB0aHJlZSBldmVudHMgb2NjdXJzOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEuIFNvZnR3YXJlIGlzIHdyaXR0ZW4gaWYgUUVJRU4gKFFFSV9DVExbMjldKSA9IDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Mi4gQ29tcGFyZS1tYXRjaCBldmVudCBpZiBRRUlFTj0xIGFuZCBRRUkgaXMgaW4gY29tcGFyZS1jb3VudGluZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDMuIEluZGV4IHNpZ25hbCBjaGFuZ2UgaWYgUUVJRU49MSBhbmQgSURYUkxERU4gKFFFSV9DVExbMjddKT0xLgorICAgICAqIEB2YXIgUUVJX1Q6OkNOVEhPTEQKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIFFFSSBDb3VudGVyIEhvbGQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxDTlRIT0xEICAgfFF1YWRyYXR1cmUgRW5jb2RlciBJbnRlcmZhY2UgQ291bnRlciBIb2xkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBiaXQgSE9MRENOVCAoUUVJX0NUTFsyNF0pIGdvZXMgZnJvbSBsb3cgdG8gaGlnaCwgdGhlIENOVChRRUlfQ05UWzMxOjBdKSBpcyBjb3BpZWQgaW50byBDTlRIT0xEIChRRUlfQ05USE9MRFszMTowXSkgcmVnaXN0ZXIuCisgICAgICogQHZhciBRRUlfVDo6Q05UTEFUQ0gKKyAgICAgKiBPZmZzZXQ6IDB4MDggIFFFSSBDb3VudGVyIEluZGV4IExhdGNoIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8Q05UTEFUQ0ggIHxRdWFkcmF0dXJlIEVuY29kZXIgSW50ZXJmYWNlIENvdW50ZXIgSW5kZXggTGF0Y2gKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBJRFhGIChRRUlfU1RBVFVTWzBdKSBiaXQgaXMgc2V0LCB0aGUgQ05UKFFFSV9DTlRbMzE6MF0pIGlzIGNvcGllZCBpbnRvIENOVExBVENIIChRRUlfQ05UTEFUQ0hbMzE6MF0pIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgUUVJX1Q6OkNOVENNUAorICAgICAqIE9mZnNldDogMHgwQyAgUUVJIENvdW50ZXIgQ29tcGFyZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENOVENNUCAgICB8UXVhZHJhdHVyZSBFbmNvZGVyIEludGVyZmFjZSBDb3VudGVyIENvbXBhcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgUUVJIGNvbnRyb2xsZXIgaXMgaW4gdGhlIGNvbXBhcmUtY291bnRpbmcgbW9kZSBDTVBFTiAoUUVJX0NUTFsyOF0pID0xLCB3aGVuIHRoZSB2YWx1ZSBvZiBDTlQoUUVJX0NOVFszMTowXSkgbWF0Y2hlcyBDTlRDTVAoUUVJX0NOVENNUFszMTowXSksIENNUEYgd2lsbCBiZSBzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIGlzIHNvZnR3YXJlIHdyaXRhYmxlLgorICAgICAqIEB2YXIgUUVJX1Q6OkNOVE1BWAorICAgICAqIE9mZnNldDogMHgxNCAgUUVJIFByZS1zZXQgTWF4aW11bSBDb3VudCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfENOVE1BWCAgICB8UXVhZHJhdHVyZSBFbmNvZGVyIEludGVyZmFjZSBQcmVzZXQgTWF4aW11bSBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgdmFsdWUgZGV0ZXJtaW5lZCBieSB1c2VyIHN0b3JlcyB0aGUgbWF4aW11bSB2YWx1ZSB3aGljaCBtYXkgYmUgdGhlIG51bWJlciBvZiB0aGUgUUVJIGNvdW50ZXIgZm9yIHRoZSBRRUkgY29udHJvbGxlciBjb21wYXJlLWNvdW50aW5nIG1vZGUKKyAgICAgKiBAdmFyIFFFSV9UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTggIFFFSSBDb250cm9sbGVyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxORkNMS1NFTCAgfE5vaXNlIEZpbHRlciBDbG9jayBQcmUtZGl2aWRlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRvIGRldGVybWluZSB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBOb2lzZSBGaWx0ZXIgY2xvY2sgLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFFFSV9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gUUVJX0NMSy8yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFFFSV9DTEsvNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBRRUlfQ0xLLzE2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFFFSV9DTEsvMzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gUUVJX0NMSy82NC4KKyAgICAgKiB8WzNdICAgICB8TkZESVMgICAgIHxRRUkgQ29udHJvbGxlciBJbnB1dCBOb2lzZSBGaWx0ZXIgRGlzYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIG5vaXNlIGZpbHRlciBvZiBRRUkgY29udHJvbGxlciBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgbm9pc2UgZmlsdGVyIG9mIFFFSSBjb250cm9sbGVyIERpc2FibGVkLgorICAgICAqIHxbNF0gICAgIHxDSEFFTiAgICAgfFFFQSBJbnB1dCB0byBRRUkgQ29udHJvbGxlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFFQSBpbnB1dCB0byBRRUkgQ29udHJvbGxlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVBIGlucHV0IHRvIFFFSSBDb250cm9sbGVyIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfENIQkVOICAgICB8UUVCIElucHV0IHRvIFFFSSBDb250cm9sbGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUUVCIGlucHV0IHRvIFFFSSBDb250cm9sbGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRRUIgaW5wdXQgdG8gUUVJIENvbnRyb2xsZXIgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8SURYRU4gICAgIHxJRFggSW5wdXQgdG8gUUVJIENvbnRyb2xsZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJRFggaW5wdXQgdG8gUUVJIENvbnRyb2xsZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElEWCBpbnB1dCB0byBRRUkgQ29udHJvbGxlciBFbmFibGVkLgorICAgICAqIHxbOTo4XSAgIHxNT0RFICAgICAgfFFFSSBDb3VudGluZyBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXJlIGFyZSBmb3VyIHF1YWRyYXR1cmUgZW5jb2RlciBwdWxzZSBjb3VudGVyIG9wZXJhdGlvbiBtb2Rlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFg0IEZyZWUtY291bnRpbmcgTW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFgyIEZyZWUtY291bnRpbmcgTW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFg0IENvbXBhcmUtY291bnRpbmcgTW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFgyIENvbXBhcmUtY291bnRpbmcgTW9kZS4KKyAgICAgKiB8WzEyXSAgICB8Q0hBSU5WICAgIHxJbnZlcnNlIFFFQSBJbnB1dCBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb3QgaW52ZXJzZSBRRUEgaW5wdXQgcG9sYXJpdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFQSBpbnB1dCBwb2xhcml0eSBpcyBpbnZlcnNlIHRvIFFFSSBjb250cm9sbGVyLgorICAgICAqIHxbMTNdICAgIHxDSEJJTlYgICAgfEludmVyc2UgUUVCIElucHV0IFBvbGFyaXR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vdCBpbnZlcnNlIFFFQiBpbnB1dCBwb2xhcml0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVCIGlucHV0IHBvbGFyaXR5IGlzIGludmVyc2UgdG8gUUVJIGNvbnRyb2xsZXIuCisgICAgICogfFsxNF0gICAgfElEWElOViAgICB8SW52ZXJzZSBJRFggSW5wdXQgUG9sYXJpdHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IGludmVyc2UgSURYIGlucHV0IHBvbGFyaXR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJRFggaW5wdXQgcG9sYXJpdHkgaXMgaW52ZXJzZSB0byBRRUkgY29udHJvbGxlci4KKyAgICAgKiB8WzE2XSAgICB8T1ZVTklFTiAgIHxPVlVORiBUcmlnZ2VyIFFFSSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPVlVORiBjYW4gdHJpZ2dlciBRRUkgY29udHJvbGxlciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9WVU5GIGNhbiB0cmlnZ2VyIFFFSSBjb250cm9sbGVyIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTddICAgIHxESVJJRU4gICAgfERJUkNIR0YgVHJpZ2dlciBRRUkgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRElSQ0hHRiBjYW4gdHJpZ2dlciBRRUkgY29udHJvbGxlciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERJUkNIR0YgY2FuIHRyaWdnZXIgUUVJIGNvbnRyb2xsZXIgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxOF0gICAgfENNUElFTiAgICB8Q01QRiBUcmlnZ2VyIFFFSSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDTVBGIGNhbiB0cmlnZ2VyIFFFSSBjb250cm9sbGVyIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ01QRiBjYW4gdHJpZ2dlciBRRUkgY29udHJvbGxlciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE5XSAgICB8SURYSUVOICAgIHxJRFhGIFRyaWdnZXIgUUVJIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBJRFhGIGNhbiB0cmlnZ2VyIFFFSSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBJRFhGIGNhbiB0cmlnZ2VyIFFFSSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzIwXSAgICB8SE9MRFRNUjAgIHxIb2xkIFFFSV9DTlQgYnkgVGltZXIgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUSUYgKFRJTUVSMF9JTlRTVFNbMF0pIGhhcyBubyBlZmZlY3Qgb24gSE9MRENOVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQSByaXNpbmcgZWRnZSBvZiBiaXQgVElGKFRJTUVSMF9JTlRTVFNbMF0pIGluIHRpbWVyIDAgc2V0cyBIT0xEQ05UIHRvIDEuCisgICAgICogfFsyMV0gICAgfEhPTERUTVIxICB8SG9sZCBRRUlfQ05UIGJ5IFRpbWVyIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVElGKFRJTUVSMV9JTlRTVFNbMF0pIGhhcyBubyBlZmZlY3Qgb24gSE9MRENOVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQSByaXNpbmcgZWRnZSBvZiBiaXQgVElGIChUSU1FUjFfSU5UU1RTWzBdKSBpbiB0aW1lciAxIHNldHMgSE9MRENOVCB0byAxLgorICAgICAqIHxbMjJdICAgIHxIT0xEVE1SMiAgfEhvbGQgUUVJX0NOVCBieSBUaW1lciAyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRJRihUSU1FUjJfSU5UU1RTWzBdKSBoYXMgbm8gZWZmZWN0IG9uIEhPTERDTlQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgcmlzaW5nIGVkZ2Ugb2YgYml0IFRJRihUSU1FUjJfSU5UU1RTWzBdKSBpbiB0aW1lciAyIHNldHMgSE9MRENOVCB0byAxLgorICAgICAqIHxbMjNdICAgIHxIT0xEVE1SMyAgfEhvbGQgUUVJX0NOVCBieSBUaW1lciAzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRJRiAoVElNRVIzX0lOVFNUU1swXSkgaGFzIG5vIGVmZmVjdCBvbiBIT0xEQ05ULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHJpc2luZyBlZGdlIG9mIGJpdCBUSUYoVElNRVIzX0lOVFNUU1swXSkgaW4gdGltZXIgMyBzZXRzIEhPTERDTlQgdG8gMS4KKyAgICAgKiB8WzI0XSAgICB8SE9MRENOVCAgIHxIb2xkIFFFSV9DTlQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhpcyBiaXQgaXMgc2V0IGZyb20gbG93IHRvIGhpZ2gsIHRoZSBDTlQoUUVJX0NOVFszMTowXSkgaXMgY29waWVkIGludG8gUUVJX0NOVEhPTEQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBtYXkgYmUgc2V0IGJ5IHdyaXRpbmcgMSB0byBpdCBvciBUaW1lcjB+VGltZXIzIGludGVycnVwdCBmbGFnIFRJRiAoVElNRVJ4X0lOVFNUU1swXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJX0NOVCBjb250ZW50IGlzIGNhcHR1cmVkIGFuZCBzdG9yZWQgaW4gUUVJX0NOVEhPTEQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGFmdGVyIFFFSV9DTlRIT0xEIGhvbGRzIFFFSV9DTlQgdmFsdWUuCisgICAgICogfFsyNV0gICAgfElEWExBVEVOICB8SW5kZXggTGF0Y2ggUUVJX0NOVCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIGhpZ2gsIHRoZSBRRUlfQ05UIGNvbnRlbnQgd2lsbCBiZSBsYXRjaGVkIGludG8gUUVJX0NOVExBVENIIGF0IGV2ZXJ5IHJpc2luZyBvbiBzaWduYWwgQ0hYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgaW5kZXggc2lnbmFsIGxhdGNoIFFFSSBjb3VudGVyIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgaW5kZXggc2lnbmFsIGxhdGNoIFFFSSBjb3VudGVyIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyN10gICAgfElEWFJMREVOICB8SW5kZXggVHJpZ2dlciBRRUlfQ05UIFJlbG9hZCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGlzIGJpdCBpcyBoaWdoIGFuZCBhIHJpc2luZyBlZGdlIGNvbWVzIG9uIHNpZ25hbCBDSFgsIHRoZSBRRUlfQ05UIHdpbGwgYmUgcmVzZXQgdG8gemVybyBpZiB0aGUgY291bnRlciBpcyBpbiB1cC1jb3VudGluZyB0eXBlIChESVJGID0gMSk7IHdoaWxlIHRoZSBRRUlfQ05UIHdpbGwgYmUgcmVsb2FkZWQgd2l0aCBDTlRNQVggKFFFSV9DTlRNQVhbMzE6MF0pIGNvbnRlbnQgaWYgdGhlIGNvdW50ZXIgaXMgaW4gZG93bi1jb3VudGluZyB0eXBlIChESVJGID0gMCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlbG9hZCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJX0NOVCByZS1pbml0aWFsaXplZCBieSBJbmRleCBzaWduYWwgRW5hYmxlZC4KKyAgICAgKiB8WzI4XSAgICB8Q01QRU4gICAgIHx0aGUgQ29tcGFyZSBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvbXBhcmUgZnVuY3Rpb24gaW4gUUVJIGNvbnRyb2xsZXIgaXMgdG8gY29tcGFyZSB0aGUgZHluYW1pYyBjb3VudGluZyBRRUlfQ05UIHdpdGggdGhlIGNvbXBhcmUgcmVnaXN0ZXIgQ05UQ01QKCBRRUlfQ05UQ01QWzMxOjBdKSwgaWYgQ05UKFFFSV9DTlRbMzE6MF0pIHJlYWNoZXMgQ05UQ01QKCBRRUlfQ05UQ01QWzMxOjBdKSwgdGhlIGZsYWcgQ01QRiB3aWxsIGJlIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ29tcGFyZSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMjldICAgIHxRRUlFTiAgICAgfFF1YWRyYXR1cmUgRW5jb2RlciBJbnRlcmZhY2UgQ29udHJvbGxlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFFSSBjb250cm9sbGVyIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRRUkgY29udHJvbGxlciBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIEB2YXIgUUVJX1Q6OlNUQVRVUworICAgICAqIE9mZnNldDogMHgyQyAgUUVJIENvbnRyb2xsZXIgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SURYRiAgICAgIHxJRFggRGV0ZWN0ZWQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIFFFSSBjb250cm9sbGVyIGRldGVjdHMgYSByaXNpbmcgZWRnZSBvbiBzaWduYWwgQ0hYIGl0IHdpbGwgc2V0IGZsYWcgSURYRiB0byBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByaXNpbmcgZWRnZSBkZXRlY3RlZCBvbiBzaWduYWwgQ0hYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHJpc2luZyBlZGdlIG9jY3VycyBvbiBzaWduYWwgQ0hYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxXSAgICAgfENNUEYgICAgICB8Q29tcGFyZS1tYXRjaCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIFFFSSBjb21wYXJlIGZ1bmN0aW9uIGlzIGVuYWJsZWQsIHRoZSBmbGFnIGlzIHNldCBieSBoYXJkd2FyZSB3aGlsZSBRRUkgY291bnRlciB1cCBvciBkb3duIGNvdW50cyBhbmQgcmVhY2ggdG8gdGhlIENOVENNUChRRUlfQ05UQ01QWzMxOjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUUVJIGNvdW50ZXIgZG9lcyBub3QgbWF0Y2ggd2l0aCBDTlRDTVAoUUVJX0NOVENNUFszMTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFSSBjb3VudGVyIGNvdW50cyB0byB0aGUgc2FtZSBhcyBDTlRDTVAoUUVJX0NOVENNUFszMTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgb25seSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzJdICAgICB8T1ZVTkYgICAgIHxRRUkgQ291bnRlciBPdmVyZmxvdyBvciBVbmRlcmZsb3cgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZsYWcgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoaWxlIFFFSV9DTlQgb3ZlcmZsb3dzIGZyb20gMHhGRkZGX0ZGRkYgdG8gemVybyBpbiBmcmVlLWNvdW50aW5nIG1vZGUgb3IgZnJvbSB0aGUgQ05UTUFYIChRRUlfQ05UTUFYWzMxOjBdKSB0byB6ZXJvIGluIGNvbXBhcmUtY291bnRpbmcgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNpbWlsYXJseSwgdGhlIGZsYWcgaXMgc2V0IHdpbGUgUUVJIGNvdW50ZXIgdW5kZXJmbG93IGZyb20gemVybyB0byAweEZGRkZfRkZGRiBvciBDTlRNQVggKFFFSV9DTlRNQVhbMzE6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBvdmVyZmxvdyBvciB1bmRlcmZsb3cgb2NjdXJzIGluIFFFSSBjb3VudGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRRUkgY291bnRlciBvY2N1cnMgY291bnRpbmcgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFszXSAgICAgfERJUkNIR0YgICB8RGlyZWN0aW9uIENoYW5nZSBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgd2hpbGUgUUVJIGNvdW50ZXIgY291bnRpbmcgZGlyZWN0aW9uIGlzIGNoYW5nZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gY2xlYXIgdGhpcyBiaXQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjaGFuZ2UgaW4gUUVJIGNvdW50ZXIgY291bnRpbmcgZGlyZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRRUkgY291bnRlciBjb3VudGluZyBkaXJlY3Rpb24gaXMgY2hhbmdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBvbmx5IGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbOF0gICAgIHxESVJGICAgICAgfFFFSSBDb3VudGVyIENvdW50aW5nIERpcmVjdGlvbiBJbmRpY2F0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFFSSBDb3VudGVyIGlzIGluIGRvd24tY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFFSSBDb3VudGVyIGlzIGluIHVwLWNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHNldC9yZXNldCBieSBoYXJkd2FyZSBhY2NvcmRpbmcgdG8gdGhlIHBoYXNlIGRldGVjdGlvbiBiZXR3ZWVuIENIQSBhbmQgQ0hCLgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ05UOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFFFSSBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENOVEhPTEQ7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBRRUkgQ291bnRlciBIb2xkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDTlRMQVRDSDsgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gUUVJIENvdW50ZXIgSW5kZXggTGF0Y2ggUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ05UQ01QOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMGNdIFFFSSBDb3VudGVyIENvbXBhcmUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzFdOworICAgIF9fSU8gdWludDMyX3QgQ05UTUFYOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTRdIFFFSSBQcmUtc2V0IE1heGltdW0gQ291bnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE4XSBRRUkgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVs0XTsKKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDJjXSBRRUkgQ29udHJvbGxlciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gUUVJX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFFFSV9DT05TVCBRRUkgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgUUVJIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgUUVJX0NOVF9DTlRfUG9zICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDTlQ6IENOVCBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DTlRfQ05UX01zayAgICAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUUVJX0NOVF9DTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q05UOiBDTlQgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DTlRIT0xEX0NOVEhPTERfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q05USE9MRDogQ05USE9MRCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBRRUlfQ05USE9MRF9DTlRIT0xEX01zayAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFFFSV9DTlRIT0xEX0NOVEhPTERfUG9zKSAgICAgICAgIC8qITwgUUVJX1Q6OkNOVEhPTEQ6IENOVEhPTEQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ05UTEFUQ0hfQ05UTEFUQ0hfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNOVExBVENIOiBDTlRMQVRDSCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUUVJX0NOVExBVENIX0NOVExBVENIX01zayAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBRRUlfQ05UTEFUQ0hfQ05UTEFUQ0hfUG9zKSAgICAgICAvKiE8IFFFSV9UOjpDTlRMQVRDSDogQ05UTEFUQ0ggTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NOVENNUF9DTlRDTVBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDTlRDTVA6IENOVENNUCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFFSV9DTlRDTVBfQ05UQ01QX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUUVJX0NOVENNUF9DTlRDTVBfUG9zKSAgICAgICAgICAgLyohPCBRRUlfVDo6Q05UQ01QOiBDTlRDTVAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DTlRNQVhfQ05UTUFYX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q05UTUFYOiBDTlRNQVggUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBRRUlfQ05UTUFYX0NOVE1BWF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFFFSV9DTlRNQVhfQ05UTUFYX1BvcykgICAgICAgICAgIC8qITwgUUVJX1Q6OkNOVE1BWDogQ05UTUFYIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX05GQ0xLU0VMX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogTkZDTEtTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9ORkNMS1NFTF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IFFFSV9DVExfTkZDTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IE5GQ0xLU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9ORkRJU19Qb3MgICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IE5GRElTIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfTkZESVNfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX05GRElTX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBORkRJUyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfQ0hBRU5fUG9zICAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBDSEFFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0NIQUVOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9DSEFFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogQ0hBRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0NIQkVOX1BvcyAgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogQ0hCRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9DSEJFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfQ0hCRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IENIQkVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9JRFhFTl9Qb3MgICAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IElEWEVOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfSURYRU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0lEWEVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBJRFhFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfTU9ERV9Qb3MgICAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBNT0RFIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX01PREVfTXNrICAgICAgICAgICAgICAgICAoMHgzdWwgPDwgUUVJX0NUTF9NT0RFX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogTU9ERSBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0NIQUlOVl9Qb3MgICAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogQ0hBSU5WIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9DSEFJTlZfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfQ0hBSU5WX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IENIQUlOViBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9DSEJJTlZfUG9zICAgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IENIQklOViBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfQ0hCSU5WX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0NIQklOVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBDSEJJTlYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfSURYSU5WX1BvcyAgICAgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBJRFhJTlYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0lEWElOVl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9JRFhJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSURYSU5WIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX09WVU5JRU5fUG9zICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogT1ZVTklFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9PVlVOSUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfT1ZVTklFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IE9WVU5JRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9ESVJJRU5fUG9zICAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IERJUklFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfRElSSUVOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0RJUklFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBESVJJRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfQ01QSUVOX1BvcyAgICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBDTVBJRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0NNUElFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9DTVBJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogQ01QSUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0lEWElFTl9Qb3MgICAgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSURYSUVOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9JRFhJRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfSURYSUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IElEWElFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9IT0xEVE1SMF9Qb3MgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IEhPTERUTVIwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfSE9MRFRNUjBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0hPTERUTVIwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBIT0xEVE1SMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfSE9MRFRNUjFfUG9zICAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBIT0xEVE1SMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0hPTERUTVIxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9IT0xEVE1SMV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSE9MRFRNUjEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0hPTERUTVIyX1BvcyAgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSE9MRFRNUjIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9IT0xEVE1SMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfSE9MRFRNUjJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IEhPTERUTVIyIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9IT0xEVE1SM19Qb3MgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IEhPTERUTVIzIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfSE9MRFRNUjNfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0hPTERUTVIzX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBIT0xEVE1SMyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfSE9MRENOVF9Qb3MgICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBIT0xEQ05UIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0hPTERDTlRfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9IT0xEQ05UX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSE9MRENOVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX0lEWExBVEVOX1BvcyAgICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogSURYTEFURU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9JRFhMQVRFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfSURYTEFURU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IElEWExBVEVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX0NUTF9JRFhSTERFTl9Qb3MgICAgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IElEWFJMREVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFFSV9DVExfSURYUkxERU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfQ1RMX0lEWFJMREVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBJRFhSTERFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9DVExfQ01QRU5fUG9zICAgICAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6Q1RMOiBDTVBFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBRRUlfQ1RMX0NNUEVOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX0NUTF9DTVBFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogQ01QRU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfQ1RMX1FFSUVOX1BvcyAgICAgICAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OkNUTDogUUVJRU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX0NUTF9RRUlFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9DVExfUUVJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpDVEw6IFFFSUVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX1NUQVRVU19JRFhGX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpTVEFUVVM6IElEWEYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFFFSV9TVEFUVVNfSURYRl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBRRUlfU1RBVFVTX0lEWEZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6U1RBVFVTOiBJRFhGIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9TVEFUVVNfQ01QRl9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6U1RBVFVTOiBDTVBGIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBRRUlfU1RBVFVTX0NNUEZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX1NUQVRVU19DTVBGX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OlNUQVRVUzogQ01QRiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRRUlfU1RBVFVTX09WVU5GX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OlNUQVRVUzogT1ZVTkYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUUVJX1NUQVRVU19PVlVORl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFFFSV9TVEFUVVNfT1ZVTkZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpTVEFUVVM6IE9WVU5GIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUUVJX1NUQVRVU19ESVJDSEdGX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFFSV9UOjpTVEFUVVM6IERJUkNIR0YgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFFSV9TVEFUVVNfRElSQ0hHRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRRUlfU1RBVFVTX0RJUkNIR0ZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6U1RBVFVTOiBESVJDSEdGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFFSV9TVEFUVVNfRElSRl9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRRUlfVDo6U1RBVFVTOiBESVJGIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBRRUlfU1RBVFVTX0RJUkZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgUUVJX1NUQVRVU19ESVJGX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUUVJX1Q6OlNUQVRVUzogRElSRiBNYXNrICAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBRRUlfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFFFSSByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19RRUlfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3FzcGlfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvcXNwaV9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDdlZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3FzcGlfcmVnLmgKQEAgLTAsMCArMSw1ODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBxc3BpX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBRU1BJIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1FTUElfUkVHX0hfXworI2RlZmluZSBfX1FTUElfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBRdWFkIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgUVNQSSBRdWFkIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSBDb250cm9sbGVyKFFTUEkpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFFTUEkgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBRU1BJX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHgwMCAgUVNQSSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1BJRU4gICAgIHxRU1BJIFRyYW5zZmVyIENvbnRyb2wgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE1hc3RlciBtb2RlLCB0aGUgdHJhbnNmZXIgd2lsbCBzdGFydCB3aGVuIHRoZXJlIGlzIGRhdGEgaW4gdGhlIEZJRk8gYnVmZmVyIGFmdGVyIHRoaXMgYml0IGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU2xhdmUgbW9kZSwgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gcmVjZWl2ZSBkYXRhIHdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zZmVyIGNvbnRyb2wgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zZmVyIGNvbnRyb2wgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBCZWZvcmUgY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb25zIG9mIFFTUEl4X0NUTCwgUVNQSXhfQ0xLRElWLCBRU1BJeF9TU0NUTCBhbmQgUVNQSXhfRklGT0NUTCByZWdpc3RlcnMsIHVzZXIgc2hhbGwgY2xlYXIgdGhlIFNQSUVOIChRU1BJeF9DVExbMF0pIGFuZCBjb25maXJtIHRoZSBTUElFTlNUUyAoUVNQSXhfU1RBVFVTWzE1XSkgaXMgMC4KKyAgICAgKiB8WzFdICAgICB8UlhORUcgICAgIHxSZWNlaXZlIG9uIE5lZ2F0aXZlIEVkZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZWQgZGF0YSBpbnB1dCBzaWduYWwgaXMgbGF0Y2hlZCBvbiB0aGUgcmlzaW5nIGVkZ2Ugb2YgUVNQSSBidXMgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVkIGRhdGEgaW5wdXQgc2lnbmFsIGlzIGxhdGNoZWQgb24gdGhlIGZhbGxpbmcgZWRnZSBvZiBRU1BJIGJ1cyBjbG9jay4KKyAgICAgKiB8WzJdICAgICB8VFhORUcgICAgIHxUcmFuc21pdCBvbiBOZWdhdGl2ZSBFZGdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0dGVkIGRhdGEgb3V0cHV0IHNpZ25hbCBpcyBjaGFuZ2VkIG9uIHRoZSByaXNpbmcgZWRnZSBvZiBRU1BJIGJ1cyBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXR0ZWQgZGF0YSBvdXRwdXQgc2lnbmFsIGlzIGNoYW5nZWQgb24gdGhlIGZhbGxpbmcgZWRnZSBvZiBRU1BJIGJ1cyBjbG9jay4KKyAgICAgKiB8WzNdICAgICB8Q0xLUE9MICAgIHxDbG9jayBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRU1BJIGJ1cyBjbG9jayBpcyBpZGxlIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUVNQSSBidXMgY2xvY2sgaXMgaWRsZSBoaWdoLgorICAgICAqIHxbNzo0XSAgIHxTVVNQSVRWICAgfFN1c3BlbmQgSW50ZXJ2YWwgKE1hc3RlciBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmb3VyIGJpdHMgcHJvdmlkZSBjb25maWd1cmFibGUgc3VzcGVuZCBpbnRlcnZhbCBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIHRyYW5zbWl0L3JlY2VpdmUgdHJhbnNhY3Rpb24gaW4gYSB0cmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWZpbml0aW9uIG9mIHRoZSBzdXNwZW5kIGludGVydmFsIGlzIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHRoZSBsYXN0IGNsb2NrIGVkZ2Ugb2YgdGhlIHByZWNlZGluZyB0cmFuc2FjdGlvbiB3b3JkIGFuZCB0aGUgZmlyc3QgY2xvY2sgZWRnZSBvZiB0aGUgZm9sbG93aW5nIHRyYW5zYWN0aW9uIHdvcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVmYXVsdCB2YWx1ZSBpcyAweDMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcGVyaW9kIG9mIHRoZSBzdXNwZW5kIGludGVydmFsIGlzIG9idGFpbmVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIGVxdWF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfChTVVNQSVRWWzM6MF0gKyAwLjUpICogcGVyaW9kIG9mIFFTUElDTEsgY2xvY2sgY3ljbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFeGFtcGxlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNVU1BJVFYgPSAweDAgLi4uLiAwLjUgUVNQSUNMSyBjbG9jayBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHgxIC4uLi4gMS41IFFTUElDTEsgY2xvY2sgY3ljbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Li4uLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHhFIC4uLi4gMTQuNSBRU1BJQ0xLIGNsb2NrIGN5Y2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNVU1BJVFYgPSAweEYgLi4uLiAxNS41IFFTUElDTEsgY2xvY2sgY3ljbGUuCisgICAgICogfFsxMjo4XSAgfERXSURUSCAgICB8RGF0YSBXaWR0aAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgc3BlY2lmaWVzIGhvdyBtYW55IGJpdHMgY2FuIGJlIHRyYW5zbWl0dGVkIC8gcmVjZWl2ZWQgaW4gb25lIHRyYW5zYWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIG1pbmltdW0gYml0IGxlbmd0aCBpcyA4IGJpdHMgYW5kIGNhbiB1cCB0byAzMiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERXSURUSCA9IDB4MDggLi4uLiA4IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RFdJRFRIID0gMHgwOSAuLi4uIDkgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERXSURUSCA9IDB4MUYgLi4uLiAzMSBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERXSURUSCA9IDB4MDAgLi4uLiAzMiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEZvciBRU1BJMH5RU1BJMywgdGhpcyBiaXQgZmllbGQgd2lsbCBkZWNpZGUgdGhlIGRlcHRoIG9mIFRYL1JYIEZJRk8gY29uZmlndXJhdGlvbiBpbiBRU1BJIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVyZWZvcmUsIGNoYW5naW5nIHRoaXMgYml0IGZpZWxkIHdpbGwgY2xlYXIgVFgvUlggRklGTyBieSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IGluIFFTUEkwflFTUEkzLgorICAgICAqIHxbMTNdICAgIHxMU0IgICAgICAgfFNlbmQgTFNCIEZpcnN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBNU0IsIHdoaWNoIGJpdCBvZiB0cmFuc21pdC9yZWNlaXZlIHJlZ2lzdGVyIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgRFdJRFRILCBpcyB0cmFuc21pdHRlZC9yZWNlaXZlZCBmaXJzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIExTQiwgYml0IDAgb2YgdGhlIFFTUEkgVFggcmVnaXN0ZXIsIGlzIHNlbnQgZmlyc3QgdG8gdGhlIFFTUEkgZGF0YSBvdXRwdXQgcGluLCBhbmQgdGhlIGZpcnN0IGJpdCByZWNlaXZlZCBmcm9tIHRoZSBRU1BJIGRhdGEgaW5wdXQgcGluIHdpbGwgYmUgcHV0IGluIHRoZSBMU0IgcG9zaXRpb24gb2YgdGhlIFJYIHJlZ2lzdGVyIChiaXQgMCBvZiBRU1BJX1JYKS4KKyAgICAgKiB8WzE0XSAgICB8SEFMRkRQWCAgIHxRU1BJIEhhbGYtZHVwbGV4IFRyYW5zZmVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIHNlbGVjdCBmdWxsLWR1cGxleCBvciBoYWxmLWR1cGxleCBmb3IgUVNQSSB0cmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXQgZmllbGQgREFURElSIChRU1BJeF9DVExbMjBdKSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGRhdGEgZGlyZWN0aW9uIGluIGhhbGYtZHVwbGV4IHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRU1BJIG9wZXJhdGVzIGluIGZ1bGwtZHVwbGV4IHRyYW5zZmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRU1BJIG9wZXJhdGVzIGluIGhhbGYtZHVwbGV4IHRyYW5zZmVyLgorICAgICAqIHxbMTVdICAgIHxSWE9OTFkgICAgfFJlY2VpdmUtb25seSBNb2RlIEVuYWJsZSBCaXQgKE1hc3RlciBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGlzIG9ubHkgYXZhaWxhYmxlIGluIE1hc3RlciBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gcmVjZWl2ZS1vbmx5IG1vZGUsIFFTUEkgTWFzdGVyIHdpbGwgZ2VuZXJhdGUgUVNQSSBidXMgY2xvY2sgY29udGludW91c2x5IGZvciByZWNlaXZpbmcgZGF0YSBiaXQgZnJvbSBRU1BJIHNsYXZlIGRldmljZSBhbmQgYXNzZXJ0IHRoZSBCVVNZIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZS1vbmx5IG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUtb25seSBtb2RlIEVuYWJsZWQuCisgICAgICogfFsxNl0gICAgfFRXT0JJVCAgICB8Mi1iaXQgVHJhbnNmZXIgTW9kZSBFbmFibGUgQml0IChPbmx5IFN1cHBvcnRlZCBpbiBRU1BJMCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMi1CaXQgVHJhbnNmZXIgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMi1CaXQgVHJhbnNmZXIgbW9kZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gMi1CaXQgVHJhbnNmZXIgbW9kZSBpcyBlbmFibGVkLCB0aGUgZmlyc3Qgc2VyaWFsIHRyYW5zbWl0dGVkIGJpdCBkYXRhIGlzIGZyb20gdGhlIGZpcnN0IEZJRk8gYnVmZmVyIGRhdGEsIGFuZCB0aGUgMm5kIHNlcmlhbCB0cmFuc21pdHRlZCBiaXQgZGF0YSBpcyBmcm9tIHRoZSBzZWNvbmQgRklGTyBidWZmZXIgZGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFzIHRoZSBzYW1lIGFzIHRyYW5zbWl0dGVkIGZ1bmN0aW9uLCB0aGUgZmlyc3QgcmVjZWl2ZWQgYml0IGRhdGEgaXMgc3RvcmVkIGludG8gdGhlIGZpcnN0IEZJRk8gYnVmZmVyIGFuZCB0aGUgMm5kIHJlY2VpdmVkIGJpdCBkYXRhIGlzIHN0b3JlZCBpbnRvIHRoZSBzZWNvbmQgRklGTyBidWZmZXIgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgKiB8WzE3XSAgICB8VU5JVElFTiAgIHxVbml0IFRyYW5zZmVyIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFTUEkgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFTUEkgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8U0xBVkUgICAgIHxTbGF2ZSBNb2RlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzdGVyIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUuCisgICAgICogfFsxOV0gICAgfFJFT1JERVIgICB8Qnl0ZSBSZW9yZGVyIEZ1bmN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnl0ZSBSZW9yZGVyIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCeXRlIFJlb3JkZXIgZnVuY3Rpb24gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgYnl0ZSBzdXNwZW5kIGludGVydmFsIHdpbGwgYmUgaW5zZXJ0ZWQgYW1vbmcgZWFjaCBieXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBlcmlvZCBvZiB0aGUgYnl0ZSBzdXNwZW5kIGludGVydmFsIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgU1VTUElUVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBCeXRlIFJlb3JkZXIgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaWYgRFdJRFRIIGlzIGRlZmluZWQgYXMgMTYsIDI0LCBhbmQgMzIgYml0cy4KKyAgICAgKiB8WzIwXSAgICB8REFURElSICAgIHxEYXRhIFBvcnQgRGlyZWN0aW9uIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgZGF0YSBpbnB1dC9vdXRwdXQgZGlyZWN0aW9uIGluIGhhbGYtZHVwbGV4IHRyYW5zZmVyIGFuZCBEdWFsL1F1YWQgdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUVNQSSBkYXRhIGlzIGlucHV0IGRpcmVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUVNQSSBkYXRhIGlzIG91dHB1dCBkaXJlY3Rpb24uCisgICAgICogfFsyMV0gICAgfERVQUxJT0VOICB8RHVhbCBJL08gTW9kZSBFbmFibGUgQml0IChPbmx5IFN1cHBvcnRlZCBpbiBRU1BJMCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRHVhbCBJL08gbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRHVhbCBJL08gbW9kZSBFbmFibGVkLgorICAgICAqIHxbMjJdICAgIHxRVUFESU9FTiAgfFF1YWQgSS9PIE1vZGUgRW5hYmxlIEJpdCAoT25seSBTdXBwb3J0ZWQgaW4gUVNQSTApCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFF1YWQgSS9PIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFF1YWQgSS9PIG1vZGUgRW5hYmxlZC4KKyAgICAgKiBAdmFyIFFTUElfVDo6Q0xLRElWCisgICAgICogT2Zmc2V0OiAweDA0ICBRU1BJIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbODowXSAgIHxESVZJREVSICAgfENsb2NrIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsdWUgaW4gdGhpcyBmaWVsZCBpcyB0aGUgZnJlcXVlbmN5IGRpdmlkZXIgZm9yIGdlbmVyYXRpbmcgdGhlIHBlcmlwaGVyYWwgY2xvY2ssIGZzcGlfZWNsaywgYW5kIHRoZSBRU1BJIGJ1cyBjbG9jayBvZiBRU1BJIE1hc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmcmVxdWVuY3kgaXMgb2J0YWluZWQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgZXF1YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8d2hlcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxpcyB0aGUgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2UsIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIsIENMS19DTEtTRUwyLgorICAgICAqIEB2YXIgUVNQSV9UOjpTU0NUTAorICAgICAqIE9mZnNldDogMHgwOCAgUVNQSSBTbGF2ZSBTZWxlY3QgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNTICAgICAgICB8U2xhdmUgU2VsZWN0aW9uIENvbnRyb2wgKE1hc3RlciBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEFVVE9TUyBiaXQgaXMgY2xlYXJlZCB0byAwLAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBzZXQgdGhlIFFTUEl4X1NTIGxpbmUgdG8gaW5hY3RpdmUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IHNldCB0aGUgUVNQSXhfU1MgbGluZSB0byBhY3RpdmUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIEFVVE9TUyBiaXQgaXMgc2V0IHRvIDEsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEtlZXAgdGhlIFFTUEl4X1NTIGxpbmUgYXQgaW5hY3RpdmUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFTUEl4X1NTIGxpbmUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRyaXZlbiB0byBhY3RpdmUgc3RhdGUgZm9yIHRoZSBkdXJhdGlvbiBvZiBkYXRhIHRyYW5zZmVyLCBhbmQgd2lsbCBiZSBkcml2ZW4gdG8gaW5hY3RpdmUgc3RhdGUgZm9yIHRoZSByZXN0IG9mIHRoZSB0aW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdGl2ZSBzdGF0ZSBvZiBRU1BJeF9TUyBpcyBzcGVjaWZpZWQgaW4gU1NBQ1RQT0wgKFFTUEl4X1NTQ1RMWzJdKS4KKyAgICAgKiB8WzJdICAgICB8U1NBQ1RQT0wgIHxTbGF2ZSBTZWxlY3Rpb24gQWN0aXZlIFBvbGFyaXR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgYWN0aXZlIHBvbGFyaXR5IG9mIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgKFFTUEl4X1NTKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgUVNQSXhfU1MgaXMgYWN0aXZlIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgUVNQSXhfU1MgaXMgYWN0aXZlIGhpZ2guCisgICAgICogfFszXSAgICAgfEFVVE9TUyAgICB8QXV0b21hdGljIFNsYXZlIFNlbGVjdGlvbiBGdW5jdGlvbiBFbmFibGUgQml0IChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbiBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNsYXZlIHNlbGVjdGlvbiBzaWduYWwgd2lsbCBiZSBhc3NlcnRlZC9kZS1hc3NlcnRlZCBhY2NvcmRpbmcgdG8gU1MgKFFTUEl4X1NTQ1RMWzBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxTTFYzV0lSRSAgfFNsYXZlIDMtd2lyZSBNb2RlIEVuYWJsZSBCaXQgKE9ubHkgU3VwcG9ydGVkIGluIFFTUEkwKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNsYXZlIDMtd2lyZSBtb2RlIGlzIG9ubHkgYXZhaWxhYmxlIGluIFFTUEkwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU2xhdmUgMy13aXJlIG1vZGUsIHRoZSBRU1BJIGNvbnRyb2xsZXIgY2FuIHdvcmsgd2l0aCAzLXdpcmUgaW50ZXJmYWNlIGluY2x1ZGluZyBRU1BJMF9DTEssIFFTUEkwX01JU08gYW5kIFFTUEkwX01PU0kgcGlucy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gNC13aXJlIGJpLWRpcmVjdGlvbiBpbnRlcmZhY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IDMtd2lyZSBiaS1kaXJlY3Rpb24gaW50ZXJmYWNlLgorICAgICAqIHxbNV0gICAgIHxTTFZUT0lFTiAgfFNsYXZlIE1vZGUgVGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBCaXQgKE9ubHkgU3VwcG9ydGVkIGluIFFTUEkwKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBtb2RlIHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgbW9kZSB0aW1lLW91dCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzZdICAgICB8U0xWVE9SU1QgIHxTbGF2ZSBNb2RlIFRpbWUtb3V0IFJlc2V0IENvbnRyb2wgKE9ubHkgU3VwcG9ydGVkIGluIFFTUEkwKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXaGVuIFNsYXZlIG1vZGUgdGltZS1vdXQgZXZlbnQgb2NjdXJzLCB0aGUgVFggYW5kIFJYIGNvbnRyb2wgY2lyY3VpdCB3aWxsIG5vdCBiZSByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBTbGF2ZSBtb2RlIHRpbWUtb3V0IGV2ZW50IG9jY3VycywgdGhlIFRYIGFuZCBSWCBjb250cm9sIGNpcmN1aXQgd2lsbCBiZSByZXNldCBieSBoYXJkd2FyZS4KKyAgICAgKiB8WzhdICAgICB8U0xWQkVJRU4gIHxTbGF2ZSBNb2RlIEJpdCBDb3VudCBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBtb2RlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUgYml0IGNvdW50IGVycm9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbOV0gICAgIHxTTFZVUklFTiAgfFNsYXZlIE1vZGUgVFggVW5kZXIgUnVuIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIG1vZGUgVFggdW5kZXIgcnVuIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgbW9kZSBUWCB1bmRlciBydW4gaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMl0gICAgfFNTQUNUSUVOICB8U2xhdmUgU2VsZWN0IEFjdGl2ZSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBzZWxlY3QgYWN0aXZlIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgc2VsZWN0IGFjdGl2ZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEzXSAgICB8U1NJTkFJRU4gIHxTbGF2ZSBTZWxlY3QgSW5hY3RpdmUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgc2VsZWN0IGluYWN0aXZlIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgc2VsZWN0IGluYWN0aXZlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMzE6MTZdIHxTTFZUT0NOVCAgfFNsYXZlIE1vZGUgVGltZS1vdXQgUGVyaW9kIChPbmx5IFN1cHBvcnRlZCBpbiBRU1BJMCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTbGF2ZSBtb2RlLCB0aGVzZSBiaXRzIGluZGljYXRlIHRoZSB0aW1lLW91dCBwZXJpb2Qgd2hlbiB0aGVyZSBpcyBidXMgY2xvY2sgaW5wdXQgZHVyaW5nIHNsYXZlIHNlbGVjdCBhY3RpdmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2xvY2sgc291cmNlIG9mIHRoZSB0aW1lLW91dCBjb3VudGVyIGlzIFNsYXZlIHBlcmlwaGVyYWwgY2xvY2sKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgdmFsdWUgaXMgMCwgaXQgaW5kaWNhdGVzIHRoZSBzbGF2ZSBtb2RlIHRpbWUtb3V0IGZ1bmN0aW9uIGlzIGRpc2FibGVkLgorICAgICAqIEB2YXIgUVNQSV9UOjpQRE1BQ1RMCisgICAgICogT2Zmc2V0OiAweDBDICBRU1BJIFBETUEgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFRYUERNQUVOICB8VHJhbnNtaXQgUERNQSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IFBETUEgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBRU1BJIE1hc3RlciBtb2RlIHdpdGggZnVsbCBkdXBsZXggdHJhbnNmZXIsIGlmIGJvdGggVFggYW5kIFJYIFBETUEgZnVuY3Rpb25zIGFyZSBlbmFibGVkLCBSWCBQRE1BIGZ1bmN0aW9uIGNhbm5vdCBiZSBlbmFibGVkIHByaW9yIHRvIFRYIFBETUEgZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBlbmFibGUgVFggUERNQSBmdW5jdGlvbiBmaXJzdGx5IG9yIGVuYWJsZSBib3RoIGZ1bmN0aW9ucyBzaW11bHRhbmVvdXNseS4KKyAgICAgKiB8WzFdICAgICB8UlhQRE1BRU4gIHxSZWNlaXZlIFBETUEgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgUERNQSBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxQRE1BUlNUICAgfFBETUEgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgUERNQSBjb250cm9sIGxvZ2ljIG9mIHRoZSBRU1BJIGNvbnRyb2xsZXIuIFRoaXMgYml0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIHRvIDAuCisgICAgICogQHZhciBRU1BJX1Q6OkZJRk9DVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIFFTUEkgRklGTyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UlhSU1QgICAgIHxSZWNlaXZlIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgcmVjZWl2ZSBGSUZPIHBvaW50ZXIgYW5kIHJlY2VpdmUgY2lyY3VpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBSWEZVTEwgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGFuZCB0aGUgUlhFTVBUWSBiaXQgd2lsbCBiZSBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGJ5IGhhcmR3YXJlIGFib3V0IDMgc3lzdGVtIGNsb2NrIGN5Y2xlcyArIDIgcGVyaXBoZXJhbCBjbG9jayBjeWNsZXMgYWZ0ZXIgaXQgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiByZWFkIFRYUlhSU1QgKFFTUEl4X1NUQVRVU1syM10pIHRvIGNoZWNrIGlmIHJlc2V0IGlzIGFjY29tcGxpc2hlZCBvciBub3QuCisgICAgICogfFsxXSAgICAgfFRYUlNUICAgICB8VHJhbnNtaXQgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0cmFuc21pdCBGSUZPIHBvaW50ZXIgYW5kIHRyYW5zbWl0IGNpcmN1aXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVFhGVUxMIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhbmQgdGhlIFRYRU1QVFkgYml0IHdpbGwgYmUgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhYm91dCAzIHN5c3RlbSBjbG9jayBjeWNsZXMgKyAyIHBlcmlwaGVyYWwgY2xvY2sgY3ljbGVzIGFmdGVyIGl0IGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gcmVhZCBUWFJYUlNUIChRU1BJeF9TVEFUVVNbMjNdKSB0byBjaGVjayBpZiByZXNldCBpcyBhY2NvbXBsaXNoZWQgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFRYIHVuZGVyZmxvdyBldmVudCBvY2N1cnMgaW4gUVNQSSBTbGF2ZSBtb2RlLCB0aGlzIGJpdCBjYW4gYmUgdXNlZCB0byBtYWtlIFFTUEkgcmV0dXJuIHRvIGlkbGUgc3RhdGUuCisgICAgICogfFsyXSAgICAgfFJYVEhJRU4gICB8UmVjZWl2ZSBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSWCBGSUZPIHRocmVzaG9sZCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJYIEZJRk8gdGhyZXNob2xkIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxUWFRISUVOICAgfFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRYIEZJRk8gdGhyZXNob2xkIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVFggRklGTyB0aHJlc2hvbGQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFJYVE9JRU4gICB8U2xhdmUgUmVjZWl2ZSBUaW1lLW91dCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSB0aW1lLW91dCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8UlhPVklFTiAgIHxSZWNlaXZlIEZJRk8gT3ZlcnJ1biBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBvdmVycnVuIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxUWFVGUE9MICAgfFRYIFVuZGVyZmxvdyBEYXRhIFBvbGFyaXR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBRU1BJIGRhdGEgb3V0IGlzIGtlZXAgMCBpZiB0aGVyZSBpcyBUWCB1bmRlcmZsb3cgZXZlbnQgaW4gU2xhdmUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIFFTUEkgZGF0YSBvdXQgaXMga2VlcCAxIGlmIHRoZXJlIGlzIFRYIHVuZGVyZmxvdyBldmVudCBpbiBTbGF2ZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MS4gVGhlIFRYIHVuZGVyZmxvdyBldmVudCBvY2N1cnMgaWYgdGhlcmUgaXMgbm8gYW55IGRhdGEgaW4gVFggRklGTyB3aGVuIHRoZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwyLiBXaGVuIFRYIHVuZGVyZmxvdyBldmVudCBvY2N1cnMsIFFTUEl4X01JU08gcGluIHN0YXRlIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGlzIHNldHRpbmcgZXZlbiB0aG91Z2ggVFggRklGTyBpcyBub3QgZW1wdHkgYWZ0ZXJ3YXJkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSBzdG9yZWQgaW4gVFggRklGTyB3aWxsIGJlIHNlbnQgdGhyb3VnaCBRU1BJeF9NSVNPIHBpbiBpbiB0aGUgbmV4dCB0cmFuc2ZlciBmcmFtZS4KKyAgICAgKiB8WzddICAgICB8VFhVRklFTiAgIHxUWCBVbmRlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRYIHVuZGVyZmxvdyBldmVudCBvY2N1cnMgaW4gU2xhdmUgbW9kZSwgVFhVRklGIChRU1BJeF9TVEFUVVNbMTldKSB3aWxsIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUgdGhlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8UlhGQkNMUiAgIHxSZWNlaXZlIEZJRk8gQnVmZmVyIENsZWFyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgcmVjZWl2ZSBGSUZPIHBvaW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUlhGVUxMIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhbmQgdGhlIFJYRU1QVFkgYml0IHdpbGwgYmUgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhYm91dCAxIHN5c3RlbSBjbG9jayBhZnRlciBpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgUlggc2hpZnQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgY2xlYXJlZC4KKyAgICAgKiB8WzldICAgICB8VFhGQkNMUiAgIHxUcmFuc21pdCBGSUZPIEJ1ZmZlciBDbGVhcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIHRyYW5zbWl0IEZJRk8gcG9pbnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBUWEZVTEwgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGFuZCB0aGUgVFhFTVBUWSBiaXQgd2lsbCBiZSBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGJ5IGhhcmR3YXJlIGFib3V0IDEgc3lzdGVtIGNsb2NrIGFmdGVyIGl0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBUWCBzaGlmdCByZWdpc3RlciB3aWxsIG5vdCBiZSBjbGVhcmVkLgorICAgICAqIHxbMjY6MjRdIHxSWFRIICAgICAgfFJlY2VpdmUgRklGTyBUaHJlc2hvbGQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgdmFsaWQgZGF0YSBjb3VudCBvZiB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUgUlhUSCBzZXR0aW5nLCB0aGUgUlhUSElGIGJpdCB3aWxsIGJlIHNldCB0byAxLCBlbHNlIHRoZSBSWFRISUYgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFFTUEkwflFTUEkzLCB0aGUgTVNCIG9mIHRoaXMgYml0IGZpZWxkIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGlsZSBRU1BJIG1vZGUgOH4xNiBiaXRzIG9mIGRhdGEgbGVuZ3RoLgorICAgICAqIHxbMzA6MjhdIHxUWFRIICAgICAgfFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHZhbGlkIGRhdGEgY291bnQgb2YgdGhlIHRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgVFhUSCBzZXR0aW5nLCB0aGUgVFhUSElGIGJpdCB3aWxsIGJlIHNldCB0byAxLCBlbHNlIHRoZSBUWFRISUYgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFFTUEkwflFTUEkzLCB0aGUgTVNCIG9mIHRoaXMgYml0IGZpZWxkIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGlsZSBRU1BJIG1vZGUgOH4xNiBiaXRzIG9mIGRhdGEgbGVuZ3RoLgorICAgICAqIEB2YXIgUVNQSV9UOjpTVEFUVVMKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIFFTUEkgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlVTWSAgICAgIHxCdXN5IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRU1BJIGNvbnRyb2xsZXIgaXMgaW4gaWRsZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUVNQSSBjb250cm9sbGVyIGlzIGluIGJ1c3kgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZvbGxvd2luZyBsaXN0aW5nIGFyZSB0aGUgYnVzIGJ1c3kgY29uZGl0aW9uczoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxhLiBRU1BJeF9DVExbMF0gPSAxIGFuZCBUWEVNUFRZID0gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxiCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFFTUEkgTWFzdGVyIG1vZGUsIFFTUEl4X0NUTFswXSA9IDEgYW5kIFRYRU1QVFkgPSAxIGJ1dCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBub3QgZmluaXNoZWQgeWV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGMuIEZvciBRU1BJIE1hc3RlciBtb2RlLCBRU1BJeF9DVExbMF0gPSAxIGFuZCBSWE9OTFkgPSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFFTUEkgU2xhdmUgbW9kZSwgdGhlIFFTUEl4X0NUTFswXSA9IDEgYW5kIHRoZXJlIGlzIHNlcmlhbCBjbG9jayBpbnB1dCBpbnRvIHRoZSBRU1BJIGNvcmUgbG9naWMgd2hlbiBzbGF2ZSBzZWxlY3QgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFFTUEkgU2xhdmUgbW9kZSwgdGhlIFFTUEl4X0NUTFswXSA9IDEgYW5kIHRoZSB0cmFuc21pdCBidWZmZXIgb3IgdHJhbnNtaXQgc2hpZnQgcmVnaXN0ZXIgaXMgbm90IGVtcHR5IGV2ZW4gaWYgdGhlIHNsYXZlIHNlbGVjdCBpcyBpbmFjdGl2ZS4KKyAgICAgKiB8WzFdICAgICB8VU5JVElGICAgIHxVbml0IFRyYW5zZmVyIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHRyYW5zYWN0aW9uIGhhcyBiZWVuIGZpbmlzaGVkIHNpbmNlIHRoaXMgYml0IHdhcyBjbGVhcmVkIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFTUEkgY29udHJvbGxlciBoYXMgZmluaXNoZWQgb25lIHVuaXQgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzJdICAgICB8U1NBQ1RJRiAgIHxTbGF2ZSBTZWxlY3QgQWN0aXZlIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHNlbGVjdCBhY3RpdmUgaW50ZXJydXB0IHdhcyBjbGVhcmVkIG9yIG5vdCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgc2VsZWN0IGFjdGl2ZSBpbnRlcnJ1cHQgZXZlbnQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT25seSBhdmFpbGFibGUgaW4gU2xhdmUgbW9kZS4gVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzNdICAgICB8U1NJTkFJRiAgIHxTbGF2ZSBTZWxlY3QgSW5hY3RpdmUgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgc2VsZWN0IGluYWN0aXZlIGludGVycnVwdCB3YXMgY2xlYXJlZCBvciBub3Qgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZXZlbnQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT25seSBhdmFpbGFibGUgaW4gU2xhdmUgbW9kZS4gVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzRdICAgICB8U1NMSU5FICAgIHxTbGF2ZSBTZWxlY3QgTGluZSBCdXMgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzbGF2ZSBzZWxlY3QgbGluZSBzdGF0dXMgaXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHNsYXZlIHNlbGVjdCBsaW5lIHN0YXR1cyBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgYXZhaWxhYmxlIGluIFNsYXZlIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBTU0FDVFBPTCAoUVNQSXhfU1NDVExbMl0pIGlzIHNldCAwLCBhbmQgdGhlIFNTTElORSBpcyAxLCB0aGUgUVNQSSBzbGF2ZSBzZWxlY3QgaXMgaW4gaW5hY3RpdmUgc3RhdHVzLgorICAgICAqIHxbNV0gICAgIHxTTFZUT0lGICAgfFNsYXZlIFRpbWUtb3V0IEludGVycnVwdCBGbGFnIChPbmx5IFN1cHBvcnRlZCBpbiBRU1BJMCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBzbGF2ZSBzZWxlY3QgaXMgYWN0aXZlIGFuZCB0aGUgdmFsdWUgb2YgU0xWVE9DTlQgaXMgbm90IDAsIGFzIHRoZSBidXMgY2xvY2sgaXMgZGV0ZWN0ZWQsIHRoZSBzbGF2ZSB0aW1lLW91dCBjb3VudGVyIGluIFFTUEkgY29udHJvbGxlciBsb2dpYyB3aWxsIGJlIHN0YXJ0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSB2YWx1ZSBvZiB0aW1lLW91dCBjb3VudGVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2YgU0xWVE9DTlQgKFFTUElfU1NDVExbMzE6MTZdKSBiZWZvcmUgb25lIHRyYW5zYWN0aW9uIGlzIGRvbmUsIHRoZSBzbGF2ZSB0aW1lLW91dCBpbnRlcnJ1cHQgZXZlbnQgd2lsbCBiZSBhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgdGltZS1vdXQgaXMgbm90IGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgdGltZS1vdXQgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs2XSAgICAgfFNMVkJFSUYgICB8U2xhdmUgTW9kZSBCaXQgQ291bnQgRXJyb3IgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTbGF2ZSBtb2RlLCB3aGVuIHRoZSBzbGF2ZSBzZWxlY3QgbGluZSBnb2VzIHRvIGluYWN0aXZlIHN0YXRlLCBpZiBiaXQgY291bnRlciBpcyBtaXNtYXRjaCB3aXRoIERXSURUSCwgdGhpcyBpbnRlcnJ1cHQgZmxhZyB3aWxsIGJlIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBTbGF2ZSBtb2RlIGJpdCBjb3VudCBlcnJvciBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgbW9kZSBiaXQgY291bnQgZXJyb3IgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHRoZSBzbGF2ZSBzZWxlY3QgYWN0aXZlIGJ1dCB0aGVyZSBpcyBubyBhbnkgYnVzIGNsb2NrIGlucHV0LCB0aGUgU0xWQkVJRiBhbHNvIGFjdGl2ZSB3aGVuIHRoZSBzbGF2ZSBzZWxlY3QgZ29lcyB0byBpbmFjdGl2ZSBzdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs3XSAgICAgfFNMVlVSSUYgICB8U2xhdmUgTW9kZSBUWCBVbmRlciBSdW4gSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTbGF2ZSBtb2RlLCBpZiBUWCB1bmRlcmZsb3cgZXZlbnQgb2NjdXJzIGFuZCB0aGUgc2xhdmUgc2VsZWN0IGxpbmUgZ29lcyB0byBpbmFjdGl2ZSBzdGF0ZSwgdGhpcyBpbnRlcnJ1cHQgZmxhZyB3aWxsIGJlIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBTbGF2ZSBUWCB1bmRlciBydW4gZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIFRYIHVuZGVyIHJ1biBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzhdICAgICB8UlhFTVBUWSAgIHxSZWNlaXZlIEZJRk8gQnVmZmVyIEVtcHR5IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgKiB8WzldICAgICB8UlhGVUxMICAgIHxSZWNlaXZlIEZJRk8gQnVmZmVyIEZ1bGwgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgZnVsbC4KKyAgICAgKiB8WzEwXSAgICB8UlhUSElGICAgIHxSZWNlaXZlIEZJRk8gVGhyZXNob2xkIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB2YWxpZCBkYXRhIGNvdW50IHdpdGhpbiB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNldHRpbmcgdmFsdWUgb2YgUlhUSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHZhbGlkIGRhdGEgY291bnQgd2l0aGluIHRoZSByZWNlaXZlIEZJRk8gYnVmZmVyIGlzIGxhcmdlciB0aGFuIHRoZSBzZXR0aW5nIHZhbHVlIG9mIFJYVEguCisgICAgICogfFsxMV0gICAgfFJYT1ZJRiAgICB8UmVjZWl2ZSBGSUZPIE92ZXJydW4gSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSByZWNlaXZlIEZJRk8gYnVmZmVyIGlzIGZ1bGwsIHRoZSBmb2xsb3ctdXAgZGF0YSB3aWxsIGJlIGRyb3BwZWQgYW5kIHRoaXMgYml0IHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEZJRk8gaXMgb3ZlcnJ1bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBGSUZPIGlzIG92ZXJydW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzEyXSAgICB8UlhUT0lGICAgIHxSZWNlaXZlIFRpbWUtb3V0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlY2VpdmUgRklGTyB0aW1lLW91dCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBub3QgZW1wdHkgYW5kIG5vIHJlYWQgb3BlcmF0aW9uIG9uIHJlY2VpdmUgRklGTyBidWZmZXIgb3ZlciA2NCBRU1BJIHBlcmlwaGVyYWwgY2xvY2sgcGVyaW9kcyBpbiBNYXN0ZXIgbW9kZSBvciBvdmVyIDU3NiBRU1BJIHBlcmlwaGVyYWwgY2xvY2sgcGVyaW9kcyBpbiBTbGF2ZSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgcmVjZWl2ZWQgRklGTyBidWZmZXIgaXMgcmVhZCBieSBzb2Z0d2FyZSwgdGhlIHRpbWUtb3V0IHN0YXR1cyB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMTVdICAgIHxTUElFTlNUUyAgfFFTUEkgRW5hYmxlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgUVNQSSBjb250cm9sbGVyIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgUVNQSSBjb250cm9sbGVyIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIFFTUEkgcGVyaXBoZXJhbCBjbG9jayBpcyBhc3luY2hyb25vdXMgd2l0aCB0aGUgc3lzdGVtIGNsb2NrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoZSBRU1BJIGNvbnRyb2wgbG9naWMgaXMgZGlzYWJsZWQsIHRoaXMgYml0IGluZGljYXRlcyB0aGUgcmVhbCBzdGF0dXMgb2YgUVNQSSBjb250cm9sbGVyLgorICAgICAqIHxbMTZdICAgIHxUWEVNUFRZICAgfFRyYW5zbWl0IEZJRk8gQnVmZmVyIEVtcHR5IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBub3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGVtcHR5LgorICAgICAqIHxbMTddICAgIHxUWEZVTEwgICAgfFRyYW5zbWl0IEZJRk8gQnVmZmVyIEZ1bGwgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIG5vdCBmdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBmdWxsLgorICAgICAqIHxbMThdICAgIHxUWFRISUYgICAgfFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB2YWxpZCBkYXRhIGNvdW50IHdpdGhpbiB0aGUgdHJhbnNtaXQgRklGTyBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIHNldHRpbmcgdmFsdWUgb2YgVFhUSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHZhbGlkIGRhdGEgY291bnQgd2l0aGluIHRoZSB0cmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNldHRpbmcgdmFsdWUgb2YgVFhUSC4KKyAgICAgKiB8WzE5XSAgICB8VFhVRklGICAgIHxUWCBVbmRlcmZsb3cgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBUWCB1bmRlcmZsb3cgZXZlbnQgb2NjdXJzLCB0aGlzIGJpdCB3aWxsIGJlIHNldCB0byAxLCB0aGUgc3RhdGUgb2YgZGF0YSBvdXRwdXQgcGluIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgVFhVRlBPTC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBObyBkYXRhIGluIFRyYW5zbWl0IEZJRk8gYW5kIFRYIHNoaWZ0IHJlZ2lzdGVyIHdoZW4gdGhlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUgMTogVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlIDI6IElmIHJlc2V0IHNsYXZlJ3MgdHJhbnNtaXNzaW9uIGNpcmN1aXQgd2hlbiBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGlzIGFjdGl2ZSwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IHRvIDEgYWZ0ZXIgMiBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcyArIDMgc3lzdGVtIGNsb2NrIGN5Y2xlcyBzaW5jZSB0aGUgcmVzZXQgb3BlcmF0aW9uIGlzIGRvbmUuCisgICAgICogfFsyM10gICAgfFRYUlhSU1QgICB8VFggb3IgUlggUmVzZXQgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZXNldCBmdW5jdGlvbiBvZiBUWFJTVCBvciBSWFJTVCBpcyBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEb2luZyB0aGUgcmVzZXQgZnVuY3Rpb24gb2YgVFhSU1Qgb3IgUlhSU1QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQm90aCB0aGUgcmVzZXQgb3BlcmF0aW9ucyBvZiBUWFJTVCBhbmQgUlhSU1QgbmVlZCAzIHN5c3RlbSBjbG9jayBjeWNsZXMgKyAyIHBlcmlwaGVyYWwgY2xvY2sgY3ljbGVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGlzIGJpdCB0byBtb25pdG9yIHRoZSByZXNldCBmdW5jdGlvbiBpcyBkb2luZyBvciBkb25lLgorICAgICAqIHxbMjc6MjRdIHxSWENOVCAgICAgfFJlY2VpdmUgRklGTyBEYXRhIENvdW50IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaW5kaWNhdGVzIHRoZSB2YWxpZCBkYXRhIGNvdW50IG9mIHJlY2VpdmUgRklGTyBidWZmZXIuCisgICAgICogfFszMToyOF0gfFRYQ05UICAgICB8VHJhbnNtaXQgRklGTyBEYXRhIENvdW50IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaW5kaWNhdGVzIHRoZSB2YWxpZCBkYXRhIGNvdW50IG9mIHRyYW5zbWl0IEZJRk8gYnVmZmVyLgorICAgICAqIEB2YXIgUVNQSV9UOjpUWAorICAgICAqIE9mZnNldDogMHgyMCAgUVNQSSBEYXRhIFRyYW5zbWl0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8VFggICAgICAgIHxEYXRhIFRyYW5zbWl0IFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRhdGEgdHJhbnNtaXQgcmVnaXN0ZXJzIHBhc3MgdGhyb3VnaCB0aGUgdHJhbnNtaXR0ZWQgZGF0YSBpbnRvIHRoZSA4LWxldmVsIHRyYW5zbWl0IEZJRk8gYnVmZmVycworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBudW1iZXIgb2YgdmFsaWQgYml0cyBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIERXSURUSCAoUVNQSXhfQ1RMWzEyOjhdKSBpbiBRU1BJIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gUVNQSSBtb2RlLCBpZiBEV0lEVEggaXMgc2V0IHRvIDB4MDgsIHRoZSBiaXRzIFRYWzc6MF0gd2lsbCBiZSB0cmFuc21pdHRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBEV0lEVEggaXMgc2V0IHRvIDB4MDAgLCB0aGUgUVNQSSBjb250cm9sbGVyIHdpbGwgcGVyZm9ybSBhIDMyLWJpdCB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBNYXN0ZXIgbW9kZSwgUVNQSSBjb250cm9sbGVyIHdpbGwgc3RhcnQgdG8gdHJhbnNmZXIgdGhlIFFTUEkgYnVzIGNsb2NrIGFmdGVyIDEgQVBCIGNsb2NrIGFuZCA2IHBlcmlwaGVyYWwgY2xvY2sgY3ljbGVzIGFmdGVyIHVzZXIgd3JpdGVzIHRvIHRoaXMgcmVnaXN0ZXIuCisgICAgICogQHZhciBRU1BJX1Q6OlJYCisgICAgICogT2Zmc2V0OiAweDMwICBRU1BJIERhdGEgUmVjZWl2ZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFJYICAgICAgICB8RGF0YSBSZWNlaXZlIFJlZ2lzdGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlcmUgYXJlIDgtbGV2ZWwgRklGTyBidWZmZXJzIGluIHRoaXMgY29udHJvbGxlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGF0YSByZWNlaXZlIHJlZ2lzdGVyIGhvbGRzIHRoZSBkYXRhIHJlY2VpdmVkIGZyb20gUVNQSSBkYXRhIGlucHV0IHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgUlhFTVBUWSAoUVNQSXhfU1RBVFVTWzhdKSBpcyBub3Qgc2V0IHRvIDEsIHRoZSByZWNlaXZlIEZJRk8gYnVmZmVycyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBzb2Z0d2FyZSBieSByZWFkaW5nIHRoaXMgcmVnaXN0ZXIuCisgICAgICovCisKKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBRU1BJIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLRElWOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFFTUEkgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTU0NUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gUVNQSSBTbGF2ZSBTZWxlY3QgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBETUFDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBRU1BJIFBETUEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRklGT0NUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIFFTUEkgRklGTyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxNF0gUVNQSSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzJdOworICAgIF9fTyAgdWludDMyX3QgVFg7ICAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIFFTUEkgRGF0YSBUcmFuc21pdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVszXTsKKyAgICBfX0kgIHVpbnQzMl90IFJYOyAgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBRU1BJIERhdGEgUmVjZWl2ZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFFTUElfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgUVNQSV9DT05TVCBRU1BJIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFFTUEkgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBRU1BJX0NUTF9TUElFTl9Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBTUElFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9TUElFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX1NQSUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBTUElFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX1JYTkVHX1BvcyAgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFJYTkVHIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX1JYTkVHX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9DVExfUlhORUdfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFJYTkVHIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfVFhORUdfUG9zICAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogVFhORUcgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfVFhORUdfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9UWE5FR19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogVFhORUcgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9DTEtQT0xfUG9zICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBDTEtQT0wgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9DTEtQT0xfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX0NMS1BPTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBDTEtQT0wgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX1NVU1BJVFZfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFNVU1BJVFYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX1NVU1BJVFZfTXNrICAgICAgICAgICAgICAoMHhmdWwgPDwgUVNQSV9DVExfU1VTUElUVl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFNVU1BJVFYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfRFdJRFRIX1BvcyAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogRFdJRFRIIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfRFdJRFRIX01zayAgICAgICAgICAgICAgICgweDFmdWwgPDwgUVNQSV9DVExfRFdJRFRIX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogRFdJRFRIIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9MU0JfUG9zICAgICAgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBMU0IgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9MU0JfTXNrICAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX0xTQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBMU0IgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX0hBTEZEUFhfUG9zICAgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IEhBTEZEUFggUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX0hBTEZEUFhfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9DVExfSEFMRkRQWF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IEhBTEZEUFggTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfUlhPTkxZX1BvcyAgICAgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogUlhPTkxZIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfUlhPTkxZX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9SWE9OTFlfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogUlhPTkxZIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9UV09CSVRfUG9zICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBUV09CSVQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9UV09CSVRfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX1RXT0JJVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBUV09CSVQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX1VOSVRJRU5fUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFVOSVRJRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX1VOSVRJRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9DVExfVU5JVElFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IFVOSVRJRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfU0xBVkVfUG9zICAgICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogU0xBVkUgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfU0xBVkVfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9TTEFWRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogU0xBVkUgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9SRU9SREVSX1BvcyAgICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBSRU9SREVSIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9SRU9SREVSX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX1JFT1JERVJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBSRU9SREVSIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ1RMX0RBVERJUl9Qb3MgICAgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IERBVERJUiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElfQ1RMX0RBVERJUl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9DVExfREFURElSX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDVEw6IERBVERJUiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9DVExfRFVBTElPRU5fUG9zICAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogRFVBTElPRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9DVExfRFVBTElPRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0NUTF9EVUFMSU9FTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkNUTDogRFVBTElPRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0NUTF9RVUFESU9FTl9Qb3MgICAgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBRVUFESU9FTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0NUTF9RVUFESU9FTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfQ1RMX1FVQURJT0VOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6Q1RMOiBRVUFESU9FTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfQ0xLRElWX0RJVklERVJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDTEtESVY6IERJVklERVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfQ0xLRElWX0RJVklERVJfTXNrICAgICAgICAgICAoMHgxZmZ1bCA8PCBRU1BJX0NMS0RJVl9ESVZJREVSX1BvcykgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpDTEtESVY6IERJVklERVIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TU0NUTF9TU19Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTUyBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TU0NUTF9TU19Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NTQ1RMX1NTX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTUyBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NTQ1RMX1NTQUNUUE9MX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNTQUNUUE9MIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NTQ1RMX1NTQUNUUE9MX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1NDVExfU1NBQ1RQT0xfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNTQUNUUE9MIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1NDVExfQVVUT1NTX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogQVVUT1NTIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1NDVExfQVVUT1NTX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TU0NUTF9BVVRPU1NfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogQVVUT1NTIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFYzV0lSRV9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFYzV0lSRSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFYzV0lSRV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NTQ1RMX1NMVjNXSVJFX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFYzV0lSRSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NTQ1RMX1NMVlRPSUVOX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNMVlRPSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NTQ1RMX1NMVlRPSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1NDVExfU0xWVE9JRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNMVlRPSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1NDVExfU0xWVE9SU1RfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU0xWVE9SU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfU1NDVExfU0xWVE9SU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TU0NUTF9TTFZUT1JTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU0xWVE9SU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFZCRUlFTl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFZCRUlFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TU0NUTF9TTFZCRUlFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NTQ1RMX1NMVkJFSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTTFZCRUlFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NTQ1RMX1NMVlVSSUVOX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNMVlVSSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NTQ1RMX1NMVlVSSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1NDVExfU0xWVVJJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNMVlVSSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1NDVExfU1NBQ1RJRU5fUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU1NBQ1RJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfU1NDVExfU1NBQ1RJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TU0NUTF9TU0FDVElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTU0NUTDogU1NBQ1RJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TU0NUTF9TU0lOQUlFTl9Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTU0lOQUlFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TU0NUTF9TU0lOQUlFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NTQ1RMX1NTSU5BSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNTQ1RMOiBTU0lOQUlFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NTQ1RMX1NMVlRPQ05UX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNMVlRPQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NTQ1RMX1NMVlRPQ05UX01zayAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFFTUElfU1NDVExfU0xWVE9DTlRfUG9zKSAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1NDVEw6IFNMVlRPQ05UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfUERNQUNUTF9UWFBETUFFTl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpQRE1BQ1RMOiBUWFBETUFFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFFTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgUVNQSV9QRE1BQ1RMX1RYUERNQUVOX1BvcykgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpQRE1BQ1RMOiBUWFBETUFFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9QRE1BQ1RMX1JYUERNQUVOX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlBETUFDVEw6IFJYUERNQUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUVNQSV9QRE1BQ1RMX1JYUERNQUVOX01zayAgICAgICAgICgweDF1bCA8PCBRU1BJX1BETUFDVExfUlhQRE1BRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlBETUFDVEw6IFJYUERNQUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1BETUFDVExfUERNQVJTVF9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6UERNQUNUTDogUERNQVJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBRU1BJX1BETUFDVExfUERNQVJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFFTUElfUERNQUNUTF9QRE1BUlNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6UERNQUNUTDogUERNQVJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfRklGT0NUTF9SWFJTVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBSWFJTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFTUElfRklGT0NUTF9SWFJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9GSUZPQ1RMX1JYUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBSWFJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1RYUlNUX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFRYUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1RYUlNUX01zayAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX0ZJRk9DVExfVFhSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFRYUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0ZJRk9DVExfUlhUSElFTl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogUlhUSElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBRU1BJX0ZJRk9DVExfUlhUSElFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFFTUElfRklGT0NUTF9SWFRISUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogUlhUSElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWFRISUVOX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWFRISUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWFRISUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9GSUZPQ1RMX1RYVEhJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWFRISUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYVE9JRU5fUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYVE9JRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYVE9JRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBRU1BJX0ZJRk9DVExfUlhUT0lFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYVE9JRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0ZJRk9DVExfUlhPVklFTl9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogUlhPVklFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBRU1BJX0ZJRk9DVExfUlhPVklFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFFTUElfRklGT0NUTF9SWE9WSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogUlhPVklFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWFVGUE9MX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWFVGUE9MIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWFVGUE9MX01zayAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9GSUZPQ1RMX1RYVUZQT0xfUG9zKSAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWFVGUE9MIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1RYVUZJRU5fUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFRYVUZJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1RYVUZJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBRU1BJX0ZJRk9DVExfVFhVRklFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFRYVUZJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0ZJRk9DVExfUlhGQkNMUl9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogUlhGQkNMUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBRU1BJX0ZJRk9DVExfUlhGQkNMUl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFFTUElfRklGT0NUTF9SWEZCQ0xSX1BvcykgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogUlhGQkNMUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWEZCQ0xSX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWEZCQ0xSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFFTUElfRklGT0NUTF9UWEZCQ0xSX01zayAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9GSUZPQ1RMX1RYRkJDTFJfUG9zKSAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpGSUZPQ1RMOiBUWEZCQ0xSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYVEhfUG9zICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYVEggUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9GSUZPQ1RMX1JYVEhfTXNrICAgICAgICAgICAgICgweDd1bCA8PCBRU1BJX0ZJRk9DVExfUlhUSF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OkZJRk9DVEw6IFJYVEggTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX0ZJRk9DVExfVFhUSF9Qb3MgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogVFhUSCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBRU1BJX0ZJRk9DVExfVFhUSF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IFFTUElfRklGT0NUTF9UWFRIX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6RklGT0NUTDogVFhUSCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX0JVU1lfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IEJVU1kgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX0JVU1lfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IEJVU1kgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfVU5JVElGX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVU5JVElGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfVU5JVElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19VTklUSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVU5JVElGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19TU0FDVElGX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBTU0FDVElGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19TU0FDVElGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1NTQUNUSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBTU0FDVElGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1NTSU5BSUZfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNTSU5BSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1NTSU5BSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfU1NJTkFJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNTSU5BSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfU1NMSU5FX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU1NMSU5FIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfU1NMSU5FX01zayAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19TU0xJTkVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU1NMSU5FIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19TTFZUT0lGX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBTTFZUT0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19TTFZUT0lGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1NMVlRPSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBTTFZUT0lGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1NMVkJFSUZfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNMVkJFSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1NMVkJFSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfU0xWQkVJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFNMVkJFSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfU0xWVVJJRl9Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU0xWVVJJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfU0xWVVJJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19TTFZVUklGX1BvcykgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU0xWVVJJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19SWEVNUFRZX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBSWEVNUFRZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19SWEVNUFRZX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1JYRU1QVFlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBSWEVNUFRZIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1JYRlVMTF9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFJYRlVMTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1JYRlVMTF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfUlhGVUxMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFJYRlVMTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfUlhUSElGX1BvcyAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogUlhUSElGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfUlhUSElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19SWFRISUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogUlhUSElGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19SWE9WSUZfUG9zICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBSWE9WSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19SWE9WSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1JYT1ZJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBSWE9WSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1JYVE9JRl9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFJYVE9JRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1JYVE9JRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfUlhUT0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFJYVE9JRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfU1BJRU5TVFNfUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU1BJRU5TVFMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfU1BJRU5TVFNfTXNrICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19TUElFTlNUU19Qb3MpICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogU1BJRU5TVFMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19UWEVNUFRZX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWEVNUFRZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19UWEVNUFRZX01zayAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1RYRU1QVFlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWEVNUFRZIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1RYRlVMTF9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFRYRlVMTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1RYRlVMTF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfVFhGVUxMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFRYRlVMTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfVFhUSElGX1BvcyAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVFhUSElGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfVFhUSElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBRU1BJX1NUQVRVU19UWFRISUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogVFhUSElGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19UWFVGSUZfUG9zICAgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWFVGSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19UWFVGSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFFTUElfU1RBVFVTX1RYVUZJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWFVGSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfU1RBVFVTX1RYUlhSU1RfUG9zICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFRYUlhSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFFTUElfU1RBVFVTX1RYUlhSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUVNQSV9TVEFUVVNfVFhSWFJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpTVEFUVVM6IFRYUlhSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9TVEFUVVNfUlhDTlRfUG9zICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogUlhDTlQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9TVEFUVVNfUlhDTlRfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBRU1BJX1NUQVRVU19SWENOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlNUQVRVUzogUlhDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBRU1BJX1NUQVRVU19UWENOVF9Qb3MgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWENOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBRU1BJX1NUQVRVU19UWENOVF9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IFFTUElfU1RBVFVTX1RYQ05UX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFFTUElfVDo6U1RBVFVTOiBUWENOVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFFTUElfVFhfVFhfUG9zICAgICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpUWDogVFggUG9zaXRpb24gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElfVFhfVFhfTXNrICAgICAgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFFTUElfVFhfVFhfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUVNQSV9UOjpUWDogVFggTWFzayAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUVNQSV9SWF9SWF9Qb3MgICAgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlJYOiBSWCBQb3NpdGlvbiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSV9SWF9SWF9Nc2sgICAgICAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUVNQSV9SWF9SWF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBRU1BJX1Q6OlJYOiBSWCBNYXNrICAgICAgICAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBRU1BJX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBRU1BJIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19RU1BJX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9ydGNfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvcnRjX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZGZjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvcnRjX3JlZy5oCkBAIC0wLDAgKzEsMTMyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHJ0Y19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgUlRDIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1JUQ19SRUdfSF9fCisjZGVmaW5lIF9fUlRDX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVhbCBUaW1lIENsb2NrIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBSVEMgUmVhbCBUaW1lIENsb2NrIENvbnRyb2xsZXIoUlRDKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBSVEMgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBSVENfVDo6SU5JVAorICAgICAqIE9mZnNldDogMHgwMCAgUlRDIEluaXRpYXRpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJTklUX0FDVElWRXxSVEMgQWN0aXZlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSVEMgaXMgYXQgcmVzZXQgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJUQyBpcyBhdCBub3JtYWwgYWN0aXZlIHN0YXRlLgorICAgICAqIHxbMzE6MV0gIHxJTklUICAgICAgfFJUQyBJbml0aWF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBSVEMgYmxvY2sgaXMgcG93ZXJlZCBvbiwgUlRDIGlzIGF0IHJlc2V0IHN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBoYXMgdG8gd3JpdGUgYSBudW1iZXIgKDB4IGE1ZWIxMzU3KSB0byBJTklUIHRvIG1ha2UgUlRDIGxlYXZpbmcgcmVzZXQgc3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbmNlIHRoZSBJTklUIGlzIHdyaXR0ZW4gYXMgMHhhNWViMTM1NywgdGhlIFJUQyB3aWxsIGJlIGluIHVuLXJlc2V0IHN0YXRlIHBlcm1hbmVudGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBJTklUIGlzIGEgd3JpdGUtb25seSBmaWVsZCBhbmQgcmVhZCB2YWx1ZSB3aWxsIGJlIGFsd2F5cyAwLgorICAgICAqIEB2YXIgUlRDX1Q6OlJXRU4KKyAgICAgKiBPZmZzZXQ6IDB4MDQgIFJUQyBBY2Nlc3MgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UldFTiAgICAgIHxSVEMgUmVnaXN0ZXIgQWNjZXNzIEVuYWJsZSBQYXNzd29yZCAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIDB4QTk2NSB0byB0aGlzIGZpZWxkIHdpbGwgZW5hYmxlIFJUQyBhY2Nlc3NpYmxlIHBlcmlvZCBrZWVwcyAxMDI0IFJUQyBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGluZyBvdGhlciB2YWx1ZSB3aWxsIGNsZWFyIFJXRU5GIGFuZCBkaXNhYmxlIFJUQyByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb24gaW1tZWRpYXRlbHkuCisgICAgICogfFsxNl0gICAgfFJXRU5GICAgICB8UlRDIFJlZ2lzdGVyIEFjY2VzcyBFbmFibGUgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSVEMgcmVnaXN0ZXIgcmVhZC93cml0ZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlRDIHJlZ2lzdGVyIHJlYWQvd3JpdGUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIHNldCBhZnRlciBSVENfUldFTlsxNTowXSByZWdpc3RlciBpcyBsb2FkIGEgMHhBOTY1LCBhbmQgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIDEwMjQgUlRDIGNsb2NrcyBleHBpcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFJXRU5GIHdpbGwgYmUgbWFzayB0byAwIGR1cmluZyBSVENCVVNZIGlzIDEsIGFuZCBmaXJzdCB0dXJuIG9uIFJUQ0NLRU4gKENMS19BUEJDTEtbMV0pIGFsc28uCisgICAgICogfFsyNF0gICAgfFJUQ0JVU1kgICB8UlRDIFdyaXRlIEJ1c3kgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBSVEMgcmVnaXN0ZXJzIGFyZSBidXN5IG9yIG5vdC4gUlRDIHJlZ2lzdGVyIFIvVyBpcyBpbnZhbGlkIGR1cmluZyBSVENCVVNZLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDA6IFJUQyByZWdpc3RlcnMgYXJlIHJlYWRhYmxlIGFuZCB3cml0YWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxOiBSVEMgcmVnaXN0ZXJzIGNhbid0IFIvVywgUlRDIHVuZGVyIEJ1c3kgU3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFJUQ0JVU1kgZmxhZyB3aWxsIGJlIHNldCB3aGVuIGV4ZWN1dGUgd3JpdGUgUlRDIHJlZ2lzdGVyIGNvbW1hbmQgZXhjZWVkIDYgdGltZXMgd2l0aGluIDExMjAgUENMSyBjeWNsZXMgb3IgUENMS1JUQyBzd2l0Y2ggb24gZmlyc3QgZmV3IGN5Y2xlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgYml0IHJlZmxlY3QgUldFTkYgKFJXRU5GID0gMCB3aGVuIFJUQ0JVU1kpLgorICAgICAqIEB2YXIgUlRDX1Q6OkZSRVFBREoKKyAgICAgKiBPZmZzZXQ6IDB4MDggIFJUQyBGcmVxdWVuY3kgQ29tcGVuc2F0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzIxOjBdICB8RlJFUUFESiAgIHxGcmVxdWVuY3kgQ29tcGVuc2F0aW9uIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBtdXN0IHRvIGdldCBhY3R1YWwgTFhUIGZyZXF1ZW5jeSBmb3IgUlRDIGFwcGxpY2F0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZDUiA9IDB4MjAwMDAwICogKDMyNzY4IC8gTFhUIGZyZXF1ZW5jeSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBmb3JtdWxhIGlzIHN1aXRhYmxlIG9ubHkgd2hlbiBSVEMgY2xvY2sgc291cmNlIGlzIGZyb20gTFhULCBSVENTRUwgKENMS19DTEtTRUwzWzhdKSBpcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHNldCBSVENTRUwgKENMS19DTEtTRUwzWzhdKSB0byAxLCBSVEMgY2xvY2sgc291cmNlIGlzIGZyb20gTElSQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBzZXQgRlJFUUFESiB0byBleGVjdXRlIExJUkMgY29tcGVuc2F0aW9uIGZvciBSVEMgY291bnRlciBtb3JlIGFjY3VyYXRlIGFuZCB0aGUgZm9ybXVsYSBhcyBiZWxvdywKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGQ1IgPSAweDgwMDAwICogKDMyNzY4IC8gTElSQyBmcmVxdWVuY3kpLgorICAgICAqIEB2YXIgUlRDX1Q6OlRJTUUKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIFJUQyBUaW1lIExvYWRpbmcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxTRUMgICAgICAgfDEtU2VjIFRpbWUgRGlnaXQgKDB+OSkKKyAgICAgKiB8WzY6NF0gICB8VEVOU0VDICAgIHwxMC1TZWMgVGltZSBEaWdpdCAoMH41KQorICAgICAqIHxbMTE6OF0gIHxNSU4gICAgICAgfDEtTWluIFRpbWUgRGlnaXQgKDB+OSkKKyAgICAgKiB8WzE0OjEyXSB8VEVOTUlOICAgIHwxMC1NaW4gVGltZSBEaWdpdCAoMH41KQorICAgICAqIHxbMTk6MTZdIHxIUiAgICAgICAgfDEtSG91ciBUaW1lIERpZ2l0ICgwfjkpCisgICAgICogfFsyMToyMF0gfFRFTkhSICAgICB8MTAtSG91ciBUaW1lIERpZ2l0ICgwfjIpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBSVEMgcnVucyBhcyAxMi1ob3VyIHRpbWUgc2NhbGUgbW9kZSwgUlRDX1RJTUVbMjFdICh0aGUgaGlnaCBiaXQgb2YgVEVOSFJbMTowXSkgbWVhbnMgQU0vUE0gaW5kaWNhdGlvbiAoSWYgUlRDX1RJTUVbMjFdIGlzIDEsIGl0IGluZGljYXRlcyBQTSB0aW1lIG1lc3NhZ2UuKQorICAgICAqIHxbMzA6MjRdIHxIWkNOVCAgICAgfEluZGV4IG9mIHN1Yi1zZWNvbmQgY291bnRlcigweDAwIH4weDdGKQorICAgICAqIEB2YXIgUlRDX1Q6OkNBTAorICAgICAqIE9mZnNldDogMHgxMCAgUlRDIENhbGVuZGFyIExvYWRpbmcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxEQVkgICAgICAgfDEtRGF5IENhbGVuZGFyIERpZ2l0ICgwfjkpCisgICAgICogfFs1OjRdICAgfFRFTkRBWSAgICB8MTAtRGF5IENhbGVuZGFyIERpZ2l0ICgwfjMpCisgICAgICogfFsxMTo4XSAgfE1PTiAgICAgICB8MS1Nb250aCBDYWxlbmRhciBEaWdpdCAoMH45KQorICAgICAqIHxbMTJdICAgIHxURU5NT04gICAgfDEwLU1vbnRoIENhbGVuZGFyIERpZ2l0ICgwfjEpCisgICAgICogfFsxOToxNl0gfFlFQVIgICAgICB8MS1ZZWFyIENhbGVuZGFyIERpZ2l0ICgwfjkpCisgICAgICogfFsyMzoyMF0gfFRFTllFQVIgICB8MTAtWWVhciBDYWxlbmRhciBEaWdpdCAoMH45KQorICAgICAqIEB2YXIgUlRDX1Q6OkNMS0ZNVAorICAgICAqIE9mZnNldDogMHgxNCAgUlRDIFRpbWUgU2NhbGUgU2VsZWN0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8MjRIRU4gICAgIHwyNC1ob3VyIC8gMTItaG91ciBUaW1lIFNjYWxlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlcyB0aGF0IFJUQ19USU1FIGFuZCBSVENfVEFMTSBhcmUgaW4gMjQtaG91ciB0aW1lIHNjYWxlIG9yIDEyLWhvdXIgdGltZSBzY2FsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSAxMi1ob3VyIHRpbWUgc2NhbGUgd2l0aCBBTSBhbmQgUE0gaW5kaWNhdGlvbiBzZWxlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMjQtaG91ciB0aW1lIHNjYWxlIHNlbGVjdGVkLgorICAgICAqIHxbOF0gICAgIHxIWkNOVEVOICAgfFN1Yi1zZWNvbmQgQ291bnRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEhaQ05UIGRpc2FibGVkIGluIFJUQ19USU1FIGFuZCBSVENfVEFMTS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSFpDTlQgZW5hYmxlZCBpbiBSVENfVElNRSBhbmQgUlRDX1RBTE0gLgorICAgICAqIEB2YXIgUlRDX1Q6OldFRUtEQVkKKyAgICAgKiBPZmZzZXQ6IDB4MTggIFJUQyBEYXkgb2YgdGhlIFdlZWsgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxXRUVLREFZICAgfERheSBvZiB0aGUgV2VlayBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFN1bmRheS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBNb25kYXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gVHVlc2RheS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBXZWRuZXNkYXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gVGh1cnNkYXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gRnJpZGF5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IFNhdHVyZGF5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IFJlc2VydmVkLgorICAgICAqIEB2YXIgUlRDX1Q6OlRBTE0KKyAgICAgKiBPZmZzZXQ6IDB4MUMgIFJUQyBUaW1lIEFsYXJtIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8U0VDICAgICAgIHwxLVNlYyBUaW1lIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiB8WzY6NF0gICB8VEVOU0VDICAgIHwxMC1TZWMgVGltZSBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjUpCisgICAgICogfFsxMTo4XSAgfE1JTiAgICAgICB8MS1NaW4gVGltZSBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogfFsxNDoxMl0gfFRFTk1JTiAgICB8MTAtTWluIFRpbWUgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH41KQorICAgICAqIHxbMTk6MTZdIHxIUiAgICAgICAgfDEtSG91ciBUaW1lIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiB8WzIxOjIwXSB8VEVOSFIgICAgIHwxMC1Ib3VyIFRpbWUgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH4yKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gUlRDIHJ1bnMgYXMgMTItaG91ciB0aW1lIHNjYWxlIG1vZGUsIFJUQ19USU1FWzIxXSAodGhlIGhpZ2ggYml0IG9mIFRFTkhSWzE6MF0pIG1lYW5zIEFNL1BNIGluZGljYXRpb24gKElmIFJUQ19USU1FWzIxXSBpcyAxLCBpdCBpbmRpY2F0ZXMgUE0gdGltZSBtZXNzYWdlLikKKyAgICAgKiB8WzMwOjI0XSB8SFpDTlQgICAgIHxJbmRleCBvZiBzdWItc2Vjb25kIGNvdW50ZXIoMHgwMCB+MHg3RikKKyAgICAgKiBAdmFyIFJUQ19UOjpDQUxNCisgICAgICogT2Zmc2V0OiAweDIwICBSVEMgQ2FsZW5kYXIgQWxhcm0gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxEQVkgICAgICAgfDEtRGF5IENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiB8WzU6NF0gICB8VEVOREFZICAgIHwxMC1EYXkgQ2FsZW5kYXIgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH4zKQorICAgICAqIHxbMTE6OF0gIHxNT04gICAgICAgfDEtTW9udGggQ2FsZW5kYXIgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH45KQorICAgICAqIHxbMTJdICAgIHxURU5NT04gICAgfDEwLU1vbnRoIENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+MSkKKyAgICAgKiB8WzE5OjE2XSB8WUVBUiAgICAgIHwxLVllYXIgQ2FsZW5kYXIgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH45KQorICAgICAqIHxbMjM6MjBdIHxURU5ZRUFSICAgfDEwLVllYXIgQ2FsZW5kYXIgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH45KQorICAgICAqIEB2YXIgUlRDX1Q6OkxFQVBZRUFSCisgICAgICogT2Zmc2V0OiAweDI0ICBSVEMgTGVhcCBZZWFyIEluZGljYXRvciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfExFQVBZRUFSICB8TGVhcCBZZWFyIEluZGljYXRpb24gUmVnaXN0ZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhpcyB5ZWFyIGlzIG5vdCBhIGxlYXAgeWVhci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhpcyB5ZWFyIGlzIGxlYXAgeWVhci4KKyAgICAgKiBAdmFyIFJUQ19UOjpJTlRFTgorICAgICAqIE9mZnNldDogMHgyOCAgUlRDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBTE1JRU4gICAgfEFsYXJtIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IEFMTUlFTiB0byAxIGNhbiBhbHNvIGVuYWJsZSBjaGlwIHdha2UtdXAgZnVuY3Rpb24gd2hlbiBSVEMgYWxhcm0gaW50ZXJydXB0IGV2ZW50IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlRDIEFsYXJtIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlRDIEFsYXJtIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxUSUNLSUVOICAgfFRpbWUgVGljayBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBUSUNLSUVOIHRvIDEgY2FuIGFsc28gZW5hYmxlIGNoaXAgd2FrZS11cCBmdW5jdGlvbiB3aGVuIFJUQyB0aWNrIGludGVycnVwdCBldmVudCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJUQyBUaW1lIFRpY2sgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSVEMgVGltZSBUaWNrIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxUQU1QMElFTiAgfFRhbXBlciAwIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IFRBTVAwSUVOIHRvIDEgY2FuIGFsc28gZW5hYmxlIGNoaXAgd2FrZS11cCBmdW5jdGlvbiB3aGVuIHRhbXBlciAwIGludGVycnVwdCBldmVudCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciAwIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDAgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs5XSAgICAgfFRBTVAxSUVOICB8VGFtcGVyIDEgb3IgUGFpciAwIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IFRBTVAxSUVOIHRvIDEgY2FuIGFsc28gZW5hYmxlIGNoaXAgd2FrZS11cCBmdW5jdGlvbiB3aGVuIHRhbXBlciAxIGludGVycnVwdCBldmVudCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciAxIG9yIFBhaXIgMCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAxIG9yIFBhaXIgMCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEwXSAgICB8VEFNUDJJRU4gIHxUYW1wZXIgMiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBUQU1QMklFTiB0byAxIGNhbiBhbHNvIGVuYWJsZSBjaGlwIHdha2UtdXAgZnVuY3Rpb24gd2hlbiB0YW1wZXIgMiBpbnRlcnJ1cHQgZXZlbnQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgMiBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAyIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTFdICAgIHxUQU1QM0lFTiAgfFRhbXBlciAzIG9yIFBhaXIgMSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBUQU1QM0lFTiB0byAxIGNhbiBhbHNvIGVuYWJsZSBjaGlwIHdha2UtdXAgZnVuY3Rpb24gd2hlbiB0YW1wZXIgMyBpbnRlcnJ1cHQgZXZlbnQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgMyBvciBQYWlyIDEgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMyBvciBQYWlyIDEgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMl0gICAgfFRBTVA0SUVOICB8VGFtcGVyIDQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgVEFNUDRJRU4gdG8gMSBjYW4gYWxzbyBlbmFibGUgY2hpcCB3YWtlLXVwIGZ1bmN0aW9uIHdoZW4gdGFtcGVyIDQgaW50ZXJydXB0IGV2ZW50IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgNCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEzXSAgICB8VEFNUDVJRU4gIHxUYW1wZXIgNSBvciBQYWlyIDIgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgVEFNUDVJRU4gdG8gMSBjYW4gYWxzbyBlbmFibGUgY2hpcCB3YWtlLXVwIGZ1bmN0aW9uIHdoZW4gdGFtcGVyIDUgaW50ZXJydXB0IGV2ZW50IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDUgb3IgUGFpciAyIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDUgb3IgUGFpciAyIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjRdICAgIHxDTEtGSUVOICAgfExYVCBDbG9jayBGcmVxdWVuY3kgTW9uaXRvciBGYWlsIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExYVCBGcmVxdWVuY3kgRmFpbCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExYVCBGcmVxdWVuY3kgRmFpbCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzI1XSAgICB8Q0xLU1BJRU4gIHxMWFQgQ2xvY2sgRnJlcXVlbmN5IE1vbml0b3IgU3RvcCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMWFQgRnJlcXVlbmN5IFN0b3AgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMWFQgRnJlcXVlbmN5IFN0b3AgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogQHZhciBSVENfVDo6SU5UU1RTCisgICAgICogT2Zmc2V0OiAweDJDICBSVEMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEFMTUlGICAgICB8UlRDIEFsYXJtIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFsYXJtIGNvbmRpdGlvbiBpcyBub3QgbWF0Y2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQWxhcm0gY29uZGl0aW9uIGlzIG1hdGNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8WzFdICAgICB8VElDS0lGICAgIHxSVEMgVGltZSBUaWNrIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpY2sgY29uZGl0aW9uIGRvZXMgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaWNrIGNvbmRpdGlvbiBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHxbOF0gICAgIHxUQU1QMElGICAgfFRhbXBlciAwIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFRhbXBlciAwIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDAgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBDbGVhciBhbGwgVEFQTXhJRiB3aWxsIGNsZWFyIFJUQ19UQU1QVElNRSBhbmQgUlRDX1RBTVBDQUwgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzldICAgICB8VEFNUDFJRiAgIHxUYW1wZXIgMSBvciBQYWlyIDAgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVGFtcGVyIDEgb3IgUGFpciAwIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDEgb3IgUGFpciAwIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2xlYXIgYWxsIFRBUE14SUYgd2lsbCBjbGVhciBSVENfVEFNUFRJTUUgYW5kIFJUQ19UQU1QQ0FMIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFsxMF0gICAgfFRBTVAySUYgICB8VGFtcGVyIDIgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVGFtcGVyIDIgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMiBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IENsZWFyIGFsbCBUQVBNeElGIHdpbGwgY2xlYXIgUlRDX1RBTVBUSU1FIGFuZCBSVENfVEFNUENBTCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHxbMTFdICAgIHxUQU1QM0lGICAgfFRhbXBlciAzIG9yIFBhaXIgMSBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBUYW1wZXIgMyBvciBQYWlyIDEgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMyBvciBQYWlyIDEgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBDbGVhciBhbGwgVEFQTXhJRiB3aWxsIGNsZWFyIFJUQ19UQU1QVElNRSBhbmQgUlRDX1RBTVBDQUwgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzEyXSAgICB8VEFNUDRJRiAgIHxUYW1wZXIgNCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBUYW1wZXIgNCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciA0IGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2xlYXIgYWxsIFRBUE14SUYgd2lsbCBjbGVhciBSVENfVEFNUFRJTUUgYW5kIFJUQ19UQU1QQ0FMIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFsxM10gICAgfFRBTVA1SUYgICB8VGFtcGVyIDUgb3IgUGFpciAyIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFRhbXBlciA1IG9yIFBhaXIgMiBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciA1IG9yIFBhaXIgMiBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IENsZWFyIGFsbCBUQVBNeElGIHdpbGwgY2xlYXIgUlRDX1RBTVBUSU1FIGFuZCBSVENfVEFNUENBTCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHxbMjRdICAgIHxDTEtGSUYgICAgfExYVCBDbG9jayBGcmVxdWVuY3kgTW9uaXRvciBGYWlsIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExYVCBmcmVxdWVuY3kgaXMgbm9ybWFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMWFQgZnJlcXVlbmN5IGlzIGFibm9ybWFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogTFhUIGRldGVjdG9yIHdpbGwgYXV0b21hdGljIGRpc2FibGUgd2hlbiBGYWlsL1N0b3AgRmxhZyByaXNlLCByZXN1bWUgYWZ0ZXIgRmFpbC9TdG9wIEZsYWcgY2xlYXIuCisgICAgICogfFsyNV0gICAgfENMS1NQSUYgICB8TFhUIENsb2NrIEZyZXF1ZW5jeSBNb25pdG9yIFN0b3AgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTFhUIGZyZXF1ZW5jeSBpcyBub3JtYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExYVCBmcmVxdWVuY3kgaXMgYWxtb3N0IHN0b3AgLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV3JpdGUgMSB0byBjbGVhciB0aGUgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IExYVCBkZXRlY3RvciB3aWxsIGF1dG9tYXRpYyBkaXNhYmxlIHdoZW4gRmFpbC9TdG9wIEZsYWcgcmlzZSwgcmVzdW1lIGFmdGVyIEZhaWwvU3RvcCBGbGFnIGNsZWFyLgorICAgICAqIEB2YXIgUlRDX1Q6OlRJQ0sKKyAgICAgKiBPZmZzZXQ6IDB4MzAgIFJUQyBUaW1lIFRpY2sgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxUSUNLICAgICAgfFRpbWUgVGljayBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gc2VsZWN0IFJUQyB0aW1lIHRpY2sgcGVyaW9kIGZvciBQZXJpb2RpYyBUaW1lIFRpY2sgSW50ZXJydXB0IHJlcXVlc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gVGltZSB0aWNrIGlzIDEgc2Vjb25kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFRpbWUgdGljayBpcyAxLzIgc2Vjb25kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFRpbWUgdGljayBpcyAxLzQgc2Vjb25kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IFRpbWUgdGljayBpcyAxLzggc2Vjb25kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRpbWUgdGljayBpcyAxLzE2IHNlY29uZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSBUaW1lIHRpY2sgaXMgMS8zMiBzZWNvbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gVGltZSB0aWNrIGlzIDEvNjQgc2Vjb25kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IFRpbWUgdGljayBpcyAxLzEyOCBzZWNvbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBjYW4gYmUgcmVhZCBiYWNrIGFmdGVyIHRoZSBSVEMgcmVnaXN0ZXIgYWNjZXNzIGVuYWJsZSBiaXQgUldFTkYgKFJUQ19SV0VOWzE2XSkgaXMgYWN0aXZlLgorICAgICAqIEB2YXIgUlRDX1Q6OlRBTVNLCisgICAgICogT2Zmc2V0OiAweDM0ICBSVEMgVGltZSBBbGFybSBNYXNrIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TVNFQyAgICAgIHxNYXNrIDEtU2VjIFRpbWUgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH45KQorICAgICAqIHxbMV0gICAgIHxNVEVOU0VDICAgfE1hc2sgMTAtU2VjIFRpbWUgRGlnaXQgb2YgQWxhcm0gU2V0dGluZyAoMH41KQorICAgICAqIHxbMl0gICAgIHxNTUlOICAgICAgfE1hc2sgMS1NaW4gVGltZSBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogfFszXSAgICAgfE1URU5NSU4gICB8TWFzayAxMC1NaW4gVGltZSBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjUpCisgICAgICogfFs0XSAgICAgfE1IUiAgICAgICB8TWFzayAxLUhvdXIgVGltZSBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogTUhSIGZ1bmN0aW9uIGlzIG9ubHkgZm9yIDI0LWhvdXIgdGltZSBzY2FsZSBtb2RlLgorICAgICAqIHxbNV0gICAgIHxNVEVOSFIgICAgfE1hc2sgMTAtSG91ciBUaW1lIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+MikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBNVEVOSFIgZnVuY3Rpb24gaXMgb25seSBmb3IgMjQtaG91ciB0aW1lIHNjYWxlIG1vZGUuCisgICAgICogQHZhciBSVENfVDo6Q0FNU0sKKyAgICAgKiBPZmZzZXQ6IDB4MzggIFJUQyBDYWxlbmRhciBBbGFybSBNYXNrIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TURBWSAgICAgIHxNYXNrIDEtRGF5IENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiB8WzFdICAgICB8TVRFTkRBWSAgIHxNYXNrIDEwLURheSBDYWxlbmRhciBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjMpCisgICAgICogfFsyXSAgICAgfE1NT04gICAgICB8TWFzayAxLU1vbnRoIENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiB8WzNdICAgICB8TVRFTk1PTiAgIHxNYXNrIDEwLU1vbnRoIENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+MSkKKyAgICAgKiB8WzRdICAgICB8TVlFQVIgICAgIHxNYXNrIDEtWWVhciBDYWxlbmRhciBEaWdpdCBvZiBBbGFybSBTZXR0aW5nICgwfjkpCisgICAgICogfFs1XSAgICAgfE1URU5ZRUFSICB8TWFzayAxMC1ZZWFyIENhbGVuZGFyIERpZ2l0IG9mIEFsYXJtIFNldHRpbmcgKDB+OSkKKyAgICAgKiBAdmFyIFJUQ19UOjpTUFJDVEwKKyAgICAgKiBPZmZzZXQ6IDB4M0MgIFJUQyBTcGFyZSBGdW5jdGlvbmFsIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMl0gICAgIHxTUFJSV0VOICAgfFNwYXJlIFJlZ2lzdGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3BhcmUgcmVnaXN0ZXIgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNwYXJlIHJlZ2lzdGVyIGlzIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBzcGFyZSByZWdpc3RlciBpcyBkaXNhYmxlZCwgUlRDX1NQUjAgfiBSVENfU1BSMTkgY2Fubm90IGJlIGFjY2Vzc2VkLgorICAgICAqIHxbNV0gICAgIHxTUFJDU1RTICAgfFNQUiBDbGVhciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIGlmIHRoZSBSVENfU1BSMCB+UlRDX1NQUjE5IGNvbnRlbnQgaXMgY2xlYXJlZCB3aGVuIHNwZWNpZnkgc25vb3AgZXZlbnQgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNwYXJlIHJlZ2lzdGVyIGNvbnRlbnQgaXMgbm90IGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNwYXJlIHJlZ2lzdGVyIGNvbnRlbnQgaXMgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZXMgMSB0byBjbGVhciB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBrZWVwIDEgd2hlbiBSVENfSU5UU1RTWzEzOjhdIG9yIFJUQ19JTlRTVFNbMjU6MjRdIGFyZSBub3QgZXF1YWwgemVyby4KKyAgICAgKiB8WzE2XSAgICB8TFhURkNMUiAgIHxMWFQgQ2xvY2sgTW9uaXRvciBGYWlsL1N0b3AgdG8gQ2xlYXIgU3BhcmUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMWFQgbW9uaXRvciBGYWlsL1N0b3AgdG8gY2xlYXIgU3BhcmUgcmVnaXN0ZXIgY29udGVudCBpcyBEaXNhYmxlZC4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExYVCBtb25pdG9yIEZhaWwvU3RvcCB0byBjbGVhciBTcGFyZSByZWdpc3RlciBjb250ZW50IGlzIEVuYWJsZWQuCisgICAgICogQHZhciBSVENfVDo6U1BSWzIwXQorICAgICAqIE9mZnNldDogMHg0MCB+IDB4OEMgIFJUQyBTcGFyZSBSZWdpc3RlciAwIH4gMTkKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTUEFSRSAgICAgfFNwYXJlIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIHN0b3JlIGJhY2stdXAgaW5mb3JtYXRpb24gZGVmaW5lZCBieSB1c2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgd2lsbCBiZSBjbGVhcmVkIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgb25jZSBhIHRhbXBlciBwaW4gZXZlbnQgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmVmb3JlIHN0b3JpbmcgYmFjay11cCBpbmZvcm1hdGlvbiBpbiB0byBSVENfU1BSeCByZWdpc3RlciwgdXNlciBzaG91bGQgd3JpdGUgMHhBOTY1IHRvIFJUQ19SV0VOWzE1OjBdIHRvIG1ha2Ugc3VyZSByZWdpc3RlciByZWFkL3dyaXRlIGVuYWJsZSBiaXQgUkVXTkYgKFJUQ19SV0VOWzE2XSkgaXMgZW5hYmxlZC4KKyAgICAgKiBAdmFyIFJUQ19UOjpMWFRDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTAwICBSVEMgMzIuNzY4IGtIeiBPc2NpbGxhdG9yIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxMSVJDMzJLRU4gfExJUkMgMzJLIFNvdXJjZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJUkMzMksgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJUkMzMksuRW5hYmxlZC4KKyAgICAgKiB8WzM6MV0gICB8R0FJTiAgICAgIHxPc2NpbGxhdG9yIEdhaW4gT3B0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gc2VsZWN0IG9zY2lsbGF0b3IgZ2FpbiBhY2NvcmRpbmcgdG8gY3J5c3RhbCBleHRlcm5hbCBsb2FkaW5nIGFuZCBvcGVyYXRpbmcgdGVtcGVyYXR1cmUgcmFuZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgbGFyZ2VyIGdhaW4gdmFsdWUgY29ycmVzcG9uZGluZyB0byBzdHJvbmdlciBkcml2aW5nIGNhcGFiaWxpdHkgYW5kIGhpZ2hlciBwb3dlciBjb25zdW1wdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBMMCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IEwxIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gTDIgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBMMyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IEw0IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gTDUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBMNiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IEw3IG1vZGUgKERlZmF1bHQpLgorICAgICAqIHxbN10gICAgIHxDMzJLUyAgICAgfENsb2NrIDMySyBTb3VyY2UgU2VsZWN0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcm5hbCAzMksgY2xvY2sgaXMgZnJvbSAzMksgY3J5c3RhbCAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVybmFsIDMySyBjbG9jayBpcyBmcm9tIExJUkMzMksuCisgICAgICogQHZhciBSVENfVDo6R1BJT0NUTDAKKyAgICAgKiBPZmZzZXQ6IDB4MTA0ICBSVEMgR1BJTyBDb250cm9sIDAgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxPUE1PREUwICAgfElPIE9wZXJhdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQRi4wIGlzIGlucHV0IG9ubHkgbW9kZSwgd2l0aG91dCBwdWxsLXVwIHJlc2lzdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuMCBpcyBvdXRwdXQgcHVzaCBwdWxsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi4wIGlzIG9wZW4gZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjAgaXMgcXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlIHdpdGggaW50ZXJuYWwgcHVsbCB1cC4KKyAgICAgKiB8WzJdICAgICB8RE9VVDAgICAgIHxJTyBPdXRwdXQgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi4wIG91dHB1dCBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjAgb3V0cHV0IGhpZ2guCisgICAgICogfFszXSAgICAgfENUTFNFTDAgICB8SU8gUGluIFN0YXRlIEJhY2t1cCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGxvdyBzcGVlZCAzMiBrSHogb3NjaWxsYXRvciBpcyBkaXNhYmxlZCwgUEYuMCBwaW4gKFgzMktPIHBpbikgY2FuIGJlIHVzZWQgYXMgR1BJTyBmdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHByb2dyYW0gQ1RMU0VMMCB0byBkZWNpZGUgUEYuMCBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBzeXN0ZW0gcG93ZXIgZG9tYWluIEdQSU8gbW9kdWxlIG9yIFZCQVQgcG93ZXIgZG9tYWluIFJUQ19HUElPQ1RMMCBjb250cm9sIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi4wIHBpbiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBHUElPIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIYXJkd2FyZSBhdXRvIGJlY29tZXMgQ1RMU0VMMCA9IDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgdHVybmVkIG9mZi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuMCBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgVkJBVCBwb3dlciBkb21haW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UEYuMCBwaW4gZnVuY3Rpb24gYW5kIEkvTyBzdGF0dXMgYXJlIGNvbnRyb2xsZWQgYnkgT1BNT0RFMFsxOjBdIGFuZCBET1VUMCBhZnRlciBDVExTRUwwIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IENUTFNFTDAgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBieSBoYXJkd2FyZSB0byAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIG9mZiBhbmQgUlRDX0lOSVRbMF0gKFJUQyBBY3RpdmUgU3RhdHVzKSBpcyAxLgorICAgICAqIHxbNTo0XSAgIHxQVVNFTDAgICAgfElPIFB1bGwtdXAgYW5kIFB1bGwtZG93biBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGV0ZXJtaW5lIFBGLjAgSS9PIHB1bGwtdXAgb3IgcHVsbC1kb3duLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMCBwdWxsLXVwIGFuZCBwdWxsLXVwIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi4wIHB1bGwtZG93biBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi4wIHB1bGwtdXAgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuMCBwdWxsLXVwIGFuZCBwdWxsLXVwIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNpY2FsbHksIHRoZSBwdWxsLXVwIGNvbnRyb2wgYW5kIHB1bGwtZG93biBjb250cm9sIGhhcyBmb2xsb3dpbmcgYmVoYXZpb3IgbGltaXRhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC11cCBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREUwIHNldCBhcyBpbnB1dCB0cmktc3RhdGUgYW5kIG9wZW4tZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC1kb3duIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTAgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBtb2RlLgorICAgICAqIHxbOTo4XSAgIHxPUE1PREUxICAgfElPIE9wZXJhdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQRi4xIGlzIGlucHV0IG9ubHkgbW9kZSwgd2l0aG91dCBwdWxsLXVwIHJlc2lzdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuMSBpcyBvdXRwdXQgcHVzaCBwdWxsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi4xIGlzIG9wZW4gZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjEgaXMgcXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlIHdpdGggaW50ZXJuYWwgcHVsbCB1cC4KKyAgICAgKiB8WzEwXSAgICB8RE9VVDEgICAgIHxJTyBPdXRwdXQgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi4xIG91dHB1dCBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjEgb3V0cHV0IGhpZ2guCisgICAgICogfFsxMV0gICAgfENUTFNFTDEgICB8SU8gUGluIFN0YXRlIEJhY2t1cCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGxvdyBzcGVlZCAzMiBrSHogb3NjaWxsYXRvciBpcyBkaXNhYmxlZCwgUEYuMSBwaW4gKFgzMktJIHBpbikgY2FuIGJlIHVzZWQgYXMgR1BJTyBmdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHByb2dyYW0gQ1RMU0VMMSB0byBkZWNpZGUgUEYuMSBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBzeXN0ZW0gcG93ZXIgZG9tYWluIEdQSU8gbW9kdWxlIG9yIFZCQVQgcG93ZXIgZG9tYWluIFJUQ19HUElPQ1RMMCBjb250cm9sIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi4xIHBpbiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBHUElPIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIYXJkd2FyZSBhdXRvIGJlY29tZXMgQ1RMU0VMMSA9IDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgdHVybmVkIG9mZi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuMSBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgVkJBVCBwb3dlciBkb21haW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UEYuMSBwaW4gZnVuY3Rpb24gYW5kIEkvTyBzdGF0dXMgYXJlIGNvbnRyb2xsZWQgYnkgT1BNT0RFMVsxOjBdIGFuZCBET1VUMSBhZnRlciBDVExTRUwxIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IENUTFNFTDEgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBieSBoYXJkd2FyZSB0byAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIG9mZiBhbmQgUlRDX0lOSVRbMF0gKFJUQyBBY3RpdmUgU3RhdHVzKSBpcyAxLgorICAgICAqIHxbMTM6MTJdIHxQVVNFTDEgICAgfElPIFB1bGwtdXAgYW5kIFB1bGwtZG93biBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGV0ZXJtaW5lIFBGLjEgSS9PIHB1bGwtdXAgb3IgcHVsbC1kb3duLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMSBwdWxsLXVwIGFuZCBwdWxsLXVwIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi4xIHB1bGwtZG93biBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi4xIHB1bGwtdXAgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuMSBwdWxsLXVwIGFuZCBwdWxsLXVwIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNpY2FsbHksIHRoZSBwdWxsLXVwIGNvbnRyb2wgYW5kIHB1bGwtZG93biBjb250cm9sIGhhcyBmb2xsb3dpbmcgYmVoYXZpb3IgbGltaXRhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC11cCBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREUxIHNldCBhcyBpbnB1dCB0cmktc3RhdGUgYW5kIG9wZW4tZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC1kb3duIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTEgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBtb2RlLgorICAgICAqIHxbMTc6MTZdIHxPUE1PREUyICAgfElPIE9wZXJhdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQRi4yIGlzIGlucHV0IG9ubHkgbW9kZSwgd2l0aG91dCBwdWxsLXVwIHJlc2lzdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUEYuMiBpcyBvdXRwdXQgcHVzaCBwdWxsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi4yIGlzIG9wZW4gZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjIgaXMgcXVhc2ktYmlkaXJlY3Rpb25hbCBtb2RlIHdpdGggaW50ZXJuYWwgcHVsbCB1cC4KKyAgICAgKiB8WzE4XSAgICB8RE9VVDIgICAgIHxJTyBPdXRwdXQgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi4yIG91dHB1dCBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjIgb3V0cHV0IGhpZ2guCisgICAgICogfFsxOV0gICAgfENUTFNFTDIgICB8SU8gUGluIFN0YXRlIEJhY2t1cCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRBTVAwRU4gaXMgZGlzYWJsZWQsIFBGLjIgcGluIChUQU1QRVIwIHBpbikgY2FuIGJlIHVzZWQgYXMgR1BJTyBmdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHByb2dyYW0gQ1RMU0VMMiB0byBkZWNpZGUgUEYuMiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBzeXN0ZW0gcG93ZXIgZG9tYWluIEdQSU8gbW9kdWxlIG9yIFZCQVQgcG93ZXIgZG9tYWluIFJUQ19HUElPQ1RMMCBjb250cm9sIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi4yIHBpbiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBHUElPIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIYXJkd2FyZSBhdXRvIGJlY29tZXMgQ1RMU0VMMiA9IDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgdHVybmVkIG9mZi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuMiBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgVkJBVCBwb3dlciBkb21haW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UEYuMiBwaW4gZnVuY3Rpb24gYW5kIEkvTyBzdGF0dXMgYXJlIGNvbnRyb2xsZWQgYnkgT1BNT0RFMlsxOjBdIGFuZCBET1VUMiBhZnRlciBDVExTRUwyIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IENUTFNFTDIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBieSBoYXJkd2FyZSB0byAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIG9mZiBhbmQgUlRDX0lOSVRbMF0gKFJUQyBBY3RpdmUgU3RhdHVzKSBpcyAxLgorICAgICAqIHxbMjE6MjBdIHxQVVNFTDIgICAgfElPIFB1bGwtdXAgYW5kIFB1bGwtZG93biBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGV0ZXJtaW5lIFBGLjIgSS9PIHB1bGwtdXAgb3IgcHVsbC1kb3duLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMiBwdWxsLXVwIGFuZCBwdWxsLXVwIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi4yIHB1bGwtZG93biBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi4yIHB1bGwtdXAgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuMiBwdWxsLXVwIGFuZCBwdWxsLXVwIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzaWNhbGx5LCB0aGUgcHVsbC11cCBjb250cm9sIGFuZCBwdWxsLWRvd24gY29udHJvbCBoYXMgZm9sbG93aW5nIGJlaGF2aW9yIGxpbWl0YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtdXAgY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFMiBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIGFuZCBvcGVuLWRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtZG93biBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREUyIHNldCBhcyBpbnB1dCB0cmktc3RhdGUgbW9kZS4KKyAgICAgKiB8WzI1OjI0XSB8T1BNT0RFMyAgIHxJTyBPcGVyYXRpb24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuNyBpcyBpbnB1dCBvbmx5IG1vZGUsIHdpdGhvdXQgcHVsbC11cCByZXNpc3Rvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBGLjcgaXMgb3V0cHV0IHB1c2ggcHVsbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuNyBpcyBvcGVuIGRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQRi43IGlzIHF1YXNpLWJpZGlyZWN0aW9uYWwgbW9kZSB3aXRoIHdpdGggaW50ZXJuYWwgcHVsbCB1cC4KKyAgICAgKiB8WzI2XSAgICB8RE9VVDMgICAgIHxJTyBPdXRwdXQgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi43IG91dHB1dCBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjcgb3V0cHV0IGhpZ2guCisgICAgICogfFsyN10gICAgfENUTFNFTDMgICB8SU8gUGluIFN0YXRlIEJhY2t1cCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRBTVAxRU4gaXMgZGlzYWJsZWQsIFBGLjcgcGluIChUQU1QRVIxIHBpbikgY2FuIGJlIHVzZWQgYXMgR1BJTyBmdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHByb2dyYW0gQ1RMU0VMMyB0byBkZWNpZGUgUEYuNyBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBzeXN0ZW0gcG93ZXIgZG9tYWluIEdQSU8gbW9kdWxlIG9yIFZCQVQgcG93ZXIgZG9tYWluIFJUQ19HUElPQ1RMMCBjb250cm9sIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi43IHBpbiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBHUElPIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIYXJkd2FyZSBhdXRvIGJlY29tZXMgQ1RMU0VMMyA9IDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgdHVybmVkIG9mZi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuNyBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgVkJBVCBwb3dlciBkb21haW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UEYuNyBwaW4gZnVuY3Rpb24gYW5kIEkvTyBzdGF0dXMgYXJlIGNvbnRyb2xsZWQgYnkgT1BNT0RFM1sxOjBdIGFuZCBET1VUMyBhZnRlciBDVExTRUwzIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IENUTFNFTDMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBieSBoYXJkd2FyZSB0byAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIG9mZiBhbmQgUlRDX0lOSVRbMF0gKFJUQyBBY3RpdmUgU3RhdHVzKSBpcyAxLgorICAgICAqIHxbMjk6MjhdIHxQVVNFTDMgICAgfElPIFB1bGwtdXAgYW5kIFB1bGwtZG93biBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGV0ZXJtaW5lIFBGLjcgSS9PIHB1bGwtdXAgb3IgcHVsbC1kb3duLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuNyBwdWxsLXVwIGFuZCBwdWxsLWRvd24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBGLjcgcHVsbC1kb3duIGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBGLjcgcHVsbC11cCBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQRi43IHB1bGwtdXAgYW5kIHB1bGwtZG93biBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzaWNhbGx5LCB0aGUgcHVsbC11cCBjb250cm9sIGFuZCBwdWxsLWRvd24gY29udHJvbCBoYXMgZm9sbG93aW5nIGJlaGF2aW9yIGxpbWl0YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtdXAgY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFMyBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIGFuZCBvcGVuLWRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtZG93biBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREUzIHNldCBhcyBpbnB1dCB0cmktc3RhdGUgbW9kZS4KKyAgICAgKiBAdmFyIFJUQ19UOjpHUElPQ1RMMQorICAgICAqIE9mZnNldDogMHgxMDggIFJUQyBHUElPIENvbnRyb2wgMSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfE9QTU9ERTQgICB8SU8gT3BlcmF0aW9uIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjggaXMgaW5wdXQgb25seSBtb2RlLCB3aXRob3V0IHB1bGwtdXAgcmVzaXN0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi44IGlzIG91dHB1dCBwdXNoIHB1bGwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBGLjggaXMgb3BlbiBkcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuOCBpcyBxdWFzaS1iaWRpcmVjdGlvbmFsIG1vZGUgd2l0aCB3aXRoIGludGVybmFsIHB1bGwgdXAuCisgICAgICogfFsyXSAgICAgfERPVVQ0ICAgICB8SU8gT3V0cHV0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuOCBvdXRwdXQgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi44IG91dHB1dCBoaWdoLgorICAgICAqIHxbM10gICAgIHxDVExTRUw0ICAgfElPIFBpbiBTdGF0ZSBCYWNrdXAgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUQU1QMkVOIGlzIGRpc2FibGVkLCBQRi44IHBpbiAoVEFNUEVSMiBwaW4pIGNhbiBiZSB1c2VkIGFzIEdQSU8gZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBwcm9ncmFtIENUTFNFTDQgdG8gZGVjaWRlIFBGLjggSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgc3lzdGVtIHBvd2VyIGRvbWFpbiBHUElPIG1vZHVsZSBvciBWQkFUIHBvd2VyIGRvbWFpbiBSVENfR1BJT0NUTDEgY29udHJvbCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuOCBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgR1BJTyBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SGFyZHdhcmUgYXV0byBiZWNvbWVzIENUTFNFTDQgPSAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIHR1cm5lZCBvZmYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjggcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IFZCQVQgcG93ZXIgZG9tYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBGLjggcGluIGZ1bmN0aW9uIGFuZCBJL08gc3RhdHVzIGFyZSBjb250cm9sbGVkIGJ5IE9QTU9ERTRbMTowXSBhbmQgRE9VVDQgYWZ0ZXIgQ1RMU0VMNCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBDVExTRUw0IHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYnkgaGFyZHdhcmUgdG8gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyBvZmYgYW5kIFJUQ19JTklUWzBdIChSVEMgQWN0aXZlIFN0YXR1cykgaXMgMS4KKyAgICAgKiB8WzU6NF0gICB8UFVTRUw0ICAgIHxJTyBQdWxsLXVwIGFuZCBQdWxsLWRvd24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERldGVybWluZSBQRi44IEkvTyBwdWxsLXVwIG9yIHB1bGwtZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjggcHVsbC11cCBhbmQgcHVsbC1kb3duIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi44IHB1bGwtZG93biBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi44IHB1bGwtdXAgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuOCBwdWxsLXVwIGFuZCBwdWxsLWRvd24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2ljYWxseSwgdGhlIHB1bGwtdXAgY29udHJvbCBhbmQgcHVsbC1kb3duIGNvbnRyb2wgaGFzIGZvbGxvd2luZyBiZWhhdmlvciBsaW1pdGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLXVwIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTQgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBhbmQgb3Blbi1kcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLWRvd24gY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFNCBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIG1vZGUuCisgICAgICogfFs5OjhdICAgfE9QTU9ERTUgICB8SU8gT3BlcmF0aW9uIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjkgaXMgaW5wdXQgb25seSBtb2RlLCB3aXRob3V0IHB1bGwtdXAgcmVzaXN0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi45IGlzIG91dHB1dCBwdXNoIHB1bGwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBGLjkgaXMgb3BlbiBkcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuOSBpcyBxdWFzaS1iaWRpcmVjdGlvbmFsIG1vZGUgd2l0aCB3aXRoIGludGVybmFsIHB1bGwgdXAuCisgICAgICogfFsxMF0gICAgfERPVVQ1ICAgICB8SU8gT3V0cHV0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuOSBvdXRwdXQgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi45IG91dHB1dCBoaWdoLgorICAgICAqIHxbMTFdICAgIHxDVExTRUw1ICAgfElPIFBpbiBTdGF0ZSBCYWNrdXAgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUQU1QM0VOIGlzIGRpc2FibGVkLCBQRi45IHBpbiAoVEFNUEVSMyBwaW4pIGNhbiBiZSB1c2VkIGFzIEdQSU8gZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBwcm9ncmFtIENUTFNFTDUgdG8gZGVjaWRlIFBGLjkgSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgc3lzdGVtIHBvd2VyIGRvbWFpbiBHUElPIG1vZHVsZSBvciBWQkFUIHBvd2VyIGRvbWFpbiBSVENfR1BJT0NUTDEgY29udHJvbCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuOSBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgR1BJTyBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SGFyZHdhcmUgYXV0byBiZWNvbWVzIENUTFNFTDUgPSAxIHdoZW4gc3lzdGVtIHBvd2VyIGlzIHR1cm5lZCBvZmYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBGLjkgcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IFZCQVQgcG93ZXIgZG9tYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBGLjkgcGluIGZ1bmN0aW9uIGFuZCBJL08gc3RhdHVzIGFyZSBjb250cm9sbGVkIGJ5IE9QTU9ERTVbMTowXSBhbmQgRE9VVDUgYWZ0ZXIgQ1RMU0VMNSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBDVExTRUw1IHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYnkgaGFyZHdhcmUgdG8gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyBvZmYgYW5kIFJUQ19JTklUWzBdIChSVEMgQWN0aXZlIFN0YXR1cykgaXMgMS4KKyAgICAgKiB8WzEzOjEyXSB8UFVTRUw1ICAgIHxJTyBQdWxsLXVwIGFuZCBQdWxsLWRvd24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERldGVybWluZSBQRi45IEkvTyBwdWxsLXVwIG9yIHB1bGwtZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBGLjkgcHVsbC11cCBhbmQgcHVsbC1kb3duIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi45IHB1bGwtZG93biBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi45IHB1bGwtdXAgZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUEYuOSBwdWxsLXVwIGFuZCBwdWxsLWRvd24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuTm90ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCYXNpY2FsbHksIHRoZSBwdWxsLXVwIGNvbnRyb2wgYW5kIHB1bGwtZG93biBjb250cm9sIGhhcyBmb2xsb3dpbmcgYmVoYXZpb3IgbGltaXRhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC11cCBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREU1IHNldCBhcyBpbnB1dCB0cmktc3RhdGUgYW5kIG9wZW4tZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaW5kZXBlbmRlbnQgcHVsbC1kb3duIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTUgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBtb2RlLgorICAgICAqIHxbMTc6MTZdIHxPUE1PREU2ICAgfElPIE9wZXJhdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQRi4xMCBpcyBpbnB1dCBvbmx5IG1vZGUsIHdpdGhvdXQgcHVsbC11cCByZXNpc3Rvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBGLjEwIGlzIG91dHB1dCBwdXNoIHB1bGwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBGLjEwIGlzIG9wZW4gZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjEwIGlzIHF1YXNpLWJpZGlyZWN0aW9uYWwgbW9kZSB3aXRoIHdpdGggaW50ZXJuYWwgcHVsbCB1cC4KKyAgICAgKiB8WzE4XSAgICB8RE9VVDYgICAgIHxJTyBPdXRwdXQgRGF0YQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRi4xMCBvdXRwdXQgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi4xMCBvdXRwdXQgaGlnaC4KKyAgICAgKiB8WzE5XSAgICB8Q1RMU0VMNiAgIHxJTyBQaW4gU3RhdGUgQmFja3VwIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVEFNUDRFTiBpcyBkaXNhYmxlZCwgUEYuMTAgcGluIChUQU1QRVI0IHBpbikgY2FuIGJlIHVzZWQgYXMgR1BJTyBmdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHByb2dyYW0gQ1RMU0VMNiB0byBkZWNpZGUgUEYuMTAgSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgc3lzdGVtIHBvd2VyIGRvbWFpbiBHUElPIG1vZHVsZSBvciBWQkFUIHBvd2VyIGRvbWFpbiBSVENfR1BJT0NUTDEgY29udHJvbCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuMTAgcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IEdQSU8gbW9kdWxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEhhcmR3YXJlIGF1dG8gYmVjb21lcyBDVExTRUw2ID0gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyB0dXJuZWQgb2ZmLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRi4xMCBwaW4gSS9PIGZ1bmN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgVkJBVCBwb3dlciBkb21haW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UEYuMTAgcGluIGZ1bmN0aW9uIGFuZCBJL08gc3RhdHVzIGFyZSBjb250cm9sbGVkIGJ5IE9QTU9ERTZbMTowXSBhbmQgRE9VVDYgYWZ0ZXIgQ1RMU0VMNiBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBDVExTRUw2IHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYnkgaGFyZHdhcmUgdG8gMSB3aGVuIHN5c3RlbSBwb3dlciBpcyBvZmYgYW5kIFJUQ19JTklUWzBdIChSVEMgQWN0aXZlIFN0YXR1cykgaXMgMS4KKyAgICAgKiB8WzIxOjIwXSB8UFVTRUw2ICAgIHxJTyBQdWxsLXVwIGFuZCBQdWxsLWRvd24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERldGVybWluZSBQRi4xMCBJL08gcHVsbC11cCBvciBwdWxsLWRvd24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQRi4xMCBwdWxsLXVwIGFuZCBwdWxsLWRvd24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBGLjEwIHB1bGwtZG93biBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi4xMCBwdWxsLXVwIGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBGLjEwIHB1bGwtdXAgYW5kIHB1bGwtZG93biBkaXNhYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmFzaWNhbGx5LCB0aGUgcHVsbC11cCBjb250cm9sIGFuZCBwdWxsLWRvd24gY29udHJvbCBoYXMgZm9sbG93aW5nIGJlaGF2aW9yIGxpbWl0YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtdXAgY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFNiBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIGFuZCBvcGVuLWRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGluZGVwZW5kZW50IHB1bGwtZG93biBjb250cm9sIHJlZ2lzdGVyIG9ubHkgdmFsaWQgd2hlbiBPUE1PREU2IHNldCBhcyBpbnB1dCB0cmktc3RhdGUgbW9kZS4KKyAgICAgKiB8WzI1OjI0XSB8T1BNT0RFNyAgIHxJTyBPcGVyYXRpb24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMTEgaXMgaW5wdXQgb25seSBtb2RlLCB3aXRob3V0IHB1bGwtdXAgcmVzaXN0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi4xMSBpcyBvdXRwdXQgcHVzaCBwdWxsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQRi4xMSBpcyBvcGVuIGRyYWluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQRi4xMSBpcyBxdWFzaS1iaWRpcmVjdGlvbmFsIG1vZGUgd2l0aCB3aXRoIGludGVybmFsIHB1bGwgdXAuCisgICAgICogfFsyNl0gICAgfERPVVQ3ICAgICB8SU8gT3V0cHV0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEYuMTEgb3V0cHV0IGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuMTEgb3V0cHV0IGhpZ2guCisgICAgICogfFsyN10gICAgfENUTFNFTDcgICB8SU8gUGluIFN0YXRlIEJhY2t1cCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRBTVA1RU4gaXMgZGlzYWJsZWQsIFBGLjExIHBpbiAoVEFNUEVSNSBwaW4pIGNhbiBiZSB1c2VkIGFzIEdQSU8gZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBwcm9ncmFtIENUTFNFTDcgdG8gZGVjaWRlIFBGLjExIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IHN5c3RlbSBwb3dlciBkb21haW4gR1BJTyBtb2R1bGUgb3IgVkJBVCBwb3dlciBkb21haW4gUlRDX0dQSU9DVEwxIGNvbnRyb2wgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBGLjExIHBpbiBJL08gZnVuY3Rpb24gaXMgY29udHJvbGxlZCBieSBHUElPIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIYXJkd2FyZSBhdXRvIGJlY29tZXMgQ1RMU0VMNyA9IDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgdHVybmVkIG9mZi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEYuMTEgcGluIEkvTyBmdW5jdGlvbiBpcyBjb250cm9sbGVkIGJ5IFZCQVQgcG93ZXIgZG9tYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBGLjExIHBpbiBmdW5jdGlvbiBhbmQgSS9PIHN0YXR1cyBhcmUgY29udHJvbGxlZCBieSBPUE1PREU3WzE6MF0gYW5kIERPVVQ3IGFmdGVyIENUTFNFTDcgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQ1RMU0VMNyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGJ5IGhhcmR3YXJlIHRvIDEgd2hlbiBzeXN0ZW0gcG93ZXIgaXMgb2ZmIGFuZCBSVENfSU5JVFswXSAoUlRDIEFjdGl2ZSBTdGF0dXMpIGlzIDEuCisgICAgICogfFsyOToyOF0gfFBVU0VMNyAgICB8SU8gUHVsbC11cCBhbmQgUHVsbC1kb3duIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZXRlcm1pbmUgUEYuMTEgSS9PIHB1bGwtdXAgb3IgcHVsbC1kb3duLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUEYuMTEgcHVsbC11cCBhbmQgcHVsbC1kb3duIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBQRi4xMSBwdWxsLWRvd24gZW5hYmxlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUEYuMTEgcHVsbC11cCBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBQRi4xMSBwdWxsLXVwIGFuZCBwdWxsLWRvd24gZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJhc2ljYWxseSwgdGhlIHB1bGwtdXAgY29udHJvbCBhbmQgcHVsbC1kb3duIGNvbnRyb2wgaGFzIGZvbGxvd2luZyBiZWhhdmlvciBsaW1pdGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLXVwIGNvbnRyb2wgcmVnaXN0ZXIgb25seSB2YWxpZCB3aGVuIE9QTU9ERTcgc2V0IGFzIGlucHV0IHRyaS1zdGF0ZSBhbmQgb3Blbi1kcmFpbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBpbmRlcGVuZGVudCBwdWxsLWRvd24gY29udHJvbCByZWdpc3RlciBvbmx5IHZhbGlkIHdoZW4gT1BNT0RFNyBzZXQgYXMgaW5wdXQgdHJpLXN0YXRlIG1vZGUuCisgICAgICogQHZhciBSVENfVDo6RFNUQ1RMCisgICAgICogT2Zmc2V0OiAweDExMCAgUlRDIERheWxpZ2h0IFNhdmluZyBUaW1lIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBRERIUiAgICAgfEFkZCAxIEhvdXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgUlRDIGhvdXIgZGlnaXQgaGFzIGJlZW4gYWRkZWQgb25lIGhvdXIgZm9yIHN1bW1lciB0aW1lIGNoYW5nZS4KKyAgICAgKiB8WzFdICAgICB8U1VCSFIgICAgIHxTdWJ0cmFjdCAxIEhvdXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgUlRDIGhvdXIgZGlnaXQgaGFzIGJlZW4gc3VidHJhY3RlZCBvbmUgaG91ciBmb3Igd2ludGVyIHRpbWUgY2hhbmdlLgorICAgICAqIHxbMl0gICAgIHxEU0JBSyAgICAgfERheWxpZ2h0IFNhdmluZyBCYWNrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MD0gRGF5bGlnaHQgU2F2aW5nIENoYW5nZSBpcyBub3QgcGVyZm9ybWVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDE9IERheWxpZ2h0IFNhdmluZyBDaGFuZ2UgaXMgcGVyZm9ybWVkLgorICAgICAqIEB2YXIgUlRDX1Q6OlRBTVBDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTIwICBSVEMgVGFtcGVyIFBpbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RFlOMUlTUyAgIHxEeW5hbWljIFBhaXIgMSBJbnB1dCBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGV0ZXJtaW5lIFRhbXBlciAzIGlucHV0IGlzIGZyb20gVGFtcGVyIDIgb3IgVGFtcGVyIDAgaW4gZHluYW1pYyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgaW5wdXQgaXMgZnJvbSBUYW1wZXIgMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIGlucHV0IGlzIGZyb20gVGFtcGVyIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaGFzIGVmZmVjdCBvbmx5IHdoZW4gRFlOUFIxRU4gKFJUQ19UQU1QQ1RMWzE2XSkgYW5kIERZTlBSMEVOIChSVENfVEFNUENUTFsxNV0pIGFyZSBzZXQKKyAgICAgKiB8WzFdICAgICB8RFlOMklTUyAgIHxEeW5hbWljIFBhaXIgMiBJbnB1dCBTb3VyY2UgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGV0ZXJtaW5lIFRhbXBlciA1IGlucHV0IGlzIGZyb20gVGFtcGVyIDQgb3IgVGFtcGVyIDAgaW4gZHluYW1pYyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgaW5wdXQgaXMgZnJvbSBUYW1wZXIgNC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIGlucHV0IGlzIGZyb20gVGFtcGVyIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaGFzIGVmZmVjdCBvbmx5IHdoZW4gRFlOUFIyRU4gKFJUQ19UQU1QQ1RMWzI0XSkgYW5kIERZTlBSMEVOIChSVENfVEFNUENUTFsxNV0pIGFyZSBzZXQKKyAgICAgKiB8WzM6Ml0gICB8RFlOU1JDICAgIHxEeW5hbWljIFJlZmVyZW5jZSBQYXR0ZXJuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZHMgZGV0ZXJtaW5lIHRoZSBuZXcgcmVmZXJlbmNlIHBhdHRlcm4gd2hlbiBjdXJyZW50IHBhdHRlcm4gcnVuIG91dCBpbiBkeW5hbWljIHBhaXIgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCBvciAxMCA9IFRoZSBuZXcgcmVmZXJlbmNlIHBhdHRlcm4gaXMgZ2VuZXJhdGVkIGJ5IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHdoZW4gdGhlIHJlZmVyZW5jZSBwYXR0ZXJuIHJ1biBvdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBUaGUgbmV3IHJlZmVyZW5jZSBwYXR0ZXJuIGlzIHJlcGVhdGVkIHByZXZpb3VzIHJhbmRvbSB2YWx1ZSB3aGVuIHRoZSByZWZlcmVuY2UgcGF0dGVybiBydW4gb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gVGhlIG5ldyByZWZlcmVuY2UgcGF0dGVybiBpcyByZXBlYXRlZCBmcm9tIFNFRUQgKFJUQ19UQU1QU0VFRFszMTowXSkgd2hlbiB0aGUgcmVmZXJlbmNlIHBhdHRlcm4gcnVuIG91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBBZnRlciByZXZpc2UgdGhpcyBiaXQsIHRoZSBTRUVEUkxEIChSVENfVEFNUENUTFs0XSkgc2hvdWxkIGJlIHNldC4KKyAgICAgKiB8WzRdICAgICB8U0VFRFJMRCAgIHxSZWxvYWQgTmV3IFNlZWQgZm9yIFBSTkcgRW5naW5lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0dGluZyB0aGlzIGJpdCwgdGhlIHRhbXBlciBjb25maWd1cmF0aW9uIHdpbGwgYmUgcmVsb2FkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHZW5lcmF0aW5nIGtleSBiYXNlZCBvbiB0aGUgY3VycmVudCBzZWVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWxvYWQgbmV3IHNlZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQmVmb3JlIHNldCB0aGlzIGJpdCwgdGhlIHRhbXBlciBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBzZXQgdG8gY29tcGxldGUuCisgICAgICogfFs3OjVdICAgfERZTlJBVEUgICB8RHluYW1pYyBDaGFuZ2UgUmF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgaXRlbSBpcyBjaG9pY2UgdGhlIGR5bmFtaWMgdGFtcGVyIG91dHB1dCBjaGFuZ2UgcmF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSAyXjEwICogUlRDX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSAyXjExICogUlRDX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSAyXjEyICogUlRDX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSAyXjEzICogUlRDX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSAyXjE0ICogUlRDX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSAyXjE1ICogUlRDX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSAyXjE2ICogUlRDX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSAyXjE3ICogUlRDX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBBZnRlciByZXZpc2UgdGhpcyBmaWVsZCwgc2V0IFNFRURSTEQgKFJUQ19UQU1QQ1RMWzRdKSBjYW4gcmVsb2FkIGNoYWdlIHJhdGUgaW1tZWRpYXRlbHkuCisgICAgICogfFs4XSAgICAgfFRBTVAwRU4gICB8VGFtcGVyMCBEZXRlY3QgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgMCBkZXRlY3QgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAwIGRldGVjdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGUgcmVmZXJlbmNlIGlzIFJUQy1jbG9jayAuIFRhbXBlciBkZXRlY3RvciBuZWVkIHN5bmMgMiB+IDMgUlRDLWNsb2NrLgorICAgICAqIHxbOV0gICAgIHxUQU1QMExWICAgfFRhbXBlciAwIExldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVwZW5kIG9uIGxldmVsIGF0dHJpYnV0ZSBvZiB0YW1wZXIgcGluIGZvciBzdGF0aWMgdGFtcGVyIGRldGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGV0ZWN0IHZvbHRhZ2UgbGV2ZWwgaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBoaWdoLgorICAgICAqIHxbMTBdICAgIHxUQU1QMERCRU4gfFRhbXBlciAwIERlLWJvdW5jZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciAwIGRlLWJvdW5jZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDAgZGUtYm91bmNlIEVuYWJsZWQuCisgICAgICogfFsxMl0gICAgfFRBTVAxRU4gICB8VGFtcGVyIDEgRGV0ZWN0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDEgZGV0ZWN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMSBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhlIHJlZmVyZW5jZSBpcyBSVEMtY2xvY2sgLiBUYW1wZXIgZGV0ZWN0b3IgbmVlZCBzeW5jIDIgfiAzIFJUQy1jbG9jay4KKyAgICAgKiB8WzEzXSAgICB8VEFNUDFMViAgIHxUYW1wZXIgMSBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlcGVuZCBvbiBsZXZlbCBhdHRyaWJ1dGUgb2YgdGFtcGVyIHBpbiBmb3Igc3RhdGljIHRhbXBlciBkZXRlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERldGVjdCB2b2x0YWdlIGxldmVsIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGV0ZWN0IHZvbHRhZ2UgbGV2ZWwgaXMgaGlnaC4KKyAgICAgKiB8WzE0XSAgICB8VEFNUDFEQkVOIHxUYW1wZXIgMSBEZS1ib3VuY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgMSBkZS1ib3VuY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAxIGRlLWJvdW5jZSBFbmFibGVkLgorICAgICAqIHxbMTVdICAgIHxEWU5QUjBFTiAgfER5bmFtaWMgUGFpciAwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RhdGljIGRldGVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRHluYW1pYyBkZXRlY3QuCisgICAgICogfFsxNl0gICAgfFRBTVAyRU4gICB8VGFtcGVyIDIgRGV0ZWN0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDIgZGV0ZWN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMiBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhlIHJlZmVyZW5jZSBpcyBSVEMtY2xvY2sgLiBUYW1wZXIgZGV0ZWN0b3IgbmVlZCBzeW5jIDIgfiAzIFJUQy1jbG9jay4KKyAgICAgKiB8WzE3XSAgICB8VEFNUDJMViAgIHxUYW1wZXIgMiBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlcGVuZCBvbiBsZXZlbCBhdHRyaWJ1dGUgb2YgdGFtcGVyIHBpbiBmb3Igc3RhdGljIHRhbXBlciBkZXRlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERldGVjdCB2b2x0YWdlIGxldmVsIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGV0ZWN0IHZvbHRhZ2UgbGV2ZWwgaXMgaGlnaC4KKyAgICAgKiB8WzE4XSAgICB8VEFNUDJEQkVOIHxUYW1wZXIgMiBEZS1ib3VuY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgMiBkZS1ib3VuY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciAyIGRlLWJvdW5jZSBFbmFibGVkLgorICAgICAqIHxbMjBdICAgIHxUQU1QM0VOICAgfFRhbXBlciAzIERldGVjdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciAzIGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDMgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSByZWZlcmVuY2UgaXMgUlRDLWNsb2NrIC4gVGFtcGVyIGRldGVjdG9yIG5lZWQgc3luYyAyIH4gMyBSVEMtY2xvY2suCisgICAgICogfFsyMV0gICAgfFRBTVAzTFYgICB8VGFtcGVyIDMgTGV2ZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZXBlbmQgb24gbGV2ZWwgYXR0cmlidXRlIG9mIHRhbXBlciBwaW4gZm9yIHN0YXRpYyB0YW1wZXIgZGV0ZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERldGVjdCB2b2x0YWdlIGxldmVsIGlzIGhpZ2guCisgICAgICogfFsyMl0gICAgfFRBTVAzREJFTiB8VGFtcGVyIDMgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDMgZGUtYm91bmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgMyBkZS1ib3VuY2UgRW5hYmxlZC4KKyAgICAgKiB8WzIzXSAgICB8RFlOUFIxRU4gIHxEeW5hbWljIFBhaXIgMSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0YXRpYyBkZXRlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IER5bmFtaWMgZGV0ZWN0LgorICAgICAqIHxbMjRdICAgIHxUQU1QNEVOICAgfFRhbXBlcjQgRGV0ZWN0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDQgZGV0ZWN0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgNCBkZXRlY3QgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhlIHJlZmVyZW5jZSBpcyBSVEMtY2xvY2sgLiBUYW1wZXIgZGV0ZWN0b3IgbmVlZCBzeW5jIDIgfiAzIFJUQy1jbG9jay4KKyAgICAgKiB8WzI1XSAgICB8VEFNUDRMViAgIHxUYW1wZXIgNCBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlcGVuZCBvbiBsZXZlbCBhdHRyaWJ1dGUgb2YgdGFtcGVyIHBpbiBmb3Igc3RhdGljIHRhbXBlciBkZXRlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERldGVjdCB2b2x0YWdlIGxldmVsIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGV0ZWN0IHZvbHRhZ2UgbGV2ZWwgaXMgaGlnaC4KKyAgICAgKiB8WzI2XSAgICB8VEFNUDREQkVOIHxUYW1wZXIgNCBEZS1ib3VuY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYW1wZXIgNCBkZS1ib3VuY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRhbXBlciA0IGRlLWJvdW5jZSBFbmFibGVkLgorICAgICAqIHxbMjhdICAgIHxUQU1QNUVOICAgfFRhbXBlciA1IERldGVjdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRhbXBlciA1IGRldGVjdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFtcGVyIDUgZGV0ZWN0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSByZWZlcmVuY2UgaXMgUlRDLWNsb2NrIC4gVGFtcGVyIGRldGVjdG9yIG5lZWQgc3luYyAyIH4gMyBSVEMtY2xvY2suCisgICAgICogfFsyOV0gICAgfFRBTVA1TFYgICB8VGFtcGVyIDUgTGV2ZWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZXBlbmQgb24gbGV2ZWwgYXR0cmlidXRlIG9mIHRhbXBlciBwaW4gZm9yIHN0YXRpYyB0YW1wZXIgZGV0ZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERldGVjdCB2b2x0YWdlIGxldmVsIGlzIGhpZ2guCisgICAgICogfFszMF0gICAgfFRBTVA1REJFTiB8VGFtcGVyIDUgRGUtYm91bmNlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGFtcGVyIDUgZGUtYm91bmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUYW1wZXIgNSBkZS1ib3VuY2UgRW5hYmxlZC4KKyAgICAgKiB8WzMxXSAgICB8RFlOUFIyRU4gIHxEeW5hbWljIFBhaXIgMiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0YXRpYyBkZXRlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IER5bmFtaWMgZGV0ZWN0LgorICAgICAqIEB2YXIgUlRDX1Q6OlRBTVBTRUVECisgICAgICogT2Zmc2V0OiAweDEyOCAgUlRDIFRhbXBlciBEeW5hbWljIFNlZWQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxTRUVEICAgICAgfFNlZWQgVmFsdWUKKyAgICAgKiBAdmFyIFJUQ19UOjpUQU1QVElNRQorICAgICAqIE9mZnNldDogMHgxMzAgIFJUQyBUYW1wZXIgVGltZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFNFQyAgICAgICB8MS1TZWMgVGltZSBEaWdpdCBvZiBUQU1QRVIgVGltZSAoMH45KQorICAgICAqIHxbNjo0XSAgIHxURU5TRUMgICAgfDEwLVNlYyBUaW1lIERpZ2l0IG9mIFRBTVBFUiBUaW1lICgwfjUpCisgICAgICogfFsxMTo4XSAgfE1JTiAgICAgICB8MS1NaW4gVGltZSBEaWdpdCBvZiBUQU1QRVIgVGltZSAoMH45KQorICAgICAqIHxbMTQ6MTJdIHxURU5NSU4gICAgfDEwLU1pbiBUaW1lIERpZ2l0IG9mIFRBTVBFUiBUaW1lICgwfjUpCisgICAgICogfFsxOToxNl0gfEhSICAgICAgICB8MS1Ib3VyIFRpbWUgRGlnaXQgb2YgVEFNUEVSIFRpbWUgKDB+OSkKKyAgICAgKiB8WzIxOjIwXSB8VEVOSFIgICAgIHwxMC1Ib3VyIFRpbWUgRGlnaXQgb2YgVEFNUEVSIFRpbWUgKDB+MikgTm90ZTogMjQtaG91ciB0aW1lIHNjYWxlIG9ubHkgLgorICAgICAqIHxbMzA6MjRdIHxIWkNOVCAgICAgfEluZGV4IG9mIHN1Yi1zZWNvbmQgY291bnRlcigweDAwIH4weDdGKQorICAgICAqIEB2YXIgUlRDX1Q6OlRBTVBDQUwKKyAgICAgKiBPZmZzZXQ6IDB4MTM0ICBSVEMgVGFtcGVyIENhbGVuZGFyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8REFZICAgICAgIHwxLURheSBDYWxlbmRhciBEaWdpdCBvZiBUQU1QRVIgQ2FsZW5kYXIgKDB+OSkKKyAgICAgKiB8WzU6NF0gICB8VEVOREFZICAgIHwxMC1EYXkgQ2FsZW5kYXIgRGlnaXQgb2YgVEFNUEVSIENhbGVuZGFyICgwfjMpCisgICAgICogfFsxMTo4XSAgfE1PTiAgICAgICB8MS1Nb250aCBDYWxlbmRhciBEaWdpdCBvZiBUQU1QRVIgQ2FsZW5kYXIgKDB+OSkKKyAgICAgKiB8WzEyXSAgICB8VEVOTU9OICAgIHwxMC1Nb250aCBDYWxlbmRhciBEaWdpdCBvZiBUQU1QRVIgQ2FsZW5kYXIgKDB+MSkKKyAgICAgKiB8WzE5OjE2XSB8WUVBUiAgICAgIHwxLVllYXIgQ2FsZW5kYXIgRGlnaXQgb2YgVEFNUEVSIENhbGVuZGFyICgwfjkpCisgICAgICogfFsyMzoyMF0gfFRFTllFQVIgICB8MTAtWWVhciBDYWxlbmRhciBEaWdpdCBvZiBUQU1QRVIgQ2FsZW5kYXIgKDB+OSkKKyAgICAgKiBAdmFyIFJUQ19UOjpDTEtEQ1RMCisgICAgICogT2Zmc2V0OiAweDE0MCAgQ2xvY2sgRmFpbCBEZXRlY3RvciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TFhURkRFTiAgIHxMWFQgQ2xvY2sgRmFpbC9TdG9wIERldGVjdG9yIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTFhUIGNsb2NrIGZhaWwvc3RvcCBkZXRlY3RvciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTFhUIGNsb2NrIGZhaWwvc3RvcCBkZXRlY3RvciBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6CisgICAgICogfFsxXSAgICAgfExYVEZTVyAgICB8TFhUIENsb2NrIEZhaWwgRGV0ZWN0b3IgU3dpdGNoIExJUkMzMksgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMWFQgQ2xvY2sgRmFpbCBEZXRlY3RvciBTd2l0Y2ggTElSQzMySyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIExYVCBjbG9jayBmYWlsIGRldGVjdG9yIGZsYWcgQ0xLRklGIChSVENfSU5UU1RTWzI0XSkgaXMgZ2VuZXJhdGVkLCBSVEMgY2xvY2sgc291cmNlIHdpbGwgc3dpdGNoIHRvIExJUkMzMksgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzJdICAgICB8TFhUU1BTVyAgIHxMWFQgQ2xvY2sgU3RvcCBEZXRlY3RvciBTd2l0Y2ggTElSQzMySyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExYVCBDbG9jayBTdG9wIERldGVjdG9yIFN3aXRjaCBMSVJDMzJLIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgTFhUIGNsb2NrIHN0b3AgZGV0ZWN0b3IgZmxhZyBDTEtTUElGIChSVENfSU5UU1RTWzI1XSkgaXMgZ2VuZXJhdGVkLCBSVEMgY2xvY2sgc291cmNlIHdpbGwgc3dpdGNoIHRvIExJUkMzMksgYXV0b21hdGljYWxseQorICAgICAqIHxbMTZdICAgIHxDTEtTV0xJUkNGfExYVCBDbG9jayBEZXRlY3RvciBGYWlsL1N0b3AgU3dpdGNoIExJUkMzMksgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSVEMgY2xvY2sgc291cmNlIGZyb20gTFhULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSVEMgY2xvY2sgc291cmNlIGZyb20gTElSQzMySyAuCisgICAgICogfFsxN10gICAgfExYVEZBU1RGICB8TFhUIEZhc3RlciBUaGFuIExJUlgzMksgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMWFQgZnJlcXVlbmN5IGlzIHNsb3dseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTFhUIGZyZXF1ZW5jeSBmYXN0ZXIgdGhhbiBMSVJDMzJLLgorICAgICAqIEB2YXIgUlRDX1Q6OkNEQlIKKyAgICAgKiBPZmZzZXQ6IDB4MTQ0ICBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgQm91bmRhcnkgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxTVE9QQkQgICAgfExYVCBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgU3RvcCBCb3VuZGFyeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXRzIGRlZmluZSB0aGUgc3RvcCB2YWx1ZSBvZiBmcmVxdWVuY3kgbW9uaXRvciB3aW5kb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBMWFQgZnJlcXVlbmN5IG1vbml0b3IgY291bnRlciBsb3dlciB0aGFuIENsb2NrIEZyZXF1ZW5jeSBEZXRlY3RvciBTdG9wIEJvdW5kYXJ5ICwgdGhlIExYVCBmcmVxdWVuY3kgZGV0ZWN0IFN0b3AgaW50ZXJydXB0IGZsYWcgd2lsbCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgYm91bmRhcnkgaXMgZGVmaW5lZCBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiBMWFQgYW1vbmcgMjU2IExJUkMzMksgY2xvY2sgdGltZS4KKyAgICAgKiB8WzIzOjE2XSB8RkFJTEJEICAgIHxMWFQgQ2xvY2sgRnJlcXVlbmN5IERldGVjdG9yIEZhaWwgQm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYml0cyBkZWZpbmUgdGhlIGZhaWwgdmFsdWUgb2YgZnJlcXVlbmN5IG1vbml0b3Igd2luZG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gTFhUIGZyZXF1ZW5jeSBtb25pdG9yIGNvdW50ZXIgbG93ZXIgdGhhbiBDbG9jayBGcmVxdWVuY3kgRGV0ZWN0b3IgZmFpbCBCb3VuZGFyeSAsIHRoZSBMWFQgZnJlcXVlbmN5IGRldGVjdCBmYWlsIGludGVycnVwdCBmbGFnIHdpbGwgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGJvdW5kYXJ5IGlzIGRlZmluZWQgYXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgTFhUIGFtb25nIDI1NiBMSVJDMzJLIGNsb2NrIHRpbWUuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTklUOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gUlRDIEluaXRpYXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUldFTjsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFJUQyBBY2Nlc3MgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEZSRVFBREo7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBSVEMgRnJlcXVlbmN5IENvbXBlbnNhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUSU1FOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gUlRDIFRpbWUgTG9hZGluZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0FMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIFJUQyBDYWxlbmRhciBMb2FkaW5nIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENMS0ZNVDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBSVEMgVGltZSBTY2FsZSBTZWxlY3Rpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBXRUVLREFZOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAxOF0gUlRDIERheSBvZiB0aGUgV2VlayBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVEFMTTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMWNdIFJUQyBUaW1lIEFsYXJtIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENBTE07ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBSVEMgQ2FsZW5kYXIgQWxhcm0gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBMRUFQWUVBUjsgICAgICAgICAgICAgIC8qITwgWzB4MDAyNF0gUlRDIExlYXAgWWVhciBJbmRpY2F0b3IgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjhdIFJUQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDJjXSBSVEMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUSUNLOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gUlRDIFRpbWUgVGljayBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVEFNU0s7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMzRdIFJUQyBUaW1lIEFsYXJtIE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENBTVNLOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDM4XSBSVEMgQ2FsZW5kYXIgQWxhcm0gTWFzayBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTUFJDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzY10gUlRDIFNwYXJlIEZ1bmN0aW9uYWwgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1BSWzIwXTsgICAgICAgICAgICAgICAvKiE8IFsweDAwNDBdIH4gWzB4MDA4Q10gUlRDIFNwYXJlIFJlZ2lzdGVyIDAgfiAxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzI4XTsgICAgICAgICAgLyogMHg5MCB+IDB4RkMgKi8KKyAgICBfX0lPIHVpbnQzMl90IExYVENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMTAwXSBSVEMgMzIuNzY4IGtIeiBPc2NpbGxhdG9yIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUElPQ1RMMDsgICAgICAgICAgICAgIC8qITwgWzB4MDEwNF0gUlRDIEdQSU8gQ29udHJvbCAwIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BJT0NUTDE7ICAgICAgICAgICAgICAvKiE8IFsweDAxMDhdIFJUQyBHUElPIENvbnRyb2wgMSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzFdOworICAgIF9fSU8gdWludDMyX3QgRFNUQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAxMTBdIFJUQyBEYXlsaWdodCBTYXZpbmcgVGltZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUyWzNdOworICAgIF9fSU8gdWludDMyX3QgVEFNUENUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAxMjBdIFJUQyBUYW1wZXIgUGluIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUzWzFdOworICAgIF9fSU8gdWludDMyX3QgVEFNUFNFRUQ7ICAgICAgICAgICAgICAvKiE8IFsweDAxMjhdIFJUQyBUYW1wZXIgRHluYW1pYyBTZWVkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU0WzFdOworICAgIF9fSSAgdWludDMyX3QgVEFNUFRJTUU7ICAgICAgICAgICAgICAvKiE8IFsweDAxMzBdIFJUQyBUYW1wZXIgVGltZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFRBTVBDQUw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMTM0XSBSVEMgVGFtcGVyIENhbGVuZGFyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFNVsyXTsKKyAgICBfX0lPIHVpbnQzMl90IENMS0RDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMTQwXSBDbG9jayBGYWlsIERldGVjdG9yIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDREJSOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDE0NF0gQ2xvY2sgRnJlcXVlbmN5IERldGVjdG9yIEJvdW5kYXJ5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFJUQ19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBSVENfQ09OU1QgUlRDIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFJUQyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFJUQ19JTklUX0FDVElWRV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5JVDogQUNUSVZFIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfSU5JVF9BQ1RJVkVfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOSVRfQUNUSVZFX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOSVQ6IEFDVElWRSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5JVF9JTklUX1BvcyAgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOSVQ6IElOSVQgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOSVRfSU5JVF9Nc2sgICAgICAgICAgICAgICAgKDB4N2ZmZmZmZmZ1bCA8PCBSVENfSU5JVF9JTklUX1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTklUOiBJTklUIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1JXRU5fUldFTl9Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpSV0VOOiBSV0VOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19SV0VOX1JXRU5fTXNrICAgICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBSVENfUldFTl9SV0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6UldFTjogUldFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19SV0VOX1JXRU5GX1BvcyAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6UldFTjogUldFTkYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfUldFTl9SV0VORl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX1JXRU5fUldFTkZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlJXRU46IFJXRU5GIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfUldFTl9SVENCVVNZX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlJXRU46IFJUQ0JVU1kgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1JXRU5fUlRDQlVTWV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19SV0VOX1JUQ0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpSV0VOOiBSVENCVVNZIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0ZSRVFBREpfRlJFUUFESl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpGUkVRQURKOiBGUkVRQURKIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19GUkVRQURKX0ZSRVFBREpfTXNrICAgICAgICAgICgweDNmZmZmZnVsIDw8IFJUQ19GUkVRQURKX0ZSRVFBREpfUG9zKSAgICAgICAgICAgLyohPCBSVENfVDo6RlJFUUFESjogRlJFUUFESiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19USU1FX1NFQ19Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElNRTogU0VDIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfVElNRV9TRUNfTXNrICAgICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX1RJTUVfU0VDX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IFNFQyBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVElNRV9URU5TRUNfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IFRFTlNFQyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RJTUVfVEVOU0VDX01zayAgICAgICAgICAgICAgKDB4N3VsIDw8IFJUQ19USU1FX1RFTlNFQ19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSU1FOiBURU5TRUMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RJTUVfTUlOX1BvcyAgICAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSU1FOiBNSU4gUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19USU1FX01JTl9Nc2sgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfVElNRV9NSU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElNRTogTUlOIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19USU1FX1RFTk1JTl9Qb3MgICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElNRTogVEVOTUlOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfVElNRV9URU5NSU5fTXNrICAgICAgICAgICAgICAoMHg3dWwgPDwgUlRDX1RJTUVfVEVOTUlOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IFRFTk1JTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVElNRV9IUl9Qb3MgICAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IEhSIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RJTUVfSFJfTXNrICAgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19USU1FX0hSX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSU1FOiBIUiBNYXNrICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RJTUVfVEVOSFJfUG9zICAgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSU1FOiBURU5IUiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19USU1FX1RFTkhSX01zayAgICAgICAgICAgICAgICgweDN1bCA8PCBSVENfVElNRV9URU5IUl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElNRTogVEVOSFIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19USU1FX0haQ05UX1BvcyAgICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElNRTogSFpDTlQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfVElNRV9IWkNOVF9Nc2sgICAgICAgICAgICAgICAoMHg3ZnVsIDw8IFJUQ19USU1FX0haQ05UX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRJTUU6IEhaQ05UIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FMX0RBWV9Qb3MgICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTDogREFZIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTF9EQVlfTXNrICAgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19DQUxfREFZX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUw6IERBWSBNYXNrICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTF9URU5EQVlfUG9zICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUw6IFRFTkRBWSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQUxfVEVOREFZX01zayAgICAgICAgICAgICAgICgweDN1bCA8PCBSVENfQ0FMX1RFTkRBWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMOiBURU5EQVkgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQUxfTU9OX1BvcyAgICAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMOiBNT04gUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FMX01PTl9Nc2sgICAgICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX0NBTF9NT05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTDogTU9OIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FMX1RFTk1PTl9Qb3MgICAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTDogVEVOTU9OIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTF9URU5NT05fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19DQUxfVEVOTU9OX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUw6IFRFTk1PTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTF9ZRUFSX1BvcyAgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUw6IFlFQVIgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQUxfWUVBUl9Nc2sgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfQ0FMX1lFQVJfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMOiBZRUFSIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQUxfVEVOWUVBUl9Qb3MgICAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMOiBURU5ZRUFSIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FMX1RFTllFQVJfTXNrICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX0NBTF9URU5ZRUFSX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTDogVEVOWUVBUiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0xLRk1UXzI0SEVOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNMS0ZNVDogMjRIRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NMS0ZNVF8yNEhFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19DTEtGTVRfMjRIRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDTEtGTVQ6IDI0SEVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NMS0ZNVF9IWkNOVEVOX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDTEtGTVQ6IEhaQ05URU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19DTEtGTVRfSFpDTlRFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfQ0xLRk1UX0haQ05URU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRk1UOiBIWkNOVEVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19XRUVLREFZX1dFRUtEQVlfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6V0VFS0RBWTogV0VFS0RBWSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfV0VFS0RBWV9XRUVLREFZX01zayAgICAgICAgICAoMHg3dWwgPDwgUlRDX1dFRUtEQVlfV0VFS0RBWV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OldFRUtEQVk6IFdFRUtEQVkgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFMTV9TRUNfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTE06IFNFQyBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTE1fU0VDX01zayAgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19UQUxNX1NFQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBTRUMgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTE1fVEVOU0VDX1BvcyAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBURU5TRUMgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQUxNX1RFTlNFQ19Nc2sgICAgICAgICAgICAgICgweDd1bCA8PCBSVENfVEFMTV9URU5TRUNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFMTTogVEVOU0VDIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQUxNX01JTl9Qb3MgICAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFMTTogTUlOIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFMTV9NSU5fTXNrICAgICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX1RBTE1fTUlOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTE06IE1JTiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFMTV9URU5NSU5fUG9zICAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTE06IFRFTk1JTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTE1fVEVOTUlOX01zayAgICAgICAgICAgICAgKDB4N3VsIDw8IFJUQ19UQUxNX1RFTk1JTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBURU5NSU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTE1fSFJfUG9zICAgICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBIUiBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQUxNX0hSX01zayAgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfVEFMTV9IUl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFMTTogSFIgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQUxNX1RFTkhSX1BvcyAgICAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFMTTogVEVOSFIgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFMTV9URU5IUl9Nc2sgICAgICAgICAgICAgICAoMHgzdWwgPDwgUlRDX1RBTE1fVEVOSFJfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTE06IFRFTkhSIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFMTV9IWkNOVF9Qb3MgICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTE06IEhaQ05UIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTE1fSFpDTlRfTXNrICAgICAgICAgICAgICAgKDB4N2Z1bCA8PCBSVENfVEFMTV9IWkNOVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQUxNOiBIWkNOVCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTE1fREFZX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUxNOiBEQVkgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQUxNX0RBWV9Nc2sgICAgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfQ0FMTV9EQVlfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMTTogREFZIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQUxNX1RFTkRBWV9Qb3MgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMTTogVEVOREFZIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FMTV9URU5EQVlfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgUlRDX0NBTE1fVEVOREFZX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTE06IFRFTkRBWSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FMTV9NT05fUG9zICAgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTE06IE1PTiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTE1fTU9OX01zayAgICAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19DQUxNX01PTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUxNOiBNT04gTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTE1fVEVOTU9OX1BvcyAgICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUxNOiBURU5NT04gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQUxNX1RFTk1PTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBSVENfQ0FMTV9URU5NT05fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMTTogVEVOTU9OIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQUxNX1lFQVJfUG9zICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FMTTogWUVBUiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FMTV9ZRUFSX01zayAgICAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX0NBTE1fWUVBUl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTE06IFlFQVIgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FMTV9URU5ZRUFSX1BvcyAgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTE06IFRFTllFQVIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTE1fVEVOWUVBUl9Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19DQUxNX1RFTllFQVJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQUxNOiBURU5ZRUFSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0xFQVBZRUFSX0xFQVBZRUFSX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpMRUFQWUVBUjogTEVBUFlFQVIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFJUQ19MRUFQWUVBUl9MRUFQWUVBUl9Nc2sgICAgICAgICgweDF1bCA8PCBSVENfTEVBUFlFQVJfTEVBUFlFQVJfUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6TEVBUFlFQVI6IExFQVBZRUFSIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRFTl9BTE1JRU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IEFMTUlFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBSVENfSU5URU5fQUxNSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVEVOX0FMTUlFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBBTE1JRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5URU5fVElDS0lFTl9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBUSUNLSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVEVOX1RJQ0tJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRFTl9USUNLSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVElDS0lFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVEVOX1RBTVAwSUVOX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVEFNUDBJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRFTl9UQU1QMElFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5URU5fVEFNUDBJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IFRBTVAwSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRFTl9UQU1QMUlFTl9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IFRBTVAxSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfSU5URU5fVEFNUDFJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVEVOX1RBTVAxSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBUQU1QMUlFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5URU5fVEFNUDJJRU5fUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBUQU1QMklFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVEVOX1RBTVAySUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRFTl9UQU1QMklFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVEFNUDJJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVEVOX1RBTVAzSUVOX1BvcyAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVEFNUDNJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRFTl9UQU1QM0lFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5URU5fVEFNUDNJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IFRBTVAzSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRFTl9UQU1QNElFTl9Qb3MgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IFRBTVA0SUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfSU5URU5fVEFNUDRJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVEVOX1RBTVA0SUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBUQU1QNElFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5URU5fVEFNUDVJRU5fUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBUQU1QNUlFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVEVOX1RBTVA1SUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRFTl9UQU1QNUlFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogVEFNUDVJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVEVOX0NMS0ZJRU5fUG9zICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRFTjogQ0xLRklFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRFTl9DTEtGSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5URU5fQ0xLRklFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IENMS0ZJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRFTl9DTEtTUElFTl9Qb3MgICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5URU46IENMS1NQSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfSU5URU5fQ0xLU1BJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVEVOX0NMS1NQSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVEVOOiBDTEtTUElFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5UU1RTX0FMTUlGX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogQUxNSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVFNUU19BTE1JRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRTVFNfQUxNSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IEFMTUlGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVFNUU19USUNLSUZfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IFRJQ0tJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRTVFNfVElDS0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5UU1RTX1RJQ0tJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUSUNLSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRTVFNfVEFNUDBJRl9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUQU1QMElGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfSU5UU1RTX1RBTVAwSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVFNUU19UQU1QMElGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogVEFNUDBJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5UU1RTX1RBTVAxSUZfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogVEFNUDFJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVFNUU19UQU1QMUlGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRTVFNfVEFNUDFJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IFRBTVAxSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVFNUU19UQU1QMklGX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IFRBTVAySUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRTVFNfVEFNUDJJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5UU1RTX1RBTVAySUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUQU1QMklGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRTVFNfVEFNUDNJRl9Qb3MgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUQU1QM0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfSU5UU1RTX1RBTVAzSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVFNUU19UQU1QM0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogVEFNUDNJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5UU1RTX1RBTVA0SUZfUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogVEFNUDRJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVFNUU19UQU1QNElGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRTVFNfVEFNUDRJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IFRBTVA0SUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0lOVFNUU19UQU1QNUlGX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IFRBTVA1SUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19JTlRTVFNfVEFNUDVJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfSU5UU1RTX1RBTVA1SUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBUQU1QNUlGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19JTlRTVFNfQ0xLRklGX1BvcyAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6SU5UU1RTOiBDTEtGSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBSVENfSU5UU1RTX0NMS0ZJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0lOVFNUU19DTEtGSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogQ0xLRklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfSU5UU1RTX0NMS1NQSUZfUG9zICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OklOVFNUUzogQ0xLU1BJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lOVFNUU19DTEtTUElGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19JTlRTVFNfQ0xLU1BJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpJTlRTVFM6IENMS1NQSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RJQ0tfVElDS19Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUSUNLOiBUSUNLIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19USUNLX1RJQ0tfTXNrICAgICAgICAgICAgICAgICgweDd1bCA8PCBSVENfVElDS19USUNLX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VElDSzogVElDSyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1TS19NU0VDX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNU0s6IE1TRUMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFNU0tfTVNFQ19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVNLX01TRUNfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVNLOiBNU0VDIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNU0tfTVRFTlNFQ19Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVNLOiBNVEVOU0VDIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVNLX01URU5TRUNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1TS19NVEVOU0VDX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1TSzogTVRFTlNFQyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVNLX01NSU5fUG9zICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1TSzogTU1JTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1TS19NTUlOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNU0tfTU1JTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNU0s6IE1NSU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1TS19NVEVOTUlOX1BvcyAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNU0s6IE1URU5NSU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBSVENfVEFNU0tfTVRFTk1JTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVNLX01URU5NSU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVNLOiBNVEVOTUlOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNU0tfTUhSX1BvcyAgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVNLOiBNSFIgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVNLX01IUl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1TS19NSFJfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1TSzogTUhSIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVNLX01URU5IUl9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1TSzogTVRFTkhSIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1TS19NVEVOSFJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNU0tfTVRFTkhSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNU0s6IE1URU5IUiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQU1TS19NREFZX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FNU0s6IE1EQVkgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfQ0FNU0tfTURBWV9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0NBTVNLX01EQVlfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTVNLOiBNREFZIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FNU0tfTVRFTkRBWV9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTVNLOiBNVEVOREFZIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTVNLX01URU5EQVlfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19DQU1TS19NVEVOREFZX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQU1TSzogTVRFTkRBWSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTVNLX01NT05fUG9zICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQU1TSzogTU1PTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DQU1TS19NTU9OX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBSVENfQ0FNU0tfTU1PTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FNU0s6IE1NT04gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DQU1TS19NVEVOTU9OX1BvcyAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FNU0s6IE1URU5NT04gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBSVENfQ0FNU0tfTVRFTk1PTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0NBTVNLX01URU5NT05fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTVNLOiBNVEVOTU9OIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0FNU0tfTVlFQVJfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNBTVNLOiBNWUVBUiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NBTVNLX01ZRUFSX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19DQU1TS19NWUVBUl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQU1TSzogTVlFQVIgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NBTVNLX01URU5ZRUFSX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDQU1TSzogTVRFTllFQVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19DQU1TS19NVEVOWUVBUl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfQ0FNU0tfTVRFTllFQVJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0FNU0s6IE1URU5ZRUFSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFJDVExfU1BSUldFTl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSQ1RMOiBTUFJSV0VOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfU1BSQ1RMX1NQUlJXRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX1NQUkNUTF9TUFJSV0VOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUkNUTDogU1BSUldFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSQ1RMX1NQUkNTVFNfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUkNUTDogU1BSQ1NUUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUkNUTF9TUFJDU1RTX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19TUFJDVExfU1BSQ1NUU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFJDVEw6IFNQUkNTVFMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUkNUTF9MWFRGQ0xSX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFJDVEw6IExYVEZDTFIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19TUFJDVExfTFhURkNMUl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfU1BSQ1RMX0xYVEZDTFJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSQ1RMOiBMWFRGQ0xSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFIwX1NQQVJFX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMDogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSMF9TUEFSRV9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFIwX1NQQVJFX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjA6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSMV9TUEFSRV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjE6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjFfU1BBUkVfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSMV9TUEFSRV9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxOiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjJfU1BBUkVfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIyOiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFIyX1NQQVJFX01zayAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjJfU1BBUkVfUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMjogU1BBUkUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFIzX1NQQVJFX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMzogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSM19TUEFSRV9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFIzX1NQQVJFX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjM6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSNF9TUEFSRV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjQ6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjRfU1BBUkVfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSNF9TUEFSRV9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFI0OiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjVfU1BBUkVfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFI1OiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFI1X1NQQVJFX01zayAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjVfU1BBUkVfUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSNTogU1BBUkUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFI2X1NQQVJFX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSNjogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSNl9TUEFSRV9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFI2X1NQQVJFX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjY6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSN19TUEFSRV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjc6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjdfU1BBUkVfTXNrICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSN19TUEFSRV9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFI3OiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjhfU1BBUkVfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFI4OiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFI4X1NQQVJFX01zayAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjhfU1BBUkVfUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSODogU1BBUkUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFI5X1NQQVJFX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSOTogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSOV9TUEFSRV9Nc2sgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFI5X1NQQVJFX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjk6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSMTBfU1BBUkVfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjEwOiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjEwX1NQQVJFX01zayAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSMTBfU1BBUkVfUG9zKSAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxMDogU1BBUkUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjExX1NQQVJFX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxMTogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFIxMV9TUEFSRV9Nc2sgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjExX1NQQVJFX1BvcykgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTE6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFIxMl9TUEFSRV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTI6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSMTJfU1BBUkVfTXNrICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFIxMl9TUEFSRV9Qb3MpICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjEyOiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSMTNfU1BBUkVfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjEzOiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjEzX1NQQVJFX01zayAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSMTNfU1BBUkVfUG9zKSAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxMzogU1BBUkUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjE0X1NQQVJFX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxNDogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFIxNF9TUEFSRV9Nc2sgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjE0X1NQQVJFX1BvcykgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTQ6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFIxNV9TUEFSRV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTU6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSMTVfU1BBUkVfTXNrICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFIxNV9TUEFSRV9Qb3MpICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjE1OiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSMTZfU1BBUkVfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjE2OiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjE2X1NQQVJFX01zayAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSMTZfU1BBUkVfUG9zKSAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxNjogU1BBUkUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1NQUjE3X1NQQVJFX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxNzogU1BBUkUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19TUFIxN19TUEFSRV9Nc2sgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgUlRDX1NQUjE3X1NQQVJFX1BvcykgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTc6IFNQQVJFIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19TUFIxOF9TUEFSRV9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6U1BSMTg6IFNQQVJFIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfU1BSMThfU1BBUkVfTXNrICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19TUFIxOF9TUEFSRV9Qb3MpICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjE4OiBTUEFSRSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfU1BSMTlfU1BBUkVfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlNQUjE5OiBTUEFSRSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1NQUjE5X1NQQVJFX01zayAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBSVENfU1BSMTlfU1BBUkVfUG9zKSAgICAgICAgICAgICAvKiE8IFJUQ19UOjpTUFIxOTogU1BBUkUgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0xYVENUTF9MSVJDMzJLRU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpMWFRDVEw6IExJUkMzMktFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19MWFRDVExfTElSQzMyS0VOX01zayAgICAgICAgICgweDF1bCA8PCBSVENfTFhUQ1RMX0xJUkMzMktFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6TFhUQ1RMOiBMSVJDMzJLRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19MWFRDVExfR0FJTl9Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6TFhUQ1RMOiBHQUlOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBSVENfTFhUQ1RMX0dBSU5fTXNrICAgICAgICAgICAgICAoMHg3dWwgPDwgUlRDX0xYVENUTF9HQUlOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkxYVENUTDogR0FJTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfTFhUQ1RMX0MzMktTX1BvcyAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkxYVENUTDogQzMyS1MgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0xYVENUTF9DMzJLU19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19MWFRDVExfQzMyS1NfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpMWFRDVEw6IEMzMktTIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX09QTU9ERTBfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogT1BNT0RFMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9PUE1PREUwX01zayAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDBfT1BNT0RFMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IE9QTU9ERTAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9ET1VUMF9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IERPVVQwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfRE9VVDBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwwX0RPVVQwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBET1VUMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfQ1RMU0VMMF9Qb3MgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBDVExTRUwwIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0NUTFNFTDBfTXNrICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMF9DVExTRUwwX1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogQ1RMU0VMMCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX1BVU0VMMF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogUFVTRUwwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9QVVNFTDBfTXNrICAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDBfUFVTRUwwX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IFBVU0VMMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9PUE1PREUxX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IE9QTU9ERTEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfT1BNT0RFMV9Nc2sgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwwX09QTU9ERTFfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBPUE1PREUxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfRE9VVDFfUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBET1VUMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0RPVVQxX01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMF9ET1VUMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogRE9VVDEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0NUTFNFTDFfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogQ1RMU0VMMSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9DVExTRUwxX01zayAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDBfQ1RMU0VMMV9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IENUTFNFTDEgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9QVVNFTDFfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IFBVU0VMMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfUFVTRUwxX01zayAgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwwX1BVU0VMMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBQVVNFTDEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfT1BNT0RFMl9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBPUE1PREUyIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX09QTU9ERTJfTXNrICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMF9PUE1PREUyX1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogT1BNT0RFMiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0RPVVQyX1BvcyAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogRE9VVDIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9ET1VUMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDBfRE9VVDJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IERPVVQyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9DVExTRUwyX1BvcyAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IENUTFNFTDIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfQ1RMU0VMMl9Nc2sgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwwX0NUTFNFTDJfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBDVExTRUwyIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfUFVTRUwyX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBQVVNFTDIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX1BVU0VMMl9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMF9QVVNFTDJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogUFVTRUwyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX09QTU9ERTNfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogT1BNT0RFMyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9PUE1PREUzX01zayAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDBfT1BNT0RFM19Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IE9QTU9ERTMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9ET1VUM19Qb3MgICAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IERPVVQzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDBfRE9VVDNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwwX0RPVVQzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBET1VUMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDBfQ1RMU0VMM19Qb3MgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwwOiBDVExTRUwzIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwwX0NUTFNFTDNfTXNrICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMF9DVExTRUwzX1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogQ1RMU0VMMyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwwX1BVU0VMM19Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMDogUFVTRUwzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMF9QVVNFTDNfTXNrICAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDBfUFVTRUwzX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDA6IFBVU0VMMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9PUE1PREU0X1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IE9QTU9ERTQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfT1BNT0RFNF9Nc2sgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwxX09QTU9ERTRfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBPUE1PREU0IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfRE9VVDRfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBET1VUNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0RPVVQ0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMV9ET1VUNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogRE9VVDQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0NUTFNFTDRfUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogQ1RMU0VMNCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9DVExTRUw0X01zayAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDFfQ1RMU0VMNF9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IENUTFNFTDQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9QVVNFTDRfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IFBVU0VMNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfUFVTRUw0X01zayAgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwxX1BVU0VMNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBQVVNFTDQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfT1BNT0RFNV9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBPUE1PREU1IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX09QTU9ERTVfTXNrICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMV9PUE1PREU1X1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogT1BNT0RFNSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0RPVVQ1X1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogRE9VVDUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9ET1VUNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDFfRE9VVDVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IERPVVQ1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9DVExTRUw1X1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IENUTFNFTDUgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfQ1RMU0VMNV9Nc2sgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwxX0NUTFNFTDVfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBDVExTRUw1IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfUFVTRUw1X1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBQVVNFTDUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX1BVU0VMNV9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFJUQ19HUElPQ1RMMV9QVVNFTDVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogUFVTRUw1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX09QTU9ERTZfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogT1BNT0RFNiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9PUE1PREU2X01zayAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDFfT1BNT0RFNl9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IE9QTU9ERTYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9ET1VUNl9Qb3MgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IERPVVQ2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfRE9VVDZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0dQSU9DVEwxX0RPVVQ2X1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBET1VUNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfQ1RMU0VMNl9Qb3MgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBDVExTRUw2IFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0NUTFNFTDZfTXNrICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMV9DVExTRUw2X1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogQ1RMU0VMNiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX1BVU0VMNl9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogUFVTRUw2IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9QVVNFTDZfTXNrICAgICAgICAgICgweDN1bCA8PCBSVENfR1BJT0NUTDFfUFVTRUw2X1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IFBVU0VMNiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9PUE1PREU3X1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IE9QTU9ERTcgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfT1BNT0RFN19Nc2sgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwxX09QTU9ERTdfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBPUE1PREU3IE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfR1BJT0NUTDFfRE9VVDdfUG9zICAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBET1VUNyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0RPVVQ3X01zayAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19HUElPQ1RMMV9ET1VUN19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogRE9VVDcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0dQSU9DVEwxX0NUTFNFTDdfUG9zICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpHUElPQ1RMMTogQ1RMU0VMNyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9DVExTRUw3X01zayAgICAgICAgICgweDF1bCA8PCBSVENfR1BJT0NUTDFfQ1RMU0VMN19Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IENUTFNFTDcgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19HUElPQ1RMMV9QVVNFTDdfUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6R1BJT0NUTDE6IFBVU0VMNyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfR1BJT0NUTDFfUFVTRUw3X01zayAgICAgICAgICAoMHgzdWwgPDwgUlRDX0dQSU9DVEwxX1BVU0VMN19Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkdQSU9DVEwxOiBQVVNFTDcgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfRFNUQ1RMX0FEREhSX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkRTVENUTDogQURESFIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0RTVENUTF9BRERIUl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFJUQ19EU1RDVExfQURESFJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpEU1RDVEw6IEFEREhSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0RTVENUTF9TVUJIUl9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpEU1RDVEw6IFNVQkhSIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFJUQ19EU1RDVExfU1VCSFJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBSVENfRFNUQ1RMX1NVQkhSX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6RFNUQ1RMOiBTVUJIUiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19EU1RDVExfRFNCQUtfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6RFNUQ1RMOiBEU0JBSyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBSVENfRFNUQ1RMX0RTQkFLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0RTVENUTF9EU0JBS19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkRTVENUTDogRFNCQUsgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9EWU4xSVNTX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IERZTjFJU1MgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfRFlOMUlTU19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX0RZTjFJU1NfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBEWU4xSVNTIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfRFlOMklTU19Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBEWU4ySVNTIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTjJJU1NfTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9EWU4ySVNTX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOMklTUyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTlNSQ19Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOU1JDIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9EWU5TUkNfTXNrICAgICAgICAgICAoMHgzdWwgPDwgUlRDX1RBTVBDVExfRFlOU1JDX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IERZTlNSQyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9TRUVEUkxEX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFNFRURSTEQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfU0VFRFJMRF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1NFRURSTERfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBTRUVEUkxEIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfRFlOUkFURV9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBEWU5SQVRFIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTlJBVEVfTXNrICAgICAgICAgICgweDd1bCA8PCBSVENfVEFNUENUTF9EWU5SQVRFX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOUkFURSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAwRU5fUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDBFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMEVOX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDBFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAwRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMExWX1BvcyAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAwTFYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDBMVl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVAwTFZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMExWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDBEQkVOX1BvcyAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMERCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAwREJFTl9Nc2sgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QMERCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDBEQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAxRU5fUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDFFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDFFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAxRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMUxWX1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAxTFYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDFMVl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVAxTFZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMUxWIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDFEQkVOX1BvcyAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMURCRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAxREJFTl9Nc2sgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QMURCRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDFEQkVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTlBSMEVOX1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOUFIwRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9EWU5QUjBFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfRFlOUFIwRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IERZTlBSMEVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMkVOX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAyRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDJFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVAyRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMkVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDJMVl9Qb3MgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QMkxWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAyTFZfTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QMkxWX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDJMViBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAyREJFTl9Qb3MgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDJEQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QMkRCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDJEQkVOX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAyREJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QM0VOX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAzRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDNFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVAzRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QM0VOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDNMVl9Qb3MgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QM0xWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAzTFZfTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QM0xWX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDNMViBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVAzREJFTl9Qb3MgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDNEQkVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QM0RCRU5fTXNrICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDNEQkVOX1BvcykgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVAzREJFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9EWU5QUjFFTl9Qb3MgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IERZTlBSMUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfRFlOUFIxRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX0RZTlBSMUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBEWU5QUjFFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDRFTl9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QNEVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVA0RU5fTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QNEVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDRFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVA0TFZfUG9zICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDRMViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QNExWX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDRMVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVA0TFYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QNERCRU5fUG9zICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVA0REJFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDREQkVOX01zayAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVA0REJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QNERCRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDVFTl9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QNUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVA1RU5fTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9UQU1QNUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDVFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ1RMX1RBTVA1TFZfUG9zICAgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogVEFNUDVMViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QNUxWX01zayAgICAgICAgICAoMHgxdWwgPDwgUlRDX1RBTVBDVExfVEFNUDVMVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVA1TFYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENUTF9UQU1QNURCRU5fUG9zICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDVEw6IFRBTVA1REJFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDVExfVEFNUDVEQkVOX01zayAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX1RBTVA1REJFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBUQU1QNURCRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDVExfRFlOUFIyRU5fUG9zICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ1RMOiBEWU5QUjJFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ1RMX0RZTlBSMkVOX01zayAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENUTF9EWU5QUjJFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENUTDogRFlOUFIyRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QU0VFRF9TRUVEX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFNFRUQ6IFNFRUQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBSVENfVEFNUFNFRURfU0VFRF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFJUQ19UQU1QU0VFRF9TRUVEX1BvcykgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBTRUVEOiBTRUVEIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUFRJTUVfU0VDX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBUSU1FOiBTRUMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBUSU1FX1NFQ19Nc2sgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19UQU1QVElNRV9TRUNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogU0VDIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBUSU1FX1RFTlNFQ19Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogVEVOU0VDIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QVElNRV9URU5TRUNfTXNrICAgICAgICAgICgweDd1bCA8PCBSVENfVEFNUFRJTUVfVEVOU0VDX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFRJTUU6IFRFTlNFQyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QVElNRV9NSU5fUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFRJTUU6IE1JTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFNUFRJTUVfTUlOX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX1RBTVBUSU1FX01JTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBUSU1FOiBNSU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUFRJTUVfVEVOTUlOX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBUSU1FOiBURU5NSU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBUSU1FX1RFTk1JTl9Nc2sgICAgICAgICAgKDB4N3VsIDw8IFJUQ19UQU1QVElNRV9URU5NSU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogVEVOTUlOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBUSU1FX0hSX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogSFIgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QVElNRV9IUl9Nc2sgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfVEFNUFRJTUVfSFJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFRJTUU6IEhSIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QVElNRV9URU5IUl9Qb3MgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUFRJTUU6IFRFTkhSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfVEFNUFRJTUVfVEVOSFJfTXNrICAgICAgICAgICAoMHgzdWwgPDwgUlRDX1RBTVBUSU1FX1RFTkhSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBUSU1FOiBURU5IUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUFRJTUVfSFpDTlRfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBUSU1FOiBIWkNOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBUSU1FX0haQ05UX01zayAgICAgICAgICAgKDB4N2Z1bCA8PCBSVENfVEFNUFRJTUVfSFpDTlRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QVElNRTogSFpDTlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDQUxfREFZX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ0FMOiBEQVkgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ0FMX0RBWV9Nc2sgICAgICAgICAgICAgICgweGZ1bCA8PCBSVENfVEFNUENBTF9EQVlfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENBTDogREFZIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ0FMX1RFTkRBWV9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENBTDogVEVOREFZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENBTF9URU5EQVlfTXNrICAgICAgICAgICAoMHgzdWwgPDwgUlRDX1RBTVBDQUxfVEVOREFZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDQUw6IFRFTkRBWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENBTF9NT05fUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDQUw6IE1PTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDQUxfTU9OX01zayAgICAgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19UQU1QQ0FMX01PTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ0FMOiBNT04gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX1RBTVBDQUxfVEVOTU9OX1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ0FMOiBURU5NT04gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFJUQ19UQU1QQ0FMX1RFTk1PTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBSVENfVEFNUENBTF9URU5NT05fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENBTDogVEVOTU9OIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19UQU1QQ0FMX1lFQVJfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6VEFNUENBTDogWUVBUiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBSVENfVEFNUENBTF9ZRUFSX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgUlRDX1RBTVBDQUxfWUVBUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDQUw6IFlFQVIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfVEFNUENBTF9URU5ZRUFSX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OlRBTVBDQUw6IFRFTllFQVIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX1RBTVBDQUxfVEVOWUVBUl9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFJUQ19UQU1QQ0FMX1RFTllFQVJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpUQU1QQ0FMOiBURU5ZRUFSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NMS0RDVExfTFhURkRFTl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDTEtEQ1RMOiBMWFRGREVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFJUQ19DTEtEQ1RMX0xYVEZERU5fTXNrICAgICAgICAgICgweDF1bCA8PCBSVENfQ0xLRENUTF9MWFRGREVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRENUTDogTFhURkRFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DTEtEQ1RMX0xYVEZTV19Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRENUTDogTFhURlNXIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBSVENfQ0xLRENUTF9MWFRGU1dfTXNrICAgICAgICAgICAoMHgxdWwgPDwgUlRDX0NMS0RDVExfTFhURlNXX1BvcykgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNMS0RDVEw6IExYVEZTVyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0xLRENUTF9MWFRTUFNXX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNMS0RDVEw6IExYVFNQU1cgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgUlRDX0NMS0RDVExfTFhUU1BTV19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFJUQ19DTEtEQ1RMX0xYVFNQU1dfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDTEtEQ1RMOiBMWFRTUFNXIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NMS0RDVExfQ0xLU1dMSVJDRl9Qb3MgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDTEtEQ1RMOiBDTEtTV0xJUkNGIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFJUQ19DTEtEQ1RMX0NMS1NXTElSQ0ZfTXNrICAgICAgICgweDF1bCA8PCBSVENfQ0xLRENUTF9DTEtTV0xJUkNGX1BvcykgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRENUTDogQ0xLU1dMSVJDRiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFJUQ19DTEtEQ1RMX0xYVEZBU1RGX1BvcyAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0xLRENUTDogTFhURkFTVEYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBSVENfQ0xLRENUTF9MWFRGQVNURl9Nc2sgICAgICAgICAoMHgxdWwgPDwgUlRDX0NMS0RDVExfTFhURkFTVEZfUG9zKSAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNMS0RDVEw6IExYVEZBU1RGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBSVENfQ0RCUl9TVE9QQkRfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDX1Q6OkNEQlI6IFNUT1BCRCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0NEQlJfU1RPUEJEX01zayAgICAgICAgICAgICAgKDB4ZmZ1bCA8PCBSVENfQ0RCUl9TVE9QQkRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDREJSOiBTVE9QQkQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgUlRDX0NEQlJfRkFJTEJEX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJUQ19UOjpDREJSOiBGQUlMQkQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFJUQ19DREJSX0ZBSUxCRF9Nc2sgICAgICAgICAgICAgICgweGZmdWwgPDwgUlRDX0NEQlJfRkFJTEJEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBSVENfVDo6Q0RCUjogRkFJTEJEIE1hc2sgICAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIFJUQ19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUlRDIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19SVENfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3NjX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3NjX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDlkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc2NfcmVnLmgKQEAgLTAsMCArMSw5NzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzY19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgU0MgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fU0NfUkVHX0hfXworI2RlZmluZSBfX1NDX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU21hcnQgQ2FyZCBIb3N0IEludGVyZmFjZSBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgU0MgU21hcnQgQ2FyZCBIb3N0IEludGVyZmFjZSBDb250cm9sbGVyKFNDKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBTQyBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIFNDX1Q6OkRBVAorICAgICAqIE9mZnNldDogMHgwMCAgU0MgUmVjZWl2ZS9UcmFuc21pdCBIb2xkaW5nIEJ1ZmZlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfERBVCAgICAgICB8UmVjZWl2ZS9UcmFuc21pdCBIb2xkaW5nIEJ1ZmZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCeSB3cml0aW5nIGRhdGEgdG8gREFULCB0aGUgU0Mgd2lsbCBzZW5kIG91dCBhbiA4LWJpdCBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFNDRU4gKFNDbl9DVExbMF0pIGlzIG5vdCBlbmFibGVkLCBEQVQgY2Fubm90IGJlIHByb2dyYW1tZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QnkgcmVhZGluZyBEQVQsIHRoZSBTQyB3aWxsIHJldHVybiBhbiA4LWJpdCByZWNlaXZlZCBkYXRhLgorICAgICAqIEB2YXIgU0NfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDA0ICBTQyBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U0NFTiAgICAgIHxTQyBDb250cm9sbGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gMSB0byBlbmFibGUgU0Mgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQyB3aWxsIGZvcmNlIGFsbCB0cmFuc2l0aW9uIHRvIElETEUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDIGNvbnRyb2xsZXIgaXMgZW5hYmxlZCBhbmQgYWxsIGZ1bmN0aW9uIGNhbiB3b3JrIGNvcnJlY3RseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogU0NFTiBtdXN0IGJlIHNldCB0byAxIGJlZm9yZSBmaWxsaW5nIGluIG90aGVyIFNDIHJlZ2lzdGVycywgb3Igc21hcnQgY2FyZCB3aWxsIG5vdCB3b3JrIHByb3Blcmx5LgorICAgICAqIHxbMV0gICAgIHxSWE9GRiAgICAgfFJYIFRyYW5zaXRpb24gRGlzYWJsZSBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgZm9yIGRpc2FibGUgUnggdHJhbnNpdGlvbiBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlY2VpdmVyIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWNlaXZlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQVVUT0NFTiAoU0NuX0NUTFszXSkgaXMgZW5hYmxlZCwgdGhpcyBmaWVsZCBpcyBpZ25vcmVkLgorICAgICAqIHxbMl0gICAgIHxUWE9GRiAgICAgfFRYIFRyYW5zaXRpb24gRGlzYWJsZSBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgZm9yIGRpc2FibGUgVHggdHJhbnNpdGlvbiBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHRyYW5zY2VpdmVyIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0cmFuc2NlaXZlciBEaXNhYmxlZC4KKyAgICAgKiB8WzNdICAgICB8QVVUT0NFTiAgIHxBdXRvIENvbnZlbnRpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgZm9yIGVuYWJsZSBhdXRvIGNvbnZlbnRpb24gZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tY29udmVudGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0by1jb252ZW50aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXNlciBlbmFibGVzIGF1dG8gY29udmVudGlvbiBmdW5jdGlvbiwgdGhlIHNldHRpbmcgc3RlcCBtdXN0IGJlIGRvbmUgYmVmb3JlIEFuc3dlciB0byBSZXNldCAoQVRSKSBzdGF0ZSBhbmQgdGhlIGZpcnN0IGRhdGEgbXVzdCBiZSAweDNCIG9yIDB4M0YKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBZnRlciBoYXJkd2FyZSByZWNlaXZlZCBmaXJzdCBkYXRhIGFuZCBzdG9yZWQgaXQgYXQgYnVmZmVyLCBoYXJkd2FyZSB3aWxsIGRlY2lkZWQgdGhlIGNvbnZlbnRpb24gYW5kIGNoYW5nZSB0aGUgQ09OU0VMIChTQ25fQ1RMWzU6NF0pIGJpdHMgYXV0b21hdGljYWxseSB3aGVuIHJlY2VpdmVkIGZpcnN0IGRhdGEgaXMgMHgzQiBvciAweDNGCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgcmVjZWl2ZWQgZmlyc3QgYnl0ZSBpcyAweDNCLCBUUyBpcyBkaXJlY3QgY29udmVudGlvbiwgQ09OU0VMIChTQ25fQ1RMWzU6NF0pIHdpbGwgYmUgc2V0IHRvIDAwIGF1dG9tYXRpY2FsbHksIG90aGVyd2lzZSB0aGUgVFMgaXMgaW52ZXJzZSBjb252ZW50aW9uLCBhbmQgQ09OU0VMIChTQ25fQ1RMWzU6NF0pIHdpbGwgYmUgc2V0IHRvIDExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBmaXJzdCBkYXRhIGlzIG5vdCAweDNCIG9yIDB4M0YsIGhhcmR3YXJlIHdpbGwgc2V0IEFDRVJSSUYgKFNDbl9JTlRTVFNbMTBdKSBhbmQgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHRvIENQVSB3aGVuIEFDRVJSSUVOIChTQ25fSU5URU5bMTBdKSBpcyBlbmFibGVkLgorICAgICAqIHxbNTo0XSAgIHxDT05TRUwgICAgfENvbnZlbnRpb24gU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEaXJlY3QgY29udmVudGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBJbnZlcnNlIGNvbnZlbnRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgQVVUT0NFTiAoU0NuX0NUTFszXSkgaXMgZW5hYmxlZCwgdGhpcyBmaWVsZCBpcyBpZ25vcmVkLgorICAgICAqIHxbNzo2XSAgIHxSWFRSR0xWICAgfFJ4IEJ1ZmZlciBUcmlnZ2VyIExldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSByZWNlaXZpbmcgYnVmZmVyIGVxdWFscyB0aGUgUlhUUkdMViwgdGhlIFJEQUlGIHdpbGwgYmUgc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgUkRBSUVOIChTQ25fSU5URU5bMF0pIGlzIGVuYWJsZWQsIGFuIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZCB0byBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBSeCBCdWZmZXIgVHJpZ2dlciBMZXZlbCB3aXRoIDAxIGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUnggQnVmZmVyIFRyaWdnZXIgTGV2ZWwgd2l0aCAwMiBieXRlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFJ4IEJ1ZmZlciBUcmlnZ2VyIExldmVsIHdpdGggMDMgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzEyOjhdICB8QkdUICAgICAgIHxCbG9jayBHdWFyZCBUaW1lIChCR1QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmxvY2sgZ3VhcmQgdGltZSBtZWFucyB0aGUgbWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIHRoZSBsZWFkaW5nIGVkZ2VzIG9mIHR3byBjb25zZWN1dGl2ZSBjaGFyYWN0ZXJzIGJldHdlZW4gZGlmZmVyZW50IHRyYW5zZmVyIGRpcmVjdGlvbnMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgY291bnRlciBmb3IgdGhlIGJpdCBsZW5ndGggb2YgYmxvY2sgZ3VhcmQgdGltZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFjY29yZGluZyB0byBJU08gNzgxNi0zLCBpbiBUID0gMCBtb2RlLCB1c2VyIG11c3QgZmlsbCAxNSAocmVhbCBibG9jayBndWFyZCB0aW1lID0gMTYuNSkgdG8gdGhpcyBmaWVsZDsgaW4gVCA9IDEgbW9kZSwgdXNlciBtdXN0IGZpbGwgMjEgKHJlYWwgYmxvY2sgZ3VhcmQgdGltZSA9IDIyLjUpIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSByZWFsIGJsb2NrIGd1YXJkIHRpbWUgaXMgQkdUICsgMS4KKyAgICAgKiB8WzE0OjEzXSB8VE1SU0VMICAgIHxUaW1lciBDaGFubmVsIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gQWxsIGludGVybmFsIHRpbWVyIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEludGVybmFsIDI0IGJpdCB0aW1lciBhbmQgdHdvIDggYml0IHRpbWVycyBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gY29uZmlndXJlIHRoZW0gYnkgc2V0dGluZyBTQ25fVE1SQ1RMMFsyMzowXSwgU0NuX1RNUkNUTDFbNzowXSBhbmQgU0NuX1RNUkNUTDJbNzowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVzZXJ2ZQorICAgICAqIHxbMTVdICAgIHxOU0IgICAgICAgfFN0b3AgQml0IExlbmd0aAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBsZW5ndGggb2Ygc3RvcCBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBzdG9wIGJpdCBsZW5ndGggaXMgMiBFVFUuKGZvciBJU08gNzgxNi0zIFQ9MCBtb2RlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxPSBUaGUgc3RvcCBiaXQgbGVuZ3RoIGlzIDEgRVRVLihmb3IgSVNPIDc4MTYtMyBUPTEgbW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSBkZWZhdWx0IHN0b3AgYml0IGxlbmd0aCBpcyAyLiBTQyBhbmQgVUFSVCBhZG9wdHMgTlNCIHRvIHByb2dyYW0gdGhlIHN0b3AgYml0IGxlbmd0aC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gVUFSVCBtb2RlLCBSWCBjYW4gcmVjZWl2ZSB0aGUgZGF0YSBzZXF1ZW5jZSBpbiAxIHN0b3AgYml0IG9yIDIgc3RvcCBiaXRzIHdpdGggTlNCIGlzIHNldCB0byAwLgorICAgICAqIHxbMTg6MTZdIHxSWFJUWSAgICAgfFJYIEVycm9yIFJldHJ5IENvdW50IE51bWJlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNlaXZlciByZXRyaWVzIHRoYXQgYXJlIGFsbG93ZWQgd2hlbiBwYXJpdHkgZXJyb3IgaGFzIG9jY3VycmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSByZWFsIHJldHJ5IG51bWJlciBpcyBSWFJUWSArIDEsIHNvIDggaXMgdGhlIG1heGltdW0gcmV0cnkgbnVtYmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGZpZWxkIGNhbm5vdCBiZSBjaGFuZ2VkIHdoZW4gUlhSVFlFTiBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNoYW5nZSBmbG93IGlzIHRvIGRpc2FibGUgUlhSVFlFTiBmaXJzdCBhbmQgdGhlbiBmaWxsIGluIG5ldyByZXRyeSB2YWx1ZS4KKyAgICAgKiB8WzE5XSAgICB8UlhSVFlFTiAgIHxSWCBFcnJvciBSZXRyeSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyByZWNlaXZlciByZXRyeSBmdW5jdGlvbiB3aGVuIHBhcml0eSBlcnJvciBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJYIGVycm9yIHJldHJ5IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCBlcnJvciByZXRyeSBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVzZXIgbXVzdCBmaWxsIGluIHRoZSBSWFJUWSB2YWx1ZSBiZWZvcmUgZW5hYmxpbmcgdGhpcyBiaXQuCisgICAgICogfFsyMjoyMF0gfFRYUlRZICAgICB8VFggRXJyb3IgUmV0cnkgQ291bnQgTnVtYmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWl0dGVyIHJldHJpZXMgdGhhdCBhcmUgYWxsb3dlZCB3aGVuIHBhcml0eSBlcnJvciBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSByZWFsIHJldHJ5IG51bWJlciBpcyBUWFJUWSArIDEsIHNvIDggaXMgdGhlIG1heGltdW0gcmV0cnkgbnVtYmVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGZpZWxkIGNhbm5vdCBiZSBjaGFuZ2VkIHdoZW4gVFhSVFlFTiBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNoYW5nZSBmbG93IGlzIHRvIGRpc2FibGUgVFhSVFlFTiBmaXJzdCBhbmQgdGhlbiBmaWxsIGluIG5ldyByZXRyeSB2YWx1ZS4KKyAgICAgKiB8WzIzXSAgICB8VFhSVFlFTiAgIHxUWCBFcnJvciBSZXRyeSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0cmFuc21pdHRlciByZXRyeSBmdW5jdGlvbiB3aGVuIHBhcml0eSBlcnJvciBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRYIGVycm9yIHJldHJ5IGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUWCBlcnJvciByZXRyeSBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMjU6MjRdIHxDRERCU0VMICAgfENhcmQgRGV0ZWN0IERlLWJvdW5jZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgY2FyZCBkZXRlY3QgZGUtYm91bmNlIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IERlLWJvdW5jZSBzYW1wbGUgY2FyZCBpbnNlcnQgb25jZSBwZXIgMzg0ICgxMjggKiAzKSBTQyBtb2R1bGUgY2xvY2tzIGFuZCBkZS1ib3VuY2Ugc2FtcGxlIGNhcmQgcmVtb3ZhbCBvbmNlIHBlciAxMjggU0MgbW9kdWxlIGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVzZXJ2ZWQuCisgICAgICogfFsyNl0gICAgfENETFYgICAgICB8Q2FyZCBEZXRlY3QgTGV2ZWwgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdoZW4gaGFyZHdhcmUgZGV0ZWN0cyB0aGUgY2FyZCBkZXRlY3QgcGluIChTQ25fQ0QpIGZyb20gaGlnaCB0byBsb3csIGl0IGluZGljYXRlcyBhIGNhcmQgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gaGFyZHdhcmUgZGV0ZWN0cyB0aGUgY2FyZCBkZXRlY3QgcGluIChTQ25fQ0QpIGZyb20gbG93IHRvIGhpZ2gsIGl0IGluZGljYXRlcyBhIGNhcmQgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVXNlciBtdXN0IHNlbGVjdCBjYXJkIGRldGVjdCBsZXZlbCBiZWZvcmUgU21hcnQgQ2FyZCBjb250cm9sbGVyIGVuYWJsZWQuCisgICAgICogfFszMF0gICAgfFNZTkMgICAgICB8U1lOQyBGbGFnIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfER1ZSB0byBzeW5jaHJvbml6YXRpb24sIHVzZXIgc2hvdWxkIGNoZWNrIHRoaXMgYml0IGJlZm9yZSB3cml0aW5nIGEgbmV3IHZhbHVlIHRvIFJYUlRZIGFuZCBUWFJUWSBmaWVsZHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN5bmNocm9uaXppbmcgaXMgY29tcGxldGlvbiwgdXNlciBjYW4gd3JpdGUgbmV3IGRhdGEgdG8gUlhSVFkgYW5kIFRYUlRZLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMYXN0IHZhbHVlIGlzIHN5bmNocm9uaXppbmcuCisgICAgICogQHZhciBTQ19UOjpBTFRDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDggIFNDIEFsdGVybmF0ZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8VFhSU1QgICAgIHxUWCBTb2Z0d2FyZSBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVFhSU1QgaXMgc2V0LCBhbGwgdGhlIGJ5dGVzIGluIHRoZSB0cmFuc21pdCBidWZmZXIgYW5kIFRYIGludGVybmFsIHN0YXRlIG1hY2hpbmUgd2lsbCBiZSBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSBUWCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIGFuZCBwb2ludGVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGF1dG8gY2xlYXJlZCBhZnRlciByZXNldCBpcyBjb21wbGV0ZS4KKyAgICAgKiB8WzFdICAgICB8UlhSU1QgICAgIHxSeCBTb2Z0d2FyZSBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gUlhSU1QgaXMgc2V0LCBhbGwgdGhlIGJ5dGVzIGluIHRoZSByZWNlaXZlIGJ1ZmZlciBhbmQgUnggaW50ZXJuYWwgc3RhdGUgbWFjaGluZSB3aWxsIGJlIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdGhlIFJ4IGludGVybmFsIHN0YXRlIG1hY2hpbmUgYW5kIHBvaW50ZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgYXV0byBjbGVhcmVkIGFmdGVyIHJlc2V0IGlzIGNvbXBsZXRlLgorICAgICAqIHxbMl0gICAgIHxEQUNURU4gICAgfERlYWN0aXZhdGlvbiBTZXF1ZW5jZSBHZW5lcmF0b3IgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgU0MgY29udHJvbGxlciB0byBpbml0aWF0ZSB0aGUgY2FyZCBieSBkZWFjdGl2YXRpb24gc2VxdWVuY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGVhY3RpdmF0aW9uIHNlcXVlbmNlIGdlbmVyYXRvciBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIHRoZSBkZWFjdGl2YXRpb24gc2VxdWVuY2UgY29tcGxldGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSBhbmQgdGhlIElOSVRJRiAoU0NuX0lOVFNUU1s4XSkgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBmaWVsZCB3aWxsIGJlIGNsZWFyZWQgYnkgVFhSU1QgKFNDbl9BTFRDVExbMF0pIGFuZCBSWFJTVCAoU0NuX0FMVENUTFsxXSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzLCBkbyBub3QgZmlsbCBpbiB0aGlzIGJpdCBEQUNURU4sIFRYUlNUIGFuZCBSWFJTVCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBJZiBTQ0VOIChTQ25fQ1RMWzBdKSBpcyBub3QgZW5hYmxlZCwgdGhpcyBmaWxlZCBjYW5ub3QgYmUgcHJvZ3JhbW1lZC4KKyAgICAgKiB8WzNdICAgICB8QUNURU4gICAgIHxBY3RpdmF0aW9uIFNlcXVlbmNlIEdlbmVyYXRvciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyBTQyBjb250cm9sbGVyIHRvIGluaXRpYXRlIHRoZSBjYXJkIGJ5IGFjdGl2YXRpb24gc2VxdWVuY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQWN0aXZhdGlvbiBzZXF1ZW5jZSBnZW5lcmF0b3IgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogV2hlbiB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSBjb21wbGV0ZWQsIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGFuZCB0aGUgSU5JVElGIChTQ25fSU5UU1RTWzhdKSB3aWxsIGJlIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGZpZWxkIHdpbGwgYmUgY2xlYXJlZCBieSBUWFJTVCAoU0NuX0FMVENUTFswXSkgYW5kIFJYUlNUIChTQ25fQUxUQ1RMWzFdKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGRvIG5vdCBmaWxsIGluIHRoaXMgYml0IEFDVEVOLCBUWFJTVCBhbmQgUlhSU1QgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSWYgU0NFTiAoU0NuX0NUTFswXSkgaXMgbm90IGVuYWJsZWQsIHRoaXMgZmlsZWQgY2Fubm90IGJlIHByb2dyYW1tZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTQ6IER1cmluZyB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSwgUlggaXMgZGlzYWJsZWQgYXV0b21hdGljYWxseSBhbmQgY2FuIG5vdCByZWNlaXZlIGRhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBZnRlciB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSBjb21wbGV0aW9uLCBSWE9GRiAoU0NuX0NUTFsxXSkga2VlcHMgdGhlIHN0YXRlIGJlZm9yZSBoYXJkd2FyZSBhY3RpdmF0aW9uLgorICAgICAqIHxbNF0gICAgIHxXQVJTVEVOICAgfFdhcm0gUmVzZXQgU2VxdWVuY2UgR2VuZXJhdG9yIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIFNDIGNvbnRyb2xsZXIgdG8gaW5pdGlhdGUgdGhlIGNhcmQgYnkgd2FybSByZXNldCBzZXF1ZW5jZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXYXJtIHJlc2V0IHNlcXVlbmNlIGdlbmVyYXRvciBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXaGVuIHRoZSB3YXJtIHJlc2V0IHNlcXVlbmNlIGNvbXBsZXRlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYW5kIHRoZSBJTklUSUYgKFNDbl9JTlRTVFNbOF0pIHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgZmllbGQgd2lsbCBiZSBjbGVhcmVkIGJ5IFRYUlNUIChTQ25fQUxUQ1RMWzBdKSBhbmQgUlhSU1QgKFNDbl9BTFRDVExbMV0pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgZG8gbm90IGZpbGwgaW4gdGhpcyBiaXQgV0FSU1RFTiwgVFhSU1QgYW5kIFJYUlNUIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIFNDRU4gKFNDbl9DVExbMF0pIGlzIG5vdCBlbmFibGVkLCB0aGlzIGZpbGVkIGNhbm5vdCBiZSBwcm9ncmFtbWVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU0OiBEdXJpbmcgdGhlIHdhcm0gcmVzZXQgc2VxdWVuY2UsIFJYIGlzIGRpc2FibGVkIGF1dG9tYXRpY2FsbHkgYW5kIGNhbiBub3QgcmVjZWl2ZSBkYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgdGhlIHdhcm0gcmVzZXQgc2VxdWVuY2UgY29tcGxldGlvbiwgUlhPRkYgKFNDbl9DVExbMV0pIGtlZXBzIHRoZSBzdGF0ZSBiZWZvcmUgcGVyZm9ybSB3YXJtIHJlc2V0IHNlcXVlbmNlLgorICAgICAqIHxbNV0gICAgIHxDTlRFTjAgICAgfEludGVybmFsIFRpbWVyMCBTdGFydCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyBUaW1lciAwIHRvIHN0YXJ0IGNvdW50aW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gZmlsbCAwIHRvIHN0b3AgaXQgYW5kIHNldCAxIHRvIHJlbG9hZCBhbmQgY291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY291bnRlciB1bml0IGlzIEVUVSBiYXNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdG9wcyBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RhcnQgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgaW50ZXJuYWwgMjQgYml0IHRpbWVyIHdoZW4gVE1SU0VMIChTQ25fQ1RMWzE0OjEzXSkgaXMgMTEgb25seS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgdGhlIG9wZXJhdGlvbiBtb2RlIGlzIG5vdCBpbiBhdXRvLXJlbG9hZCBtb2RlIChTQ25fVE1SQ1RMMFsyNl0gPSAwKSwgdGhpcyBiaXQgd2lsbCBiZSBhdXRvLWNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIFNDRU4gKFNDbl9DVExbMF0pIGlzIG5vdCBlbmFibGVkLCB0aGlzIGZpbGVkIGNhbm5vdCBiZSBwcm9ncmFtbWVkCisgICAgICogfFs2XSAgICAgfENOVEVOMSAgICB8SW50ZXJuYWwgVGltZXIxIFN0YXJ0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIFRpbWVyIDEgdG8gc3RhcnQgY291bnRpbmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBmaWxsIDAgdG8gc3RvcCBpdCBhbmQgc2V0IDEgdG8gcmVsb2FkIGFuZCBjb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb3VudGVyIHVuaXQgaXMgRVRVIGJhc2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0b3BzIGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTdGFydCBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBmaWVsZCBpcyB1c2VkIGZvciBpbnRlcm5hbCA4IGJpdCB0aW1lciB3aGVuIFRNUlNFTChTQ25fQ1RMWzE0OjEzXSkgaXMgMTEgb25seQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERvIG5vdCBmaWxsIENOVEVOMSB3aGVuIFRNUlNFTCAoU0NuX0NUTFsxNDoxM10pIGlzIG5vdCBlcXVhbCB0byAxMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgdGhlIG9wZXJhdGlvbiBtb2RlIGlzIG5vdCBpbiBhdXRvLXJlbG9hZCBtb2RlIChTQ25fVE1SQ1RMMVsyNl0gPSAwKSwgdGhpcyBiaXQgd2lsbCBiZSBhdXRvLWNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IElmIFNDRU4gKFNDbl9DVExbMF0pIGlzIG5vdCBlbmFibGVkLCB0aGlzIGZpbGVkIGNhbm5vdCBiZSBwcm9ncmFtbWVkLgorICAgICAqIHxbN10gICAgIHxDTlRFTjIgICAgfEludGVybmFsIFRpbWVyMiBTdGFydCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyBUaW1lciAyIHRvIHN0YXJ0IGNvdW50aW5nCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gZmlsbCAwIHRvIHN0b3AgaXQgYW5kIHNldCAxIHRvIHJlbG9hZCBhbmQgY291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY291bnRlciB1bml0IGlzIEVUVSBiYXNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdG9wcyBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RhcnQgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgaW50ZXJuYWwgOCBiaXQgdGltZXIgd2hlbiBUTVJTRUwgKFNDbl9DVExbMTQ6MTNdKSBpcyAxMSBvbmx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RG8gbm90IGZpbGwgaW4gQ05URU4yIHdoZW4gVE1SU0VMIChTQ25fQ1RMWzE0OjEzXSkgaXMgbm90IGVxdWFsIHRvIDExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiB0aGUgb3BlcmF0aW9uIG1vZGUgaXMgbm90IGluIGF1dG8tcmVsb2FkIG1vZGUgKFNDbl9UTVJDVEwyWzI2XSA9IDApLCB0aGlzIGJpdCB3aWxsIGJlIGF1dG8tY2xlYXJlZCBieSBoYXJkd2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSWYgU0NFTiAoU0NuX0NUTFswXSkgaXMgbm90IGVuYWJsZWQsIHRoaXMgZmlsZWQgY2Fubm90IGJlIHByb2dyYW1tZWQuCisgICAgICogfFs5OjhdICAgfElOSVRTRUwgICB8SW5pdGlhbCBUaW1pbmcgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZHMgaW5kaWNhdGVzIHRoZSBpbml0aWFsIHRpbWluZyBvZiBoYXJkd2FyZSBhY3RpdmF0aW9uLCB3YXJtLXJlc2V0IG9yIGRlYWN0aXZhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdW5pdCBvZiBpbml0aWFsIHRpbWluZyBpcyBTQyBtb2R1bGUgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWN0aXZhdGlvbjogcmVmZXIgdG8gU0MgQWN0aXZhdGlvbiBTZXF1ZW5jZSBpbiBGaWd1cmUgNi4xNy00IFNDIEFjdGl2YXRpb24gU2VxdWVuY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2FybS1yZXNldDogcmVmZXIgdG8gV2FybS1SZXNldCBTZXF1ZW5jZSBpbiBGaWd1cmUgNi4xNy01IFNDIFdhcm0gUmVzZXQgU2VxdWVuY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGVhY3RpdmF0aW9uOiByZWZlciB0byBEZWFjdGl2YXRpb24gU2VxdWVuY2UgaW4gRmlndXJlIDYuMTctNiBTQyBEZWFjdGl2YXRpb24gU2VxdWVuY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBzZXQgYWN0aXZhdGlvbiBhbmQgd2FybSByZXNldCBpbiBUaW1lcjAgb3BlcmF0aW9uIG1vZGUgMDAxMSwgaXQgbWF5IGhhdmUgZGV2aWF0aW9uIGF0IG1vc3QgMTI4IFNDIG1vZHVsZSBjbG9jayBjeWNsZXMuCisgICAgICogfFsxMV0gICAgfEFEQUNFTiAgICB8QXV0byBEZWFjdGl2YXRpb24gV2hlbiBDYXJkIFJlbW92YWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIGZvciBlbmFibGUgaGFyZHdhcmUgYXV0byBkZWFjdGl2YXRpb24gd2hlbiBzbWFydCBjYXJkIGlzIHJlbW92ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8gZGVhY3RpdmF0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdXRvIGRlYWN0aXZhdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gdGhlIGNhcmQgaXMgcmVtb3ZlZCwgaGFyZHdhcmUgd2lsbCBzdG9wIGFueSBwcm9jZXNzIGFuZCB0aGVuIGRvIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBpZiB0aGlzIGJpdCBpcyBzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBhdXRvIGRlYWN0aXZhdGlvbiBwcm9jZXNzIGNvbXBsZXRlcywgaGFyZHdhcmUgd2lsbCBzZXQgSU5JVElGIChTQ25fSU5UU1RTWzhdKSBhbHNvLgorICAgICAqIHxbMTJdICAgIHxSWEJHVEVOICAgfFJlY2VpdmVyIEJsb2NrIEd1YXJkIFRpbWUgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIHJlY2VpdmVyIGJsb2NrIGd1YXJkIHRpbWUgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVyIGJsb2NrIGd1YXJkIHRpbWUgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVyIGJsb2NrIGd1YXJkIHRpbWUgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzEzXSAgICB8QUNUU1RTMCAgIHxJbnRlcm5hbCBUaW1lcjAgQWN0aXZlIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgdGltZXIgY291bnRlciBzdGF0dXMgb2YgdGltZXIwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjAgaXMgbm90IGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIwIGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaW1lcjAgaXMgYWN0aXZlIGRvZXMgbm90IGFsd2F5cyBtZWFuIHRpbWVyMCBpcyBjb3VudGluZyB0aGUgQ05UIChTQ25fVE1SQ1RMMFsyMzowXSkuCisgICAgICogfFsxNF0gICAgfEFDVFNUUzEgICB8SW50ZXJuYWwgVGltZXIxIEFjdGl2ZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHRpbWVyIGNvdW50ZXIgc3RhdHVzIG9mIHRpbWVyMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIxIGlzIG5vdCBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMSBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGltZXIxIGlzIGFjdGl2ZSBkb2VzIG5vdCBhbHdheXMgbWVhbiB0aW1lcjEgaXMgY291bnRpbmcgdGhlIENOVCAoU0NuX1RNUkNUTDFbNzowXSkuCisgICAgICogfFsxNV0gICAgfEFDVFNUUzIgICB8SW50ZXJuYWwgVGltZXIyIEFjdGl2ZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHRpbWVyIGNvdW50ZXIgc3RhdHVzIG9mIHRpbWVyMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIyIGlzIG5vdCBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMiBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGltZXIyIGlzIGFjdGl2ZSBkb2VzIG5vdCBhbHdheXMgbWVhbiB0aW1lcjIgaXMgY291bnRpbmcgdGhlIENOVCAoU0NuX1RNUkNUTDJbNzowXSkuCisgICAgICogfFszMV0gICAgfFNZTkMgICAgICB8U1lOQyBGbGFnIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfER1ZSB0byBzeW5jaHJvbml6YXRpb24sIHVzZXIgc2hvdWxkIGNoZWNrIHRoaXMgYml0IHdoZW4gd3JpdGluZyBhIG5ldyB2YWx1ZSB0byBTQ25fQUxUQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTeW5jaHJvbml6aW5nIGlzIGNvbXBsZXRpb24sIHVzZXIgY2FuIHdyaXRlIG5ldyBkYXRhIHRvIFNDbl9BTFRDVEwgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExhc3QgdmFsdWUgaXMgc3luY2hyb25pemluZy4KKyAgICAgKiBAdmFyIFNDX1Q6OkVHVAorICAgICAqIE9mZnNldDogMHgwQyAgU0MgRXh0cmEgR3VhcmQgVGltZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfEVHVCAgICAgICB8RXh0cmEgR3VhcmQgVGltZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBleHRyYSBndWFyZCB0aW1lIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBleHRyYSBndWFyZCB0aW1lIHVuaXQgaXMgRVRVIGJhc2UuCisgICAgICogQHZhciBTQ19UOjpSWFRPVVQKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIFNDIFJlY2VpdmUgQnVmZmVyIFRpbWUtb3V0IENvdW50ZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbODowXSAgIHxSRlRNICAgICAgfFNDIFJlY2VpdmVyIEZJRk8gVGltZS1vdXQgQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB0aW1lLW91dCBkb3duIGNvdW50ZXIgcmVzZXRzIGFuZCBzdGFydHMgY291bnRpbmcgd2hlbmV2ZXIgdGhlIFJYIGJ1ZmZlciByZWNlaXZlZCBhIG5ldyBkYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSB0aGUgY291bnRlciBkZWNyZWFzZSB0byAxIGFuZCBubyBuZXcgZGF0YSBpcyByZWNlaXZlZCBvciBDUFUgZG9lcyBub3QgcmVhZCBkYXRhIGJ5IHJlYWRpbmcgU0NuX0RBVCwgYSByZWNlaXZlciB0aW1lLW91dCBmbGFnIFJYVE9JRiAoU0NuX0lOVFNUU1s5XSkgd2lsbCBiZSBzZXQsIGFuZCBoYXJkd2FyZSB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCB0byBDUFUgd2hlbiBSWFRPSUVOIChTQ25fSU5URU5bOV0pIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoZSBjb3VudGVyIHVuaXQgaXMgRVRVIGJhc2VkIGFuZCB0aGUgaW50ZXJ2YWwgb2YgdGltZS1vdXQgaXMgUkZUTSArIDAuNS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogRmlsbGluZyBpbiBhbGwgMCB0byB0aGlzIGZpZWxkIGluZGljYXRlcyB0byBkaXNhYmxlIHRoaXMgZnVuY3Rpb24uCisgICAgICogQHZhciBTQ19UOjpFVFVDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MTQgIFNDIEVsZW1lbnQgVGltZSBVbml0IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTE6MF0gIHxFVFVSRElWICAgfEVUVSBSYXRlIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZmllbGQgaXMgdXNlZCBmb3IgRVRVIGNsb2NrIHJhdGUgZGl2aWRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVhbCBFVFUgaXMgRVRVUkRJViArIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVXNlciBjYW4gY29uZmlndXJlIHRoaXMgZmllbGQsIGJ1dCB0aGlzIGZpZWxkIG11c3QgYmUgZ3JlYXRlciB0aGFuIDB4MDQuCisgICAgICogQHZhciBTQ19UOjpJTlRFTgorICAgICAqIE9mZnNldDogMHgxOCAgU0MgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UkRBSUVOICAgIHxSZWNlaXZlIERhdGEgUmVhY2ggSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlIHJlY2VpdmVkIGRhdGEgcmVhY2hpbmcgdHJpZ2dlciBsZXZlbCBSWFRSR0xWIChTQ25fQ1RMWzc6Nl0pIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBkYXRhIHJlYWNoIHRyaWdnZXIgbGV2ZWwgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIGRhdGEgcmVhY2ggdHJpZ2dlciBsZXZlbCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8VEJFSUVOICAgIHxUcmFuc21pdCBCdWZmZXIgRW1wdHkgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlIHRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8VEVSUklFTiAgIHxUcmFuc2ZlciBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBlbmFibGUgdHJhbnNmZXIgZXJyb3IgaW50ZXJydXB0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHRyYW5zZmVyIGVycm9yIHN0YXRlcyBpcyBhdCBTQ25fU1RBVFVTIHJlZ2lzdGVyIHdoaWNoIGluY2x1ZGVzIHJlY2VpdmVyIGJyZWFrIGVycm9yIEJFRiAoU0NuX1NUQVRVU1s2XSksIGZyYW1lIGVycm9yIEZFRiAoU0NuX1NUQVRVU1s1XSksIHBhcml0eSBlcnJvciBQRUYgKFNDbl9TVEFUVVNbNF0pLCByZWNlaXZlIGJ1ZmZlciBvdmVyZmxvdyBlcnJvciBSWE9WIChTQ25fU1RBVFVTWzBdKSwgdHJhbnNtaXQgYnVmZmVyIG92ZXJmbG93IGVycm9yIFRYT1YgKFNDbl9TVEFUVVNbOF0pLCByZWNlaXZlciByZXRyeSBvdmVyIGxpbWl0IGVycm9yIFJYT1ZFUlIgKFNDbl9TVEFUVVNbMjJdKSBhbmQgdHJhbnNtaXR0ZXIgcmV0cnkgb3ZlciBsaW1pdCBlcnJvciBUWE9WRVJSIChTQ25fU1RBVFVTWzMwXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zZmVyIGVycm9yIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNmZXIgZXJyb3IgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFRNUjBJRU4gICB8VGltZXIwIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGVuYWJsZSBUaW1lcjAgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjAgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjAgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFRNUjFJRU4gICB8VGltZXIxIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgVGltZXIxIGludGVycnVwdCBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIxIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIxIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxUTVIySUVOICAgfFRpbWVyMiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBlbmFibGUgVGltZXIyIGludGVycnVwdCBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIyIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIyIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxCR1RJRU4gICAgfEJsb2NrIEd1YXJkIFRpbWUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlIGJsb2NrIGd1YXJkIHRpbWUgaW50ZXJydXB0IGluIHJlY2VpdmUgZGlyZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCbG9jayBndWFyZCB0aW1lIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQmxvY2sgZ3VhcmQgdGltZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB2YWxpZCBvbmx5IGZvciByZWNlaXZlIHJlY2VpdmUgZGlyZWN0aW9uIGJsb2NrIGd1YXJkIHRpbWUuCisgICAgICogfFs3XSAgICAgfENESUVOICAgICB8Q2FyZCBEZXRlY3QgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlIGNhcmQgZGV0ZWN0IGludGVycnVwdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjYXJkIGRldGVjdCBzdGF0dXMgaXMgQ0RQSU5TVFMgKFNDbl9TVEFUVVNbMTNdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FyZCBkZXRlY3QgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXJkIGRldGVjdCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8SU5JVElFTiAgIHxJbml0aWFsIEVuZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBlbmFibGUgYWN0aXZhdGlvbiAoQUNURU4gKFNDbl9BTFRDVExbM10gPSAxKSksIGRlYWN0aXZhdGlvbiAoREFDVEVOIChTQ25fQUxUQ1RMWzJdID0gMSkpIGFuZCB3YXJtIHJlc2V0IChXQVJTVEVOIChTQ25fQUxUQ1RMIFs0XSkpIHNlcXVlbmNlIGNvbXBsZXRlIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5pdGlhbCBlbmQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbml0aWFsIGVuZCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8UlhUT0lFTiAgIHxSZWNlaXZlciBCdWZmZXIgVGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlIHJlY2VpdmVyIGJ1ZmZlciB0aW1lLW91dCBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVyIGJ1ZmZlciB0aW1lLW91dCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVyIGJ1ZmZlciB0aW1lLW91dCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEwXSAgICB8QUNFUlJJRU4gIHxBdXRvIENvbnZlbnRpb24gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZW5hYmxlIGF1dG8tY29udmVudGlvbiBlcnJvciBpbnRlcnJ1cHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tY29udmVudGlvbiBlcnJvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tY29udmVudGlvbiBlcnJvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIFNDX1Q6OklOVFNUUworICAgICAqIE9mZnNldDogMHgxQyAgU0MgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJEQUlGICAgICB8UmVjZWl2ZSBEYXRhIFJlYWNoIEludGVycnVwdCBTdGF0dXMgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgcmVjZWl2ZWQgZGF0YSByZWFjaGluZyB0cmlnZ2VyIGxldmVsIFJYVFJHTFYgKFNDbl9DVExbNzo2XSkgaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOdW1iZXIgb2YgcmVjZWl2ZSBidWZmZXIgaXMgbGVzcyB0aGFuIFJYVFJHTFYgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVyIGRhdGEgZXF1YWxzIHRoZSBSWFRSR0xWIHNldHRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXNlciByZWFkcyBkYXRhIGZyb20gU0NuX0RBVCBhbmQgcmVjZWl2ZXIgYnVmZmVyIGRhdGEgYnl0ZSBudW1iZXIgaXMgbGVzcyB0aGFuIFJYVFJHTFYsIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHxbMV0gICAgIHxUQkVJRiAgICAgfFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIHRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IGJ1ZmZlciBpcyBub3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1c2VyIHdhbnRzIHRvIGNsZWFyIHRoaXMgYml0LCB1c2VyIG11c3Qgd3JpdGUgZGF0YSB0byBEQVQgKFNDbl9EQVRbNzowXSkgYW5kIHRoZW4gdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuCisgICAgICogfFsyXSAgICAgfFRFUlJJRiAgICB8VHJhbnNmZXIgRXJyb3IgSW50ZXJydXB0IFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciB0cmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdHJhbnNmZXIgZXJyb3Igc3RhdGVzIGlzIGF0IFNDbl9TVEFUVVMgcmVnaXN0ZXIgd2hpY2ggaW5jbHVkZXMgcmVjZWl2ZXIgYnJlYWsgZXJyb3IgQkVGIChTQ25fU1RBVFVTWzZdKSwgZnJhbWUgZXJyb3IgRkVGIChTQ25fU1RBVFVTWzVdLCBwYXJpdHkgZXJyb3IgUEVGIChTQ25fU1RBVFVTWzRdIGFuZCByZWNlaXZlIGJ1ZmZlciBvdmVyZmxvdyBlcnJvciBSWE9WIChTQ25fU1RBVFVTWzBdKSwgdHJhbnNtaXQgYnVmZmVyIG92ZXJmbG93IGVycm9yIFRYT1YgKFNDbl9TVEFUVVNbOF0pLCByZWNlaXZlciByZXRyeSBvdmVyIGxpbWl0IGVycm9yIFJYT1ZFUlIgKFNDbl9TVEFUVVNbMjJdIG9yIHRyYW5zbWl0dGVyIHJldHJ5IG92ZXIgbGltaXQgZXJyb3IgVFhPVkVSUiAoU0NuX1NUQVRVU1szMF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNmZXIgZXJyb3IgaW50ZXJydXB0IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGZpZWxkIGlzIHRoZSBzdGF0dXMgZmxhZyBvZiBCRUYsIEZFRiwgUEVGLCBSWE9WLCBUWE9WLCBSWE9WRVJSIG9yIFRYT1ZFUlIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzNdICAgICB8VE1SMElGICAgIHxUaW1lcjAgSW50ZXJydXB0IFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciBUaW1lcjAgaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lcjAgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMCBpbnRlcnJ1cHQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNF0gICAgIHxUTVIxSUYgICAgfFRpbWVyMSBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIFRpbWVyMSBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMSBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIxIGludGVycnVwdCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs1XSAgICAgfFRNUjJJRiAgICB8VGltZXIyIEludGVycnVwdCBTdGF0dXMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgVGltZXIyIGludGVycnVwdCBzdGF0dXMgZmxhZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIyIGludGVycnVwdCBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lcjIgaW50ZXJydXB0IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzZdICAgICB8QkdUSUYgICAgIHxCbG9jayBHdWFyZCBUaW1lIEludGVycnVwdCBTdGF0dXMgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgaW5kaWNhdGUgYmxvY2sgZ3VhcmQgdGltZSBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcgaW4gcmVjZWl2ZSBkaXJlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJsb2NrIGd1YXJkIHRpbWUgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJsb2NrIGd1YXJkIHRpbWUgaW50ZXJydXB0IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyB2YWxpZCBvbmx5IHdoZW4gUlhCR1RFTiAoU0NuX0FMVENUTFsxMl0pIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzddICAgICB8Q0RJRiAgICAgIHxDYXJkIERldGVjdCBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIGNhcmQgZGV0ZWN0IGludGVycnVwdCBzdGF0dXMgZmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjYXJkIGRldGVjdCBzdGF0dXMgaXMgQ0lOU0VSVCAoU0NuX1NUQVRVU1sxMl0pIGFuZCBDUkVNT1ZFIChTQ25fU1RBVFVTWzExXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcmQgZGV0ZWN0IGV2ZW50IGRpZCBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcmQgZGV0ZWN0IGV2ZW50IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSwgdXNlciBtdXN0IHRvIGNsZWFyIENJTlNFUlQgb3IgQ1JFTU9WRSBzdGF0dXMgdG8gY2xlYXIgaXQuCisgICAgICogfFs4XSAgICAgfElOSVRJRiAgICB8SW5pdGlhbCBFbmQgSW50ZXJydXB0IFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIGZvciBhY3RpdmF0aW9uIChBQ1RFTiAoU0NuX0FMVENUTFszXSkpLCBkZWFjdGl2YXRpb24gKERBQ1RFTiAoU0NuX0FMVENUTFsyXSkpIGFuZCB3YXJtIHJlc2V0IChXQVJTVEVOIChTQ25fQUxUQ1RMWzRdKSkgc2VxdWVuY2UgaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbml0aWFsIHNlcXVlbmNlIGlzIG5vdCBjb21wbGV0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5pdGlhbCBzZXF1ZW5jZSBpcyBjb21wbGV0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbOV0gICAgIHxSWFRPSUYgICAgfFJlY2VpdmUgQnVmZmVyIFRpbWUtb3V0IEludGVycnVwdCBTdGF0dXMgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgaW5kaWNhdGUgcmVjZWl2ZSBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIGJ1ZmZlciB0aW1lLW91dCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSwgdXNlciBtdXN0IHJlYWQgYWxsIHJlY2VpdmUgYnVmZmVyIHJlbWFpbmluZyBkYXRhIGJ5IHJlYWRpbmcgU0NuX0RBVCByZWdpc3RlciB0byBjbGVhciBpdC4KKyAgICAgKiB8WzEwXSAgICB8QUNFUlJJRiAgIHxBdXRvIENvbnZlbnRpb24gRXJyb3IgSW50ZXJydXB0IFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgYXV0byBjb252ZW50aW9uIHNlcXVlbmNlIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlZCBUUyBhdCBBVFIgc3RhdGUgaXMgMHgzQiBvciAweDNGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlZCBUUyBhdCBBVFIgc3RhdGUgaXMgbmVpdGhlciAweDNCIG5vciAweDNGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiBAdmFyIFNDX1Q6OlNUQVRVUworICAgICAqIE9mZnNldDogMHgyMCAgU0MgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UlhPViAgICAgIHxSZWNlaXZlIE92ZXJmbG93IEVycm9yIFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gUnggYnVmZmVyIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSeCBidWZmZXIgaXMgbm90IG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSeCBidWZmZXIgaXMgb3ZlcmZsb3cgd2hlbiB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIGlzIGdyZWF0ZXIgdGhhbiBSeCBidWZmZXIgc2l6ZSAoNCBieXRlcykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMV0gICAgIHxSWEVNUFRZICAgfFJlY2VpdmUgQnVmZmVyIEVtcHR5IFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIFJ4IGJ1ZmZlciBlbXB0eSBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJ4IGJ1ZmZlciBpcyBub3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJ4IGJ1ZmZlciBpcyBlbXB0eSwgaXQgbWVhbnMgdGhlIGxhc3QgYnl0ZSBvZiBSeCBidWZmZXIgaGFzIHJlYWQgZnJvbSBEQVQgKFNDbl9EQVRbNzowXSkgYnkgQ1BVLgorICAgICAqIHxbMl0gICAgIHxSWEZVTEwgICAgfFJlY2VpdmUgQnVmZmVyIEZ1bGwgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgUnggYnVmZmVyIGZ1bGwgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSeCBidWZmZXIgY291bnQgaXMgbGVzcyB0aGFuIDQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJ4IGJ1ZmZlciBjb3VudCBlcXVhbHMgdG8gNC4KKyAgICAgKiB8WzRdICAgICB8UEVGICAgICAgIHxSZWNlaXZlciBQYXJpdHkgRXJyb3IgU3RhdHVzIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gbG9naWMgMSB3aGVuZXZlciB0aGUgcmVjZWl2ZWQgY2hhcmFjdGVyIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBwYXJpdHkgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlciBwYXJpdHkgZXJyb3IgZmxhZyBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlciBwYXJpdHkgZXJyb3IgZmxhZyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBJZiBDUFUgc2V0cyByZWNlaXZlciByZXRyaWVzIGZ1bmN0aW9uIGJ5IHNldHRpbmcgUlhSVFlFTiAoU0NuX0NUTFsxOV0pLCBoYXJkd2FyZSB3aWxsIG5vdCBzZXQgdGhpcyBmbGFnLgorICAgICAqIHxbNV0gICAgIHxGRUYgICAgICAgfFJlY2VpdmVyIEZyYW1lIEVycm9yIFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEgd2hlbmV2ZXIgdGhlIHJlY2VpdmVkIGNoYXJhY3RlciBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgc3RvcCBiaXQgKHRoYXQgaXMsIHRoZSBzdG9wIGJpdCBmb2xsb3dpbmcgdGhlIGxhc3QgZGF0YSBiaXQgb3IgcGFyaXR5IGJpdCBpcyBkZXRlY3RlZCBhcyBsb2dpYyAwKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZXIgZnJhbWUgZXJyb3IgZmxhZyBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlciBmcmFtZSBlcnJvciBmbGFnIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIENQVSBzZXRzIHJlY2VpdmVyIHJldHJpZXMgZnVuY3Rpb24gYnkgc2V0dGluZyBSWFJUWUVOIChTQ25fQ1RMWzE5XSksIGhhcmR3YXJlIHdpbGwgbm90IHNldCB0aGlzIGZsYWcuCisgICAgICogfFs2XSAgICAgfEJFRiAgICAgICB8UmVjZWl2ZXIgQnJlYWsgRXJyb3IgU3RhdHVzIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gbG9naWMgMSB3aGVuZXZlciB0aGUgcmVjZWl2ZWQgZGF0YSBpbnB1dCAoUngpIGhlbGQgaW4gdGhlIHNwYWNpbmcgc3RhdGUgKGxvZ2ljIDApIGlzIGxvbmdlciB0aGFuIGEgZnVsbCB3b3JkIHRyYW5zbWlzc2lvbiB0aW1lICh0aGF0IGlzLCB0aGUgdG90YWwgdGltZSBvZiBzdGFydCBiaXQgKyBkYXRhIGJpdHMgKyBwYXJpdHkgYml0ICsgc3RvcCBiaXRzKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZXIgYnJlYWsgZXJyb3IgZmxhZyBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlciBicmVhayBlcnJvciBmbGFnIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIENQVSBzZXRzIHJlY2VpdmVyIHJldHJpZXMgZnVuY3Rpb24gYnkgc2V0dGluZyBSWFJUWUVOIChTQ25fQ1RMWzE5XSksIGhhcmR3YXJlIHdpbGwgbm90IHNldCB0aGlzIGZsYWcuCisgICAgICogfFs4XSAgICAgfFRYT1YgICAgICB8VHJhbnNtaXQgT3ZlcmZsb3cgRXJyb3IgSW50ZXJydXB0IFN0YXR1cyBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gVHggYnVmZmVyIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUeCBidWZmZXIgaXMgbm90IG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUeCBidWZmZXIgaXMgb3ZlcmZsb3cgd2hlbiBUeCBidWZmZXIgaXMgZnVsbCBhbmQgYW4gYWRkaXRpb25hbCB3cml0ZSBvcGVyYXRpb24gdG8gREFUIChTQ25fREFUWzc6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzldICAgICB8VFhFTVBUWSAgIHxUcmFuc21pdCBCdWZmZXIgRW1wdHkgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgVFggYnVmZmVyIGVtcHR5IG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHggYnVmZmVyIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHggYnVmZmVyIGlzIGVtcHR5LCBpdCBtZWFucyB0aGUgbGFzdCBieXRlIG9mIFR4IGJ1ZmZlciBoYXMgYmVlbiB0cmFuc2ZlcnJlZCB0byBUcmFuc21pdHRlciBTaGlmdCBSZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgd2hlbiB3cml0aW5nIGRhdGEgaW50byBEQVQgKFNDbl9EQVRbNzowXSkuCisgICAgICogfFsxMF0gICAgfFRYRlVMTCAgICB8VHJhbnNtaXQgQnVmZmVyIEZ1bGwgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgVHggYnVmZmVyIGZ1bGwgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUeCBidWZmZXIgY291bnQgaXMgbGVzcyB0aGFuIDQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFR4IGJ1ZmZlciBjb3VudCBlcXVhbHMgdG8gNC4KKyAgICAgKiB8WzExXSAgICB8Q1JFTU9WRSAgIHxDYXJkIFJlbW92YWwgU3RhdHVzIG9mIFNDbl9DRCBQaW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbmV2ZXIgY2FyZCBoYXMgYmVlbiByZW1vdmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcmQgcmVtb3ZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBDYXJkIGRldGVjdCBmdW5jdGlvbiB3aWxsIHN0YXJ0IGFmdGVyIFNDRU4gKFNDbl9DVExbMF0pIHNldC4KKyAgICAgKiB8WzEyXSAgICB8Q0lOU0VSVCAgIHxDYXJkIEluc2VydCBTdGF0dXMgb2YgU0NuX0NEIFBpbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuZXZlciBjYXJkIGhhcyBiZWVuIGluc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcmQgaW5zZXJ0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoZSBjYXJkIGRldGVjdCBmdW5jdGlvbiB3aWxsIHN0YXJ0IGFmdGVyIFNDRU4gKFNDbl9DVExbMF0pIHNldC4KKyAgICAgKiB8WzEzXSAgICB8Q0RQSU5TVFMgIHxDYXJkIERldGVjdCBQaW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdGhlIHBpbiBzdGF0dXMgb2YgU0NuX0NELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgU0NuX0NEIHBpbiBzdGF0ZSBhdCBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBTQ25fQ0QgcGluIHN0YXRlIGF0IGhpZ2guCisgICAgICogfFsxODoxNl0gfFJYUE9JTlQgICB8UmVjZWl2ZSBCdWZmZXIgUG9pbnRlciBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgUnggYnVmZmVyIHBvaW50ZXIgc3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBTQyBjb250cm9sbGVyIHJlY2VpdmVzIG9uZSBieXRlIGZyb20gZXh0ZXJuYWwgZGV2aWNlLCBSWFBPSU5UIGluY3JlYXNlcyBvbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIG9uZSBieXRlIG9mIFJ4IGJ1ZmZlciBpcyByZWFkIGJ5IENQVSwgUlhQT0lOVCBkZWNyZWFzZXMgb25lLgorICAgICAqIHxbMjFdICAgIHxSWFJFUlIgICAgfFJlY2VpdmVyIFJldHJ5IEVycm9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCBmb3IgcmVjZWl2ZXIgZXJyb3IgcmV0cnkgYW5kIHNldCBieSBoYXJkd2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUnggcmV0cnkgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJ4IGhhcyBhbnkgZXJyb3IgYW5kIHJldHJpZXMgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMiBUaGlzIGJpdCBpcyBhIGZsYWcgYW5kIGNhbm5vdCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0IHRvIENQVS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSWYgQ1BVIGVuYWJsZXMgcmVjZWl2ZXIgcmV0cmllcyBmdW5jdGlvbiBieSBzZXR0aW5nIFJYUlRZRU4gKFNDbl9DVExbMTldKSwgaGFyZHdhcmUgd2lsbCBub3Qgc2V0IHRoaXMgZmxhZy4KKyAgICAgKiB8WzIyXSAgICB8UlhPVkVSUiAgIHxSZWNlaXZlciBvdmVyIFJldHJ5IEVycm9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCBmb3IgcmVjZWl2ZXIgcmV0cnkgY291bnRzIG92ZXIgdGhhbiByZXRyeSBudW1iZXIgbGltaXRhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZXIgcmV0cmllcyBjb3VudHMgaXMgbm90IG92ZXIgdGhhbiBSWFJUWSAoU0NuX0NUTFsxODoxNl0pICsgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZXIgcmV0cmllcyBjb3VudHMgb3ZlciB0aGFuIFJYUlRZIChTQ25fQ1RMWzE4OjE2XSkgKyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIENQVSBlbmFibGVzIHJlY2VpdmVyIHJldHJpZXMgZnVuY3Rpb24gYnkgc2V0dGluZyBSWFJUWUVOIChTQ25fQ1RMWzE5XSksIGhhcmR3YXJlIHdpbGwgbm90IHNldCB0aGlzIGZsYWcuCisgICAgICogfFsyM10gICAgfFJYQUNUICAgICB8UmVjZWl2ZXIgaW4gQWN0aXZlIFN0YXR1cyBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIFJ4IHRyYW5zZmVyIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhpcyBiaXQgaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gUnggdHJhbnNmZXIgaXMgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIFJ4IHRyYW5zZmVyIGlzIGluIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6CisgICAgICogfFsyNjoyNF0gfFRYUE9JTlQgICB8VHJhbnNtaXQgQnVmZmVyIFBvaW50ZXIgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIFR4IGJ1ZmZlciBwb2ludGVyIHN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gQ1BVIHdyaXRlcyBkYXRhIGludG8gU0NuX0RBVCwgVFhQT0lOVCBpbmNyZWFzZXMgb25lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBvbmUgYnl0ZSBvZiBUeCBidWZmZXIgaXMgdHJhbnNmZXJyZWQgdG8gdHJhbnNtaXR0ZXIgc2hpZnQgcmVnaXN0ZXIsIFRYUE9JTlQgZGVjcmVhc2VzIG9uZS4KKyAgICAgKiB8WzI5XSAgICB8VFhSRVJSICAgIHxUcmFuc21pdHRlciBSZXRyeSBFcnJvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgZm9yIGluZGljYXRlIHRyYW5zbWl0dGVyIGVycm9yIHJldHJ5IGFuZCBzZXQgYnkgaGFyZHdhcmUuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBUeCByZXRyeSB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHggaGFzIGFueSBlcnJvciBhbmQgcmV0cmllcyB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBhIGZsYWcgYW5kIGNhbm5vdCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0IHRvIENQVS4KKyAgICAgKiB8WzMwXSAgICB8VFhPVkVSUiAgIHxUcmFuc21pdHRlciBvdmVyIFJldHJ5IEVycm9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCBmb3IgdHJhbnNtaXR0ZXIgcmV0cnkgY291bnRzIG92ZXIgdGhhbiByZXRyeSBudW1iZXIgbGltaXRhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXR0ZXIgcmV0cmllcyBjb3VudHMgaXMgbm90IG92ZXIgdGhhbiBUWFJUWSAoU0NuX0NUTFsyMjoyMF0pICsgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXR0ZXIgcmV0cmllcyBjb3VudHMgb3ZlciB0aGFuIFRYUlRZIChTQ25fQ1RMWzIyOjIwXSkgKyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzMxXSAgICB8VFhBQ1QgICAgIHxUcmFuc21pdCBpbiBBY3RpdmUgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgVHggdHJhbnNtaXQgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGlzIGJpdCBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBUeCB0cmFuc2ZlciBpcyBmaW5pc2hlZCBvciB0aGUgbGFzdCBieXRlIHRyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBpcyBhY3RpdmUgYW5kIHRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIFR4IHRyYW5zZmVyIGlzIGluIGFjdGl2ZSBhbmQgdGhlIFNUT1AgYml0IG9mIHRoZSBsYXN0IGJ5dGUgaGFzIG5vdCBiZWVuIHRyYW5zbWl0dGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seS4KKyAgICAgKiBAdmFyIFNDX1Q6OlBJTkNUTAorICAgICAqIE9mZnNldDogMHgyNCAgU0MgUGluIENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQV1JFTiAgICAgfFNDbl9QV1IgUGluIFNpZ25hbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIHNldCBQV1JJTlYgKFNDbl9QSU5DVExbMTFdKSBhbmQgUFdSRU4gKFNDbl9QSU5DVExbMF0pIHRvIGRlY2lkZSBTQ25fUFdSIHBpbiBpcyBpbiBoaWdoIG9yIGxvdyBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSB0aGlzIGZpZWxkIHRvIGRyaXZlIFNDbl9QV1IgcGluCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmZXIgUFdSSU5WIChTQ25fUElOQ1RMWzExXSkgZGVzY3JpcHRpb24gZm9yIHByb2dyYW1taW5nIFNDbl9QV1IgcGluIHZvbHRhZ2UgbGV2ZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCB0aGlzIGZpZWxkIHRvIGdldCBTQ25fUFdSIHNpZ25hbCBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDbl9QV1Igc2lnbmFsIHN0YXR1cyBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDbl9QV1Igc2lnbmFsIHN0YXR1cyBpcyBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gb3BlcmF0aW5nIGF0IGFjdGl2YXRpb24sIHdhcm0gcmVzZXQgb3IgZGVhY3RpdmF0aW9uIG1vZGUsIHRoaXMgYml0IHdpbGwgYmUgY2hhbmdlZCBhdXRvbWF0aWNhbGx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgZG8gbm90IGZpbGwgaW4gdGhpcyBmaWVsZCB3aGVuIG9wZXJhdGluZyBpbiB0aGVzZSBtb2Rlcy4KKyAgICAgKiB8WzFdICAgICB8UlNURU4gICAgIHxTQ25fUlNUIFBpbiBTaWduYWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBzZXQgUlNURU4gKFNDbl9QSU5DVExbMV0pIHRvIGRlY2lkZSBTQ25fUlNUIHBpbiBpcyBpbiBoaWdoIG9yIGxvdyBsZXZlbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSB0aGlzIGZpZWxkIHRvIGRyaXZlIFNDbl9SU1QgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEcml2ZSBTQ25fUlNUIHBpbiB0byBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERyaXZlIFNDbl9SU1QgcGluIHRvIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCB0aGlzIGZpZWxkIHRvIGdldCBTQ25fUlNUIHNpZ25hbCBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDbl9SU1Qgc2lnbmFsIHN0YXR1cyBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDbl9SU1Qgc2lnbmFsIHN0YXR1cyBpcyBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gb3BlcmF0aW5nIGF0IGFjdGl2YXRpb24sIHdhcm0gcmVzZXQgb3IgZGVhY3RpdmF0aW9uIG1vZGUsIHRoaXMgYml0IHdpbGwgYmUgY2hhbmdlZCBhdXRvbWF0aWNhbGx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgZG8gbm90IGZpbGwgaW4gdGhpcyBmaWVsZCB3aGVuIG9wZXJhdGluZyBpbiB0aGVzZSBtb2Rlcy4KKyAgICAgKiB8WzVdICAgICB8Q1NUT1BMViAgIHxTQ25fQ0xLIFBpbiBTdG9wIExldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIFNDbl9DTEsgcGluIHN0YXR1cyB3aGVuIFNDIGNsb2NrIGluIGNsb2NrIHN0b3AgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0NuX0NMSyBwaW4ga2VlcHMgYXQgbG93IHdoZW4gU0MgY2xvY2sgc3RvcHBlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0NuX0NMSyBwaW4ga2VlcHMgYXQgaGlnaCB3aGVuIFNDIGNsb2NrIHN0b3BwZWQuCisgICAgICogfFs2XSAgICAgfENMS0tFRVAgICB8U0MgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQyBjbG9jayBnZW5lcmF0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQyBjbG9jayBhbHdheXMga2VlcHMgZnJlZSBydW5uaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gb3BlcmF0aW5nIGluIGFjdGl2YXRpb24sIHdhcm0gcmVzZXQgb3IgZGVhY3RpdmF0aW9uIG1vZGUsIHRoaXMgYml0IHdpbGwgYmUgY2hhbmdlZCBhdXRvbWF0aWNhbGx5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGh1cywgZG8gbm90IGZpbGwgaW4gdGhpcyBmaWVsZCB3aGVuIG9wZXJhdGluZyBpbiB0aGVzZSBtb2Rlcy4KKyAgICAgKiB8WzldICAgICB8U0NEQVRBICAgIHxTQ25fREFUQSBQaW4gU2lnbmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdGhlIHNpZ25hbCBzdGF0dXMgb2YgU0NuX0RBVEEgYnV0IHVzZXIgY2FuIGRyaXZlIFNDbl9EQVRBIHBpbiB0byBoaWdoIG9yIGxvdyBieSBzZXR0aW5nIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEcml2ZSBTQ25fREFUQSBwaW4gdG8gbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEcml2ZSBTQ25fREFUQSBwaW4gdG8gaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIHRoaXMgZmllbGQgdG8gZ2V0IFNDbl9EQVRBIHNpZ25hbCBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDbl9EQVRBIHNpZ25hbCBzdGF0dXMgaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQ25fREFUQSBzaWduYWwgc3RhdHVzIGlzIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBTQyBpcyBhdCBhY3RpdmF0aW9uLCB3YXJtIHJlc2V0IG9yIGRlYWN0aXZhdGlvbiBtb2RlLCB0aGlzIGJpdCB3aWxsIGJlIGNoYW5nZWQgYXV0b21hdGljYWxseQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRodXMsIGRvIG5vdCBmaWxsIGluIHRoaXMgZmllbGQgd2hlbiBTQyBpcyBpbiB0aGVzZSBtb2Rlcy4KKyAgICAgKiB8WzExXSAgICB8UFdSSU5WICAgIHxTQ25fUFdSIFBpbiBJbnZlcnNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCBmb3IgaW52ZXJzZSB0aGUgU0NuX1BXUiBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlcmUgYXJlIGZvdXIga2luZHMgb2YgY29tYmluYXRpb24gZm9yIFNDbl9QV1IgcGluIHNldHRpbmcgYnkgUFdSSU5WIChTQ25fUElOQ1RMWzExXSkgYW5kIFBXUkVOIChTQ25fUElOQ1RMWzBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0NuX1BXUiBwaW4gaW52ZXJzZSBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFBXUkVOIGlzIDEsIFNDbl9QV1IgcGluIHN0YXR1cyBpcyAxOyBpZiBQV1JFTiBpcyAwLCBTQ25fUFdSIHBpbiBzdGF0dXMgaXMgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0NuX1BXUiBwaW4gaW52ZXJzZSBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgUFdSRU4gaXMgMSwgU0NuX1BXUiBwaW4gc3RhdHVzIGlzIDA7IGlmIFBXUkVOIGlzIDAsIFNDbl9QV1IgcGluIHN0YXR1cyBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFVzZXIgbXVzdCBzZWxlY3QgUFdSSU5WIChTQ25fUElOQ1RMWzExXSkgYmVmb3JlIHNtYXJ0IGNhcmQgaXMgZW5hYmxlZCBieSBTQ0VOIChTQ25fQ1RMWzBdKS4KKyAgICAgKiB8WzE2XSAgICB8REFUQVNUUyAgIHxTQ25fREFUQSBQaW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdGhlIHBpbiBzdGF0dXMgb2YgU0NuX0RBVEEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBTQ25fREFUQSBwaW4gc3RhdHVzIGlzIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIFNDbl9EQVRBIHBpbiBzdGF0dXMgaXMgaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHxbMTddICAgIHxQV1JTVFMgICAgfFNDbl9QV1IgUGluIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHRoZSBwaW4gc3RhdHVzIG9mIFNDbl9QV1IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDbl9QV1IgcGluIHRvIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0NuX1BXUiBwaW4gdG8gaGlnaC4KKyAgICAgKiB8WzE4XSAgICB8UlNUU1RTICAgIHxTQ25fUlNUIFBpbiBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB0aGUgcGluIHN0YXR1cyBvZiBTQ25fUlNULgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQ25fUlNUIHBpbiBpcyBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDbl9SU1QgcGluIGlzIGhpZ2guCisgICAgICogfFszMF0gICAgfFNZTkMgICAgICB8U1lOQyBGbGFnIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfER1ZSB0byBzeW5jaHJvbml6YXRpb24sIHVzZXIgc2hvdWxkIGNoZWNrIHRoaXMgYml0IHdoZW4gd3JpdGluZyBhIG5ldyB2YWx1ZSB0byBTQ25fUElOQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTeW5jaHJvbml6aW5nIGlzIGNvbXBsZXRpb24sIHVzZXIgY2FuIHdyaXRlIG5ldyBkYXRhIHRvIFNDbl9QSU5DVEwgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExhc3QgdmFsdWUgaXMgc3luY2hyb25pemluZy4KKyAgICAgKiBAdmFyIFNDX1Q6OlRNUkNUTDAKKyAgICAgKiBPZmZzZXQ6IDB4MjggIFNDIEludGVybmFsIFRpbWVyMCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzIzOjBdICB8Q05UICAgICAgIHxUaW1lcjAgQ291bnRlciBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBpbnRlcm5hbCBUaW1lcjAgY291bnRlciB2YWx1ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVW5pdCBvZiBUaW1lcjAgY291bnRlciBpcyBFVFUgYmFzZS4KKyAgICAgKiB8WzI3OjI0XSB8T1BNT0RFICAgIHxUaW1lcjAgT3BlcmF0aW9uIE1vZGUgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIGludGVybmFsIDI0LWJpdCBUaW1lcjAgb3BlcmF0aW9uIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWZlciB0byBUYWJsZSA2LjE3LTMgVGltZXIwL1RpbWVyMS9UaW1lcjIgT3BlcmF0aW9uIE1vZGUgZm9yIHByb2dyYW1taW5nIFRpbWVyMC4KKyAgICAgKiB8WzMxXSAgICB8U1lOQyAgICAgIHxTWU5DIEZsYWcgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RHVlIHRvIHN5bmNocm9uaXphdGlvbiwgdXNlciBzaG91bGQgY2hlY2sgdGhpcyBiaXQgd2hlbiB3cml0aW5nIGEgbmV3IHZhbHVlIHRvIHRoZSBTQ25fVE1SQ1RMMCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3luY2hyb25pemluZyBpcyBjb21wbGV0aW9uLCB1c2VyIGNhbiB3cml0ZSBuZXcgZGF0YSB0byBTQ25fVE1SQ1RMMCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTGFzdCB2YWx1ZSBpcyBzeW5jaHJvbml6aW5nLgorICAgICAqIEB2YXIgU0NfVDo6VE1SQ1RMMQorICAgICAqIE9mZnNldDogMHgyQyAgU0MgSW50ZXJuYWwgVGltZXIxIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxDTlQgICAgICAgfFRpbWVyIDEgQ291bnRlciBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBpbnRlcm5hbCBUaW1lcjEgY291bnRlciB2YWx1ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVW5pdCBvZiBUaW1lcjEgY291bnRlciBpcyBFVFUgYmFzZS4KKyAgICAgKiB8WzI3OjI0XSB8T1BNT0RFICAgIHxUaW1lciAxIE9wZXJhdGlvbiBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBpbnRlcm5hbCA4LWJpdCBUaW1lcjEgb3BlcmF0aW9uIHNlbGVjdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWZlciB0byBUYWJsZSA2LjE3LTMgVGltZXIwL1RpbWVyMS9UaW1lcjIgT3BlcmF0aW9uIE1vZGUgZm9yIHByb2dyYW1taW5nIFRpbWVyMS4KKyAgICAgKiB8WzMxXSAgICB8U1lOQyAgICAgIHxTWU5DIEZsYWcgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RHVlIHRvIHN5bmNocm9uaXphdGlvbiwgc29mdHdhcmUgc2hvdWxkIGNoZWNrIHRoaXMgYml0IHdoZW4gd3JpdGluZyBhIG5ldyB2YWx1ZSB0byBTQ25fVE1SQ1RMMSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3luY2hyb25pemluZyBpcyBjb21wbGV0aW9uLCB1c2VyIGNhbiB3cml0ZSBuZXcgZGF0YSB0byBTQ25fVE1SQ1RMMSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTGFzdCB2YWx1ZSBpcyBzeW5jaHJvbml6aW5nLgorICAgICAqIEB2YXIgU0NfVDo6VE1SQ1RMMgorICAgICAqIE9mZnNldDogMHgzMCAgU0MgSW50ZXJuYWwgVGltZXIyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxDTlQgICAgICAgfFRpbWVyIDIgQ291bnRlciBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBpbnRlcm5hbCBUaW1lcjIgY291bnRlciB2YWx1ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVW5pdCBvZiBUaW1lcjIgY291bnRlciBpcyBFVFUgYmFzZS4KKyAgICAgKiB8WzI3OjI0XSB8T1BNT0RFICAgIHxUaW1lciAyIE9wZXJhdGlvbiBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBpbnRlcm5hbCA4LWJpdCBUaW1lcjIgb3BlcmF0aW9uIHNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlZmVyIHRvIFRhYmxlIDYuMTctMyBUaW1lcjAvVGltZXIxL1RpbWVyMiBPcGVyYXRpb24gTW9kZSBmb3IgcHJvZ3JhbW1pbmcgVGltZXIyLgorICAgICAqIHxbMzFdICAgIHxTWU5DICAgICAgfFNZTkMgRmxhZyBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEdWUgdG8gc3luY2hyb25pemF0aW9uLCB1c2VyIHNob3VsZCBjaGVjayB0aGlzIGJpdCB3aGVuIHdyaXRpbmcgYSBuZXcgdmFsdWUgdG8gU0NuX1RNUkNUTDIgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN5bmNocm9uaXppbmcgaXMgY29tcGxldGlvbiwgdXNlciBjYW4gd3JpdGUgbmV3IGRhdGEgdG8gU0NuX1RNUkNUTDIgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExhc3QgdmFsdWUgaXMgc3luY2hyb25pemluZy4KKyAgICAgKiBAdmFyIFNDX1Q6OlVBUlRDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MzQgIFNDIFVBUlQgTW9kZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8VUFSVEVOICAgIHxVQVJUIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHMgdGhpcyBiaXQgdG8gZW5hYmxlIFVBUlQgbW9kZSBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU21hcnQgQ2FyZCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdoZW4gb3BlcmF0aW5nIGluIFVBUlQgbW9kZSwgdXNlciBtdXN0IHNldCBDT05TRUwgKFNDbl9DVExbNTo0XSkgPSAwMCBhbmQgQVVUT0NFTiAoU0NuX0NUTFszXSkgPSAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBXaGVuIG9wZXJhdGluZyBpbiBTbWFydCBDYXJkIG1vZGUsIHVzZXIgbXVzdCBzZXQgVUFSVEVOIChTQ25fVUFSVENUTFswXSkgPSAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBXaGVuIFVBUlQgbW9kZSBpcyBlbmFibGVkLCBoYXJkd2FyZSB3aWxsIGdlbmVyYXRlIGEgcmVzZXQgdG8gcmVzZXQgRklGTyBhbmQgaW50ZXJuYWwgc3RhdGUgbWFjaGluZS4KKyAgICAgKiB8WzU6NF0gICB8V0xTICAgICAgIHxXb3JkIExlbmd0aCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIHNlbGVjdCBVQVJUIGRhdGEgbGVuZ3RoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gV29yZCBsZW5ndGggaXMgOCBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gV29yZCBsZW5ndGggaXMgNyBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gV29yZCBsZW5ndGggaXMgNiBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gV29yZCBsZW5ndGggaXMgNSBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIHNtYXJ0IGNhcmQgbW9kZSwgdGhpcyBXTFMgbXVzdCBiZSB1MjAxODAwJy4KKyAgICAgKiB8WzZdICAgICB8UEJPRkYgICAgIHxQYXJpdHkgQml0IERpc2FibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHMgdGhpcyBiaXQgaXMgdXNlZCBmb3IgZGlzYWJsZSBwYXJpdHkgY2hlY2sgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBhcml0eSBiaXQgaXMgZ2VuZXJhdGVkIG9yIGNoZWNrZWQgYmV0d2VlbiB0aGUgbGFzdCBkYXRhIHdvcmQgYml0IGFuZCBzdG9wIGJpdCBvZiB0aGUgc2VyaWFsIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBhcml0eSBiaXQgaXMgbm90IGdlbmVyYXRlZCAodHJhbnNtaXR0aW5nIGRhdGEpIG9yIGNoZWNrZWQgKHJlY2VpdmluZyBkYXRhKSBkdXJpbmcgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gc21hcnQgY2FyZCBtb2RlLCB0aGlzIGZpZWxkIG11c3QgYmUgdTIwMTgwJyAoZGVmYXVsdCBzZXR0aW5nIGlzIHdpdGggcGFyaXR5IGJpdCkuCisgICAgICogfFs3XSAgICAgfE9QRSAgICAgICB8T2RkIFBhcml0eSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBpcyB1c2VkIGZvciBvZGQvZXZlbiBwYXJpdHkgc2VsZWN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFdmVuIG51bWJlciBvZiBsb2dpYyAxJ3MgYXJlIHRyYW5zbWl0dGVkIG9yIGNoZWNrIHRoZSBkYXRhIHdvcmQgYW5kIHBhcml0eSBiaXRzIGluIHJlY2VpdmluZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPZGQgbnVtYmVyIG9mIGxvZ2ljIDEncyBhcmUgdHJhbnNtaXR0ZWQgb3IgY2hlY2sgdGhlIGRhdGEgd29yZCBhbmQgcGFyaXR5IGJpdHMgaW4gcmVjZWl2aW5nIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaGFzIGVmZmVjdCBvbmx5IHdoZW4gUEJPRkYgYml0IGlzIHUyMDE4MCcuCisgICAgICogQHZhciBTQ19UOjpBQ1RDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NEMgIFNDIEFjdGl2YXRpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs0OjBdICAgfFQxRVhUICAgICB8VDEgRXh0ZW5kIFRpbWUgb2YgSGFyZHdhcmUgQWN0aXZhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgcHJvdmlkZSB0aGUgY29uZmlndXJhYmxlIGN5Y2xlcyB0byBleHRlbmQgdGhlIGFjdGl2YXRpb24gdGltZSBUMSBwZXJpb2QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGN5Y2xlIHNjYWxpbmcgZmFjdG9yIGlzIDIwNDguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RXh0ZW5kIGN5Y2xlcyA9IChmaWxsZWQgdmFsdWUgKiAyMDQ4KSBjeWNsZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVmZXIgdG8gU0MgYWN0aXZhdGlvbiBzZXF1ZW5jZSBpbiBGaWd1cmUgNi4xNy00IFNDIEFjdGl2YXRpb24gU2VxdWVuY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIGV4YW1wbGUsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0NMSyA9IDRNSHosIGVhY2ggY3ljbGUgPSAwLjI1dXMsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZpbGxlZCAyMCB0byB0aGlzIGZpZWxkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RXh0ZW5kIHRpbWUgPSAyMCAqIDIwNDggKiAwLjI1dXMgPSAxMC4yNCBtcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBTZXR0aW5nIDAgdG8gdGhpcyBmaWVsZCBjb25mb3JtcyB0byB0aGUgcHJvdG9jb2wgSVNPL0lFQyA3ODE2LTMKKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERBVDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBTQyBSZWNlaXZlL1RyYW5zbWl0IEhvbGRpbmcgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gU0MgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQUxUQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIFNDIEFsdGVybmF0ZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVHVDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBTQyBFeHRyYSBHdWFyZCBUaW1lIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBSWFRPVVQ7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gU0MgUmVjZWl2ZSBCdWZmZXIgVGltZS1vdXQgQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRVRVQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTRdIFNDIEVsZW1lbnQgVGltZSBVbml0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVEVOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE4XSBTQyBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxY10gU0MgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1RBVFVTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjBdIFNDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBJTkNUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDI0XSBTQyBQaW4gQ29udHJvbCBTdGF0ZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUTVJDVEwwOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAyOF0gU0MgSW50ZXJuYWwgVGltZXIwIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVE1SQ1RMMTsgICAgICAgICAgICAgICAvKiE8IFsweDAwMmNdIFNDIEludGVybmFsIFRpbWVyMSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRNUkNUTDI7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBTQyBJbnRlcm5hbCBUaW1lcjIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBVQVJUQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAzNF0gU0MgVUFSVCBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbNV07CisgICAgX19JTyB1aW50MzJfdCBBQ1RDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA0Y10gU0MgQWN0aXZhdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFNDX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFNDX0NPTlNUIFNDIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFNDIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgU0NfREFUX0RBVF9Qb3MgICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkRBVDogREFUIFBvc2l0aW9uICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0RBVF9EQVRfTXNrICAgICAgICAgICAgICAgICAgICgweGZmdWwgPDwgU0NfREFUX0RBVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpEQVQ6IERBVCBNYXNrICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9TQ0VOX1BvcyAgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFNDRU4gUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfU0NFTl9Nc2sgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQ1RMX1NDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBTQ0VOIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfUlhPRkZfUG9zICAgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBSWE9GRiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX1JYT0ZGX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0NUTF9SWE9GRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogUlhPRkYgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX1RYT0ZGX1BvcyAgICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogVFhPRkYgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9UWE9GRl9Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19DVExfVFhPRkZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFRYT0ZGIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9BVVRPQ0VOX1BvcyAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IEFVVE9DRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfQVVUT0NFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQ1RMX0FVVE9DRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBBVVRPQ0VOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfQ09OU0VMX1BvcyAgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBDT05TRUwgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX0NPTlNFTF9Nc2sgICAgICAgICAgICAgICAgKDB4M3VsIDw8IFNDX0NUTF9DT05TRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogQ09OU0VMIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX1JYVFJHTFZfUG9zICAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogUlhUUkdMViBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9SWFRSR0xWX01zayAgICAgICAgICAgICAgICgweDN1bCA8PCBTQ19DVExfUlhUUkdMVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFJYVFJHTFYgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9CR1RfUG9zICAgICAgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IEJHVCBQb3NpdGlvbiAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfQkdUX01zayAgICAgICAgICAgICAgICAgICAoMHgxZnVsIDw8IFNDX0NUTF9CR1RfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBCR1QgTWFzayAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfVE1SU0VMX1BvcyAgICAgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBUTVJTRUwgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX1RNUlNFTF9Nc2sgICAgICAgICAgICAgICAgKDB4M3VsIDw8IFNDX0NUTF9UTVJTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogVE1SU0VMIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX05TQl9Qb3MgICAgICAgICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogTlNCIFBvc2l0aW9uICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9OU0JfTXNrICAgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19DVExfTlNCX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IE5TQiBNYXNrICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9SWFJUWV9Qb3MgICAgICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFJYUlRZIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfUlhSVFlfTXNrICAgICAgICAgICAgICAgICAoMHg3dWwgPDwgU0NfQ1RMX1JYUlRZX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBSWFJUWSBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfUlhSVFlFTl9Qb3MgICAgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBSWFJUWUVOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX1JYUlRZRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0NUTF9SWFJUWUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogUlhSVFlFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX1RYUlRZX1BvcyAgICAgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogVFhSVFkgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9UWFJUWV9Nc2sgICAgICAgICAgICAgICAgICgweDd1bCA8PCBTQ19DVExfVFhSVFlfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFRYUlRZIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9UWFJUWUVOX1BvcyAgICAgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFRYUlRZRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfVFhSVFlFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQ1RMX1RYUlRZRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBUWFJUWUVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19DVExfQ0REQlNFTF9Qb3MgICAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBDRERCU0VMIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQ1RMX0NEREJTRUxfTXNrICAgICAgICAgICAgICAgKDB4M3VsIDw8IFNDX0NUTF9DRERCU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogQ0REQlNFTCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQ1RMX0NETFZfUG9zICAgICAgICAgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkNUTDogQ0RMViBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0NUTF9DRExWX01zayAgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19DVExfQ0RMVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IENETFYgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0NUTF9TWU5DX1BvcyAgICAgICAgICAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpDVEw6IFNZTkMgUG9zaXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19DVExfU1lOQ19Nc2sgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQ1RMX1NZTkNfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6Q1RMOiBTWU5DIE1hc2sgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfVFhSU1RfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBUWFJTVCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX1RYUlNUX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0FMVENUTF9UWFJTVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogVFhSU1QgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX1JYUlNUX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogUlhSU1QgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9SWFJTVF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfUlhSU1RfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IFJYUlNUIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9EQUNURU5fUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IERBQ1RFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfREFDVEVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQUxUQ1RMX0RBQ1RFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBEQUNURU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfQUNURU5fUG9zICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBBQ1RFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX0FDVEVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0FMVENUTF9BQ1RFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQUNURU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX1dBUlNURU5fUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogV0FSU1RFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9XQVJTVEVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfV0FSU1RFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IFdBUlNURU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9DTlRFTjBfUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IENOVEVOMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfQ05URU4wX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQUxUQ1RMX0NOVEVOMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBDTlRFTjAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfQ05URU4xX1BvcyAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBDTlRFTjEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX0NOVEVOMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0FMVENUTF9DTlRFTjFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQ05URU4xIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX0NOVEVOMl9Qb3MgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQ05URU4yIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9DTlRFTjJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfQ05URU4yX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IENOVEVOMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9JTklUU0VMX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IElOSVRTRUwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfSU5JVFNFTF9Nc2sgICAgICAgICAgICAoMHgzdWwgPDwgU0NfQUxUQ1RMX0lOSVRTRUxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBJTklUU0VMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfQURBQ0VOX1BvcyAgICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBBREFDRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX0FEQUNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0FMVENUTF9BREFDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQURBQ0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX1JYQkdURU5fUG9zICAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogUlhCR1RFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9SWEJHVEVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfUlhCR1RFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IFJYQkdURU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9BQ1RTVFMwX1BvcyAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IEFDVFNUUzAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfQUNUU1RTMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQUxUQ1RMX0FDVFNUUzBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBBQ1RTVFMwIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19BTFRDVExfQUNUU1RTMV9Qb3MgICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBBQ1RTVFMxIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfQUxUQ1RMX0FDVFNUUzFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0FMVENUTF9BQ1RTVFMxX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQUNUU1RTMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfQUxUQ1RMX0FDVFNUUzJfUG9zICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkFMVENUTDogQUNUU1RTMiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX0FMVENUTF9BQ1RTVFMyX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19BTFRDVExfQUNUU1RTMl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IEFDVFNUUzIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FMVENUTF9TWU5DX1BvcyAgICAgICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBTFRDVEw6IFNZTkMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19BTFRDVExfU1lOQ19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfQUxUQ1RMX1NZTkNfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUxUQ1RMOiBTWU5DIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19FR1RfRUdUX1BvcyAgICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6RUdUOiBFR1QgUG9zaXRpb24gICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfRUdUX0VHVF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4ZmZ1bCA8PCBTQ19FR1RfRUdUX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OkVHVDogRUdUIE1hc2sgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfUlhUT1VUX1JGVE1fUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlJYVE9VVDogUkZUTSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1JYVE9VVF9SRlRNX01zayAgICAgICAgICAgICAgICgweDFmZnVsIDw8IFNDX1JYVE9VVF9SRlRNX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpSWFRPVVQ6IFJGVE0gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0VUVUNUTF9FVFVSRElWX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpFVFVDVEw6IEVUVVJESVYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19FVFVDVExfRVRVUkRJVl9Nc2sgICAgICAgICAgICAoMHhmZmZ1bCA8PCBTQ19FVFVDVExfRVRVUkRJVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6RVRVQ1RMOiBFVFVSRElWIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRFTl9SREFJRU5fUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IFJEQUlFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5URU5fUkRBSUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVEVOX1JEQUlFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBSREFJRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5URU5fVEJFSUVOX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBUQkVJRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVEVOX1RCRUlFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRFTl9UQkVJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogVEJFSUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVEVOX1RFUlJJRU5fUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogVEVSUklFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRFTl9URVJSSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5URU5fVEVSUklFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IFRFUlJJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRFTl9UTVIwSUVOX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IFRNUjBJRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5URU5fVE1SMElFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVEVOX1RNUjBJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBUTVIwSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5URU5fVE1SMUlFTl9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBUTVIxSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVEVOX1RNUjFJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRFTl9UTVIxSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogVE1SMUlFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVEVOX1RNUjJJRU5fUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogVE1SMklFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRFTl9UTVIySUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5URU5fVE1SMklFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IFRNUjJJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRFTl9CR1RJRU5fUG9zICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IEJHVElFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5URU5fQkdUSUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVEVOX0JHVElFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBCR1RJRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5URU5fQ0RJRU5fUG9zICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBDRElFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVEVOX0NESUVOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRFTl9DRElFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogQ0RJRU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVEVOX0lOSVRJRU5fUG9zICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogSU5JVElFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRFTl9JTklUSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5URU5fSU5JVElFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IElOSVRJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRFTl9SWFRPSUVOX1BvcyAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5URU46IFJYVE9JRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5URU5fUlhUT0lFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVEVOX1JYVE9JRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBSWFRPSUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5URU5fQUNFUlJJRU5fUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVEVOOiBBQ0VSUklFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVEVOX0FDRVJSSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRFTl9BQ0VSUklFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRFTjogQUNFUlJJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVFNUU19SREFJRl9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IFJEQUlGIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRTVFNfUkRBSUZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5UU1RTX1JEQUlGX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBSREFJRiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRTVFNfVEJFSUZfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBUQkVJRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5UU1RTX1RCRUlGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVFNUU19UQkVJRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogVEJFSUYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5UU1RTX1RFUlJJRl9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogVEVSUklGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVFNUU19URVJSSUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRTVFNfVEVSUklGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IFRFUlJJRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVFNUU19UTVIwSUZfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IFRNUjBJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRTVFNfVE1SMElGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5UU1RTX1RNUjBJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBUTVIwSUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRTVFNfVE1SMUlGX1BvcyAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBUTVIxSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5UU1RTX1RNUjFJRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVFNUU19UTVIxSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogVE1SMUlGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5UU1RTX1RNUjJJRl9Qb3MgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogVE1SMklGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVFNUU19UTVIySUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRTVFNfVE1SMklGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IFRNUjJJRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVFNUU19CR1RJRl9Qb3MgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IEJHVElGIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRTVFNfQkdUSUZfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5UU1RTX0JHVElGX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBCR1RJRiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRTVFNfQ0RJRl9Qb3MgICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBDRElGIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5UU1RTX0NESUZfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVFNUU19DRElGX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogQ0RJRiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfSU5UU1RTX0lOSVRJRl9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogSU5JVElGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX0lOVFNUU19JTklUSUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19JTlRTVFNfSU5JVElGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IElOSVRJRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0lOVFNUU19SWFRPSUZfUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpJTlRTVFM6IFJYVE9JRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19JTlRTVFNfUlhUT0lGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfSU5UU1RTX1JYVE9JRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBSWFRPSUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19JTlRTVFNfQUNFUlJJRl9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6SU5UU1RTOiBBQ0VSUklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfSU5UU1RTX0FDRVJSSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX0lOVFNUU19BQ0VSUklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OklOVFNUUzogQUNFUlJJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1JYT1ZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUlhPViBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19SWE9WX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfUlhPVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYT1YgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19SWEVNUFRZX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYRU1QVFkgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfUlhFTVBUWV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX1JYRU1QVFlfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBSWEVNUFRZIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfUlhGVUxMX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBSWEZVTEwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX1JYRlVMTF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19SWEZVTExfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUlhGVUxMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1BFRl9Qb3MgICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUEVGIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19QRUZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfUEVGX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFBFRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19GRUZfUG9zICAgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IEZFRiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfRkVGX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX0ZFRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBGRUYgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfQkVGX1BvcyAgICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBCRUYgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX0JFRl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19CRUZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogQkVGIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1RYT1ZfUG9zICAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogVFhPViBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19UWE9WX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfVFhPVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFRYT1YgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19UWEVNUFRZX1BvcyAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFRYRU1QVFkgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfVFhFTVBUWV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX1RYRU1QVFlfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWEVNUFRZIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfVFhGVUxMX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWEZVTEwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX1RYRlVMTF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19UWEZVTExfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogVFhGVUxMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX0NSRU1PVkVfUG9zICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogQ1JFTU9WRSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19DUkVNT1ZFX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfQ1JFTU9WRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IENSRU1PVkUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19DSU5TRVJUX1BvcyAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IENJTlNFUlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfQ0lOU0VSVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX0NJTlNFUlRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBDSU5TRVJUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfQ0RQSU5TVFNfUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBDRFBJTlNUUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX0NEUElOU1RTX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19DRFBJTlNUU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogQ0RQSU5TVFMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1JYUE9JTlRfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUlhQT0lOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19SWFBPSU5UX01zayAgICAgICAgICAgICgweDd1bCA8PCBTQ19TVEFUVVNfUlhQT0lOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYUE9JTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19SWFJFUlJfUG9zICAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYUkVSUiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfUlhSRVJSX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX1JYUkVSUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBSWFJFUlIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfUlhPVkVSUl9Qb3MgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBSWE9WRVJSIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX1JYT1ZFUlJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19SWE9WRVJSX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUlhPVkVSUiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1JYQUNUX1BvcyAgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogUlhBQ1QgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19SWEFDVF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfUlhBQ1RfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFJYQUNUIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19UWFBPSU5UX1BvcyAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFRYUE9JTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfVFhQT0lOVF9Nc2sgICAgICAgICAgICAoMHg3dWwgPDwgU0NfU1RBVFVTX1RYUE9JTlRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWFBPSU5UIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19TVEFUVVNfVFhSRVJSX1BvcyAgICAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWFJFUlIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfU1RBVFVTX1RYUkVSUl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1NUQVRVU19UWFJFUlJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogVFhSRVJSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfU1RBVFVTX1RYT1ZFUlJfUG9zICAgICAgICAgICAgKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlNUQVRVUzogVFhPVkVSUiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX1NUQVRVU19UWE9WRVJSX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19TVEFUVVNfVFhPVkVSUl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFRYT1ZFUlIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1NUQVRVU19UWEFDVF9Qb3MgICAgICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpTVEFUVVM6IFRYQUNUIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ19TVEFUVVNfVFhBQ1RfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfU1RBVFVTX1RYQUNUX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6U1RBVFVTOiBUWEFDVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19QSU5DVExfUFdSRU5fUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBQV1JFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfUElOQ1RMX1BXUkVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1BJTkNUTF9QV1JFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogUFdSRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfUElOQ1RMX1JTVEVOX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogUlNURU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDX1BJTkNUTF9SU1RFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19QSU5DVExfUlNURU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFJTVEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1BJTkNUTF9DU1RPUExWX1BvcyAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IENTVE9QTFYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19QSU5DVExfQ1NUT1BMVl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NfUElOQ1RMX0NTVE9QTFZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBDU1RPUExWIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19QSU5DVExfQ0xLS0VFUF9Qb3MgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBDTEtLRUVQIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfUElOQ1RMX0NMS0tFRVBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1BJTkNUTF9DTEtLRUVQX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogQ0xLS0VFUCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfUElOQ1RMX1NDREFUQV9Qb3MgICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogU0NEQVRBIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX1BJTkNUTF9TQ0RBVEFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19QSU5DVExfU0NEQVRBX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFNDREFUQSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1BJTkNUTF9QV1JJTlZfUG9zICAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFBXUklOViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19QSU5DVExfUFdSSU5WX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfUElOQ1RMX1BXUklOVl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBQV1JJTlYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19QSU5DVExfREFUQVNUU19Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBEQVRBU1RTIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NfUElOQ1RMX0RBVEFTVFNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1BJTkNUTF9EQVRBU1RTX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogREFUQVNUUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfUElOQ1RMX1BXUlNUU19Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogUFdSU1RTIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDX1BJTkNUTF9QV1JTVFNfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ19QSU5DVExfUFdSU1RTX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFBXUlNUUyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1BJTkNUTF9SU1RTVFNfUG9zICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpQSU5DVEw6IFJTVFNUUyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ19QSU5DVExfUlNUU1RTX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NfUElOQ1RMX1JTVFNUU19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBSU1RTVFMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19QSU5DVExfU1lOQ19Qb3MgICAgICAgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6UElOQ1RMOiBTWU5DIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfUElOQ1RMX1NZTkNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1BJTkNUTF9TWU5DX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlBJTkNUTDogU1lOQyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfVE1SQ1RMMF9DTlRfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDA6IENOVCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1RNUkNUTDBfQ05UX01zayAgICAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IFNDX1RNUkNUTDBfQ05UX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwwOiBDTlQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1RNUkNUTDBfT1BNT0RFX1BvcyAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwwOiBPUE1PREUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19UTVJDVEwwX09QTU9ERV9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgU0NfVE1SQ1RMMF9PUE1PREVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMDogT1BNT0RFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19UTVJDVEwwX1NZTkNfUG9zICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMDogU1lOQyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfVE1SQ1RMMF9TWU5DX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1RNUkNUTDBfU1lOQ19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDA6IFNZTkMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfVE1SQ1RMMV9DTlRfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDE6IENOVCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1RNUkNUTDFfQ05UX01zayAgICAgICAgICAgICAgICgweGZmdWwgPDwgU0NfVE1SQ1RMMV9DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwxOiBDTlQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1RNUkNUTDFfT1BNT0RFX1BvcyAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwxOiBPUE1PREUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19UTVJDVEwxX09QTU9ERV9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgU0NfVE1SQ1RMMV9PUE1PREVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMTogT1BNT0RFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19UTVJDVEwxX1NZTkNfUG9zICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMTogU1lOQyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfVE1SQ1RMMV9TWU5DX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1RNUkNUTDFfU1lOQ19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDE6IFNZTkMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfVE1SQ1RMMl9DTlRfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDI6IENOVCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1RNUkNUTDJfQ05UX01zayAgICAgICAgICAgICAgICgweGZmdWwgPDwgU0NfVE1SQ1RMMl9DTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwyOiBDTlQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1RNUkNUTDJfT1BNT0RFX1BvcyAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpUTVJDVEwyOiBPUE1PREUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ19UTVJDVEwyX09QTU9ERV9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgU0NfVE1SQ1RMMl9PUE1PREVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMjogT1BNT0RFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19UTVJDVEwyX1NZTkNfUG9zICAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VE1SQ1RMMjogU1lOQyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NfVE1SQ1RMMl9TWU5DX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1RNUkNUTDJfU1lOQ19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlRNUkNUTDI6IFNZTkMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfVUFSVENUTF9VQVJURU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlVBUlRDVEw6IFVBUlRFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDX1VBUlRDVExfVUFSVEVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ19VQVJUQ1RMX1VBUlRFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpVQVJUQ1RMOiBVQVJURU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX1VBUlRDVExfV0xTX1BvcyAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpVQVJUQ1RMOiBXTFMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ19VQVJUQ1RMX1dMU19Nc2sgICAgICAgICAgICAgICAoMHgzdWwgPDwgU0NfVUFSVENUTF9XTFNfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VUFSVENUTDogV0xTIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ19VQVJUQ1RMX1BCT0ZGX1BvcyAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6VUFSVENUTDogUEJPRkYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NfVUFSVENUTF9QQk9GRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDX1VBUlRDVExfUEJPRkZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlVBUlRDVEw6IFBCT0ZGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NfVUFSVENUTF9PUEVfUG9zICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDX1Q6OlVBUlRDVEw6IE9QRSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDX1VBUlRDVExfT1BFX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ19VQVJUQ1RMX09QRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpVQVJUQ1RMOiBPUEUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDX0FDVENUTF9UMUVYVF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ19UOjpBQ1RDVEw6IFQxRVhUIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ19BQ1RDVExfVDFFWFRfTXNrICAgICAgICAgICAgICAoMHgxZnVsIDw8IFNDX0FDVENUTF9UMUVYVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NfVDo6QUNUQ1RMOiBUMUVYVCBNYXNrICAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBTQ19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgU0MgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX1NDX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zY3VfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc2N1X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODViNmIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc2N1X3JlZy5oCkBAIC0wLDAgKzEsMTI0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHNjdV9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgU0NVIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1NDVV9SRUdfSF9fCisjZGVmaW5lIF9fU0NVX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZWN1cmUgY29uZmlndXJhdGlvbiBVbml0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgU0NVIFNlY3VyZSBjb25maWd1cmF0aW9uIFVuaXQoU0NVKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBTQ1UgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBTQ1VfVDo6UE5TU0VUWzBdCisgICAgICogT2Zmc2V0OiAweDAwICBQZXJpcGhlcmFsIE5vbi1zZWN1cmUgQXR0cmlidXRpb24gU2V0IFJlZ2lzdGVyMCAoMHg0MDAwXzAwMDB+MHg0MDAxX0ZGRkYpCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzldICAgICB8VVNCSCAgICAgIHxTZXQgVVNCSCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgVVNCSCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQkggaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCSCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMTNdICAgIHxTREgwICAgICAgfFNldCBTREgwIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBTREgwIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0RIMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTREgwIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxNl0gICAgfEVCSSAgICAgICB8U2V0IEVCSSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgRUJJIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUJJIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVCSSBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMjRdICAgIHxQRE1BMSAgICAgfFNldCBQRE1BMSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUERNQTEgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BMSBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BMSBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIEB2YXIgU0NVX1Q6OlBOU1NFVFsxXQorICAgICAqIE9mZnNldDogMHgwNCAgUGVyaXBoZXJhbCBOb24tc2VjdXJlIEF0dHJpYnV0aW9uIFNldCBSZWdpc3RlcjEgKDB4NDAwMl8wMDAwfjB4NDAwM19GRkZGKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxN10gICAgfENSQyAgICAgICB8U2V0IENSQyB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgQ1JDIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ1JDIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENSQyBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMThdICAgIHxDUlBUICAgICAgfFNldCBDUlBUIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBDUlBUIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ1JQVCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDUlBUIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogQHZhciBTQ1VfVDo6UE5TU0VUWzJdCisgICAgICogT2Zmc2V0OiAweDA4ICBQZXJpcGhlcmFsIE5vbi1zZWN1cmUgQXR0cmlidXRpb24gU2V0IFJlZ2lzdGVyMiAoMHg0MDA0XzAwMDB+MHg0MDA1X0ZGRkYpCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzFdICAgICB8UlRDICAgICAgIHxTZXQgUlRDIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBSVEMgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSVEMgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlRDIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFszXSAgICAgfEVBREMgICAgICB8U2V0IEVBREMgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IEVBREMgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQURDIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVBREMgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzVdICAgICB8QUNNUDAxICAgIHxTZXQgQUNNUDAxIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBBQ01QMCwgQUNNUDEgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBQ01QMCwgQUNNUDEgYXJlIHNlY3VyZSBtb2R1bGVzIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQUNNUDAsIEFDTVAxIGFyZSBub24tc2VjdXJlIG1vZHVsZXMuCisgICAgICogfFs3XSAgICAgfERBQyAgICAgICB8U2V0IERBQyB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgREFDIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gREFDIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERBQyBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbOF0gICAgIHxJMlMwICAgICAgfFNldCBJMlMwIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBJMlMwIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJTMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMlMwIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxM10gICAgfE9URyAgICAgICB8U2V0IE9URyB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgT1RHIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT1RHIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMTddICAgIHxUTVIyMyAgICAgfFNldCBUTVIyMyB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgVE1SMjMgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUTVIyMyBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUTVIyMyBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMjRdICAgIHxFUFdNMCAgICAgfFNldCBFUFdNMCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgRVBXTTAgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNMCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMjVdICAgIHxFUFdNMSAgICAgfFNldCBFUFdNMSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgRVBXTTEgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFUFdNMSBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNMSBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMjZdICAgIHxCUFdNMCAgICAgfFNldCBCUFdNMCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgQlBXTTAgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNMCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMjddICAgIHxCUFdNMSAgICAgfFNldCBCUFdNMSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgQlBXTTEgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCUFdNMSBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNMSBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIEB2YXIgU0NVX1Q6OlBOU1NFVFszXQorICAgICAqIE9mZnNldDogMHgwQyAgUGVyaXBoZXJhbCBOb24tc2VjdXJlIEF0dHJpYnV0aW9uIFNldCBSZWdpc3RlcjMgKDB4NDAwNl8wMDAwfjB4NDAwN19GRkZGKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFFTUEkwICAgICB8U2V0IFFTUEkwIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBRU1BJMCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFTUEkwIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFFTUEkwIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxXSAgICAgfFNQSTAgICAgICB8U2V0IFNQSTAgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFNQSTAgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkwIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSTAgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzJdICAgICB8U1BJMSAgICAgIHxTZXQgU1BJMSB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgU1BJMSB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNQSTEgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJMSBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbM10gICAgIHxTUEkyICAgICAgfFNldCBTUEkyIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBTUEkyIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJMiBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkyIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFs0XSAgICAgfFNQSTMgICAgICB8U2V0IFNQSTMgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFNQSTMgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkzIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSTMgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE2XSAgICB8VUFSVDAgICAgIHxTZXQgVUFSVDAgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFVBUlQwIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDAgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDAgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE3XSAgICB8VUFSVDEgICAgIHxTZXQgVUFSVDEgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFVBUlQxIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDEgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDEgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE4XSAgICB8VUFSVDIgICAgIHxTZXQgVUFSVDIgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFVBUlQyIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDIgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDIgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE5XSAgICB8VUFSVDMgICAgIHxTZXQgVUFSVDMgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFVBUlQzIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDMgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDMgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzIwXSAgICB8VUFSVDQgICAgIHxTZXQgVUFSVDQgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFVBUlQ0IHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDQgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDQgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzIxXSAgICB8VUFSVDUgICAgIHxTZXQgVUFSVDUgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFVBUlQ1IHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDUgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDUgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiBAdmFyIFNDVV9UOjpQTlNTRVRbNF0KKyAgICAgKiBPZmZzZXQ6IDB4MTAgIFBlcmlwaGVyYWwgTm9uLXNlY3VyZSBBdHRyaWJ1dGlvbiBTZXQgUmVnaXN0ZXI0ICgweDQwMDhfMDAwMH4weDQwMDlfRkZGRikKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxJMkMwICAgICAgfFNldCBJMkMwIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBJMkMwIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJMkMwIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxXSAgICAgfEkyQzEgICAgICB8U2V0IEkyQzEgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IEkyQzEgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMxIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQzEgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzJdICAgICB8STJDMiAgICAgIHxTZXQgSTJDMiB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgSTJDMiB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEkyQzIgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDMiBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMTZdICAgIHxTQzAgICAgICAgfFNldCBTQzAgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFNDMCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDMCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTQzAgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE3XSAgICB8U0MxICAgICAgIHxTZXQgU0MxIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBTQzEgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTQzEgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0MxIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxOF0gICAgfFNDMiAgICAgICB8U2V0IFNDMiB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgU0MyIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0MyIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDMiBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIEB2YXIgU0NVX1Q6OlBOU1NFVFs1XQorICAgICAqIE9mZnNldDogMHgxNCAgUGVyaXBoZXJhbCBOb24tc2VjdXJlIEF0dHJpYnV0aW9uIFNldCBSZWdpc3RlcjUgKDB4NDAwQV8wMDAwfjB4NDAwQl9GRkZGKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENBTjAgICAgICB8U2V0IENBTjAgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IENBTjAgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDQU4wIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENBTjAgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiB8WzE2XSAgICB8UUVJMCAgICAgIHxTZXQgUUVJMCB0byBOb24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUUVJMCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFFFSTAgaXMgYSBzZWN1cmUgbW9kdWxlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJMCBpcyBhIG5vbi1zZWN1cmUgbW9kdWxlLgorICAgICAqIHxbMTddICAgIHxRRUkxICAgICAgfFNldCBRRUkxIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBRRUkxIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUUVJMSBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRRUkxIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsyMF0gICAgfEVDQVAwICAgICB8U2V0IEVDQVAwIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBFQ0FQMCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQVAwIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVDQVAwIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsyMV0gICAgfEVDQVAxICAgICB8U2V0IEVDQVAxIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBFQ0FQMSB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEVDQVAxIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVDQVAxIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsyNV0gICAgfFRSTkcgICAgICB8U2V0IFRSTkcgdG8gTm9uLXNlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFRSTkcgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUUk5HIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRSTkcgaXMgYSBub24tc2VjdXJlIG1vZHVsZS4KKyAgICAgKiBAdmFyIFNDVV9UOjpQTlNTRVRbNl0KKyAgICAgKiBPZmZzZXQ6IDB4MTggIFBlcmlwaGVyYWwgTm9uLXNlY3VyZSBBdHRyaWJ1dGlvbiBTZXQgUmVnaXN0ZXI2ICgweDQwMENfMDAwMH4weDQwMERfRkZGRikKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxVU0JEICAgICAgfFNldCBVU0JEIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBVU0JEIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNCRCBpcyBhIHNlY3VyZSBtb2R1bGUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0JEIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxNl0gICAgfFVTQ0kwICAgICB8U2V0IFVTQ0kwIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBVU0NJMCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQ0kwIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQ0kwIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogfFsxN10gICAgfFVTQ0kxICAgICB8U2V0IFVTQ0kxIHRvIE5vbi1zZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBVU0NJMSB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQ0kxIGlzIGEgc2VjdXJlIG1vZHVsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQ0kxIGlzIGEgbm9uLXNlY3VyZSBtb2R1bGUuCisgICAgICogQHZhciBTQ1VfVDo6SU9OU1NFVAorICAgICAqIE9mZnNldDogMHgyMCAgSU8gTm9uLXNlY3VyZSBBdHRyaWJ1dGlvbiBTZXQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQQSAgICAgICAgfFNldCBHUElPIFBvcnQgYSB0byBOb24tc2NlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFBBIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BJTyBwb3J0IEEgaXMgc2VjdXJlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BJTyBwb3J0IEEgaXMgbm9uLXNlY3VyZS4KKyAgICAgKiB8WzFdICAgICB8UEIgICAgICAgIHxTZXQgR1BJTyBQb3J0IEIgdG8gTm9uLXNjZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBQQiB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQSU8gcG9ydCBCIGlzIHNlY3VyZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQSU8gcG9ydCBCIGlzIG5vbi1zZWN1cmUuCisgICAgICogfFsyXSAgICAgfFBDICAgICAgICB8U2V0IEdQSU8gUG9ydCBDIHRvIE5vbi1zY2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUEMgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUElPIHBvcnQgQyBpcyBzZWN1cmUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUElPIHBvcnQgQyBpcyBub24tc2VjdXJlLgorICAgICAqIHxbM10gICAgIHxQRCAgICAgICAgfFNldCBHUElPIFBvcnQgRCB0byBOb24tc2NlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFBEIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BJTyBwb3J0IEQgaXMgc2VjdXJlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BJTyBwb3J0IEQgaXMgbm9uLXNlY3VyZS4KKyAgICAgKiB8WzRdICAgICB8UEUgICAgICAgIHxTZXQgR1BJTyBQb3J0IEUgdG8gTm9uLXNjZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBQRSB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQSU8gcG9ydCBFIGlzIHNlY3VyZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQSU8gcG9ydCBFIGlzIG5vbi1zZWN1cmUuCisgICAgICogfFs1XSAgICAgfFBGICAgICAgICB8U2V0IEdQSU8gUG9ydCBGIHRvIE5vbi1zY2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBzZXQgUEYgdG8gbm9uLXNlY3VyZSBzdGF0ZS4gV3JpdGUgMCBoYXMgbm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUElPIHBvcnQgRiBpcyBzZWN1cmUgKGRlZmF1bHQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBHUElPIHBvcnQgRiBpcyBub24tc2VjdXJlLgorICAgICAqIHxbNl0gICAgIHxQRyAgICAgICAgfFNldCBHUElPIFBvcnQgRyB0byBOb24tc2NlY3VyZSBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gc2V0IFBHIHRvIG5vbi1zZWN1cmUgc3RhdGUuIFdyaXRlIDAgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gR1BJTyBwb3J0IEcgaXMgc2VjdXJlIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BJTyBwb3J0IEcgaXMgbm9uLXNlY3VyZS4KKyAgICAgKiB8WzddICAgICB8UEggICAgICAgIHxTZXQgR1BJTyBQb3J0IEggdG8gTm9uLXNjZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBQSCB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGhhcyBubyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdQSU8gcG9ydCBIIGlzIHNlY3VyZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEdQSU8gcG9ydCBIIGlzIG5vbi1zZWN1cmUuCisgICAgICogQHZhciBTQ1VfVDo6U1JBTU5TU0VUCisgICAgICogT2Zmc2V0OiAweDI0ICBTUkFNIE5vbi1zZWN1cmUgQXR0cmlidXRpb24gU2V0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzExOjBdICB8U0VDbiAgICAgIHxTZXQgU1JBTSBTZWN0aW9uIE4gdG8gTm9uLXNjZWN1cmUgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHNldCBTUkFNIHNlY3Rpb24gbiB0byBub24tc2VjdXJlIHN0YXRlLiBXcml0ZSAwIGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNSQU0gU2VjdGlvbiBuIGlzIHNlY3VyZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNSQU0gU2VjdGlvbiBuIGlzIG5vbi1zZWN1cmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2VjdXJlIFNSQU0gc2VjdGlvbiBuIGlzIDB4MjAwMF8wMDAwKzB4MjAwMCpuIHRvIDB4MjAwMF8wMDAwKzB4MjAwMCoobisxKS0weDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb24tc2VjdXJlIFNSQU0gc2VjdGlvbiBuIGlzIDB4MzAwMF8wMDAwKzB4MjAwMCpuIHRvIDB4MzAwMF8wMDAwKzB4MjAwMCoobisxKS0weDEKKyAgICAgKiBAdmFyIFNDVV9UOjpGTlNBRERSCisgICAgICogT2Zmc2V0OiAweDI4ICBGbGFzaCBOb24tc2VjdXJlIEJvdW5kYXJ5IEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxGTlNBRERSICAgfEZsYXNoIE5vbi1zZWN1cmUgQm91bmRhcnkgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHRoZSBiYXNlIGFkZHJlc3Mgb2YgTm9uLXNlY3VyZSByZWdpb24gc2V0IGluIHVzZXIgY29uZmlndXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlZmVyIHRvIEZNQyBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisgICAgICogQHZhciBTQ1VfVDo6U1ZJT0lFTgorICAgICAqIE9mZnNldDogMHgyQyAgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBUEIwSUVOICAgfEFQQjAgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgQVBCMCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBBUEIwIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfEFQQjFJRU4gICB8QVBCMSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBBUEIxIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIEFQQjEgRW5hYmxlZC4KKyAgICAgKiB8WzRdICAgICB8R1BJT0lFTiAgIHxHUElPIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIEdQSU8gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgR1BJTyBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxFQklJRU4gICAgfEVCSSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBFQkkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgRUJJIEVuYWJsZWQuCisgICAgICogfFs2XSAgICAgfFVTQkhJRU4gICB8VVNCSCBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBVU0IgaG9zdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBVU0IgaG9zdCBFbmFibGVkLgorICAgICAqIHxbN10gICAgIHxDUkNJRU4gICAgfENSQyBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBDUkMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgQ1JDIEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFNESDBJRU4gICB8U0RIMCBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBTRCBob3N0IDAgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgU0QgaG9zdCAwIEVuYWJsZWQuCisgICAgICogfFsxMF0gICAgfFBETUEwSUVOICB8UERNQTAgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgUERNQTAgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgUERNQTAgRW5hYmxlZC4KKyAgICAgKiB8WzExXSAgICB8UERNQTFJRU4gIHxQRE1BMSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBQRE1BMSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBQRE1BMSBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxTUkFNMElFTiAgfFNSQU0gQmFuayAwIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIFNSQU0gYmFuazAgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgU1JBTSBiYW5rMCBFbmFibGVkLgorICAgICAqIHxbMTNdICAgIHxTUkFNMUlFTiAgfFNSQU0gQmFuayAxIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIFNSQU0gYmFuazEgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgU1JBTSBiYW5rMSBFbmFibGVkLgorICAgICAqIHxbMTRdICAgIHxGTUNJRU4gICAgfEZNQyBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBGTUMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgRk1DIEVuYWJsZWQuCisgICAgICogfFsxNV0gICAgfEZMQVNISUVOICB8RkxBU0ggU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2YgRmxhc2ggZGF0YSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBGbGFzaCBkYXRhIEVuYWJsZWQuCisgICAgICogfFsxNl0gICAgfFNDVUlFTiAgICB8U0NVIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIFNDVSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBTQ1UgRW5hYmxlZC4KKyAgICAgKiB8WzE3XSAgICB8U1lTSUVOICAgIHxTWVMgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2Ygc3lzdGVtIG1hbmFnZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCB0cmlnZ2VyZWQgZnJvbSBzZWN1cml0eSB2aW9sYXRpb24gb2Ygc3lzdGVtIG1hbmFnZXIgRW5hYmxlZC4KKyAgICAgKiB8WzE4XSAgICB8Q1JQVElFTiAgIHxDUlBUIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgdHJpZ2dlcmVkIGZyb20gc2VjdXJpdHkgdmlvbGF0aW9uIG9mIGNyeXB0byBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IHRyaWdnZXJlZCBmcm9tIHNlY3VyaXR5IHZpb2xhdGlvbiBvZiBjcnlwdG8gRW5hYmxlZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpTVklOVFNUUworICAgICAqIE9mZnNldDogMHgzMCAgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBUEIwSUYgICAgfEFQQjAgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQVBCMCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBBUEIwIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFsxXSAgICAgfEFQQjFJRiAgICB8QVBCMSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBBUEIxIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIEFQQjEgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzRdICAgICB8R1BJT0lGICAgIHxHUElPIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEdQSU8gdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgR1BJTyB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbNV0gICAgIHxFQklJRiAgICAgfEVCSSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBFQkkgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgRUJJIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFs2XSAgICAgfFVTQkhJRiAgICB8VVNCSCBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBVU0JIIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIFVTQkggdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzddICAgICB8Q1JDSUYgICAgIHxDUkMgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQ1JDIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIENSQyB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbOF0gICAgIHxTREgwSUYgICAgfFNESDAgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gU0RIMCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBTREgwIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFsxMF0gICAgfFBETUEwSUYgICB8UERNQTAgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUERNQTAgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgUERNQTAgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzExXSAgICB8UERNQTFJRiAgIHxQRE1BMSBTZWN1cml0eSBWaW9sYXRpb24gSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBQRE1BMSB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBQRE1BMSB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbMTJdICAgIHxTUkFNMElGICAgfFNSQU0wIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNSQU0wIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIFNSQU0wIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFsxM10gICAgfFNSQU0xSUYgICB8U1JBTSBCYW5rIDEgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gU1JBTTEgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlcmUgaXMgU1JBTTEgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzE0XSAgICB8Rk1DSUYgICAgIHxGTUMgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gRk1DIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIEZNQyB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbMTVdICAgIHxGTEFTSElGICAgfEZMQVNIIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIEZMQVNIIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIEZMQVNIIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFsxNl0gICAgfFNDVUlGICAgICB8U0NVIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNDVSB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBTQ1UgdmlvbGF0aW9uIGludGVycnVwdCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgICAgKiB8WzE3XSAgICB8U1lTSUYgICAgIHxTWVMgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gU1lTIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIFNZUyB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmbGFnLgorICAgICAqIHxbMThdICAgIHxDUlBUSUYgICAgfENSUFQgU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQ1JQVCB2aW9sYXRpb24gaW50ZXJydXB0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGVyZSBpcyBDUlBUIHZpb2xhdGlvbiBpbnRlcnJ1cHQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuCisgICAgICogQHZhciBTQ1VfVDo6QVBCMFZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4MzQgIEFQQjAgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpBUEIwVkEKKyAgICAgKiBPZmZzZXQ6IDB4MzggIEFQQjAgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpBUEIxVlNSQworICAgICAqIE9mZnNldDogMHgzQyAgQVBCMSBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfE1BU1RFUiAgICB8TWFzdGVyIFZpb2xhdGluZyBTZWN1cml0eSBQb2xpY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB3aGljaCBtYXN0ZXIgaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MCA9IGNvcmUgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MyA9IFBETUEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NCA9IFNESDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg1ID0gQ1JZUFRPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NiA9IFVTSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEIgPSBQRE1BMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgaXMgdW5kZWZpbmVkLgorICAgICAqIEB2YXIgU0NVX1Q6OkFQQjFWQQorICAgICAqIE9mZnNldDogMHg0MCAgQVBCMSBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OkdQSU9WU1JDCisgICAgICogT2Zmc2V0OiAweDQ0ICBHUElPIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6R1BJT1ZBCisgICAgICogT2Zmc2V0OiAweDQ4ICBHUElPIFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8VklPQUREUiAgIHxWaW9sYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHRoZSB0YXJnZXQgYWRkcmVzcyBvZiB0aGUgYWNjZXNzLCB3aGljaCBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogQHZhciBTQ1VfVDo6RUJJVlNSQworICAgICAqIE9mZnNldDogMHg0QyAgRUJJIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6RUJJVkEKKyAgICAgKiBPZmZzZXQ6IDB4NTAgIEVCSSBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OlVTQkhWU1JDCisgICAgICogT2Zmc2V0OiAweDU0ICBVU0JIIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6VVNCSFZBCisgICAgICogT2Zmc2V0OiAweDU4ICBVU0JIIFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8VklPQUREUiAgIHxWaW9sYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHRoZSB0YXJnZXQgYWRkcmVzcyBvZiB0aGUgYWNjZXNzLCB3aGljaCBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogQHZhciBTQ1VfVDo6Q1JDVlNSQworICAgICAqIE9mZnNldDogMHg1QyAgQ1JDIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6Q1JDVkEKKyAgICAgKiBPZmZzZXQ6IDB4NjAgIENSQyBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OlNEMFZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4NjQgIFNESDAgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpTRDBWQQorICAgICAqIE9mZnNldDogMHg2OCAgU0RIMCBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OlBETUEwVlNSQworICAgICAqIE9mZnNldDogMHg3NCAgUERNQTAgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpQRE1BMFZBCisgICAgICogT2Zmc2V0OiAweDc4ICBQRE1BMCBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OlBETUExVlNSQworICAgICAqIE9mZnNldDogMHg3QyAgUERNQTEgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpQRE1BMVZBCisgICAgICogT2Zmc2V0OiAweDgwICBQRE1BMSBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OlNSQU0wVlNSQworICAgICAqIE9mZnNldDogMHg4NCAgU1JBTTAgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpTUkFNMFZBCisgICAgICogT2Zmc2V0OiAweDg4ICBTUkFNMCBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OlNSQU0xVlNSQworICAgICAqIE9mZnNldDogMHg4QyAgU1JBTTEgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpTUkFNMVZBCisgICAgICogT2Zmc2V0OiAweDkwICBTUkFNMSBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OkZNQ1ZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4OTQgIEZNQyBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfE1BU1RFUiAgICB8TWFzdGVyIFZpb2xhdGluZyBTZWN1cml0eSBQb2xpY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB3aGljaCBtYXN0ZXIgaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MCA9IGNvcmUgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MyA9IFBETUEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NCA9IFNESDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg1ID0gQ1JZUFRPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NiA9IFVTSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEIgPSBQRE1BMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgaXMgdW5kZWZpbmVkLgorICAgICAqIEB2YXIgU0NVX1Q6OkZNQ1ZBCisgICAgICogT2Zmc2V0OiAweDk4ICBGTUMgVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpGTEFTSFZTUkMKKyAgICAgKiBPZmZzZXQ6IDB4OUMgIEZsYXNoIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6RkxBU0hWQQorICAgICAqIE9mZnNldDogMHhBMCAgRmxhc2ggVmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxWSU9BRERSICAgfFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgdGhlIHRhcmdldCBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MsIHdoaWNoIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiBAdmFyIFNDVV9UOjpTQ1VWU1JDCisgICAgICogT2Zmc2V0OiAweEE0ICBTQ1UgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpTQ1VWQQorICAgICAqIE9mZnNldDogMHhBOCAgU0NVIFZpb2xhdGlvbiBBZGRyZXNzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8VklPQUREUiAgIHxWaW9sYXRpb24gQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHRoZSB0YXJnZXQgYWRkcmVzcyBvZiB0aGUgYWNjZXNzLCB3aGljaCBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogQHZhciBTQ1VfVDo6U1lTVlNSQworICAgICAqIE9mZnNldDogMHhBQyAgU3lzdGVtIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8TUFTVEVSICAgIHxNYXN0ZXIgVmlvbGF0aW5nIFNlY3VyaXR5IFBvbGljeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluZGljYXRlIHdoaWNoIG1hc3RlciBpbnZva2VzIHRoZSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gY29yZSBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUERNQTAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gU0RIMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDUgPSBDUllQVE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg2ID0gVVNILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4QiA9IFBETUExLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyBpcyB1bmRlZmluZWQuCisgICAgICogQHZhciBTQ1VfVDo6U1lTVkEKKyAgICAgKiBPZmZzZXQ6IDB4QjAgIFN5c3RlbSBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6OkNSUFRWU1JDCisgICAgICogT2Zmc2V0OiAweEI0ICBDcnlwdG8gU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxNQVNURVIgICAgfE1hc3RlciBWaW9sYXRpbmcgU2VjdXJpdHkgUG9saWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW5kaWNhdGUgd2hpY2ggbWFzdGVyIGludm9rZXMgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAgPSBjb3JlIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDMgPSBQRE1BMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQgPSBTREgwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IENSWVBUTy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDYgPSBVU0guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHhCID0gUERNQTEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzIGlzIHVuZGVmaW5lZC4KKyAgICAgKiBAdmFyIFNDVV9UOjpDUlBUVkEKKyAgICAgKiBPZmZzZXQ6IDB4QjggIENyeXB0byBWaW9sYXRpb24gQWRkcmVzcworICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFZJT0FERFIgICB8VmlvbGF0aW9uIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZSB0aGUgdGFyZ2V0IGFkZHJlc3Mgb2YgdGhlIGFjY2Vzcywgd2hpY2ggaW52b2tlcyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqIEB2YXIgU0NVX1Q6Ok5TTUNUTAorICAgICAqIE9mZnNldDogMHgyMDAgIE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8UFJFU0NBTEUgIHxQcmUtc2NhbGUgVmFsdWUgb2YgTm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIENvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBDb3VudGVyIEVuYWJsZWQgYW5kIHRoZSBjb3VudGVyIGNsb2NrIHNvdXJjZSA9IEhDTEsvUFJFU0NBTEUuCisgICAgICogfFs4XSAgICAgfE5TTUlFTiAgICB8Tm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vbi1zZWN1cmUgc3RhdGUgbW9uaXRvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE5vbi1zZWN1cmUgc3RhdGUgbW9uaXRvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8QVVUT1JMRCAgIHxBdXRvIFJlbG9hZCBOb24tc2VjdXJlIFN0YXRlIE1vbml0b3IgQ291bnRlciBXaGVuIENVUlJOUyBDaGFuZ2luZyB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERpc2FibGUgY2xlYXJpbmcgbm9uLXNlY3VyZSBzdGF0ZSBtb25pdG9yIGNvdW50ZXIgYXV0b210aWNhbGx5LiAoZGVmYXVsdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlIGNsZWFyaW5nIG5vbi1zZWN1cmUgc3RhdGUgbW9uaXRvciBjb3VudGVyIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY29yZSBwcm9jZXNzb3IgY2hhbmdlcyBmcm9tIHNlY3VyZSBzdGF0ZSB0byBub24tc2VjdXJlIHN0YXRlCisgICAgICogfFsxMF0gICAgfFRNUk1PRCAgICB8Tm9uLXNlY3VyZSBNb25pdG9yIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNb25pdG9yIG1vZGUuIFRoZSBjb3VudGVyIHdpbGwgY291bnQgZG93biB3aGVuIHRoZSBjb3JlIHByb2Nlc3NvciBpcyBpbiBub24tc2VjdXJlIHN0YXRlLiAoZGVmYXVsdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRnJlZS1jb3VudGluZyBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvdW50ZXIgd2lsbCBrZWVwIGNvdW50aW5nIG5vIG1hdGVyIHRoZSBjb3JlIHByb2Nlc3NvciBpcyBpbiBzZWN1cmUgb3Igbm9uLXNlY3VyZSBzdGF0ZS4KKyAgICAgKiB8WzEyXSAgICB8SURMRU9OICAgIHxNb25pdG9yIENvdW50ZXIgS2VlcCBDb3VudGluZyBXaGVuIHRoZSBDaGlwIGlzIGluIElkbGUgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBjb3VudGVyIHdpbGwgYmUgaGFsdGVkIHdoZW4gdGhlIGNoaXAgaXMgaW4gaWRsZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY291bnRlciB3aWxsIGtlZXAgY291bnRpbmcgd2hlbiB0aGUgY2hpcCBpcyBpbiBpZGxlIG1vZGUuIChkZWZhdWx0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIG1vbml0b3IgbW9kZSwgdGhlIGNvdW50ZXIgaXMgYWx3YXlzIGhhbHRlZCB3aGVuIHRoZSBjb3JlIHByb2Nlc3NvciBpcyBpbiBzZWN1cmUgc3RhdGUuCisgICAgICogfFsxM10gICAgfERCR09OICAgICB8TW9uaXRvciBDb3VudGVyIEtlZXAgQ291bnRpbmcgV2hlbiB0aGUgQ2hpcCBpcyBpbiBEZWJ1ZyBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGNvdW50ZXIgd2lsbCBiZSBoYWx0ZWQgd2hlbiB0aGUgY29yZSBwcm9jZXNzb3IgaXMgaGFsdGVkIGJ5IElDRS4gKGRlZmF1bHQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBjb3VudGVyIHdpbGwga2VlcCBjb3VudGluZyB3aGVuIHRoZSBjb3JlIHByb2Nlc3NvciBpcyBoYWx0ZWQgYnkgSUNFLgorICAgICAqIEB2YXIgU0NVX1Q6Ok5TTUxPQUQKKyAgICAgKiBPZmZzZXQ6IDB4MjA0ICBOb24tc2VjdXJlIFN0YXRlIE1vbml0b3IgUmVsb2FkIFZhbHVlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzIzOjBdICB8UkVMT0FEICAgIHxSZWxvYWQgVmFsdWUgZm9yIE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFJFTE9BRCB2YWx1ZSB3aWxsIGJlIHJlbG9hZGVkIHRvIHRoZSBjb3VudGVyIHdoZW5ldmVyIHRoZSBjb3VudGVyIGNvdW50cyBkb3duIHRvIDAuCisgICAgICogQHZhciBTQ1VfVDo6TlNNVkFMCisgICAgICogT2Zmc2V0OiAweDIwOCAgTm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIENvdW50ZXIgVmFsdWUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjM6MF0gIHxWQUxVRSAgICAgfENvdW50ZXIgVmFsdWUgb2YgTm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIENvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDdXJyZW50IHZhbHVlIG9mIG5vbi1zZWN1cmUgc3RhdGUgbW9uaXRvciBjb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBpcyBkb3duIGNvdW50ZXIgYW5kIGNvdW50cyBkb3duIG9ubHkgd2hlbiBDVVJSTlMgPSAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBjb3VudGluZyBkb3duIHRvIDAsIFZBTFVFIHdpbGwgYXV0b21hdGljYWxseSBiZSByZWxvYWRlZCBmcm9tIE5TTUxPQUQgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSB3cml0ZSBvZiBhbnkgdmFsdWUgY2xlYXJzIHRoZSBWQUxVRSB0byAwIGFuZCBhbHNvIGNsZWFycyBOU01JRi4KKyAgICAgKiBAdmFyIFNDVV9UOjpOU01TVFMKKyAgICAgKiBPZmZzZXQ6IDB4MjBDICBOb24tc2VjdXJlIFN0YXRlIE1vbml0b3IgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1VSUk5TICAgIHxDdXJyZW50IENvcmUgUHJvY2Vzc29yIFNlY3VyZS9Ob24tc2VjdXJlIFN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvcmUgcHJvY2Vzc29yIGlzIGluIHNlY3VyZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29yZSBwcm9jZXNzb3IgaXMgaW4gbm9uLXNlY3VyZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgdXNlZCB0byBtb25pdG9yIHRoZSBjdXJyZW50IHNlY3VyZS9ub24tc2VjdXJlIHN0YXRlIG9mIHRoZSBjb3JlIHByb2Nlc3NvciwgZXZlbiBpZiB0aGUgbm9uLXNlY3VyZSBzdGF0ZSBtb25pdG9yIGNvdW50ZXIgaXMgZGlzYWJsZWQuCisgICAgICogfFsxXSAgICAgfE5TTUlGICAgICB8Tm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvdW50ZXIgZG9lc251MjAxOXQgY291bnQgZG93biB0byAwIHNpbmNlIHRoZSBsYXN0IE5TTUlGIGhhcyBiZWVuIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvdW50ZXIgY291bnRzIGRvd24gdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMS4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBOU1NFVFs3XTsgICAgICAgICAgICAgLyohPCBbMHgwMDAwfjBYMDAxOF0gUGVyaXBoZXJhbCBOb24tc2VjdXJlIEF0dHJpYnV0aW9uIFNldCBSZWdpc3RlcjAgKDB4NDAwMF8wMDAwfjB4NDAwMV9GRkZGKSAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMV07CisgICAgX19JTyB1aW50MzJfdCBJT05TU0VUOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gSU8gTm9uLXNlY3VyZSBBdHRyaWJ1dGlvbiBTZXQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1JBTU5TU0VUOyAgICAgICAgICAgICAvKiE8IFsweDAwMjRdIFNSQU0gTm9uLXNlY3VyZSBBdHRyaWJ1dGlvbiBTZXQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEZOU0FERFI7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDI4XSBGbGFzaCBOb24tc2VjdXJlIEJvdW5kYXJ5IEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTVklPSUVOOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAyY10gU2VjdXJpdHkgVmlvbGF0aW9uIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1ZJTlRTVFM7ICAgICAgICAgICAgICAvKiE8IFsweDAwMzBdIFNlY3VyaXR5IFZpb2xhdGlvbiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEFQQjBWU1JDOyAgICAgICAgICAgICAgLyohPCBbMHgwMDM0XSBBUEIwIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBBUEIwVkE7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzOF0gQVBCMCBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQVBCMVZTUkM7ICAgICAgICAgICAgICAvKiE8IFsweDAwM2NdIEFQQjEgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEFQQjFWQTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDQwXSBBUEIxIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBHUElPVlNSQzsgICAgICAgICAgICAgIC8qITwgWzB4MDA0NF0gR1BJTyBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgR1BJT1ZBOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNDhdIEdQSU8gVmlvbGF0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEVCSVZTUkM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDRjXSBFQkkgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBFQklWQTsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1MF0gRUJJIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgVVNCSFZTUkM7ICAgICAgICAgICAgICAvKiE8IFsweDAwNTRdIFVTQkggU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFVTQkhWQTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDU4XSBVU0JIIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBDUkNWU1JDOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA1Y10gQ1JDIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ1JDVkE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNjBdIENSQyBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNEMFZTUkM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDY0XSBTREgwIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTRDBWQTsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA2OF0gU0RIMCBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbMl07CisgICAgX19JICB1aW50MzJfdCBQRE1BMFZTUkM7ICAgICAgICAgICAgIC8qITwgWzB4MDA3NF0gUERNQTAgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUERNQTBWQTsgICAgICAgICAgICAgICAvKiE8IFsweDAwNzhdIFBETUEwIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFBETUExVlNSQzsgICAgICAgICAgICAgLyohPCBbMHgwMDdjXSBQRE1BMSBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBQRE1BMVZBOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA4MF0gUERNQTEgVmlvbGF0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU1JBTTBWU1JDOyAgICAgICAgICAgICAvKiE8IFsweDAwODRdIFNSQU0wIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNSQU0wVkE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDg4XSBTUkFNMCBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTUkFNMVZTUkM7ICAgICAgICAgICAgIC8qITwgWzB4MDA4Y10gU1JBTTEgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU1JBTTFWQTsgICAgICAgICAgICAgICAvKiE8IFsweDAwOTBdIFNSQU0xIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEZNQ1ZTUkM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDk0XSBGTUMgU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBGTUNWQTsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA5OF0gRk1DIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgRkxBU0hWU1JDOyAgICAgICAgICAgICAvKiE8IFsweDAwOWNdIEZsYXNoIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEZMQVNIVkE7ICAgICAgICAgICAgICAgLyohPCBbMHgwMGEwXSBGbGFzaCBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTQ1VWU1JDOyAgICAgICAgICAgICAgIC8qITwgWzB4MDBhNF0gU0NVIFNlY3VyaXR5IFBvbGljeSBWaW9sYXRpb24gU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgU0NVVkE7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwYThdIFNDVSBWaW9sYXRpb24gQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNZU1ZTUkM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMGFjXSBTeXN0ZW0gU2VjdXJpdHkgUG9saWN5IFZpb2xhdGlvbiBTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBTWVNWQTsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDBiMF0gU3lzdGVtIFZpb2xhdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgQ1JQVFZTUkM7ICAgICAgICAgICAgICAvKiE8IFsweDAwYjRdIENyeXB0byBTZWN1cml0eSBQb2xpY3kgVmlvbGF0aW9uIFNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IENSUFRWQTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMGI4XSBDcnlwdG8gVmlvbGF0aW9uIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMls4MV07CisgICAgX19JTyB1aW50MzJfdCBOU01DVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDIwMF0gTm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTlNNTE9BRDsgICAgICAgICAgICAgICAvKiE8IFsweDAyMDRdIE5vbi1zZWN1cmUgU3RhdGUgTW9uaXRvciBSZWxvYWQgVmFsdWUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE5TTVZBTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMjA4XSBOb24tc2VjdXJlIFN0YXRlIE1vbml0b3IgQ291bnRlciBWYWx1ZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBOU01TVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDIwY10gTm9uLXNlY3VyZSBTdGF0ZSBNb25pdG9yIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFNDVV9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBTQ1VfQ09OU1QgU0NVIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFNDVSBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQwX1VTQkhfUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMDogVVNCSCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMF9VU0JIX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDBfVVNCSF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDA6IFVTQkggTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMF9TREgwX1BvcyAgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDA6IFNESDAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDBfU0RIMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQwX1NESDBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQwOiBTREgwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDBfRUJJX1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQwOiBFQkkgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQwX0VCSV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMF9FQklfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMDogRUJJIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQwX1BETUExX1BvcyAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMDogUERNQTEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMF9QRE1BMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDBfUERNQTFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDA6IFBETUExIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMV9DUkNfUG9zICAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDE6IENSQyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDFfQ1JDX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQxX0NSQ19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQxOiBDUkMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDFfQ1JQVF9Qb3MgICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQxOiBDUlBUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQxX0NSUFRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMV9DUlBUX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMTogQ1JQVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQyX1JUQ19Qb3MgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogUlRDIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMl9SVENfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDJfUlRDX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IFJUQyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMl9FQURDX1BvcyAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IEVBREMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDJfRUFEQ19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQyX0VBRENfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBFQURDIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDJfQUNNUDAxX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBBQ01QMDEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQyX0FDTVAwMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMl9BQ01QMDFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogQUNNUDAxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQyX0RBQ19Qb3MgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogREFDIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMl9EQUNfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDJfREFDX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IERBQyBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMl9JMlMwX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IEkyUzAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDJfSTJTMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQyX0kyUzBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBJMlMwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDJfT1RHX1BvcyAgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBPVEcgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQyX09UR19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMl9PVEdfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogT1RHIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQyX1RNUjIzX1BvcyAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogVE1SMjMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMl9UTVIyM19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDJfVE1SMjNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IFRNUjIzIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMl9FUFdNMF9Qb3MgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IEVQV00wIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDJfRVBXTTBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQyX0VQV00wX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBFUFdNMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDJfRVBXTTFfUG9zICAgICAgICAgICAgKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBFUFdNMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQyX0VQV00xX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUMl9FUFdNMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogRVBXTTEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQyX0JQV00wX1BvcyAgICAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMjogQlBXTTAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUMl9CUFdNMF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDJfQlBXTTBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IEJQV00wIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUMl9CUFdNMV9Qb3MgICAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDI6IEJQV00xIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDJfQlBXTTFfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQyX0JQV00xX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQyOiBCUFdNMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDNfUVNQSTBfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBRU1BJMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQzX1FTUEkwX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUM19RU1BJMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogUVNQSTAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQzX1NQSTBfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogU1BJMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUM19TUEkwX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDNfU1BJMF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFNQSTAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUM19TUEkxX1BvcyAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFNQSTEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDNfU1BJMV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQzX1NQSTFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBTUEkxIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDNfU1BJMl9Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBTUEkyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQzX1NQSTJfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUM19TUEkyX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogU1BJMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQzX1NQSTNfUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogU1BJMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUM19TUEkzX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDNfU1BJM19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFNQSTMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUM19VQVJUMF9Qb3MgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFVBUlQwIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDNfVUFSVDBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQzX1VBUlQwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBVQVJUMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDNfVUFSVDFfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBVQVJUMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQzX1VBUlQxX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUM19VQVJUMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogVUFSVDEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQzX1VBUlQyX1BvcyAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogVUFSVDIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUM19VQVJUMl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDNfVUFSVDJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFVBUlQyIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUM19VQVJUM19Qb3MgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFVBUlQzIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDNfVUFSVDNfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQzX1VBUlQzX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBVQVJUMyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDNfVUFSVDRfUG9zICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQzOiBVQVJUNCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQzX1VBUlQ0X01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUM19VQVJUNF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogVUFSVDQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQzX1VBUlQ1X1BvcyAgICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUMzogVUFSVDUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUM19VQVJUNV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDNfVUFSVDVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDM6IFVBUlQ1IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNF9JMkMwX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDQ6IEkyQzAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDRfSTJDMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ0X0kyQzBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ0OiBJMkMwIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDRfSTJDMV9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ0OiBJMkMxIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ0X0kyQzFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNF9JMkMxX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNDogSTJDMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ0X0kyQzJfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNDogSTJDMiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNF9JMkMyX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDRfSTJDMl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDQ6IEkyQzIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNF9TQzBfUG9zICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDQ6IFNDMCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDRfU0MwX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ0X1NDMF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ0OiBTQzAgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDRfU0MxX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ0OiBTQzEgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ0X1NDMV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNF9TQzFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNDogU0MxIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ0X1NDMl9Qb3MgICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNDogU0MyIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNF9TQzJfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDRfU0MyX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDQ6IFNDMiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNV9DQU4wX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDU6IENBTjAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDVfQ0FOMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ1X0NBTjBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ1OiBDQU4wIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDVfUUVJMF9Qb3MgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ1OiBRRUkwIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ1X1FFSTBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNV9RRUkwX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNTogUUVJMCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ1X1FFSTFfUG9zICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNTogUUVJMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNV9RRUkxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDVfUUVJMV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDU6IFFFSTEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNV9FQ0FQMF9Qb3MgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDU6IEVDQVAwIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDVfRUNBUDBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ1X0VDQVAwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ1OiBFQ0FQMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDVfRUNBUDFfUG9zICAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ1OiBFQ0FQMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ1X0VDQVAxX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNV9FQ0FQMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNTogRUNBUDEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ1X1RSTkdfUG9zICAgICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNTogVFJORyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNV9UUk5HX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDVfVFJOR19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDU6IFRSTkcgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUE5TU0VUNl9VU0JEX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDY6IFVTQkQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1BOU1NFVDZfVVNCRF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9QTlNTRVQ2X1VTQkRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ2OiBVU0JEIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BOU1NFVDZfVVNDSTBfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQTlNTRVQ2OiBVU0NJMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9QTlNTRVQ2X1VTQ0kwX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfUE5TU0VUNl9VU0NJMF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNjogVVNDSTAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QTlNTRVQ2X1VTQ0kxX1BvcyAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UE5TU0VUNjogVVNDSTEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfUE5TU0VUNl9VU0NJMV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1BOU1NFVDZfVVNDSTFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBOU1NFVDY6IFVTQ0kxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfSU9OU1NFVF9QQV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBBIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0lPTlNTRVRfUEFfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9JT05TU0VUX1BBX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQQSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0lPTlNTRVRfUEJfUG9zICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQQiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDVV9JT05TU0VUX1BCX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfSU9OU1NFVF9QQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9JT05TU0VUX1BDX1BvcyAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfSU9OU1NFVF9QQ19Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX0lPTlNTRVRfUENfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBDIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfSU9OU1NFVF9QRF9Qb3MgICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBEIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0lPTlNTRVRfUERfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9JT05TU0VUX1BEX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQRCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0lPTlNTRVRfUEVfUG9zICAgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQRSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDVV9JT05TU0VUX1BFX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfSU9OU1NFVF9QRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEUgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9JT05TU0VUX1BGX1BvcyAgICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEYgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTQ1VfSU9OU1NFVF9QRl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX0lPTlNTRVRfUEZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBGIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfSU9OU1NFVF9QR19Qb3MgICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OklPTlNTRVQ6IFBHIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0lPTlNTRVRfUEdfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9JT05TU0VUX1BHX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQRyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0lPTlNTRVRfUEhfUG9zICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpJT05TU0VUOiBQSCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNDVV9JT05TU0VUX1BIX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfSU9OU1NFVF9QSF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6SU9OU1NFVDogUEggTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TUkFNTlNTRVRfU0VDbl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1JBTU5TU0VUOiBTRUNuIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfU1JBTU5TU0VUX1NFQ25fTXNrICAgICAgICAgICAoMHhmZmZ1bCA8PCBTQ1VfU1JBTU5TU0VUX1NFQ25fUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNSQU1OU1NFVDogU0VDbiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfRk5TQUREUl9GTlNBRERSX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkZOU0FERFI6IEZOU0FERFIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX0ZOU0FERFJfRk5TQUREUl9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfRk5TQUREUl9GTlNBRERSX1BvcykgICAgICAgICAvKiE8IFNDVV9UOjpGTlNBRERSOiBGTlNBRERSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fQVBCMElFTl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBBUEIwSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX0FQQjBJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9BUEIwSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogQVBCMElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX0FQQjFJRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogQVBCMUlFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9BUEIxSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fQVBCMUlFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IEFQQjFJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9HUElPSUVOX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IEdQSU9JRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fR1BJT0lFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX0dQSU9JRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBHUElPSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fRUJJSUVOX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBFQklJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX0VCSUlFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9FQklJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogRUJJSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX1VTQkhJRU5fUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogVVNCSElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9VU0JISUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fVVNCSElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFVTQkhJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9DUkNJRU5fUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IENSQ0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fQ1JDSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX0NSQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBDUkNJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fU0RIMElFTl9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBTREgwSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX1NESDBJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9TREgwSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogU0RIMElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX1BETUEwSUVOX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogUERNQTBJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9QRE1BMElFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fUERNQTBJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFBETUEwSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9QRE1BMUlFTl9Qb3MgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFBETUExSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fUERNQTFJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX1BETUExSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBQRE1BMUlFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fU1JBTTBJRU5fUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBTUkFNMElFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX1NSQU0wSUVOX01zayAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9TUkFNMElFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogU1JBTTBJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX1NSQU0xSUVOX1BvcyAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogU1JBTTFJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9TUkFNMUlFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fU1JBTTFJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFNSQU0xSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9GTUNJRU5fUG9zICAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IEZNQ0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fRk1DSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX0ZNQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBGTUNJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fRkxBU0hJRU5fUG9zICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBGTEFTSElFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX0ZMQVNISUVOX01zayAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9GTEFTSElFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogRkxBU0hJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklPSUVOX1NDVUlFTl9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogU0NVSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJT0lFTl9TQ1VJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU9JRU5fU0NVSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFNDVUlFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJT0lFTl9TWVNJRU5fUG9zICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU9JRU46IFNZU0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU9JRU5fU1lTSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklPSUVOX1NZU0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBTWVNJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU9JRU5fQ1JQVElFTl9Qb3MgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklPSUVOOiBDUlBUSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9TVklPSUVOX0NSUFRJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJT0lFTl9DUlBUSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJT0lFTjogQ1JQVElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19BUEIwSUZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IEFQQjBJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfQVBCMElGX01zayAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX0FQQjBJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBBUEIwSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfQVBCMUlGX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBBUEIxSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX0FQQjFJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19BUEIxSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogQVBCMUlGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX0dQSU9JRl9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogR1BJT0lGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19HUElPSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfR1BJT0lGX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IEdQSU9JRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19FQklJRl9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IEVCSUlGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfRUJJSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX0VCSUlGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBFQklJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfVVNCSElGX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBVU0JISUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1VTQkhJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19VU0JISUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogVVNCSElGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX0NSQ0lGX1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogQ1JDSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19DUkNJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfQ1JDSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IENSQ0lGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19TREgwSUZfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFNESDBJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfU0RIMElGX01zayAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX1NESDBJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBTREgwSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfUERNQTBJRl9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBQRE1BMElGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1BETUEwSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19QRE1BMElGX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogUERNQTBJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1BETUExSUZfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogUERNQTFJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19QRE1BMUlGX01zayAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfUERNQTFJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFBETUExSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19TUkFNMElGX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFNSQU0wSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfU1JBTTBJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX1NSQU0wSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBTUkFNMElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfU1JBTTFJRl9Qb3MgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBTUkFNMUlGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1NSQU0xSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19TUkFNMUlGX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogU1JBTTFJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX0ZNQ0lGX1BvcyAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogRk1DSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19GTUNJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfRk1DSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IEZNQ0lGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19GTEFTSElGX1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IEZMQVNISUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfRkxBU0hJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX0ZMQVNISUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBGTEFTSElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfU0NVSUZfUG9zICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBTQ1VJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1NDVUlGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9TVklOVFNUU19TQ1VJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogU0NVSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NWSU5UU1RTX1NZU0lGX1BvcyAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTVklOVFNUUzogU1lTSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TVklOVFNUU19TWVNJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfU1ZJTlRTVFNfU1lTSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IFNZU0lGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TVklOVFNUU19DUlBUSUZfUG9zICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1ZJTlRTVFM6IENSUFRJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfU1ZJTlRTVFNfQ1JQVElGX01zayAgICAgICAgICAoMHgxdWwgPDwgU0NVX1NWSU5UU1RTX0NSUFRJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNWSU5UU1RTOiBDUlBUSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfQVBCMFZTUkNfTUFTVEVSX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkFQQjBWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX0FQQjBWU1JDX01BU1RFUl9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNDVV9BUEIwVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpBUEIwVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0FQQjBWQV9WSU9BRERSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpBUEIwVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9BUEIwVkFfVklPQUREUl9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX0FQQjBWQV9WSU9BRERSX1BvcykgICAgICAgICAgLyohPCBTQ1VfVDo6QVBCMFZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9BUEIxVlNSQ19NQVNURVJfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6QVBCMVZTUkM6IE1BU1RFUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfQVBCMVZTUkNfTUFTVEVSX01zayAgICAgICAgICAoMHhmdWwgPDwgU0NVX0FQQjFWU1JDX01BU1RFUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkFQQjFWU1JDOiBNQVNURVIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfQVBCMVZBX1ZJT0FERFJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkFQQjFWQTogVklPQUREUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0FQQjFWQV9WSU9BRERSX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfQVBCMVZBX1ZJT0FERFJfUG9zKSAgICAgICAgICAvKiE8IFNDVV9UOjpBUEIxVkE6IFZJT0FERFIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0dQSU9WU1JDX01BU1RFUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpHUElPVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9HUElPVlNSQ19NQVNURVJfTXNrICAgICAgICAgICgweGZ1bCA8PCBTQ1VfR1BJT1ZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6R1BJT1ZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9HUElPVkFfVklPQUREUl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6R1BJT1ZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfR1BJT1ZBX1ZJT0FERFJfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9HUElPVkFfVklPQUREUl9Qb3MpICAgICAgICAgIC8qITwgU0NVX1Q6OkdQSU9WQTogVklPQUREUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfRUJJVlNSQ19NQVNURVJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkVCSVZTUkM6IE1BU1RFUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX0VCSVZTUkNfTUFTVEVSX01zayAgICAgICAgICAgKDB4ZnVsIDw8IFNDVV9FQklWU1JDX01BU1RFUl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpFQklWU1JDOiBNQVNURVIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0VCSVZBX1ZJT0FERFJfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpFQklWQTogVklPQUREUiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9FQklWQV9WSU9BRERSX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX0VCSVZBX1ZJT0FERFJfUG9zKSAgICAgICAgICAgLyohPCBTQ1VfVDo6RUJJVkE6IFZJT0FERFIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9VU0JIVlNSQ19NQVNURVJfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6VVNCSFZTUkM6IE1BU1RFUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfVVNCSFZTUkNfTUFTVEVSX01zayAgICAgICAgICAoMHhmdWwgPDwgU0NVX1VTQkhWU1JDX01BU1RFUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlVTQkhWU1JDOiBNQVNURVIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfVVNCSFZBX1ZJT0FERFJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlVTQkhWQTogVklPQUREUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1VTQkhWQV9WSU9BRERSX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfVVNCSFZBX1ZJT0FERFJfUG9zKSAgICAgICAgICAvKiE8IFNDVV9UOjpVU0JIVkE6IFZJT0FERFIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0NSQ1ZTUkNfTUFTVEVSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpDUkNWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9DUkNWU1JDX01BU1RFUl9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBTQ1VfQ1JDVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6Q1JDVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9DUkNWQV9WSU9BRERSX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6Q1JDVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfQ1JDVkFfVklPQUREUl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9DUkNWQV9WSU9BRERSX1BvcykgICAgICAgICAgIC8qITwgU0NVX1Q6OkNSQ1ZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU0QwVlNSQ19NQVNURVJfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNEMFZTUkM6IE1BU1RFUiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NEMFZTUkNfTUFTVEVSX01zayAgICAgICAgICAgKDB4ZnVsIDw8IFNDVV9TRDBWU1JDX01BU1RFUl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTRDBWU1JDOiBNQVNURVIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NEMFZBX1ZJT0FERFJfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTRDBWQTogVklPQUREUiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9TRDBWQV9WSU9BRERSX01zayAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX1NEMFZBX1ZJT0FERFJfUG9zKSAgICAgICAgICAgLyohPCBTQ1VfVDo6U0QwVkE6IFZJT0FERFIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QRE1BMFZTUkNfTUFTVEVSX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UERNQTBWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfUERNQTBWU1JDX01BU1RFUl9Nc2sgICAgICAgICAoMHhmdWwgPDwgU0NVX1BETUEwVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBETUEwVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfUERNQTBWQV9WSU9BRERSX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlBETUEwVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1BETUEwVkFfVklPQUREUl9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfUERNQTBWQV9WSU9BRERSX1BvcykgICAgICAgICAvKiE8IFNDVV9UOjpQRE1BMFZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1BETUExVlNSQ19NQVNURVJfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpQRE1BMVZTUkM6IE1BU1RFUiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNDVV9QRE1BMVZTUkNfTUFTVEVSX01zayAgICAgICAgICgweGZ1bCA8PCBTQ1VfUERNQTFWU1JDX01BU1RFUl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UERNQTFWU1JDOiBNQVNURVIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9QRE1BMVZBX1ZJT0FERFJfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6UERNQTFWQTogVklPQUREUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfUERNQTFWQV9WSU9BRERSX01zayAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9QRE1BMVZBX1ZJT0FERFJfUG9zKSAgICAgICAgIC8qITwgU0NVX1Q6OlBETUExVkE6IFZJT0FERFIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1JBTTBWU1JDX01BU1RFUl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNSQU0wVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX1NSQU0wVlNSQ19NQVNURVJfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNDVV9TUkFNMFZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTUkFNMFZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NSQU0wVkFfVklPQUREUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTUkFNMFZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9TUkFNMFZBX1ZJT0FERFJfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX1NSQU0wVkFfVklPQUREUl9Qb3MpICAgICAgICAgLyohPCBTQ1VfVDo6U1JBTTBWQTogVklPQUREUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TUkFNMVZTUkNfTUFTVEVSX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1JBTTFWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTQ1VfU1JBTTFWU1JDX01BU1RFUl9Nc2sgICAgICAgICAoMHhmdWwgPDwgU0NVX1NSQU0xVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNSQU0xVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU1JBTTFWQV9WSU9BRERSX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNSQU0xVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX1NSQU0xVkFfVklPQUREUl9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfU1JBTTFWQV9WSU9BRERSX1BvcykgICAgICAgICAvKiE8IFNDVV9UOjpTUkFNMVZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0ZNQ1ZTUkNfTUFTVEVSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpGTUNWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9GTUNWU1JDX01BU1RFUl9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBTQ1VfRk1DVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6Rk1DVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9GTUNWQV9WSU9BRERSX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6Rk1DVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfRk1DVkFfVklPQUREUl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9GTUNWQV9WSU9BRERSX1BvcykgICAgICAgICAgIC8qITwgU0NVX1Q6OkZNQ1ZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfRkxBU0hWU1JDX01BU1RFUl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkZMQVNIVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0NVX0ZMQVNIVlNSQ19NQVNURVJfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNDVV9GTEFTSFZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpGTEFTSFZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0ZMQVNIVkFfVklPQUREUl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpGTEFTSFZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNDVV9GTEFTSFZBX1ZJT0FERFJfTXNrICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX0ZMQVNIVkFfVklPQUREUl9Qb3MpICAgICAgICAgLyohPCBTQ1VfVDo6RkxBU0hWQTogVklPQUREUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TQ1VWU1JDX01BU1RFUl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U0NVVlNSQzogTUFTVEVSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfU0NVVlNSQ19NQVNURVJfTXNrICAgICAgICAgICAoMHhmdWwgPDwgU0NVX1NDVVZTUkNfTUFTVEVSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNDVVZTUkM6IE1BU1RFUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfU0NVVkFfVklPQUREUl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OlNDVVZBOiBWSU9BRERSIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX1NDVVZBX1ZJT0FERFJfTXNrICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTQ1VfU0NVVkFfVklPQUREUl9Qb3MpICAgICAgICAgICAvKiE8IFNDVV9UOjpTQ1VWQTogVklPQUREUiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX1NZU1ZTUkNfTUFTVEVSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpTWVNWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9TWVNWU1JDX01BU1RFUl9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBTQ1VfU1lTVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1lTVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9TWVNWQV9WSU9BRERSX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6U1lTVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfU1lTVkFfVklPQUREUl9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNDVV9TWVNWQV9WSU9BRERSX1BvcykgICAgICAgICAgIC8qITwgU0NVX1Q6OlNZU1ZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfQ1JQVFZTUkNfTUFTVEVSX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6OkNSUFRWU1JDOiBNQVNURVIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0NVX0NSUFRWU1JDX01BU1RFUl9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNDVV9DUlBUVlNSQ19NQVNURVJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpDUlBUVlNSQzogTUFTVEVSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX0NSUFRWQV9WSU9BRERSX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpDUlBUVkE6IFZJT0FERFIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9DUlBUVkFfVklPQUREUl9Nc2sgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU0NVX0NSUFRWQV9WSU9BRERSX1BvcykgICAgICAgICAgLyohPCBTQ1VfVDo6Q1JQVFZBOiBWSU9BRERSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9OU01DVExfUFJFU0NBTEVfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNQ1RMOiBQUkVTQ0FMRSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTQ1VfTlNNQ1RMX1BSRVNDQUxFX01zayAgICAgICAgICAoMHhmZnVsIDw8IFNDVV9OU01DVExfUFJFU0NBTEVfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUNUTDogUFJFU0NBTEUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfTlNNQ1RMX05TTUlFTl9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUNUTDogTlNNSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX05TTUNUTF9OU01JRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9OU01DVExfTlNNSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01DVEw6IE5TTUlFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX05TTUNUTF9BVVRPUkxEX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01DVEw6IEFVVE9STEQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNDVV9OU01DVExfQVVUT1JMRF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTQ1VfTlNNQ1RMX0FVVE9STERfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNQ1RMOiBBVVRPUkxEIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9OU01DVExfVE1STU9EX1BvcyAgICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNQ1RMOiBUTVJNT0QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTQ1VfTlNNQ1RMX1RNUk1PRF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX05TTUNUTF9UTVJNT0RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUNUTDogVE1STU9EIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfTlNNQ1RMX0lETEVPTl9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUNUTDogSURMRU9OIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX05TTUNUTF9JRExFT05fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNDVV9OU01DVExfSURMRU9OX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01DVEw6IElETEVPTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX05TTUNUTF9EQkdPTl9Qb3MgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01DVEw6IERCR09OIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNDVV9OU01DVExfREJHT05fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfTlNNQ1RMX0RCR09OX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNQ1RMOiBEQkdPTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9OU01MT0FEX1JFTE9BRF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNTE9BRDogUkVMT0FEIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTQ1VfTlNNTE9BRF9SRUxPQURfTXNrICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBTQ1VfTlNNTE9BRF9SRUxPQURfUG9zKSAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTUxPQUQ6IFJFTE9BRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTQ1VfTlNNVkFMX1ZBTFVFX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTVZBTDogVkFMVUUgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0NVX05TTVZBTF9WQUxVRV9Nc2sgICAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgU0NVX05TTVZBTF9WQUxVRV9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01WQUw6IFZBTFVFIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0NVX05TTVNUU19DVVJSTlNfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDVV9UOjpOU01TVFM6IENVUlJOUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNDVV9OU01TVFNfQ1VSUk5TX01zayAgICAgICAgICAgICgweDF1bCA8PCBTQ1VfTlNNU1RTX0NVUlJOU19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNU1RTOiBDVVJSTlMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNDVV9OU01TVFNfTlNNSUZfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ1VfVDo6TlNNU1RTOiBOU01JRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTQ1VfTlNNU1RTX05TTUlGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0NVX05TTVNUU19OU01JRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NVX1Q6Ok5TTVNUUzogTlNNSUYgTWFzayAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBTQ1VfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFNDVSByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19TQ1VfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3NkaF9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zZGhfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5Y2NlMwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zZGhfcmVnLmgKQEAgLTAsMCArMSw1MjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzZGhfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFNESCByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TREhfUkVHX0hfXworI2RlZmluZSBfX1NESF9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNEIENhcmQgSG9zdCBJbnRlcmZhY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBTREggU0QgQ2FyZCBIb3N0IEludGVyZmFjZShTREgpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFNESCBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisgICAgLyoqCisgICAgICogQHZhciBTREhfVDo6RkIKKyAgICAgKiBPZmZzZXQ6IDB4MDB+MHg3QyAgU2hhcmVkIEJ1ZmZlciAoRklGTykKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6MF0gIHxCVUZGRVIgICAgfFNoYXJlZCBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCdWZmZXIgZm9yIERNQSB0cmFuc2ZlcgorICAgICAqIEB2YXIgU0RIX1Q6OkRNQUNUTAorICAgICAqIE9mZnNldDogMHg0MDAgIERNQSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxETUFFTiAgICAgfERNQSBFbmdpbmUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIGNsZWFyZWQsIERNQSB3aWxsIGlnbm9yZSBhbGwgcmVxdWVzdHMgZnJvbSBTRCBob3N0IGFuZCBmb3JjZSBidXMgbWFzdGVyIGludG8gSURMRSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRE1BIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBETUEgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiB0YXJnZXQgYWJvcnQgaXMgb2NjdXJyZWQsIERNQUVOIHdpbGwgYmUgY2xlYXJlZC4KKyAgICAgKiB8WzFdICAgICB8RE1BUlNUICAgIHxTb2Z0d2FyZSBFbmdpbmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIGFuZCBwb2ludGVycworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb250ZW50cyBvZiBjb250cm9sIHJlZ2lzdGVyIHdpbGwgbm90IGJlIGNsZWFyZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGF1dG8gYmUgY2xlYXJlZCBhZnRlciBmZXcgY2xvY2sgY3ljbGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBzb2Z0d2FyZSByZXNldCBETUEgcmVsYXRlZCByZWdpc3RlcnMuCisgICAgICogfFszXSAgICAgfFNHRU4gICAgICB8U2NhdHRlci1nYXRoZXIgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTY2F0dGVyLWdhdGhlciBmdW5jdGlvbiBEaXNhYmxlZCAoRE1BIHdpbGwgdHJlYXQgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgaW4gRE1BU0FSIGFzIHN0YXJ0aW5nIHBvaW50ZXIgb2YgYSBzaW5nbGUgYmxvY2sgbWVtb3J5KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2NhdHRlci1nYXRoZXIgZnVuY3Rpb24gRW5hYmxlZCAoRE1BIHdpbGwgdHJlYXQgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgaW4gRE1BU0FSIGFzIGEgc3RhcnRpbmcgYWRkcmVzcyBvZiBQaHlzaWNhbCBBZGRyZXNzIERlc2NyaXB0b3IgKFBBRCkgdGFibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZm9ybWF0IG9mIHRoZXNlIFBhZHMnIHdpbGwgYmUgZGVzY3JpYmVkIGxhdGVyKS4KKyAgICAgKiB8WzldICAgICB8RE1BQlVTWSAgIHxETUEgVHJhbnNmZXIgSXMgaW4gUHJvZ3Jlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgaWYgU0QgSG9zdCBpcyBncmFudGVkIGFuZCBkb2luZyBETUEgdHJhbnNmZXIgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBETUEgdHJhbnNmZXIgaXMgbm90IGluIHByb2dyZXNzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBETUEgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MuCisgICAgICogQHZhciBTREhfVDo6RE1BU0EKKyAgICAgKiBPZmZzZXQ6IDB4NDA4ICBETUEgVHJhbnNmZXIgU3RhcnRpbmcgQWRkcmVzcyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfE9SREVSICAgICB8RGV0ZXJtaW5lZCB0byB0aGUgUEFEIFRhYmxlIEZldGNoaW5nIElzIGluIE9yZGVyIG9yIE91dCBvZiBPcmRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQQUQgdGFibGUgaXMgZmV0Y2hlZCBpbiBvcmRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEFEIHRhYmxlIGlzIGZldGNoZWQgb3V0IG9mIG9yZGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IHRoZSBiaXQwIGlzIHZhbGlkIGluIHNjYXR0ZXItZ2F0aGVyIG1vZGUgd2hlbiBTR0VOID0gMS4KKyAgICAgKiB8WzMxOjFdICB8RE1BU0EgICAgIHxETUEgVHJhbnNmZXIgU3RhcnRpbmcgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgcGFkcyAwIGFzIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbmRpY2F0ZXMgYSAzMi1iaXQgc3RhcnRpbmcgYWRkcmVzcyBvZiBzeXN0ZW0gbWVtb3J5IChTUkFNKSBmb3IgRE1BIHRvIHJldHJpZXZlIG9yIGZpbGwgaW4gZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBETUEgaXMgbm90IGluIG5vcm1hbCBtb2RlLCB0aGlzIGZpZWxkIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydGluZyBhZGRyZXNzIG9mIFBoeXNpY2FsIEFkZHJlc3MgRGVzY3JpcHRvciAoUEFEKSB0YWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBTdGFydGluZyBhZGRyZXNzIG9mIHRoZSBTUkFNIG11c3QgYmUgd29yZCBhbGlnbmVkLCBmb3IgZXhhbXBsZSwgMHgwMDAwXzAwMDAsIDB4MDAwMF8wMDA0LgorICAgICAqIEB2YXIgU0RIX1Q6OkRNQUJDTlQKKyAgICAgKiBPZmZzZXQ6IDB4NDBDICBETUEgVHJhbnNmZXIgQnl0ZSBDb3VudCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyNTowXSAgfEJDTlQgICAgICB8RE1BIFRyYW5zZmVyIEJ5dGUgQ291bnQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgcmVtYWluZWQgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyB2YWxpZCBvbmx5IHdoZW4gRE1BIGlzIGJ1c3k7IG90aGVyd2lzZSwgaXQgaXMgMC4KKyAgICAgKiBAdmFyIFNESF9UOjpETUFJTlRFTgorICAgICAqIE9mZnNldDogMHg0MTAgIERNQSBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBQk9SVElFTiAgfERNQSBSZWFkL1dyaXRlIFRhcmdldCBBYm9ydCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUYXJnZXQgYWJvcnQgaW50ZXJydXB0IGdlbmVyYXRpb24gRGlzYWJsZWQgZHVyaW5nIERNQSB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGFyZ2V0IGFib3J0IGludGVycnVwdCBnZW5lcmF0aW9uIEVuYWJsZWQgZHVyaW5nIERNQSB0cmFuc2Zlci4KKyAgICAgKiB8WzFdICAgICB8V0VPVElFTiAgIHxXcm9uZyBFT1QgRW5jb3VudGVyZWQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gRGlzYWJsZWQgd2hlbiB3cm9uZyBFT1QgaXMgZW5jb3VudGVyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIEVuYWJsZWQgd2hlbiB3cm9uZyBFT1QgaXMgZW5jb3VudGVyZWQuCisgICAgICogQHZhciBTREhfVDo6RE1BSU5UU1RTCisgICAgICogT2Zmc2V0OiAweDQxNCAgRE1BIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxBQk9SVElGICAgfERNQSBSZWFkL1dyaXRlIFRhcmdldCBBYm9ydCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBidXMgRVJST1IgcmVzcG9uc2UgcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1cyBFUlJPUiByZXNwb25zZSByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LCBidXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAnMScgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFdoZW4gRE1BJ3MgYnVzIG1hc3RlciByZWNlaXZlZCBFUlJPUiByZXNwb25zZSwgaXQgbWVhbnMgdGhhdCB0YXJnZXQgYWJvcnQgaXMgaGFwcGVuZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxETUEgd2lsbCBzdG9wIHRyYW5zZmVyIGFuZCByZXNwb25kIHRoaXMgZXZlbnQgYW5kIHRoZW4gZ28gdG8gSURMRSBzdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGFyZ2V0IGFib3J0IG9jY3VycmVkIG9yIFdFT1RJRiBpcyBzZXQsIHNvZnR3YXJlIG11c3QgcmVzZXQgRE1BIGFuZCBTRCBob3N0LCBhbmQgdGhlbiB0cmFuc2ZlciB0aG9zZSBkYXRhIGFnYWluLgorICAgICAqIHxbMV0gICAgIHxXRU9USUYgICAgfFdyb25nIEVPVCBFbmNvdW50ZXJlZCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gRE1BIFNjYXR0ZXItR2F0aGVyIGZ1bmN0aW9uIGlzIGVuYWJsZWQsIGFuZCBFT1Qgb2YgdGhlIGRlc2NyaXB0b3IgaXMgZW5jb3VudGVyZWQgYmVmb3JlIERNQSB0cmFuc2ZlciBmaW5pc2hlZCAodGhhdCBtZWFucyB0aGUgdG90YWwgc2VjdG9yIGNvdW50IG9mIGFsbCBQQUQgaXMgbGVzcyB0aGFuIHRoZSBzZWN0b3IgY291bnQgb2YgU0QgaG9zdCksIHRoaXMgYml0IHdpbGwgYmUgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBFT1QgZW5jb3VudGVyZWQgYmVmb3JlIERNQSB0cmFuc2ZlciBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRU9UIGVuY291bnRlcmVkIGJlZm9yZSBETUEgdHJhbnNmZXIgZmluaXNoZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LCBidXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAnMScgdG8gaXQuCisgICAgICogQHZhciBTREhfVDo6R0NUTAorICAgICAqIE9mZnNldDogMHg4MDAgIEdsb2JhbCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxHQ1RMUlNUICAgfFNvZnR3YXJlIEVuZ2luZSBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IFNEIGhvc3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY29udGVudHMgb2YgY29udHJvbCByZWdpc3RlciB3aWxsIG5vdCBiZSBjbGVhcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBhdXRvIGNsZWFyZWQgYWZ0ZXIgcmVzZXQgY29tcGxldGUuCisgICAgICogfFsxXSAgICAgfFNERU4gICAgICB8U2VjdXJlIERpZ2l0YWwgRnVuY3Rpb25hbGl0eSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNEIGZ1bmN0aW9uYWxpdHkgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNEIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4KKyAgICAgKiBAdmFyIFNESF9UOjpHSU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4ODA0ICBHbG9iYWwgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxEVEFJRU4gICAgfERNQSBSRUFEL1dSSVRFIFRhcmdldCBBYm9ydCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBETUEgUkVBRC9XUklURSB0YXJnZXQgYWJvcnQgaW50ZXJydXB0IGdlbmVyYXRpb24gZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERNQSBSRUFEL1dSSVRFIHRhcmdldCBhYm9ydCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBlbmFibGVkLgorICAgICAqIEB2YXIgU0RIX1Q6OkdJTlRTVFMKKyAgICAgKiBPZmZzZXQ6IDB4ODA4ICBHbG9iYWwgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfERUQUlGICAgICB8RE1BIFJFQUQvV1JJVEUgVGFyZ2V0IEFib3J0IEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIERNQSByZWNlaXZlZCBhbiBFUlJPUiByZXNwb25zZSBmcm9tIGludGVybmFsIEFIQiBidXMgZHVyaW5nIERNQSByZWFkL3dyaXRlIG9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gVGFyZ2V0IEFib3J0IGlzIG9jY3VycmVkLCBwbGVhc2UgcmVzZXQgYWxsIGVuZ2luZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYnVzIEVSUk9SIHJlc3BvbnNlIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCdXMgRVJST1IgcmVzcG9uc2UgcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LCBidXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAnMScgdG8gaXQuCisgICAgICogQHZhciBTREhfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDgyMCAgU0QgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q09FTiAgICAgIHxDb21tYW5kIE91dHB1dCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4gKFBsZWFzZSB1c2UgRE1BUlNUIChTREhfQ1RMIFswXSkgdG8gY2xlYXIgdGhpcyBiaXQuKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbmFibGVkLCBTRCBob3N0IHdpbGwgb3V0cHV0IGEgY29tbWFuZCB0byBTRCBjYXJkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSwgc28gZG9uJ3Qgd3JpdGUgMCB0byB0aGlzIGJpdCAodGhlIGNvbnRyb2xsZXIgd2lsbCBiZSBhYm5vcm1hbCkuCisgICAgICogfFsxXSAgICAgfFJJRU4gICAgICB8UmVzcG9uc2UgSW5wdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuIChQbGVhc2UgdXNlIERNQVJTVCAoU0RIX0NUTCBbMF0pIHRvIGNsZWFyIHRoaXMgYml0LikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZCwgU0QgaG9zdCB3aWxsIHdhaXQgdG8gcmVjZWl2ZSBhIHJlc3BvbnNlIGZyb20gU0QgY2FyZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHksIHNvIGRvbid0IHdyaXRlIDAgdG8gdGhpcyBiaXQgKHRoZSBjb250cm9sbGVyIHdpbGwgYmUgYWJub3JtYWwpLgorICAgICAqIHxbMl0gICAgIHxESUVOICAgICAgfERhdGEgSW5wdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuIChQbGVhc2UgdXNlIERNQVJTVCAoU0RIX0NUTCBbMF0pIHRvIGNsZWFyIHRoaXMgYml0LikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZCwgU0QgaG9zdCB3aWxsIHdhaXQgdG8gcmVjZWl2ZSBibG9jayBkYXRhIGFuZCB0aGUgQ1JDMTYgdmFsdWUgZnJvbSBTRCBjYXJkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSwgc28gZG9uJ3Qgd3JpdGUgMCB0byB0aGlzIGJpdCAodGhlIGNvbnRyb2xsZXIgd2lsbCBiZSBhYm5vcm1hbCkuCisgICAgICogfFszXSAgICAgfERPRU4gICAgICB8RGF0YSBPdXRwdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuIChQbGVhc2UgdXNlIERNQVJTVCAoU0RIX0NUTCBbMF0pIHRvIGNsZWFyIHRoaXMgYml0LikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZCwgU0QgaG9zdCB3aWxsIHRyYW5zZmVyIGJsb2NrIGRhdGEgYW5kIHRoZSBDUkMxNiB2YWx1ZSB0byBTRCBjYXJkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseSwgc28gZG9uJ3Qgd3JpdGUgMCB0byB0aGlzIGJpdCAodGhlIGNvbnRyb2xsZXIgd2lsbCBiZSBhYm5vcm1hbCkuCisgICAgICogfFs0XSAgICAgfFIyRU4gICAgICB8UmVzcG9uc2UgUjIgSW5wdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuIChQbGVhc2UgdXNlIERNQVJTVCAoU0RIX0NUTCBbMF0pIHRvIGNsZWFyIHRoaXMgYml0LikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZCwgU0QgaG9zdCB3aWxsIHdhaXQgdG8gcmVjZWl2ZSBhIHJlc3BvbnNlIFIyIGZyb20gU0QgY2FyZCBhbmQgc3RvcmUgdGhlIHJlc3BvbnNlIGRhdGEgaW50byBETUMncyBmbGFzaCBidWZmZXIgKGV4Y2x1ZGUgQ1JDNykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBvcGVyYXRpb24gaXMgZmluaXNoZWQsIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5LCBzbyBkb24ndCB3cml0ZSAwIHRvIHRoaXMgYml0ICh0aGUgY29udHJvbGxlciB3aWxsIGJlIGFibm9ybWFsKS4KKyAgICAgKiB8WzVdICAgICB8Q0xLNzRPRU4gIHxJbml0aWFsIDc0IENsb2NrIEN5Y2xlcyBPdXRwdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuIChQbGVhc2UgdXNlIERNQVJTVCAoU0RIX0NUTCBbMF0pIHRvIGNsZWFyIHRoaXMgYml0LikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZCwgU0QgaG9zdCB3aWxsIG91dHB1dCA3NCBjbG9jayBjeWNsZXMgdG8gU0QgY2FyZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHksIHNvIGRvbid0IHdyaXRlIDAgdG8gdGhpcyBiaXQgKHRoZSBjb250cm9sbGVyIHdpbGwgYmUgYWJub3JtYWwpLgorICAgICAqIHxbNl0gICAgIHxDTEs4T0VOICAgfEdlbmVyYXRpbmcgOCBDbG9jayBDeWNsZXMgT3V0cHV0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LiAoUGxlYXNlIHVzZSBETUFSU1QgKFNESF9DVEwgWzBdKSB0byBjbGVhciB0aGlzIGJpdC4pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZWQsIFNEIGhvc3Qgd2lsbCBvdXRwdXQgOCBjbG9jayBjeWNsZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBvcGVyYXRpb24gaXMgZmluaXNoZWQsIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5LCBzbyBkb24ndCB3cml0ZSAwIHRvIHRoaXMgYml0ICh0aGUgY29udHJvbGxlciB3aWxsIGJlIGFibm9ybWFsKS4KKyAgICAgKiB8WzddICAgICB8Q0xLS0VFUDAgIHxTRCBDbG9jayBFbmFibGUgQ29udHJvbCBmb3IgUG9ydCAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNEIGhvc3QgZGVjaWRlZCB3aGVuIHRvIG91dHB1dCBjbG9jayBhbmQgd2hlbiB0byBkaXNhYmxlIGNsb2NrIG91dHB1dCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTRCBjbG9jayBhbHdheXMga2VlcHMgZnJlZSBydW5uaW5nLgorICAgICAqIHxbMTM6OF0gIHxDTURDT0RFICAgfFNEIENvbW1hbmQgQ29kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIFNEIGNvbW1hbmQgY29kZSAoMHgwMCB+IDB4M0YpLgorICAgICAqIHxbMTRdICAgIHxDVExSU1QgICAgfFNvZnR3YXJlIEVuZ2luZSBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIGFuZCBjb3VudGVycworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBjb250ZW50cyBvZiBjb250cm9sIHJlZ2lzdGVyIHdpbGwgbm90IGJlIGNsZWFyZWQgKGJ1dCBSSUVOLCBESUVOLCBET0VOIGFuZCBSMkVOIHdpbGwgYmUgY2xlYXJlZCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGF1dG8gY2xlYXJlZCBhZnRlciBmZXcgY2xvY2sgY3ljbGVzLgorICAgICAqIHxbMTVdICAgIHxEQlcgICAgICAgfFNEIERhdGEgQnVzIFdpZHRoIChmb3IgMS1iaXQgLyA0LWJpdCBTZWxlY3Rpb24pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgYnVzIHdpZHRoIGlzIDEtYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEYXRhIGJ1cyB3aWR0aCBpcyA0LWJpdC4KKyAgICAgKiB8WzIzOjE2XSB8QkxLQ05UICAgIHxCbG9jayBDb3VudHMgdG8gQmUgVHJhbnNmZXJyZWQgb3IgUmVjZWl2ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBibG9jayBjb3VudHMgZm9yIGRhdGEtaW4gYW5kIGRhdGEtb3V0IHRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFJFQURfTVVMVElQTEVfQkxPQ0sgYW5kIFdSSVRFX01VTFRJUExFX0JMT0NLIGNvbW1hbmQsIHNvZnR3YXJlIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBhY2NlbGVyYXRlIGRhdGEgdHJhbnNmZXIgYW5kIGltcHJvdmUgcGVyZm9ybWFuY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEb24ndCBmaWxsIDB4MCB0byB0aGlzIGZpZWxkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEZvciBSRUFEX01VTFRJUExFX0JMT0NLIGFuZCBXUklURV9NVUxUSVBMRV9CTE9DSyBjb21tYW5kLCB0aGUgYWN0dWFsIHRvdGFsIGxlbmd0aCBpcyBCTEtDTlQgKiAoQkxLTEVOICsxKS4KKyAgICAgKiB8WzI3OjI0XSB8U0ROV1IgICAgIHxOV1IgUGFyYW1ldGVyIGZvciBCbG9jayBXcml0ZSBPcGVyYXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHZhbHVlIGluZGljYXRlcyB0aGUgTldSIHBhcmFtZXRlciBmb3IgZGF0YSBibG9jayB3cml0ZSBvcGVyYXRpb24gaW4gU0QgY2xvY2sgY291bnRzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdHVhbCBjbG9jayBjeWNsZSB3aWxsIGJlIFNETldSKzEuCisgICAgICogQHZhciBTREhfVDo6Q01EQVJHCisgICAgICogT2Zmc2V0OiAweDgyNCAgU0QgQ29tbWFuZCBBcmd1bWVudCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfEFSR1VNRU5UICB8U0QgQ29tbWFuZCBBcmd1bWVudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgYSAzMi1iaXQgdmFsdWUgc3BlY2lmaWVzIHRoZSBhcmd1bWVudCBvZiBTRCBjb21tYW5kIGZyb20gaG9zdCBjb250cm9sbGVyIHRvIFNEIGNhcmQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCZWZvcmUgdHJpZ2dlciBDT0VOIChTREhfQ1RMIFswXSksIHNvZnR3YXJlIHNob3VsZCBmaWxsIGFyZ3VtZW50IGluIHRoaXMgZmllbGQuCisgICAgICogQHZhciBTREhfVDo6SU5URU4KKyAgICAgKiBPZmZzZXQ6IDB4ODI4ICBTRCBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJMS0RJRU4gICB8QmxvY2sgVHJhbnNmZXIgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTRCBob3N0IHdpbGwgbm90IGdlbmVyYXRlIGludGVycnVwdCB3aGVuIGRhdGEtaW4gKG91dCkgdHJhbnNmZXIgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0QgaG9zdCB3aWxsIGdlbmVyYXRlIGludGVycnVwdCB3aGVuIGRhdGEtaW4gKG91dCkgdHJhbnNmZXIgZG9uZS4KKyAgICAgKiB8WzFdICAgICB8Q1JDSUVOICAgIHxDUkM3LCBDUkMxNiBhbmQgQ1JDIFN0YXR1cyBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTRCBob3N0IHdpbGwgbm90IGdlbmVyYXRlIGludGVycnVwdCB3aGVuIENSQzcsIENSQzE2IGFuZCBDUkMgc3RhdHVzIGlzIGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTRCBob3N0IHdpbGwgZ2VuZXJhdGUgaW50ZXJydXB0IHdoZW4gQ1JDNywgQ1JDMTYgYW5kIENSQyBzdGF0dXMgaXMgZXJyb3IuCisgICAgICogfFs4XSAgICAgfENESUVOMCAgICB8U0QwIENhcmQgRGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RW5hYmxlL0Rpc2FibGUgaW50ZXJydXB0cyBnZW5lcmF0aW9uIG9mIFNEIGNvbnRyb2xsZXIgd2hlbiBjYXJkIDAgaXMgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0QgY2FyZCBkZXRlY3Rpb24gaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTRCBjYXJkIGRldGVjdGlvbiBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzEyXSAgICB8UlRPSUVOICAgIHxSZXNwb25zZSBUaW1lLW91dCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVuYWJsZS9EaXNhYmxlIGludGVycnVwdHMgZ2VuZXJhdGlvbiBvZiBTRCBjb250cm9sbGVyIHdoZW4gcmVjZWl2aW5nIHJlc3BvbnNlIG9yIFIyIHRpbWUtb3V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGltZS1vdXQgdmFsdWUgaXMgc3BlY2lmaWVkIGF0IFRPVVQgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlc3BvbnNlIHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzcG9uc2UgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxM10gICAgfERJVE9JRU4gICB8RGF0YSBJbnB1dCBUaW1lLW91dCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVuYWJsZS9EaXNhYmxlIGludGVycnVwdHMgZ2VuZXJhdGlvbiBvZiBTRCBjb250cm9sbGVyIHdoZW4gZGF0YSBpbnB1dCB0aW1lLW91dAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRpbWUtb3V0IHZhbHVlIGlzIHNwZWNpZmllZCBhdCBUT1VUIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIGlucHV0IHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSBpbnB1dCB0aW1lLW91dCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE0XSAgICB8V0tJRU4gICAgIHxXYWtlLXVwIFNpZ25hbCBHZW5lcmF0aW5nIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFbmFibGUvRGlzYWJsZSB3YWtlLXVwIHNpZ25hbCBnZW5lcmF0aW5nIG9mIFNEIGhvc3Qgd2hlbiBjdXJyZW50IHVzaW5nIFNEIGNhcmQgaXNzdWVzIGFuIGludGVycnVwdCAod2FrZS11cCkgdmlhIERBVCBbMV0gdG8gaG9zdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2FrZS11cCBzaWduYWwgZ2VuZXJhdGluZyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2FrZS11cCBzaWduYWwgZ2VuZXJhdGluZyBFbmFibGVkLgorICAgICAqIHxbMzBdICAgIHxDRFNSQzAgICAgfFNEMCBDYXJkIERldGVjdCBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZyb20gU0QwIGNhcmQncyBEQVQzIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIb3N0IG5lZWQgY2xvY2sgdG8gZ290IGRhdGEgb24gcGluIERBVDMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQbGVhc2UgbWFrZSBzdXJlIENMS0tFRVAwIChTREhfQ1RMWzddKSBpcyAxIGluIG9yZGVyIHRvIGdlbmVyYXRlIGZyZWUgcnVubmluZyBjbG9jayBmb3IgREFUMyBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZyb20gR1BJTyBwaW4uCisgICAgICogQHZhciBTREhfVDo6SU5UU1RTCisgICAgICogT2Zmc2V0OiAweDgyQyAgU0QgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJMS0RJRiAgICB8QmxvY2sgVHJhbnNmZXIgRG9uZSBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IFNEIGhvc3QgaGFzIGZpbmlzaGVkIGFsbCBkYXRhLWluIG9yIGRhdGEtb3V0IGJsb2NrIHRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlcmUgaXMgYSBDUkMxNiBlcnJvciBvciBpbmNvcnJlY3QgQ1JDIHN0YXR1cyBkdXJpbmcgbXVsdGlwbGUgYmxvY2sgZGF0YSB0cmFuc2ZlciwgdGhlIHRyYW5zZmVyIHdpbGwgYmUgYnJva2VuIGFuZCB0aGlzIGJpdCB3aWxsIGFsc28gYmUgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb3QgZmluaXNoZWQgeWV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSwgYnV0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgJzEnIHRvIGl0LgorICAgICAqIHxbMV0gICAgIHxDUkNJRiAgICAgfENSQzcsIENSQzE2IGFuZCBDUkMgU3RhdHVzIEVycm9yIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgU0QgaG9zdCBoYXMgb2NjdXJyZWQgQ1JDIGVycm9yIGR1cmluZyByZXNwb25zZSBpbiwgZGF0YS1pbiBvciBkYXRhLW91dCAoQ1JDIHN0YXR1cyBlcnJvcikgdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIENSQyBlcnJvciBpcyBvY2N1cnJlZCwgc29mdHdhcmUgc2hvdWxkIHJlc2V0IFNEIGVuZ2luZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvbWUgcmVzcG9uc2UgKGV4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UjMpIGRvZXNuJ3QgaGF2ZSBDUkM3IGluZm9ybWF0aW9uIHdpdGggaXQ7IFNEIGhvc3Qgd2lsbCBzdGlsbCBjYWxjdWxhdGUgQ1JDNywgZ2V0IENSQyBlcnJvciBhbmQgc2V0IHRoaXMgZmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHRoaXMgY29uZGl0aW9uLCBzb2Z0d2FyZSBzaG91bGQgaWdub3JlIENSQyBlcnJvciBhbmQgY2xlYXJzIHRoaXMgYml0IG1hbnVhbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBDUkMgZXJyb3IgaXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENSQyBlcnJvciBpcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHksIGJ1dCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nICcxJyB0byBpdC4KKyAgICAgKiB8WzJdICAgICB8Q1JDNyAgICAgIHxDUkM3IENoZWNrIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNEIGhvc3Qgd2lsbCBjaGVjayBDUkM3IGNvcnJlY3RuZXNzIGR1cmluZyBlYWNoIHJlc3BvbnNlIGluCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhhdCByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIENSQzcgaW5mb3JtYXRpb24gKGV4CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UjMpLCB0aGVuIHNvZnR3YXJlIHNob3VsZCB0dXJuIG9mZiBDUkNJRU4gKFNESF9JTlRFTlsxXSkgYW5kIGlnbm9yZSB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRmF1bHQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9LLgorICAgICAqIHxbM10gICAgIHxDUkMxNiAgICAgfENSQzE2IENoZWNrIFN0YXR1cyBvZiBEYXRhLWluIFRyYW5zZmVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0QgaG9zdCB3aWxsIGNoZWNrIENSQzE2IGNvcnJlY3RuZXNzIGFmdGVyIGRhdGEtaW4gdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEZhdWx0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPSy4KKyAgICAgKiB8WzY6NF0gICB8Q1JDU1RTICAgIHxDUkMgU3RhdHVzIFZhbHVlIG9mIERhdGEtb3V0IFRyYW5zZmVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0QgaG9zdCB3aWxsIHJlY29yZCBDUkMgc3RhdHVzIG9mIGRhdGEtb3V0IHRyYW5zZmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY291bGQgdXNlIHRoaXMgdmFsdWUgdG8gaWRlbnRpZnkgd2hhdCB0eXBlIG9mIGVycm9yIGlzIGR1cmluZyBkYXRhLW91dCB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBQb3NpdGl2ZSBDUkMgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IE5lZ2F0aXZlIENSQyBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gU0QgY2FyZCBwcm9ncmFtbWluZyBlcnJvciBvY2N1cnMuCisgICAgICogfFs3XSAgICAgfERBVDBTVFMgICB8REFUMCBQaW4gU3RhdHVzIG9mIEN1cnJlbnQgU2VsZWN0ZWQgU0QgUG9ydCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHRoZSBEQVQwIHBpbiBzdGF0dXMgb2YgY3VycmVudCBzZWxlY3RlZCBTRCBwb3J0LgorICAgICAqIHxbOF0gICAgIHxDRElGMCAgICAgfFNEMCBDYXJkIERldGVjdGlvbiBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IFNEIGNhcmQgMCBpcyBpbnNlcnRlZCBvciByZW1vdmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25seSB3aGVuIENESUVOMCAoU0RIX0lOVEVOWzhdKSBpcyBzZXQgdG8gMSwgdGhpcyBiaXQgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjYXJkIGlzIGluc2VydGVkIG9yIHJlbW92ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIGEgY2FyZCBpbnNlcnRlZCBpbiBvciByZW1vdmVkIGZyb20gU0QwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSwgYnV0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgJzEnIHRvIGl0LgorICAgICAqIHxbMTJdICAgIHxSVE9JRiAgICAgfFJlc3BvbnNlIFRpbWUtb3V0IEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgU0QgaG9zdCBjb3VudHMgdG8gdGltZS1vdXQgdmFsdWUgd2hlbiByZWNlaXZpbmcgcmVzcG9uc2Ugb3IgUjIgKHdhaXRpbmcgc3RhcnQgYml0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm90IHRpbWUtb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNwb25zZSB0aW1lLW91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHksIGJ1dCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nICcxJyB0byBpdC4KKyAgICAgKiB8WzEzXSAgICB8RElUT0lGICAgIHxEYXRhIElucHV0IFRpbWUtb3V0IEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgU0QgaG9zdCBjb3VudHMgdG8gdGltZS1vdXQgdmFsdWUgd2hlbiByZWNlaXZpbmcgZGF0YSAod2FpdGluZyBzdGFydCBiaXQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb3QgdGltZS1vdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgaW5wdXQgdGltZS1vdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LCBidXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAnMScgdG8gaXQuCisgICAgICogfFsxNl0gICAgfENEU1RTMCAgICB8Q2FyZCBEZXRlY3QgU3RhdHVzIG9mIFNEMCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgY2FyZCBkZXRlY3QgcGluIHN0YXR1cyBvZiBTRDAsIGFuZCBpcyB1c2VkIGZvciBjYXJkIGRldGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlcmUgaXMgYSBjYXJkIGluc2VydGVkIGluIG9yIHJlbW92ZWQgZnJvbSBTRDAsIHNvZnR3YXJlIHNob3VsZCBjaGVjayB0aGlzIGJpdCB0byBjb25maXJtIGlmIHRoZXJlIGlzIHJlYWxseSBhIGNhcmQgaW5zZXJ0aW9uIG9yIHJlbW92YWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgQ0RTUkMwIChTREhfSU5URU5bMzBdKSA9IDAsIHRvIHNlbGVjdCBEQVQzIGZvciBjYXJkIGRldGVjdGlvbjouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcmQgcmVtb3ZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FyZCBpbnNlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBDRFNSQzAgKFNESF9JTlRFTlszMF0pID0gMSwgdG8gc2VsZWN0IEdQSU8gZm9yIGNhcmQgZGV0ZWN0aW9uOi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FyZCBpbnNlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2FyZCByZW1vdmVkLgorICAgICAqIHxbMThdICAgIHxEQVQxU1RTICAgfERBVDEgUGluIFN0YXR1cyBvZiBTRCBQb3J0IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSBEQVQxIHBpbiBzdGF0dXMgb2YgU0QgcG9ydC4KKyAgICAgKiBAdmFyIFNESF9UOjpSRVNQMAorICAgICAqIE9mZnNldDogMHg4MzAgIFNEIFJlY2VpdmluZyBSZXNwb25zZSBUb2tlbiBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8UkVTUFRLMCAgIHxTRCBSZWNlaXZpbmcgUmVzcG9uc2UgVG9rZW4gMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNEIGhvc3QgY29udHJvbGxlciB3aWxsIHJlY2VpdmUgYSByZXNwb25zZSB0b2tlbiBmb3IgZ2V0dGluZyBhIHJlcGx5IGZyb20gU0QgY2FyZCB3aGVuIFJJRU4gKFNESF9DVExbMV0pIGlzIHNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY29udGFpbnMgcmVzcG9uc2UgYml0IDQ3LTE2IG9mIHRoZSByZXNwb25zZSB0b2tlbi4KKyAgICAgKiBAdmFyIFNESF9UOjpSRVNQMQorICAgICAqIE9mZnNldDogMHg4MzQgIFNEIFJlY2VpdmluZyBSZXNwb25zZSBUb2tlbiBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8UkVTUFRLMSAgIHxTRCBSZWNlaXZpbmcgUmVzcG9uc2UgVG9rZW4gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNEIGhvc3QgY29udHJvbGxlciB3aWxsIHJlY2VpdmUgYSByZXNwb25zZSB0b2tlbiBmb3IgZ2V0dGluZyBhIHJlcGx5IGZyb20gU0QgY2FyZCB3aGVuIFJJRU4gKFNESF9DVExbMV0pIGlzIHNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGJpdCAxNS04IG9mIHRoZSByZXNwb25zZSB0b2tlbi4KKyAgICAgKiBAdmFyIFNESF9UOjpCTEVOCisgICAgICogT2Zmc2V0OiAweDgzOCAgU0QgQmxvY2sgTGVuZ3RoIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzEwOjBdICB8QkxLTEVOICAgIHxTRCBCTE9DSyBMRU5HVEggaW4gQnl0ZSBVbml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QW4gMTEtYml0IHZhbHVlIHNwZWNpZmllcyB0aGUgU0QgdHJhbnNmZXIgYnl0ZSBjb3VudCBvZiBhIGJsb2NrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGFjdHVhbCBieXRlIGNvdW50IGlzIGVxdWFsIHRvIEJMS0xFTisxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBkZWZhdWx0IFNEIGJsb2NrIGxlbmd0aCBpcyA1MTIgYnl0ZXMKKyAgICAgKiBAdmFyIFNESF9UOjpUT1VUCisgICAgICogT2Zmc2V0OiAweDgzQyAgU0QgUmVzcG9uc2UvRGF0YS1pbiBUaW1lLW91dCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyMzowXSAgfFRPVVQgICAgICB8U0QgUmVzcG9uc2UvRGF0YS1pbiBUaW1lLW91dCBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgMjQtYml0IHZhbHVlIHNwZWNpZmllcyB0aGUgdGltZS1vdXQgY291bnRzIG9mIHJlc3BvbnNlIGFuZCBkYXRhIGlucHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U0QgaG9zdCBjb250cm9sbGVyIHdpbGwgd2FpdCBzdGFydCBiaXQgb2YgcmVzcG9uc2Ugb3IgZGF0YS1pbiB1bnRpbCB0aGlzIHZhbHVlIHJlYWNoZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdGltZSBwZXJpb2QgZGVwZW5kcyBvbiBTRCBlbmdpbmUgY2xvY2sgZnJlcXVlbmN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RG8gbm90IHdyaXRlIGEgc21hbGwgbnVtYmVyIGludG8gdGhpcyBmaWVsZCwgb3IgeW91IG1heSBuZXZlciBnZXQgcmVzcG9uc2Ugb3IgZGF0YSBkdWUgdG8gdGltZS1vdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogRmlsbGluZyAweDAgaW50byB0aGlzIGZpZWxkIHdpbGwgZGlzYWJsZSBoYXJkd2FyZSB0aW1lLW91dCBmdW5jdGlvbi4KKyAgICAgKi8KKworICAgIF9fSU8gdWludDMyX3QgRkJbMzJdOyAgICAgICAgICAgICAgICAvKiE8IFNoYXJlZCBCdWZmZXIgKEZJRk8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzIyNF07CisgICAgX19JTyB1aW50MzJfdCBETUFDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDQwMF0gRE1BIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbMV07CisgICAgX19JTyB1aW50MzJfdCBETUFTQTsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDQwOF0gRE1BIFRyYW5zZmVyIFN0YXJ0aW5nIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgRE1BQkNOVDsgICAgICAgICAgICAgICAvKiE8IFsweDA0MGNdIERNQSBUcmFuc2ZlciBCeXRlIENvdW50IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IERNQUlOVEVOOyAgICAgICAgICAgICAgLyohPCBbMHgwNDEwXSBETUEgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBETUFJTlRTVFM7ICAgICAgICAgICAgIC8qITwgWzB4MDQxNF0gRE1BIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbMjUwXTsKKyAgICBfX0lPIHVpbnQzMl90IEdDVEw7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwODAwXSBHbG9iYWwgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHSU5URU47ICAgICAgICAgICAgICAgIC8qITwgWzB4MDgwNF0gR2xvYmFsIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR0lOVFNUUzsgICAgICAgICAgICAgICAvKiE8IFsweDA4MDhdIEdsb2JhbCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUzWzVdOworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDA4MjBdIFNEIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENNREFSRzsgICAgICAgICAgICAgICAgLyohPCBbMHgwODI0XSBTRCBDb21tYW5kIEFyZ3VtZW50IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDgyOF0gU0QgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5UU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDA4MmNdIFNEIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU1AwOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwODMwXSBTRCBSZWNlaXZpbmcgUmVzcG9uc2UgVG9rZW4gUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNQMTsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDgzNF0gU0QgUmVjZWl2aW5nIFJlc3BvbnNlIFRva2VuIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQkxFTjsgICAgICAgICAgICAgICAgICAvKiE8IFsweDA4MzhdIFNEIEJsb2NrIExlbmd0aCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRPVVQ7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwODNjXSBTRCBSZXNwb25zZS9EYXRhLWluIFRpbWUtb3V0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gU0RIX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFNESF9DT05TVCBTREggQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgU0RIIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgU0RIX0RNQUNUTF9ETUFFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFDVEw6IERNQUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNESF9ETUFDVExfRE1BRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTREhfRE1BQ1RMX0RNQUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BQ1RMOiBETUFFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9ETUFDVExfRE1BUlNUX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BQ1RMOiBETUFSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTREhfRE1BQ1RMX0RNQVJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0RNQUNUTF9ETUFSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUNUTDogRE1BUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfRE1BQ1RMX1NHRU5fUG9zICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUNUTDogU0dFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0RNQUNUTF9TR0VOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9ETUFDVExfU0dFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFDVEw6IFNHRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0RNQUNUTF9ETUFCVVNZX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFDVEw6IERNQUJVU1kgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNESF9ETUFDVExfRE1BQlVTWV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTREhfRE1BQ1RMX0RNQUJVU1lfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BQ1RMOiBETUFCVVNZIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9ETUFTQV9PUkRFUl9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BU0E6IE9SREVSIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTREhfRE1BU0FfT1JERVJfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0RNQVNBX09SREVSX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQVNBOiBPUkRFUiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfRE1BU0FfRE1BU0FfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQVNBOiBETUFTQSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0RNQVNBX0RNQVNBX01zayAgICAgICAgICAgICAgKDB4N2ZmZmZmZmZ1bCA8PCBTREhfRE1BU0FfRE1BU0FfUG9zKSAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFTQTogRE1BU0EgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0RNQUJDTlRfQkNOVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFCQ05UOiBCQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNESF9ETUFCQ05UX0JDTlRfTXNrICAgICAgICAgICAgICgweDNmZmZmZmZ1bCA8PCBTREhfRE1BQkNOVF9CQ05UX1BvcykgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BQkNOVDogQkNOVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9ETUFJTlRFTl9BQk9SVElFTl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BSU5URU46IEFCT1JUSUVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTREhfRE1BSU5URU5fQUJPUlRJRU5fTXNrICAgICAgICAoMHgxdWwgPDwgU0RIX0RNQUlOVEVOX0FCT1JUSUVOX1BvcykgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUlOVEVOOiBBQk9SVElFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTREhfRE1BSU5URU5fV0VPVElFTl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUlOVEVOOiBXRU9USUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU0RIX0RNQUlOVEVOX1dFT1RJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFNESF9ETUFJTlRFTl9XRU9USUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFJTlRFTjogV0VPVElFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0RNQUlOVFNUU19BQk9SVElGX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpETUFJTlRTVFM6IEFCT1JUSUYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNESF9ETUFJTlRTVFNfQUJPUlRJRl9Nc2sgICAgICAgICgweDF1bCA8PCBTREhfRE1BSU5UU1RTX0FCT1JUSUZfUG9zKSAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BSU5UU1RTOiBBQk9SVElGIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNESF9ETUFJTlRTVFNfV0VPVElGX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6RE1BSU5UU1RTOiBXRU9USUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTREhfRE1BSU5UU1RTX1dFT1RJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU0RIX0RNQUlOVFNUU19XRU9USUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkRNQUlOVFNUUzogV0VPVElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfR0NUTF9HQ1RMUlNUX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkdDVEw6IEdDVExSU1QgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0dDVExfR0NUTFJTVF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9HQ1RMX0dDVExSU1RfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpHQ1RMOiBHQ1RMUlNUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0dDVExfU0RFTl9Qb3MgICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpHQ1RMOiBTREVOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFNESF9HQ1RMX1NERU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfR0NUTF9TREVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6R0NUTDogU0RFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9HSU5URU5fRFRBSUVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6R0lOVEVOOiBEVEFJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTREhfR0lOVEVOX0RUQUlFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0dJTlRFTl9EVEFJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkdJTlRFTjogRFRBSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfR0lOVFNUU19EVEFJRl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkdJTlRTVFM6IERUQUlGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0dJTlRTVFNfRFRBSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9HSU5UU1RTX0RUQUlGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpHSU5UU1RTOiBEVEFJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0NUTF9DT0VOX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IENPRU4gUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFNESF9DVExfQ09FTl9Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfQ1RMX0NPRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDT0VOIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfUklFTl9Qb3MgICAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBSSUVOIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX1JJRU5fTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0NUTF9SSUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogUklFTiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfQ1RMX0RJRU5fUG9zICAgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogRElFTiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0NUTF9ESUVOX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9DVExfRElFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IERJRU4gTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0NUTF9ET0VOX1BvcyAgICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IERPRU4gUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFNESF9DVExfRE9FTl9Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfQ1RMX0RPRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBET0VOIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfUjJFTl9Qb3MgICAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBSMkVOIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX1IyRU5fTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0NUTF9SMkVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogUjJFTiBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfQ1RMX0NMSzc0T0VOX1BvcyAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogQ0xLNzRPRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0NUTF9DTEs3NE9FTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9DVExfQ0xLNzRPRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IENMSzc0T0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0NUTF9DTEs4T0VOX1BvcyAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IENMSzhPRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNESF9DVExfQ0xLOE9FTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfQ1RMX0NMSzhPRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDTEs4T0VOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfQ0xLS0VFUF9Qb3MgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDTEtLRUVQIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNESF9DVExfQ0xLS0VFUF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfQ1RMX0NMS0tFRVBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDTEtLRUVQIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0NUTF9DTURDT0RFX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IENNRENPREUgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNESF9DVExfQ01EQ09ERV9Nc2sgICAgICAgICAgICAgICgweDNmdWwgPDwgU0RIX0NUTF9DTURDT0RFX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDTURDT0RFIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfQ1RMUlNUX1BvcyAgICAgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBDVExSU1QgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX0NUTFJTVF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0NUTF9DVExSU1RfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogQ1RMUlNUIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfQ1RMX0RCV19Qb3MgICAgICAgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogREJXIFBvc2l0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0NUTF9EQldfTXNrICAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9DVExfREJXX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IERCVyBNYXNrICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0NUTF9CTEtDTlRfUG9zICAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpDVEw6IEJMS0NOVCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNESF9DVExfQkxLQ05UX01zayAgICAgICAgICAgICAgICgweGZmdWwgPDwgU0RIX0NUTF9CTEtDTlRfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBCTEtDTlQgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9DVExfU0ROV1JfUG9zICAgICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6Q1RMOiBTRE5XUiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBTREhfQ1RMX1NETldSX01zayAgICAgICAgICAgICAgICAoMHhmdWwgPDwgU0RIX0NUTF9TRE5XUl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNUTDogU0ROV1IgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfQ01EQVJHX0FSR1VNRU5UX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OkNNREFSRzogQVJHVU1FTlQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU0RIX0NNREFSR19BUkdVTUVOVF9Nc2sgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTREhfQ01EQVJHX0FSR1VNRU5UX1BvcykgICAgICAgICAvKiE8IFNESF9UOjpDTURBUkc6IEFSR1VNRU5UIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVEVOX0JMS0RJRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRFTjogQkxLRElFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRFTl9CTEtESUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5URU5fQkxLRElFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5URU46IEJMS0RJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRFTl9DUkNJRU5fUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5URU46IENSQ0lFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTREhfSU5URU5fQ1JDSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVEVOX0NSQ0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBDUkNJRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5URU5fQ0RJRU5fUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBDRElFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTREhfSU5URU5fQ0RJRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVEVOX0NESUVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBDRElFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRFTl9SVE9JRU5fUG9zICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5URU46IFJUT0lFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTREhfSU5URU5fUlRPSUVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVEVOX1JUT0lFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBSVE9JRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5URU5fRElUT0lFTl9Qb3MgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVEVOOiBESVRPSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVEVOX0RJVE9JRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9JTlRFTl9ESVRPSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRFTjogRElUT0lFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVEVOX1dLSUVOX1BvcyAgICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRFTjogV0tJRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRFTl9XS0lFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5URU5fV0tJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5URU46IFdLSUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRFTl9DRFNSQ19Qb3MgICAgICAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5URU46IENEU1JDIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRFTl9DRFNSQ19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5URU5fQ0RTUkNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5URU46IENEU1JDIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVFNUU19CTEtESUZfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IEJMS0RJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRTVFNfQkxLRElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5UU1RTX0JMS0RJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBCTEtESUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRTVFNfQ1JDSUZfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBDUkNJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTREhfSU5UU1RTX0NSQ0lGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU0RIX0lOVFNUU19DUkNJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogQ1JDSUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5UU1RTX0NSQzdfUG9zICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogQ1JDNyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVFNUU19DUkM3X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9JTlRTVFNfQ1JDN19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IENSQzcgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVFNUU19DUkMxNl9Qb3MgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IENSQzE2IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRTVFNfQ1JDMTZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5UU1RTX0NSQzE2X1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBDUkMxNiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRTVFNfQ1JDU1RTX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBDUkNTVFMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTREhfSU5UU1RTX0NSQ1NUU19Nc2sgICAgICAgICAgICAoMHg3dWwgPDwgU0RIX0lOVFNUU19DUkNTVFNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogQ1JDU1RTIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5UU1RTX0RBVDBTVFNfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogREFUMFNUUyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVFNUU19EQVQwU1RTX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNESF9JTlRTVFNfREFUMFNUU19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IERBVDBTVFMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVFNUU19DRElGX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IENESUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVFNUU19DRElGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9JTlRTVFNfQ0RJRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IENESUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfSU5UU1RTX1JUT0lGX1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OklOVFNUUzogUlRPSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX0lOVFNUU19SVE9JRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNESF9JTlRTVFNfUlRPSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IFJUT0lGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVFNUU19ESVRPSUZfUG9zICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IERJVE9JRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRTVFNfRElUT0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5UU1RTX0RJVE9JRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBESVRPSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9JTlRTVFNfQ0RTVFNfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBDRFNUUyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNESF9JTlRTVFNfQ0RTVFNfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5UU1RTX0NEU1RTX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBDRFNUUyBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0lOVFNUU19EQVQxU1RTX1BvcyAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpJTlRTVFM6IERBVDFTVFMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNESF9JTlRTVFNfREFUMVNUU19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTREhfSU5UU1RTX0RBVDFTVFNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6SU5UU1RTOiBEQVQxU1RTIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9SRVNQMF9SRVNQVEswX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6UkVTUDA6IFJFU1BUSzAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTREhfUkVTUDBfUkVTUFRLMF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNESF9SRVNQMF9SRVNQVEswX1BvcykgICAgICAgICAgIC8qITwgU0RIX1Q6OlJFU1AwOiBSRVNQVEswIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTREhfUkVTUDFfUkVTUFRLMV9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OlJFU1AxOiBSRVNQVEsxIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU0RIX1JFU1AxX1JFU1BUSzFfTXNrICAgICAgICAgICAgKDB4ZmZ1bCA8PCBTREhfUkVTUDFfUkVTUFRLMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpSRVNQMTogUkVTUFRLMSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU0RIX0JMRU5fQkxLTEVOX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNESF9UOjpCTEVOOiBCTEtMRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNESF9CTEVOX0JMS0xFTl9Nc2sgICAgICAgICAgICAgICgweDdmZnVsIDw8IFNESF9CTEVOX0JMS0xFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6QkxFTjogQkxLTEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNESF9UT1VUX1RPVVRfUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTREhfVDo6VE9VVDogVE9VVCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBTREhfVE9VVF9UT1VUX01zayAgICAgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBTREhfVE9VVF9UT1VUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0RIX1Q6OlRPVVQ6IFRPVVQgTWFzayAgICAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBTREhfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFNESCByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworCisjZW5kaWYgLyogX19TREhfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3NwaV9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zcGlfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhY2ZjMAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zcGlfcmVnLmgKQEAgLTAsMCArMSw3ODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzcGlfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFNQSSByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TUElfUkVHX0hfXworI2RlZmluZSBfX1NQSV9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgU1BJIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSBDb250cm9sbGVyKFNQSSkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgU1BJIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgU1BJX1Q6OkNUTAorICAgICAqIE9mZnNldDogMHgwMCAgU1BJIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTUElFTiAgICAgfFNQSSBUcmFuc2ZlciBDb250cm9sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBNYXN0ZXIgbW9kZSwgdGhlIHRyYW5zZmVyIHdpbGwgc3RhcnQgd2hlbiB0aGVyZSBpcyBkYXRhIGluIHRoZSBGSUZPIGJ1ZmZlciBhZnRlciB0aGlzIGJpdCBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNsYXZlIG1vZGUsIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIHJlY2VpdmUgZGF0YSB3aGVuIHRoaXMgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc2ZlciBjb250cm9sIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc2ZlciBjb250cm9sIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQmVmb3JlIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9ucyBvZiBTUEl4X0NUTCwgU1BJeF9DTEtESVYsIFNQSXhfU1NDVEwgYW5kIFNQSXhfRklGT0NUTCByZWdpc3RlcnMsIHVzZXIgc2hhbGwgY2xlYXIgdGhlIFNQSUVOIChTUEl4X0NUTFswXSkgYW5kIGNvbmZpcm0gdGhlIFNQSUVOU1RTIChTUEl4X1NUQVRVU1sxNV0pIGlzIDAuCisgICAgICogfFsxXSAgICAgfFJYTkVHICAgICB8UmVjZWl2ZSBvbiBOZWdhdGl2ZSBFZGdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmVkIGRhdGEgaW5wdXQgc2lnbmFsIGlzIGxhdGNoZWQgb24gdGhlIHJpc2luZyBlZGdlIG9mIFNQSSBidXMgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVkIGRhdGEgaW5wdXQgc2lnbmFsIGlzIGxhdGNoZWQgb24gdGhlIGZhbGxpbmcgZWRnZSBvZiBTUEkgYnVzIGNsb2NrLgorICAgICAqIHxbMl0gICAgIHxUWE5FRyAgICAgfFRyYW5zbWl0IG9uIE5lZ2F0aXZlIEVkZ2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXR0ZWQgZGF0YSBvdXRwdXQgc2lnbmFsIGlzIGNoYW5nZWQgb24gdGhlIHJpc2luZyBlZGdlIG9mIFNQSSBidXMgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0dGVkIGRhdGEgb3V0cHV0IHNpZ25hbCBpcyBjaGFuZ2VkIG9uIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgU1BJIGJ1cyBjbG9jay4KKyAgICAgKiB8WzNdICAgICB8Q0xLUE9MICAgIHxDbG9jayBQb2xhcml0eQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkgYnVzIGNsb2NrIGlzIGlkbGUgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkgYnVzIGNsb2NrIGlzIGlkbGUgaGlnaC4KKyAgICAgKiB8Wzc6NF0gICB8U1VTUElUViAgIHxTdXNwZW5kIEludGVydmFsIChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZm91ciBiaXRzIHByb3ZpZGUgY29uZmlndXJhYmxlIHN1c3BlbmQgaW50ZXJ2YWwgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSB0cmFuc21pdC9yZWNlaXZlIHRyYW5zYWN0aW9uIGluIGEgdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVmaW5pdGlvbiBvZiB0aGUgc3VzcGVuZCBpbnRlcnZhbCBpcyB0aGUgaW50ZXJ2YWwgYmV0d2VlbiB0aGUgbGFzdCBjbG9jayBlZGdlIG9mIHRoZSBwcmVjZWRpbmcgdHJhbnNhY3Rpb24gd29yZCBhbmQgdGhlIGZpcnN0IGNsb2NrIGVkZ2Ugb2YgdGhlIGZvbGxvd2luZyB0cmFuc2FjdGlvbiB3b3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlZmF1bHQgdmFsdWUgaXMgMHgzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBlcmlvZCBvZiB0aGUgc3VzcGVuZCBpbnRlcnZhbCBpcyBvYnRhaW5lZCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBlcXVhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoU1VTUElUVlszOjBdICsgMC41KSAqIHBlcmlvZCBvZiBTUElDTEsgY2xvY2sgY3ljbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFeGFtcGxlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNVU1BJVFYgPSAweDAgLi4uLiAwLjUgU1BJQ0xLIGNsb2NrIGN5Y2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNVU1BJVFYgPSAweDEgLi4uLiAxLjUgU1BJQ0xLIGNsb2NrIGN5Y2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfC4uLi4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U1VTUElUViA9IDB4RSAuLi4uIDE0LjUgU1BJQ0xLIGNsb2NrIGN5Y2xlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNVU1BJVFYgPSAweEYgLi4uLiAxNS41IFNQSUNMSyBjbG9jayBjeWNsZS4KKyAgICAgKiB8WzEyOjhdICB8RFdJRFRIICAgIHxEYXRhIFdpZHRoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBzcGVjaWZpZXMgaG93IG1hbnkgYml0cyBjYW4gYmUgdHJhbnNtaXR0ZWQgLyByZWNlaXZlZCBpbiBvbmUgdHJhbnNhY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgbWluaW11bSBiaXQgbGVuZ3RoIGlzIDggYml0cyBhbmQgY2FuIHVwIHRvIDMyIGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RFdJRFRIID0gMHgwOCAuLi4uIDggYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEV0lEVEggPSAweDA5IC4uLi4gOSBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfC4uLi4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RFdJRFRIID0gMHgxRiAuLi4uIDMxIGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RFdJRFRIID0gMHgwMCAuLi4uIDMyIGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogRm9yIFNQSTB+U1BJMywgdGhpcyBiaXQgZmllbGQgd2lsbCBkZWNpZGUgdGhlIGRlcHRoIG9mIFRYL1JYIEZJRk8gY29uZmlndXJhdGlvbiBpbiBTUEkgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXJlZm9yZSwgY2hhbmdpbmcgdGhpcyBiaXQgZmllbGQgd2lsbCBjbGVhciBUWC9SWCBGSUZPIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgaW4gU1BJMH5TUEkzLgorICAgICAqIHxbMTNdICAgIHxMU0IgICAgICAgfFNlbmQgTFNCIEZpcnN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBNU0IsIHdoaWNoIGJpdCBvZiB0cmFuc21pdC9yZWNlaXZlIHJlZ2lzdGVyIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgRFdJRFRILCBpcyB0cmFuc21pdHRlZC9yZWNlaXZlZCBmaXJzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIExTQiwgYml0IDAgb2YgdGhlIFNQSSBUWCByZWdpc3RlciwgaXMgc2VudCBmaXJzdCB0byB0aGUgU1BJIGRhdGEgb3V0cHV0IHBpbiwgYW5kIHRoZSBmaXJzdCBiaXQgcmVjZWl2ZWQgZnJvbSB0aGUgU1BJIGRhdGEgaW5wdXQgcGluIHdpbGwgYmUgcHV0IGluIHRoZSBMU0IgcG9zaXRpb24gb2YgdGhlIFJYIHJlZ2lzdGVyIChiaXQgMCBvZiBTUElfUlgpLgorICAgICAqIHxbMTRdICAgIHxIQUxGRFBYICAgfFNQSSBIYWxmLWR1cGxleCBUcmFuc2ZlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBzZWxlY3QgZnVsbC1kdXBsZXggb3IgaGFsZi1kdXBsZXggZm9yIFNQSSB0cmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXQgZmllbGQgREFURElSIChTUEl4X0NUTFsyMF0pIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGF0YSBkaXJlY3Rpb24gaW4gaGFsZi1kdXBsZXggdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNQSSBvcGVyYXRlcyBpbiBmdWxsLWR1cGxleCB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJIG9wZXJhdGVzIGluIGhhbGYtZHVwbGV4IHRyYW5zZmVyLgorICAgICAqIHxbMTVdICAgIHxSWE9OTFkgICAgfFJlY2VpdmUtb25seSBNb2RlIEVuYWJsZSBCaXQgKE1hc3RlciBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGlzIG9ubHkgYXZhaWxhYmxlIGluIE1hc3RlciBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gcmVjZWl2ZS1vbmx5IG1vZGUsIFNQSSBNYXN0ZXIgd2lsbCBnZW5lcmF0ZSBTUEkgYnVzIGNsb2NrIGNvbnRpbnVvdXNseSBmb3IgcmVjZWl2aW5nIGRhdGEgYml0IGZyb20gU1BJIHNsYXZlIGRldmljZSBhbmQgYXNzZXJ0IHRoZSBCVVNZIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZS1vbmx5IG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUtb25seSBtb2RlIEVuYWJsZWQuCisgICAgICogfFsxN10gICAgfFVOSVRJRU4gICB8VW5pdCBUcmFuc2ZlciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSSB1bml0IHRyYW5zZmVyIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMThdICAgIHxTTEFWRSAgICAgfFNsYXZlIE1vZGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXN0ZXIgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgbW9kZS4KKyAgICAgKiB8WzE5XSAgICB8UkVPUkRFUiAgIHxCeXRlIFJlb3JkZXIgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCeXRlIFJlb3JkZXIgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ5dGUgUmVvcmRlciBmdW5jdGlvbiBFbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSBieXRlIHN1c3BlbmQgaW50ZXJ2YWwgd2lsbCBiZSBpbnNlcnRlZCBhbW9uZyBlYWNoIGJ5dGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcGVyaW9kIG9mIHRoZSBieXRlIHN1c3BlbmQgaW50ZXJ2YWwgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBTVVNQSVRWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEJ5dGUgUmVvcmRlciBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBEV0lEVEggaXMgZGVmaW5lZCBhcyAxNiwgMjQsIGFuZCAzMiBiaXRzLgorICAgICAqIHxbMjBdICAgIHxEQVRESVIgICAgfERhdGEgUG9ydCBEaXJlY3Rpb24gQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBkYXRhIGlucHV0L291dHB1dCBkaXJlY3Rpb24gaW4gaGFsZi1kdXBsZXggdHJhbnNmZXIgYW5kIER1YWwvUXVhZCB0cmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkgZGF0YSBpcyBpbnB1dCBkaXJlY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSSBkYXRhIGlzIG91dHB1dCBkaXJlY3Rpb24uCisgICAgICogQHZhciBTUElfVDo6Q0xLRElWCisgICAgICogT2Zmc2V0OiAweDA0ICBTUEkgQ2xvY2sgRGl2aWRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs4OjBdICAgfERJVklERVIgICB8Q2xvY2sgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB2YWx1ZSBpbiB0aGlzIGZpZWxkIGlzIHRoZSBmcmVxdWVuY3kgZGl2aWRlciBmb3IgZ2VuZXJhdGluZyB0aGUgcGVyaXBoZXJhbCBjbG9jaywgZnNwaV9lY2xrLCBhbmQgdGhlIFNQSSBidXMgY2xvY2sgb2YgU1BJIE1hc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmcmVxdWVuY3kgaXMgb2J0YWluZWQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgZXF1YXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8d2hlcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxpcyB0aGUgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2UsIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIsIENMS19DTEtTRUwyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IE5vdCBzdXBwb3J0ZWQgaW4gSTJTIG1vZGUuCisgICAgICogQHZhciBTUElfVDo6U1NDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDggIFNQSSBTbGF2ZSBTZWxlY3QgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNTICAgICAgICB8U2xhdmUgU2VsZWN0aW9uIENvbnRyb2wgKE1hc3RlciBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEFVVE9TUyBiaXQgaXMgY2xlYXJlZCB0byAwLAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBzZXQgdGhlIFNQSXhfU1MgbGluZSB0byBpbmFjdGl2ZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gc2V0IHRoZSBTUEl4X1NTIGxpbmUgdG8gYWN0aXZlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBBVVRPU1MgYml0IGlzIHNldCB0byAxLAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBLZWVwIHRoZSBTUEl4X1NTIGxpbmUgYXQgaW5hY3RpdmUgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSXhfU1MgbGluZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZHJpdmVuIHRvIGFjdGl2ZSBzdGF0ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGRhdGEgdHJhbnNmZXIsIGFuZCB3aWxsIGJlIGRyaXZlbiB0byBpbmFjdGl2ZSBzdGF0ZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRpbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYWN0aXZlIHN0YXRlIG9mIFNQSXhfU1MgaXMgc3BlY2lmaWVkIGluIFNTQUNUUE9MIChTUEl4X1NTQ1RMWzJdKS4KKyAgICAgKiB8WzJdICAgICB8U1NBQ1RQT0wgIHxTbGF2ZSBTZWxlY3Rpb24gQWN0aXZlIFBvbGFyaXR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgYWN0aXZlIHBvbGFyaXR5IG9mIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgKFNQSXhfU1MpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBTUEl4X1NTIGlzIGFjdGl2ZSBsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIFNQSXhfU1MgaXMgYWN0aXZlIGhpZ2guCisgICAgICogfFszXSAgICAgfEFVVE9TUyAgICB8QXV0b21hdGljIFNsYXZlIFNlbGVjdGlvbiBGdW5jdGlvbiBFbmFibGUgQml0IChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbiBEaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNsYXZlIHNlbGVjdGlvbiBzaWduYWwgd2lsbCBiZSBhc3NlcnRlZC9kZS1hc3NlcnRlZCBhY2NvcmRpbmcgdG8gU1MgKFNQSXhfU1NDVExbMF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFNMVkJFSUVOICB8U2xhdmUgTW9kZSBCaXQgQ291bnQgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgbW9kZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBtb2RlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzldICAgICB8U0xWVVJJRU4gIHxTbGF2ZSBNb2RlIFRYIFVuZGVyIFJ1biBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBtb2RlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUgVFggdW5kZXIgcnVuIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxTU0FDVElFTiAgfFNsYXZlIFNlbGVjdCBBY3RpdmUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgc2VsZWN0IGFjdGl2ZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBhY3RpdmUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxM10gICAgfFNTSU5BSUVOICB8U2xhdmUgU2VsZWN0IEluYWN0aXZlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNsYXZlIHNlbGVjdCBpbmFjdGl2ZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBpbmFjdGl2ZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIFNQSV9UOjpQRE1BQ1RMCisgICAgICogT2Zmc2V0OiAweDBDICBTUEkgUERNQSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8VFhQRE1BRU4gIHxUcmFuc21pdCBQRE1BIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgUERNQSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgUERNQSBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFNQSSBNYXN0ZXIgbW9kZSB3aXRoIGZ1bGwgZHVwbGV4IHRyYW5zZmVyLCBpZiBib3RoIFRYIGFuZCBSWCBQRE1BIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZCwgUlggUERNQSBmdW5jdGlvbiBjYW5ub3QgYmUgZW5hYmxlZCBwcmlvciB0byBUWCBQRE1BIGZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gZW5hYmxlIFRYIFBETUEgZnVuY3Rpb24gZmlyc3RseSBvciBlbmFibGUgYm90aCBmdW5jdGlvbnMgc2ltdWx0YW5lb3VzbHkuCisgICAgICogfFsxXSAgICAgfFJYUERNQUVOICB8UmVjZWl2ZSBQRE1BIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIFBETUEgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UERNQVJTVCAgIHxQRE1BIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdGhlIFBETUEgY29udHJvbCBsb2dpYyBvZiB0aGUgU1BJIGNvbnRyb2xsZXIuIFRoaXMgYml0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIHRvIDAuCisgICAgICogQHZhciBTUElfVDo6RklGT0NUTAorICAgICAqIE9mZnNldDogMHgxMCAgU1BJIEZJRk8gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFJYUlNUICAgICB8UmVjZWl2ZSBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHJlY2VpdmUgRklGTyBwb2ludGVyIGFuZCByZWNlaXZlIGNpcmN1aXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUlhGVUxMIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhbmQgdGhlIFJYRU1QVFkgYml0IHdpbGwgYmUgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhYm91dCAzIHN5c3RlbSBjbG9jayBjeWNsZXMgKyAyIHBlcmlwaGVyYWwgY2xvY2sgY3ljbGVzIGFmdGVyIGl0IGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gcmVhZCBUWFJYUlNUIChTUEl4X1NUQVRVU1syM10pIHRvIGNoZWNrIGlmIHJlc2V0IGlzIGFjY29tcGxpc2hlZCBvciBub3QuCisgICAgICogfFsxXSAgICAgfFRYUlNUICAgICB8VHJhbnNtaXQgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0cmFuc21pdCBGSUZPIHBvaW50ZXIgYW5kIHRyYW5zbWl0IGNpcmN1aXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVFhGVUxMIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBhbmQgdGhlIFRYRU1QVFkgYml0IHdpbGwgYmUgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSBoYXJkd2FyZSBhYm91dCAzIHN5c3RlbSBjbG9jayBjeWNsZXMgKyAyIHBlcmlwaGVyYWwgY2xvY2sgY3ljbGVzIGFmdGVyIGl0IGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gcmVhZCBUWFJYUlNUIChTUEl4X1NUQVRVU1syM10pIHRvIGNoZWNrIGlmIHJlc2V0IGlzIGFjY29tcGxpc2hlZCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgVFggdW5kZXJmbG93IGV2ZW50IG9jY3VycyBpbiBTUEkgU2xhdmUgbW9kZSwgdGhpcyBiaXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBTUEkgcmV0dXJuIHRvIGlkbGUgc3RhdGUuCisgICAgICogfFsyXSAgICAgfFJYVEhJRU4gICB8UmVjZWl2ZSBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSWCBGSUZPIHRocmVzaG9sZCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJYIEZJRk8gdGhyZXNob2xkIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxUWFRISUVOICAgfFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRYIEZJRk8gdGhyZXNob2xkIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVFggRklGTyB0aHJlc2hvbGQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFJYVE9JRU4gICB8U2xhdmUgUmVjZWl2ZSBUaW1lLW91dCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIHRpbWUtb3V0IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSB0aW1lLW91dCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8UlhPVklFTiAgIHxSZWNlaXZlIEZJRk8gT3ZlcnJ1biBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBvdmVycnVuIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxUWFVGUE9MICAgfFRYIFVuZGVyZmxvdyBEYXRhIFBvbGFyaXR5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBTUEkgZGF0YSBvdXQgaXMga2VlcCAwIGlmIHRoZXJlIGlzIFRYIHVuZGVyZmxvdyBldmVudCBpbiBTbGF2ZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgU1BJIGRhdGEgb3V0IGlzIGtlZXAgMSBpZiB0aGVyZSBpcyBUWCB1bmRlcmZsb3cgZXZlbnQgaW4gU2xhdmUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEuIFRoZSBUWCB1bmRlcmZsb3cgZXZlbnQgb2NjdXJzIGlmIHRoZXJlIGlzIG5vIGFueSBkYXRhIGluIFRYIEZJRk8gd2hlbiB0aGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Mi4gVGhpcyBiaXQgc2hvdWxkIGJlIHNldCBhcyAwIGluIEkyUyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDMuIFdoZW4gVFggdW5kZXJmbG93IGV2ZW50IG9jY3VycywgU1BJeF9NSVNPIHBpbiBzdGF0ZSB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhpcyBzZXR0aW5nIGV2ZW4gdGhvdWdoIFRYIEZJRk8gaXMgbm90IGVtcHR5IGFmdGVyd2FyZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgc3RvcmVkIGluIFRYIEZJRk8gd2lsbCBiZSBzZW50IHRocm91Z2ggU1BJeF9NSVNPIHBpbiBpbiB0aGUgbmV4dCB0cmFuc2ZlciBmcmFtZS4KKyAgICAgKiB8WzddICAgICB8VFhVRklFTiAgIHxUWCBVbmRlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRYIHVuZGVyZmxvdyBldmVudCBvY2N1cnMgaW4gU2xhdmUgbW9kZSwgVFhVRklGIChTUEl4X1NUQVRVU1sxOV0pIHdpbGwgYmUgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgVFggdW5kZXJmbG93IGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgVFggdW5kZXJmbG93IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgVFggdW5kZXJmbG93IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxSWEZCQ0xSICAgfFJlY2VpdmUgRklGTyBCdWZmZXIgQ2xlYXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciByZWNlaXZlIEZJRk8gcG9pbnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBSWEZVTEwgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGFuZCB0aGUgUlhFTVBUWSBiaXQgd2lsbCBiZSBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGJ5IGhhcmR3YXJlIGFib3V0IDEgc3lzdGVtIGNsb2NrIGFmdGVyIGl0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBSWCBzaGlmdCByZWdpc3RlciB3aWxsIG5vdCBiZSBjbGVhcmVkLgorICAgICAqIHxbOV0gICAgIHxUWEZCQ0xSICAgfFRyYW5zbWl0IEZJRk8gQnVmZmVyIENsZWFyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgdHJhbnNtaXQgRklGTyBwb2ludGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRYRlVMTCBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYW5kIHRoZSBUWEVNUFRZIGJpdCB3aWxsIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYWJvdXQgMSBzeXN0ZW0gY2xvY2sgYWZ0ZXIgaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIFRYIHNoaWZ0IHJlZ2lzdGVyIHdpbGwgbm90IGJlIGNsZWFyZWQuCisgICAgICogfFsyNjoyNF0gfFJYVEggICAgICB8UmVjZWl2ZSBGSUZPIFRocmVzaG9sZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSB2YWxpZCBkYXRhIGNvdW50IG9mIHRoZSByZWNlaXZlIEZJRk8gYnVmZmVyIGlzIGxhcmdlciB0aGFuIHRoZSBSWFRIIHNldHRpbmcsIHRoZSBSWFRISUYgYml0IHdpbGwgYmUgc2V0IHRvIDEsIGVsc2UgdGhlIFJYVEhJRiBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgU1BJMH5TUEkzLCB0aGUgTVNCIG9mIHRoaXMgYml0IGZpZWxkIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGlsZSBTUEkgbW9kZSA4fjE2IGJpdHMgb2YgZGF0YSBsZW5ndGguCisgICAgICogfFszMDoyOF0gfFRYVEggICAgICB8VHJhbnNtaXQgRklGTyBUaHJlc2hvbGQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgdmFsaWQgZGF0YSBjb3VudCBvZiB0aGUgdHJhbnNtaXQgRklGTyBidWZmZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBUWFRIIHNldHRpbmcsIHRoZSBUWFRISUYgYml0IHdpbGwgYmUgc2V0IHRvIDEsIGVsc2UgdGhlIFRYVEhJRiBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgU1BJMH5TUEkzLCB0aGUgTVNCIG9mIHRoaXMgYml0IGZpZWxkIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGlsZSBTUEkgbW9kZSA4fjE2IGJpdHMgb2YgZGF0YSBsZW5ndGguCisgICAgICogQHZhciBTUElfVDo6U1RBVFVTCisgICAgICogT2Zmc2V0OiAweDE0ICBTUEkgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlVTWSAgICAgIHxCdXN5IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkgY29udHJvbGxlciBpcyBpbiBpZGxlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkgY29udHJvbGxlciBpcyBpbiBidXN5IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmb2xsb3dpbmcgbGlzdGluZyBhcmUgdGhlIGJ1cyBidXN5IGNvbmRpdGlvbnM6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8YS4gU1BJeF9DVExbMF0gPSAxIGFuZCBUWEVNUFRZID0gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxiCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIFNQSSBNYXN0ZXIgbW9kZSwgU1BJeF9DVExbMF0gPSAxIGFuZCBUWEVNUFRZID0gMSBidXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgbm90IGZpbmlzaGVkIHlldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxjLiBGb3IgU1BJIE1hc3RlciBtb2RlLCBTUEl4X0NUTFswXSA9IDEgYW5kIFJYT05MWSA9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8ZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgU1BJIFNsYXZlIG1vZGUsIHRoZSBTUEl4X0NUTFswXSA9IDEgYW5kIHRoZXJlIGlzIHNlcmlhbCBjbG9jayBpbnB1dCBpbnRvIHRoZSBTUEkgY29yZSBsb2dpYyB3aGVuIHNsYXZlIHNlbGVjdCBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgU1BJIFNsYXZlIG1vZGUsIHRoZSBTUEl4X0NUTFswXSA9IDEgYW5kIHRoZSB0cmFuc21pdCBidWZmZXIgb3IgdHJhbnNtaXQgc2hpZnQgcmVnaXN0ZXIgaXMgbm90IGVtcHR5IGV2ZW4gaWYgdGhlIHNsYXZlIHNlbGVjdCBpcyBpbmFjdGl2ZS4KKyAgICAgKiB8WzFdICAgICB8VU5JVElGICAgIHxVbml0IFRyYW5zZmVyIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHRyYW5zYWN0aW9uIGhhcyBiZWVuIGZpbmlzaGVkIHNpbmNlIHRoaXMgYml0IHdhcyBjbGVhcmVkIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNQSSBjb250cm9sbGVyIGhhcyBmaW5pc2hlZCBvbmUgdW5pdCB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMl0gICAgIHxTU0FDVElGICAgfFNsYXZlIFNlbGVjdCBBY3RpdmUgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgc2VsZWN0IGFjdGl2ZSBpbnRlcnJ1cHQgd2FzIGNsZWFyZWQgb3Igbm90IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBzZWxlY3QgYWN0aXZlIGludGVycnVwdCBldmVudCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBPbmx5IGF2YWlsYWJsZSBpbiBTbGF2ZSBtb2RlLiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbM10gICAgIHxTU0lOQUlGICAgfFNsYXZlIFNlbGVjdCBJbmFjdGl2ZSBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBzZWxlY3QgaW5hY3RpdmUgaW50ZXJydXB0IHdhcyBjbGVhcmVkIG9yIG5vdCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgc2VsZWN0IGluYWN0aXZlIGludGVycnVwdCBldmVudCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBPbmx5IGF2YWlsYWJsZSBpbiBTbGF2ZSBtb2RlLiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNF0gICAgIHxTU0xJTkUgICAgfFNsYXZlIFNlbGVjdCBMaW5lIEJ1cyBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHNsYXZlIHNlbGVjdCBsaW5lIHN0YXR1cyBpcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc2xhdmUgc2VsZWN0IGxpbmUgc3RhdHVzIGlzIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgb25seSBhdmFpbGFibGUgaW4gU2xhdmUgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFNTQUNUUE9MIChTUEl4X1NTQ1RMWzJdKSBpcyBzZXQgMCwgYW5kIHRoZSBTU0xJTkUgaXMgMSwgdGhlIFNQSSBzbGF2ZSBzZWxlY3QgaXMgaW4gaW5hY3RpdmUgc3RhdHVzLgorICAgICAqIHxbNl0gICAgIHxTTFZCRUlGICAgfFNsYXZlIE1vZGUgQml0IENvdW50IEVycm9yIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU2xhdmUgbW9kZSwgd2hlbiB0aGUgc2xhdmUgc2VsZWN0IGxpbmUgZ29lcyB0byBpbmFjdGl2ZSBzdGF0ZSwgaWYgYml0IGNvdW50ZXIgaXMgbWlzbWF0Y2ggd2l0aCBEV0lEVEgsIHRoaXMgaW50ZXJydXB0IGZsYWcgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gU2xhdmUgbW9kZSBiaXQgY291bnQgZXJyb3IgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIG1vZGUgYml0IGNvdW50IGVycm9yIGV2ZW50IG9jY3Vycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiB0aGUgc2xhdmUgc2VsZWN0IGFjdGl2ZSBidXQgdGhlcmUgaXMgbm8gYW55IGJ1cyBjbG9jayBpbnB1dCwgdGhlIFNMVkJFSUYgYWxzbyBhY3RpdmUgd2hlbiB0aGUgc2xhdmUgc2VsZWN0IGdvZXMgdG8gaW5hY3RpdmUgc3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbN10gICAgIHxTTFZVUklGICAgfFNsYXZlIE1vZGUgVFggVW5kZXIgUnVuIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU2xhdmUgbW9kZSwgaWYgVFggdW5kZXJmbG93IGV2ZW50IG9jY3VycyBhbmQgdGhlIHNsYXZlIHNlbGVjdCBsaW5lIGdvZXMgdG8gaW5hY3RpdmUgc3RhdGUsIHRoaXMgaW50ZXJydXB0IGZsYWcgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gU2xhdmUgVFggdW5kZXIgcnVuIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBUWCB1bmRlciBydW4gZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs4XSAgICAgfFJYRU1QVFkgICB8UmVjZWl2ZSBGSUZPIEJ1ZmZlciBFbXB0eSBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBub3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfFs5XSAgICAgfFJYRlVMTCAgICB8UmVjZWl2ZSBGSUZPIEJ1ZmZlciBGdWxsIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIG5vdCBmdWxsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIGZ1bGwuCisgICAgICogfFsxMF0gICAgfFJYVEhJRiAgICB8UmVjZWl2ZSBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdmFsaWQgZGF0YSBjb3VudCB3aXRoaW4gdGhlIHJlY2VpdmUgRklGTyBidWZmZXIgaXMgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZXR0aW5nIHZhbHVlIG9mIFJYVEguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB2YWxpZCBkYXRhIGNvdW50IHdpdGhpbiB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUgc2V0dGluZyB2YWx1ZSBvZiBSWFRILgorICAgICAqIHxbMTFdICAgIHxSWE9WSUYgICAgfFJlY2VpdmUgRklGTyBPdmVycnVuIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBmdWxsLCB0aGUgZm9sbG93LXVwIGRhdGEgd2lsbCBiZSBkcm9wcGVkIGFuZCB0aGlzIGJpdCB3aWxsIGJlIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBGSUZPIGlzIG92ZXJydW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBpcyBvdmVycnVuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxMl0gICAgfFJYVE9JRiAgICB8UmVjZWl2ZSBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZWNlaXZlIEZJRk8gdGltZS1vdXQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgbm90IGVtcHR5IGFuZCBubyByZWFkIG9wZXJhdGlvbiBvbiByZWNlaXZlIEZJRk8gYnVmZmVyIG92ZXIgNjQgU1BJIHBlcmlwaGVyYWwgY2xvY2sgcGVyaW9kcyBpbiBNYXN0ZXIgbW9kZSBvciBvdmVyIDU3NiBTUEkgcGVyaXBoZXJhbCBjbG9jayBwZXJpb2RzIGluIFNsYXZlIG1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSByZWNlaXZlZCBGSUZPIGJ1ZmZlciBpcyByZWFkIGJ5IHNvZnR3YXJlLCB0aGUgdGltZS1vdXQgc3RhdHVzIHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxNV0gICAgfFNQSUVOU1RTICB8U1BJIEVuYWJsZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIFNQSSBjb250cm9sbGVyIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgU1BJIGNvbnRyb2xsZXIgaXMgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgU1BJIHBlcmlwaGVyYWwgY2xvY2sgaXMgYXN5bmNocm9ub3VzIHdpdGggdGhlIHN5c3RlbSBjbG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGUgU1BJIGNvbnRyb2wgbG9naWMgaXMgZGlzYWJsZWQsIHRoaXMgYml0IGluZGljYXRlcyB0aGUgcmVhbCBzdGF0dXMgb2YgU1BJIGNvbnRyb2xsZXIuCisgICAgICogfFsxNl0gICAgfFRYRU1QVFkgICB8VHJhbnNtaXQgRklGTyBCdWZmZXIgRW1wdHkgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgRklGTyBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfFsxN10gICAgfFRYRlVMTCAgICB8VHJhbnNtaXQgRklGTyBCdWZmZXIgRnVsbCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgRklGTyBidWZmZXIgaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGZ1bGwuCisgICAgICogfFsxOF0gICAgfFRYVEhJRiAgICB8VHJhbnNtaXQgRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHZhbGlkIGRhdGEgY291bnQgd2l0aGluIHRoZSB0cmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUgc2V0dGluZyB2YWx1ZSBvZiBUWFRILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdmFsaWQgZGF0YSBjb3VudCB3aXRoaW4gdGhlIHRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc2V0dGluZyB2YWx1ZSBvZiBUWFRILgorICAgICAqIHxbMTldICAgIHxUWFVGSUYgICAgfFRYIFVuZGVyZmxvdyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIFRYIHVuZGVyZmxvdyBldmVudCBvY2N1cnMsIHRoaXMgYml0IHdpbGwgYmUgc2V0IHRvIDEsIHRoZSBzdGF0ZSBvZiBkYXRhIG91dHB1dCBwaW4gZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBUWFVGUE9MLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE5vIGRhdGEgaW4gVHJhbnNtaXQgRklGTyBhbmQgVFggc2hpZnQgcmVnaXN0ZXIgd2hlbiB0aGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpcyBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZSAxOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUgMjogSWYgcmVzZXQgc2xhdmUncyB0cmFuc21pc3Npb24gY2lyY3VpdCB3aGVuIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaXMgYWN0aXZlLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdG8gMSBhZnRlciAyIHBlcmlwaGVyYWwgY2xvY2sgY3ljbGVzICsgMyBzeXN0ZW0gY2xvY2sgY3ljbGVzIHNpbmNlIHRoZSByZXNldCBvcGVyYXRpb24gaXMgZG9uZS4KKyAgICAgKiB8WzIzXSAgICB8VFhSWFJTVCAgIHxUWCBvciBSWCBSZXNldCBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlc2V0IGZ1bmN0aW9uIG9mIFRYUlNUIG9yIFJYUlNUIGlzIGRvbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERvaW5nIHRoZSByZXNldCBmdW5jdGlvbiBvZiBUWFJTVCBvciBSWFJTVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBCb3RoIHRoZSByZXNldCBvcGVyYXRpb25zIG9mIFRYUlNUIGFuZCBSWFJTVCBuZWVkIDMgc3lzdGVtIGNsb2NrIGN5Y2xlcyArIDIgcGVyaXBoZXJhbCBjbG9jayBjeWNsZXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBjaGVjayB0aGUgc3RhdHVzIG9mIHRoaXMgYml0IHRvIG1vbml0b3IgdGhlIHJlc2V0IGZ1bmN0aW9uIGlzIGRvaW5nIG9yIGRvbmUuCisgICAgICogfFsyNzoyNF0gfFJYQ05UICAgICB8UmVjZWl2ZSBGSUZPIERhdGEgQ291bnQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBpbmRpY2F0ZXMgdGhlIHZhbGlkIGRhdGEgY291bnQgb2YgcmVjZWl2ZSBGSUZPIGJ1ZmZlci4KKyAgICAgKiB8WzMxOjI4XSB8VFhDTlQgICAgIHxUcmFuc21pdCBGSUZPIERhdGEgQ291bnQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBpbmRpY2F0ZXMgdGhlIHZhbGlkIGRhdGEgY291bnQgb2YgdHJhbnNtaXQgRklGTyBidWZmZXIuCisgICAgICogQHZhciBTUElfVDo6VFgKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIFNQSSBEYXRhIFRyYW5zbWl0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8VFggICAgICAgIHxEYXRhIFRyYW5zbWl0IFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRhdGEgdHJhbnNtaXQgcmVnaXN0ZXJzIHBhc3MgdGhyb3VnaCB0aGUgdHJhbnNtaXR0ZWQgZGF0YSBpbnRvIHRoZSA0LWxldmVsIHRyYW5zbWl0IEZJRk8gYnVmZmVycworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBudW1iZXIgb2YgdmFsaWQgYml0cyBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIERXSURUSCAoU1BJeF9DVExbMTI6OF0pIGluIFNQSSBtb2RlIG9yIFdEV0lEVEggKFNQSXhfSTJTQ1RMWzU6NF0pIGluIEkyUyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNQSSBtb2RlLCBpZiBEV0lEVEggaXMgc2V0IHRvIDB4MDgsIHRoZSBiaXRzIFRYWzc6MF0gd2lsbCBiZSB0cmFuc21pdHRlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIERXSURUSCBpcyBzZXQgdG8gMHgwMCAsIHRoZSBTUEkgY29udHJvbGxlciB3aWxsIHBlcmZvcm0gYSAzMi1iaXQgdHJhbnNmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gSTJTIG1vZGUsIGlmIFdEV0lEVEggKFNQSXhfSTJTQ1RMWzU6NF0pIGlzIHNldCB0byAweDIsIHRoZSBkYXRhIHdpZHRoIG9mIGF1ZGlvIGNoYW5uZWwgaXMgMjQtYml0IGFuZCBjb3JyZXNwb25kaW5nIHRvIFRYWzIzOjBdCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgV0RXSURUSCBpcyBzZXQgYXMgMHgwLCAweDEsIG9yIDB4MywgYWxsIGJpdHMgb2YgdGhpcyBmaWVsZCBhcmUgdmFsaWQgYW5kIHJlZmVycmVkIHRvIHRoZSBkYXRhIGFycmFuZ2VtZW50IGluIEkyUyBtb2RlIEZJRk8gb3BlcmF0aW9uIHNlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBNYXN0ZXIgbW9kZSwgU1BJIGNvbnRyb2xsZXIgd2lsbCBzdGFydCB0byB0cmFuc2ZlciB0aGUgU1BJIGJ1cyBjbG9jayBhZnRlciAxIEFQQiBjbG9jayBhbmQgNiBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcyBhZnRlciB1c2VyIHdyaXRlcyB0byB0aGlzIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgU1BJX1Q6OlJYCisgICAgICogT2Zmc2V0OiAweDMwICBTUEkgRGF0YSBSZWNlaXZlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8UlggICAgICAgIHxEYXRhIFJlY2VpdmUgUmVnaXN0ZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVyZSBhcmUgNC1sZXZlbCBGSUZPIGJ1ZmZlcnMgaW4gdGhpcyBjb250cm9sbGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkYXRhIHJlY2VpdmUgcmVnaXN0ZXIgaG9sZHMgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBTUEkgZGF0YSBpbnB1dCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIFJYRU1QVFkgKFNQSXhfU1RBVFVTWzhdIG9yIFNQSXhfSTJTU1RTWzhdKSBpcyBub3Qgc2V0IHRvIDEsIHRoZSByZWNlaXZlIEZJRk8gYnVmZmVycyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBzb2Z0d2FyZSBieSByZWFkaW5nIHRoaXMgcmVnaXN0ZXIuCisgICAgICogQHZhciBTUElfVDo6STJTQ1RMCisgICAgICogT2Zmc2V0OiAweDYwICBJMlMgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEkyU0VOICAgICB8STJTIENvbnRyb2xsZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEaXNhYmxlZCBJMlMgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlZCBJMlMgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEuIElmIGVuYWJsZSB0aGlzIGJpdCwgSTJTeF9CQ0xLIHdpbGwgc3RhcnQgdG8gb3V0cHV0IGluIE1hc3RlciBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCZWZvcmUgY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb25zIG9mIFNQSXhfSTJTQ1RMLCBTUEl4X0kyU0NMSywgYW5kIFNQSXhfRklGT0NUTCByZWdpc3RlcnMsIHVzZXIgc2hhbGwgY2xlYXIgdGhlIEkyU0VOIChTUEl4X0kyU0NUTFswXSkgYW5kIGNvbmZpcm0gdGhlIEkyU0VOU1RTIChTUEl4X0kyU1NUU1sxNV0pIGlzIDAuCisgICAgICogfFsxXSAgICAgfFRYRU4gICAgICB8VHJhbnNtaXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEYXRhIHRyYW5zbWl0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEYXRhIHRyYW5zbWl0IEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFJYRU4gICAgICB8UmVjZWl2ZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgcmVjZWl2ZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSByZWNlaXZlIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfE1VVEUgICAgICB8VHJhbnNtaXQgTXV0ZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IGRhdGEgaXMgc2hpZnRlZCBmcm9tIGJ1ZmZlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgY2hhbm5lbCB6ZXJvLgorICAgICAqIHxbNTo0XSAgIHxXRFdJRFRIICAgfFdvcmQgV2lkdGgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IGRhdGEgc2l6ZSBpcyA4LWJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IGRhdGEgc2l6ZSBpcyAxNi1iaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBkYXRhIHNpemUgaXMgMjQtYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gZGF0YSBzaXplIGlzIDMyLWJpdC4KKyAgICAgKiB8WzZdICAgICB8TU9OTyAgICAgIHxNb25hdXJhbCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgaXMgc3RlcmVvIGZvcm1hdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSBpcyBtb25hdXJhbCBmb3JtYXQuCisgICAgICogfFs3XSAgICAgfE9SREVSICAgICB8U3RlcmVvIERhdGEgT3JkZXIgaW4gRklGTworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMZWZ0IGNoYW5uZWwgZGF0YSBhdCBoaWdoIGJ5dGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExlZnQgY2hhbm5lbCBkYXRhIGF0IGxvdyBieXRlLgorICAgICAqIHxbOF0gICAgIHxTTEFWRSAgICAgfFNsYXZlIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJMlMgY2FuIG9wZXJhdGUgYXMgbWFzdGVyIG9yIHNsYXZlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIE1hc3RlciBtb2RlLCBJMlN4X0JDTEsgYW5kIEkyU3hfTFJDTEsgcGlucyBhcmUgb3V0cHV0IG1vZGUgYW5kIHNlbmQgYml0IGNsb2NrIGZyb20gTnVNaWNybyBNMjM1MSBzZXJpZXMgdG8gYXVkaW8gQ09ERUMgY2hpcAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNsYXZlIG1vZGUsIEkyU3hfQkNMSyBhbmQgSTJTeF9MUkNMSyBwaW5zIGFyZSBpbnB1dCBtb2RlIGFuZCBJMlN4X0JDTEsgYW5kIEkyU3hfTFJDTEsgc2lnbmFscyBhcmUgcmVjZWl2ZWQgZnJvbSBvdXRlciBhdWRpbyBDT0RFQyBjaGlwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXN0ZXIgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgbW9kZS4KKyAgICAgKiB8WzE1XSAgICB8TUNMS0VOICAgIHxNYXN0ZXIgQ2xvY2sgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIE1DTEtFTiBpcyBzZXQgdG8gMSwgSTJTIGNvbnRyb2xsZXIgd2lsbCBnZW5lcmF0ZSBtYXN0ZXIgY2xvY2sgb24gU1BJeF9JMlNNQ0xLIHBpbiBmb3IgZXh0ZXJuYWwgYXVkaW8gZGV2aWNlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTWFzdGVyIGNsb2NrIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNYXN0ZXIgY2xvY2sgRW5hYmxlZC4KKyAgICAgKiB8WzE2XSAgICB8UlpDRU4gICAgIHxSaWdodCBDaGFubmVsIFplcm8gQ3Jvc3MgRGV0ZWN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd2hlbiByaWdodCBjaGFubmVsIGRhdGEgc2lnbiBiaXQgY2hhbmdlIG9yIG5leHQgc2hpZnQgZGF0YSBiaXRzIGFyZSBhbGwgMCB0aGVuIFJaQ0lGIGZsYWcgaW4gU1BJeF9JMlNTVFMgcmVnaXN0ZXIgaXMgc2V0IHRvIDEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGluIHRyYW5zbWl0IG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmlnaHQgY2hhbm5lbCB6ZXJvIGNyb3NzIGRldGVjdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmlnaHQgY2hhbm5lbCB6ZXJvIGNyb3NzIGRldGVjdGlvbiBFbmFibGVkLgorICAgICAqIHxbMTddICAgIHxMWkNFTiAgICAgfExlZnQgQ2hhbm5lbCBaZXJvIENyb3NzIERldGVjdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHdoZW4gbGVmdCBjaGFubmVsIGRhdGEgc2lnbiBiaXQgY2hhbmdlcyBvciBuZXh0IHNoaWZ0IGRhdGEgYml0cyBhcmUgYWxsIDAgdGhlbiBMWkNJRiBmbGFnIGluIFNQSXhfSTJTU1RTIHJlZ2lzdGVyIGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpbiB0cmFuc21pdCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExlZnQgY2hhbm5lbCB6ZXJvIGNyb3NzIGRldGVjdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTGVmdCBjaGFubmVsIHplcm8gY3Jvc3MgZGV0ZWN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyM10gICAgfFJYTENIICAgICB8UmVjZWl2ZSBMZWZ0IENoYW5uZWwgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gbW9uYXVyYWwgZm9ybWF0IGlzIHNlbGVjdGVkIChNT05PID0gMSksIEkyUyBjb250cm9sbGVyIHdpbGwgcmVjZWl2ZSByaWdodCBjaGFubmVsIGRhdGEgaWYgUlhMQ0ggaXMgc2V0IHRvIDAsIGFuZCByZWNlaXZlIGxlZnQgY2hhbm5lbCBkYXRhIGlmIFJYTENIIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIHJpZ2h0IGNoYW5uZWwgZGF0YSBpbiBNb25vIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgbGVmdCBjaGFubmVsIGRhdGEgaW4gTW9ubyBtb2RlLgorICAgICAqIHxbMjRdICAgIHxSWkNJRU4gICAgfFJpZ2h0IENoYW5uZWwgWmVybyBDcm9zcyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEludGVycnVwdCBvY2N1cnMgaWYgdGhpcyBiaXQgaXMgc2V0IHRvIDEgYW5kIHJpZ2h0IGNoYW5uZWwgemVybyBjcm9zcyBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyNV0gICAgfExaQ0lFTiAgICB8TGVmdCBDaGFubmVsIFplcm8gQ3Jvc3MgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbnRlcnJ1cHQgb2NjdXJzIGlmIHRoaXMgYml0IGlzIHNldCB0byAxIGFuZCBsZWZ0IGNoYW5uZWwgemVybyBjcm9zcyBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyOToyOF0gfEZPUk1BVCAgICB8RGF0YSBGb3JtYXQgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBJMlMgZGF0YSBmb3JtYXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBNU0IganVzdGlmaWVkIGRhdGEgZm9ybWF0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUENNIG1vZGUgQS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBDTSBtb2RlIEIuCisgICAgICogQHZhciBTUElfVDo6STJTQ0xLCisgICAgICogT2Zmc2V0OiAweDY0ICBJMlMgQ2xvY2sgRGl2aWRlciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzY6MF0gICB8TUNMS0RJViAgIHxNYXN0ZXIgQ2xvY2sgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIE1DTEtFTiBpcyBzZXQgdG8gMSwgSTJTIGNvbnRyb2xsZXIgd2lsbCBnZW5lcmF0ZSBtYXN0ZXIgY2xvY2sgZm9yIGV4dGVybmFsIGF1ZGlvIGRldmljZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZyZXF1ZW5jeSBvZiBtYXN0ZXIgY2xvY2ssIEZfTUNMSywgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb25zOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIE1DTEtESVYgPj0gMSwgRl9NQ0xLID0gRl9JMlNDTEsvKDJ4KE1DTEtESVYpKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBNQ0xLRElWID0gMCwgRl9NQ0xLID0gRl9JMlNDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8d2hlcmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxpcyB0aGUgZnJlcXVlbmN5IG9mIEkyUyBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSwgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBDTEtfQ0xLU0VMMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGX0kyU0NMSyBpcyB0aGUgZnJlcXVlbmN5IG9mIEkyUyBwZXJpcGhlcmFsIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIGdlbmVyYWwsIHRoZSBtYXN0ZXIgY2xvY2sgcmF0ZSBpcyAyNTYgdGltZXMgc2FtcGxpbmcgY2xvY2sgcmF0ZS4KKyAgICAgKiB8WzE3OjhdICB8QkNMS0RJViAgIHxCaXQgQ2xvY2sgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBJMlMgY29udHJvbGxlciB3aWxsIGdlbmVyYXRlIGJpdCBjbG9jayBpbiBNYXN0ZXIgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY2xvY2sgZnJlcXVlbmN5IG9mIGJpdCBjbG9jaywgRl9CQ0xLLCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGX0JDTEsgPSBGX0kyU0NMSy8oMngoQkNMS0RJViArIDEpKSwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx3aGVyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZfSTJTQ0xLIGlzIHRoZSBmcmVxdWVuY3kgb2YgSTJTIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlLCB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIENMS19DTEtTRUwyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIEkyUyBTbGF2ZSBtb2RlLCB0aGlzIGZpZWxkIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBmcmVxdWVuY3kgb2YgcGVyaXBoZXJhbCBjbG9jayBhbmQgaXQncyBkZXRlcm1pbmVkIGJ5IEZfSTJTQ0xLLyhCQ0xLRElWLzIgKyAxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcGVyaXBoZXJhbCBjbG9jayBmcmVxdWVuY3kgaW4gSTJTIFNsYXZlIG1vZGUgbXVzdCBiZSBlcXVhbCB0byBvciBmYXN0ZXIgdGhhbiA2IHRpbWVzIG9mIGlucHV0IGJpdCBjbG9jay4KKyAgICAgKiBAdmFyIFNQSV9UOjpJMlNTVFMKKyAgICAgKiBPZmZzZXQ6IDB4NjggIEkyUyBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNF0gICAgIHxSSUdIVCAgICAgfFJpZ2h0IENoYW5uZWwgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgdHJhbnNtaXQgZGF0YSBpcyBiZWxvbmcgdG8gd2hpY2ggY2hhbm5lbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTGVmdCBjaGFubmVsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSaWdodCBjaGFubmVsLgorICAgICAqIHxbOF0gICAgIHxSWEVNUFRZICAgfFJlY2VpdmUgRklGTyBCdWZmZXIgRW1wdHkgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIEZJRk8gYnVmZmVyIGlzIGVtcHR5LgorICAgICAqIHxbOV0gICAgIHxSWEZVTEwgICAgfFJlY2VpdmUgRklGTyBCdWZmZXIgRnVsbCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBmdWxsLgorICAgICAqIHxbMTBdICAgIHxSWFRISUYgICAgfFJlY2VpdmUgRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHZhbGlkIGRhdGEgY291bnQgd2l0aGluIHRoZSByZWNlaXZlIEZJRk8gYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc2V0dGluZyB2YWx1ZSBvZiBSWFRILgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdmFsaWQgZGF0YSBjb3VudCB3aXRoaW4gdGhlIHJlY2VpdmUgRklGTyBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIHNldHRpbmcgdmFsdWUgb2YgUlhUSC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBSWFRISUVOID0gMSBhbmQgUlhUSElGID0gMSwgdGhlIFNQSS9JMlMgY29udHJvbGxlciB3aWxsIGdlbmVyYXRlIGEgU1BJIGludGVycnVwdCByZXF1ZXN0LgorICAgICAqIHxbMTFdICAgIHxSWE9WSUYgICAgfFJlY2VpdmUgRklGTyBPdmVycnVuIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgcmVjZWl2ZSBGSUZPIGJ1ZmZlciBpcyBmdWxsLCB0aGUgZm9sbG93LXVwIGRhdGEgd2lsbCBiZSBkcm9wcGVkIGFuZCB0aGlzIGJpdCB3aWxsIGJlIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsxMl0gICAgfFJYVE9JRiAgICB8UmVjZWl2ZSBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZWNlaXZlIEZJRk8gdGltZS1vdXQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgRklGTyBidWZmZXIgaXMgbm90IGVtcHR5IGFuZCBubyByZWFkIG9wZXJhdGlvbiBvbiByZWNlaXZlIEZJRk8gYnVmZmVyIG92ZXIgNjQgU1BJIHBlcmlwaGVyYWwgY2xvY2sgcGVyaW9kIGluIE1hc3RlciBtb2RlIG9yIG92ZXIgNTc2IFNQSSBwZXJpcGhlcmFsIGNsb2NrIHBlcmlvZCBpbiBTbGF2ZSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgcmVjZWl2ZWQgRklGTyBidWZmZXIgaXMgcmVhZCBieSBzb2Z0d2FyZSwgdGhlIHRpbWUtb3V0IHN0YXR1cyB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMTVdICAgIHxJMlNFTlNUUyAgfEkyUyBFbmFibGUgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBTUEkvSTJTIGNvbnRyb2wgbG9naWMgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBTUEkvSTJTIGNvbnRyb2wgbG9naWMgaXMgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgU1BJIHBlcmlwaGVyYWwgY2xvY2sgaXMgYXN5bmNocm9ub3VzIHdpdGggdGhlIHN5c3RlbSBjbG9jaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGUgU1BJL0kyUyBjb250cm9sIGxvZ2ljIGlzIGRpc2FibGVkLCB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHJlYWwgc3RhdHVzIG9mIFNQSS9JMlMgY29udHJvbCBsb2dpYyBmb3IgdXNlci4KKyAgICAgKiB8WzE2XSAgICB8VFhFTVBUWSAgIHxUcmFuc21pdCBGSUZPIEJ1ZmZlciBFbXB0eSBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgRklGTyBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgKiB8WzE3XSAgICB8VFhGVUxMICAgIHxUcmFuc21pdCBGSUZPIEJ1ZmZlciBGdWxsIEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBGSUZPIGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgRklGTyBidWZmZXIgaXMgZnVsbC4KKyAgICAgKiB8WzE4XSAgICB8VFhUSElGICAgIHxUcmFuc21pdCBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdmFsaWQgZGF0YSBjb3VudCB3aXRoaW4gdGhlIHRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGxhcmdlciB0aGFuIHRoZSBzZXR0aW5nIHZhbHVlIG9mIFRYVEguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB2YWxpZCBkYXRhIGNvdW50IHdpdGhpbiB0aGUgdHJhbnNtaXQgRklGTyBidWZmZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZXR0aW5nIHZhbHVlIG9mIFRYVEguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgVFhUSElFTiA9IDEgYW5kIFRYVEhJRiA9IDEsIHRoZSBTUEkvSTJTIGNvbnRyb2xsZXIgd2lsbCBnZW5lcmF0ZSBhIFNQSSBpbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICAgKiB8WzE5XSAgICB8VFhVRklGICAgIHxUcmFuc21pdCBGSUZPIFVuZGVyZmxvdyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHRyYW5zbWl0IEZJRk8gYnVmZmVyIGlzIGVtcHR5IGFuZCB0aGVyZSBpcyBubyBkYXR1bSB3cml0dGVuIGludG8gdGhlIEZJRk8gYnVmZmVyLCBpZiB0aGVyZSBpcyBtb3JlIGJ1cyBjbG9jayBpbnB1dCwgdGhpcyBiaXQgd2lsbCBiZSBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMjBdICAgIHxSWkNJRiAgICAgfFJpZ2h0IENoYW5uZWwgWmVybyBDcm9zcyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB6ZXJvIGNyb3NzIGV2ZW50IG9jY3VycmVkIG9uIHJpZ2h0IGNoYW5uZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFplcm8gY3Jvc3MgZXZlbnQgb2NjdXJyZWQgb24gcmlnaHQgY2hhbm5lbC4KKyAgICAgKiB8WzIxXSAgICB8TFpDSUYgICAgIHxMZWZ0IENoYW5uZWwgWmVybyBDcm9zcyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyB6ZXJvIGNyb3NzIGV2ZW50IG9jY3VycmVkIG9uIGxlZnQgY2hhbm5lbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gWmVybyBjcm9zcyBldmVudCBvY2N1cnJlZCBvbiBsZWZ0IGNoYW5uZWwuCisgICAgICogfFsyM10gICAgfFRYUlhSU1QgICB8VFggb3IgUlggUmVzZXQgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSByZXNldCBmdW5jdGlvbiBvZiBUWFJTVCBvciBSWFJTVCBpcyBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEb2luZyB0aGUgcmVzZXQgZnVuY3Rpb24gb2YgVFhSU1Qgb3IgUlhSU1QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQm90aCB0aGUgcmVzZXQgb3BlcmF0aW9ucyBvZiBUWFJTVCBhbmQgUlhSU1QgbmVlZCAzIHN5c3RlbSBjbG9jayBjeWNsZXMgKyAyIHBlcmlwaGVyYWwgY2xvY2sgY3ljbGVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGlzIGJpdCB0byBtb25pdG9yIHRoZSByZXNldCBmdW5jdGlvbiBpcyBkb2luZyBvciBkb25lLgorICAgICAqIHxbMjY6MjRdIHxSWENOVCAgICAgfFJlY2VpdmUgRklGTyBEYXRhIENvdW50IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaW5kaWNhdGVzIHRoZSB2YWxpZCBkYXRhIGNvdW50IG9mIHJlY2VpdmUgRklGTyBidWZmZXIuCisgICAgICogfFszMDoyOF0gfFRYQ05UICAgICB8VHJhbnNtaXQgRklGTyBEYXRhIENvdW50IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgaW5kaWNhdGVzIHRoZSB2YWxpZCBkYXRhIGNvdW50IG9mIHRyYW5zbWl0IEZJRk8gYnVmZmVyLgorICAgICAqLworCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gU1BJIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ0xLRElWOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFNQSSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNTQ1RMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBTUEkgU2xhdmUgU2VsZWN0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQRE1BQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gU1BJIFBETUEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRklGT0NUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIFNQSSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBTUEkgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsyXTsKKyAgICBfX08gIHVpbnQzMl90IFRYOyAgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBTUEkgRGF0YSBUcmFuc21pdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVszXTsKKyAgICBfX0kgIHVpbnQzMl90IFJYOyAgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBTUEkgRGF0YSBSZWNlaXZlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMlsxMV07CisgICAgX19JTyB1aW50MzJfdCBJMlNDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDA2MF0gSTJTIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSTJTQ0xLOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNjRdIEkyUyBDbG9jayBEaXZpZGVyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEkyU1NUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDY4XSBJMlMgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK30gU1BJX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFNQSV9DT05TVCBTUEkgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgU1BJIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgU1BJX0NUTF9TUElFTl9Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFNQSUVOIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9DVExfU1BJRU5fTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfQ1RMX1NQSUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBTUElFTiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9DVExfUlhORUdfUG9zICAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBSWE5FRyBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBTUElfQ1RMX1JYTkVHX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0NUTF9SWE5FR19Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogUlhORUcgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfQ1RMX1RYTkVHX1BvcyAgICAgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogVFhORUcgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0NUTF9UWE5FR19Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9DVExfVFhORUdfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFRYTkVHIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0NUTF9DTEtQT0xfUG9zICAgICAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IENMS1BPTCBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9DVExfQ0xLUE9MX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfQ1RMX0NMS1BPTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBDTEtQT0wgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9DVExfU1VTUElUVl9Qb3MgICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBTVVNQSVRWIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTUElfQ1RMX1NVU1BJVFZfTXNrICAgICAgICAgICAgICAoMHhmdWwgPDwgU1BJX0NUTF9TVVNQSVRWX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogU1VTUElUViBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfQ1RMX0RXSURUSF9Qb3MgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogRFdJRFRIIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0NUTF9EV0lEVEhfTXNrICAgICAgICAgICAgICAgKDB4MWZ1bCA8PCBTUElfQ1RMX0RXSURUSF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IERXSURUSCBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0NUTF9MU0JfUG9zICAgICAgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IExTQiBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9DVExfTFNCX01zayAgICAgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfQ1RMX0xTQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBMU0IgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9DVExfSEFMRkRQWF9Qb3MgICAgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBIQUxGRFBYIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTUElfQ1RMX0hBTEZEUFhfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0NUTF9IQUxGRFBYX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogSEFMRkRQWCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfQ1RMX1JYT05MWV9Qb3MgICAgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogUlhPTkxZIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0NUTF9SWE9OTFlfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9DVExfUlhPTkxZX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFJYT05MWSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0NUTF9VTklUSUVOX1BvcyAgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFVOSVRJRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNQSV9DVExfVU5JVElFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfQ1RMX1VOSVRJRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBVTklUSUVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9DVExfU0xBVkVfUG9zICAgICAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBTTEFWRSBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBTUElfQ1RMX1NMQVZFX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0NUTF9TTEFWRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogU0xBVkUgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfQ1RMX1JFT1JERVJfUG9zICAgICAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNUTDogUkVPUkRFUiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0NUTF9SRU9SREVSX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9DVExfUkVPUkRFUl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IFJFT1JERVIgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0NUTF9EQVRESVJfUG9zICAgICAgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpDVEw6IERBVERJUiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9DVExfREFURElSX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfQ1RMX0RBVERJUl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q1RMOiBEQVRESVIgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9DTEtESVZfRElWSURFUl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Q0xLRElWOiBESVZJREVSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfQ0xLRElWX0RJVklERVJfTXNrICAgICAgICAgICAoMHgxZmZ1bCA8PCBTUElfQ0xLRElWX0RJVklERVJfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkNMS0RJVjogRElWSURFUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1NDVExfU1NfUG9zICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNTQ1RMOiBTUyBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NTQ1RMX1NTX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TU0NUTF9TU19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogU1MgTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NTQ1RMX1NTQUNUUE9MX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogU1NBQ1RQT0wgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9TU0NUTF9TU0FDVFBPTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTUElfU1NDVExfU1NBQ1RQT0xfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1NDVEw6IFNTQUNUUE9MIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TU0NUTF9BVVRPU1NfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1NDVEw6IEFVVE9TUyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfU1NDVExfQVVUT1NTX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NTQ1RMX0FVVE9TU19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNTQ1RMOiBBVVRPU1MgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1NDVExfU0xWQkVJRU5fUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNTQ1RMOiBTTFZCRUlFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NTQ1RMX1NMVkJFSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TU0NUTF9TTFZCRUlFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogU0xWQkVJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NTQ1RMX1NMVlVSSUVOX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogU0xWVVJJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9TU0NUTF9TTFZVUklFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTUElfU1NDVExfU0xWVVJJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1NDVEw6IFNMVlVSSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TU0NUTF9TU0FDVElFTl9Qb3MgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1NDVEw6IFNTQUNUSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfU1NDVExfU1NBQ1RJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NTQ1RMX1NTQUNUSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNTQ1RMOiBTU0FDVElFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1NDVExfU1NJTkFJRU5fUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNTQ1RMOiBTU0lOQUlFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NTQ1RMX1NTSU5BSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TU0NUTF9TU0lOQUlFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTU0NUTDogU1NJTkFJRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1BETUFDVExfVFhQRE1BRU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpQRE1BQ1RMOiBUWFBETUFFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayAgICAgICAgICgweDF1bCA8PCBTUElfUERNQUNUTF9UWFBETUFFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTUElfVDo6UERNQUNUTDogVFhQRE1BRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9QRE1BQ1RMX1JYUERNQUVOX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6UERNQUNUTDogUlhQRE1BRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTUElfUERNQUNUTF9SWFBETUFFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1BJX1BETUFDVExfUlhQRE1BRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlBETUFDVEw6IFJYUERNQUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfUERNQUNUTF9QRE1BUlNUX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlBETUFDVEw6IFBETUFSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1BJX1BETUFDVExfUERNQVJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNQSV9QRE1BQ1RMX1BETUFSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpQRE1BQ1RMOiBQRE1BUlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0ZJRk9DVExfUlhSU1RfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBSWFJTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1JYUlNUX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfRklGT0NUTF9SWFJTVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogUlhSU1QgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1RYUlNUX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogVFhSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfRklGT0NUTF9UWFJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0ZJRk9DVExfVFhSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFRYUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfRklGT0NUTF9SWFRISUVOX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFJYVEhJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1BJX0ZJRk9DVExfUlhUSElFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNQSV9GSUZPQ1RMX1JYVEhJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBSWFRISUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0ZJRk9DVExfVFhUSElFTl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBUWFRISUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1RYVEhJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTUElfRklGT0NUTF9UWFRISUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogVFhUSElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1JYVE9JRU5fUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogUlhUT0lFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTUElfRklGT0NUTF9SWFRPSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU1BJX0ZJRk9DVExfUlhUT0lFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFJYVE9JRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfRklGT0NUTF9SWE9WSUVOX1BvcyAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFJYT1ZJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1BJX0ZJRk9DVExfUlhPVklFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNQSV9GSUZPQ1RMX1JYT1ZJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBSWE9WSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0ZJRk9DVExfVFhVRlBPTF9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBUWFVGUE9MIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1RYVUZQT0xfTXNrICAgICAgICAgICgweDF1bCA8PCBTUElfRklGT0NUTF9UWFVGUE9MX1BvcykgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogVFhVRlBPTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1RYVUZJRU5fUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogVFhVRklFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTUElfRklGT0NUTF9UWFVGSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU1BJX0ZJRk9DVExfVFhVRklFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFRYVUZJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfRklGT0NUTF9SWEZCQ0xSX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFJYRkJDTFIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1BJX0ZJRk9DVExfUlhGQkNMUl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNQSV9GSUZPQ1RMX1JYRkJDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBSWEZCQ0xSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0ZJRk9DVExfVFhGQkNMUl9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBUWEZCQ0xSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1RYRkJDTFJfTXNrICAgICAgICAgICgweDF1bCA8PCBTUElfRklGT0NUTF9UWEZCQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogVFhGQkNMUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9GSUZPQ1RMX1JYVEhfUG9zICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6RklGT0NUTDogUlhUSCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfRklGT0NUTF9SWFRIX01zayAgICAgICAgICAgICAoMHg3dWwgPDwgU1BJX0ZJRk9DVExfUlhUSF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFJYVEggTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfRklGT0NUTF9UWFRIX1BvcyAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkZJRk9DVEw6IFRYVEggUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0ZJRk9DVExfVFhUSF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IFNQSV9GSUZPQ1RMX1RYVEhfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpGSUZPQ1RMOiBUWFRIIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19CVVNZX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IEJVU1kgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfQlVTWV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBCVVNZIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfVU5JVElGX1BvcyAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBVTklUSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1VOSVRJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19VTklUSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVU5JVElGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1NTQUNUSUZfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogU1NBQ1RJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19TU0FDVElGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfU1NBQ1RJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFNTQUNUSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19TU0lOQUlGX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFNTSU5BSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfU1NJTkFJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1NTSU5BSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBTU0lOQUlGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfU1NMSU5FX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBTU0xJTkUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1NTTElORV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19TU0xJTkVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogU1NMSU5FIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1NMVkJFSUZfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogU0xWQkVJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19TTFZCRUlGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfU0xWQkVJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFNMVkJFSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19TTFZVUklGX1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFNMVlVSSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfU0xWVVJJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1NMVlVSSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBTTFZVUklGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfUlhFTVBUWV9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBSWEVNUFRZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1JYRU1QVFlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19SWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogUlhFTVBUWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1JYRlVMTF9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogUlhGVUxMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19SWEZVTExfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfUlhGVUxMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFJYRlVMTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19SWFRISUZfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFJYVEhJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfUlhUSElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1JYVEhJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBSWFRISUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfUlhPVklGX1BvcyAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBSWE9WSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1JYT1ZJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19SWE9WSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogUlhPVklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1JYVE9JRl9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogUlhUT0lGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19SWFRPSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfUlhUT0lGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFJYVE9JRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19TUElFTlNUU19Qb3MgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFNQSUVOU1RTIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfU1BJRU5TVFNfTXNrICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1NQSUVOU1RTX1BvcykgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBTUElFTlNUUyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfVFhFTVBUWV9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBUWEVNUFRZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1RYRU1QVFlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19UWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVFhFTVBUWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1RYRlVMTF9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVFhGVUxMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19UWEZVTExfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfVFhGVUxMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFRYRlVMTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19UWFRISUZfUG9zICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFRYVEhJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfVFhUSElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfU1RBVFVTX1RYVEhJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBUWFRISUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfVFhVRklGX1BvcyAgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBUWFVGSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1RYVUZJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX1NUQVRVU19UWFVGSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVFhVRklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfU1RBVFVTX1RYUlhSU1RfUG9zICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVFhSWFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NUQVRVU19UWFJYUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9TVEFUVVNfVFhSWFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFRYUlhSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1NUQVRVU19SWENOVF9Qb3MgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpTVEFUVVM6IFJYQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TVEFUVVNfUlhDTlRfTXNrICAgICAgICAgICAgICgweGZ1bCA8PCBTUElfU1RBVFVTX1JYQ05UX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBSWENOVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9TVEFUVVNfVFhDTlRfUG9zICAgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6U1RBVFVTOiBUWENOVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfU1RBVFVTX1RYQ05UX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgU1BJX1NUQVRVU19UWENOVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlNUQVRVUzogVFhDTlQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfVFhfVFhfUG9zICAgICAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OlRYOiBUWCBQb3NpdGlvbiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1RYX1RYX01zayAgICAgICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTUElfVFhfVFhfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpUWDogVFggTWFzayAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX1JYX1JYX1BvcyAgICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpSWDogUlggUG9zaXRpb24gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9SWF9SWF9Nc2sgICAgICAgICAgICAgICAgICAgICgweGZmZmZmZmZmdWwgPDwgU1BJX1JYX1JYX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6Ulg6IFJYIE1hc2sgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfSTJTRU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBJMlNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX0kyU0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU0NUTF9JMlNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogSTJTRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX1RYRU5fUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogVFhFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9UWEVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNDVExfVFhFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFRYRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9SWEVOX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFJYRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfUlhFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTQ1RMX1JYRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBSWEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfTVVURV9Qb3MgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBNVVRFIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX01VVEVfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU0NUTF9NVVRFX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogTVVURSBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX1dEV0lEVEhfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogV0RXSURUSCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9XRFdJRFRIX01zayAgICAgICAgICAgKDB4M3VsIDw8IFNQSV9JMlNDVExfV0RXSURUSF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFdEV0lEVEggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9NT05PX1BvcyAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IE1PTk8gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfTU9OT19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTQ1RMX01PTk9fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBNT05PIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfT1JERVJfUG9zICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBPUkRFUiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX09SREVSX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU0NUTF9PUkRFUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogT1JERVIgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX1NMQVZFX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogU0xBVkUgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9TTEFWRV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNDVExfU0xBVkVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFNMQVZFIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9NQ0xLRU5fUG9zICAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IE1DTEtFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfTUNMS0VOX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTQ1RMX01DTEtFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBNQ0xLRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfUlpDRU5fUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBSWkNFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX1JaQ0VOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU0NUTF9SWkNFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogUlpDRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX0xaQ0VOX1BvcyAgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogTFpDRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9MWkNFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNDVExfTFpDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IExaQ0VOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9SWExDSF9Qb3MgICAgICAgICAgICAgKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IFJYTENIIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfUlhMQ0hfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTQ1RMX1JYTENIX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBSWExDSCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDVExfUlpDSUVOX1BvcyAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBSWkNJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ1RMX1JaQ0lFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU0NUTF9SWkNJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogUlpDSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ1RMX0xaQ0lFTl9Qb3MgICAgICAgICAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NUTDogTFpDSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NUTF9MWkNJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNDVExfTFpDSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IExaQ0lFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU0NUTF9GT1JNQVRfUG9zICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDVEw6IEZPUk1BVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNDVExfRk9STUFUX01zayAgICAgICAgICAgICgweDN1bCA8PCBTUElfSTJTQ1RMX0ZPUk1BVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ1RMOiBGT1JNQVQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNDTEtfTUNMS0RJVl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTQ0xLOiBNQ0xLRElWIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfSTJTQ0xLX01DTEtESVZfTXNrICAgICAgICAgICAoMHg3ZnVsIDw8IFNQSV9JMlNDTEtfTUNMS0RJVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NMSzogTUNMS0RJViBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTQ0xLX0JDTEtESVZfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU0NMSzogQkNMS0RJViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU0NMS19CQ0xLRElWX01zayAgICAgICAgICAgKDB4M2ZmdWwgPDwgU1BJX0kyU0NMS19CQ0xLRElWX1BvcykgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNDTEs6IEJDTEtESVYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19SSUdIVF9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJJR0hUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfUklHSFRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTU1RTX1JJR0hUX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSSUdIVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfUlhFTVBUWV9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSWEVNUFRZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX1JYRU1QVFlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19SWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUlhFTVBUWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1JYRlVMTF9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUlhGVUxMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19SWEZVTExfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNTVFNfUlhGVUxMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJYRlVMTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19SWFRISUZfUG9zICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJYVEhJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfUlhUSElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTU1RTX1JYVEhJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSWFRISUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfUlhPVklGX1BvcyAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBSWE9WSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX1JYT1ZJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19SWE9WSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUlhPVklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1JYVE9JRl9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUlhUT0lGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19SWFRPSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNTVFNfUlhUT0lGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJYVE9JRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19JMlNFTlNUU19Qb3MgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IEkyU0VOU1RTIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfSTJTRU5TVFNfTXNrICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTU1RTX0kyU0VOU1RTX1BvcykgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBJMlNFTlNUUyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfVFhFTVBUWV9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBUWEVNUFRZIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX1RYRU1QVFlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19UWEVNUFRZX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogVFhFTVBUWSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1RYRlVMTF9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogVFhGVUxMIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19UWEZVTExfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNTVFNfVFhGVUxMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFRYRlVMTCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19UWFRISUZfUG9zICAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFRYVEhJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfVFhUSElGX01zayAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTU1RTX1RYVEhJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBUWFRISUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfVFhVRklGX1BvcyAgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBUWFVGSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX1RYVUZJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19UWFVGSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogVFhVRklGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1JaQ0lGX1BvcyAgICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUlpDSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19SWkNJRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNQSV9JMlNTVFNfUlpDSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJaQ0lGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19MWkNJRl9Qb3MgICAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IExaQ0lGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfTFpDSUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTUElfSTJTU1RTX0xaQ0lGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBMWkNJRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNQSV9JMlNTVFNfVFhSWFJTVF9Qb3MgICAgICAgICAgICgyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBUWFJYUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTUElfSTJTU1RTX1RYUlhSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1BJX0kyU1NUU19UWFJYUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogVFhSWFJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTUElfSTJTU1RTX1JYQ05UX1BvcyAgICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJX1Q6OkkyU1NUUzogUlhDTlQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX0kyU1NUU19SWENOVF9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IFNQSV9JMlNTVFNfUlhDTlRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFJYQ05UIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BJX0kyU1NUU19UWENOVF9Qb3MgICAgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSV9UOjpJMlNTVFM6IFRYQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNQSV9JMlNTVFNfVFhDTlRfTXNrICAgICAgICAgICAgICgweDd1bCA8PCBTUElfSTJTU1RTX1RYQ05UX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTUElfVDo6STJTU1RTOiBUWENOVCBNYXNrICAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIFNQSV9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgU1BJIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX1NQSV9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvc3lzX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3N5c19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjhjZjkxCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3N5c19yZWcuaApAQCAtMCwwICsxLDIzNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzeXNfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFNZUyByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TWVNfUkVHX0hfXworI2RlZmluZSBfX1NZU19SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN5c3RlbSBNYW5nZXIgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFNZUyBTeXN0ZW0gTWFuZ2VyIENvbnRyb2xsZXIoU1lTKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBTWVMgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBTWVNfVDo6UERJRAorICAgICAqIE9mZnNldDogMHgwMCAgUGFydCBEZXZpY2UgSWRlbnRpZmljYXRpb24gTnVtYmVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8UERJRCAgICAgIHxQYXJ0IERldmljZSBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHJlZ2lzdGVyIHJlZmxlY3RzIGRldmljZSBwYXJ0IG51bWJlciBjb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiByZWFkIHRoaXMgcmVnaXN0ZXIgdG8gaWRlbnRpZnkgd2hpY2ggZGV2aWNlIGlzIHVzZWQuCisgICAgICogQHZhciBTWVNfVDo6UlNUU1RTCisgICAgICogT2Zmc2V0OiAweDA0ICBTeXN0ZW0gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UE9SRiAgICAgIHxQT1IgUmVzZXQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBQT1IgcmVzZXQgZmxhZyBpcyBzZXQgYnkgdGhlICJSZXNldCBTaWduYWwiIGZyb20gdGhlIFBvd2VyLW9uIFJlc2V0IChQT1IpIENvbnRyb2xsZXIgb3IgYml0IENISVBSU1QgKFNZU19JUFJTVDBbMF0pIHRvIGluZGljYXRlIHRoZSBwcmV2aW91cyByZXNldCBzb3VyY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlc2V0IGZyb20gUE9SIG9yIENISVBSU1QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvd2VyLW9uIFJlc2V0IChQT1IpIG9yIENISVBSU1QgaGFkIGlzc3VlZCB0aGUgcmVzZXQgc2lnbmFsIHRvIHJlc2V0IHRoZSBzeXN0ZW0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHxbMV0gICAgIHxQSU5SRiAgICAgfG5SRVNFVCBQaW4gUmVzZXQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBuUkVTRVQgcGluIHJlc2V0IGZsYWcgaXMgc2V0IGJ5IHRoZSAiUmVzZXQgU2lnbmFsIiBmcm9tIHRoZSBuUkVTRVQgUGluIHRvIGluZGljYXRlIHRoZSBwcmV2aW91cyByZXNldCBzb3VyY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlc2V0IGZyb20gblJFU0VUIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGluIG5SRVNFVCBoYWQgaXNzdWVkIHRoZSByZXNldCBzaWduYWwgdG8gcmVzZXQgdGhlIHN5c3RlbS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfFsyXSAgICAgfFdEVFJGICAgICB8V0RUIFJlc2V0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgV0RUIHJlc2V0IGZsYWcgaXMgc2V0IGJ5IHRoZSAiUmVzZXQgU2lnbmFsIiBmcm9tIHRoZSBXYXRjaGRvZyBUaW1lciBvciBXaW5kb3cgV2F0Y2hkb2cgVGltZXIgdG8gaW5kaWNhdGUgdGhlIHByZXZpb3VzIHJlc2V0IHNvdXJjZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVzZXQgZnJvbSB3YXRjaGRvZyB0aW1lciBvciB3aW5kb3cgd2F0Y2hkb2cgdGltZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB3YXRjaGRvZyB0aW1lciBvciB3aW5kb3cgd2F0Y2hkb2cgdGltZXIgaGFkIGlzc3VlZCB0aGUgcmVzZXQgc2lnbmFsIHRvIHJlc2V0IHRoZSBzeXN0ZW0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogV2F0Y2hkb2cgVGltZXIgcmVnaXN0ZXIgUlNURihXRFRfQ1RMWzJdKSBiaXQgaXMgc2V0IGlmIHRoZSBzeXN0ZW0gaGFzIGJlZW4gcmVzZXQgYnkgV0RUIHRpbWUtb3V0IHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdpbmRvdyBXYXRjaGRvZyBUaW1lciByZWdpc3RlciBXV0RUUkYoV1dEVF9TVEFUVVNbMV0pIGJpdCBpcyBzZXQgaWYgdGhlIHN5c3RlbSBoYXMgYmVlbiByZXNldCBieSBXV0RUIHRpbWUtb3V0IHJlc2V0LgorICAgICAqIHxbM10gICAgIHxMVlJGICAgICAgfExWUiBSZXNldCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIExWUiByZXNldCBmbGFnIGlzIHNldCBieSB0aGUgIlJlc2V0IFNpZ25hbCIgZnJvbSB0aGUgTG93IFZvbHRhZ2UgUmVzZXQgQ29udHJvbGxlciB0byBpbmRpY2F0ZSB0aGUgcHJldmlvdXMgcmVzZXQgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZXNldCBmcm9tIExWUi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTFZSIGNvbnRyb2xsZXIgaGFkIGlzc3VlZCB0aGUgcmVzZXQgc2lnbmFsIHRvIHJlc2V0IHRoZSBzeXN0ZW0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byAwLgorICAgICAqIHxbNF0gICAgIHxCT0RSRiAgICAgfEJPRCBSZXNldCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEJPRCByZXNldCBmbGFnIGlzIHNldCBieSB0aGUgIlJlc2V0IFNpZ25hbCIgZnJvbSB0aGUgQnJvd24tb3V0IERldGVjdG9yIHRvIGluZGljYXRlIHRoZSBwcmV2aW91cyByZXNldCBzb3VyY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlc2V0IGZyb20gQk9ELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgQk9EIGhhZCBpc3N1ZWQgdGhlIHJlc2V0IHNpZ25hbCB0byByZXNldCB0aGUgc3lzdGVtLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8WzVdICAgICB8U1lTUkYgICAgIHxTeXN0ZW0gUmVzZXQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzeXN0ZW0gcmVzZXQgZmxhZyBpcyBzZXQgYnkgdGhlICJSZXNldCBTaWduYWwiIGZyb20gdGhlIENvcnRleC1NMjMgQ29yZSB0byBpbmRpY2F0ZSB0aGUgcHJldmlvdXMgcmVzZXQgc291cmNlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZXNldCBmcm9tIENvcnRleC1NMjMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBDb3J0ZXgtTTIzIGhhZCBpc3N1ZWQgdGhlIHJlc2V0IHNpZ25hbCB0byByZXNldCB0aGUgc3lzdGVtIGJ5IHdyaXRpbmcgMSB0byB0aGUgYml0IFNZU1JFU0VUUkVRKEFJUkNSWzJdLCBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIsIGFkZHJlc3MgPSAweEUwMDBFRDBDKSBpbiBzeXN0ZW0gY29udHJvbCByZWdpc3RlcnMgb2YgQ29ydGV4LU0yMyBjb3JlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8WzddICAgICB8Q1BVUkYgICAgIHxDUFUgUmVzZXQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDUFUgcmVzZXQgZmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgaWYgc29mdHdhcmUgd3JpdGVzIENQVVJTVCAoU1lTX0lQUlNUMFsxXSkgMSB0byByZXNldCBDb3J0ZXgtTTIzIENvcmUgYW5kIEZsYXNoIE1lbW9yeSBDb250cm9sbGVyIChGTUMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyByZXNldCBmcm9tIENQVS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIENvcnRleC1NMjMgQ29yZSBhbmQgRk1DIGFyZSByZXNldCBieSBzb2Z0d2FyZSBzZXR0aW5nIENQVVJTVCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8WzhdICAgICB8Q1BVTEtSRiAgIHxDUFUgTG9ja3VwIFJlc2V0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgQ1BVTEsgcmVzZXQgZmxhZyBpcyBzZXQgYnkgaGFyZHdhcmUgaWYgQ29ydGV4LU0yMyBsb2NrdXAgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHJlc2V0IGZyb20gQ1BVIGxvY2t1cCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIENvcnRleC1NMjMgbG9ja3VwIGhhcHBlbmVkIGFuZCBjaGlwIGlzIHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFdoZW4gQ1BVIGxvY2t1cCBoYXBwZW5lZCB1bmRlciBJQ0UgaXMgY29ubmVjdGVkLCBUaGlzIGZsYWcgd2lsbCBzZXQgdG8gMSBidXQgY2hpcCB3aWxsIG5vdCByZXNldC4KKyAgICAgKiBAdmFyIFNZU19UOjpJUFJTVDAKKyAgICAgKiBPZmZzZXQ6IDB4MDggIFBlcmlwaGVyYWwgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q0hJUFJTVCAgIHxDaGlwIE9uZS1zaG90IFJlc2V0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgdGhpcyBiaXQgd2lsbCByZXNldCB0aGUgd2hvbGUgY2hpcCwgaW5jbHVkaW5nIFByb2Nlc3NvciBjb3JlIGFuZCBhbGwgcGVyaXBoZXJhbHMsIGFuZCB0aGlzIGJpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcmV0dXJuIHRvIDAgYWZ0ZXIgdGhlIDIgY2xvY2sgY3ljbGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDSElQUlNUIGlzIHNhbWUgYXMgdGhlIFBPUiByZXNldCwgYWxsIHRoZSBjaGlwIGNvbnRyb2xsZXJzIGlzIHJlc2V0IGFuZCB0aGUgY2hpcCBzZXR0aW5nIGZyb20gZmxhc2ggYXJlIGFsc28gcmVsb2FkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGlwIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoaXAgb25lLXNob3QgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfENQVVJTVCAgICB8UHJvY2Vzc29yIENvcmUgT25lLXNob3QgUmVzZXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0dGluZyB0aGlzIGJpdCB3aWxsIG9ubHkgcmVzZXQgdGhlIHByb2Nlc3NvciBjb3JlIGFuZCBGbGFzaCBNZW1vcnkgQ29udHJvbGxlcihGTUMpLCBhbmQgdGhpcyBiaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJldHVybiB0byAwIGFmdGVyIHRoZSAyIGNsb2NrIGN5Y2xlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUHJvY2Vzc29yIGNvcmUgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUHJvY2Vzc29yIGNvcmUgb25lLXNob3QgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyXSAgICAgfFBETUEwUlNUICB8UERNQTAgQ29udHJvbGxlciBSZXNldCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIHRoaXMgYml0IHRvIDEgd2lsbCBnZW5lcmF0ZSBhIHJlc2V0IHNpZ25hbCB0byB0aGUgUERNQTAgKGFsd2F5cyBzZWN1cmUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgbmVlZHMgdG8gc2V0IHRoaXMgYml0IHRvIDAgdG8gcmVsZWFzZSBmcm9tIHJlc2V0IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BMCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBETUEwIGNvbnRyb2xsZXIgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszXSAgICAgfEVCSVJTVCAgICB8RUJJIENvbnRyb2xsZXIgUmVzZXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHRoaXMgYml0IHRvIDEgd2lsbCBnZW5lcmF0ZSBhIHJlc2V0IHNpZ25hbCB0byB0aGUgRUJJCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBuZWVkcyB0byBzZXQgdGhpcyBiaXQgdG8gMCB0byByZWxlYXNlIGZyb20gdGhlIHJlc2V0IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQkkgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQkkgY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzRdICAgICB8VVNCSFJTVCAgIHxVU0IgSG9zdCBDb250cm9sbGVyIFJlc2V0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCB0byAxIHdpbGwgZ2VuZXJhdGUgYSByZXNldCBzaWduYWwgdG8gdGhlIFVTQiBIb3N0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgbmVlZHMgdG8gc2V0IHRoaXMgYml0IHRvIDAgdG8gcmVsZWFzZSBmcm9tIHRoZSByZXNldCBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNCIEhvc3QgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgSG9zdCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNl0gICAgIHxTREgwUlNUICAgfFNESE9TVDAgQ29udHJvbGxlciBSZXNldCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIHRoaXMgYml0IHRvIDEgd2lsbCBnZW5lcmF0ZSBhIHJlc2V0IHNpZ25hbCB0byB0aGUgU0RIT1NUMCBjb250cm9sbGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBuZWVkcyB0byBzZXQgdGhpcyBiaXQgdG8gMCB0byByZWxlYXNlIGZyb20gdGhlIHJlc2V0IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTREhPU1QwIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU0RIT1NUMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbN10gICAgIHxDUkNSU1QgICAgfENSQyBDYWxjdWxhdGlvbiBDb250cm9sbGVyIFJlc2V0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCB0byAxIHdpbGwgZ2VuZXJhdGUgYSByZXNldCBzaWduYWwgdG8gdGhlIENSQyBjYWxjdWxhdGlvbiBjb250cm9sbGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBuZWVkcyB0byBzZXQgdGhpcyBiaXQgdG8gMCB0byByZWxlYXNlIGZyb20gdGhlIHJlc2V0IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDUkMgY2FsY3VsYXRpb24gY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDUkMgY2FsY3VsYXRpb24gY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEyXSAgICB8Q1JQVFJTVCAgIHxDUllQVE8gQ29udHJvbGxlciBSZXNldCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIHRoaXMgYml0IHRvIDEgd2lsbCBnZW5lcmF0ZSBhIHJlc2V0IHNpZ25hbCB0byB0aGUgQ1JZUFRPIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBuZWVkcyB0byBzZXQgdGhpcyBiaXQgdG8gMCB0byByZWxlYXNlIGZyb20gdGhlIHJlc2V0IHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDUllQVE8gY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDUllQVE8gY29udHJvbGxlciByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzI5XSAgICB8UERNQTFSU1QgIHxQRE1BMSBDb250cm9sbGVyIFJlc2V0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgdGhpcyBiaXQgdG8gMSB3aWxsIGdlbmVyYXRlIGEgcmVzZXQgc2lnbmFsIHRvIHRoZSBQRE1BMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIG5lZWRzIHRvIHNldCB0aGlzIGJpdCB0byAwIHRvIHJlbGVhc2UgZnJvbSByZXNldCBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUERNQTEgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgU1lTX1Q6OklQUlNUMQorICAgICAqIE9mZnNldDogMHgwQyAgUGVyaXBoZXJhbCBSZXNldCBDb250cm9sIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxHUElPUlNUICAgfEdQSU8gQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHUElPIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR1BJTyBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMl0gICAgIHxUTVIwUlNUICAgfFRpbWVyMCBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbM10gICAgIHxUTVIxUlNUICAgfFRpbWVyMSBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMSBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbNF0gICAgIHxUTVIyUlNUICAgfFRpbWVyMiBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMiBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMiBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbNV0gICAgIHxUTVIzUlNUICAgfFRpbWVyMyBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyMyBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyMyBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbN10gICAgIHxBQ01QMDFSU1QgfEFuYWxvZyBDb21wYXJhdG9yIDAvMSBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFuYWxvZyBDb21wYXJhdG9yIDAvMSBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFuYWxvZyBDb21wYXJhdG9yIDAvMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbOF0gICAgIHxJMkMwUlNUICAgfEkyQzAgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMwIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbOV0gICAgIHxJMkMxUlNUICAgfEkyQzEgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMxIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTBdICAgIHxJMkMyUlNUICAgfEkyQzIgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMyIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDMiBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTJdICAgIHxRU1BJMFJTVCAgfFFTUEkwIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUVNQSTAgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBRU1BJMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTNdICAgIHxTUEkwUlNUICAgfFNQSTAgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkwIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTRdICAgIHxTUEkxUlNUICAgfFNQSTEgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkxIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTVdICAgIHxTUEkyUlNUICAgfFNQSTIgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkyIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJMiBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTZdICAgIHxVQVJUMFJTVCAgfFVBUlQwIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDAgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTddICAgIHxVQVJUMVJTVCAgfFVBUlQxIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDEgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMThdICAgIHxVQVJUMlJTVCAgfFVBUlQyIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDIgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUMiBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTldICAgIHxVQVJUM1JTVCAgfFVBUlQzIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDMgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUMyBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjBdICAgIHxVQVJUNFJTVCAgfFVBUlQ0IENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDQgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUNCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjFdICAgIHxVQVJUNVJTVCAgfFVBUlQ1IENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDUgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUNSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjRdICAgIHxDQU4wUlNUICAgfENBTjAgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDQU4wIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ0FOMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjZdICAgIHxPVEdSU1QgICAgfE9URyBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9URyBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjddICAgIHxVU0JEUlNUICAgfFVTQkQgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVU0JEIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCRCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjhdICAgIHxFQURDUlNUICAgfEVBREMgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFQURDIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRUFEQyBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjldICAgIHxJMlMwUlNUICAgfEkyUzAgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMlMwIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJTMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMzFdICAgIHxUUk5HUlNUICAgfFRSTkcgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUUk5HIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVFJORyBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIEB2YXIgU1lTX1Q6OklQUlNUMgorICAgICAqIE9mZnNldDogMHgxMCAgUGVyaXBoZXJhbCBSZXNldCBDb250cm9sIFJlZ2lzdGVyIDIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTQzBSU1QgICAgfFNDMCBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDMCBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMV0gICAgIHxTQzFSU1QgICAgfFNDMSBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDMSBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMl0gICAgIHxTQzJSU1QgICAgfFNDMiBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNDMiBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNDMiBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbNl0gICAgIHxTUEkzUlNUICAgfFNQSTMgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkzIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJMyBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbOF0gICAgIHxVU0NJMFJTVCAgfFVTQ0kwIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNDSTAgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0NJMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbOV0gICAgIHxVU0NJMVJTVCAgfFVTQ0kxIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNDSTEgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0NJMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTJdICAgIHxEQUNSU1QgICAgfERBQyBDb250cm9sbGVyIFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERBQyBjb250cm9sbGVyIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERBQyBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTZdICAgIHxFUFdNMFJTVCAgfEVQV00wIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTTAgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTddICAgIHxFUFdNMVJTVCAgfEVQV00xIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRVBXTTEgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFUFdNMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMThdICAgIHxCUFdNMFJTVCAgfEJQV00wIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTTAgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMTldICAgIHxCUFdNMVJTVCAgfEJQV00xIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQlBXTTEgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCUFdNMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjJdICAgIHxRRUkwUlNUICAgfFFFSTAgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRRUkwIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjNdICAgIHxRRUkxUlNUICAgfFFFSTEgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBRRUkxIGNvbnRyb2xsZXIgbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUUVJMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjZdICAgIHxFQ0FQMFJTVCAgfEVDQVAwIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUNBUDAgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0FQMCBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIHxbMjddICAgIHxFQ0FQMVJTVCAgfEVDQVAxIENvbnRyb2xsZXIgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRUNBUDEgY29udHJvbGxlciBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFQ0FQMSBjb250cm9sbGVyIHJlc2V0LgorICAgICAqIEB2YXIgU1lTX1Q6OkJPRENUTAorICAgICAqIE9mZnNldDogMHgxOCAgQnJvd24tb3V0IERldGVjdG9yIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCT0RFTiAgICAgfEJyb3duLW91dCBEZXRlY3RvciBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCBieSBmbGFzaCBjb250cm9sbGVyIHVzZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciBDQk9ERU4gKENPTkZJRzAgWzIzXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyb3duLW91dCBEZXRlY3RvciBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJvd24tb3V0IERldGVjdG9yIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszXSAgICAgfEJPRFJTVEVOICB8QnJvd24tb3V0IFJlc2V0IEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlZmF1bHQgdmFsdWUgaXMgc2V0IGJ5IGZsYXNoIGNvbnRyb2xsZXIgdXNlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIENCT1JTVChDT05GSUcwWzIwXSkgYml0IC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJvd24tb3V0IElOVEVSUlVQVCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcm93bi1vdXQgUkVTRVQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGlsZSB0aGUgQnJvd24tb3V0IERldGVjdG9yIGZ1bmN0aW9uIGlzIGVuYWJsZWQgKEJPREVOIGhpZ2gpIGFuZCBCT0QgcmVzZXQgZnVuY3Rpb24gaXMgZW5hYmxlZCAoQk9EUlNURU4gaGlnaCksIEJPRCB3aWxsIGFzc2VydCBhIHNpZ25hbCB0byByZXNldCBjaGlwIHdoZW4gdGhlIGRldGVjdGVkIHZvbHRhZ2UgaXMgbG93ZXIgdGhhbiB0aGUgdGhyZXNob2xkIChCT0RPVVQgaGlnaCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hpbGUgdGhlIEJPRCBmdW5jdGlvbiBpcyBlbmFibGVkIChCT0RFTiBoaWdoKSBhbmQgQk9EIGludGVycnVwdCBmdW5jdGlvbiBpcyBlbmFibGVkIChCT0RSU1RFTiBsb3cpLCBCT0Qgd2lsbCBhc3NlcnQgYW4gaW50ZXJydXB0IGlmIEFWREQgaGlnaC50aGFuIEJPRFZMLCBCT0QgaW50ZXJydXB0IHdpbGwga2VlcCB0aWxsIHRvIHRoZSBCT0RJRiBzZXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCT0QgaW50ZXJydXB0IGNhbiBiZSBibG9ja2VkIGJ5IGRpc2FibGluZyB0aGUgTlZJQyBCT0QgaW50ZXJydXB0IG9yIGRpc2FibGluZyBCT0QgZnVuY3Rpb24gKHNldCBCT0RFTiBsb3cpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzRdICAgICB8Qk9ESUYgICAgIHxCcm93bi1vdXQgRGV0ZWN0b3IgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJvd24tb3V0IERldGVjdG9yIGRvZXMgbm90IGRldGVjdCBhbnkgdm9sdGFnZSBkcmFmdCBhdCBWREQgZG93biB0aHJvdWdoIG9yIHVwIHRocm91Z2ggdGhlIHZvbHRhZ2Ugb2YgQk9EVkwgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2hlbiBCcm93bi1vdXQgRGV0ZWN0b3IgZGV0ZWN0cyB0aGUgVkREIGlzIGRyb3BwZWQgZG93biB0aHJvdWdoIHRoZSB2b2x0YWdlIG9mIEJPRFZMIHNldHRpbmcgb3IgdGhlIFZERCBpcyByYWlzZWQgdXAgdGhyb3VnaCB0aGUgdm9sdGFnZSBvZiBCT0RWTCBzZXR0aW5nLCB0aGlzIGJpdCBpcyBzZXQgdG8gMSBhbmQgdGhlIGJyb3duLW91dCBpbnRlcnJ1cHQgaXMgcmVxdWVzdGVkIGlmIGJyb3duLW91dCBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0IHRvIDAuCisgICAgICogfFs1XSAgICAgfEJPRExQTSAgICB8QnJvd24tb3V0IERldGVjdG9yIExvdyBQb3dlciBNb2RlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCT0Qgb3BlcmF0ZSBpbiBub3JtYWwgbW9kZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJPRCBMb3cgUG93ZXIgbW9kZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGUgQk9EIGNvbnN1bWVzIGFib3V0IDEwMHVBIGluIG5vcm1hbCBtb2RlLCB0aGUgbG93IHBvd2VyIG1vZGUgY2FuIHJlZHVjZSB0aGUgY3VycmVudCB0byBhYm91dCAxLzEwIGJ1dCBzbG93IHRoZSBCT0QgcmVzcG9uc2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNl0gICAgIHxCT0RPVVQgICAgfEJyb3duLW91dCBEZXRlY3RvciBPdXRwdXQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyb3duLW91dCBEZXRlY3RvciBvdXRwdXQgc3RhdHVzIGlzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgbWVhbnMgdGhlIGRldGVjdGVkIHZvbHRhZ2UgaXMgaGlnaGVyIHRoYW4gQk9EVkwgc2V0dGluZyBvciBCT0RFTiBpcyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcm93bi1vdXQgRGV0ZWN0b3Igb3V0cHV0IHN0YXR1cyBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IG1lYW5zIHRoZSBkZXRlY3RlZCB2b2x0YWdlIGlzIGxvd2VyIHRoYW4gQk9EVkwgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgQk9ERU4gaXMgMCwgQk9EIGZ1bmN0aW9uIGRpc2FibGVkICwgdGhpcyBiaXQgYWx3YXlzIHJlc3BvbmRzIDAuCisgICAgICogfFs3XSAgICAgfExWUkVOICAgICB8TG93IFZvbHRhZ2UgUmVzZXQgRW5hYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgTFZSIGZ1bmN0aW9uIHJlc2V0cyB0aGUgY2hpcCB3aGVuIHRoZSBpbnB1dCBwb3dlciB2b2x0YWdlIGlzIGxvd2VyIHRoYW4gTFZSIGNpcmN1aXQgc2V0dGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxMVlIgZnVuY3Rpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMb3cgVm9sdGFnZSBSZXNldCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTG93IFZvbHRhZ2UgUmVzZXQgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQWZ0ZXIgZW5hYmxpbmcgdGhlIGJpdCwgdGhlIExWUiBmdW5jdGlvbiB3aWxsIGJlIGFjdGl2ZSB3aXRoIDIwMHVzIGRlbGF5IGZvciBMVlIgb3V0cHV0IHN0YWJsZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTA6OF0gIHxCT0RER1NFTCAgfEJyb3duLW91dCBEZXRlY3RvciBPdXRwdXQgRGUtZ2xpdGNoIFRpbWUgU2VsZWN0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IEJPRCBvdXRwdXQgaXMgc2FtcGxlZCBieSBMSVJDIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IDQgc3lzdGVtIGNsb2NrIChIQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSA4IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gMTYgc3lzdGVtIGNsb2NrIChIQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSAzMiBzeXN0ZW0gY2xvY2sgKEhDTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IDY0IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwID0gMTI4IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gMjU2IHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNDoxMl0gfExWUkRHU0VMICB8TFZSIE91dHB1dCBEZS1nbGl0Y2ggVGltZSBTZWxlY3QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gV2l0aG91dCBkZS1nbGl0Y2ggZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gNCBzeXN0ZW0gY2xvY2sgKEhDTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IDggc3lzdGVtIGNsb2NrIChIQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSAxNiBzeXN0ZW0gY2xvY2sgKEhDTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IDMyIHN5c3RlbSBjbG9jayAoSENMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxID0gNjQgc3lzdGVtIGNsb2NrIChIQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSAxMjggc3lzdGVtIGNsb2NrIChIQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEgPSAyNTYgc3lzdGVtIGNsb2NrIChIQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE4OjE2XSB8Qk9EVkwgICAgIHxCcm93bi1vdXQgRGV0ZWN0b3IgVGhyZXNob2xkIFZvbHRhZ2UgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCBieSBmbGFzaCBjb250cm9sbGVyIHVzZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciBDQk9WIChDT05GSUcwIFsyMzoyMV0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IEJyb3duLW91dCBEZXRlY3RvciB0aHJlc2hvbGQgdm9sdGFnZSBpcyAxLjZWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IEJyb3duLW91dCBEZXRlY3RvciB0aHJlc2hvbGQgdm9sdGFnZSBpcyAxLjhWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IEJyb3duLW91dCBEZXRlY3RvciB0aHJlc2hvbGQgdm9sdGFnZSBpcyAyLjBWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IEJyb3duLW91dCBEZXRlY3RvciB0aHJlc2hvbGQgdm9sdGFnZSBpcyAyLjJWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IEJyb3duLW91dCBEZXRlY3RvciB0aHJlc2hvbGQgdm9sdGFnZSBpcyAyLjRWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IEJyb3duLW91dCBEZXRlY3RvciB0aHJlc2hvbGQgdm9sdGFnZSBpcyAyLjZWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IEJyb3duLW91dCBEZXRlY3RvciB0aHJlc2hvbGQgdm9sdGFnZSBpcyAyLjhWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMSA9IEJyb3duLW91dCBEZXRlY3RvciB0aHJlc2hvbGQgdm9sdGFnZSBpcyAzLjBWLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgU1lTX1Q6OklWU0NUTAorICAgICAqIE9mZnNldDogMHgxQyAgSW50ZXJuYWwgVm9sdGFnZSBTb3VyY2UgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFZURU1QRU4gICB8VGVtcGVyYXR1cmUgU2Vuc29yIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHRlbXBlcmF0dXJlIHNlbnNvciBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGVtcGVyYXR1cmUgc2Vuc29yIGZ1bmN0aW9uIERpc2FibGVkIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGVtcGVyYXR1cmUgc2Vuc29yIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQWZ0ZXIgdGhpcyBiaXQgaXMgc2V0IHRvIDEsIHRoZSB2YWx1ZSBvZiB0ZW1wZXJhdHVyZSBzZW5zb3Igb3V0cHV0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Y2FuIGJlIG9idGFpbmVkIHRocm91Z2ggR1BDLjkuCisgICAgICogfFsxXSAgICAgfFZCQVRVR0VOICB8VkJBVCBVbml0eSBHYWluIEJ1ZmZlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSBWQkFUIHVuaXR5IGdhaW4gYnVmZmVyIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBWQkFUIHVuaXR5IGdhaW4gYnVmZmVyIGZ1bmN0aW9uIERpc2FibGVkIChkZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVkJBVCB1bml0eSBnYWluIGJ1ZmZlciBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEFmdGVyIHRoaXMgYml0IGlzIHNldCB0byAxLCB0aGUgdmFsdWUgb2YgVkJBVCB1bml0eSBnYWluIGJ1ZmZlciBvdXRwdXQgdm9sdGFnZSBjYW4gYmUgb2J0YWluZWQgZnJvbSBBREMgY29udmVyc2lvbiByZXN1bHQuCisgICAgICogQHZhciBTWVNfVDo6UE9SQ1RMMAorICAgICAqIE9mZnNldDogMHgyNCAgUG93ZXItb24gUmVzZXQgQ29udHJvbGxlciBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UE9STUFTSyAgIHxQb3dlci1vbiBSZXNldCBNYXNrIEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBwb3dlcmVkIG9uLCB0aGUgUE9SIGNpcmN1aXQgZ2VuZXJhdGVzIGEgcmVzZXQgc2lnbmFsIHRvIHJlc2V0IHRoZSB3aG9sZSBjaGlwIGZ1bmN0aW9uLCBidXQgbm9pc2Ugb24gdGhlIHBvd2VyIG1heSBjYXVzZSB0aGUgUE9SIGFjdGl2ZSBhZ2Fpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVc2VyIGNhbiBtYXNrICBpbnRlcm5hbCBQT1Igc2lnbmFsIHRvIGF2b2lkIHVucHJlZGljdGFibGUgbm9pc2UgdG8gY2F1c2UgY2hpcCByZXNldCBieSB3cml0aW5nIDB4NUFBNSB0byB0aGlzIGZpZWxkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBQT1IgZnVuY3Rpb24gd2lsbCBiZSBhY3RpdmUgYWdhaW4gd2hlbiB0aGlzIGZpZWxkIGlzIHNldCB0byBhbm90aGVyIHZhbHVlIG9yIGNoaXAgaXMgcmVzZXQgYnkgb3RoZXIgcmVzZXQgc291cmNlLCBpbmNsdWRpbmc6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8blJFU0VULCBXYXRjaGRvZywgTFZSIHJlc2V0LCBCT0QgcmVzZXQsIElDRSByZXNldCBjb21tYW5kIGFuZCB0aGUgc29mdHdhcmUtY2hpcCByZXNldCBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFNZU19UOjpWUkVGQ1RMCisgICAgICogT2Zmc2V0OiAweDI4ICBWUkVGIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNDowXSAgIHxWUkVGQ1RMICAgfFZSRUYgQ29udHJvbCBCaXRzIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAwID0gVlJFRiBpcyBmcm9tIGV4dGVybmFsIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxMSA9IFZSRUYgaXMgaW50ZXJuYWwgMS42Vi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExMSA9IFZSRUYgaXMgaW50ZXJuYWwgMi4wVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAxMSA9IFZSRUYgaXMgaW50ZXJuYWwgMi41Vi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExMSA9IFZSRUYgaXMgaW50ZXJuYWwgMy4wVi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzVdICAgICB8SUJJQVNTRUwgIHxWUkVGIEJpYXMgQ3VycmVudCBTZWxlY3Rpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJpYXMgY3VycmVudCBmcm9tIE1FR0JJQVMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJpYXMgY3VycmVudCBmcm9tIGludGVybmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNzo2XSAgIHxQUkVMT0FEU0VMfFByZS1sb2FkIFRpbWluZyBTZWxlY3Rpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBwcmUtbG9hZCB0aW1lIGlzIDYwdXMgZm9yIDAuMXVGIENhcGFjaXRvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IHByZS1sb2FkIHRpbWUgaXMgMzEwdXMgZm9yIDF1RiBDYXBhY2l0b3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBwcmUtbG9hZCB0aW1lIGlzIDEyNzB1cyBmb3IgNC43dUYgQ2FwYWNpdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gcHJlLWxvYWQgdGltZSBpcyAyNjUwdXMgZm9yIDEwdUYgQ2FwYWNpdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgU1lTX1Q6OlVTQlBIWQorICAgICAqIE9mZnNldDogMHgyQyAgVVNCIFBIWSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8VVNCUk9MRSAgIHxVU0IgUm9sZSBPcHRpb24gKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgdHdvIGJpdHMgYXJlIHVzZWQgdG8gc2VsZWN0IHRoZSByb2xlIG9mIFVTQi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFN0YW5kYXJkIFVTQiBEZXZpY2UgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFN0YW5kYXJkIFVTQiBIb3N0IG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBJRCBkZXBlbmRlbnQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IE9uLVRoZS1HbyBkZXZpY2UgbW9kZSAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsyXSAgICAgfFNCTyAgICAgICB8Tm90ZTogVGhpcyBiaXQgbXVzdCBhbHdheXMgYmUga2VwdCAxLiBJZiBzZXQgdG8gMCwgdGhlIHJlc3VsdCBpcyB1bnByZWRpY3RhYmxlLgorICAgICAqIHxbOF0gICAgIHxPVEdQSFlFTiAgfFVTQiBPVEcgUEhZIEVuYWJsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgT1RHIFBIWSBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT1RHIFBIWSBmdW5jdGlvbiBEaXNhYmxlZCAoZGVmYXVsdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE9URyBQSFkgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiBAdmFyIFNZU19UOjpHUEFfTUZQTAorICAgICAqIE9mZnNldDogMHgzMCAgR1BJT0EgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBBME1GUCAgICB8UEEuMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBBMU1GUCAgICB8UEEuMSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBBMk1GUCAgICB8UEEuMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBBM01GUCAgICB8UEEuMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxOToxNl0gfFBBNE1GUCAgICB8UEEuNCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBBNU1GUCAgICB8UEEuNSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBBNk1GUCAgICB8UEEuNiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFszMToyOF0gfFBBN01GUCAgICB8UEEuNyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BBX01GUEgKKyAgICAgKiBPZmZzZXQ6IDB4MzQgIEdQSU9BIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8UEE4TUZQICAgIHxQQS44IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8Wzc6NF0gICB8UEE5TUZQICAgIHxQQS45IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzExOjhdICB8UEExME1GUCAgIHxQQS4xMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBBMTFNRlAgICB8UEEuMTEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQQTEyTUZQICAgfFBBLjEyIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzIzOjIwXSB8UEExM01GUCAgIHxQQS4xMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBBMTRNRlAgICB8UEEuMTQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQQTE1TUZQICAgfFBBLjE1IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiBAdmFyIFNZU19UOjpHUEJfTUZQTAorICAgICAqIE9mZnNldDogMHgzOCAgR1BJT0IgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBCME1GUCAgICB8UEIuMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBCMU1GUCAgICB8UEIuMSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBCMk1GUCAgICB8UEIuMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBCM01GUCAgICB8UEIuMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxOToxNl0gfFBCNE1GUCAgICB8UEIuNCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBCNU1GUCAgICB8UEIuNSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBCNk1GUCAgICB8UEIuNiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFszMToyOF0gfFBCN01GUCAgICB8UEIuNyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BCX01GUEgKKyAgICAgKiBPZmZzZXQ6IDB4M0MgIEdQSU9CIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8UEI4TUZQICAgIHxQQi44IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8Wzc6NF0gICB8UEI5TUZQICAgIHxQQi45IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzExOjhdICB8UEIxME1GUCAgIHxQQi4xMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBCMTFNRlAgICB8UEIuMTEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQQjEyTUZQICAgfFBCLjEyIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzIzOjIwXSB8UEIxM01GUCAgIHxQQi4xMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBCMTRNRlAgICB8UEIuMTQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQQjE1TUZQICAgfFBCLjE1IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiBAdmFyIFNZU19UOjpHUENfTUZQTAorICAgICAqIE9mZnNldDogMHg0MCAgR1BJT0MgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBDME1GUCAgICB8UEMuMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBDMU1GUCAgICB8UEMuMSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBDMk1GUCAgICB8UEMuMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBDM01GUCAgICB8UEMuMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxOToxNl0gfFBDNE1GUCAgICB8UEMuNCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBDNU1GUCAgICB8UEMuNSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBDNk1GUCAgICB8UEMuNiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFszMToyOF0gfFBDN01GUCAgICB8UEMuNyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BDX01GUEgKKyAgICAgKiBPZmZzZXQ6IDB4NDQgIEdQSU9DIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8UEM4TUZQICAgIHxQQy44IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8Wzc6NF0gICB8UEM5TUZQICAgIHxQQy45IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzExOjhdICB8UEMxME1GUCAgIHxQQy4xMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBDMTFNRlAgICB8UEMuMTEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQQzEyTUZQICAgfFBDLjEyIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzIzOjIwXSB8UEMxM01GUCAgIHxQQy4xMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BEX01GUEwKKyAgICAgKiBPZmZzZXQ6IDB4NDggIEdQSU9EIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxQRDBNRlAgICAgfFBELjAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbNzo0XSAgIHxQRDFNRlAgICAgfFBELjEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTE6OF0gIHxQRDJNRlAgICAgfFBELjIgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQRDNNRlAgICAgfFBELjMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQRDRNRlAgICAgfFBELjQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjM6MjBdIHxQRDVNRlAgICAgfFBELjUgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQRDZNRlAgICAgfFBELjYgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQRDdNRlAgICAgfFBELjcgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQRF9NRlBICisgICAgICogT2Zmc2V0OiAweDRDICBHUElPRCBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBEOE1GUCAgICB8UEQuOCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBEOU1GUCAgICB8UEQuOSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBEMTBNRlAgICB8UEQuMTAgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTU6MTJdIHxQRDExTUZQICAgfFBELjExIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE5OjE2XSB8UEQxMk1GUCAgIHxQRC4xMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBEMTNNRlAgICB8UEQuMTMgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjc6MjRdIHxQRDE0TUZQICAgfFBELjE0IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiBAdmFyIFNZU19UOjpHUEVfTUZQTAorICAgICAqIE9mZnNldDogMHg1MCAgR1BJT0UgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBFME1GUCAgICB8UEUuMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBFMU1GUCAgICB8UEUuMSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBFMk1GUCAgICB8UEUuMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBFM01GUCAgICB8UEUuMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxOToxNl0gfFBFNE1GUCAgICB8UEUuNCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBFNU1GUCAgICB8UEUuNSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBFNk1GUCAgICB8UEUuNiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFszMToyOF0gfFBFN01GUCAgICB8UEUuNyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BFX01GUEgKKyAgICAgKiBPZmZzZXQ6IDB4NTQgIEdQSU9FIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8UEU4TUZQICAgIHxQRS44IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8Wzc6NF0gICB8UEU5TUZQICAgIHxQRS45IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzExOjhdICB8UEUxME1GUCAgIHxQRS4xMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBFMTFNRlAgICB8UEUuMTEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTk6MTZdIHxQRTEyTUZQICAgfFBFLjEyIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzIzOjIwXSB8UEUxM01GUCAgIHxQRS4xMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBFMTRNRlAgICB8UEUuMTQgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMzE6MjhdIHxQRTE1TUZQICAgfFBFLjE1IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiBAdmFyIFNZU19UOjpHUEZfTUZQTAorICAgICAqIE9mZnNldDogMHg1OCAgR1BJT0YgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfFBGME1GUCAgICB8UEYuMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFs3OjRdICAgfFBGMU1GUCAgICB8UEYuMSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxMTo4XSAgfFBGMk1GUCAgICB8UEYuMiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBGM01GUCAgICB8UEYuMyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxOToxNl0gfFBGNE1GUCAgICB8UEYuNCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyMzoyMF0gfFBGNU1GUCAgICB8UEYuNSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsyNzoyNF0gfFBGNk1GUCAgICB8UEYuNiBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFszMToyOF0gfFBGN01GUCAgICB8UEYuNyBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BGX01GUEgKKyAgICAgKiBPZmZzZXQ6IDB4NUMgIEdQSU9GIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8UEY4TUZQICAgIHxQRi44IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8Wzc6NF0gICB8UEY5TUZQICAgIHxQRi45IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzExOjhdICB8UEYxME1GUCAgIHxQRi4xMCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxNToxMl0gfFBGMTFNRlAgICB8UEYuMTEgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQR19NRlBMCisgICAgICogT2Zmc2V0OiAweDYwICBHUElPRyBMb3cgQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzExOjhdICB8UEcyTUZQICAgIHxQRy4yIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE1OjEyXSB8UEczTUZQICAgIHxQRy4zIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE5OjE2XSB8UEc0TUZQICAgIHxQRy40IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiBAdmFyIFNZU19UOjpHUEdfTUZQSAorICAgICAqIE9mZnNldDogMHg2NCAgR1BJT0cgSGlnaCBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzo0XSAgIHxQRzlNRlAgICAgfFBHLjkgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTE6OF0gIHxQRzEwTUZQICAgfFBHLjEwIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE1OjEyXSB8UEcxMU1GUCAgIHxQRy4xMSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFsxOToxNl0gfFBHMTJNRlAgICB8UEcuMTIgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMjM6MjBdIHxQRzEzTUZQICAgfFBHLjEzIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzI3OjI0XSB8UEcxNE1GUCAgIHxQRy4xNCBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogfFszMToyOF0gfFBHMTVNRlAgICB8UEcuMTUgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIEB2YXIgU1lTX1Q6OkdQSF9NRlBMCisgICAgICogT2Zmc2V0OiAweDY4ICBHUElPSCBMb3cgQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE5OjE2XSB8UEg0TUZQICAgIHxQSC40IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzIzOjIwXSB8UEg1TUZQICAgIHxQSC41IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzI3OjI0XSB8UEg2TUZQICAgIHxQSC42IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzMxOjI4XSB8UEg3TUZQICAgIHxQSC43IE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiBAdmFyIFNZU19UOjpHUEhfTUZQSAorICAgICAqIE9mZnNldDogMHg2QyAgR1BJT0ggSGlnaCBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzowXSAgIHxQSDhNRlAgICAgfFBILjggTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbNzo0XSAgIHxQSDlNRlAgICAgfFBILjkgTXVsdGktZnVuY3Rpb24gUGluIFNlbGVjdGlvbgorICAgICAqIHxbMTE6OF0gIHxQSDEwTUZQICAgfFBILjEwIE11bHRpLWZ1bmN0aW9uIFBpbiBTZWxlY3Rpb24KKyAgICAgKiB8WzE1OjEyXSB8UEgxMU1GUCAgIHxQSC4xMSBNdWx0aS1mdW5jdGlvbiBQaW4gU2VsZWN0aW9uCisgICAgICogQHZhciBTWVNfVDo6R1BBX01GT1MKKyAgICAgKiBPZmZzZXQ6IDB4ODAvMHg4NC8weDg4LzB4OEMvMHg5MC8weDk0LzB4OUMgIEdQSU9BLUggTXVsdGlwbGUgRnVuY3Rpb24gT3V0cHV0IFNlbGVjdCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFtuXSAgICAgfE1GT1NuICAgICB8R1BJT0EtSCBQaW5bbl0gTXVsdGlwbGUgRnVuY3Rpb24gUGluIE91dHB1dCBNb2RlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHVzZWQgdG8gc2VsZWN0IG11bHRpcGxlIGZ1bmN0aW9uIHBpbiBvdXRwdXQgbW9kZSB0eXBlIGZvciBQeC5uIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTXVsdGlwbGUgZnVuY3Rpb24gcGluIG91dHB1dCBtb2RlIHR5cGUgaXMgUHVzaC1wdWxsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE11bHRpcGxlIGZ1bmN0aW9uIHBpbiBvdXRwdXQgbW9kZSB0eXBlIGlzIE9wZW4tZHJhaW4gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNSBmb3IgcG9ydCBBL0IvRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTMgZm9yIHBvcnQgQy4gVGhlIFBDLjE0LyBQQy4xNSBpcyBpZ25vcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1heC4gbj0xNCBmb3IgcG9ydCBELiBUaGUgUEQuMTUgaXMgaWdub3JlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNYXguIG49MTIgZm9yIHBvcnQgRi4gVGhlIFBGLjEyLyBQRi4xMy8gUEYuMTQvIFBGLjE1IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTE1IGZvciBwb3J0IEcuIFRoZSBQRy4wLyBQRy4xLyBQRy41LyBQRy42LyBQRy43LyBQRy44IGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TWF4LiBuPTExIGZvciBwb3J0IEguIFRoZSBQSC4wLyBQSC4xLyBQSC4yLyBQSC4zLyBQSC4xMi8gUEguMTMvIFBILjE0LyBQSC4xNSBpcyBpZ25vcmVkLgorICAgICAqIEB2YXIgU1lTX1Q6OlNSQU1JQ1RMCisgICAgICogT2Zmc2V0OiAweEMwICBTeXN0ZW0gU1JBTSBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQRVJSSUVOICAgfFNSQU0gUGFyaXR5IENoZWNrIEVycm9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNSQU0gcGFyaXR5IGNoZWNrIGVycm9yIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1JBTSBwYXJpdHkgY2hlY2sgZXJyb3IgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogQHZhciBTWVNfVDo6U1JBTVNUUworICAgICAqIE9mZnNldDogMHhDNCAgU3lzdGVtIFNSQU0gUGFyaXR5IEVycm9yIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFBFUlJJRiAgICB8U1JBTSBQYXJpdHkgQ2hlY2sgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgU3lzdGVtIFNSQU0gcGFyaXR5IGVycm9yIG9jY3VycmVkLiBXcml0ZSAxIHRvIGNsZWFyIHRoaXMgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gU3lzdGVtIFNSQU0gcGFyaXR5IGVycm9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTeXN0ZW0gU1JBTSBwYXJpdHkgZXJyb3Igb2NjdXIuCisgICAgICogQHZhciBTWVNfVDo6U1JBTUVBRFIKKyAgICAgKiBPZmZzZXQ6IDB4QzggIFN5c3RlbSBTUkFNIFBhcml0eSBDaGVjayBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjBdICB8RVJSQUREUiAgIHxTeXN0ZW0gU1JBTSBQYXJpdHkgRXJyb3IgQWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgcmVnaXN0ZXIgc2hvd3Mgc3lzdGVtIFNSQU0gcGFyaXR5IGVycm9yIGJ5dGUgYWRkcmVzcy4KKyAgICAgKiBAdmFyIFNZU19UOjpTUkFNUENUTAorICAgICAqIE9mZnNldDogMHhEQyAgU3lzdGVtIFNSQU0gUG93ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8U1RBQ0sgICAgIHxTeXN0ZW0gU1JBTSBTdGFjayBQb3NpdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIG11c3QgY29uZmlndXJlIHRoZSBzeXN0ZW0gU1JBTSBNYXJjbyB0aGF0IGZpcnN0IFNSQU0gYWRkcmVzcyBhY2Nlc3NlZCBieSBDUFUgaW4gcG93ZXItb24gcHJvY2Vzcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzU6NF0gICB8UkVUQ05UICAgIHxTUkFNIFJldGVudGlvbiBDb3VudCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNhbiBjb25maWd1cmUgU1JBTSBtYWNybyByZXRlbnRpb24gdGltZSBpbiB1bml0IG9mIEhJUkMgcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gT25lIEhJUkMgcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gVHdvIEhJUkMgcGVyaW9kcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFRocmVlIEhJUkMgcGVyaW9kcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEZvdXIgSElSQyBwZXJpb2RzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOTo4XSAgIHxTUkFNMFBNMCAgfEJhbmswIFNSQU0gUG93ZXIgTW9kZSBTZWxlY3QgMCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNhbiBjb250cm9sIGJhbmswIFNSQU0gKDMyaykgcG93ZXIgbW9kZSBpbiBzeXN0ZW0gcG93ZXIgZG93biBtb2RlIGZvciByYW5nZSAweDIwMDBfMDAwMCAtIDB4MjAwMF8xRkZGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTm9ybWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXRlbnRpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBvd2VyIHNodXQgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQgKFdyaXRlIElnbm9yZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEJhbmswIFNSQU0gaXMgYWx3YXlzIG9wZXJhdGluZyBpbiBwb3dlciBzaHV0IGRvd24gbW9kZSBmb3Igc3lzdGVtIGVudGVyIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzExOjEwXSB8U1JBTTBQTTEgIHxCYW5rMCBTUkFNIFBvd2VyIE1vZGUgU2VsZWN0IDEgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBiYW5rMCBTUkFNICgzMmspIHBvd2VyIG1vZGUgaW4gc3lzdGVtIGVudGVyIHBvd2VyIGRvd24gbW9kZSBmb3IgcmFuZ2UgMHgyMDAwXzIwMDAgLSAweDIwMDBfM0ZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE5vcm1hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmV0ZW50aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQb3dlciBzaHV0IGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkIChXcml0ZSBJZ25vcmUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBCYW5rMCBTUkFNIGlzIGFsd2F5cyBvcGVyYXRpbmcgaW4gcG93ZXIgc2h1dCBkb3duIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxMzoxMl0gfFNSQU0wUE0yICB8QmFuazAgU1JBTSBQb3dlciBNb2RlIFNlbGVjdCAyIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY2FuIGNvbnRyb2wgYmFuazAgU1JBTSAoMzJrKSBwb3dlciBtb2RlIGluIHN5c3RlbSBlbnRlciBwb3dlciBkb3duIG1vZGUgZm9yIHJhbmdlIDB4MjAwNF8wMDAwIC0gMHgyMDAwXzVGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZCAoV3JpdGUgSWdub3JlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmFuayAwIFNSQU0gaXMgYWx3YXlzIG9wZXJhdGluZyBpbiBwb3dlciBzaHV0IGRvd24gbW9kZSBmb3Igc3lzdGVtIGVudGVyIERlZXAgUG93ZXItZG93biBNb2RlIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE1OjE0XSB8U1JBTTBQTTMgIHxCYW5rMCBTUkFNIFBvd2VyIE1vZGUgU2VsZWN0IDMgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBiYW5rMCBTUkFNICgzMmspIHBvd2VyIG1vZGUgaW4gc3lzdGVtIGVudGVyIHBvd2VyIGRvd24gbW9kZSBmb3IgcmFuZ2UgMHgyMDA2XzAwMDAgLSAweDIwMDBfN0ZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE5vcm1hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmV0ZW50aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQb3dlciBzaHV0IGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkIChXcml0ZSBJZ25vcmUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBCYW5rMCBTUkFNIGlzIGFsd2F5cyBvcGVyYXRpbmcgaW4gcG93ZXIgc2h1dCBkb3duIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNzoxNl0gfFNSQU0xUE0wICB8QmFuazEgU1JBTSBQb3dlciBNb2RlIFNlbGVjdCAwIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY2FuIGNvbnRyb2wgYmFuazEgU1JBTSAoNjRrKSBwb3dlciBtb2RlIGluIHN5c3RlbSBlbnRlciBwb3dlciBkb3duIG1vZGUgZm9yIHJhbmdlIDB4MjAwMF84MDAwIC0gMHgyMDAwX0JGRkYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZCAoV3JpdGUgSWdub3JlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmFuazEgU1JBTSBpcyBhbHdheXMgb3BlcmF0aW5nIGluIHBvd2VyIHNodXQgZG93biBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgYW5kIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE5OjE4XSB8U1JBTTFQTTEgIHxCYW5rMSBTUkFNIFBvd2VyIE1vZGUgU2VsZWN0IDEgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBiYW5rMSBTUkFNICg2NGspIHBvd2VyIG1vZGUgaW4gc3lzdGVtIGVudGVyIHBvd2VyIGRvd24gbW9kZSBmb3IgcmFuZ2UgMHgyMDAwX0MwMDAgLSAweDIwMDBfRkZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE5vcm1hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmV0ZW50aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQb3dlciBzaHV0IGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmFuazEgU1JBTSBpcyBhbHdheXMgb3BlcmF0aW5nIGluIHBvd2VyIHNodXQgZG93biBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgYW5kIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzIxOjIwXSB8U1JBTTFQTTIgIHxCYW5rMSBTUkFNIFBvd2VyIE1vZGUgU2VsZWN0IDIgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBiYW5rMSBTUkFNICg2NGspIHBvd2VyIG1vZGUgaW4gc3lzdGVtIGVudGVyIHBvd2VyIGRvd24gbW9kZSBmb3IgcmFuZ2UgMHgyMDAxXzAwMDAgLSAweDIwMDFfM0ZGRi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE5vcm1hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmV0ZW50aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQb3dlciBzaHV0IGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkIChXcml0ZSBJZ25vcmUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBCYW5rMSBTUkFNIGlzIGFsd2F5cyBvcGVyYXRpbmcgaW4gcG93ZXIgc2h1dCBkb3duIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSBhbmQgRGVlcCBQb3dlci1kb3duIG1vZGUgKERQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMjM6MjJdIHxTUkFNMVBNMyAgfEJhbmsxIFNSQU0gUG93ZXIgTW9kZSBTZWxlY3QgMyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNhbiBjb250cm9sIGJhbmsxIFNSQU0gKDY0aykgcG93ZXIgbW9kZSBpbiBzeXN0ZW0gZW50ZXIgcG93ZXIgZG93biBtb2RlIGZvciByYW5nZSAweDIwMDFfNDAwMCAtIDB4MjAwMV83RkZGCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZCAoV3JpdGUgSWdub3JlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmFuazEgU1JBTSBpcyBhbHdheXMgb3BlcmF0aW5nIGluIHBvd2VyIHNodXQgZG93biBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgYW5kIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFNZU19UOjpTUkFNUFBDVAorICAgICAqIE9mZnNldDogMHhFMCAgUGVyaXBoZXJhbCBTUkFNIFBvd2VyIE1vZGUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfENBTiAgICAgICB8Q0FOIFNSQU0gUG93ZXIgTW9kZSBTZWxlY3QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBDQU4gU1JBTSBwb3dlciBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgcG93ZXIgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTm9ybWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXRlbnRpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBvd2VyIHNodXQgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQgKFdyaXRlIElnbm9yZSkuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBQZXJpcGhlcmFsIFNSQU0gaXMgYWx3YXlzIG9wZXJhdGluZyBpbiBwb3dlciBzaHV0IGRvd24gbW9kZSBmb3Igc3lzdGVtIGVudGVyIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIGFuZCBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszOjJdICAgfFVTQkQgICAgICB8VVNCIERldmljZSBTUkFNIFBvd2VyIE1vZGUgU2VsZWN0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY2FuIGNvbnRyb2wgVVNCIGRldmljZSBTUkFNIHBvd2VyIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBwb3dlciBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZCAoV3JpdGUgSWdub3JlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogUGVyaXBoZXJhbCBTUkFNIGlzIGFsd2F5cyBvcGVyYXRpbmcgaW4gcG93ZXIgc2h1dCBkb3duIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSBhbmQgRGVlcCBQb3dlci1kb3duIG1vZGUgKERQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNTo0XSAgIHxQRE1BMCAgICAgfFBETUEgU1JBTSBQb3dlciBNb2RlIFNlbGVjdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNhbiBjb250cm9sIFBETUEwIChhbHdheXMgc2VjdXJlKSBTUkFNIHBvd2VyIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBwb3dlciBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOb3JtYWwgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFJldGVudGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUG93ZXIgc2h1dCBkb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBSZXNlcnZlZCAoV3JpdGUgSWdub3JlKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogUGVyaXBoZXJhbCBTUkFNIGlzIGFsd2F5cyBvcGVyYXRpbmcgaW4gcG93ZXIgc2h1dCBkb3duIG1vZGUgZm9yIHN5c3RlbSBlbnRlciBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSAoU1BEKSBhbmQgRGVlcCBQb3dlci1kb3duIG1vZGUgKERQRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNzo2XSAgIHxQRE1BMSAgICAgfFBETUEgU1JBTSBQb3dlciBNb2RlIFNlbGVjdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNhbiBjb250cm9sIFBETUExIFNSQU0gcG93ZXIgbW9kZSBmb3Igc3lzdGVtIGVudGVyIHBvd2VyIGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IE5vcm1hbCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUmV0ZW50aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBQb3dlciBzaHV0IGRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkIChXcml0ZSBJZ25vcmUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBQZXJpcGhlcmFsIFNSQU0gaXMgYWx3YXlzIG9wZXJhdGluZyBpbiBwb3dlciBzaHV0IGRvd24gbW9kZSBmb3Igc3lzdGVtIGVudGVyIFN0YW5kYnkgUG93ZXItZG93biBtb2RlIChTUEQpIGFuZCBEZWVwIFBvd2VyLWRvd24gbW9kZSAoRFBEKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs5OjhdICAgfEZNQyAgICAgICB8Rk1DIFNSQU0gUG93ZXIgTW9kZSBTZWxlY3QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBjYW4gY29udHJvbCBGTUMgY2FjaGUgU1JBTSBwb3dlciBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgcG93ZXIgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gTm9ybWFsIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBSZXRlbnRpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFBvd2VyIHNodXQgZG93biBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQgKFdyaXRlIElnbm9yZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFBlcmlwaGVyYWwgU1JBTSBpcyBhbHdheXMgb3BlcmF0aW5nIGluIHBvd2VyIHNodXQgZG93biBtb2RlIGZvciBzeXN0ZW0gZW50ZXIgU3RhbmRieSBQb3dlci1kb3duIG1vZGUgKFNQRCkgYW5kIERlZXAgUG93ZXItZG93biBtb2RlIChEUEQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFNZU19UOjpUQ1RMNDhNCisgICAgICogT2Zmc2V0OiAweEU0ICBISVJDIDQ4TSBUcmltIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxGUkVRU0VMICAgfFRyaW0gRnJlcXVlbmN5IFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSB0YXJnZXQgZnJlcXVlbmN5IG9mIDQ4IE1IeiBpbnRlcm5hbCBoaWdoIHNwZWVkIFJDIG9zY2lsbGF0b3IgKEhJUkM0OCkgYXV0byB0cmltLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfER1cmluZyBhdXRvIHRyaW0gb3BlcmF0aW9uLCBpZiBjbG9jayBlcnJvciBkZXRlY3RlZCB3aXRoIENFU1RPUEVOIGlzIHNldCB0byAxIG9yIHRyaW0gcmV0cnkgbGltaXRhdGlvbiBjb3VudCByZWFjaGVkLCB0aGlzIGZpZWxkIHdpbGwgYmUgY2xlYXJlZCB0byAwMCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRGlzYWJsZSBISVJDIGF1dG8gdHJpbSBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IEVuYWJsZSBISVJDIGF1dG8gdHJpbSBmdW5jdGlvbiBhbmQgdHJpbSBISVJDIHRvIDQ4IE1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFJlc2VydmVkLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkLgorICAgICAqIHxbNTo0XSAgIHxMT09QU0VMICAgfFRyaW0gQ2FsY3VsYXRpb24gTG9vcCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGRlZmluZXMgdGhhdCB0cmltIHZhbHVlIGNhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIGhvdyBtYW55IHJlZmVyZW5jZSBjbG9ja3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBUcmltIHZhbHVlIGNhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIGF2ZXJhZ2UgZGlmZmVyZW5jZSBpbiA0IGNsb2NrcyBvZiByZWZlcmVuY2UgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBUcmltIHZhbHVlIGNhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIGF2ZXJhZ2UgZGlmZmVyZW5jZSBpbiA4IGNsb2NrcyBvZiByZWZlcmVuY2UgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBUcmltIHZhbHVlIGNhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIGF2ZXJhZ2UgZGlmZmVyZW5jZSBpbiAxNiBjbG9ja3Mgb2YgcmVmZXJlbmNlIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gVHJpbSB2YWx1ZSBjYWxjdWxhdGlvbiBpcyBiYXNlZCBvbiBhdmVyYWdlIGRpZmZlcmVuY2UgaW4gMzIgY2xvY2tzIG9mIHJlZmVyZW5jZSBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBGb3IgZXhhbXBsZSwgaWYgTE9PUFNFTCBpcyBzZXQgYXMgMDAsIGF1dG8gdHJpbSBjaXJjdWl0IHdpbGwgY2FsY3VsYXRlIHRyaW0gdmFsdWUgYmFzZWQgb24gdGhlIGF2ZXJhZ2UgZnJlcXVlbmN5IGRpZmZlcmVuY2UgaW4gNCBjbG9ja3Mgb2YgcmVmZXJlbmNlIGNsb2NrLgorICAgICAqIHxbNzo2XSAgIHxSRVRSWUNOVCAgfFRyaW0gVmFsdWUgVXBkYXRlIExpbWl0YXRpb24gQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGRlZmluZXMgdGhhdCBob3cgbWFueSB0aW1lcyB0aGUgYXV0byB0cmltIGNpcmN1aXQgd2lsbCB0cnkgdG8gdXBkYXRlIHRoZSBISVJDIHRyaW0gdmFsdWUgYmVmb3JlIHRoZSBmcmVxdWVuY3kgb2YgSElSQyBsb2NrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSB0aGUgSElSQyBsb2NrZWQsIHRoZSBpbnRlcm5hbCB0cmltIHZhbHVlIHVwZGF0ZSBjb3VudGVyIHdpbGwgYmUgcmVzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHRyaW0gdmFsdWUgdXBkYXRlIGNvdW50ZXIgcmVhY2hlZCB0aGlzIGxpbWl0YXRpb24gdmFsdWUgYW5kIGZyZXF1ZW5jeSBvZiBISVJDIHN0aWxsIGRvZXNuJ3QgbG9jaywgdGhlIGF1dG8gdHJpbSBvcGVyYXRpb24gd2lsbCBiZSBkaXNhYmxlZCBhbmQgRlJFUVNFTCB3aWxsIGJlIGNsZWFyZWQgdG8gMDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBUcmltIHJldHJ5IGNvdW50IGxpbWl0YXRpb24gaXMgNjQgbG9vcHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBUcmltIHJldHJ5IGNvdW50IGxpbWl0YXRpb24gaXMgMTI4IGxvb3BzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVHJpbSByZXRyeSBjb3VudCBsaW1pdGF0aW9uIGlzIDI1NiBsb29wcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFRyaW0gcmV0cnkgY291bnQgbGltaXRhdGlvbiBpcyA1MTIgbG9vcHMuCisgICAgICogfFs4XSAgICAgfENFU1RPUEVOICB8Q2xvY2sgRXJyb3IgU3RvcCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB0cmltIG9wZXJhdGlvbiBpcyBrZWVwIGdvaW5nIGlmIGNsb2NrIGlzIGluYWNjdXJhY3kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0cmltIG9wZXJhdGlvbiBpcyBzdG9wcGVkIGlmIGNsb2NrIGlzIGluYWNjdXJhY3kuCisgICAgICogfFsxMF0gICAgfFJFRkNLU0VMICB8UmVmZXJlbmNlIENsb2NrIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBISVJDIHRyaW0gNDhNIHJlZmVyZW5jZSBjbG9jayBpcyBmcm9tIGV4dGVybmFsIDMyLjc2OCBrSHogY3J5c3RhbCBvc2NpbGxhdG9yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBISVJDIHRyaW0gNDhNIHJlZmVyZW5jZSBjbG9jayBpcyBmcm9tIGludGVybmFsIFVTQiBzeW5jaHJvbm91cyBtb2RlLgorICAgICAqIEB2YXIgU1lTX1Q6OlRJRU40OE0KKyAgICAgKiBPZmZzZXQ6IDB4RTggIEhJUkMgNDhNIFRyaW0gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxXSAgICAgfFRGQUlMSUVOICB8VHJpbSBGYWlsdXJlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY29udHJvbHMgaWYgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoaWxlIEhJUkMgdHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCByZWFjaGVkIGFuZCBISVJDIGZyZXF1ZW5jeSBzdGlsbCBub3QgbG9ja2VkIG9uIHRhcmdldCBmcmVxdWVuY3kgc2V0IGJ5IEZSRVFTRUwoU1lTX1RDVEw0OE1bMTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgaGlnaCBhbmQgVEZBSUxJRihTWVNfVElTVFM0OE1bMV0pIGlzIHNldCBkdXJpbmcgYXV0byB0cmltIG9wZXJhdGlvbiwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHRvIG5vdGlmeSB0aGF0IEhJUkMgdHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCB3YXMgcmVhY2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGlzYWJsZSBURkFJTElGKFNZU19TWVNfVElTVFM0OE1bMV0pIHN0YXR1cyB0byB0cmlnZ2VyIGFuIGludGVycnVwdCB0byBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVuYWJsZSBURkFJTElGKFNZU19TWVNfVElTVFM0OE1NWzFdKSBzdGF0dXMgdG8gdHJpZ2dlciBhbiBpbnRlcnJ1cHQgdG8gQ1BVLgorICAgICAqIHxbMl0gICAgIHxDTEtFSUVOICAgfENsb2NrIEVycm9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY29udHJvbHMgaWYgQ1BVIHdvdWxkIGdldCBhbiBpbnRlcnJ1cHQgd2hpbGUgY2xvY2sgaXMgaW5hY2N1cmFjeSBkdXJpbmcgYXV0byB0cmltIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8xLCBhbmQgQ0xLRVJSSUYoU1lTX1NZU19USVNUUzQ4TVsyXSkgaXMgc2V0IGR1cmluZyBhdXRvIHRyaW0gb3BlcmF0aW9uLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgdG8gbm90aWZ5IHRoZSBjbG9jayBmcmVxdWVuY3kgaXMgaW5hY2N1cmFjeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGlzYWJsZSBDTEtFUlJJRihTWVNfU1lTX1RJU1RTNDhNWzJdKSBzdGF0dXMgdG8gdHJpZ2dlciBhbiBpbnRlcnJ1cHQgdG8gQ1BVLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFbmFibGUgQ0xLRVJSSUYoU1lTX1NZU19USVNUUzQ4TVsyXSkgc3RhdHVzIHRvIHRyaWdnZXIgYW4gaW50ZXJydXB0IHRvIENQVS4KKyAgICAgKiBAdmFyIFNZU19UOjpUSVNUUzQ4TQorICAgICAqIE9mZnNldDogMHhFQyAgSElSQyA0OE0gVHJpbSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RlJFUUxPQ0sgIHxISVJDIEZyZXF1ZW5jeSBMb2NrIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgSElSQyBmcmVxdWVuY3kgaXMgbG9ja2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgaXMgYSBzdGF0dXMgYml0IGFuZCBkb2Vzbid0IHRyaWdnZXIgYW55IGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIGNsZWFyIHRoaXMgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5LCBpZiB0aGUgZnJlcXVlbmN5IGlzIGxvY2sgYW5kIHRoZSBSQ19UUklNIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBpbnRlcm5hbCBoaWdoLXNwZWVkIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGRvZXNuJ3QgbG9jayBhdCA0OCBNSHogeWV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgaW50ZXJuYWwgaGlnaC1zcGVlZCBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBsb2NrZWQgYXQgNDggTUh6LgorICAgICAqIHxbMV0gICAgIHxURkFJTElGICAgfFRyaW0gRmFpbHVyZSBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgSElSQyB0cmltIHZhbHVlIHVwZGF0ZSBsaW1pdGF0aW9uIGNvdW50IHJlYWNoZWQgYW5kIHRoZSBISVJDIGNsb2NrIGZyZXF1ZW5jeSBzdGlsbCBkb2Vzbid0IGJlIGxvY2tlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbmNlIHRoaXMgYml0IGlzIHNldCwgdGhlIGF1dG8gdHJpbSBvcGVyYXRpb24gc3RvcHBlZCBhbmQgRlJFUVNFTChTWVNfVENUTDQ4TVsxOjBdKSB3aWxsIGJlIGNsZWFyZWQgdG8gMDAgYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgYW5kIFRGQUlMSUVOKFNZU19USUVONDhNWzFdKSBpcyBoaWdoLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgdG8gbm90aWZ5IHRoYXQgSElSQyB0cmltIHZhbHVlIHVwZGF0ZSBsaW1pdGF0aW9uIGNvdW50IHdhcyByZWFjaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gY2xlYXIgdGhpcyB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmltIHZhbHVlIHVwZGF0ZSBsaW1pdGF0aW9uIGNvdW50IGRvZXMgbm90IHJlYWNoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmltIHZhbHVlIHVwZGF0ZSBsaW1pdGF0aW9uIGNvdW50IHJlYWNoZWQgYW5kIEhJUkMgZnJlcXVlbmN5IHN0aWxsIG5vdCBsb2NrZWQuCisgICAgICogfFsyXSAgICAgfENMS0VSUklGICB8Q2xvY2sgRXJyb3IgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIGZyZXF1ZW5jeSBvZiAzMi43Njgga0h6IGV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIG9zY2lsbGF0b3IgKExYVCkgb3IgNDhNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDNDgpIGlzIHNoaWZ0IGxhcmdlciB0byB1bnJlYXNvbmFibGUgdmFsdWUsIHRoaXMgYml0IHdpbGwgYmUgc2V0IGFuZCB0byBiZSBhbiBpbmRpY2F0ZSB0aGF0IGNsb2NrIGZyZXF1ZW5jeSBpcyBpbmFjY3VyYWN5CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdGhlIGF1dG8gdHJpbSBvcGVyYXRpb24gc3RvcHBlZCBhbmQgRlJFUVNFTChTWVNfVElDVEw0OE1bMTowXSkgd2lsbCBiZSBjbGVhcmVkIHRvIDAwIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgaWYgQ0VTVE9QRU4oU1lTX1RDVEw0OE1bOF0pIGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCBhbmQgQ0xLRUlFTihTWVNfVElFTjQ4TVsyXSkgaXMgaGlnaCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHRvIG5vdGlmeSB0aGUgY2xvY2sgZnJlcXVlbmN5IGlzIGluYWNjdXJhY3kuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBjbGVhciB0aGlzIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENsb2NrIGZyZXF1ZW5jeSBpcyBhY2N1cmFjeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgZnJlcXVlbmN5IGlzIGluYWNjdXJhY3kuCisgICAgICogQHZhciBTWVNfVDo6VENUTDEyTQorICAgICAqIE9mZnNldDogMHhGMCAgSElSQyAxMk0gVHJpbSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8RlJFUVNFTCAgIHxUcmltIEZyZXF1ZW5jeSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgdGFyZ2V0IGZyZXF1ZW5jeSBvZiAxMiBNSHogaW50ZXJuYWwgaGlnaCBzcGVlZCBSQyBvc2NpbGxhdG9yIChISVJDKSBhdXRvIHRyaW0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RHVyaW5nIGF1dG8gdHJpbSBvcGVyYXRpb24sIGlmIGNsb2NrIGVycm9yIGRldGVjdGVkIHdpdGggQ0VTVE9QRU4gaXMgc2V0IHRvIDEgb3IgdHJpbSByZXRyeSBsaW1pdGF0aW9uIGNvdW50IHJlYWNoZWQsIHRoaXMgZmllbGQgd2lsbCBiZSBjbGVhcmVkIHRvIDAwIGF1dG9tYXRpY2FsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBEaXNhYmxlIEhJUkMgYXV0byB0cmltIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRW5hYmxlIEhJUkMgYXV0byB0cmltIGZ1bmN0aW9uIGFuZCB0cmltIEhJUkMgdG8gMTIgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUmVzZXJ2ZWQuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfFs1OjRdICAgfExPT1BTRUwgICB8VHJpbSBDYWxjdWxhdGlvbiBMb29wIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgZGVmaW5lcyB0aGF0IHRyaW0gdmFsdWUgY2FsY3VsYXRpb24gaXMgYmFzZWQgb24gaG93IG1hbnkgcmVmZXJlbmNlIGNsb2Nrcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFRyaW0gdmFsdWUgY2FsY3VsYXRpb24gaXMgYmFzZWQgb24gYXZlcmFnZSBkaWZmZXJlbmNlIGluIDQgY2xvY2tzIG9mIHJlZmVyZW5jZSBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFRyaW0gdmFsdWUgY2FsY3VsYXRpb24gaXMgYmFzZWQgb24gYXZlcmFnZSBkaWZmZXJlbmNlIGluIDggY2xvY2tzIG9mIHJlZmVyZW5jZSBjbG9jay4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFRyaW0gdmFsdWUgY2FsY3VsYXRpb24gaXMgYmFzZWQgb24gYXZlcmFnZSBkaWZmZXJlbmNlIGluIDE2IGNsb2NrcyBvZiByZWZlcmVuY2UgY2xvY2suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBUcmltIHZhbHVlIGNhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIGF2ZXJhZ2UgZGlmZmVyZW5jZSBpbiAzMiBjbG9ja3Mgb2YgcmVmZXJlbmNlIGNsb2NrLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEZvciBleGFtcGxlLCBpZiBMT09QU0VMIGlzIHNldCBhcyAwMCwgYXV0byB0cmltIGNpcmN1aXQgd2lsbCBjYWxjdWxhdGUgdHJpbSB2YWx1ZSBiYXNlZCBvbiB0aGUgYXZlcmFnZSBmcmVxdWVuY3kgZGlmZmVyZW5jZSBpbiA0IGNsb2NrcyBvZiByZWZlcmVuY2UgY2xvY2suCisgICAgICogfFs3OjZdICAgfFJFVFJZQ05UICB8VHJpbSBWYWx1ZSBVcGRhdGUgTGltaXRhdGlvbiBDb3VudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgZGVmaW5lcyB0aGF0IGhvdyBtYW55IHRpbWVzIHRoZSBhdXRvIHRyaW0gY2lyY3VpdCB3aWxsIHRyeSB0byB1cGRhdGUgdGhlIEhJUkMgdHJpbSB2YWx1ZSBiZWZvcmUgdGhlIGZyZXF1ZW5jeSBvZiBISVJDIGxvY2tlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbmNlIHRoZSBISVJDIGxvY2tlZCwgdGhlIGludGVybmFsIHRyaW0gdmFsdWUgdXBkYXRlIGNvdW50ZXIgd2lsbCBiZSByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgdHJpbSB2YWx1ZSB1cGRhdGUgY291bnRlciByZWFjaGVkIHRoaXMgbGltaXRhdGlvbiB2YWx1ZSBhbmQgZnJlcXVlbmN5IG9mIEhJUkMgc3RpbGwgZG9lc24ndCBsb2NrLCB0aGUgYXV0byB0cmltIG9wZXJhdGlvbiB3aWxsIGJlIGRpc2FibGVkIGFuZCBGUkVRU0VMIHdpbGwgYmUgY2xlYXJlZCB0byAwMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFRyaW0gcmV0cnkgY291bnQgbGltaXRhdGlvbiBpcyA2NCBsb29wcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFRyaW0gcmV0cnkgY291bnQgbGltaXRhdGlvbiBpcyAxMjggbG9vcHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBUcmltIHJldHJ5IGNvdW50IGxpbWl0YXRpb24gaXMgMjU2IGxvb3BzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gVHJpbSByZXRyeSBjb3VudCBsaW1pdGF0aW9uIGlzIDUxMiBsb29wcy4KKyAgICAgKiB8WzhdICAgICB8Q0VTVE9QRU4gIHxDbG9jayBFcnJvciBTdG9wIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHRyaW0gb3BlcmF0aW9uIGlzIGtlZXAgZ29pbmcgaWYgY2xvY2sgaXMgaW5hY2N1cmFjeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHRyaW0gb3BlcmF0aW9uIGlzIHN0b3BwZWQgaWYgY2xvY2sgaXMgaW5hY2N1cmFjeS4KKyAgICAgKiB8WzEwXSAgICB8UkVGQ0tTRUwgIHxSZWZlcmVuY2UgQ2xvY2sgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEhJUkMgdHJpbSByZWZlcmVuY2UgY2xvY2sgaXMgZnJvbSBleHRlcm5hbCAzMi43Njgga0h6IGNyeXN0YWwgb3NjaWxsYXRvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSElSQyB0cmltIHJlZmVyZW5jZSBjbG9jayBpcyBmcm9tIGludGVybmFsIFVTQiBzeW5jaHJvbm91cyBtb2RlLgorICAgICAqIEB2YXIgU1lTX1Q6OlRJRU4xMk0KKyAgICAgKiBPZmZzZXQ6IDB4RjQgIEhJUkMgMTJNIFRyaW0gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxXSAgICAgfFRGQUlMSUVOICB8VHJpbSBGYWlsdXJlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY29udHJvbHMgaWYgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoaWxlIEhJUkMgdHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCByZWFjaGVkIGFuZCBISVJDIGZyZXF1ZW5jeSBzdGlsbCBub3QgbG9ja2VkIG9uIHRhcmdldCBmcmVxdWVuY3kgc2V0IGJ5IEZSRVFTRUwoU1lTX1RDVEwxMk1bMTowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgaGlnaCBhbmQgVEZBSUxJRihTWVNfVElTVFMxMk1bMV0pIGlzIHNldCBkdXJpbmcgYXV0byB0cmltIG9wZXJhdGlvbiwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHRvIG5vdGlmeSB0aGF0IEhJUkMgdHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCB3YXMgcmVhY2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGlzYWJsZSBURkFJTElGKFNZU19USVNUUzEyTVsxXSkgc3RhdHVzIHRvIHRyaWdnZXIgYW4gaW50ZXJydXB0IHRvIENQVS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlIFRGQUlMSUYoU1lTX1RJU1RTMTJNWzFdKSBzdGF0dXMgdG8gdHJpZ2dlciBhbiBpbnRlcnJ1cHQgdG8gQ1BVLgorICAgICAqIHxbMl0gICAgIHxDTEtFSUVOICAgfENsb2NrIEVycm9yIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY29udHJvbHMgaWYgQ1BVIHdvdWxkIGdldCBhbiBpbnRlcnJ1cHQgd2hpbGUgY2xvY2sgaXMgaW5hY2N1cmFjeSBkdXJpbmcgYXV0byB0cmltIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8xLCBhbmQgQ0xLRVJSSUYoU1lTX1RJU1RTMTJNWzJdKSBpcyBzZXQgZHVyaW5nIGF1dG8gdHJpbSBvcGVyYXRpb24sIGFuIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZCB0byBub3RpZnkgdGhlIGNsb2NrIGZyZXF1ZW5jeSBpcyBpbmFjY3VyYWN5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEaXNhYmxlIENMS0VSUklGKFNZU19USVNUUzEyTVsyXSkgc3RhdHVzIHRvIHRyaWdnZXIgYW4gaW50ZXJydXB0IHRvIENQVS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRW5hYmxlIENMS0VSUklGKFNZU19USVNUUzEyTVsyXSkgc3RhdHVzIHRvIHRyaWdnZXIgYW4gaW50ZXJydXB0IHRvIENQVS4KKyAgICAgKiBAdmFyIFNZU19UOjpUSVNUUzEyTQorICAgICAqIE9mZnNldDogMHhGOCAgSElSQyAxMk0gVHJpbSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8RlJFUUxPQ0sgIHxISVJDIEZyZXF1ZW5jeSBMb2NrIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgSElSQyBmcmVxdWVuY3kgaXMgbG9ja2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgaXMgYSBzdGF0dXMgYml0IGFuZCBkb2Vzbid0IHRyaWdnZXIgYW55IGludGVycnVwdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gY2xlYXIgdGhpcyB0byAwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSwgaWYgdGhlIGZyZXF1ZW5jeSBpcyBsb2NrIGFuZCB0aGUgUkNfVFJJTSBpcyBlbmFibGVkLjAgPSBUaGUgaW50ZXJuYWwgaGlnaC1zcGVlZCBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBkb2Vzbid0IGxvY2sgYXQgMTIgTUh6IHlldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGludGVybmFsIGhpZ2gtc3BlZWQgb3NjaWxsYXRvciBmcmVxdWVuY3kgbG9ja2VkIGF0IDEyIE1Iei4KKyAgICAgKiB8WzFdICAgICB8VEZBSUxJRiAgIHxUcmltIEZhaWx1cmUgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IEhJUkMgdHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCByZWFjaGVkIGFuZCB0aGUgSElSQyBjbG9jayBmcmVxdWVuY3kgc3RpbGwgZG9lc24ndCBiZSBsb2NrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSB0aGlzIGJpdCBpcyBzZXQsIHRoZSBhdXRvIHRyaW0gb3BlcmF0aW9uIHN0b3BwZWQgYW5kIEZSRVFTRUwoU1lTX1RDVEwxMk1bMTowXSkgd2lsbCBiZSBjbGVhcmVkIHRvIDAwIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IGFuZCBURkFJTElFTihTWVNfVElFTjEyTVsxXSkgaXMgaGlnaCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkIHRvIG5vdGlmeSB0aGF0IEhJUkMgdHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCB3YXMgcmVhY2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIGNsZWFyIHRoaXMgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCBkb2VzIG5vdCByZWFjaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJpbSB2YWx1ZSB1cGRhdGUgbGltaXRhdGlvbiBjb3VudCByZWFjaGVkIGFuZCBISVJDIGZyZXF1ZW5jeSBzdGlsbCBub3QgbG9ja2VkLgorICAgICAqIHxbMl0gICAgIHxDTEtFUlJJRiAgfENsb2NrIEVycm9yIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBmcmVxdWVuY3kgb2YgMzIuNzY4IGtIeiBleHRlcm5hbCBsb3cgc3BlZWQgY3J5c3RhbCBvc2NpbGxhdG9yIChMWFQpIG9yIDEyTUh6IGludGVybmFsIGhpZ2ggc3BlZWQgUkMgb3NjaWxsYXRvciAoSElSQykgaXMgc2hpZnQgbGFyZ2VyIHRvIHVucmVhc29uYWJsZSB2YWx1ZSwgdGhpcyBiaXQgd2lsbCBiZSBzZXQgYW5kIHRvIGJlIGFuIGluZGljYXRlIHRoYXQgY2xvY2sgZnJlcXVlbmN5IGlzIGluYWNjdXJhY3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPbmNlIHRoaXMgYml0IGlzIHNldCB0byAxLCB0aGUgYXV0byB0cmltIG9wZXJhdGlvbiBzdG9wcGVkIGFuZCBGUkVRU0VMKFNZU19USUNUTDEyTVsxOjBdKSB3aWxsIGJlIGNsZWFyZWQgdG8gMDAgYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseSBpZiBDRVNUT1BFTihTWVNfVENUTDEyTVs4XSkgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhpcyBiaXQgaXMgc2V0IGFuZCBDTEtFSUVOKFNZU19USUVOMTJNWzJdKSBpcyBoaWdoLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQgdG8gbm90aWZ5IHRoZSBjbG9jayBmcmVxdWVuY3kgaXMgaW5hY2N1cmFjeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIGNsZWFyIHRoaXMgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2xvY2sgZnJlcXVlbmN5IGlzIGFjY3VyYWN5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbG9jayBmcmVxdWVuY3kgaXMgaW5hY2N1cmFjeS4KKyAgICAgKiBAdmFyIFNZU19UOjpSRUdMQ1RMCisgICAgICogT2Zmc2V0OiAweDEwMCAgUmVnaXN0ZXIgTG9jayBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8UkVHTENUTCAgIHxSZWdpc3RlciBMb2NrIENvbnRyb2wgQ29kZSAoV3JpdGUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb21lIHJlZ2lzdGVycyBoYXZlIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIHRoZXNlIHJlZ2lzdGVycyBoYXZlIHRvIGRpc2FibGUgdGhlIHByb3RlY3RlZCBmdW5jdGlvbiBieSB3cml0aW5nIHRoZSBzZXF1ZW5jZSB2YWx1ZSA1OWgsIDE2aCwgODhoIHRvIHRoaXMgZmllbGQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgdGhpcyBzZXF1ZW5jZSBpcyBjb21wbGV0ZWQsIHRoZSBSRUdMQ1RMIGJpdCB3aWxsIGJlIHNldCB0byAxIGFuZCB3cml0ZS1wcm90ZWN0aW9uIHJlZ2lzdGVycyBjYW4gYmUgbm9ybWFsIHdyaXRlLgorICAgICAqIHxbMF0gICAgIHxSRUdMQ1RMWzBdfFJlZ2lzdGVyIExvY2sgQ29udHJvbCBEaXNhYmxlIEluZGV4IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdyaXRlLXByb3RlY3Rpb24gRW5hYmxlZCBmb3Igd3JpdGluZyBwcm90ZWN0ZWQgcmVnaXN0ZXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFueSB3cml0ZSB0byB0aGUgcHJvdGVjdGVkIHJlZ2lzdGVyIGlzIGlnbm9yZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdyaXRlLXByb3RlY3Rpb24gRGlzYWJsZWQgZm9yIHdyaXRpbmcgcHJvdGVjdGVkIHJlZ2lzdGVycy4KKyAgICAgKiBAdmFyIFNZU19UOjpQT1JDVEwxCisgICAgICogT2Zmc2V0OiAweDFFQyAgUG93ZXItb24gUmVzZXQgQ29udHJvbGxlciBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UE9ST0ZGICAgIHxQb3dlci1vbiBSZXNldCBFbmFibGUgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gcG93ZXJlZCBvbiwgdGhlIFBPUiBjaXJjdWl0IGdlbmVyYXRlcyBhIHJlc2V0IHNpZ25hbCB0byByZXNldCB0aGUgd2hvbGUgY2hpcCBmdW5jdGlvbiwgYnV0IG5vaXNlIG9uIHRoZSBwb3dlciBtYXkgY2F1c2UgdGhlIFBPUiBhY3RpdmUgYWdhaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gZGlzYWJsZSBpbnRlcm5hbCBQT1IgY2lyY3VpdCB0byBhdm9pZCB1bnByZWRpY3RhYmxlIG5vaXNlIHRvIGNhdXNlIGNoaXAgcmVzZXQgYnkgd3JpdGluZyAweDVBQTUgdG8gdGhpcyBmaWVsZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUE9SIGZ1bmN0aW9uIHdpbGwgYmUgYWN0aXZlIGFnYWluIHdoZW4gIHRoaXMgZmllbGQgaXMgc2V0IHRvIGFub3RoZXIgdmFsdWUgb3IgY2hpcCBpcyByZXNldCBieSBvdGhlciByZXNldCBzb3VyY2UsIGluY2x1ZGluZzoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxuUkVTRVQsIFdhdGNoZG9nLCBMVlIgcmVzZXQsIEJPRCByZXNldCwgSUNFIHJlc2V0IGNvbW1hbmQgYW5kIHRoZSBzb2Z0d2FyZS1jaGlwIHJlc2V0IGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZXNlIGJpdHMgYXJlIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgU1lTX1Q6OlBMQ1RMCisgICAgICogT2Zmc2V0OiAweDFGOCAgUG93ZXIgTGV2ZWwgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfFBMU0VMICAgICB8UG93ZXIgTGV2ZWwgU2VsZWN0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gU2V0IHRvIFBvd2VyIGxldmVsIDAgKFBMMCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBTZXQgdG8gUG93ZXIgbGV2ZWwgMSAoUEwxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGVzZSBiaXRzIGFyZSB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzRdICAgICB8TVZSUyAgICAgIHxNYWluIFZvbHRhZ2UgUmVndWxhdG9yIFR5cGUgU2VsZWN0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpbGVkIHNldHMgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFmdGVyIHNldHRpbmcgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIHRvIERDREMgKE1WUlMgKFNZU19QTENUTFs0XSkgPSAxKSBzeXN0ZW0gd2lsbCBzZXQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSBidXN5IGZsYWcgTVZSQ0JVU1koU1lTX1BMU1RTWzFdKSwgZGV0ZWN0IGluZHVjdG9yIGNvbm5lY3Rpb24gYW5kIHVwZGF0ZSBpbmR1Y3RvciBjb25uZWN0aW9uIHN0YXR1cyBMQ09OUyAoU1lTX1BMU1RTWzNdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBpbmR1Y3RvciBleGlzdCBMQ09OUyB3aWxsIGJlIGNsZWFyZCBhbmQgbWFpbiB2aWx0YWdlIHJlZ3VsYXRvciB0eXBlIGNhbiBzd2l0Y2ggdG8gRENEQyAoQ1VSTVZSUyAoU1lTX1BMU1RTWzEyXSk9MSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNldCBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHRvIExETy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdG8gRENEQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzIxOjE2XSB8TFZTU1RFUCAgIHxMRE8gVm9sdGFnZSBTY2FsaW5nIFN0ZXAgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIExWU1NURVAgdmFsdWUgaXMgTERPIHZvbHRhZ2UgcmlzaW5nIHN0ZXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TERPIHZvbHRhZ2Ugc2NhbGluZyBzdGVwID0gKExWU1NURVAgKyAxKSAqIDEwbVYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszMToyNF0gfExWU1BSRCAgICB8TERPIFZvbHRhZ2UgU2NhbGluZyBQZXJpb2QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIExWU1BSRCB2YWx1ZSBpcyB0aGUgcGVyaW9kIG9mIGVhY2ggTERPIHZvbHRhZ2UgcmlzaW5nIHN0ZXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TERPIHZvbHRhZ2Ugc2NhbGluZyBwZXJpb2QgPSAoTFZTUFJEICsgMSkgKiAxdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlc2UgYml0cyBhcmUgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBTWVNfVDo6UExTVFMKKyAgICAgKiBPZmZzZXQ6IDB4MUZDICBQb3dlciBMZXZlbCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQTENCVVNZICAgfFBvd2VyIExldmVsIENoYW5nZSBCdXN5IEJpdCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIHBvd2VyIGxldmVsIGlzIGNoYW5naW5nIC4gQWZ0ZXIgcG93ZXIgbGV2ZWwgY2hhbmdlIGlzIGNvbXBsZXRlZCwgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYnkgaGFyZHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvd2VyIGxldmVsIGNoYW5nZSBpcyBjb21wbGV0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvd2VyIGxldmVsIGNoYW5nZSBpcyBvbmdvaW5nLgorICAgICAqIHxbMV0gICAgIHxNVlJDQlVTWSAgfE1haW4gVm9sdGFnZSBSZWd1bGF0b3IgVHlwZSBDaGFuZ2UgQnVzeSBCaXQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgaXMgY2hhbmdpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QWZ0ZXIgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSBpcyBjb21wbGV0ZWQsIHRoaXMgYml0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgY2hhbmdlIGlzIGNvbXBsZXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSBpcyBvbmdvaW5nLgorICAgICAqIHxbMl0gICAgIHxNVlJDRVJSICAgfE1haW4gVm9sdGFnZSBSZWd1bGF0b3IgVHlwZSBDaGFuZ2UgRXJyb3IgQml0IChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byAxIHdoZW4gbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSBmcm9tIExETyB0byBEQ0RDIGVycm9yLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgd2lsbCBjYXVzZSBjaGFuZ2UgZXJyb3JzOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEuU3lzdGVtIGNoYW5nZSB0byBEQy1EQyBtb2RlIGJ1dCBMRE8gY2hhbmdlIHZvbHRhZ2UgcHJvY2VzcyBub3QgZmluaXNoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDIuRGV0ZWN0IGluZHVjdG9yIGZhaWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSBlcnJvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSB0byBEQ0RDIGVycm9yIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFycyBNVlJDRVJSIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFszXSAgICAgfExDT05TICAgICB8SW5kdWN0b3IgZm9yIERDLURDIENvbm5lY3QgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEluZHVjdG9yIGNvbm5lY3QgYmV0d2VlbiBWc3cgYW5kIExET19DQVAgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHZhbGlkIHdoZW4gY3VycmVudCBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgaXMgRENEQyAoQ1VSTVZSUyAoU1lTX1BMU1RTWzEyXSk9MSkuIElmIGN1cnJlbnQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGlzIExETyAoQ1VSTVZSUyAoU1lTX1BMU1RTWzEyXSk9MCksIHRoaXMgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmR1Y3RvciBjb25uZWN0IGJldHdlZW4gVnN3IGFuZCBMRE9fQ0FQIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTm8gSW5kdWN0b3IgY29ubmVjdCBiZXR3ZWVuIFZzdyBhbmQgTERPX0NBUCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgMSB3aGVuIG1haW4gdmlsdGFnZSByZWd1bGF0b3IgaXMgTERPLgorICAgICAqIHxbNF0gICAgIHxQRElOVlRSRiAgfFBvd2VyLWRvd24gTW9kZSBJbnZhbGlkIFRyYW5zaXRpb24gRmxhZyAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgaWYgdGhlIHJlcXVlc3RlZCBhY3RpdmUgRENEQyBtb2RlIHRvIFBvd2VyLWRvd24gbW9kZSB0cmFuc2l0aW9uIGlzIGludmFsaWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyB0cmFuc2l0aW9uIHJlcXVlc3Qgd2lsbCBiZSBhYm9ydGVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgc29mdHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZDoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUG93ZXItZG93biBtb2RlIGludmFsaWQgdHJhbnNpdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG93ZXItZG93biBtb2RlIGludmFsaWQgdHJhbnNpdGlvbiBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhcnMgdGhpcyBiaXQgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8Wzk6OF0gICB8UExTVEFUVVMgIHxQb3dlciBMZXZlbCBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCByZWZsZWN0IHRoZSBjdXJyZW50IHBvd2VyIGxldmVsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gUG93ZXIgbGV2ZWwgaXMgUEwwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUG93ZXIgbGV2ZWwgaXMgUEwxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVycyA9IFJlc2VydmVkLgorICAgICAqIHxbMTJdICAgIHxDVVJNVlIgICAgfEN1cnJlbnQgTWFpbiBWb2x0YWdlIFJlZ3VsYXRvciBUeXBlIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgcmVmbGVjdHMgY3VycmVudCBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEN1cnJlbnQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciBpbiBhY3RpdmUgYW5kIElkbGUgbW9kZSBpcyBMRE8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEN1cnJlbnQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciBpbiBhY3RpdmUgbW9kZSBhbmQgSWRsZSBpcyBEQ0RDLgorICAgICAqIEB2YXIgU1lTX1Q6OkFIQk1DVEwKKyAgICAgKiBPZmZzZXQ6IDB4NDAwICBBSEIgQnVzIE1hdHJpeCBQcmlvcml0eSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8SU5UQUNURU4gIHxIaWdoZXN0IEFIQiBCdXMgUHJpb3JpdHkgb2YgQ29ydGV4LU0yMyBDb3JlIEVuYWJsZSBCaXQgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RW5hYmxlIENvcnRleC1NMjMgY29yZSB3aXRoIGhpZ2hlc3QgQUhCIGJ1cyBwcmlvcml0eSBpbiBBSEIgYnVzIG1hdHJpeC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUnVuIHJvYmluIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvcnRleC1NMjMgQ1BVIHdpdGggaGlnaGVzdCBidXMgcHJpb3JpdHkgd2hlbiBpbnRlcnJ1cHQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqLworCisgICAgX19JICB1aW50MzJfdCBQRElEOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gUGFydCBEZXZpY2UgSWRlbnRpZmljYXRpb24gTnVtYmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUlNUU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFN5c3RlbSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElQUlNUMDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBQZXJpcGhlcmFsICBSZXNldCBDb250cm9sIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJUFJTVDE7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gUGVyaXBoZXJhbCBSZXNldCBDb250cm9sIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSVBSU1QyOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIFBlcmlwaGVyYWwgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzFdOworICAgIF9fSU8gdWludDMyX3QgQk9EQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMThdIEJyb3duLW91dCBEZXRlY3RvciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElWU0NUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDFjXSBJbnRlcm5hbCBWb2x0YWdlIFNvdXJjZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVsxXTsKKyAgICBfX0lPIHVpbnQzMl90IFBPUkNUTDA7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDI0XSBQb3dlci1vbiBSZXNldCBDb250cm9sbGVyIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBWUkVGQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAyOF0gVlJFRiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVVNCUEhZOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMkNdIFVTQiBQSFkgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQQV9NRlBMOyAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBHUElPQSBMb3cgQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEFfTUZQSDsgICAgICAgICAgICAgIC8qITwgWzB4MDAzNF0gR1BJT0EgSGlnaCBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BCX01GUEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwMzhdIEdQSU9CIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQQl9NRlBIOyAgICAgICAgICAgICAgLyohPCBbMHgwMDNjXSBHUElPQiBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUENfTUZQTDsgICAgICAgICAgICAgIC8qITwgWzB4MDA0MF0gR1BJT0MgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BDX01GUEg7ICAgICAgICAgICAgICAvKiE8IFsweDAwNDRdIEdQSU9DIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQRF9NRlBMOyAgICAgICAgICAgICAgLyohPCBbMHgwMDQ4XSBHUElPRCBMb3cgQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUERfTUZQSDsgICAgICAgICAgICAgIC8qITwgWzB4MDA0Y10gR1BJT0QgSGlnaCBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BFX01GUEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwNTBdIEdQSU9FIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQRV9NRlBIOyAgICAgICAgICAgICAgLyohPCBbMHgwMDU0XSBHUElPRSBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEZfTUZQTDsgICAgICAgICAgICAgIC8qITwgWzB4MDA1OF0gR1BJT0YgTG93IEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BGX01GUEg7ICAgICAgICAgICAgICAvKiE8IFsweDAwNUNdIEdQSU9GIEhpZ2ggQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQR19NRlBMOyAgICAgICAgICAgICAgLyohPCBbMHgwMDYwXSBHUElPRyBMb3cgQnl0ZSBNdWx0aXBsZSBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEdfTUZQSDsgICAgICAgICAgICAgIC8qITwgWzB4MDA2NF0gR1BJT0cgSGlnaCBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BIX01GUEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwNjhdIEdQSU9IIExvdyBCeXRlIE11bHRpcGxlIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQSF9NRlBIOyAgICAgICAgICAgICAgLyohPCBbMHgwMDZDXSBHUElPSCBIaWdoIEJ5dGUgTXVsdGlwbGUgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMls0XTsKKyAgICBfX0lPIHVpbnQzMl90IEdQQV9NRk9TOyAgICAgICAgICAgICAgLyohPCBbMHgwMDgwXSBHUElPQSBNdWx0aXBsZSBGdW5jdGlvbiBPdXRwdXQgU2VsZWN0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEJfTUZPUzsgICAgICAgICAgICAgIC8qITwgWzB4MDA4NF0gR1BJT0IgTXVsdGlwbGUgRnVuY3Rpb24gT3V0cHV0IFNlbGVjdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BDX01GT1M7ICAgICAgICAgICAgICAvKiE8IFsweDAwODhdIEdQSU9DIE11bHRpcGxlIEZ1bmN0aW9uIE91dHB1dCBTZWxlY3QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQRF9NRk9TOyAgICAgICAgICAgICAgLyohPCBbMHgwMDhjXSBHUElPRCBNdWx0aXBsZSBGdW5jdGlvbiBPdXRwdXQgU2VsZWN0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEVfTUZPUzsgICAgICAgICAgICAgIC8qITwgWzB4MDA5MF0gR1BJT0UgTXVsdGlwbGUgRnVuY3Rpb24gT3V0cHV0IFNlbGVjdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgR1BGX01GT1M7ICAgICAgICAgICAgICAvKiE8IFsweDAwOTRdIEdQSU9GIE11bHRpcGxlIEZ1bmN0aW9uIE91dHB1dCBTZWxlY3QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEdQR19NRk9TOyAgICAgICAgICAgICAgLyohPCBbMHgwMDk4XSBHUElPRyBNdWx0aXBsZSBGdW5jdGlvbiBPdXRwdXQgU2VsZWN0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBHUEhfTUZPUzsgICAgICAgICAgICAgIC8qITwgWzB4MDA5Y10gR1BJT0ggTXVsdGlwbGUgRnVuY3Rpb24gT3V0cHV0IFNlbGVjdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTNbOF07CisgICAgX19JTyB1aW50MzJfdCBTUkFNSUNUTDsgICAgICAgICAgICAgIC8qITwgWzB4MDBDMF0gU3lzdGVtIFNSQU0gSW50ZXJydXB0IEVuYWJsZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgU1JBTVNUUzsgICAgICAgICAgICAgICAvKiE8IFsweDAwQzRdIFN5c3RlbSBTUkFNIFBhcml0eSBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNSQU1FQURSOyAgICAgICAgICAgICAgLyohPCBbMHgwMEM4XSBTeXN0ZW0gU1JBTSBQYXJpdHkgQ2hlY2sgRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBSRVNFUlZFNFs0XTsKKyAgICBfX0lPIHVpbnQzMl90IFNSQU1QQ1RMOyAgICAgICAgICAgICAgLyohPCBbMHgwMERDXSBTeXN0ZW0gU1JBTSBQb3dlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTUkFNUFBDVDsgICAgICAgICAgICAgIC8qITwgWzB4MDBFMF0gUGVyaXBoZXJhbCBTUkFNIFBvd2VyIE1vZGUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVENUTDQ4TTsgICAgICAgICAgICAgICAvKiE8IFsweDAwRTRdIEhJUkMgNDhNIFRyaW0gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRJRU40OE07ICAgICAgICAgICAgICAgLyohPCBbMHgwMEU4XSBISVJDIDQ4TSBUcmltIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUSVNUUzQ4TTsgICAgICAgICAgICAgIC8qITwgWzB4MDBFQ10gSElSQyA0OE0gVHJpbSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgVENUTDEyTTsgICAgICAgICAgICAgICAvKiE8IFsweDAwRjBdIEhJUkMgMTJNIFRyaW0gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRJRU4xMk07ICAgICAgICAgICAgICAgLyohPCBbMHgwMEY0XSBISVJDIDEyTSBUcmltIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUSVNUUzEyTTsgICAgICAgICAgICAgIC8qITwgWzB4MDBGOF0gSElSQyAxMk0gVHJpbSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTZbMV07CisgICAgX19JTyB1aW50MzJfdCBSRUdMQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDEwMF0gUmVnaXN0ZXIgTG9jayBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTdbNThdOworICAgIF9fSU8gdWludDMyX3QgUE9SQ1RMMTsgICAgICAgICAgICAgICAvKiE8IFsweDAxRUNdIFBvd2VyLW9uIFJlc2V0IENvbnRyb2xsZXIgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkU4WzJdOworICAgIF9fSU8gdWludDMyX3QgUExDVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAxRjhdIFBvd2VyIExldmVsIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBMU1RTOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMUZDXSBQb3dlciBMZXZlbCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFOVsxMjhdOworICAgIF9fSU8gdWludDMyX3QgQUhCTUNUTDsgICAgICAgICAgICAgICAvKiE8IFsweDA0MDBdIEFIQiBCdXMgTWF0cml4IFByaW9yaXR5IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCit9IFNZU19UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBTWVNfQ09OU1QgU1lTIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFNZUyBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFNZU19QRElEX1BESURfUG9zICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UERJRDogUERJRCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfUERJRF9QRElEX01zayAgICAgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFNZU19QRElEX1BESURfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBESUQ6IFBESUQgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUlNUU1RTX1BPUkZfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogUE9SRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1JTVFNUU19QT1JGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19SU1RTVFNfUE9SRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IFBPUkYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1JTVFNUU19QSU5SRl9Qb3MgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IFBJTlJGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19SU1RTVFNfUElOUkZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfUlNUU1RTX1BJTlJGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBQSU5SRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19SU1RTVFNfV0RUUkZfUG9zICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBXRFRSRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfUlNUU1RTX1dEVFJGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1JTVFNUU19XRFRSRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogV0RUUkYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUlNUU1RTX0xWUkZfUG9zICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogTFZSRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1JTVFNUU19MVlJGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19SU1RTVFNfTFZSRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IExWUkYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1JTVFNUU19CT0RSRl9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IEJPRFJGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19SU1RTVFNfQk9EUkZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfUlNUU1RTX0JPRFJGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBCT0RSRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19SU1RTVFNfU1lTUkZfUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBTWVNSRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfUlNUU1RTX1NZU1JGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1JTVFNUU19TWVNSRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogU1lTUkYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUlNUU1RTX0NQVVJGX1BvcyAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJTVFNUUzogQ1BVUkYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1JTVFNUU19DUFVSRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19SU1RTVFNfQ1BVUkZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IENQVVJGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1JTVFNUU19DUFVMS1JGX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSU1RTVFM6IENQVUxLUkYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19SU1RTVFNfQ1BVTEtSRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfUlNUU1RTX0NQVUxLUkZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UlNUU1RTOiBDUFVMS1JGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDBfQ0hJUFJTVF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBDSElQUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QwX0NISVBSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMF9DSElQUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogQ0hJUFJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QwX0NQVVJTVF9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogQ1BVUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMF9DUFVSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDBfQ1BVUlNUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IENQVVJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMF9QRE1BMFJTVF9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IFBETUEwUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDBfUERNQTBSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QwX1BETUEwUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBQRE1BMFJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDBfRUJJUlNUX1BvcyAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBFQklSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QwX0VCSVJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMF9FQklSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogRUJJUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QwX1VTQkhSU1RfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogVVNCSFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMF9VU0JIUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDBfVVNCSFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IFVTQkhSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMF9TREgwUlNUX1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IFNESDBSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDBfU0RIMFJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QwX1NESDBSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBTREgwUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDBfQ1JDUlNUX1BvcyAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBDUkNSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QwX0NSQ1JTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMF9DUkNSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogQ1JDUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QwX0NSUFRSU1RfUG9zICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMDogQ1JQVFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMF9DUlBUUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDBfQ1JQVFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IENSUFRSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMF9QRE1BMVJTVF9Qb3MgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDA6IFBETUExUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDBfUERNQTFSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QwX1BETUExUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QwOiBQRE1BMVJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfR1BJT1JTVF9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBHUElPUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX0dQSU9SU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9HUElPUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogR1BJT1JTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1RNUjBSU1RfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVE1SMFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9UTVIwUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfVE1SMFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFRNUjBSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9UTVIxUlNUX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFRNUjFSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfVE1SMVJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX1RNUjFSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBUTVIxUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfVE1SMlJTVF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBUTVIyUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1RNUjJSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9UTVIyUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVE1SMlJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1RNUjNSU1RfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVE1SM1JTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9UTVIzUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfVE1SM1JTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFRNUjNSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9BQ01QMDFSU1RfUG9zICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IEFDTVAwMVJTVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfQUNNUDAxUlNUX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX0FDTVAwMVJTVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBBQ01QMDFSU1QgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfSTJDMFJTVF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBJMkMwUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX0kyQzBSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9JMkMwUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogSTJDMFJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX0kyQzFSU1RfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogSTJDMVJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9JMkMxUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfSTJDMVJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IEkyQzFSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9JMkMyUlNUX1BvcyAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IEkyQzJSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfSTJDMlJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX0kyQzJSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBJMkMyUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfUVNQSTBSU1RfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBRU1BJMFJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1FTUEkwUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9RU1BJMFJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogUVNQSTBSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1NQSTBSU1RfUG9zICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogU1BJMFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9TUEkwUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfU1BJMFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFNQSTBSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9TUEkxUlNUX1BvcyAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFNQSTFSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfU1BJMVJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX1NQSTFSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBTUEkxUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfU1BJMlJTVF9Qb3MgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBTUEkyUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1NQSTJSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9TUEkyUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogU1BJMlJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1VBUlQwUlNUX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVUFSVDBSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9VQVJUMFJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfVUFSVDBSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFVBUlQwUlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9VQVJUMVJTVF9Qb3MgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFVBUlQxUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfVUFSVDFSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX1VBUlQxUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBVQVJUMVJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfVUFSVDJSU1RfUG9zICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBVQVJUMlJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1VBUlQyUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9VQVJUMlJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVUFSVDJSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX1VBUlQzUlNUX1BvcyAgICAgICAgICAoMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVUFSVDNSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9VQVJUM1JTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfVUFSVDNSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFVBUlQzUlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9VQVJUNFJTVF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IFVBUlQ0UlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfVUFSVDRSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX1VBUlQ0UlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBVQVJUNFJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfVUFSVDVSU1RfUG9zICAgICAgICAgICgyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBVQVJUNVJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1VBUlQ1UlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9VQVJUNVJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVUFSVDVSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX0NBTjBSU1RfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogQ0FOMFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9DQU4wUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfQ0FOMFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IENBTjBSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9PVEdSU1RfUG9zICAgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IE9UR1JTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfT1RHUlNUX01zayAgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX09UR1JTVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBPVEdSU1QgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfVVNCRFJTVF9Qb3MgICAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBVU0JEUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1VTQkRSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9VU0JEUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVVNCRFJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QxX0VBRENSU1RfUG9zICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogRUFEQ1JTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMV9FQURDUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDFfRUFEQ1JTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IEVBRENSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMV9JMlMwUlNUX1BvcyAgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDE6IEkyUzBSU1QgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDFfSTJTMFJTVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QxX0kyUzBSU1RfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBJMlMwUlNUIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDFfVFJOR1JTVF9Qb3MgICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QxOiBUUk5HUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QxX1RSTkdSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMV9UUk5HUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMTogVFJOR1JTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX1NDMFJTVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogU0MwUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9TQzBSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfU0MwUlNUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFNDMFJTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9TQzFSU1RfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFNDMVJTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfU0MxUlNUX01zayAgICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX1NDMVJTVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBTQzFSU1QgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfU0MyUlNUX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBTQzJSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX1NDMlJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9TQzJSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogU0MyUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX1NQSTNSU1RfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogU1BJM1JTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9TUEkzUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfU1BJM1JTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFNQSTNSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9VU0NJMFJTVF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFVTQ0kwUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfVVNDSTBSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX1VTQ0kwUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBVU0NJMFJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfVVNDSTFSU1RfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBVU0NJMVJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX1VTQ0kxUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9VU0NJMVJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogVVNDSTFSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX0RBQ1JTVF9Qb3MgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogREFDUlNUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9EQUNSU1RfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfREFDUlNUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IERBQ1JTVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9FUFdNMFJTVF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IEVQV00wUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfRVBXTTBSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX0VQV00wUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBFUFdNMFJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfRVBXTTFSU1RfUG9zICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBFUFdNMVJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX0VQV00xUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9FUFdNMVJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogRVBXTTFSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX0JQV00wUlNUX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogQlBXTTBSU1QgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9CUFdNMFJTVF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfQlBXTTBSU1RfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IEJQV00wUlNUIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9CUFdNMVJTVF9Qb3MgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IEJQV00xUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfQlBXTTFSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX0JQV00xUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBCUFdNMVJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfUUVJMFJTVF9Qb3MgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBRRUkwUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX1FFSTBSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9RRUkwUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogUUVJMFJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVBSU1QyX1FFSTFSU1RfUG9zICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogUUVJMVJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lQUlNUMl9RRUkxUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JUFJTVDJfUUVJMVJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IFFFSTFSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lQUlNUMl9FQ0FQMFJTVF9Qb3MgICAgICAgICAgKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJUFJTVDI6IEVDQVAwUlNUIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JUFJTVDJfRUNBUDBSU1RfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVBSU1QyX0VDQVAwUlNUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBFQ0FQMFJTVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19JUFJTVDJfRUNBUDFSU1RfUG9zICAgICAgICAgICgyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVBSU1QyOiBFQ0FQMVJTVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfSVBSU1QyX0VDQVAxUlNUX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0lQUlNUMl9FQ0FQMVJTVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklQUlNUMjogRUNBUDFSU1QgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfQk9EQ1RMX0JPREVOX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogQk9ERU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19CT0RDVExfQk9ERU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPREVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RSU1RFTl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPRFJTVEVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EUlNURU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfQk9EQ1RMX0JPRFJTVEVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBCT0RSU1RFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19CT0RDVExfQk9ESUZfUG9zICAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBCT0RJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRElGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0JPRENUTF9CT0RJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogQk9ESUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRExQTV9Qb3MgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogQk9ETFBNIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RMUE1fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19CT0RDVExfQk9ETFBNX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPRExQTSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RPVVRfUG9zICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPRE9VVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9ET1VUX01zayAgICAgICAgICAgICgweDF1bCA8PCBTWVNfQk9EQ1RMX0JPRE9VVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBCT0RPVVQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19CT0RDVExfTFZSRU5fUG9zICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBMVlJFTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0xWUkVOX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0JPRENUTF9MVlJFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogTFZSRU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRERHU0VMX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogQk9EREdTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RER1NFTF9Nc2sgICAgICAgICAgKDB4N3VsIDw8IFNZU19CT0RDVExfQk9EREdTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IEJPRERHU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0JPRENUTF9MVlJER1NFTF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpCT0RDVEw6IExWUkRHU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19CT0RDVExfTFZSREdTRUxfTXNrICAgICAgICAgICgweDd1bCA8PCBTWVNfQk9EQ1RMX0xWUkRHU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBMVlJER1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19CT0RDVExfQk9EVkxfUG9zICAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6Qk9EQ1RMOiBCT0RWTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRFZMX01zayAgICAgICAgICAgICAoMHg3dWwgPDwgU1lTX0JPRENUTF9CT0RWTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkJPRENUTDogQk9EVkwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfSVZTQ1RMX1ZURU1QRU5fUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OklWU0NUTDogVlRFTVBFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0lWU0NUTF9WVEVNUEVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19JVlNDVExfVlRFTVBFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJVlNDVEw6IFZURU1QRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0lWU0NUTF9WQkFUVUdFTl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpJVlNDVEw6IFZCQVRVR0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19JVlNDVExfVkJBVFVHRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfSVZTQ1RMX1ZCQVRVR0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6SVZTQ1RMOiBWQkFUVUdFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19QT1JDVEwwX1BPUk1BU0tfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UE9SQ1RMMDogUE9STUFTSyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfUE9SQ1RMMF9QT1JNQVNLX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgU1lTX1BPUkNUTDBfUE9STUFTS19Qb3MpICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBPUkNUTDA6IFBPUk1BU0sgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVlJFRkNUTF9WUkVGQ1RMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlZSRUZDVEw6IFZSRUZDVEwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX1ZSRUZDVExfVlJFRkNUTF9Nc2sgICAgICAgICAgKDB4MWZ1bCA8PCBTWVNfVlJFRkNUTF9WUkVGQ1RMX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpWUkVGQ1RMOiBWUkVGQ1RMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1ZSRUZDVExfSUJJQVNTRUxfUG9zICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpWUkVGQ1RMOiBJQklBU1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19WUkVGQ1RMX0lCSUFTU0VMX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfVlJFRkNUTF9JQklBU1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VlJFRkNUTDogSUJJQVNTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19WUkVGQ1RMX1BSRUxPQURTRUxfUG9zICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VlJFRkNUTDogUFJFTE9BRFNFTCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBTWVNfVlJFRkNUTF9QUkVMT0FEU0VMX01zayAgICAgICAoMHgzdWwgPDwgU1lTX1ZSRUZDVExfUFJFTE9BRFNFTF9Qb3MpICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlZSRUZDVEw6IFBSRUxPQURTRUwgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVVNCUEhZX1VTQlJPTEVfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlVTQlBIWTogVVNCUk9MRSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1VTQlBIWV9VU0JST0xFX01zayAgICAgICAgICAgKDB4M3VsIDw8IFNZU19VU0JQSFlfVVNCUk9MRV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpVU0JQSFk6IFVTQlJPTEUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1VTQlBIWV9TQk9fUG9zICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpVU0JQSFk6IFNCTyBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19VU0JQSFlfU0JPX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfVVNCUEhZX1NCT19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VVNCUEhZOiBTQk8gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19VU0JQSFlfT1RHUEhZRU5fUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VVNCUEhZOiBPVEdQSFlFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfVVNCUEhZX09UR1BIWUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX1VTQlBIWV9PVEdQSFlFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlVTQlBIWTogT1RHUEhZRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUExfUEEwTUZQX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTBNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBME1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQTF9QQTBNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEEwTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMU1GUF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEExTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTFNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUExfUEExTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBMU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTJNRlBfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBMk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEyTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBMX1BBMk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTJNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUExfUEEzTUZQX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTNNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBM01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQTF9QQTNNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEEzTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEE0TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTRNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUExfUEE0TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBNE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTVNRlBfUG9zICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBNU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBMX1BBNU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTVNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUExfUEE2TUZQX1BvcyAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBMOiBQQTZNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNk1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQTF9QQTZNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEE2TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQTDogUEE3TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTdNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUExfUEE3TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEw6IFBBN01GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQThNRlBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBOE1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBIX1BBOE1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQThNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE5TUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQTlNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQSF9QQTlNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEE5TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEExME1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUEhfUEExME1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBMTBNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBMTFNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMU1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBIX1BBMTFNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQTExTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMk1GUF9Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQTEyTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTJNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQSF9QQTEyTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEExMk1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTNNRlBfUG9zICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEExM01GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEzTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BBX01GUEhfUEExM01GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBMTNNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE0TUZQX1BvcyAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GUEg6IFBBMTRNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNE1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQV9NRlBIX1BBMTRNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQTE0TUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNU1GUF9Qb3MgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRlBIOiBQQTE1TUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTVNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEFfTUZQSF9QQTE1TUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZQSDogUEExNU1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCME1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEIwTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjBNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUExfUEIwTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCME1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCMU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBMX1BCMU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjFNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjJNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEIyTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEIzTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCM01GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCNE1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjRNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjVNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEI1TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQTDogUEI2TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUExfUEI2TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCNk1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEw6IFBCN01GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBMX1BCN01GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBMOiBQQjdNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI4TUZQX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjhNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQSF9QQjhNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEI4TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOU1GUF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEI5TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjlNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUEhfUEI5TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCOU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEwTUZQX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCMTBNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxME1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBIX1BCMTBNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjEwTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMU1GUF9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjExTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTFNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQSF9QQjExTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEIxMU1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEIxMk1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCMTJNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcyAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCMTNNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjEzTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRlBIOiBQQjE0TUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEJfTUZQSF9QQjE0TUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEIxNE1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZQSDogUEIxNU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BCX01GUEhfUEIxNU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GUEg6IFBCMTVNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzBNRlBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDME1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMwTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQ19NRlBMX1BDME1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzBNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUExfUEMxTUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzFNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQTF9QQzFNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEMxTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMk1GUF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEMyTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzJNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BDX01GUExfUEMyTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDMk1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzNNRlBfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDM01GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMzTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQ19NRlBMX1BDM01GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzNNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUExfUEM0TUZQX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzRNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQTF9QQzRNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEM0TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNU1GUF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEM1TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzVNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BDX01GUExfUEM1TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDNU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzZNRlBfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEw6IFBDNk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM2TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQ19NRlBMX1BDNk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzZNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUExfUEM3TUZQX1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBMOiBQQzdNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQTF9QQzdNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQTDogUEM3TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOE1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQSDogUEM4TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzhNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BDX01GUEhfUEM4TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEg6IFBDOE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzlNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEg6IFBDOU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM5TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQ19NRlBIX1BDOU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBIOiBQQzlNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxME1GUF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBIOiBQQzEwTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTBNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQSF9QQzEwTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQSDogUEMxME1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTFNRlBfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQSDogUEMxMU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzExTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BDX01GUEhfUEMxMU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEg6IFBDMTFNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEyTUZQX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GUEg6IFBDMTJNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMk1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQQ19NRlBIX1BDMTJNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBIOiBQQzEyTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxM01GUF9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRlBIOiBQQzEzTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTNNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUENfTUZQSF9QQzEzTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZQSDogUEMxM01GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEME1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQwTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDBNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUExfUEQwTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBEME1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDFNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBEMU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQxTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBMX1BEMU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDFNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUExfUEQyTUZQX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDJNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMk1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQTF9QRDJNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQyTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEM01GUF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQzTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDNNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUExfUEQzTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBEM01GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDRNRlBfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBENE1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ0TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBMX1BENE1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDRNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ1TUZQX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDVNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQTF9QRDVNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQ1TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENk1GUF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQTDogUEQ2TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDZNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUExfUEQ2TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBENk1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDdNRlBfUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEw6IFBEN01GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ3TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBMX1BEN01GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBMOiBQRDdNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQ4TUZQX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBIOiBQRDhNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEOE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQSF9QRDhNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQ4TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEOU1GUF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQ5TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDlNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUEhfUEQ5TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEg6IFBEOU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEwTUZQX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEg6IFBEMTBNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxME1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBIX1BEMTBNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBIOiBQRDEwTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMU1GUF9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBIOiBQRDExTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTFNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQSF9QRDExTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQxMU1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTJNRlBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQxMk1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEyTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BEX01GUEhfUEQxMk1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEg6IFBEMTJNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEzTUZQX1BvcyAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GUEg6IFBEMTNNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxM01GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRF9NRlBIX1BEMTNNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBIOiBQRDEzTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxNE1GUF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRlBIOiBQRDE0TUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTRNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUERfTUZQSF9QRDE0TUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZQSDogUEQxNE1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFME1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEUwTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTBNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUExfUEUwTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFME1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTFNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFMU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUxTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBMX1BFMU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTFNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUExfUEUyTUZQX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTJNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMk1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQTF9QRTJNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEUyTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFM01GUF9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEUzTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTNNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUExfUEUzTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFM01GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTRNRlBfUG9zICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFNE1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU0TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBMX1BFNE1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTRNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUExfUEU1TUZQX1BvcyAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTVNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQTF9QRTVNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEU1TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNk1GUF9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQTDogUEU2TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTZNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUExfUEU2TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFNk1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTdNRlBfUG9zICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEw6IFBFN01GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU3TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBMX1BFN01GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBMOiBQRTdNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU4TUZQX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRThNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQSF9QRThNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEU4TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOU1GUF9Qb3MgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEU5TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTlNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUEhfUEU5TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFOU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEwTUZQX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFMTBNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxME1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBIX1BFMTBNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRTEwTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRTExTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTFNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQSF9QRTExTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEUxMU1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTJNRlBfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEUxMk1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEyTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUEhfUEUxMk1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFMTJNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEzTUZQX1BvcyAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFMTNNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxM01GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRV9NRlBIX1BFMTNNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRTEzTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxNE1GUF9Qb3MgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRlBIOiBQRTE0TUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTRNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEVfTUZQSF9QRTE0TUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEUxNE1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTVNRlBfUG9zICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZQSDogUEUxNU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTE1TUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BFX01GUEhfUEUxNU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GUEg6IFBFMTVNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjBNRlBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGME1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYwTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRl9NRlBMX1BGME1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjBNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GUExfUEYxTUZQX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjFNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMU1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEZfTUZQTF9QRjFNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEYxTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMk1GUF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEYyTUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjJNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BGX01GUExfUEYyTUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGMk1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjNNRlBfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGM01GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYzTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRl9NRlBMX1BGM01GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjNNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GUExfUEY0TUZQX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjRNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEZfTUZQTF9QRjRNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEY0TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNU1GUF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEY1TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjVNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BGX01GUExfUEY1TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGNU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjZNRlBfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEw6IFBGNk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY2TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRl9NRlBMX1BGNk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjZNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GUExfUEY3TUZQX1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBMOiBQRjdNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGN01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEZfTUZQTF9QRjdNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQTDogUEY3TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOE1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQSDogUEY4TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjhNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BGX01GUEhfUEY4TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEg6IFBGOE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjlNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEg6IFBGOU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY5TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQRl9NRlBIX1BGOU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBIOiBQRjlNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GUEhfUEYxME1GUF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRlBIOiBQRjEwTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGMTBNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEZfTUZQSF9QRjEwTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQSDogUEYxME1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGMTFNRlBfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZQSDogUEYxMU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjExTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BGX01GUEhfUEYxMU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GUEg6IFBGMTFNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzJNRlBfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEw6IFBHMk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEcyTUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQR19NRlBMX1BHMk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBMOiBQRzJNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GUExfUEczTUZQX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBMOiBQRzNNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHM01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEdfTUZQTF9QRzNNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQTDogUEczTUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHNE1GUF9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQTDogUEc0TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzRNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BHX01GUExfUEc0TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEw6IFBHNE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzlNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEg6IFBHOU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEc5TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQR19NRlBIX1BHOU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzlNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxME1GUF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzEwTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTBNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEdfTUZQSF9QRzEwTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQSDogUEcxME1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTFNRlBfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQSDogUEcxMU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzExTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BHX01GUEhfUEcxMU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEg6IFBHMTFNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzEyTUZQX1BvcyAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEg6IFBHMTJNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxMk1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQR19NRlBIX1BHMTJNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzEyTUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxM01GUF9Qb3MgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzEzTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTNNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEdfTUZQSF9QRzEzTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQSDogUEcxM01GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTRNRlBfUG9zICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZQSDogUEcxNE1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzE0TUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BHX01GUEhfUEcxNE1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEg6IFBHMTRNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzE1TUZQX1BvcyAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GUEg6IFBHMTVNRlAgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxNU1GUF9Nc2sgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQR19NRlBIX1BHMTVNRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRlBIOiBQRzE1TUZQIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GUExfUEg0TUZQX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBMOiBQSDRNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINE1GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEhfTUZQTF9QSDRNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQTDogUEg0TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINU1GUF9Qb3MgICAgICAgICAgKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQTDogUEg1TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDVNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BIX01GUExfUEg1TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEw6IFBINU1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDZNRlBfUG9zICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEw6IFBINk1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg2TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQSF9NRlBMX1BINk1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBMOiBQSDZNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GUExfUEg3TUZQX1BvcyAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBMOiBQSDdNRlAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BIN01GUF9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEhfTUZQTF9QSDdNRlBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQTDogUEg3TUZQIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOE1GUF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQSDogUEg4TUZQIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDhNRlBfTXNrICAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BIX01GUEhfUEg4TUZQX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEg6IFBIOE1GUCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDlNRlBfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEg6IFBIOU1GUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg5TUZQX01zayAgICAgICAgICAoMHhmdWwgPDwgU1lTX0dQSF9NRlBIX1BIOU1GUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBIOiBQSDlNRlAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxME1GUF9Qb3MgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRlBIOiBQSDEwTUZQIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTBNRlBfTXNrICAgICAgICAgKDB4ZnVsIDw8IFNZU19HUEhfTUZQSF9QSDEwTUZQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQSDogUEgxME1GUCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTFNRlBfUG9zICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZQSDogUEgxMU1GUCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDExTUZQX01zayAgICAgICAgICgweGZ1bCA8PCBTWVNfR1BIX01GUEhfUEgxMU1GUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GUEg6IFBIMTFNRlAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1MwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzFfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TM19Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1MzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1M0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1M1X1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1M1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TNl9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1M2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1M2X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzdfUG9zICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TNyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1M3X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TN19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1M4X1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TOF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzhfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1M4IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TOV9Qb3MgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1M5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1M5X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzEwX1BvcyAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TMTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzEwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxMV9Qb3MgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzExIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMTFfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzExX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MxMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMTJfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MxMiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzEyX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1MxMl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMTIgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzEzX1BvcyAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMTMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxM19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEFfTUZPU19NRk9TMTNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzEzIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQV9NRk9TX01GT1MxNF9Qb3MgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEFfTUZPUzogTUZPUzE0IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMTRfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BBX01GT1NfTUZPUzE0X1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MxNCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEFfTUZPU19NRk9TMTVfUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BBX01GT1M6IE1GT1MxNSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GT1NfTUZPUzE1X01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQV9NRk9TX01GT1MxNV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQV9NRk9TOiBNRk9TMTUgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MwX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1MyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1M0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1M0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TNV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1M1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1M1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzZfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TNiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1M2X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TNl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1M3X1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TN19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1M3IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TOF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1M4IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzhfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1M4X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TOCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzlfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TOSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1M5X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TOV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MxMF9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzEwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMTBfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzEwX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMTFfUG9zICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzExX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1MxMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzEyX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMTIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MxMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TMTJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzEyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MxM19Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzEzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMTNfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BCX01GT1NfTUZPUzEzX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEJfTUZPU19NRk9TMTRfUG9zICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BCX01GT1M6IE1GT1MxNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzE0X01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQl9NRk9TX01GT1MxNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMTQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BCX01GT1NfTUZPUzE1X1BvcyAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQl9NRk9TOiBNRk9TMTUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRk9TX01GT1MxNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEJfTUZPU19NRk9TMTVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEJfTUZPUzogTUZPUzE1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BDX01GT1NfTUZPUzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1MxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MyX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUENfTUZPU19NRk9TMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BDX01GT1NfTUZPUzNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TNF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1M0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1M0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1M1X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUENfTUZPU19NRk9TNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1M2X1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TNl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BDX01GT1NfTUZPUzZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1M2IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TN19Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1M3IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzdfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1M3X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TNyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzhfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TOCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1M4X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUENfTUZPU19NRk9TOF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1M5X1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TOV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BDX01GT1NfTUZPUzlfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1M5IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TMTBfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MxMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzEwX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1MxMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzExX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MxMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUENfTUZPU19NRk9TMTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzExIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQQ19NRk9TX01GT1MxMl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUENfTUZPUzogTUZPUzEyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TMTJfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BDX01GT1NfTUZPUzEyX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MxMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUENfTUZPU19NRk9TMTNfUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BDX01GT1M6IE1GT1MxMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GT1NfTUZPUzEzX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQQ19NRk9TX01GT1MxM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQQ19NRk9TOiBNRk9TMTMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MwX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1MyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1M0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1M0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TNV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1M1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1M1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzZfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TNiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1M2X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TNl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1M3X1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TN19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1M3IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TOF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1M4IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzhfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1M4X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TOCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzlfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TOSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1M5X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TOV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MxMF9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzEwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMTBfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzEwX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MxMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMTFfUG9zICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MxMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzExX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1MxMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzEyX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMTIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MxMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUERfTUZPU19NRk9TMTJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzEyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRF9NRk9TX01GT1MxM19Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUERfTUZPUzogTUZPUzEzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMTNfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BEX01GT1NfTUZPUzEzX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MxMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUERfTUZPU19NRk9TMTRfUG9zICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BEX01GT1M6IE1GT1MxNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GT1NfTUZPUzE0X01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRF9NRk9TX01GT1MxNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRF9NRk9TOiBNRk9TMTQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzBfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MwX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TMF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzAgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MxX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzEgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MyIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1MyX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzNfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MzX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TM19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzMgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1M0X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TNF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1M0IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TNV9Qb3MgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1M1IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1M1X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TNSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzZfUG9zICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TNiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1M2X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TNl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1M3X1BvcyAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzcgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TN19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzdfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1M3IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TOF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1M4IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzhfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1M4X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TOCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzlfUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TOSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1M5X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TOV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzkgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MxMF9Qb3MgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzEwIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMTBfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzEwX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxMCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMTFfUG9zICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxMSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzExX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1MxMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMTEgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzEyX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMTIgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MxMl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TMTJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzEyIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MxM19Qb3MgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzEzIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMTNfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BFX01GT1NfTUZPUzEzX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxMyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEVfTUZPU19NRk9TMTRfUG9zICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BFX01GT1M6IE1GT1MxNCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzE0X01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRV9NRk9TX01GT1MxNF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMTQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BFX01GT1NfTUZPUzE1X1BvcyAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRV9NRk9TOiBNRk9TMTUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRk9TX01GT1MxNV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEVfTUZPU19NRk9TMTVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEVfTUZPUzogTUZPUzE1IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1MwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TMF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BGX01GT1NfTUZPUzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1MwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TMV9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1MxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzFfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRl9NRk9TX01GT1MxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzJfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1MyX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEZfTUZPU19NRk9TMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1MzX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TM19Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BGX01GT1NfTUZPUzNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1MzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TNF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1M0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRl9NRk9TX01GT1M0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1M1X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEZfTUZPU19NRk9TNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1M2X1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TNl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BGX01GT1NfTUZPUzZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1M2IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TN19Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1M3IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzdfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRl9NRk9TX01GT1M3X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TNyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzhfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TOCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1M4X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEZfTUZPU19NRk9TOF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1M5X1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TOV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BGX01GT1NfTUZPUzlfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1M5IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEZfTUZPU19NRk9TMTBfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BGX01GT1M6IE1GT1MxMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzEwX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQRl9NRk9TX01GT1MxMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TMTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BGX01GT1NfTUZPUzExX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQRl9NRk9TOiBNRk9TMTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRk9TX01GT1MxMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEZfTUZPU19NRk9TMTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEZfTUZPUzogTUZPUzExIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MyX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BHX01GT1NfTUZPUzJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TM19Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQR19NRk9TX01GT1MzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzRfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1M0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEdfTUZPU19NRk9TNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1M5X1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TOV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BHX01GT1NfTUZPUzlfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1M5IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMTBfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MxMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzEwX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQR19NRk9TX01GT1MxMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzExX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MxMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEdfTUZPU19NRk9TMTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzExIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MxMl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzEyIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMTJfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BHX01GT1NfTUZPUzEyX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MxMiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMTNfUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MxMyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzEzX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQR19NRk9TX01GT1MxM19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMTMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BHX01GT1NfTUZPUzE0X1BvcyAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQR19NRk9TOiBNRk9TMTQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MxNF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEdfTUZPU19NRk9TMTRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzE0IE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQR19NRk9TX01GT1MxNV9Qb3MgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEdfTUZPUzogTUZPUzE1IFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZPU19NRk9TMTVfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BHX01GT1NfTUZPUzE1X1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BHX01GT1M6IE1GT1MxNSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TNF9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1M0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQSF9NRk9TX01GT1M0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzVfUG9zICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1M1X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEhfTUZPU19NRk9TNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1M2X1BvcyAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TNl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BIX01GT1NfTUZPUzZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1M2IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TN19Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1M3IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzdfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQSF9NRk9TX01GT1M3X1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TNyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzhfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TOCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1M4X01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEhfTUZPU19NRk9TOF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1M5X1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TOV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfR1BIX01GT1NfTUZPUzlfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1M5IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19HUEhfTUZPU19NRk9TMTBfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6R1BIX01GT1M6IE1GT1MxMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzEwX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX0dQSF9NRk9TX01GT1MxMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TMTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfR1BIX01GT1NfTUZPUzExX1BvcyAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OkdQSF9NRk9TOiBNRk9TMTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRk9TX01GT1MxMV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFNZU19HUEhfTUZPU19NRk9TMTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpHUEhfTUZPUzogTUZPUzExIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1JQ1RMX1BFUlJJRU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNSUNUTDogUEVSUklFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19TUkFNSUNUTF9QRVJSSUVOX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfU1JBTUlDVExfUEVSUklFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTUlDVEw6IFBFUlJJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNU1RTX1BFUlJJRl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVNUUzogUEVSUklGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfU1JBTVNUU19QRVJSSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1NSQU1TVFNfUEVSUklGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1TVFM6IFBFUlJJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTUVBRFJfRVJSQUREUl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1FQURSOiBFUlJBRERSIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1FQURSX0VSUkFERFJfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZ1bCA8PCBTWVNfU1JBTUVBRFJfRVJSQUREUl9Qb3MpICAgICAgICAvKiE8IFNZU19UOjpTUkFNRUFEUjogRVJSQUREUiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NUQUNLX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1RBQ0sgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19TUkFNUENUTF9TVEFDS19Nc2sgICAgICAgICAgICgweGZ1bCA8PCBTWVNfU1JBTVBDVExfU1RBQ0tfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNUQUNLIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUENUTF9SRVRDTlRfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFJFVENOVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBDVExfUkVUQ05UX01zayAgICAgICAgICAoMHgzdWwgPDwgU1lTX1NSQU1QQ1RMX1JFVENOVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBSRVRDTlQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTBQTTBfUG9zICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMFBNMCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0wUE0wX01zayAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUENUTF9TUkFNMFBNMF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTBQTTAgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0wUE0xX1BvcyAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTBQTTEgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMFBNMV9Nc2sgICAgICAgICgweDN1bCA8PCBTWVNfU1JBTVBDVExfU1JBTTBQTTFfUG9zKSAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0wUE0xIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMFBNMl9Qb3MgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0wUE0yIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTBQTTJfTXNrICAgICAgICAoMHgzdWwgPDwgU1lTX1NSQU1QQ1RMX1NSQU0wUE0yX1BvcykgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMFBNMiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTBQTTNfUG9zICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMFBNMyBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0wUE0zX01zayAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUENUTF9TUkFNMFBNM19Qb3MpICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTBQTTMgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0xUE0wX1BvcyAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTFQTTAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMVBNMF9Nc2sgICAgICAgICgweDN1bCA8PCBTWVNfU1JBTVBDVExfU1JBTTFQTTBfUG9zKSAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0xUE0wIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMVBNMV9Qb3MgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0xUE0xIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTFQTTFfTXNrICAgICAgICAoMHgzdWwgPDwgU1lTX1NSQU1QQ1RMX1NSQU0xUE0xX1BvcykgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMVBNMSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTTFQTTJfUG9zICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QQ1RMOiBTUkFNMVBNMiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0xUE0yX01zayAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUENUTF9TUkFNMVBNMl9Qb3MpICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTFQTTIgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU0xUE0zX1BvcyAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUENUTDogU1JBTTFQTTMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNMVBNM19Nc2sgICAgICAgICgweDN1bCA8PCBTWVNfU1JBTVBDVExfU1JBTTFQTTNfUG9zKSAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBDVEw6IFNSQU0xUE0zIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUFBDVF9DQU5fUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBQQ1Q6IENBTiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBQQ1RfQ0FOX01zayAgICAgICAgICAgICAoMHgzdWwgPDwgU1lTX1NSQU1QUENUX0NBTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QUENUOiBDQU4gTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBQQ1RfVVNCRF9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QUENUOiBVU0JEIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QUENUX1VTQkRfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUFBDVF9VU0JEX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUFBDVDogVVNCRCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1NSQU1QUENUX1BETUEwX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUFBDVDogUERNQTAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19TUkFNUFBDVF9QRE1BMF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBTWVNfU1JBTVBQQ1RfUERNQTBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBQQ1Q6IFBETUEwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19TUkFNUFBDVF9QRE1BMV9Qb3MgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6U1JBTVBQQ1Q6IFBETUExIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfU1JBTVBQQ1RfUERNQTFfTXNrICAgICAgICAgICAoMHgzdWwgPDwgU1lTX1NSQU1QUENUX1BETUExX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QUENUOiBQRE1BMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfU1JBTVBQQ1RfRk1DX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlNSQU1QUENUOiBGTUMgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1NSQU1QUENUX0ZNQ19Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IFNZU19TUkFNUFBDVF9GTUNfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpTUkFNUFBDVDogRk1DIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RDVEw0OE1fRlJFUVNFTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMNDhNOiBGUkVRU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19UQ1RMNDhNX0ZSRVFTRUxfTXNrICAgICAgICAgICgweDN1bCA8PCBTWVNfVENUTDQ4TV9GUkVRU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDQ4TTogRlJFUVNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19UQ1RMNDhNX0xPT1BTRUxfUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDQ4TTogTE9PUFNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfVENUTDQ4TV9MT09QU0VMX01zayAgICAgICAgICAoMHgzdWwgPDwgU1lTX1RDVEw0OE1fTE9PUFNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEw0OE06IExPT1BTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVENUTDQ4TV9SRVRSWUNOVF9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEw0OE06IFJFVFJZQ05UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX1RDVEw0OE1fUkVUUllDTlRfTXNrICAgICAgICAgKDB4M3VsIDw8IFNZU19UQ1RMNDhNX1JFVFJZQ05UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMNDhNOiBSRVRSWUNOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RDVEw0OE1fQ0VTVE9QRU5fUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMNDhNOiBDRVNUT1BFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19UQ1RMNDhNX0NFU1RPUEVOX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfVENUTDQ4TV9DRVNUT1BFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDQ4TTogQ0VTVE9QRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19UQ1RMNDhNX1JFRkNLU0VMX1BvcyAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDQ4TTogUkVGQ0tTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfVENUTDQ4TV9SRUZDS1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX1RDVEw0OE1fUkVGQ0tTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEw0OE06IFJFRkNLU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVElFTjQ4TV9URkFJTElFTl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJRU40OE06IFRGQUlMSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX1RJRU40OE1fVEZBSUxJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFNZU19USUVONDhNX1RGQUlMSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSUVONDhNOiBURkFJTElFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RJRU40OE1fQ0xLRUlFTl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSUVONDhNOiBDTEtFSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19USUVONDhNX0NMS0VJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfVElFTjQ4TV9DTEtFSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElFTjQ4TTogQ0xLRUlFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19USVNUUzQ4TV9GUkVRTE9DS19Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElTVFM0OE06IEZSRVFMT0NLIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfVElTVFM0OE1fRlJFUUxPQ0tfTXNrICAgICAgICAoMHgxdWwgPDwgU1lTX1RJU1RTNDhNX0ZSRVFMT0NLX1BvcykgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJU1RTNDhNOiBGUkVRTE9DSyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVElTVFM0OE1fVEZBSUxJRl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJU1RTNDhNOiBURkFJTElGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX1RJU1RTNDhNX1RGQUlMSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFNZU19USVNUUzQ4TV9URkFJTElGX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSVNUUzQ4TTogVEZBSUxJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RJU1RTNDhNX0NMS0VSUklGX1BvcyAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSVNUUzQ4TTogQ0xLRVJSSUYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19USVNUUzQ4TV9DTEtFUlJJRl9Nc2sgICAgICAgICgweDF1bCA8PCBTWVNfVElTVFM0OE1fQ0xLRVJSSUZfUG9zKSAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElTVFM0OE06IENMS0VSUklGIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19UQ1RMMTJNX0ZSRVFTRUxfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDEyTTogRlJFUVNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfVENUTDEyTV9GUkVRU0VMX01zayAgICAgICAgICAoMHgzdWwgPDwgU1lTX1RDVEwxMk1fRlJFUVNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEwxMk06IEZSRVFTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVENUTDEyTV9MT09QU0VMX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEwxMk06IExPT1BTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX1RDVEwxMk1fTE9PUFNFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFNZU19UQ1RMMTJNX0xPT1BTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMMTJNOiBMT09QU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RDVEwxMk1fUkVUUllDTlRfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMMTJNOiBSRVRSWUNOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19UQ1RMMTJNX1JFVFJZQ05UX01zayAgICAgICAgICgweDN1bCA8PCBTWVNfVENUTDEyTV9SRVRSWUNOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDEyTTogUkVUUllDTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19UQ1RMMTJNX0NFU1RPUEVOX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VENUTDEyTTogQ0VTVE9QRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfVENUTDEyTV9DRVNUT1BFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX1RDVEwxMk1fQ0VTVE9QRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEwxMk06IENFU1RPUEVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVENUTDEyTV9SRUZDS1NFTF9Qb3MgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRDVEwxMk06IFJFRkNLU0VMIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX1RDVEwxMk1fUkVGQ0tTRUxfTXNrICAgICAgICAgKDB4MXVsIDw8IFNZU19UQ1RMMTJNX1JFRkNLU0VMX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUQ1RMMTJNOiBSRUZDS1NFTCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RJRU4xMk1fVEZBSUxJRU5fUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSUVOMTJNOiBURkFJTElFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19USUVOMTJNX1RGQUlMSUVOX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfVElFTjEyTV9URkFJTElFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElFTjEyTTogVEZBSUxJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19USUVOMTJNX0NMS0VJRU5fUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElFTjEyTTogQ0xLRUlFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfVElFTjEyTV9DTEtFSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX1RJRU4xMk1fQ0xLRUlFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJRU4xMk06IENMS0VJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfVElTVFMxMk1fRlJFUUxPQ0tfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJU1RTMTJNOiBGUkVRTE9DSyBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX1RJU1RTMTJNX0ZSRVFMT0NLX01zayAgICAgICAgKDB4MXVsIDw8IFNZU19USVNUUzEyTV9GUkVRTE9DS19Qb3MpICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSVNUUzEyTTogRlJFUUxPQ0sgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1RJU1RTMTJNX1RGQUlMSUZfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpUSVNUUzEyTTogVEZBSUxJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19USVNUUzEyTV9URkFJTElGX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfVElTVFMxMk1fVEZBSUxJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElTVFMxMk06IFRGQUlMSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19USVNUUzEyTV9DTEtFUlJJRl9Qb3MgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6VElTVFMxMk06IENMS0VSUklGIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfVElTVFMxMk1fQ0xLRVJSSUZfTXNrICAgICAgICAoMHgxdWwgPDwgU1lTX1RJU1RTMTJNX0NMS0VSUklGX1BvcykgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlRJU1RTMTJNOiBDTEtFUlJJRiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUkVHTENUTF9SRUdMQ1RMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlJFR0xDVEw6IFJFR0xDVEwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX1JFR0xDVExfUkVHTENUTF9Nc2sgICAgICAgICAgKDB4ZmZ1bCA8PCBTWVNfUkVHTENUTF9SRUdMQ1RMX1BvcykgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpSRUdMQ1RMOiBSRUdMQ1RMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1BPUkNUTDFfUE9ST0ZGX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQT1JDVEwxOiBQT1JPRkYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19QT1JDVEwxX1BPUk9GRl9Nc2sgICAgICAgICAgICgweGZmZmZ1bCA8PCBTWVNfUE9SQ1RMMV9QT1JPRkZfUG9zKSAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UE9SQ1RMMTogUE9ST0ZGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19QTENUTF9QTFNFTF9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExDVEw6IFBMU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBTWVNfUExDVExfUExTRUxfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgU1lTX1BMQ1RMX1BMU0VMX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMQ1RMOiBQTFNFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUExDVExfTVZSU19Qb3MgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMQ1RMOiBNVlJTIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1BMQ1RMX01WUlNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19QTENUTF9NVlJTX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTENUTDogTVZSUyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1BMQ1RMX0xWU1NUUF9Qb3MgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTENUTDogTFZTU1RQIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19QTENUTF9MVlNTVFBfTXNrICAgICAgICAgICAgICgweDNmdWwgPDwgU1lTX1BMQ1RMX0xWU1NUUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExDVEw6IExWU1NUUCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19QTENUTF9MVlNQUkRfUG9zICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExDVEw6IExWU1BSRCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfUExDVExfTFZTUFJEX01zayAgICAgICAgICAgICAoMHhmZnVsIDw8IFNZU19QTENUTF9MVlNQUkRfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMQ1RMOiBMVlNQUkQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUExTVFNfUExDQlVTWV9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMU1RTOiBQTENCVVNZIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1BMU1RTX1BMQ0JVU1lfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19QTFNUU19QTENCVVNZX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogUExDQlVTWSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1BMU1RTX01WUkNCVVNZX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogTVZSQ0JVU1kgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19QTFNUU19NVlJDQlVTWV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfUExTVFNfTVZSQ0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExTVFM6IE1WUkNCVVNZIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19QTFNUU19NVlJDRVJSX1BvcyAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExTVFM6IE1WUkNFUlIgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfUExTVFNfTVZSQ0VSUl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX1BMU1RTX01WUkNFUlJfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMU1RTOiBNVlJDRVJSIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUExTVFNfTENPTlNfUG9zICAgICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMU1RTOiBMQ09OUyBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1BMU1RTX0xDT05TX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19QTFNUU19MQ09OU19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogTENPTlMgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX1BMU1RTX1BESU5WVFJGX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogUERJTlZUUkYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19QTFNUU19QRElOVlRSRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfUExTVFNfUERJTlZUUkZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExTVFM6IFBESU5WVFJGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19QTFNUU19QTFNUQVRVU19Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6UExTVFM6IFBMU1RBVFVTIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfUExTVFNfUExTVEFUVVNfTXNrICAgICAgICAgICAoMHgzdWwgPDwgU1lTX1BMU1RTX1BMU1RBVFVTX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMU1RTOiBQTFNUQVRVUyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfUExTVFNfQ1VSTVZSX1BvcyAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX1Q6OlBMU1RTOiBDVVJNVlIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1BMU1RTX0NVUk1WUl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19QTFNUU19DVVJNVlJfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpQTFNUUzogQ1VSTVZSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX0FIQk1DVExfSU5UQUNURU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19UOjpBSEJNQ1RMOiBJTlRBQ1RFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19BSEJNQ1RMX0lOVEFDVEVOX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfQUhCTUNUTF9JTlRBQ1RFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTWVNfVDo6QUhCTUNUTDogSU5UQUNURU4gTWFzayAgICAgICAgICAqLworCisKKy8qKkB9Ki8gLyogU1lTX0NPTlNUICovCit0eXBlZGVmIHN0cnVjdAoreworCisgICAgLyoqCisgICAgICogQHZhciBTWVNfSU5UX1Q6Ok5NSUVOCisgICAgICogT2Zmc2V0OiAweDAwICBOTUkgU291cmNlIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCT0RPVVQgICAgfEJPRCBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQk9EIE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJPRCBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfElSQ0lOVCAgICB8SVJDIFRSSU0gTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElSQyBUUklNIE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElSQyBUUklNIE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzJdICAgICB8UFdSV1VJTlQgIHxQb3dlci1kb3duIE1vZGUgV2FrZS11cCBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUG93ZXItZG93biBtb2RlIHdha2UtdXAgTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG93ZXItZG93biBtb2RlIHdha2UtdXAgTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbM10gICAgIHxTUkFNUEVSUiAgfFNSQU0gUGFyaXR5IENoZWNrIEVycm9yIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUkFNIHBhcml0eSBjaGVjayBlcnJvciBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUkFNIHBhcml0eSBjaGVjayBlcnJvciBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs0XSAgICAgfENMS0ZBSUwgICB8Q2xvY2sgRmFpbCBEZXRlY3RlZCBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2xvY2sgZmFpbCBkZXRlY3RlZCBpbnRlcnJ1cHQgTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgZmFpbCBkZXRlY3RlZCBpbnRlcnJ1cHQgTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNl0gICAgIHxSVENJTlQgICAgfFJUQyBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlRDIE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJUQyBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs3XSAgICAgfFRBTVBFUklOVCB8VGFtcGVyIEludGVycnVwdCBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQmFja3VwIHJlZ2lzdGVyIHRhbXBlciBkZXRlY3RlZCBpbnRlcnJ1cHQgTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQmFja3VwIHJlZ2lzdGVyIHRhbXBlciBkZXRlY3RlZCBpbnRlcnJ1cHQgTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOF0gICAgIHxFSU5UMCAgICAgfEV4dGVybmFsIEludGVycnVwdCBGcm9tIFBBLjYsIG9yIFBCLjUgUGluIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQS42LCBvciBQQi41IHBpbiBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQS42LCBvciBQQi41IHBpbiBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs5XSAgICAgfEVJTlQxICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEEuNyBvciBQQi40IFBpbiBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXh0ZXJuYWwgaW50ZXJydXB0IGZyb20gUEEuNyBvciBQQi40IHBpbiBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQS43IG9yIFA0LjQgcGluIE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEwXSAgICB8RUlOVDIgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQi4zIG9yIFBDLjYgUGluIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi4zIG9yIFBDLjYgcGluIE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV4dGVybmFsIGludGVycnVwdCBmcm9tIFBCLjMgb3IgUEMuNiBwaW4gTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTFdICAgIHxFSU5UMyAgICAgfEV4dGVybmFsIEludGVycnVwdCBGcm9tIFBCLjIgb3IgUEMuNyBQaW4gTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEV4dGVybmFsIGludGVycnVwdCBmcm9tIFBCLjIgb3IgUEMuN3BpbiBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi4yIG9yIFBDLjcgcGluIE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzEyXSAgICB8RUlOVDQgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQS44IG9yIFBCLjYgUGluIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQS44IG9yIFBCLjYgcGluIE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV4dGVybmFsIGludGVycnVwdCBmcm9tIFBBLjggb3IgUEIuNiBwaW4gTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTNdICAgIHxFSU5UNSAgICAgfEV4dGVybmFsIEludGVycnVwdCBGcm9tIFBCLjcgb3IgUEQuMTIgUGluIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi43IG9yIFBELjEyIHBpbiBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi43IG9yIFBELjEyIHBpbiBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNF0gICAgfFVBUlQwSU5UICB8VUFSVDAgTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVBUlQwIE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQwIE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE1XSAgICB8VUFSVDFJTlQgIHxVQVJUMSBOTUkgU291cmNlIEVuYWJsZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVDEgTk1JIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVDEgTk1JIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTZdICAgIHxFSU5UNiAgICAgfEV4dGVybmFsIEludGVycnVwdCBGcm9tIFBCLjggb3IgUEQuMTEgUGluIE5NSSBTb3VyY2UgRW5hYmxlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi44IG9yIFBELjExIHBpbiBOTUkgc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBpbnRlcnJ1cHQgZnJvbSBQQi44IG9yIFBELjExIHBpbiBOTUkgc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxN10gICAgfEVJTlQ3ICAgICB8RXh0ZXJuYWwgSW50ZXJydXB0IEZyb20gUEIuOSBvciBQRC4xMCBQaW4gTk1JIFNvdXJjZSBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEV4dGVybmFsIGludGVycnVwdCBmcm9tIFBCLjkgb3IgUEQuMTAgcGluIE5NSSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV4dGVybmFsIGludGVycnVwdCBmcm9tIFBCLjkgb3IgUEQuMTAgcGluIE5NSSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFNZU19JTlRfVDo6Tk1JU1RTCisgICAgICogT2Zmc2V0OiAweDA0ICBOTUkgc291cmNlIGludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCT0RPVVQgICAgfEJPRCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCT0QgaW50ZXJydXB0IGlzIGRlLWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCT0QgaW50ZXJydXB0IGlzIGFzc2VydGVkLgorICAgICAqIHxbMV0gICAgIHxJUkNJTlQgICAgfElSQyBUUklNIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEhJUkMgVFJJTSBpbnRlcnJ1cHQgaXMgZGUtYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEhJUkMgVFJJTSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFsyXSAgICAgfFBXUldVSU5UICB8UG93ZXItZG93biBNb2RlIFdha2UtdXAgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUG93ZXItZG93biBtb2RlIHdha2UtdXAgaW50ZXJydXB0IGlzIGRlLWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3dlci1kb3duIG1vZGUgd2FrZS11cCBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFszXSAgICAgfFNSQU1QRVJSICB8U1JBTSBQYXJpdHkgQ2hlY2sgRXJyb3IgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1JBTSBwYXJpdHkgY2hlY2sgZXJyb3IgaW50ZXJydXB0IGlzIGRlLWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUkFNIHBhcml0eSBjaGVjayBlcnJvciBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFs0XSAgICAgfENMS0ZBSUwgICB8Q2xvY2sgRmFpbCBEZXRlY3RlZCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDbG9jayBmYWlsIGRldGVjdGVkIGludGVycnVwdCBpcyBkZS1hc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xvY2sgZmFpbCBkZXRlY3RlZCBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFs2XSAgICAgfFJUQ0lOVCAgICB8UlRDIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJUQyBpbnRlcnJ1cHQgaXMgZGUtYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJUQyBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCisgICAgICogfFs3XSAgICAgfFRBTVBFUklOVCB8VGFtcGVyIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJhY2t1cCByZWdpc3RlciB0YW1wZXIgZGV0ZWN0ZWQgaW50ZXJydXB0IGlzIGRlLWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCYWNrdXAgcmVnaXN0ZXIgdGFtcGVyIGRldGVjdGVkIGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzhdICAgICB8RUlOVDAgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQS42LCBvciBQQi41IFBpbiBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQS42LCBvciBQQi41IGludGVycnVwdCBpcyBkZWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQS42LCBvciBQQi41IGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzldICAgICB8RUlOVDEgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQS43LCBvciBQQi40IFBpbiBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQS43LCBvciBQQi40IGludGVycnVwdCBpcyBkZWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQS43LCBvciBQQi40IGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzEwXSAgICB8RUlOVDIgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQi4zIG9yIFBDLjYgUGluIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEV4dGVybmFsIEludGVycnVwdCBmcm9tIFBCLjMgb3IgUEMuNiBpbnRlcnJ1cHQgaXMgZGVhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEIuMyBvciBQQy42IGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzExXSAgICB8RUlOVDMgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQi4yIG9yIFBDLjcgUGluIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEV4dGVybmFsIEludGVycnVwdCBmcm9tIFBCLjIgb3IgUEMuNyBpbnRlcnJ1cHQgaXMgZGVhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEIuMiBvciBQQy43IGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzEyXSAgICB8RUlOVDQgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQS44IG9yIFBCLjYgUGluIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEV4dGVybmFsIEludGVycnVwdCBmcm9tIFBBLjggb3IgUEIuNiBpbnRlcnJ1cHQgaXMgZGVhc3NlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUEEuOCBvciBQQi42IGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzEzXSAgICB8RUlOVDUgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQi43IG9yIFBELjEyIFBpbiBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQi43IG9yIFBELjEyIGludGVycnVwdCBpcyBkZWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQi43IG9yIFBELjEyIGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzE0XSAgICB8VUFSVDBJTlQgIHxVQVJUMCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVQVJUMSBpbnRlcnJ1cHQgaXMgZGUtYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQxIGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzE1XSAgICB8VUFSVDFJTlQgIHxVQVJUMSBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVQVJUMSBpbnRlcnJ1cHQgaXMgZGUtYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlQxIGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzE2XSAgICB8RUlOVDYgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQi44IG9yIFBELjExIFBpbiBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQi44IG9yIFBELjExIGludGVycnVwdCBpcyBkZWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQi44IG9yIFBELjExIGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKiB8WzE3XSAgICB8RUlOVDcgICAgIHxFeHRlcm5hbCBJbnRlcnJ1cHQgRnJvbSBQQi45IG9yIFBELjEwIFBpbiBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQi45IG9yIFBELjEwIGludGVycnVwdCBpcyBkZWFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBJbnRlcnJ1cHQgZnJvbSBQQi45IG9yIFBELjEwIGludGVycnVwdCBpcyBhc3NlcnRlZC4KKyAgICAgKi8KKworICAgIF9fSU8gIHVpbnQzMl90IE5NSUVOOyAgICAgICAgICAvKiBPZmZzZXQ6IDB4MDAgIE5NSSBTb3VyY2UgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgIHVpbnQzMl90IE5NSVNUUzsgICAgICAgICAvKiBPZmZzZXQ6IDB4MDQgIE5NSSBzb3VyY2UgaW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFNZU19JTlRfVDsKKy8qKgorICAgIEBhZGR0b2dyb3VwIElOVF9DT05TVCBJTlQgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgSU5UIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgU1lTX05NSUVOX0JPRE9VVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEJPRE9VVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9CT0RPVVRfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fQk9ET1VUX1BvcyApICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBCT0RPVVQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9JUkNJTlRfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBJUkNJTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fSVJDSU5UX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX0lSQ0lOVF9Qb3MgKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogSVJDSU5UIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fUFdSV1VJTlRfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogUFdSV1VJTlQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX1BXUldVSU5UX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9QV1JXVUlOVF9Qb3MgKSAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IFBXUldVSU5UIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX1NSQU1QRVJSX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IFNSQU1QRVJSIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9TUkFNUEVSUl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fU1JBTVBFUlJfUG9zICkgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBTUkFNUEVSUiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9DTEtGQUlMX1BvcyAgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBDTEtGQUlMIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fQ0xLRkFJTF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX0NMS0ZBSUxfUG9zICkgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogQ0xLRkFJTCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fUlRDSU5UX1BvcyAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogUlRDSU5UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX1JUQ0lOVF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9SVENJTlRfUG9zICkgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IFJUQ0lOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX1RBTVBFUklOVF9Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IFRBTVBFUklOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9UQU1QRVJJTlRfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fVEFNUEVSSU5UX1BvcyApICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBUQU1QRVJJTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UMF9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UMCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDBfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX0VJTlQwX1BvcyApICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDAgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDFfUG9zICAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDEgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQxX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9FSU5UMV9Qb3MgKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQxIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQyX1BvcyAgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQyIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UMl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fRUlOVDJfUG9zICkgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UMiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UM19Qb3MgICAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UMyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDNfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX0VJTlQzX1BvcyApICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDRfUG9zICAgICAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQ0X01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9FSU5UNF9Qb3MgKSAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQ0IE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQ1X1BvcyAgICAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQ1IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UNV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fRUlOVDVfUG9zICkgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UNSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9VQVJUMElOVF9Qb3MgICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBVQVJUMElOVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fVUFSVDBJTlRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX1VBUlQwSU5UX1BvcyApICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogVUFSVDBJTlQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JRU5fVUFSVDFJTlRfUG9zICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogVUFSVDFJTlQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSUVOX1VBUlQxSU5UX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlFTl9VQVJUMUlOVF9Qb3MgKSAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IFVBUlQxSU5UIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSUVOX0VJTlQ2X1BvcyAgICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JRU46IEVJTlQ2IFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UNl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JRU5fRUlOVDZfUG9zICkgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UNiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlFTl9FSU5UN19Qb3MgICAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSUVOOiBFSU5UNyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JRU5fRUlOVDdfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSUVOX0VJTlQ3X1BvcyApICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlFTjogRUlOVDcgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX0JPRE9VVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEJPRE9VVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19CT0RPVVRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfQk9ET1VUX1BvcyApICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBCT0RPVVQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19JUkNJTlRfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBJUkNJTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfSVJDSU5UX01zayAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfSVJDSU5UX1BvcyApICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogSVJDSU5UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfUFdSV1VJTlRfUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogUFdSV1VJTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX1BXUldVSU5UX01zayAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX1BXUldVSU5UX1BvcyApICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IFBXUldVSU5UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX1NSQU1QRVJSX1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IFNSQU1QRVJSIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19TUkFNUEVSUl9Nc2sgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19TUkFNUEVSUl9Qb3MgKSAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBTUkFNUEVSUiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19DTEtGQUlMX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBDTEtGQUlMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfQ0xLRkFJTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX0NMS0ZBSUxfUG9zICkgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogQ0xLRkFJTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfUlRDSU5UX1BvcyAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogUlRDSU5UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX1JUQ0lOVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19SVENJTlRfUG9zICkgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IFJUQ0lOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX1RBTVBFUklOVF9Qb3MgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IFRBTVBFUklOVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19UQU1QRVJJTlRfTXNrICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfVEFNUEVSSU5UX1BvcyApICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBUQU1QRVJJTlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UMF9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UMCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDBfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX0VJTlQwX1BvcyApICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDFfUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDEgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQxX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19FSU5UMV9Qb3MgKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQxIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQyX1BvcyAgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQyIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UMl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfRUlOVDJfUG9zICkgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UMiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UM19Qb3MgICAgICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UMyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDNfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX0VJTlQzX1BvcyApICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDMgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDRfUG9zICAgICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQ0X01zayAgICAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19FSU5UNF9Qb3MgKSAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQ0IE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQ1X1BvcyAgICAgICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQ1IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UNV9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfRUlOVDVfUG9zICkgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UNSBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19VQVJUMElOVF9Qb3MgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBVQVJUMF9JTlQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfVUFSVDBJTlRfTXNrICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX1VBUlQwSU5UX1BvcyApICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogVUFSVDBfSU5UIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFNZU19OTUlTVFNfVUFSVDFJTlRfUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogVUFSVDFfSU5UIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBTWVNfTk1JU1RTX1VBUlQxSU5UX01zayAgICAgICAgICAoMHgxdWwgPDwgU1lTX05NSVNUU19VQVJUMUlOVF9Qb3MgKSAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IFVBUlQxX0lOVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBTWVNfTk1JU1RTX0VJTlQ2X1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1lTX0lOVF9UOjpOTUlTVFM6IEVJTlQ2IFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UNl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFNZU19OTUlTVFNfRUlOVDZfUG9zICkgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UNiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1lTX05NSVNUU19FSU5UN19Qb3MgICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNZU19JTlRfVDo6Tk1JU1RTOiBFSU5UNyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFNZU19OTUlTVFNfRUlOVDdfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBTWVNfTk1JU1RTX0VJTlQ3X1BvcyApICAgICAgICAgICAgICAgICAgLyohPCBTWVNfSU5UX1Q6Ok5NSVNUUzogRUlOVDcgTWFzayAgICAgICAgICAgICAqLworCisKKy8qKkB9Ki8gLyogSU5UX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBTWVMgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKworI2VuZGlmIC8qIF9fU1lTX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zeXN0ZW1fTTIzNTEuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS9zeXN0ZW1fTTIzNTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTgwMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3N5c3RlbV9NMjM1MS5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc3lzdGVtX00yMzUxLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFN5c3RlbSBTZXR0aW5nIEhlYWRlciBGaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1NZU1RFTV9NMjM1MV9IX18KKyNkZWZpbmUgX19TWVNURU1fTTIzNTFfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1hY3JvIERlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZm5kZWYgREVCVUdfUE9SVAorIyBkZWZpbmUgREVCVUdfUE9SVCAgICAgIFVBUlQwICAgICAgIC8qITwgU2VsZWN0IERlYnVnIFBvcnQgd2hpY2ggaXMgdXNlZCBmb3IgcmV0YXJnZXQuYyB0byBvdXRwdXQgZGVidWcgbWVzc2FnZSB0byBVQVJUICovCisjZW5kaWYKKworCisvKiBJbml0IEVUTSBJbnRlcmZhY2UgTXVsdGktZnVuY3Rpb24gUGlucyAqLworI2RlZmluZSBFVE1fSU5JVCgpICB7IFwKKyAgICBTWVMtPkdQQ19NRlBMICY9IH4oU1lTX0dQQ19NRlBMX1BDME1GUF9FVE1fVFJBQ0VfTXNrIHwgU1lTX0dQQ19NRlBMX1BDMU1GUF9FVE1fVFJBQ0VfTXNrIHwgXAorICAgIFNZU19HUENfTUZQTF9QQzJNRlBfRVRNX1RSQUNFX01zayB8IFNZU19HUENfTUZQTF9QQzNNRlBfRVRNX1RSQUNFX01zayB8IFwKKyAgICAgICAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfRVRNX1RSQUNFX01zayk7IFwKKyAgICBTWVMtPkdQQ19NRlBMIHw9IFNZU19HUENfTUZQTF9QQzBNRlBfRVRNX1RSQUNFX0NMSyB8IFNZU19HUENfTUZQTF9QQzFNRlBfRVRNX1RSQUNFX0RBVEEwIHwgXAorICAgICAgICAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9FVE1fVFJBQ0VfREFUQTEgfCBTWVNfR1BDX01GUExfUEMzTUZQX0VUTV9UUkFDRV9EQVRBMiB8IFwKKyAgICAgICAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfRVRNX1RSQUNFX0RBVEEzO30KKworCisKKworCisvKioKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGlzIHVzZWQgdG8gZW5hYmxlIFBMTCB0byBzcGVlZCB1cCBib290aW5nIGF0IHN0YXJ0dXAuIFJlbW92ZSBpdCB3aWxsIGNhdXNlIHN5c3RlbSB1c2luZworICogICAgICAgICAgICAgZGVmYXVsdCBjbG9jayBzb3VyY2UgKEV4dGVybmFsIGNyeXN0YWwgb3IgaW50ZXJuYWwgMjIuMTE4NE1IeiBJUkMpLgorICogICAgICAgICAgICAgRW5hYmxlIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3lzdGVtIGJvb3RpbmcgaW4gNzJNSHooQnkgWFRBTCkgb3IgNzEuODg0OE1IeihCeSBJUkMyMk0pIGFjY29yZGluZyB0bworICogICAgICAgICAgICAgdXNlciBjb25maWd1cmF0aW9uIHNldHRpbmcgaW4gQ09ORklHMAorICoKKyAqLworCisvKgorI2RlZmluZSBJTklUX1NZU0NMS19BVF9CT09USU5HCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVmaW5lIFNZU0NMSworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgX19IWFQgICAgICAgKDEyMDAwMDAwVUwpICAgIC8qITwgRXh0ZXJuYWwgQ3J5c3RhbCBDbG9jayBGcmVxdWVuY3kgICAgICovCisjZGVmaW5lIF9fTElSQyAgICAgICgxMDAwMFVMKSAgICAgICAvKiE8IEludGVybmFsIDEwSyBSQyBPc2NpbGxhdG9yIEZyZXF1ZW5jeSAqLworI2RlZmluZSBfX0hJUkMgICAgICAoMTIwMDAwMDBVTCkgICAgLyohPCBJbnRlcm5hbCAxMk0gUkMgT3NjaWxsYXRvciBGcmVxdWVuY3kgKi8KKyNkZWZpbmUgX19MWFQgICAgICAgKDMyNzY4VUwpICAgICAgIC8qITwgRXh0ZXJuYWwgQ3J5c3RhbCBDbG9jayBGcmVxdWVuY3kgMzIuNzY4S0h6ICovCisjZGVmaW5lIF9fSFNJICAgICAgICg0ODAwMDAwMFVMKSAgICAvKiE8IFBMTCBPdXRwdXQgQ2xvY2sgRnJlcXVlbmN5ICovCisjZGVmaW5lIF9fSElSQzQ4ICAgICg0ODAwMDAwMFVMKSAgICAvKiE8IEludGVybmFsIDQ4TSBSQyBPc2NpbGxhdG9yIEZyZXF1ZW5jeSAqLworI2RlZmluZSBfX0xJUkMzMiAgICAoMzIwMDBVTCkgICAgICAgLyohPCBJbnRlcm5hbCAzMksgUkMgT3NjaWxsYXRvciBGcmVxdWVuY3kgKi8KKworCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNMKQorIyBpZiBkZWZpbmVkIChfX0lDQ0FSTV9fKQorIyAgZGVmaW5lIF9fTk9OU0VDVVJFX0VOVFJZICAgICAgIF9fY21zZV9ub25zZWN1cmVfZW50cnkKKyMgIGRlZmluZSBfX05PTlNFQ1VSRV9FTlRSWV9XRUFLICBfX2Ntc2Vfbm9uc2VjdXJlX2VudHJ5IC8vX193ZWFrCisjICBkZWZpbmUgX19OT05TRUNVUkVfQ0FMTCAgICAgICAgX19jbXNlX25vbnNlY3VyZV9jYWxsCisjIGVsc2UKKyMgIGRlZmluZSBfX05PTlNFQ1VSRV9FTlRSWSAgICAgICBfX2F0dHJpYnV0ZV9fKChjbXNlX25vbnNlY3VyZV9lbnRyeSkpCisjICBkZWZpbmUgX19OT05TRUNVUkVfRU5UUllfV0VBSyAgX19hdHRyaWJ1dGVfXygoY21zZV9ub25zZWN1cmVfZW50cnksd2VhaykpCisjICBkZWZpbmUgX19OT05TRUNVUkVfQ0FMTCAgICAgICAgX19hdHRyaWJ1dGVfXygoY21zZV9ub25zZWN1cmVfY2FsbCkpCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX19OT05TRUNVUkVfRU5UUlkKKyMgZGVmaW5lIF9fTk9OU0VDVVJFX0VOVFJZX1dFQUsKKyMgZGVmaW5lIF9fTk9OU0VDVVJFX0NBTEwKKyNlbmRpZgorCisKKworZXh0ZXJuIHVpbnQzMl90IFN5c3RlbUNvcmVDbG9jazsgICAgLyohPCBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5IChDb3JlIENsb2NrKSAgKi8KK2V4dGVybiB1aW50MzJfdCBDeWNsZXNQZXJVczsgICAgICAgIC8qITwgQ3ljbGVzIHBlciBtaWNybyBzZWNvbmQgICAgICAgICAgICAgICovCitleHRlcm4gdWludDMyX3QgUGxsQ2xvY2s7ICAgICAgICAgICAvKiE8IFBMTCBPdXRwdXQgQ2xvY2sgRnJlcXVlbmN5ICAgICAgICAgICAqLworZXh0ZXJuIHVpbnQzMl90IF9fUEModm9pZCk7ICAgICAgICAgLyohPCBSZXR1cm4gdGhlIGN1cnJlbnQgcHJvZ3JhbSBjb3VudGVyIHZhbHVlICovCisKKyNpZiBVU0VfQVNTRVJUCisvKioKKyAqIEBicmllZiAgICAgIEFzc2VydCBGdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gIGV4cHIgIEV4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIElmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlLCBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgcHJpbnRlZCBvdXQKKyAqICAgICAgICAgICAgIGZyb20gZGVidWcgcG9ydCAoVUFSVDAgb3IgVUFSVDEpLgorICovCisjZGVmaW5lIEFTU0VSVF9QQVJBTShleHByKSAgeyBpZiAoIShleHByKSkgeyBBc3NlcnRFcnJvcigodWludDhfdCopX19GSUxFX18sIF9fTElORV9fKTsgfSB9CisKK3ZvaWQgQXNzZXJ0RXJyb3IodWludDhfdCogZmlsZSwgdWludDMyX3QgbGluZSk7CisjZWxzZQorI2RlZmluZSBBU1NFUlRfUEFSQU0oZXhwcikKKyNlbmRpZgorCisjZGVmaW5lIGFzc2VydF9wYXJhbShleHByKSAgQVNTRVJUX1BBUkFNKGV4cHIpCisKKworLyoqCisgKiBAYnJpZWYgICAgU3lzdGVtIEluaXRpYWxpemF0aW9uCisgKgorICogQHBhcmFtICAgIE5vbmUKKyAqCisgKiBAcmV0dXJuICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICBUaGUgbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIG9mIHN5c3RlbS4KKyAqLworZXh0ZXJuIHZvaWQgU3lzdGVtSW5pdCh2b2lkKTsKKworCisvKioKKyAqIEBicmllZiAgICBVcGRhdGUgdGhlIFZhcmlhYmxlIFN5c3RlbUNvcmVDbG9jaworICoKKyAqIEBwYXJhbSAgICBOb25lCisgKgorICogQHJldHVybiAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgdmFyaWFibGUgU3lzdGVtQ29yZUNsb2NrCisgKiAgICAgICAgICAgYW5kIG11c3QgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBjb3JlIGNsb2NrIGlzIGNoYW5nZWQuCisgKi8KK2V4dGVybiB2b2lkIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSh2b2lkKTsKKworCisKKworI2lmIChkZWZpbmVkKF9fSUNDQVJNX18pICYmIChfX1ZFUl9fID49IDcwODAwMDApICYmIChfX1ZFUl9fIDwgODAyMDAwMCkpCit1aW50MzJfdCBfX1RaX2dldF9QU1BfTlModm9pZCk7Cit2b2lkIF9fVFpfc2V0X1BTUF9OUyh1aW50MzJfdCB0b3BPZlByb2NTdGFjayk7CitpbnQzMl90IF9fVFpfZ2V0X01TUF9OUyh2b2lkKTsKK3ZvaWQgX19UWl9zZXRfTVNQX05TKHVpbnQzMl90IHRvcE9mTWFpblN0YWNrKTsKK3VpbnQzMl90IF9fVFpfZ2V0X1BSSU1BU0tfTlModm9pZCk7Cit2b2lkIF9fVFpfc2V0X1BSSU1BU0tfTlModWludDMyX3QgcHJpTWFzayk7CisjZW5kaWYKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NZU1RFTV9NMjM1MV9IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS90aW1lcl9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS90aW1lcl9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmJjYjFlCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3RpbWVyX3JlZy5oCkBAIC0wLDAgKzEsMTA2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHRpbWVyX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBUSU1FUiByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19USU1FUl9SRUdfSF9fCisjZGVmaW5lIF9fVElNRVJfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaW1lciBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgVElNRVIgVGltZXIgQ29udHJvbGxlcihUSU1FUikKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgVElNRVIgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBUSU1FUl9UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxQU0MgICAgICAgfFByZXNjYWxlIENvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaW1lciBpbnB1dCBjbG9jayBvciBldmVudCBzb3VyY2UgaXMgZGl2aWRlZCBieSAoUFNDKzEpIGJlZm9yZSBpdCBpcyBmZWQgdG8gdGhlIHRpbWVyIHVwIGNvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGZpZWxkIGlzIDAgKFBTQyA9IDApLCB0aGVuIHRoZXJlIGlzIG5vIHNjYWxpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVXBkYXRlIHByZXNjYWxlIGNvdW50ZXIgdmFsdWUgd2lsbCByZXNldCBpbnRlcm5hbCA4LWJpdCBwcmVzY2FsZSBjb3VudGVyIGFuZCAyNC1iaXQgdXAgY291bnRlciB2YWx1ZS4KKyAgICAgKiB8WzE5XSAgICB8SU5UUkdFTiAgIHxJbnRlci10aW1lciBUcmlnZ2VyIE1vZGUgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXR0aW5nIHRoaXMgYml0IHdpbGwgZW5hYmxlIHRoZSBpbnRlci10aW1lciB0cmlnZ2VyIGNhcHR1cmUgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFRpbWVyMC8yIHdpbGwgYmUgaW4gZXZlbnQgY291bnRlciBtb2RlIGFuZCBjb3VudGluZyB3aXRoIGV4dGVybmFsIGNsb2NrIHNvdXJjZSBvciBldmVudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEFsc28sIFRpbWVyMS8zIHdpbGwgYmUgaW4gdHJpZ2dlci1jb3VudGluZyBtb2RlIG9mIGNhcHR1cmUgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVyLVRpbWVyIFRyaWdnZXIgQ2FwdHVyZSBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlci1UaW1lciBUcmlnZ2VyIENhcHR1cmUgbW9kZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEZvciBUaW1lcjEvMywgdGhpcyBiaXQgaXMgaWdub3JlZCBhbmQgdGhlIHJlYWQgYmFjayB2YWx1ZSBpcyBhbHdheXMgMC4KKyAgICAgKiB8WzIwXSAgICB8UEVSSU9TRUwgIHxQZXJpb2RpYyBNb2RlIEJlaGF2aW9yIFNlbGVjdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBiZWhhdmlvciBzZWxlY3Rpb24gaW4gcGVyaW9kaWMgbW9kZSBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHVzZXIgdXBkYXRlcyBDTVBEQVQgd2hpbGUgdGltZXIgaXMgcnVubmluZyBpbiBwZXJpb2RpYyBtb2RlLAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENOVCB3aWxsIGJlIHJlc2V0IHRvIGRlZmF1bHQgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBiZWhhdmlvciBzZWxlY3Rpb24gaW4gcGVyaW9kaWMgbW9kZSBpcyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdXNlciB1cGRhdGUgQ01QREFUIHdoaWxlIHRpbWVyIGlzIHJ1bm5pbmcgaW4gcGVyaW9kaWMgbW9kZSwgdGhlIGxpbWl0YXRpb25zIGFzIGJlbGxvd3MgbGlzdCwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1cGRhdGVkIENNUERBVCB2YWx1ZSA+IENOVCwgQ01QREFUIHdpbGwgYmUgdXBkYXRlZCBhbmQgQ05UIGtlZXAgcnVubmluZyBjb250aW51YWxseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1cGRhdGVkIENNUERBVCB2YWx1ZSA9IENOVCwgdGltZXIgdGltZS1vdXQgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQgaW1tZWRpYXRlbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXBkYXRlZCBDTVBEQVQgdmFsdWUgPCBDTlQsIENOVCB3aWxsIGJlIHJlc2V0IHRvIGRlZmF1bHQgdmFsdWUuCisgICAgICogfFsyMV0gICAgfFRHTFBJTlNFTCB8VG9nZ2xlLW91dHB1dCBQaW4gU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRvZ2dsZSBtb2RlIG91dHB1dCB0byBUTXggKFRpbWVyIEV2ZW50IENvdW50ZXIgUGluKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVG9nZ2xlIG1vZGUgb3V0cHV0IHRvIFRNeF9FWFQgKFRpbWVyIEV4dGVybmFsIENhcHR1cmUgUGluKS4KKyAgICAgKiB8WzIyXSAgICB8Q0FQU1JDICAgIHxDYXB0dXJlIFBpbiBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENhcHR1cmUgRnVuY3Rpb24gc291cmNlIGlzIGZyb20gVE14X0VYVCAoeD0gMH4zKSBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgRnVuY3Rpb24gc291cmNlIGlzIGZyb20gaW50ZXJuYWwgQUNNUCBvdXRwdXQgc2lnbmFsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gc2V0IEFDTVBTU0VMIChUSU1FUnhfRVhUQ1RMWzhdKSB0byBkZWNpZGUgd2hpY2ggaW50ZXJuYWwgQUNNUCBvdXRwdXQgc2lnbmFsIGFzIHRpbWVyIGNhcHR1cmUgc291cmNlLgorICAgICAqIHxbMjNdICAgIHxXS0VOICAgICAgfFdha2UtdXAgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB3aGlsZSB0aW1lciBpbnRlcnJ1cHQgZmxhZyBUSUYgKFRJTUVSeF9JTlRTVFNbMF0pIGlzIDEgYW5kIElOVEVOIChUSU1FUnhfQ1RMWzI5XSkgaXMgZW5hYmxlZCwgdGhlIHRpbWVyIGludGVycnVwdCBzaWduYWwgd2lsbCBnZW5lcmF0ZSBhIHdha2UtdXAgdHJpZ2dlciBldmVudCB0byBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQgaWYgdGltZXIgaW50ZXJydXB0IHNpZ25hbCBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZCBpZiB0aW1lciBpbnRlcnJ1cHQgc2lnbmFsIGdlbmVyYXRlZC4KKyAgICAgKiB8WzI0XSAgICB8RVhUQ05URU4gIHxFdmVudCBDb3VudGVyIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGZvciBleHRlcm5hbCBjb3VudGluZyBwaW4gZnVuY3Rpb24gZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRXZlbnQgY291bnRlciBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFdmVudCBjb3VudGVyIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRpbWVyIGlzIHVzZWQgYXMgYW4gZXZlbnQgY291bnRlciwgdGhpcyBiaXQgc2hvdWxkIGJlIHNldCB0byAxIGFuZCBzZWxlY3QgUENMSyBhcyB0aW1lciBjbG9jayBzb3VyY2UuCisgICAgICogfFsyNV0gICAgfEFDVFNUUyAgICB8VGltZXIgQWN0aXZlIFN0YXR1cyBCaXQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIDI0LWJpdCB1cCBjb3VudGVyIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gMjQtYml0IHVwIGNvdW50ZXIgaXMgbm90IGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMjQtYml0IHVwIGNvdW50ZXIgaXMgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IG1heSBhY3RpdmUgd2hlbiBDTlQgMCB0cmFuc2l0aW9uIHRvIENOVCAxLgorICAgICAqIHxbMjg6MjddIHxPUE1PREUgICAgfFRpbWVyIENvdW50aW5nIE1vZGUgU2VsZWN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBUaGUgVGltZXIgY29udHJvbGxlciBpcyBvcGVyYXRlZCBpbiBPbmUtc2hvdCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gVGhlIFRpbWVyIGNvbnRyb2xsZXIgaXMgb3BlcmF0ZWQgaW4gUGVyaW9kaWMgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFRoZSBUaW1lciBjb250cm9sbGVyIGlzIG9wZXJhdGVkIGluIFRvZ2dsZS1vdXRwdXQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFRoZSBUaW1lciBjb250cm9sbGVyIGlzIG9wZXJhdGVkIGluIENvbnRpbnVvdXMgQ291bnRpbmcgbW9kZS4KKyAgICAgKiB8WzI5XSAgICB8SU5URU4gICAgIHxUaW1lciBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyIHRpbWUtb3V0IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIHRoaXMgYml0IGlzIGVuYWJsZWQsIHdoZW4gdGhlIHRpbWVyIHRpbWUtb3V0IGludGVycnVwdCBmbGFnIFRJRiBpcyBzZXQgdG8gMSwgdGhlIHRpbWVyIGludGVycnVwdCBzaWduYWwgaXMgZ2VuZXJhdGVkIGFuZCBpbmZvcm0gdG8gQ1BVLgorICAgICAqIHxbMzBdICAgIHxDTlRFTiAgICAgfFRpbWVyIENvdW50aW5nIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU3RvcHMvU3VzcGVuZHMgY291bnRpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0YXJ0cyBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSW4gc3RvcCBzdGF0dXMsIGFuZCB0aGVuIHNldCBDTlRFTiB0byAxIHdpbGwgZW5hYmxlIHRoZSAyNC1iaXQgdXAgY291bnRlciB0byBrZWVwIGNvdW50aW5nIGZyb20gdGhlIGxhc3Qgc3RvcCBjb3VudGluZyB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgYXV0by1jbGVhcmVkIGJ5IGhhcmR3YXJlIGluIG9uZS1zaG90IG1vZGUgKFRJTUVSX0NUTFsyODoyN10gPSAwMCkgd2hlbiB0aGUgdGltZXIgdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgVElGIChUSU1FUnhfSU5UU1RTWzBdKSBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTM6IFNldCBlbmFibGUvZGlzYWJsZSB0aGlzIGJpdCBuZWVkcyAyICogVE1SX0NMSyBwZXJpb2QgdG8gYmVjb21lIGFjdGl2ZSwgdXNlciBjYW4gcmVhZCBBQ1RTVFMgKFRJTUVSeF9DVExbMjVdKSB0byBjaGVjayBlbmFibGUvZGlzYWJsZSBjb21tYW5kIGlzIGNvbXBsZXRlZCBvciBub3QuCisgICAgICogfFszMV0gICAgfElDRURFQlVHICB8SUNFIERlYnVnIE1vZGUgQWNrbm93bGVkZ2UgRGlzYWJsZSBDb250cm9sIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnbWVudCBlZmZlY3RzIFRJTUVSIGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRJTUVSIGNvdW50ZXIgd2lsbCBiZSBoZWxkIHdoaWxlIENQVSBpcyBoZWxkIGJ5IElDRS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ21lbnQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VElNRVIgY291bnRlciB3aWxsIGtlZXAgZ29pbmcgbm8gbWF0dGVyIENQVSBpcyBoZWxkIGJ5IElDRSBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBUSU1FUl9UOjpDTVAKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIFRpbWVyIENvbXBhcmF0b3IgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjM6MF0gIHxDTVBEQVQgICAgfFRpbWVyIENvbXBhcmF0b3IgVmFsdWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxDTVBEQVQgaXMgYSAyNC1iaXQgY29tcGFyZWQgdmFsdWUgcmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBpbnRlcm5hbCAyNC1iaXQgdXAgY291bnRlciB2YWx1ZSBpcyBlcXVhbCB0byBDTVBEQVQgdmFsdWUsIHRoZSBUSUYgKFRJTUVSeF9JTlRTVFNbMF0gVGltZXIgSW50ZXJydXB0IEZsYWcpIHdpbGwgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGltZS1vdXQgcGVyaW9kID0gKFBlcmlvZCBvZiB0aW1lciBjbG9jayBpbnB1dCkgKiAoOC1iaXQgUFNDICsgMSkgKiAoMjQtYml0IENNUERBVCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IE5ldmVyIHdyaXRlIDB4MCBvciAweDEgaW4gQ01QREFUIGZpZWxkLCBvciB0aGUgY29yZSB3aWxsIHJ1biBpbnRvIHVua25vd24gc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFdoZW4gdGltZXIgaXMgb3BlcmF0aW5nIGF0IGNvbnRpbnVvdXMgY291bnRpbmcgbW9kZSwgdGhlIDI0LWJpdCB1cCBjb3VudGVyIHdpbGwga2VlcCBjb3VudGluZyBjb250aW51b3VzbHkgZXZlbiBpZiB1c2VyIHdyaXRlcyBhIG5ldyB2YWx1ZSBpbnRvIENNUERBVCBmaWVsZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJ1dCBpZiB0aW1lciBpcyBvcGVyYXRpbmcgYXQgb3RoZXIgbW9kZXMsIHRoZSAyNC1iaXQgdXAgY291bnRlciB3aWxsIHJlc3RhcnQgY291bnRpbmcgZnJvbSAwIGFuZCB1c2luZyBuZXdlc3QgQ01QREFUIHZhbHVlIHRvIGJlIHRoZSB0aW1lciBjb21wYXJlZCB2YWx1ZSB3aGlsZSB1c2VyIHdyaXRlcyBhIG5ldyB2YWx1ZSBpbnRvIENNUERBVCBmaWVsZC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OklOVFNUUworICAgICAqIE9mZnNldDogMHgwOCAgVGltZXIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFRJRiAgICAgICB8VGltZXIgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIGludGVycnVwdCBmbGFnIHN0YXR1cyBvZiBUaW1lciB3aGlsZSAyNC1iaXQgdGltZXIgdXAgY291bnRlciBDTlQgKFRJTUVSeF9DTlRbMjM6MF0pIHZhbHVlIHJlYWNoZXMgdG8gQ01QREFUIChUSU1FUnhfQ01QWzIzOjBdKSB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDTlQgdmFsdWUgbWF0Y2hlcyB0aGUgQ01QREFUIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMV0gICAgIHxUV0tGICAgICAgfFRpbWVyIFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgaW50ZXJydXB0IHdha2UtdXAgZmxhZyBzdGF0dXMgb2YgdGltZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyIGRvZXMgbm90IGNhdXNlIENQVSB3YWtlLXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDUFUgd2FrZS11cCBmcm9tIElkbGUgb3IgUG93ZXItZG93biBtb2RlIGlmIHRpbWVyIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIEB2YXIgVElNRVJfVDo6Q05UCisgICAgICogT2Zmc2V0OiAweDBDICBUaW1lciBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzIzOjBdICB8Q05UICAgICAgIHxUaW1lciBEYXRhIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCB0aGlzIHJlZ2lzdGVyIHRvIGdldCBDTlQgdmFsdWUuIEZvciBleGFtcGxlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEVYVENOVEVOIChUSU1FUnhfQ1RMWzI0XSApIGlzIDAsIHVzZXIgY2FuIHJlYWQgQ05UIHZhbHVlIGZvciBnZXR0aW5nIGN1cnJlbnQgMjQtYml0IGNvdW50ZXIgdmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgRVhUQ05URU4gKFRJTUVSeF9DVExbMjRdICkgaXMgMSwgdXNlciBjYW4gcmVhZCBDTlQgdmFsdWUgZm9yIGdldHRpbmcgY3VycmVudCAyNC1iaXQgZXZlbnQgaW5wdXQgY291bnRlciB2YWx1ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBvcGVyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGluZyBhbnkgdmFsdWUgdG8gdGhpcyByZWdpc3RlciB3aWxsIHJlc2V0IGN1cnJlbnQgQ05UIHZhbHVlIHRvIDAgYW5kIHJlbG9hZCBpbnRlcm5hbCA4LWJpdCBwcmVzY2FsZSBjb3VudGVyLgorICAgICAqIHxbMzFdICAgIHxSU1RBQ1QgICAgfFRpbWVyIERhdGEgUmVnaXN0ZXIgUmVzZXQgQWN0aXZlIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIGlmIHRoZSBjb3VudGVyIHJlc2V0IG9wZXJhdGlvbiBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB1c2VyIHdyaXRlcyB0aGlzIENOVCByZWdpc3RlciwgdGltZXIgc3RhcnRzIHRvIHJlc2V0IGl0cyBpbnRlcm5hbCAyNC1iaXQgdGltZXIgdXAtY291bnRlciB0byAwIGFuZCByZWxvYWQgOC1iaXQgcHJlLXNjYWxlIGNvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBdCB0aGUgc2FtZSB0aW1lLCB0aW1lciBzZXQgdGhpcyBmbGFnIHRvIDEgdG8gaW5kaWNhdGUgdGhlIGNvdW50ZXIgcmVzZXQgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSB0aGUgY291bnRlciByZXNldCBvcGVyYXRpb24gZG9uZSwgdGltZXIgY2xlYXIgdGhpcyBiaXQgdG8gMCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZXNldCBvcGVyYXRpb24gaXMgZG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgb3BlcmF0aW9uIHRyaWdnZXJlZCBieSB3cml0aW5nIFRJTUVSeF9DTlQgaXMgaW4gcHJvZ3Jlc3MuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LgorICAgICAqIEB2YXIgVElNRVJfVDo6Q0FQCisgICAgICogT2Zmc2V0OiAweDEwICBUaW1lciBDYXB0dXJlIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjM6MF0gIHxDQVBEQVQgICAgfFRpbWVyIENhcHR1cmUgRGF0YSBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gQ0FQRU4gKFRJTUVSeF9FWFRDVExbM10pIGJpdCBpcyBzZXQsIENBUEZVTkNTIChUSU1FUnhfRVhUQ1RMWzRdKSBiaXQgaXMgMCwgYW5kIGEgdHJhbnNpdGlvbiBvbiBUTXhfRVhUIHBpbiBtYXRjaGVkIHRoZSBDQVBFREdFIChUSU1FUnhfRVhUQ1RMWzE0OjEyXSkgc2V0dGluZywgQ0FQSUYgKFRJTUVSeF9FSU5UU1RTWzBdKSB3aWxsIHNldCB0byAxIGFuZCB0aGUgY3VycmVudCB0aW1lciBjb3VudGVyIHZhbHVlIENOVCAoVElNRVJ4X0NOVFsyMzowXSkgd2lsbCBiZSBhdXRvLWxvYWRlZCBpbnRvIHRoaXMgQ0FQREFUIGZpZWxkLgorICAgICAqIEB2YXIgVElNRVJfVDo6RVhUQ1RMCisgICAgICogT2Zmc2V0OiAweDE0ICBUaW1lciBFeHRlcm5hbCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q05UUEhBU0UgIHxUaW1lciBFeHRlcm5hbCBDb3VudCBQaGFzZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgZGV0ZWN0aW9uIHBoYXNlIG9mIGV4dGVybmFsIGNvdW50aW5nIHBpbiBUTXggKHg9IDB+MykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEgZmFsbGluZyBlZGdlIG9mIGV4dGVybmFsIGNvdW50aW5nIHBpbiB3aWxsIGJlIGNvdW50ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgcmlzaW5nIGVkZ2Ugb2YgZXh0ZXJuYWwgY291bnRpbmcgcGluIHdpbGwgYmUgY291bnRlZC4KKyAgICAgKiB8WzNdICAgICB8Q0FQRU4gICAgIHxUaW1lciBFeHRlcm5hbCBDYXB0dXJlIFBpbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgVE14X0VYVCBjYXB0dXJlIHBpbiBpbnB1dCBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID1UTXhfRVhUICh4PSAwfjMpIHBpbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID1UTXhfRVhUICh4PSAwfjMpIHBpbiBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxDQVBGVU5DUyAgfENhcHR1cmUgRnVuY3Rpb24gU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEV4dGVybmFsIENhcHR1cmUgTW9kZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBFeHRlcm5hbCBSZXNldCBNb2RlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdoZW4gQ0FQRlVOQ1MgaXMgMCwgdHJhbnNpdGlvbiBvbiBUTXhfRVhUICh4PSAwfjMpIHBpbiBpcyB1c2luZyB0byBzYXZlIGN1cnJlbnQgMjQtYml0IHRpbWVyIGNvdW50ZXIgdmFsdWUgKENOVCB2YWx1ZSkgdG8gQ0FQREFUIGZpZWxkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBXaGVuIENBUEZVTkNTIGlzIDEsIHRyYW5zaXRpb24gb24gVE14X0VYVCAoeD0gMH4zKSBwaW4gaXMgdXNpbmcgdG8gc2F2ZSBjdXJyZW50IDI0LWJpdCB0aW1lciBjb3VudGVyIHZhbHVlIChDTlQgdmFsdWUpIHRvIENBUERBVCBmaWVsZCB0aGVuIENOVCB2YWx1ZSB3aWxsIGJlIHJlc2V0IGltbWVkaWF0ZWx5LgorICAgICAqIHxbNV0gICAgIHxDQVBJRU4gICAgfFRpbWVyIEV4dGVybmFsIENhcHR1cmUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVE14X0VYVCAoeD0gMH4zKSBwaW4gZGV0ZWN0aW9uIEludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVE14X0VYVCAoeD0gMH4zKSBwaW4gZGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IENBUElFTiBpcyB1c2VkIHRvIGVuYWJsZSB0aW1lciBleHRlcm5hbCBpbnRlcnJ1cHQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBDQVBJRU4gZW5hYmxlZCwgdGltZXIgd2lsbCByaXNlIGFuIGludGVycnVwdCB3aGVuIENBUElGIChUSU1FUnhfRUlOVFNUU1swXSkgaXMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgZXhhbXBsZSwgd2hpbGUgQ0FQSUVOID0gMSwgQ0FQRU4gPSAxLCBhbmQgQ0FQRURHRSA9IDAwLCBhIDEgdG8gMCB0cmFuc2l0aW9uIG9uIHRoZSBUTXhfRVhUIHBpbiB3aWxsIGNhdXNlIHRoZSBDQVBJRiB0byBiZSBzZXQgdGhlbiB0aGUgaW50ZXJydXB0IHNpZ25hbCBpcyBnZW5lcmF0ZWQgYW5kIHNlbnQgdG8gTlZJQyB0byBpbmZvcm0gQ1BVLgorICAgICAqIHxbNl0gICAgIHxDQVBEQkVOICAgfFRpbWVyIEV4dGVybmFsIENhcHR1cmUgUGluIERlLWJvdW5jZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRNeF9FWFQgKHg9IDB+MykgcGluIGRlLWJvdW5jZSBvciBBQ01QIG91dHB1dCBkZS1ib3VuY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRNeF9FWFQgKHg9IDB+MykgcGluIGRlLWJvdW5jZSBvciBBQ01QIG91dHB1dCBkZS1ib3VuY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiB0aGlzIGJpdCBpcyBlbmFibGVkLCB0aGUgZWRnZSBkZXRlY3Rpb24gb2YgVE14X0VYVCBwaW4gb3IgQUNNUCBvdXRwdXQgaXMgZGV0ZWN0ZWQgd2l0aCBkZS1ib3VuY2UgY2lyY3VpdC4KKyAgICAgKiB8WzddICAgICB8Q05UREJFTiAgIHxUaW1lciBDb3VudGVyIFBpbiBEZS1ib3VuY2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUTXggKHg9IDB+MykgcGluIGRlLWJvdW5jZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVE14ICh4PSAwfjMpIHBpbiBkZS1ib3VuY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiB0aGlzIGJpdCBpcyBlbmFibGVkLCB0aGUgZWRnZSBkZXRlY3Rpb24gb2YgVE14IHBpbiBpcyBkZXRlY3RlZCB3aXRoIGRlLWJvdW5jZSBjaXJjdWl0LgorICAgICAqIHxbOF0gICAgIHxBQ01QU1NFTCAgfEFDTVAgU291cmNlIFNlbGVjdGlvbiB0byBUcmlnZ2VyIENhcHR1cmUgRnVuY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2FwdHVyZSBGdW5jdGlvbiBzb3VyY2UgaXMgZnJvbSBpbnRlcm5hbCBBQ01QMCBvdXRwdXQgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDYXB0dXJlIEZ1bmN0aW9uIHNvdXJjZSBpcyBmcm9tIGludGVybmFsIEFDTVAxIG91dHB1dCBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogdGhlc2UgYml0cyBvbmx5IGF2YWlsYWJsZSB3aGVuIENBUFNSQyAoVElNRVJ4X0NUTFsyMl0pIGlzIDEuCisgICAgICogfFsxNDoxMl0gfENBUEVER0UgICB8VGltZXIgRXh0ZXJuYWwgQ2FwdHVyZSBQaW4gRWRnZSBEZXRlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGZpcnN0IGNhcHR1cmUgZXZlbnQgaXMgZ2VuZXJhdGVkLCB0aGUgQ05UIChUSU1FUnhfQ05UWzIzOjBdKSB3aWxsIGJlIHJlc2V0IHRvIDAgYW5kIGZpcnN0IENBUERBVCAoVElNRVJ4X0NBUFsyMzowXSkgc2hvdWxkIGJlIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gQ2FwdHVyZSBldmVudCBvY2N1cnJlZCB3aGVuIGRldGVjdCBmYWxsaW5nIGVkZ2UgdHJhbnNmZXIgb24gVE14X0VYVCAoeD0gMH4zKSBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gQ2FwdHVyZSBldmVudCBvY2N1cnJlZCB3aGVuIGRldGVjdCByaXNpbmcgZWRnZSB0cmFuc2ZlciBvbiBUTXhfRVhUICh4PSAwfjMpIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBDYXB0dXJlIGV2ZW50IG9jY3VycmVkIHdoZW4gZGV0ZWN0IGJvdGggZmFsbGluZyBhbmQgcmlzaW5nIGVkZ2UgdHJhbnNmZXIgb24gVE14X0VYVCAoeD0gMH4zKSBwaW4sIGFuZCBmaXJzdCBjYXB0dXJlIGV2ZW50IG9jY3VycmVkIGF0IGZhbGxpbmcgZWRnZSB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBDYXB0dXJlIGV2ZW50IG9jY3VycmVkIHdoZW4gZGV0ZWN0IGJvdGggcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2UgdHJhbnNmZXIgb24gVE14X0VYVCAoeD0gMH4zKSBwaW4sIGFuZCBmaXJzdCBjYXB0dXJlIGV2ZW50IG9jY3VycmVkIGF0IHJpc2luZyBlZGdlIHRyYW5zZmVyLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBGaXJzdCBjYXB0dXJlIGV2ZW50IG9jY3VycmVkIGF0IGZhbGxpbmcgZWRnZSwgZm9sbG93cyBjYXB0dXJlIGV2ZW50cyBhcmUgYXQgcmlzaW5nIGVkZ2UgdHJhbnNmZXIgb24gVE14X0VYVCAoeD0gMH4zKSBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gRmlyc3QgY2FwdHVyZSBldmVudCBvY2N1cnJlZCBhdCByaXNpbmcgZWRnZSwgZm9sbG93cyBjYXB0dXJlIGV2ZW50cyBhcmUgYXQgZmFsbGluZyBlZGdlIHRyYW5zZmVyIG9uIFRNeF9FWFQgKHg9IDB+MykgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCwgMTAxID0gUmVzZXJ2ZWQuCisgICAgICogfFsxNl0gICAgfEVDTlRTU0VMICB8RXZlbnQgQ291bnRlciBTb3VyY2UgU2VsZWN0aW9uIHRvIFRyaWdnZXIgRXZlbnQgQ291bnRlciBGdW5jdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBFdmVudCBDb3VudGVyIGlucHV0IHNvdXJjZSBpcyBmcm9tIFRNeCAoeD0gMH4zKSBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV2ZW50IENvdW50ZXIgaW5wdXQgc291cmNlIGlzIGZyb20gVVNCIGludGVybmFsIFNPRiBvdXRwdXQgc2lnbmFsLgorICAgICAqIEB2YXIgVElNRVJfVDo6RUlOVFNUUworICAgICAqIE9mZnNldDogMHgxOCAgVGltZXIgRXh0ZXJuYWwgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENBUElGICAgICB8VGltZXIgRXh0ZXJuYWwgQ2FwdHVyZSBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgdGltZXIgZXh0ZXJuYWwgY2FwdHVyZSBpbnRlcnJ1cHQgZmxhZyBzdGF0dXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRNeF9FWFQgKHg9IDB+MykgcGluIGludGVycnVwdCBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUTXhfRVhUICh4PSAwfjMpIHBpbiBpbnRlcnJ1cHQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBXaGVuIENBUEVOIChUSU1FUnhfRVhUQ1RMWzNdKSBiaXQgaXMgc2V0LCBDQVBGVU5DUyAoVElNRVJ4X0VYVENUTFs0XSkgYml0IGlzIDAsIGFuZCBhIHRyYW5zaXRpb24gb24gVE14X0VYVCAoeD0gMH4zKSBwaW4gbWF0Y2hlZCB0aGUgQ0FQRURHRSAoVElNRVJ4X0VYVENUTFsyOjFdKSBzZXR0aW5nLCB0aGlzIGJpdCB3aWxsIHNldCB0byAxIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBUaGVyZSBpcyBhIG5ldyBpbmNvbWluZyBjYXB0dXJlIGV2ZW50IGRldGVjdGVkIGJlZm9yZSBDUFUgY2xlYXJpbmcgdGhlIENBUElGIHN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBhYm92ZSBjb25kaXRpb24gb2NjdXJyZWQsIHRoZSBUaW1lciB3aWxsIGtlZXAgcmVnaXN0ZXIgVElNRVJ4X0NBUCB1bmNoYW5nZWQgYW5kIGRyb3AgdGhlIG5ldyBjYXB0dXJlIHZhbHVlLgorICAgICAqIEB2YXIgVElNRVJfVDo6VFJHQ1RMCisgICAgICogT2Zmc2V0OiAweDFDICBUaW1lciBUcmlnZ2VyIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxUUkdTU0VMICAgfFRyaWdnZXIgU291cmNlIFNlbGVjdCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIHNlbGVjdCBpbnRlcm5hbCB0cmlnZ2VyIHNvdXJjZSBpcyBmb3JtIHRpbWVyIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgb3IgY2FwdHVyZSBpbnRlcnJ1cHQgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lLW91dCBpbnRlcnJ1cHQgc2lnbmFsIGlzIHVzZWQgdG8gaW50ZXJuYWwgdHJpZ2dlciBQV00sIFBETUEsIERBQywgYW5kIEVBREMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENhcHR1cmUgaW50ZXJydXB0IHNpZ25hbCBpcyB1c2VkIHRvIGludGVybmFsIHRyaWdnZXIgUFdNLCBQRE1BLCBEQUMsIGFuZCBFQURDLgorICAgICAqIHxbMV0gICAgIHxUUkdFUFdNICAgfFRyaWdnZXIgUFdNIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgZWFjaCB0aW1lciB0aW1lLW91dCBldmVudCBvciBjYXB0dXJlIGV2ZW50IGNhbiBiZSBhcyBQV00gY291bnRlciBjbG9jayBzb3VyY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyIGludGVycnVwdCB0cmlnZ2VyIFBXTSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIgaW50ZXJydXB0IHRyaWdnZXIgUFdNIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgVFJHU1NFTCAoVElNRVJ4X1RSR0NUTFswXSkgPSAwLCB0aW1lLW91dCBpbnRlcnJ1cHQgc2lnbmFsIGFzIFBXTSBjb3VudGVyIGNsb2NrIHNvdXJjZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBUUkdTU0VMIChUSU1FUnhfVFJHQ1RMWzBdKSA9IDEsIGNhcHR1cmUgaW50ZXJydXB0IHNpZ25hbCBhcyBQV00gY291bnRlciBjbG9jayBzb3VyY2UuCisgICAgICogfFsyXSAgICAgfFRSR0VBREMgICB8VHJpZ2dlciBFQURDIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgZWFjaCB0aW1lciB0aW1lLW91dCBldmVudCBvciBjYXB0dXJlIGV2ZW50IGNhbiBiZSB0cmlnZ2VyZWQgRUFEQyBjb252ZXJzaW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lciBpbnRlcnJ1cHQgdHJpZ2dlciBFQURDIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lciBpbnRlcnJ1cHQgdHJpZ2dlciBFQURDIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgVFJHU1NFTCAoVElNRVJ4X1RSR0NUTFswXSkgPSAwLCB0aW1lLW91dCBpbnRlcnJ1cHQgc2lnbmFsIHdpbGwgdHJpZ2dlciBFQURDIGNvbnZlcnNpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgVFJHU1NFTCAoVElNRVJ4X1RSR0NUTFswXSkgPSAxLCBjYXB0dXJlIGludGVycnVwdCBzaWduYWwgd2lsbCB0cmlnZ2VyIEFEQyBjb252ZXJzaW9uLgorICAgICAqIHxbM10gICAgIHxUUkdEQUMgICAgfFRyaWdnZXIgREFDIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdGltZXIgdGltZS1vdXQgaW50ZXJydXB0IG9yIGNhcHR1cmUgaW50ZXJydXB0IGNhbiBiZSB0cmlnZ2VyZWQgREFDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lciBpbnRlcnJ1cHQgdHJpZ2dlciBEQUMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWVyIGludGVycnVwdCB0cmlnZ2VyIERBQyBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFRSR1NTRUwgKFRJTUVSeF9UUkdDVExbMF0pID0gMCwgdGltZS1vdXQgaW50ZXJydXB0IHNpZ25hbCB3aWxsIHRyaWdnZXIgREFDLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFRSR1NTRUwgKFRJTUVSeF9UUkdDVExbMF0pID0gMSwgY2FwdHVyZSBpbnRlcnJ1cHQgc2lnbmFsIHdpbGwgdHJpZ2dlciBEQUMuCisgICAgICogfFs0XSAgICAgfFRSR1BETUEgICB8VHJpZ2dlciBQRE1BIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgZWFjaCB0aW1lciB0aW1lLW91dCBldmVudCBvciBjYXB0dXJlIGV2ZW50IGNhbiBiZSB0cmlnZ2VyZWQgUERNQSB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZXIgaW50ZXJydXB0IHRyaWdnZXIgUERNQSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIgaW50ZXJydXB0IHRyaWdnZXIgUERNQSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFRSR1NTRUwgKFRJTUVSeF9UUkdDVExbMF0pID0gMCwgdGltZS1vdXQgaW50ZXJydXB0IHNpZ25hbCB3aWxsIHRyaWdnZXIgUERNQSB0cmFuc2Zlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBUUkdTU0VMIChUSU1FUnhfVFJHQ1RMWzBdKSA9IDEsIGNhcHR1cmUgaW50ZXJydXB0IHNpZ25hbCB3aWxsIHRyaWdnZXIgUERNQSB0cmFuc2Zlci4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OkFMVENUTAorICAgICAqIE9mZnNldDogMHgyMCAgVGltZXIgQWx0ZXJuYXRpdmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEZVTkNTRUwgICB8RnVuY3Rpb24gU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWVyIGNvbnRyb2xsZXIgaXMgdXNlZCBhcyB0aW1lciBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZXIgY29udHJvbGxlciBpcyB1c2VkIGFzIFBXTSBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRpbWVyIGlzIHVzZWQgYXMgUFdNLCB0aGUgY2xvY2sgc291cmNlIG9mIHRpbWUgY29udHJvbGxlciB3aWxsIGJlIGZvcmNlZCB0byBQQ0xLeCBhdXRvbWF0aWNhbGx5LgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNQ1RMCisgICAgICogT2Zmc2V0OiAweDQwICBUaW1lciBQV00gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENOVEVOICAgICB8UFdNIENvdW50ZXIgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV00gY291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGUgU3RvcCBSdW5uaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV00gY291bnRlciBhbmQgY2xvY2sgcHJlc2NhbGUgU3RhcnQgUnVubmluZy4KKyAgICAgKiB8WzI6MV0gICB8Q05UVFlQRSAgIHxQV00gQ291bnRlciBCZWhhdmlvciBUeXBlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBVcCBjb3VudCB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gRG93biBjb3VudCB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVXAtZG93biBjb3VudCB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUmVzZXJ2ZWQuCisgICAgICogfFszXSAgICAgfENOVE1PREUgICB8UFdNIENvdW50ZXIgTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLXJlbG9hZCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPbmUtc2hvdCBtb2RlLgorICAgICAqIHxbOF0gICAgIHxDVFJMRCAgICAgfENlbnRlciBSZS1sb2FkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gdXAtZG93biBjb3VudCB0eXBlLCBQRVJJT0Qgd2lsbCBsb2FkIHRvIFBCVUYgd2hlbiBjdXJyZW50IFBXTSBwZXJpb2QgaXMgY29tcGxldGVkIGFsd2F5cyBhbmQgQ01QIHdpbGwgbG9hZCB0byBDTVBCVUYgYXQgdGhlIGNlbnRlciBwb2ludCBvZiBjdXJyZW50IHBlcmlvZC4KKyAgICAgKiB8WzldICAgICB8SU1NTERFTiAgIHxJbW1lZGlhdGVseSBMb2FkIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVSSU9EIHdpbGwgbG9hZCB0byBQQlVGIHdoZW4gY3VycmVudCBQV00gcGVyaW9kIGlzIGNvbXBsZXRlZCBubyBtYXR0ZXIgQ1RSTEQgaXMgZW5hYmxlZC9kaXNhYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIENUUkxEIGlzIGRpc2FibGVkLCBDTVAgd2lsbCBsb2FkIHRvIENNUEJVRiB3aGVuIGN1cnJlbnQgUFdNIHBlcmlvZCBpcyBjb21wbGV0ZWQ7IGlmIENUUkxEIGlzIGVuYWJsZWQgaW4gdXAtZG93biBjb3VudCB0eXBlLCBDTVAgd2lsbCBsb2FkIHRvIENNUEJVRiBhdCB0aGUgY2VudGVyIHBvaW50IG9mIGN1cnJlbnQgcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRVJJT0QvQ01QIHdpbGwgbG9hZCB0byBQQlVGL0NNUEJVRiBpbW1lZGlhdGVseSB3aGVuIHVzZXIgdXBkYXRlIFBFUklPRC9DTVAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgSU1NTERFTiBpcyBlbmFibGVkLCBDVFJMRCB3aWxsIGJlIGludmFsaWQuCisgICAgICogfFsxNl0gICAgfE9VVE1PREUgICB8UFdNIE91dHB1dCBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY29udHJvbHMgdGhlIG91dHB1dCBtb2RlIG9mIGNvcnJlc3BvbmRpbmcgUFdNIGNoYW5uZWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTSBpbmRlcGVuZGVudCBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV00gY29tcGxlbWVudGFyeSBtb2RlLgorICAgICAqIHxbMzBdICAgIHxEQkdIQUxUICAgfElDRSBEZWJ1ZyBNb2RlIENvdW50ZXIgSGFsdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBkZWJ1ZyBtb2RlIGNvdW50ZXIgaGFsdCBpcyBlbmFibGVkLCBQV00gY291bnRlciB3aWxsIGtlZXAgY3VycmVudCB2YWx1ZSB1bnRpbCBleGl0IElDRSBkZWJ1ZyBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJQ0UgZGVidWcgbW9kZSBjb3VudGVyIGhhbHQgZGlzYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSUNFIGRlYnVnIG1vZGUgY291bnRlciBoYWx0IGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzMxXSAgICB8REJHVFJJT0ZGIHxJQ0UgRGVidWcgTW9kZSBBY2tub3dsZWRnZSBEaXNhYmxlIEJpdCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSUNFIGRlYnVnIG1vZGUgYWNrbm93bGVkZ21lbnQgZWZmZWN0cyBQV00gb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBXTSBvdXRwdXQgcGluIHdpbGwgYmUgZm9yY2VkIGFzIHRyaS1zdGF0ZSB3aGlsZSBJQ0UgZGVidWcgbW9kZSBhY2tub3dsZWRnZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdtZW50IGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBXTSBvdXRwdXQgcGluIHdpbGwga2VlcCBvdXRwdXQgbm8gbWF0dGVyIElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdlZCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01DTEtTUkMKKyAgICAgKiBPZmZzZXQ6IDB4NDQgIFRpbWVyIFBXTSBDb3VudGVyIENsb2NrIFNvdXJjZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyOjBdICAgfENMS1NSQyAgICB8UFdNIENvdW50ZXIgQ2xvY2sgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBQV00gY291bnRlciBjbG9jayBzb3VyY2UgY2FuIGJlIHNlbGVjdGVkIGZyb20gVE1SeF9DTEsgb3IgaW50ZXJuYWwgdGltZXIgdGltZS1vdXQgb3IgY2FwdHVyZSBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBUTVJ4X0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBJbnRlcm5hbCBUSU1FUjAgdGltZS1vdXQgb3IgY2FwdHVyZSBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAgPSBJbnRlcm5hbCBUSU1FUjEgdGltZS1vdXQgb3IgY2FwdHVyZSBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBJbnRlcm5hbCBUSU1FUjIgdGltZS1vdXQgb3IgY2FwdHVyZSBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAgPSBJbnRlcm5hbCBUSU1FUjMgdGltZS1vdXQgb3IgY2FwdHVyZSBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBUaW1lciBQV00gZnVuY3Rpb24gaXMgZW5hYmxlZCwgdGhlIFBXTSBjb3VudGVyIGNsb2NrIHNvdXJjZSBjYW4gYmUgc2VsZWN0ZWQgZnJvbSBUTVIwX0NMSywgVElNRVIxIGludGVycnVwdCBldmVudHMsIFRJTUVSMiBpbnRlcnJ1cHQgZXZlbnRzLCBvciBUSU1FUjMgaW50ZXJydXB0IGV2ZW50cy4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUNMS1BTQworICAgICAqIE9mZnNldDogMHg0OCAgVGltZXIgUFdNIENvdW50ZXIgQ2xvY2sgUHJlLXNjYWxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzExOjBdICB8Q0xLUFNDICAgIHxQV00gQ291bnRlciBDbG9jayBQcmUtc2NhbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgYWN0aXZlIGNsb2NrIG9mIFBXTSBjb3VudGVyIGlzIGRlY2lkZWQgYnkgY291bnRlciBjbG9jayBwcmVzY2FsZSBhbmQgZGl2aWRlZCBieSAoQ0xLUFNDICsgMSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBDTEtQU0MgaXMgMCwgdGhlbiB0aGVyZSBpcyBubyBzY2FsaW5nIGluIFBXTSBjb3VudGVyIGNsb2NrIHNvdXJjZS4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUNOVENMUgorICAgICAqIE9mZnNldDogMHg0QyAgVGltZXIgUFdNIENsZWFyIENvdW50ZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDTlRDTFIgICAgfENsZWFyIFBXTSBDb3VudGVyIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIDE2LWJpdCBQV00gY291bnRlciB0byAweDEwMDAwIGluIHVwIGFuZCB1cC1kb3duIGNvdW50IHR5cGUgYW5kIHJlc2V0IGNvdW50ZXIgdmFsdWUgdG8gUEVSSU9EIGluIGRvd24gY291bnQgdHlwZS4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTVBFUklPRAorICAgICAqIE9mZnNldDogMHg1MCAgVGltZXIgUFdNIFBlcmlvZCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfFBFUklPRCAgICB8UFdNIFBlcmlvZCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwIGNvdW50IHR5cGU6IFBXTSBjb3VudGVyIGNvdW50cyBmcm9tIDAgdG8gUEVSSU9ELCBhbmQgcmVzdGFydHMgZnJvbSAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIGRvd24gY291bnQgdHlwZTogUFdNIGNvdW50ZXIgY291bnRzIGZyb20gUEVSSU9EIHRvIDAsIGFuZCByZXN0YXJ0cyBmcm9tIFBFUklPRC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cC1kb3duIGNvdW50IHR5cGU6IFBXTSBjb3VudGVyIGNvdW50cyBmcm9tIDAgdG8gUEVSSU9ELCB0aGVuIGRlY3JlbWVudHMgdG8gMCBhbmQgcmVwZWF0cyBhZ2Fpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiB1cCBhbmQgZG93biBjb3VudCB0eXBlOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBXTSBwZXJpb2QgdGltZSA9IChQRVJJT0QgKyAxKSAqIChDTEtQU0MgKyAxKSAqIFRNUnhfUFdNQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIHVwLWRvd24gY291bnQgdHlwZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQV00gcGVyaW9kIHRpbWUgPSAyICogUEVSSU9EICogKENMS1BTQysgMSkgKiBUTVJ4X1BXTUNMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBVc2VyIHNob3VsZCB0YWtlIGNhcmUgRElSRiAoVElNRVJ4X1BXTUNOVFsxNl0pIGJpdCBpbiB1cC9kb3duL3VwLWRvd24gY291bnQgdHlwZSB0byBtb25pdG9yIGN1cnJlbnQgY291bnRlciBkaXJlY3Rpb24gaW4gZWFjaCBjb3VudCB0eXBlLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNQ01QREFUCisgICAgICogT2Zmc2V0OiAweDU0ICBUaW1lciBQV00gQ29tcGFyYXRvciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxNTowXSAgfENNUCAgICAgICB8UFdNIENvbXBhcmF0b3IgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQV00gQ01QIGlzIHVzZWQgdG8gY29tcGFyZSB3aXRoIFBXTSBDTlQgdG8gZ2VuZXJhdGUgUFdNIG91dHB1dCB3YXZlZm9ybSwgaW50ZXJydXB0IGV2ZW50cyBhbmQgdHJpZ2dlciBBREMgdG8gc3RhcnQgY29udmVydC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTURUQ1RMCisgICAgICogT2Zmc2V0OiAweDU4ICBUaW1lciBQV00gRGVhZC1UaW1lIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTE6MF0gIHxEVENOVCAgICAgfERlYWQtdGltZSBDb3VudGVyIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWFkLXRpbWUgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIHR3byBmb3JtdWxhczoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZWFkLXRpbWUgPSAoRFRDTlRbMTE6MF0gKyAxKSAqIFRNUnhfUFdNQ0xLLCBpZiBEVENLU0VMIGlzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGVhZC10aW1lID0gKERUQ05UWzExOjBdICsgMSkgKiBUTVJ4X1BXTUNMSyAqIChDTEtQU0MgKyAxKSwgaWYgRFRDS1NFTCBpcyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTZdICAgIHxEVEVOICAgICAgfEVuYWJsZSBEZWFkLXRpbWUgSW5zZXJ0aW9uIGZvciBQV014X0NIMCBhbmQgUFdNeF9DSDEgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGVhZC10aW1lIGluc2VydGlvbiBmdW5jdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIFBXTSBjb21wbGVtZW50YXJ5IG1vZGUgaXMgZW5hYmxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIGRlYWQtIHRpbWUgaW5zZXJ0aW9uIGlzIGluYWN0aXZlLCB0aGUgb3V0cHV0cyBvZiBQV014X0NIMCBhbmQgUFdNeF9DSDEgYXJlIGNvbXBsZW1lbnRhcnkgd2l0aG91dCBhbnkgZGVsYXkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERlYWQtdGltZSBpbnNlcnRpb24gRGlzYWJsZWQgb24gdGhlIHBpbiBwYWlyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBEZWFkLXRpbWUgaW5zZXJ0aW9uIEVuYWJsZWQgb24gdGhlIHBpbiBwYWlyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMjRdICAgIHxEVENLU0VMICAgfERlYWQtdGltZSBDbG9jayBTZWxlY3QgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERlYWQtdGltZSBjbG9jayBzb3VyY2UgZnJvbSBUTVJ4X1BXTUNMSyB3aXRob3V0IGNvdW50ZXIgY2xvY2sgcHJlc2NhbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERlYWQtdGltZSBjbG9jayBzb3VyY2UgZnJvbSBUTVJ4X1BXTUNMSyB3aXRoIGNvdW50ZXIgY2xvY2sgcHJlc2NhbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01DTlQKKyAgICAgKiBPZmZzZXQ6IDB4NUMgIFRpbWVyIFBXTSBDb3VudGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8Q05UICAgICAgIHxQV00gQ291bnRlciBWYWx1ZSBSZWdpc3RlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgY2FuIG1vbml0b3IgQ05UIHRvIGtub3cgdGhlIGN1cnJlbnQgY291bnRlciB2YWx1ZSBpbiAxNi1iaXQgcGVyaW9kIGNvdW50ZXIuCisgICAgICogfFsxNl0gICAgfERJUkYgICAgICB8UFdNIENvdW50ZXIgRGlyZWN0aW9uIEluZGljYXRvciBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvdW50ZXIgaXMgYWN0aXZlIGluIGRvd24gY291bnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvdW50ZXIgaXMgYWN0aXZlIHVwIGNvdW50LgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNTVNLRU4KKyAgICAgKiBPZmZzZXQ6IDB4NjAgIFRpbWVyIFBXTSBPdXRwdXQgTWFzayBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxNU0tFTjAgICAgfFBXTXhfQ0gwIE91dHB1dCBNYXNrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUFdNeF9DSDAgb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUFdNeF9DSDAgd2lsbCBvdXRwdXQgTVNLREFUMCAoVElNRVJfUFdNTVNLWzBdKSBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMCBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gwIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUMCBkYXRhLgorICAgICAqIHxbMV0gICAgIHxNU0tFTjEgICAgfFBXTXhfQ0gxIE91dHB1dCBNYXNrIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUFdNeF9DSDEgb3V0cHV0IHNpZ25hbCB3aWxsIGJlIG1hc2tlZCB3aGVuIHRoaXMgYml0IGlzIGVuYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgUFdNeF9DSDEgd2lsbCBvdXRwdXQgTVNLREFUMSAoVElNRVJfUFdNTVNLWzFdKSBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMSBvdXRwdXQgc2lnbmFsIGlzIG5vbi1tYXNrZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gxIG91dHB1dCBzaWduYWwgaXMgbWFza2VkIGFuZCBvdXRwdXQgTVNLREFUMSBkYXRhLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNTVNLCisgICAgICogT2Zmc2V0OiAweDY0ICBUaW1lciBQV00gT3V0cHV0IE1hc2sgRGF0YSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TVNLREFUMCAgIHxQV014X0NIMCBPdXRwdXQgTWFzayBEYXRhIENvbnRyb2wgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBjb250cm9sIHRoZSBvdXRwdXQgc3RhdGUgb2YgUFdNeF9DSDAgcGluIHdoZW4gUFdNeF9DSDAgb3V0cHV0IG1hc2sgZnVuY3Rpb24gaXMgZW5hYmxlZCAoTVNLRU4wID0gMSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE91dHB1dCBsb2dpYyBMb3cgdG8gUFdNeF9DSDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE91dHB1dCBsb2dpYyBIaWdoIHRvIFBXTXhfQ0gwLgorICAgICAqIHxbMV0gICAgIHxNU0tEQVQxICAgfFBXTXhfQ0gxIE91dHB1dCBNYXNrIERhdGEgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIG91dHB1dCBzdGF0ZSBvZiBQV014X0NIMSBwaW4gd2hlbiBQV014X0NIMSBvdXRwdXQgbWFzayBmdW5jdGlvbiBpcyBlbmFibGVkIChNU0tFTjEgPSAxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT3V0cHV0IGxvZ2ljIExvdyB0byBQV014X0NIMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gT3V0cHV0IGxvZ2ljIEhpZ2ggdG8gUFdNeF9DSDEuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01CTkYKKyAgICAgKiBPZmZzZXQ6IDB4NjggIFRpbWVyIFBXTSBCcmFrZSBQaW4gTm9pc2UgRmlsdGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlJLTkZFTiAgIHxCcmFrZSBQaW4gTm9pc2UgRmlsdGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGluIG5vaXNlIGZpbHRlciBkZXRlY3Qgb2YgUFdNeF9CUkFLRXkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBpbiBub2lzZSBmaWx0ZXIgZGV0ZWN0IG9mIFBXTXhfQlJBS0V5IEVuYWJsZWQuCisgICAgICogfFszOjFdICAgfEJSS05GU0VMICB8QnJha2UgUGluIE5vaXNlIEZpbHRlciBDbG9jayBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBOb2lzZSBmaWx0ZXIgY2xvY2sgaXMgUENMS3guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gTm9pc2UgZmlsdGVyIGNsb2NrIGlzIFBDTEt4LzIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gTm9pc2UgZmlsdGVyIGNsb2NrIGlzIFBDTEt4LzQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExID0gTm9pc2UgZmlsdGVyIGNsb2NrIGlzIFBDTEt4LzguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gTm9pc2UgZmlsdGVyIGNsb2NrIGlzIFBDTEt4LzE2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMSA9IE5vaXNlIGZpbHRlciBjbG9jayBpcyBQQ0xLeC8zMi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAgPSBOb2lzZSBmaWx0ZXIgY2xvY2sgaXMgUENMS3gvNjQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gTm9pc2UgZmlsdGVyIGNsb2NrIGlzIFBDTEt4LzEyOC4KKyAgICAgKiB8WzY6NF0gICB8QlJLRkNOVCAgIHxCcmFrZSBQaW4gTm9pc2UgRmlsdGVyIENvdW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZpZWxkcyBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIGFjdGl2ZSBub2lzZSBmaWx0ZXIgc2FtcGxlIHRpbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T25jZSBub2lzZSBmaWx0ZXIgc2FtcGxlIHRpbWUgPSAoUGVyaW9kIHRpbWUgb2YgQlJLREJDUykgKiBCUktGQ05ULgorICAgICAqIHxbN10gICAgIHxCUktQSU5WICAgfEJyYWtlIFBpbiBEZXRlY3Rpb24gQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJha2UgcGluIGV2ZW50IHdpbGwgYmUgZGV0ZWN0ZWQgaWYgUFdNeF9CUkFLRXkgcGluIHN0YXR1cyB0cmFuc2ZlciBmcm9tIGxvdyB0byBoaWdoIGluIGVkZ2UtZGV0ZWN0LCBvciBwaW4gc3RhdHVzIGlzIGhpZ2ggaW4gbGV2ZWwtZGV0ZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmFrZSBwaW4gZXZlbnQgd2lsbCBiZSBkZXRlY3RlZCBpZiBQV014X0JSQUtFeSBwaW4gc3RhdHVzIHRyYW5zZmVyIGZyb20gaGlnaCB0byBsb3cgaW4gZWRnZS1kZXRlY3QsIG9yIHBpbiBzdGF0dXMgaXMgbG93IGluIGxldmVsLWRldGVjdCAuCisgICAgICogfFsxNzoxNl0gfEJLUElOU1JDICB8QnJha2UgUGluIFNvdXJjZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IEJyYWtlIHBpbiBzb3VyY2UgY29tZXMgZnJvbSBQV00wX0JSQUtFMCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBCcmFrZSBwaW4gc291cmNlIGNvbWVzIGZyb20gUFdNMF9CUkFLRTEgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gQnJha2UgcGluIHNvdXJjZSBjb21lcyBmcm9tIFBXTTFfQlJBS0UwIHBpbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJyYWtlIHBpbiBzb3VyY2UgY29tZXMgZnJvbSBQV00xX0JSQUtFMSBwaW4uCisgICAgICogQHZhciBUSU1FUl9UOjpQV01GQUlMQlJLCisgICAgICogT2Zmc2V0OiAweDZDICBUaW1lciBQV00gU3lzdGVtIEZhaWwgQnJha2UgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENTU0JSS0VOICB8Q2xvY2sgU2VjdXJpdHkgU3lzdGVtIERldGVjdGlvbiBUcmlnZ2VyIFBXTSBCcmFrZSBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBjbG9jayBmYWlsIGRldGVjdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IGNsb2NrIGZhaWwgZGV0ZWN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfEJPREJSS0VOICB8QnJvd24tb3V0IERldGVjdGlvbiBUcmlnZ2VyIFBXTSBCcmFrZSBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBCT0QgZXZlbnQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyYWtlIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSBCT0QgZXZlbnQgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UkFNQlJLRU4gIHxTUkFNIFBhcml0eSBFcnJvciBEZXRlY3Rpb24gVHJpZ2dlciBQV00gQnJha2UgRnVuY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgU1JBTSBwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgU1JBTSBwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfENPUkJSS0VOICB8Q29yZSBMb2NrdXAgRGV0ZWN0aW9uIFRyaWdnZXIgUFdNIEJyYWtlIEZ1bmN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJha2UgRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IGNvcmUgbG9ja3VwIGV2ZW50IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmFrZSBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgY29yZSBsb2NrdXAgZXZlbnQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUJSS0NUTAorICAgICAqIE9mZnNldDogMHg3MCAgVGltZXIgUFdNIEJyYWtlIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDUE8wRUJFTiAgfEVuYWJsZSBJbnRlcm5hbCBBQ01QMF9PIERpZ2l0YWwgT3V0cHV0IEFzIEVkZ2UtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJuYWwgQUNNUDBfTyBzaWduYWwgYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcm5hbCBBQ01QMF9PIHNpZ25hbCBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogT25seSBpbnRlcm5hbCBBQ01QMF9PIHNpZ25hbCBmcm9tIGxvdyB0byBoaWdoIHdpbGwgYmUgZGV0ZWN0ZWQgYXMgYnJha2UgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMV0gICAgIHxDUE8xRUJFTiAgfEVuYWJsZSBJbnRlcm5hbCBBQ01QMV9PIERpZ2l0YWwgT3V0cHV0IEFzIEVkZ2UtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJuYWwgQUNNUDFfTyBzaWduYWwgYXMgZWRnZS1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcm5hbCBBQ01QMV9PIHNpZ25hbCBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogT25seSBpbnRlcm5hbCBBQ01QMV9PIHNpZ25hbCBmcm9tIGxvdyB0byBoaWdoIHdpbGwgYmUgZGV0ZWN0ZWQgYXMgYnJha2UgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbNF0gICAgIHxCUktQRUVOICAgfEVuYWJsZSBUTV9CUkFLRXggUGluIEFzIEVkZ2UtZGV0ZWN0IEJyYWtlIFNvdXJjZSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9CUkFLRXkgcGluIGV2ZW50IGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9CUkFLRXkgcGluIGV2ZW50IGFzIGVkZ2UtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbN10gICAgIHxTWVNFQkVOICAgfEVuYWJsZSBTeXN0ZW0gRmFpbCBBcyBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN5c3RlbSBmYWlsIGNvbmRpdGlvbiBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN5c3RlbSBmYWlsIGNvbmRpdGlvbiBhcyBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8Q1BPMExCRU4gIHxFbmFibGUgSW50ZXJuYWwgQUNNUDBfTyBEaWdpdGFsIE91dHB1dCBBcyBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcm5hbCBBQ01QMF9PIHNpZ25hbCBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcm5hbCBBQ01QMF9PIHNpZ25hbCBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IE9ubHkgaW50ZXJuYWwgQUNNUDBfTyBzaWduYWwgZnJvbSBsb3cgdG8gaGlnaCB3aWxsIGJlIGRldGVjdGVkIGFzIGJyYWtlIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzldICAgICB8Q1BPMUxCRU4gIHxFbmFibGUgSW50ZXJuYWwgQUNNUDFfTyBEaWdpdGFsIE91dHB1dCBBcyBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcm5hbCBBQ01QMV9PIHNpZ25hbCBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcm5hbCBBQ01QMV9PIHNpZ25hbCBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IE9ubHkgaW50ZXJuYWwgQUNNUDFfTyBzaWduYWwgZnJvbSBsb3cgdG8gaGlnaCB3aWxsIGJlIGRldGVjdGVkIGFzIGJyYWtlIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTJdICAgIHxCUktQTEVOICAgfEVuYWJsZSBUTV9CUkFLRXggUGluIEFzIExldmVsLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQlJBS0V5IHBpbiBldmVudCBhcyBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV014X0JSQUtFeSBwaW4gZXZlbnQgYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbMTVdICAgIHxTWVNMQkVOICAgfEVuYWJsZSBTeXN0ZW0gRmFpbCBBcyBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTeXN0ZW0gZmFpbCBjb25kaXRpb24gYXMgbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3lzdGVtIGZhaWwgY29uZGl0aW9uIGFzIGxldmVsLWRldGVjdCBicmFrZSBzb3VyY2UgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE3OjE2XSB8QlJLQUVWRU4gIHxQV00gQnJha2UgQWN0aW9uIFNlbGVjdCBmb3IgUFdNeF9DSDAgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQV014X0JSQUtFeSBicmFrZSBldmVudCB3aWxsIG5vdCBhZmZlY3QgUFdNeF9DSDAgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUFdNeF9DSDAgb3V0cHV0IHRyaS1zdGF0ZSB3aGVuIFBXTXhfQlJBS0V5IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUFdNeF9DSDAgb3V0cHV0IGxvdyBsZXZlbCB3aGVuIFBXTXhfQlJBS0V5IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUFdNeF9DSDAgb3V0cHV0IGhpZ2ggbGV2ZWwgd2hlbiBQV014X0JSQUtFeSBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzE5OjE4XSB8QlJLQU9ERCAgIHxQV00gQnJha2UgQWN0aW9uIFNlbGVjdCBmb3IgUFdNeF9DSDEgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBQV014X0JSQUtFeSBicmFrZSBldmVudCB3aWxsIG5vdCBhZmZlY3QgUFdNeF9DSDEgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gUFdNeF9DSDEgb3V0cHV0IHRyaS1zdGF0ZSB3aGVuIFBXTXhfQlJBS0V5IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gUFdNeF9DSDEgb3V0cHV0IGxvdyBsZXZlbCB3aGVuIFBXTXhfQlJBS0V5IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUFdNeF9DSDEgb3V0cHV0IGhpZ2ggbGV2ZWwgd2hlbiBQV014X0JSQUtFeSBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTVBPTENUTAorICAgICAqIE9mZnNldDogMHg3NCAgVGltZXIgUFdNIFBpbiBPdXRwdXQgUG9sYXIgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFBJTlYwICAgICB8UFdNeF9DSDAgT3V0cHV0IFBpbiBQb2xhciBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXQgaXMgdXNlZCB0byBjb250cm9sIHBvbGFyaXR5IHN0YXRlIG9mIFBXTXhfQ0gwIG91dHB1dCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQ0gwIG91dHB1dCBwaW4gcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9DSDAgb3V0cHV0IHBpbiBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFBJTlYxICAgICB8UFdNeF9DSDEgT3V0cHV0IFBpbiBQb2xhciBDb250cm9sIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBiaXQgaXMgdXNlZCB0byBjb250cm9sIHBvbGFyaXR5IHN0YXRlIG9mIFBXTXhfQ0gxIG91dHB1dCBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQ0gxIG91dHB1dCBwaW4gcG9sYXIgaW52ZXJzZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9DSDEgb3V0cHV0IHBpbiBwb2xhciBpbnZlcnNlIEVuYWJsZWQuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01QT0VOCisgICAgICogT2Zmc2V0OiAweDc4ICBUaW1lciBQV00gUGluIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQT0VOMCAgICAgfFBXTXhfQ0gwIE91dHB1dCBQaW4gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMCBwaW4gYXQgdHJpLXN0YXRlIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gwIHBpbiBpbiBvdXRwdXQgbW9kZS4KKyAgICAgKiB8WzFdICAgICB8UE9FTjEgICAgIHxQV014X0NIMSBPdXRwdXQgUGluIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDEgcGluIGF0IHRyaS1zdGF0ZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV014X0NIMSBwaW4gaW4gb3V0cHV0IG1vZGUuCisgICAgICogQHZhciBUSU1FUl9UOjpQV01TV0JSSworICAgICAqIE9mZnNldDogMHg3QyAgVGltZXIgUFdNIFNvZnR3YXJlIFRyaWdnZXIgQnJha2UgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJSS0VUUkcgICB8U29mdHdhcmUgVHJpZ2dlciBFZGdlLWRldGVjdCBCcmFrZSBTb3VyY2UgKFdyaXRlIE9ubHkpIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gdGhpcyBiaXQgd2lsbCB0cmlnZ2VyIFBXTSBlZGdlLWRldGVjdCBicmFrZSBzb3VyY2UsIHRoZW4gQlJLRUlGMCBhbmQgQlJLRUlGMSB3aWxsIHNldCB0byAxIGF1dG9tYXRpY2FsbHkgaW4gVElNRVJ4X1BXTUlOVFNUUzEgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs4XSAgICAgfEJSS0xUUkcgICB8U29mdHdhcmUgVHJpZ2dlciBMZXZlbC1kZXRlY3QgQnJha2UgU291cmNlIChXcml0ZSBPbmx5KSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSAxIHRvIHRoaXMgYml0IHdpbGwgdHJpZ2dlciBQV00gbGV2ZWwtZGV0ZWN0IGJyYWtlIHNvdXJjZSwgdGhlbiBCUktMSUYwIGFuZCBCUktMSUYxIHdpbGwgc2V0IHRvIDEgYXV0b21hdGljYWxseSBpbiBUSU1FUnhfUFdNSU5UU1RTMSByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUlOVEVOMAorICAgICAqIE9mZnNldDogMHg4MCAgVGltZXIgUFdNIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFpJRU4gICAgICB8UFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gWmVybyBwb2ludCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFplcm8gcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFBJRU4gICAgICB8UFdNIFBlcmlvZCBQb2ludCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQZXJpb2QgcG9pbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBpbiB1cC1kb3duIGNvdW50IHR5cGUsIHBlcmlvZCBwb2ludCBtZWFucyB0aGUgY2VudGVyIHBvaW50IG9mIGN1cnJlbnQgUFdNIHBlcmlvZC4KKyAgICAgKiB8WzJdICAgICB8Q01QVUlFTiAgIHxQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb21wYXJlIHVwIGNvdW50IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29tcGFyZSB1cCBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8Q01QRElFTiAgIHxQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbXBhcmUgZG93biBjb3VudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUlOVEVOMQorICAgICAqIE9mZnNldDogMHg4NCAgVGltZXIgUFdNIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgMQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEJSS0VJRU4gICB8UFdNIEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTSBlZGdlLWRldGVjdCBicmFrZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTSBlZGdlLWRldGVjdCBicmFrZSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8QlJLTElFTiAgIHxQV00gTGV2ZWwtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBFbmFibGUgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTSBsZXZlbC1kZXRlY3QgYnJha2UgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV00gbGV2ZWwtZGV0ZWN0IGJyYWtlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNSU5UU1RTMAorICAgICAqIE9mZnNldDogMHg4OCAgVGltZXIgUFdNIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFpJRiAgICAgICB8UFdNIFplcm8gUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBUSU1FUnhfUFdNIGNvdW50ZXIgcmVhY2hlcyB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMV0gICAgIHxQSUYgICAgICAgfFBXTSBQZXJpb2QgUG9pbnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBUSU1FUnhfUFdNIGNvdW50ZXIgcmVhY2hlcyBQRVJJT0QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFdoZW4gaW4gdXAtZG93biBjb3VudCB0eXBlLCBQSUYgZmxhZyBtZWFucyB0aGUgY2VudGVyIHBvaW50IGZsYWcgb2YgY3VycmVudCBQV00gcGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzJdICAgICB8Q01QVUlGICAgIHxQV00gQ29tcGFyZSBVcCBDb3VudCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIFRJTUVSeF9QV00gY291bnRlciBpbiB1cCBjb3VudCBkaXJlY3Rpb24gYW5kIHJlYWNoZXMgQ01QLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBDTVAgZXF1YWwgdG8gUEVSSU9ELCB0aGVyZSBpcyBubyBDTVBVSUYgZmxhZyBpbiB1cCBjb3VudCB0eXBlIGFuZCB1cC1kb3duIGNvdW50IHR5cGUuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzNdICAgICB8Q01QRElGICAgIHxQV00gQ29tcGFyZSBEb3duIENvdW50IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gVElNRVJ4X1BXTSBjb3VudGVyIGluIGRvd24gY291bnQgZGlyZWN0aW9uIGFuZCByZWFjaGVzIENNUC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgQ01QIGVxdWFsIHRvIFBFUklPRCwgdGhlcmUgaXMgbm8gQ01QRElGIGZsYWcgaW4gZG93biBjb3VudCB0eXBlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTUlOVFNUUzEKKyAgICAgKiBPZmZzZXQ6IDB4OEMgIFRpbWVyIFBXTSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCUktFSUYwICAgfEVkZ2UtZGV0ZWN0IEJyYWtlIEludGVycnVwdCBGbGFnIG9uIFBXTXhfQ0gwIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMCBlZGdlLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gwIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxXSAgICAgfEJSS0VJRjEgICB8RWRnZS1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEZsYWcgUFdNeF9DSDEgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQ0gxIGVkZ2UtZGV0ZWN0IGJyYWtlIGV2ZW50IGRvIG5vdCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9DSDEgZWRnZS1kZXRlY3QgYnJha2UgZXZlbnQgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG9TWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzhdICAgICB8QlJLTElGMCAgIHxMZXZlbC1kZXRlY3QgQnJha2UgSW50ZXJydXB0IEZsYWcgb24gUFdNeF9DSDAgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTXhfQ0gwIGxldmVsLWRldGVjdCBicmFrZSBldmVudCBkbyBub3QgaGFwcGVuZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBXTXhfQ0gwIGxldmVsLWRldGVjdCBicmFrZSBldmVudCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0b1NZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHxbOV0gICAgIHxCUktMSUYxICAgfExldmVsLWRldGVjdCBCcmFrZSBJbnRlcnJ1cHQgRmxhZyBvbiBQV014X0NIMSAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDEgbGV2ZWwtZGV0ZWN0IGJyYWtlIGV2ZW50IGRvIG5vdCBoYXBwZW5lZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9DSDEgbGV2ZWwtZGV0ZWN0IGJyYWtlIGV2ZW50IGhhcHBlbmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyByZWdpc3RlciBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFsxNl0gICAgfEJSS0VTVFMwICB8RWRnZSAtZGV0ZWN0IEJyYWtlIFN0YXR1cyBvZiBQV014X0NIMCAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMCBlZGdlLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9DSDAgYXQgZWRnZS1kZXRlY3QgYnJha2Ugc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVXNlciBjYW4gc2V0IEJSS0VJRjAgMSB0byBjbGVhciBCUktFSUYwIGZsYWcgYW5kIFBXTXhfQ0gwIHdpbGwgcmVsZWFzZSBicmFrZSBzdGF0ZSB3aGVuIGN1cnJlbnQgUFdNIHBlcmlvZCBmaW5pc2hlZCBhbmQgcmVzdW1lIFBXTXhfQ0gwIG91dHB1dCB3YXZlZm9ybSBzdGFydCBmcm9tIG5leHQgZnVsbCBQV00gcGVyaW9kLgorICAgICAqIHxbMTddICAgIHxCUktFU1RTMSAgfEVkZ2UtZGV0ZWN0IEJyYWtlIFN0YXR1cyBvZiBQV014X0NIMSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQV014X0NIMSBlZGdlLWRldGVjdCBicmFrZSBzdGF0ZSBpcyByZWxlYXNlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNeF9DSDEgYXQgZWRnZS1kZXRlY3QgYnJha2Ugc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVXNlciBjYW4gc2V0IEJSS0VJRjEgMSB0byBjbGVhciBCUktFSUYxIGZsYWcgYW5kIFBXTXhfQ0gxIHdpbGwgcmVsZWFzZSBicmFrZSBzdGF0ZSB3aGVuIGN1cnJlbnQgUFdNIHBlcmlvZCBmaW5pc2hlZCBhbmQgcmVzdW1lIFBXTXhfQ0gxIG91dHB1dCB3YXZlZm9ybSBzdGFydCBmcm9tIG5leHQgZnVsbCBQV00gcGVyaW9kLgorICAgICAqIHxbMjRdICAgIHxCUktMU1RTMCAgfExldmVsLWRldGVjdCBCcmFrZSBTdGF0dXMgb2YgUFdNeF9DSDAgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDAgbGV2ZWwtZGV0ZWN0IGJyYWtlIHN0YXRlIGlzIHJlbGVhc2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV014X0NIMCBhdCBsZXZlbC1kZXRlY3QgYnJha2Ugc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgVElNRVJ4X1BXTSBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIGhhcyByZWxlYXNlZCwgYm90aCBQV014X0NIMCBhbmQgUFdNeF9DSDEgd2lsbCByZWxlYXNlIGJyYWtlIHN0YXRlIHdoZW4gY3VycmVudCBQV00gcGVyaW9kIGZpbmlzaGVkIGFuZCByZXN1bWUgUFdNeF9DSDAgYW5kIFBXTXhfQ0gxIG91dHB1dCB3YXZlZm9ybSBzdGFydCBmcm9tIG5leHQgZnVsbCBQV00gcGVyaW9kLgorICAgICAqIHxbMjVdICAgIHxCUktMU1RTMSAgfExldmVsLWRldGVjdCBCcmFrZSBTdGF0dXMgb2YgUFdNeF9DSDEgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUFdNeF9DSDEgbGV2ZWwtZGV0ZWN0IGJyYWtlIHN0YXRlIGlzIHJlbGVhc2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV014X0NIMSBhdCBsZXZlbC1kZXRlY3QgYnJha2Ugc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSWYgVElNRVJ4X1BXTSBsZXZlbC1kZXRlY3QgYnJha2Ugc291cmNlIGhhcyByZWxlYXNlZCwgYm90aCBQV014X0NIMCBhbmQgUFdNeF9DSDEgd2lsbCByZWxlYXNlIGJyYWtlIHN0YXRlIHdoZW4gY3VycmVudCBQV00gcGVyaW9kIGZpbmlzaGVkIGFuZCByZXN1bWUgUFdNeF9DSDAgYW5kIFBXTXhfQ0gxIG91dHB1dCB3YXZlZm9ybSBzdGFydCBmcm9tIG5leHQgZnVsbCBQV00gcGVyaW9kLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNRUFEQ1RTCisgICAgICogT2Zmc2V0OiAweDkwICBUaW1lciBQV00gQURDIFRyaWdnZXIgU291cmNlIFNlbGVjdCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyOjBdICAgfFRSR1NFTCAgICB8UFdNIENvdW50ZXIgRXZlbnQgU291cmNlIFNlbGVjdCB0byBUcmlnZ2VyIEVBREMgQ29udmVyc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IFRyaWdnZXIgRUFEQyBjb252ZXJzaW9uIGF0IHplcm8gcG9pbnQgKFpJRikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxID0gVHJpZ2dlciBFQURDIGNvbnZlcnNpb24gYXQgcGVyaW9kIHBvaW50IChQSUYpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFRyaWdnZXIgRUFEQyBjb252ZXJzaW9uIGF0IHplcm8gb3IgcGVyaW9kIHBvaW50IChaSUYgb3IgUElGKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEgPSBUcmlnZ2VyIEVBREMgY29udmVyc2lvbiBhdCBjb21wYXJlIHVwIGNvdW50IHBvaW50IChDTVBVSUYpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRyaWdnZXIgRUFEQyBjb252ZXJzaW9uIGF0IGNvbXBhcmUgZG93biBjb3VudCBwb2ludCAoQ01QRElGKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzddICAgICB8VFJHRU4gICAgIHxQV00gQ291bnRlciBFdmVudCBUcmlnZ2VyIEVBREMgQ29udmVyc2lvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTSBjb3VudGVyIGV2ZW50IHRyaWdnZXIgRUFEQyBjb252ZXJzaW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQV00gY291bnRlciBldmVudCB0cmlnZ2VyIEVBREMgY29udmVyc2lvbiBFbmFibGVkLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNU0NUTAorICAgICAqIE9mZnNldDogMHg5NCAgVGltZXIgUFdNIFN5bmNocm9ub3VzIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTowXSAgIHxTWU5DTU9ERSAgfFBXTSBTeW5jaHJvbm91cyBNb2RlIEVuYWJsZSBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFBXTSBzeW5jaHJvbm91cyBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFBXTSBzeW5jaHJvbm91cyBjb3VudGVyIHN0YXJ0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFBXTSBzeW5jaHJvbm91cyBjb3VudGVyIGNsZWFyIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfFNZTkNTUkMgICB8UFdNIFN5bmNocm9ub3VzIENvdW50ZXIgU3RhcnQvQ2xlYXIgU291cmNlIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDb3VudGVyIHN5bmNocm9ub3VzIHN0YXJ0L2NsZWFyIGJ5IHRyaWdnZXIgVElNRVIwX1BXTVNUUkcgU1RSR0VOLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb3VudGVyIHN5bmNocm9ub3VzIHN0YXJ0L2NsZWFyIGJ5IHRyaWdnZXIgVElNRVIyX1BXTVNUUkcgU1RSR0VOLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBUSU1FUjAvMS8yLzMgUFdNIGNvdW50ZXIgc3luY2hyb25vdXMgc291cmNlIGFyZSBmcm9tIFRJTUVSMCwgVElNRVIwX1BXTVNDVExbOF0sIFRJTUVSMV9QV01TQ1RMWzhdLCBUSU1FUjJfUFdNU0NUTFs4XSBhbmQgVElNRVIzX1BXTVNDVExbOF0gc2hvdWxkIGJlIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IElmIFRJTUVSMC8xLyBQV00gY291bnRlciBzeW5jaHJvbm91cyBzb3VyY2UgYXJlIGZyb20gVElNRVIwLCBUSU1FUjBfUFdNU0NUTFs4XSBhbmQgVElNRVIxX1BXTVNDVExbOF0gc2hvdWxkIGJlIHNldCAwLCBhbmQgVElNRVIyLzMvIFBXTSBjb3VudGVyIHN5bmNocm9ub3VzIHNvdXJjZSBhcmUgZnJvbSBUSU1FUjIsIFRJTUUyX1BXTVNDVExbOF0gYW5kIFRJTUVSM19QV01TQ1RMWzhdIHNob3VsZCBiZSBzZXQgMS4KKyAgICAgKiBAdmFyIFRJTUVSX1Q6OlBXTVNUUkcKKyAgICAgKiBPZmZzZXQ6IDB4OTggIFRpbWVyIFBXTSBTeW5jaHJvbm91cyBUcmlnZ2VyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1RSR0VOICAgIHxQV00gQ291bnRlciBTeW5jaHJvbm91cyBUcmlnZ2VyIEVuYWJsZSBCaXQgKFdyaXRlIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UE1XIGNvdW50ZXIgc3luY2hyb25vdXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYWtlIHNlbGVjdGVkIFBXTSBjaGFubmVscyAoaW5jbHVkZSBUSU1FUjAvMS8yLzMgUFdNLCBUSU1FUjAvMSBQV00gYW5kIFRJTUVSMi8zIFBXTSkgc3RhcnQgY291bnRpbmcgb3IgY2xlYXIgY291bnRlciBhdCB0aGUgc2FtZSB0aW1lIGFjY29yZGluZyB0byBUSU1FUnhfUFdNU0NUTCBzZXR0aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgYXZhaWxhYmxlIGluIFRJTUVSMCBhbmQgVElNRVIyLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNU1RBVFVTCisgICAgICogT2Zmc2V0OiAweDlDICBUaW1lciBQV00gU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q05UTUFYRiAgIHxQV00gQ291bnRlciBFcXVhbCB0byAweEZGRkYgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbmRpY2F0ZXMgdGhlIFBXTSBjb3VudGVyIHZhbHVlIG5ldmVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUgMHhGRkZGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpY2F0ZXMgdGhlIFBXTSBjb3VudGVyIHZhbHVlIGhhcyByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMTZdICAgIHxFQURDVFJHRiAgIHxUcmlnZ2VyIEVBREMgU3RhcnQgQ29udmVyc2lvbiBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBXTSBjb3VudGVyIGV2ZW50IHRyaWdnZXIgRUFEQyBzdGFydCBjb252ZXJzaW9uIGlzIG5vdCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUFdNIGNvdW50ZXIgZXZlbnQgdHJpZ2dlciBFQURDIHN0YXJ0IGNvbnZlcnNpb24gaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNUEJVRgorICAgICAqIE9mZnNldDogMHhBMCAgVGltZXIgUFdNIFBlcmlvZCBCdWZmZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxQQlVGICAgICAgfFBXTSBQZXJpb2QgQnVmZmVyIFJlZ2lzdGVyIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlZCBhcyBQRVJJT0QgYWN0aXZlIHJlZ2lzdGVyLgorICAgICAqIEB2YXIgVElNRVJfVDo6UFdNQ01QQlVGCisgICAgICogT2Zmc2V0OiAweEE0ICBUaW1lciBQV00gQ29tcGFyYXRvciBCdWZmZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxDTVBCVUYgICAgfFBXTSBDb21wYXJhdG9yIEJ1ZmZlciBSZWdpc3RlciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZWQgYXMgQ01QIGFjdGl2ZSByZWdpc3Rlci4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBUaW1lciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENNUDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBUaW1lciBDb21wYXJhdG9yIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVFNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBUaW1lciBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENOVDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBUaW1lciBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IENBUDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBUaW1lciBDYXB0dXJlIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVYVENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBUaW1lciBFeHRlcm5hbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEVJTlRTVFM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDE4XSBUaW1lciBFeHRlcm5hbCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRSR0NUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDFjXSBUaW1lciBUcmlnZ2VyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFMVENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBUaW1lciBBbHRlcm5hdGl2ZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzddOworICAgIF9fSU8gdWludDMyX3QgUFdNQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNDBdIFRpbWVyIFBXTSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNQ0xLU1JDOyAgICAgICAgICAgICAvKiE8IFsweDAwNDRdIFRpbWVyIFBXTSBDb3VudGVyIENsb2NrIFNvdXJjZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNQ0xLUFNDOyAgICAgICAgICAgICAvKiE8IFsweDAwNDhdIFRpbWVyIFBXTSBDb3VudGVyIENsb2NrIFByZS1zY2FsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNQ05UQ0xSOyAgICAgICAgICAgICAvKiE8IFsweDAwNGNdIFRpbWVyIFBXTSBDbGVhciBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNUEVSSU9EOyAgICAgICAgICAgICAvKiE8IFsweDAwNTBdIFRpbWVyIFBXTSBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNQ01QREFUOyAgICAgICAgICAgICAvKiE8IFsweDAwNTRdIFRpbWVyIFBXTSBDb21wYXJhdG9yIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNRFRDVEw7ICAgICAgICAgICAgICAvKiE8IFsweDAwNThdIFRpbWVyIFBXTSBEZWFkLVRpbWUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUFdNQ05UOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNWNdIFRpbWVyIFBXTSBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNTVNLRU47ICAgICAgICAgICAgICAvKiE8IFsweDAwNjBdIFRpbWVyIFBXTSBPdXRwdXQgTWFzayBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNTVNLOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNjRdIFRpbWVyIFBXTSBPdXRwdXQgTWFzayBEYXRhIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNQk5GOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwNjhdIFRpbWVyIFBXTSBCcmFrZSBQaW4gTm9pc2UgRmlsdGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNRkFJTEJSSzsgICAgICAgICAgICAvKiE8IFsweDAwNmNdIFRpbWVyIFBXTSBTeXN0ZW0gRmFpbCBCcmFrZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNQlJLQ1RMOyAgICAgICAgICAgICAvKiE8IFsweDAwNzBdIFRpbWVyIFBXTSBCcmFrZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNUE9MQ1RMOyAgICAgICAgICAgICAvKiE8IFsweDAwNzRdIFRpbWVyIFBXTSBQaW4gT3V0cHV0IFBvbGFyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNUE9FTjsgICAgICAgICAgICAgICAvKiE8IFsweDAwNzhdIFRpbWVyIFBXTSBQaW4gT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgUFdNU1dCUks7ICAgICAgICAgICAgICAvKiE8IFsweDAwN2NdIFRpbWVyIFBXTSBTb2Z0d2FyZSBUcmlnZ2VyIEJyYWtlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNSU5URU4wOyAgICAgICAgICAgICAvKiE8IFsweDAwODBdIFRpbWVyIFBXTSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNSU5URU4xOyAgICAgICAgICAgICAvKiE8IFsweDAwODRdIFRpbWVyIFBXTSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNSU5UU1RTMDsgICAgICAgICAgICAvKiE8IFsweDAwODhdIFRpbWVyIFBXTSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNSU5UU1RTMTsgICAgICAgICAgICAvKiE8IFsweDAwOGNdIFRpbWVyIFBXTSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNRUFEQ1RTOyAgICAgICAgICAgICAvKiE8IFsweDAwOTBdIFRpbWVyIFBXTSBBREMgVHJpZ2dlciBTb3VyY2UgU2VsZWN0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNU0NUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwOTRdIFRpbWVyIFBXTSBTeW5jaHJvbm91cyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgUFdNU1RSRzsgICAgICAgICAgICAgICAvKiE8IFsweDAwOThdIFRpbWVyIFBXTSBTeW5jaHJvbm91cyBUcmlnZ2VyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFdNU1RBVFVTOyAgICAgICAgICAgICAvKiE8IFsweDAwOWNdIFRpbWVyIFBXTSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUFdNUEJVRjsgICAgICAgICAgICAgICAvKiE8IFsweDAwYTBdIFRpbWVyIFBXTSBQZXJpb2QgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUFdNQ01QQlVGOyAgICAgICAgICAgICAvKiE8IFsweDAwYTRdIFRpbWVyIFBXTSBDb21wYXJhdG9yIEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFRJTUVSX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFRJTUVSX0NPTlNUIFRJTUVSIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFRJTUVSIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgVElNRVJfQ1RMX1BTQ19Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogUFNDIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NUTF9QU0NfTXNrICAgICAgICAgICAgICAgICgweGZmdWwgPDwgVElNRVJfQ1RMX1BTQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IFBTQyBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NUTF9JTlRSR0VOX1BvcyAgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IElOVFJHRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DVExfSU5UUkdFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfQ1RMX0lOVFJHRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBJTlRSR0VOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DVExfUEVSSU9TRUxfUG9zICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBQRVJJT1NFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ1RMX1BFUklPU0VMX01zayAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0NUTF9QRVJJT1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogUEVSSU9TRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ1RMX1RHTFBJTlNFTF9Qb3MgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogVEdMUElOU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NUTF9UR0xQSU5TRUxfTXNrICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9DVExfVEdMUElOU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IFRHTFBJTlNFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NUTF9DQVBTUkNfUG9zICAgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IENBUFNSQyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DVExfQ0FQU1JDX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfQ1RMX0NBUFNSQ19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBDQVBTUkMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DVExfV0tFTl9Qb3MgICAgICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ1RMX1dLRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0NUTF9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogV0tFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ1RMX0VYVENOVEVOX1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogRVhUQ05URU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NUTF9FWFRDTlRFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9DVExfRVhUQ05URU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IEVYVENOVEVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NUTF9BQ1RTVFNfUG9zICAgICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IEFDVFNUUyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DVExfQUNUU1RTX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfQ1RMX0FDVFNUU19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBBQ1RTVFMgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DVExfT1BNT0RFX1BvcyAgICAgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBPUE1PREUgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ1RMX09QTU9ERV9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IFRJTUVSX0NUTF9PUE1PREVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogT1BNT0RFIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ1RMX0lOVEVOX1BvcyAgICAgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogSU5URU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NUTF9JTlRFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9DVExfSU5URU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IElOVEVOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NUTF9DTlRFTl9Qb3MgICAgICAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDVEw6IENOVEVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DVExfQ05URU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfQ1RMX0NOVEVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBDTlRFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DVExfSUNFREVCVUdfUG9zICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q1RMOiBJQ0VERUJVRyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ1RMX0lDRURFQlVHX01zayAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0NUTF9JQ0VERUJVR19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNUTDogSUNFREVCVUcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ01QX0NNUERBVF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNNUDogQ01QREFUIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NNUF9DTVBEQVRfTXNrICAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IFRJTUVSX0NNUF9DTVBEQVRfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDTVA6IENNUERBVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0lOVFNUU19USUZfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpJTlRTVFM6IFRJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBUSU1FUl9JTlRTVFNfVElGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfSU5UU1RTX1RJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6SU5UU1RTOiBUSUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9JTlRTVFNfVFdLRl9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6SU5UU1RTOiBUV0tGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfSU5UU1RTX1RXS0ZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0lOVFNUU19UV0tGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OklOVFNUUzogVFdLRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQ05UX0NOVF9Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNOVDogQ05UIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX0NOVF9DTlRfTXNrICAgICAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IFRJTUVSX0NOVF9DTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDTlQ6IENOVCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0NOVF9SU1RBQ1RfUG9zICAgICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpDTlQ6IFJTVEFDVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBUSU1FUl9DTlRfUlNUQUNUX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfQ05UX1JTVEFDVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q05UOiBSU1RBQ1QgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9DQVBfQ0FQREFUX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6Q0FQOiBDQVBEQVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfQ0FQX0NBUERBVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmZmZmdWwgPDwgVElNRVJfQ0FQX0NBUERBVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkNBUDogQ0FQREFUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0NOVFBIQVNFX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQ05UUEhBU0UgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFRJTUVSX0VYVENUTF9DTlRQSEFTRV9Nc2sgICAgICAgICgweDF1bCA8PCBUSU1FUl9FWFRDVExfQ05UUEhBU0VfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IENOVFBIQVNFIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0VYVENUTF9DQVBFTl9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IENBUEVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBUSU1FUl9FWFRDVExfQ0FQRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfRVhUQ1RMX0NBUEVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDQVBFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9FWFRDVExfQ0FQRlVOQ1NfUG9zICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDQVBGVU5DUyBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0NBUEZVTkNTX01zayAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0VYVENUTF9DQVBGVU5DU19Qb3MpICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQ0FQRlVOQ1MgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0NBUElFTl9Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQ0FQSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFRJTUVSX0VYVENUTF9DQVBJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9FWFRDVExfQ0FQSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IENBUElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0VYVENUTF9DQVBEQkVOX1BvcyAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IENBUERCRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9FWFRDVExfQ0FQREJFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfRVhUQ1RMX0NBUERCRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDQVBEQkVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9FWFRDVExfQ05UREJFTl9Qb3MgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDTlREQkVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0NOVERCRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0VYVENUTF9DTlREQkVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQ05UREJFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0FDTVBTU0VMX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogQUNNUFNTRUwgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFRJTUVSX0VYVENUTF9BQ01QU1NFTF9Nc2sgICAgICAgICgweDF1bCA8PCBUSU1FUl9FWFRDVExfQUNNUFNTRUxfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IEFDTVBTU0VMIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX0VYVENUTF9DQVBFREdFX1BvcyAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFWFRDVEw6IENBUEVER0UgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9FWFRDVExfQ0FQRURHRV9Nc2sgICAgICAgICAoMHg3dWwgPDwgVElNRVJfRVhUQ1RMX0NBUEVER0VfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBDQVBFREdFIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9FWFRDVExfRUNOVFNTRUxfUG9zICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6RVhUQ1RMOiBFQ05UU1NFTCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVElNRVJfRVhUQ1RMX0VDTlRTU0VMX01zayAgICAgICAgKDB4MXVsIDw8IFRJTUVSX0VYVENUTF9FQ05UU1NFTF9Qb3MpICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVYVENUTDogRUNOVFNTRUwgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfRUlOVFNUU19DQVBJRl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkVJTlRTVFM6IENBUElGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFRJTUVSX0VJTlRTVFNfQ0FQSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9FSU5UU1RTX0NBUElGX1BvcykgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpFSU5UU1RTOiBDQVBJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1RSR0NUTF9UUkdTU0VMX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpUUkdDVEw6IFRSR1NTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9UUkdDVExfVFJHU1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfVFJHQ1RMX1RSR1NTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6VFJHQ1RMOiBUUkdTU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9UUkdDVExfVFJHRVBXTV9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6VFJHQ1RMOiBUUkdFUFdNIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfVFJHQ1RMX1RSR0VQV01fTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1RSR0NUTF9UUkdFUFdNX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlRSR0NUTDogVFJHRVBXTSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfVFJHQ1RMX1RSR0VBRENfUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlRSR0NUTDogVFJHRUFEQyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1RSR0NUTF9UUkdFQURDX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9UUkdDVExfVFJHRUFEQ19Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpUUkdDVEw6IFRSR0VBREMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1RSR0NUTF9UUkdEQUNfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpUUkdDVEw6IFRSR0RBQyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBUSU1FUl9UUkdDVExfVFJHREFDX01zayAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfVFJHQ1RMX1RSR0RBQ19Qb3MpICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6VFJHQ1RMOiBUUkdEQUMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9UUkdDVExfVFJHUERNQV9Qb3MgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6VFJHQ1RMOiBUUkdQRE1BIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfVFJHQ1RMX1RSR1BETUFfTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1RSR0NUTF9UUkdQRE1BX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlRSR0NUTDogVFJHUERNQSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfQUxUQ1RMX0ZVTkNTRUxfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OkFMVENUTDogRlVOQ1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX0FMVENUTF9GVU5DU0VMX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9BTFRDVExfRlVOQ1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpBTFRDVEw6IEZVTkNTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9DTlRFTl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IENOVEVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBUSU1FUl9QV01DVExfQ05URU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQ1RMX0NOVEVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBDTlRFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DVExfQ05UVFlQRV9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBDTlRUWVBFIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0NOVFRZUEVfTXNrICAgICAgICAgKDB4M3VsIDw8IFRJTUVSX1BXTUNUTF9DTlRUWVBFX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogQ05UVFlQRSBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0NOVE1PREVfUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogQ05UTU9ERSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9DTlRNT0RFX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01DVExfQ05UTU9ERV9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IENOVE1PREUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9DVFJMRF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IENUUkxEIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBUSU1FUl9QV01DVExfQ1RSTERfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQ1RMX0NUUkxEX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBDVFJMRCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DVExfSU1NTERFTl9Qb3MgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBJTU1MREVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0lNTUxERU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUNUTF9JTU1MREVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogSU1NTERFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQ1RMX09VVE1PREVfUG9zICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogT1VUTU9ERSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9PVVRNT0RFX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01DVExfT1VUTU9ERV9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IE9VVE1PREUgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNUTF9EQkdIQUxUX1BvcyAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DVEw6IERCR0hBTFQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01DVExfREJHSEFMVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQ1RMX0RCR0hBTFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBEQkdIQUxUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DVExfREJHVFJJT0ZGX1BvcyAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ1RMOiBEQkdUUklPRkYgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ1RMX0RCR1RSSU9GRl9Nc2sgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUNUTF9EQkdUUklPRkZfUG9zKSAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNUTDogREJHVFJJT0ZGIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQ0xLU1JDX0NMS1NSQ19Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNMS1NSQzogQ0xLU1JDIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUNMS1NSQ19DTEtTUkNfTXNrICAgICAgICgweDd1bCA8PCBUSU1FUl9QV01DTEtTUkNfQ0xLU1JDX1BvcykgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DTEtTUkM6IENMS1NSQyBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNMS1BTQ19DTEtQU0NfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DTEtQU0M6IENMS1BTQyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBUSU1FUl9QV01DTEtQU0NfQ0xLUFNDX01zayAgICAgICAoMHhmZmZ1bCA8PCBUSU1FUl9QV01DTEtQU0NfQ0xLUFNDX1BvcykgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ0xLUFNDOiBDTEtQU0MgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DTlRDTFJfQ05UQ0xSX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ05UQ0xSOiBDTlRDTFIgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ05UQ0xSX0NOVENMUl9Nc2sgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUNOVENMUl9DTlRDTFJfUG9zKSAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNOVENMUjogQ05UQ0xSIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNUEVSSU9EX1BFUklPRF9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVBFUklPRDogUEVSSU9EIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFRJTUVSX1BXTVBFUklPRF9QRVJJT0RfTXNrICAgICAgICgweGZmZmZ1bCA8PCBUSU1FUl9QV01QRVJJT0RfUEVSSU9EX1BvcykgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QRVJJT0Q6IFBFUklPRCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNNUERBVF9DTVBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DTVBEQVQ6IENNUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBUSU1FUl9QV01DTVBEQVRfQ01QX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgVElNRVJfUFdNQ01QREFUX0NNUF9Qb3MpICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ01QREFUOiBDTVAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01EVENUTF9EVENOVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRFRDVEw6IERUQ05UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNRFRDVExfRFRDTlRfTXNrICAgICAgICAgKDB4ZmZmdWwgPDwgVElNRVJfUFdNRFRDVExfRFRDTlRfUG9zKSAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTURUQ1RMOiBEVENOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNRFRDVExfRFRFTl9Qb3MgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTURUQ1RMOiBEVEVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTURUQ1RMX0RURU5fTXNrICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01EVENUTF9EVEVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01EVENUTDogRFRFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTURUQ1RMX0RUQ0tTRUxfUG9zICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01EVENUTDogRFRDS1NFTCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBUSU1FUl9QV01EVENUTF9EVENLU0VMX01zayAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNRFRDVExfRFRDS1NFTF9Qb3MpICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRFRDVEw6IERUQ0tTRUwgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01DTlRfQ05UX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ05UOiBDTlQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQ05UX0NOVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFRJTUVSX1BXTUNOVF9DTlRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNOVDogQ05UIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQ05UX0RJUkZfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUNOVDogRElSRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUNOVF9ESVJGX01zayAgICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01DTlRfRElSRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DTlQ6IERJUkYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTU1TS0VOX01TS0VOMF9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01NU0tFTjogTVNLRU4wIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBUSU1FUl9QV01NU0tFTl9NU0tFTjBfTXNrICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNTVNLRU5fTVNLRU4wX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNTVNLRU46IE1TS0VOMCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01NU0tFTl9NU0tFTjFfUG9zICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNTVNLRU46IE1TS0VOMSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNTVNLRU5fTVNLRU4xX01zayAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTU1TS0VOX01TS0VOMV9Qb3MpICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTU1TS0VOOiBNU0tFTjEgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNTVNLX01TS0RBVDBfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTU1TSzogTVNLREFUMCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTU1TS19NU0tEQVQwX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01NU0tfTVNLREFUMF9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01NU0s6IE1TS0RBVDAgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTU1TS19NU0tEQVQxX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01NU0s6IE1TS0RBVDEgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01NU0tfTVNLREFUMV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNTVNLX01TS0RBVDFfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNTVNLOiBNU0tEQVQxIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CTkZfQlJLTkZFTl9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQk5GOiBCUktORkVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQk5GX0JSS05GRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUJORl9CUktORkVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJORjogQlJLTkZFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQk5GX0JSS05GU0VMX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJORjogQlJLTkZTRUwgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUJORl9CUktORlNFTF9Nc2sgICAgICAgICgweDd1bCA8PCBUSU1FUl9QV01CTkZfQlJLTkZTRUxfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CTkY6IEJSS05GU0VMIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUJORl9CUktGQ05UX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CTkY6IEJSS0ZDTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01CTkZfQlJLRkNOVF9Nc2sgICAgICAgICAoMHg3dWwgPDwgVElNRVJfUFdNQk5GX0JSS0ZDTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQk5GOiBCUktGQ05UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CTkZfQlJLUElOVl9Qb3MgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQk5GOiBCUktQSU5WIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQk5GX0JSS1BJTlZfTXNrICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUJORl9CUktQSU5WX1BvcykgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJORjogQlJLUElOViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQk5GX0JLUElOU1JDX1BvcyAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJORjogQktQSU5TUkMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUJORl9CS1BJTlNSQ19Nc2sgICAgICAgICgweDN1bCA8PCBUSU1FUl9QV01CTkZfQktQSU5TUkNfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CTkY6IEJLUElOU1JDIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUZBSUxCUktfQ1NTQlJLRU5fUG9zICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01GQUlMQlJLOiBDU1NCUktFTiBQb3NpdGlvbiAqLworI2RlZmluZSBUSU1FUl9QV01GQUlMQlJLX0NTU0JSS0VOX01zayAgICAoMHgxdWwgPDwgVElNRVJfUFdNRkFJTEJSS19DU1NCUktFTl9Qb3MpICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRkFJTEJSSzogQ1NTQlJLRU4gTWFzayAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01GQUlMQlJLX0JPREJSS0VOX1BvcyAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRkFJTEJSSzogQk9EQlJLRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVElNRVJfUFdNRkFJTEJSS19CT0RCUktFTl9Nc2sgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUZBSUxCUktfQk9EQlJLRU5fUG9zKSAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUZBSUxCUks6IEJPREJSS0VOIE1hc2sgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNRkFJTEJSS19SQU1CUktFTl9Qb3MgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUZBSUxCUks6IFJBTUJSS0VOIFBvc2l0aW9uICovCisjZGVmaW5lIFRJTUVSX1BXTUZBSUxCUktfUkFNQlJLRU5fTXNrICAgICgweDF1bCA8PCBUSU1FUl9QV01GQUlMQlJLX1JBTUJSS0VOX1BvcykgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01GQUlMQlJLOiBSQU1CUktFTiBNYXNrICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUZBSUxCUktfQ09SQlJLRU5fUG9zICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01GQUlMQlJLOiBDT1JCUktFTiBQb3NpdGlvbiAqLworI2RlZmluZSBUSU1FUl9QV01GQUlMQlJLX0NPUkJSS0VOX01zayAgICAoMHgxdWwgPDwgVElNRVJfUFdNRkFJTEJSS19DT1JCUktFTl9Qb3MpICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRkFJTEJSSzogQ09SQlJLRU4gTWFzayAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQ1BPMEVCRU5fUG9zICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBDUE8wRUJFTiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0NQTzBFQkVOX01zayAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUJSS0NUTF9DUE8wRUJFTl9Qb3MpICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQ1BPMEVCRU4gTWFzayAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0NQTzFFQkVOX1BvcyAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQ1BPMUVCRU4gUG9zaXRpb24gICovCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9DUE8xRUJFTl9Nc2sgICAgICgweDF1bCA8PCBUSU1FUl9QV01CUktDVExfQ1BPMUVCRU5fUG9zKSAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IENQTzFFQkVOIE1hc2sgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9CUktQRUVOX1BvcyAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IEJSS1BFRU4gUG9zaXRpb24gICAqLworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQlJLUEVFTl9Nc2sgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQlJLQ1RMX0JSS1BFRU5fUG9zKSAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBCUktQRUVOIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CUktDVExfU1lTRUJFTl9Qb3MgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBTWVNFQkVOIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX1NZU0VCRU5fTXNrICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUJSS0NUTF9TWVNFQkVOX1BvcykgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogU1lTRUJFTiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0NQTzBMQkVOX1BvcyAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQ1BPMExCRU4gUG9zaXRpb24gICovCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9DUE8wTEJFTl9Nc2sgICAgICgweDF1bCA8PCBUSU1FUl9QV01CUktDVExfQ1BPMExCRU5fUG9zKSAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IENQTzBMQkVOIE1hc2sgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9DUE8xTEJFTl9Qb3MgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IENQTzFMQkVOIFBvc2l0aW9uICAqLworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQ1BPMUxCRU5fTXNrICAgICAoMHgxdWwgPDwgVElNRVJfUFdNQlJLQ1RMX0NQTzFMQkVOX1BvcykgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBDUE8xTEJFTiBNYXNrICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQlJLUExFTl9Qb3MgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBCUktQTEVOIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0JSS1BMRU5fTXNrICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUJSS0NUTF9CUktQTEVOX1BvcykgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQlJLUExFTiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX1NZU0xCRU5fUG9zICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogU1lTTEJFTiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9TWVNMQkVOX01zayAgICAgICgweDF1bCA8PCBUSU1FUl9QV01CUktDVExfU1lTTEJFTl9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IFNZU0xCRU4gTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUJSS0NUTF9CUktBRVZFTl9Qb3MgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01CUktDVEw6IEJSS0FFVkVOIFBvc2l0aW9uICAqLworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQlJLQUVWRU5fTXNrICAgICAoMHgzdWwgPDwgVElNRVJfUFdNQlJLQ1RMX0JSS0FFVkVOX1BvcykgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBCUktBRVZFTiBNYXNrICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01CUktDVExfQlJLQU9ERF9Qb3MgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQlJLQ1RMOiBCUktBT0REIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNQlJLQ1RMX0JSS0FPRERfTXNrICAgICAgKDB4M3VsIDw8IFRJTUVSX1BXTUJSS0NUTF9CUktBT0REX1BvcykgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUJSS0NUTDogQlJLQU9ERCBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNUE9MQ1RMX1BJTlYwX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVBPTENUTDogUElOVjAgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFRJTUVSX1BXTVBPTENUTF9QSU5WMF9Nc2sgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01QT0xDVExfUElOVjBfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QT0xDVEw6IFBJTlYwIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTVBPTENUTF9QSU5WMV9Qb3MgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QT0xDVEw6IFBJTlYxIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBUSU1FUl9QV01QT0xDVExfUElOVjFfTXNrICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNUE9MQ1RMX1BJTlYxX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNUE9MQ1RMOiBQSU5WMSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01QT0VOX1BPRU4wX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNUE9FTjogUE9FTjAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNUE9FTl9QT0VOMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTVBPRU5fUE9FTjBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVBPRU46IFBPRU4wIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNUE9FTl9QT0VOMV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVBPRU46IFBPRU4xIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTVBPRU5fUE9FTjFfTXNrICAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01QT0VOX1BPRU4xX1BvcykgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QT0VOOiBQT0VOMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTVNXQlJLX0JSS0VUUkdfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01TV0JSSzogQlJLRVRSRyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBUSU1FUl9QV01TV0JSS19CUktFVFJHX01zayAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNU1dCUktfQlJLRVRSR19Qb3MpICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNU1dCUks6IEJSS0VUUkcgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01TV0JSS19CUktMVFJHX1BvcyAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNU1dCUks6IEJSS0xUUkcgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNU1dCUktfQlJLTFRSR19Nc2sgICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTVNXQlJLX0JSS0xUUkdfUG9zKSAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNXQlJLOiBCUktMVFJHIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5URU4wX1pJRU5fUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVEVOMDogWklFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVEVOMF9aSUVOX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRFTjBfWklFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRFTjA6IFpJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVEVOMF9QSUVOX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRFTjA6IFBJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRFTjBfUElFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5URU4wX1BJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5URU4wOiBQSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRFTjBfQ01QVUlFTl9Qb3MgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5URU4wOiBDTVBVSUVOIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5URU4wX0NNUFVJRU5fTXNrICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVEVOMF9DTVBVSUVOX1BvcykgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVEVOMDogQ01QVUlFTiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5URU4wX0NNUERJRU5fUG9zICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVEVOMDogQ01QRElFTiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVEVOMF9DTVBESUVOX01zayAgICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRFTjBfQ01QRElFTl9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRFTjA6IENNUERJRU4gTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVEVOMV9CUktFSUVOX1BvcyAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRFTjE6IEJSS0VJRU4gUG9zaXRpb24gICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRFTjFfQlJLRUlFTl9Nc2sgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5URU4xX0JSS0VJRU5fUG9zKSAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5URU4xOiBCUktFSUVOIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRFTjFfQlJLTElFTl9Qb3MgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5URU4xOiBCUktMSUVOIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5URU4xX0JSS0xJRU5fTXNrICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVEVOMV9CUktMSUVOX1BvcykgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVEVOMTogQlJLTElFTiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMF9aSUZfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzA6IFpJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzBfWklGX01zayAgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRTVFMwX1pJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMwOiBaSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzBfUElGX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMwOiBQSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMwX1BJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5UU1RTMF9QSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMDogUElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMwX0NNUFVJRl9Qb3MgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMDogQ01QVUlGIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMF9DTVBVSUZfTXNrICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVFNUUzBfQ01QVUlGX1BvcykgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzA6IENNUFVJRiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMF9DTVBESUZfUG9zICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzA6IENNUERJRiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzBfQ01QRElGX01zayAgICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRTVFMwX0NNUERJRl9Qb3MpICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMwOiBDTVBESUYgTWFzayAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLRUlGMF9Qb3MgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktFSUYwIFBvc2l0aW9uICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0VJRjBfTXNrICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5UU1RTMV9CUktFSUYwX1BvcykgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLRUlGMCBNYXNrICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0VJRjFfUG9zICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLRUlGMSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktFSUYxX01zayAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVFNUUzFfQlJLRUlGMV9Qb3MpICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0VJRjEgTWFzayAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktMSUYwX1BvcyAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0xJRjAgUG9zaXRpb24gICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLTElGMF9Nc2sgICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRTVFMxX0JSS0xJRjBfUG9zKSAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktMSUYwIE1hc2sgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLTElGMV9Qb3MgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktMSUYxIFBvc2l0aW9uICAqLworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0xJRjFfTXNrICAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5UU1RTMV9CUktMSUYxX1BvcykgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLTElGMSBNYXNrICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0VTVFMwX1BvcyAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLRVNUUzAgUG9zaXRpb24gKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktFU1RTMF9Nc2sgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVFNUUzFfQlJLRVNUUzBfUG9zKSAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0VTVFMwIE1hc2sgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktFU1RTMV9Qb3MgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0VTVFMxIFBvc2l0aW9uICovCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLRVNUUzFfTXNrICAgICgweDF1bCA8PCBUSU1FUl9QV01JTlRTVFMxX0JSS0VTVFMxX1BvcykgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktFU1RTMSBNYXNrICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUlOVFNUUzFfQlJLTFNUUzBfUG9zICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01JTlRTVFMxOiBCUktMU1RTMCBQb3NpdGlvbiAqLworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0xTVFMwX01zayAgICAoMHgxdWwgPDwgVElNRVJfUFdNSU5UU1RTMV9CUktMU1RTMF9Qb3MpICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLTFNUUzAgTWFzayAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01JTlRTVFMxX0JSS0xTVFMxX1BvcyAgICAoMjUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNSU5UU1RTMTogQlJLTFNUUzEgUG9zaXRpb24gKi8KKyNkZWZpbmUgVElNRVJfUFdNSU5UU1RTMV9CUktMU1RTMV9Nc2sgICAgKDB4MXVsIDw8IFRJTUVSX1BXTUlOVFNUUzFfQlJLTFNUUzFfUG9zKSAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUlOVFNUUzE6IEJSS0xTVFMxIE1hc2sgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNRUFEQ1RTX1RSR1NFTF9Qb3MgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTUVBRENUUzogVFJHU0VMIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFRJTUVSX1BXTUVBRENUU19UUkdTRUxfTXNrICAgICAgICgweDd1bCA8PCBUSU1FUl9QV01FQURDVFNfVFJHU0VMX1BvcykgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01FQURDVFM6IFRSR1NFTCBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUVBRENUU19UUkdFTl9Qb3MgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01FQURDVFM6IFRSR0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBUSU1FUl9QV01FQURDVFNfVFJHRU5fTXNrICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNRUFEQ1RTX1RSR0VOX1BvcykgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNRUFEQ1RTOiBUUkdFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01TQ1RMX1NZTkNNT0RFX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNU0NUTDogU1lOQ01PREUgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNU0NUTF9TWU5DTU9ERV9Nc2sgICAgICAgKDB4M3VsIDw8IFRJTUVSX1BXTVNDVExfU1lOQ01PREVfUG9zKSAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNDVEw6IFNZTkNNT0RFIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNU0NUTF9TWU5DU1JDX1BvcyAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNDVEw6IFNZTkNTUkMgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFRJTUVSX1BXTVNDVExfU1lOQ1NSQ19Nc2sgICAgICAgICgweDF1bCA8PCBUSU1FUl9QV01TQ1RMX1NZTkNTUkNfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01TQ1RMOiBTWU5DU1JDIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTVNUUkdfU1RSR0VOX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01TVFJHOiBTVFJHRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBUSU1FUl9QV01TVFJHX1NUUkdFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVElNRVJfUFdNU1RSR19TVFJHRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNU1RSRzogU1RSR0VOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBUSU1FUl9QV01TVEFUVVNfQ05UTUFYRl9Qb3MgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNU1RBVFVTOiBDTlRNQVhGIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVElNRVJfUFdNU1RBVFVTX0NOVE1BWEZfTXNrICAgICAgKDB4MXVsIDw8IFRJTUVSX1BXTVNUQVRVU19DTlRNQVhGX1BvcykgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNUQVRVUzogQ05UTUFYRiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNU1RBVFVTX0VBRENUUkdGX1BvcyAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVNUQVRVUzogRUFEQ1RSR0YgUG9zaXRpb24gICAqLworI2RlZmluZSBUSU1FUl9QV01TVEFUVVNfRUFEQ1RSR0ZfTXNrICAgICAoMHgxdWwgPDwgVElNRVJfUFdNU1RBVFVTX0VBRENUUkdGX1BvcykgICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNU1RBVFVTOiBFQURDVFJHRiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVElNRVJfUFdNUEJVRl9QQlVGX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSX1Q6OlBXTVBCVUY6IFBCVUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFRJTUVSX1BXTVBCVUZfUEJVRl9Nc2sgICAgICAgICAgICgweGZmZmZ1bCA8PCBUSU1FUl9QV01QQlVGX1BCVUZfUG9zKSAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01QQlVGOiBQQlVGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFRJTUVSX1BXTUNNUEJVRl9DTVBCVUZfUG9zICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU1FUl9UOjpQV01DTVBCVUY6IENNUEJVRiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBUSU1FUl9QV01DTVBCVUZfQ01QQlVGX01zayAgICAgICAoMHhmZmZmdWwgPDwgVElNRVJfUFdNQ01QQlVGX0NNUEJVRl9Qb3MpICAgICAgICAgIC8qITwgVElNRVJfVDo6UFdNQ01QQlVGOiBDTVBCVUYgTWFzayAgICAgICAgKi8KKworLyoqQH0qLyAvKiBUSU1FUl9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgVElNRVIgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX1RJTUVSX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS90cm5nX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3RybmdfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwYzA1MgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS90cm5nX3JlZy5oCkBAIC0wLDAgKzEsMTM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdHJuZ19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgVFJORyByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19UUk5HX1JFR19IX18KKyNkZWZpbmUgX19UUk5HX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFRSTkcgVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcihUUk5HKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBUUk5HIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgVFJOR19UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFRSTkcgQ29udHJvbCBSZWdpc3RlciBhbmQgU3RhdHVzCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8VFJOR0VOICAgIHxSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY2FuIGJlIHNldCB0byAxIG9ubHkgYWZ0ZXIgQUNUIChUUk5HX0FDVFs3XSkgYml0IHdhcyBzZXQgdG8gMSBhbmQgUkVBRFkgKFRSTkdfQ1RMWzddKSBiaXQgYmVjYW1lIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRSTkcgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRSTkcgZW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUUk5HRU4gaXMgYW4gZW5hYmxlIGJpdCBvZiBkaWdpdGFsIHBhcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRSTkcgaXMgbm90IHJlcXVpcmVkIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXIsIFRSTkdFTiBiaXQgYW5kIEFDVCAoVFJOR19BQ1RbN10pIGJpdCBzaG91bGQgYmUgc2V0IHRvIDAgdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLgorICAgICAqIHxbMV0gICAgIHxEVklGICAgICAgfERhdGEgVmFsaWQgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSBpcyBub3QgdmFsaWQuIFJlYWRpbmcgZnJvbSBSTkdEIHJldHVybnMgMHgwMDAwMDAwMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSBpcyB2YWxpZC4gQSB2YWxpZCByYW5kb20gbnVtYmVyIGNhbiBiZSByZWFkIGZvcm0gUk5HRC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBjbGVhcmVkIHRvIHUyMDE4MHUyMDE5IGJ5IHJlYWQgVFJOR19EQVRBLgorICAgICAqIHxbNToyXSAgIHxDTEtQICAgICAgfENsb2NrIFByZXNjYWxlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBDTEtQIGlzIHRoZSBwZXJpcGhlcmFsIGNsb2NrIGZyZXF1ZW5jeSByYW5nZSBmb3IgdGhlIHNlbGVjdGVkIHZhbHVlICwgdGhlIENMS1AgbXVzdCBoaWdoZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYWN0dWFsIHBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5IChmb3IgY29ycmVjdCByYW5kb20gYml0IGdlbmVyYXRpb24pCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VG8gY2hhbmdlIHRoZSBDTEtQIGNvbnRlbnRzLCBmaXJzdCBzZXQgVFJOR0VOIGJpdCB0byAwIGFuZCB0aGVuIGNoYW5nZSBDTEtQOyBmaW5hbGx5LCBzZXQgVFJOR0VOIGJpdCB0byAxIHRvIHJlLWVuYWJsZSB0aGUgVFJORyBtb2R1bGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IDgwIH4gMTAwIE1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gNjAgfiA4MCBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IDUwIH42MCBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IDQwIH41MCBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IDMwIH40MCBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IDI1IH4zMCBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IDIwIH4yNSBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IDE1IH4yMCBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMCA9IDEyIH4xNSBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwMSA9IDkgfjEyIE1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEwID0gNyB+OSBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMSA9IDYgfjcgTUh6LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDAgPSA1IH42IE1Iei4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTAxID0gNCB+NSBNSHouCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExMSA9IFJlc2VydmVkLgorICAgICAqIHxbNl0gICAgIHxEVklFTiAgICAgfERhdGEgVmFsaWQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGRpc2FibGVkLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGVuYWJsZWQuCisgICAgICogfFs3XSAgICAgfFJFQURZICAgICB8UmFuZG9tIE51bWJlciBHZW5lcmF0b3IgUmVhZHkgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBZnRlciBBQ1QgKFRSTkdfQUNUWzddKSBiaXQgaXMgc2V0LCB0aGUgUkVBRFkgYml0IGJlY29tZSB0byAxIGFmdGVyIGEgZGVsYXkgb2YgOTB1c34xMjB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUk5HIGlzIG5vdCByZWFkeSBvciB3YXMgbm90IGFjdGl2YXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUk5HIGlzIHJlYWR5IHRvIGJlIGVuYWJsZWQuLgorICAgICAqIHxbMzE6OF0gIHxSZXZlcnNlZCAgfFJldmVyc2VkCisgICAgICogQHZhciBUUk5HX1Q6OkRBVEEKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIFRSTkcgRGF0YSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfERBVEEgICAgICB8UmFuZG9tIE51bWJlciBHZW5lcmF0b3IgRGF0YSAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBEQVRBIHN0b3JlIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRlZCBieSBUUk5HIGFuZCBjYW4gYmUgcmVhZCBvbmx5IG9uY2UuCisgICAgICogQHZhciBUUk5HX1Q6OkFDVAorICAgICAqIE9mZnNldDogMHgwQyAgVFJORyBBY3RpdmF0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzY6MF0gICB8VkVSICAgICAgIHxUUk5HIFZlcnNpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUUk5HIHZlcnNpb24gbnVtYmVyIGlzIGRlcGVuZGVudCBvbiBUUk5HIG1vZHVsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDAyOihDdXJyZW50IFZlcnNpb24gTnVtYmVyKQorICAgICAqIHxbN10gICAgIHxBQ1QgICAgICAgfFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIEFjdGl2YXRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBZnRlciBlbmFibGUgdGhlIEFDVCBiaXQsIGl0IHdpbGwgYWN0aXZlIHRoZSBUUk5HIG1vZHVsZSBhbmQgd2FpdCB0aGUgUkVBRFkgKFRSTkdfQ1RMWzddKSBiaXQgdG8gYmVjb21lIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRSTkcgaW5hY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRSTkcgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEFDVCBpcyBhbiBlbmFibGUgYml0IG9mIGFuYWxvZyBwYXJ0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUUk5HIGlzIG5vdCByZXF1aXJlZCB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyLCBUUk5HRU4gKFRSTkdfQ1RMWzBdKSBiaXQgYW5kIEFDVCBiaXQgc2hvdWxkIGJlIHNldCB0byAwIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBUUk5HIENvbnRyb2wgUmVnaXN0ZXIgYW5kIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBEQVRBOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gVFJORyBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMV07CisgICAgX19JTyB1aW50MzJfdCBBQ1Q7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gVFJORyBBY3RpdmF0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFRSTkdfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgVFJOR19DT05TVCBUUk5HIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFRSTkcgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBUUk5HX0NUTF9UUk5HRU5fUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpDVEw6IFRSTkdFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVFJOR19DVExfVFJOR0VOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFRSTkdfQ1RMX1RSTkdFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6Q1RMOiBUUk5HRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVFJOR19DVExfRFZJRl9Qb3MgICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6Q1RMOiBEVklGIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfQ1RMX0RWSUZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBUUk5HX0NUTF9EVklGX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkNUTDogRFZJRiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRSTkdfQ1RMX0NMS1BfUG9zICAgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkNUTDogQ0xLUCBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX0NUTF9DTEtQX01zayAgICAgICAgICAgICAgICAoMHhmdWwgPDwgVFJOR19DVExfQ0xLUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpDVEw6IENMS1AgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUUk5HX0NUTF9EVklFTl9Qb3MgICAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpDVEw6IERWSUVOIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFJOR19DVExfRFZJRU5fTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFRSTkdfQ1RMX0RWSUVOX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6Q1RMOiBEVklFTiBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVFJOR19DVExfUkVBRFlfUG9zICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6Q1RMOiBSRUFEWSBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfQ1RMX1JFQURZX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBUUk5HX0NUTF9SRUFEWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkNUTDogUkVBRFkgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRSTkdfQ1RMX1JldmVyc2VkX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkNUTDogUmV2ZXJzZWQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBUUk5HX0NUTF9SZXZlcnNlZF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZ1bCA8PCBUUk5HX0NUTF9SZXZlcnNlZF9Qb3MpICAgICAgICAgICAgIC8qITwgVFJOR19UOjpDVEw6IFJldmVyc2VkIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBUUk5HX0RBVEFfREFUQV9Qb3MgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpEQVRBOiBEQVRBIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFJOR19EQVRBX0RBVEFfTXNrICAgICAgICAgICAgICAgKDB4ZmZ1bCA8PCBUUk5HX0RBVEFfREFUQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6REFUQTogREFUQSBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVFJOR19BQ1RfVkVSX1BvcyAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkdfVDo6QUNUOiBWRVIgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfQUNUX1ZFUl9Nc2sgICAgICAgICAgICAgICAgICgweDdmdWwgPDwgVFJOR19BQ1RfVkVSX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkFDVDogVkVSIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRSTkdfQUNUX0FDVF9Qb3MgICAgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUk5HX1Q6OkFDVDogQUNUIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBUUk5HX0FDVF9BQ1RfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgVFJOR19BQ1RfQUNUX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFJOR19UOjpBQ1Q6IEFDVCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBUUk5HX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBUUk5HIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX1RSTkdfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VhcnRfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdWFydF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg0ZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VhcnRfcmVnLmgKQEAgLTAsMCArMSwxMjQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdWFydF9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgVUFSVCByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VQVJUX1JFR19IX18KKyNkZWZpbmUgX19VQVJUX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVbml2ZXJzYWwgQXN5bmNocm9ub3VzIFJlY2VpdmVyL1RyYW5zbWl0dGVyIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBVQVJUIFVuaXZlcnNhbCBBc3luY2hyb25vdXMgUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgQ29udHJvbGxlcihVQVJUKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBVQVJUIENvbnRyb2xsZXIKK0B7ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKworICAgIC8qKgorICAgICAqIEB2YXIgVUFSVF9UOjpEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFVBUlQgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNzowXSAgIHxEQVQgICAgICAgfERhdGEgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Qnkgd3JpdGluZyBvbmUgYnl0ZSB0byB0aGlzIHJlZ2lzdGVyLCB0aGUgZGF0YSBieXRlIHdpbGwgYmUgc3RvcmVkIGluIHRyYW5zbWl0dGVyIEZJRk8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIFVBUlQgY29udHJvbGxlciB3aWxsIHNlbmQgb3V0IHRoZSBkYXRhIHN0b3JlZCBpbiB0cmFuc21pdHRlciBGSUZPIHRvcCBsb2NhdGlvbiB0aHJvdWdoIHRoZSBVQVJUX1RYRC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCeSByZWFkaW5nIHRoaXMgcmVnaXN0ZXIsIHRoZSBVQVJUIGNvbnRyb2xsZXIgd2lsbCByZXR1cm4gYW4gOC1iaXQgZGF0YSByZWNlaXZlZCBmcm9tIHJlY2VpdmVyIEZJRk8uCisgICAgICogfFs4XSAgICAgfFBBUklUWSAgICB8UGFyaXR5IEJpdCBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCeSB3cml0aW5nIHRvIHRoaXMgYml0LCB0aGUgcGFyaXR5IGJpdCB3aWxsIGJlIHN0b3JlZCBpbiB0cmFuc21pdHRlciBGSUZPLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFBCRSAoVUFSVF9MSU5FWzNdKSBhbmQgUFNTIChVQVJUX0xJTkVbN10pIGFyZSBzZXQsIHRoZSBVQVJUIGNvbnRyb2xsZXIgd2lsbCBzZW5kIG91dCB0aGlzIGJpdCBmb2xsb3cgdGhlIERBVCAoVUFSVF9EQVRbNzowXSkgdGhyb3VnaCB0aGUgVUFSVF9UWEQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgUEJFIChVQVJUX0xJTkVbM10pIGFuZCBQU1MgKFVBUlRfTElORVs3XSkgYXJlIGVuYWJsZWQsIHRoZSBwYXJpdHkgYml0IGNhbiBiZSByZWFkIGJ5IHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGhhcyBlZmZlY3Qgb25seSB3aGVuIFBCRSAoVUFSVF9MSU5FWzNdKSBhbmQgUFNTIChVQVJUX0xJTkVbN10pIGFyZSBzZXQuCisgICAgICogQHZhciBVQVJUX1Q6OklOVEVOCisgICAgICogT2Zmc2V0OiAweDA0ICBVQVJUIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxSREFJRU4gICAgfFJlY2VpdmUgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgZGF0YSBhdmFpbGFibGUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFRIUkVJRU4gICB8VHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciBFbXB0eSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5IGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBlbXB0eSBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UkxTSUVOICAgIHxSZWNlaXZlIExpbmUgU3RhdHVzIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgTGluZSBTdGF0dXMgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIExpbmUgU3RhdHVzIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxNT0RFTUlFTiAgfE1vZGVtIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNb2RlbSBzdGF0dXMgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNb2RlbSBzdGF0dXMgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfFJYVE9JRU4gICB8UlggVGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlggdGltZS1vdXQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8QlVGRVJSSUVOIHxCdWZmZXIgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnVmZmVyIGVycm9yIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnVmZmVyIGVycm9yIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxXS0lFTiAgICAgfFdha2UtdXAgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2FrZS11cCBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdha2UtdXAgSW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFs4XSAgICAgfExJTklFTiAgICB8TElOIEJ1cyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSU4gYnVzIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIGJ1cyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB1c2VkIGZvciBMSU4gZnVuY3Rpb24gbW9kZS4KKyAgICAgKiB8WzExXSAgICB8VE9DTlRFTiAgIHxSZWNlaXZlIEJ1ZmZlciBUaW1lLW91dCBDb3VudGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBCdWZmZXIgVGltZS1vdXQgY291bnRlciBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBCdWZmZXIgVGltZS1vdXQgY291bnRlciBFbmFibGVkLgorICAgICAqIHxbMTJdICAgIHxBVE9SVFNFTiAgfG5SVFMgQXV0by1mbG93IENvbnRyb2wgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBuUlRTIGF1dG8tZmxvdyBjb250cm9sIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBuUlRTIGF1dG8tZmxvdyBjb250cm9sIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiBuUlRTIGF1dG8tZmxvdyBpcyBlbmFibGVkLCBpZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBSWCBGSUZPIGVxdWFscyB0aGUgUlRTVFJHTFYgKFVBUlRfRklGT1sxOToxNl0pLCB0aGUgVUFSVCB3aWxsIGRlLWFzc2VydCBuUlRTIHNpZ25hbC4KKyAgICAgKiB8WzEzXSAgICB8QVRPQ1RTRU4gIHxuQ1RTIEF1dG8tZmxvdyBDb250cm9sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gbkNUUyBhdXRvLWZsb3cgY29udHJvbCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gbkNUUyBhdXRvLWZsb3cgY29udHJvbCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gbkNUUyBhdXRvLWZsb3cgaXMgZW5hYmxlZCwgdGhlIFVBUlQgd2lsbCBzZW5kIGRhdGEgdG8gZXh0ZXJuYWwgZGV2aWNlIGlmIG5DVFMgaW5wdXQgYXNzZXJ0IChVQVJUIHdpbGwgbm90IHNlbmQgZGF0YSB0byBkZXZpY2UgdW50aWwgbkNUUyBpcyBhc3NlcnRlZCkuCisgICAgICogfFsxNF0gICAgfFRYUERNQUVOICB8VFggUERNQSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY2FuIGVuYWJsZSBvciBkaXNhYmxlIFRYIFBETUEgc2VydmljZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVFggUERNQSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVFggUERNQSBFbmFibGVkLgorICAgICAqIHxbMTVdICAgIHxSWFBETUFFTiAgfFJYIFBETUEgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNhbiBlbmFibGUgb3IgZGlzYWJsZSBSWCBQRE1BIHNlcnZpY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJYIFBETUEgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJYIFBETUEgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJZiBSTFNJRU4gKFVBUlRfSU5URU5bMl0pIGlzIGVuYWJsZWQgYW5kIEhXUkxTSU5UIChVQVJUX0lOVFNUU1syNl0pIGlzIHNldCB0byAxLCB0aGUgUkxTIChSZWNlaXZlIExpbmUgU3RhdHVzKSBJbnRlcnJ1cHQgaXMgY2F1c2VkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFJMUyBpbnRlcnJ1cHQgaXMgY2F1c2VkIGJ5IEJyZWFrIEVycm9yIEZsYWcgQklGKFVBUlRfRklGT1NUU1s2XSksIEZyYW1lIEVycm9yIEZsYWcgRkVGKFVBUlRfRklGT1s1XSkgb3IgUGFyaXR5IEVycm9yIEZsYWcgUEVGKFVBUlRfRklGT1NUU1s0XSksIFVBUlQgUERNQSByZWNlaXZlIHJlcXVlc3Qgb3BlcmF0aW9uIGlzIHN0b3AuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Q2xlYXIgQnJlYWsgRXJyb3IgRmxhZyBCSUYgb3IgRnJhbWUgRXJyb3IgRmxhZyBGRUYgb3IgUGFyaXR5IEVycm9yIEZsYWcgUEVGIGJ5IHdyaXRpbmcgMSB0byBjb3JyZXNwb25kaW5nIEJJRiwgRkVGIGFuZCBQRUYgdG8gbWFrZSBVQVJUIFBETUEgcmVjZWl2ZSByZXF1ZXN0IG9wZXJhdGlvbiBjb250aW51ZS4KKyAgICAgKiB8WzE4XSAgICB8QUJSSUVOICAgIHxBdXRvLWJhdWQgUmF0ZSBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLWJhdWQgcmF0ZSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tYmF1ZCByYXRlIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbMjJdICAgIHxUWEVORElFTiAgfFRyYW5zbWl0dGVyIEVtcHR5IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgVFhFTkRJRU4gKFVBUlRfSU5URU5bMjJdKSBpcyBlbmFibGVkLCB0aGUgVHJhbnNtaXR0ZXIgRW1wdHkgaW50ZXJydXB0IFRYRU5ESU5UIChVQVJUX0lOVFNUU1szMF0pIHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gVFhFTkRJRiAoVUFSVF9JTlRTVFNbMjJdKSBpcyBzZXQgKFRYIEZJRk8gKFVBUlRfREFUKSBpcyBlbXB0eSBhbmQgdGhlIFNUT1AgYml0IG9mIHRoZSBsYXN0IGJ5dGUgaGFzIGJlZW4gdHJhbnNtaXR0ZWQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdHRlciBlbXB0eSBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0dGVyIGVtcHR5IGludGVycnVwdCBFbmFibGVkLgorICAgICAqIEB2YXIgVUFSVF9UOjpGSUZPCisgICAgICogT2Zmc2V0OiAweDA4ICBVQVJUIEZJRk8gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxXSAgICAgfFJYUlNUICAgICB8UlggRmllbGQgU29mdHdhcmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFJYUlNUIChVQVJUX0ZJRk9bMV0pIGlzIHNldCwgYWxsIHRoZSBieXRlIGluIHRoZSByZWNlaXZlciBGSUZPIGFuZCBSWCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIGFyZSBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSBSWCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIGFuZCBwb2ludGVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNsZWFyIGF0IGxlYXN0IDMgVUFSVCBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQmVmb3JlIHNldHRpbmcgdGhpcyBiaXQsIGl0IHNob3VsZCB3YWl0IGZvciB0aGUgUlhJRExFIChVQVJUX0ZJRk9TVFNbMjldKSBiZSBzZXQuCisgICAgICogfFsyXSAgICAgfFRYUlNUICAgICB8VFggRmllbGQgU29mdHdhcmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFRYUlNUIChVQVJUX0ZJRk9bMl0pIGlzIHNldCwgYWxsIHRoZSBieXRlIGluIHRoZSB0cmFuc21pdCBGSUZPIGFuZCBUWCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIGFyZSBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSBUWCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIGFuZCBwb2ludGVycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNsZWFyIGF0IGxlYXN0IDMgVUFSVCBwZXJpcGhlcmFsIGNsb2NrIGN5Y2xlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQmVmb3JlIHNldHRpbmcgdGhpcyBiaXQsIGl0IHNob3VsZCB3YWl0IGZvciB0aGUgVFhFTVBUWUYgKFVBUlRfRklGT1NUU1syOF0pIGJlIHNldC4KKyAgICAgKiB8Wzc6NF0gICB8UkZJVEwgICAgIHxSWCBGSUZPIEludGVycnVwdCBUcmlnZ2VyIExldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSByZWNlaXZlIEZJRk8gZXF1YWxzIHRoZSBSRklUTCwgdGhlIFJEQUlGIChVQVJUX0lOVFNUU1swXSkgd2lsbCBiZSBzZXQgKGlmIFJEQUlFTiAoVUFSVF9JTlRFTiBbMF0pIGVuYWJsZWQsIGFuZCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBSWCBGSUZPIEludGVycnVwdCBUcmlnZ2VyIExldmVsIGlzIDEgYnl0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gUlggRklGTyBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbCBpcyA0IGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBSWCBGSUZPIEludGVycnVwdCBUcmlnZ2VyIExldmVsIGlzIDggYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFJYIEZJRk8gSW50ZXJydXB0IFRyaWdnZXIgTGV2ZWwgaXMgMTQgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfFs4XSAgICAgfFJYT0ZGICAgICB8UmVjZWl2ZXIgRGlzYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgcmVjZWl2ZXIgaXMgZGlzYWJsZWQgb3Igbm90IChzZXQgMSB0byBkaXNhYmxlIHJlY2VpdmVyKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZXIgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZXIgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgdXNlZCBmb3IgUlMtNDg1IE5vcm1hbCBNdWx0aS1kcm9wIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgc2hvdWxkIGJlIHByb2dyYW1tZWQgYmVmb3JlIFJTNDg1Tk1NIChVQVJUX0FMVENUTCBbOF0pIGlzIHByb2dyYW1tZWQuCisgICAgICogfFsxOToxNl0gfFJUU1RSR0xWICB8blJUUyBUcmlnZ2VyIExldmVsIGZvciBBdXRvLWZsb3cgQ29udHJvbCBVc2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gblJUUyBUcmlnZ2VyIExldmVsIGlzIDEgYnl0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gblJUUyBUcmlnZ2VyIExldmVsIGlzIDQgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IG5SVFMgVHJpZ2dlciBMZXZlbCBpcyA4IGJ5dGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBuUlRTIFRyaWdnZXIgTGV2ZWwgaXMgMTQgYnl0ZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8T3RoZXJzID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBmaWVsZCBpcyB1c2VkIGZvciBhdXRvIG5SVFMgZmxvdyBjb250cm9sLgorICAgICAqIEB2YXIgVUFSVF9UOjpMSU5FCisgICAgICogT2Zmc2V0OiAweDBDICBVQVJUIExpbmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfFdMUyAgICAgICB8V29yZCBMZW5ndGggU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBzZXRzIFVBUlQgd29yZCBsZW5ndGguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSA1IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSA2IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSA3IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSA4IGJpdHMuCisgICAgICogfFsyXSAgICAgfE5TQiAgICAgICB8TnVtYmVyIG9mIFNUT1AgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE9uZSBTVE9QIGJpdCBpcyBnZW5lcmF0ZWQgaW4gdGhlIHRyYW5zbWl0dGVkIGRhdGEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdoZW4gc2VsZWN0IDUtYml0IHdvcmQgbGVuZ3RoLCAxLjUgU1RPUCBiaXQgaXMgZ2VuZXJhdGVkIGluIHRoZSB0cmFuc21pdHRlZCBkYXRhLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc2VsZWN0IDYtLCA3LSBhbmQgOC1iaXQgd29yZCBsZW5ndGgsIDIgU1RPUCBiaXQgaXMgZ2VuZXJhdGVkIGluIHRoZSB0cmFuc21pdHRlZCBkYXRhLgorICAgICAqIHxbM10gICAgIHxQQkUgICAgICAgfFBhcml0eSBCaXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQYXJpdHkgYml0IGdlbmVyYXRlZCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGFyaXR5IGJpdCBnZW5lcmF0ZWQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBQYXJpdHkgYml0IGlzIGdlbmVyYXRlZCBvbiBlYWNoIG91dGdvaW5nIGNoYXJhY3RlciBhbmQgaXMgY2hlY2tlZCBvbiBlYWNoIGluY29taW5nIGRhdGEuCisgICAgICogfFs0XSAgICAgfEVQRSAgICAgICB8RXZlbiBQYXJpdHkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPZGQgbnVtYmVyIG9mIGxvZ2ljIDEncyBpcyB0cmFuc21pdHRlZCBhbmQgY2hlY2tlZCBpbiBlYWNoIHdvcmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV2ZW4gbnVtYmVyIG9mIGxvZ2ljIDEncyBpcyB0cmFuc21pdHRlZCBhbmQgY2hlY2tlZCBpbiBlYWNoIHdvcmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaGFzIGVmZmVjdCBvbmx5IHdoZW4gUEJFIChVQVJUX0xJTkVbM10pIGlzIHNldC4KKyAgICAgKiB8WzVdICAgICB8U1BFICAgICAgIHxTdGljayBQYXJpdHkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTdGljayBwYXJpdHkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFN0aWNrIHBhcml0eSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IElmIFBCRSAoVUFSVF9MSU5FWzNdKSBhbmQgRVBFIChVQVJUX0xJTkVbNF0pIGFyZSBsb2dpYyAxLCB0aGUgcGFyaXR5IGJpdCBpcyB0cmFuc21pdHRlZCBhbmQgY2hlY2tlZCBhcyBsb2dpYyAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFBCRSAoVUFSVF9MSU5FWzNdKSBpcyAxIGFuZCBFUEUgKFVBUlRfTElORVs0XSkgaXMgMCB0aGVuIHRoZSBwYXJpdHkgYml0IGlzIHRyYW5zbWl0dGVkIGFuZCBjaGVja2VkIGFzIDEuCisgICAgICogfFs2XSAgICAgfEJDQiAgICAgICB8QnJlYWsgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQnJlYWsgQ29udHJvbCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnJlYWsgQ29udHJvbCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEsIHRoZSB0cmFuc21pdHRlZCBzZXJpYWwgZGF0YSBvdXRwdXQgKFRYKSBpcyBmb3JjZWQgdG8gdGhlIFNwYWNpbmcgU3RhdGUgKGxvZ2ljIDApCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgYWN0cyBvbmx5IG9uIFRYIGxpbmUgYW5kIGhhcyBubyBlZmZlY3Qgb24gdGhlIHRyYW5zbWl0dGVyIGxvZ2ljLgorICAgICAqIHxbN10gICAgIHxQU1MgICAgICAgfFBhcml0eSBCaXQgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBwYXJpdHkgYml0IGNhbiBiZSBzZWxlY3RlZCB0byBiZSBnZW5lcmF0ZWQgYW5kIGNoZWNrZWQgYXV0b21hdGljYWxseSBvciBieSBzb2Z0d2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGFyaXR5IGJpdCBpcyBnZW5lcmF0ZWQgYnkgRVBFIChVQVJUX0xJTkVbNF0pIGFuZCBTUEUgKFVBUlRfTElORVs1XSkgc2V0dGluZyBhbmQgY2hlY2tlZCBhdXRvbWF0aWNhbGx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQYXJpdHkgYml0IGdlbmVyYXRlZCBhbmQgY2hlY2tlZCBieSBzb2Z0d2FyZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaGFzIGVmZmVjdCBvbmx5IHdoZW4gUEJFIChVQVJUX0xJTkVbM10pIGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSWYgUFNTIGlzIDAsIHRoZSBwYXJpdHkgYml0IGlzIHRyYW5zbWl0dGVkIGFuZCBjaGVja2VkIGF1dG9tYXRpY2FsbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgUFNTIGlzIDEsIHRoZSB0cmFuc21pdHRlZCBwYXJpdHkgYml0IHZhbHVlIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHdyaXRpbmcgUEFSSVRZIChVQVJUX0RBVFs4XSkgYW5kIHRoZSBwYXJpdHkgYml0IGNhbiBiZSByZWFkIGJ5IHJlYWRpbmcgUEFSSVRZIChVQVJUX0RBVFs4XSkuCisgICAgICogfFs4XSAgICAgfFRYRElOViAgICB8VFggRGF0YSBJbnZlcnRlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdHRlZCBkYXRhIHNpZ25hbCBpbnZlcnRlZCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXR0ZWQgZGF0YSBzaWduYWwgaW52ZXJ0ZWQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmVmb3JlIHNldHRpbmcgdGhpcyBiaXQsIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgc2hvdWxkIGJlIHNldCB0aGVuIHdhaXRlZCBmb3IgVFhSWEFDVCAoVUFSVF9GSUZPU1RTWzMxXSkgaXMgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBjb25maWd1cmF0aW9uIGlzIGRvbmUsIGNsZWFyZWQgVFhSWERJUyAoVUFSVF9GVU5DU0VMWzNdKSB0byBhY3RpdmF0ZSBVQVJUIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHZhbGlkIHdoZW4gRlVOQ1NFTCAoVUFSVF9GVU5DU0VMWzE6MF0pIGlzIHNlbGVjdCBVQVJULCBMSU4gb3IgUlM0ODUgZnVuY3Rpb24uCisgICAgICogfFs5XSAgICAgfFJYRElOViAgICB8UlggRGF0YSBJbnZlcnRlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlZCBkYXRhIHNpZ25hbCBpbnZlcnRlZCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZWQgZGF0YSBzaWduYWwgaW52ZXJ0ZWQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmVmb3JlIHNldHRpbmcgdGhpcyBiaXQsIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgc2hvdWxkIGJlIHNldCB0aGVuIHdhaXRlZCBmb3IgVFhSWEFDVCAoVUFSVF9GSUZPU1RTWzMxXSkgaXMgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBjb25maWd1cmF0aW9uIGlzIGRvbmUsIGNsZWFyZWQgVFhSWERJUyAoVUFSVF9GVU5DU0VMWzNdKSB0byBhY3RpdmF0ZSBVQVJUIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHZhbGlkIHdoZW4gRlVOQ1NFTCAoVUFSVF9GVU5DU0VMWzE6MF0pIGlzIHNlbGVjdCBVQVJULCBMSU4gb3IgUlM0ODUgZnVuY3Rpb24uCisgICAgICogQHZhciBVQVJUX1Q6Ok1PREVNCisgICAgICogT2Zmc2V0OiAweDEwICBVQVJUIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxSVFMgICAgICAgfG5SVFMgKFJlcXVlc3QtdG8tc2VuZCkgU2lnbmFsIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBkaXJlY3QgY29udHJvbCBpbnRlcm5hbCBuUlRTIHNpZ25hbCBhY3RpdmUgb3Igbm90LCBhbmQgdGhlbiBkcml2ZSB0aGUgblJUUyBwaW4gb3V0cHV0IHdpdGggUlRTQUNUTFYgYml0IGNvbmZpZ3VyYXRpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IG5SVFMgc2lnbmFsIGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gblJUUyBzaWduYWwgaXMgaW5hY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgblJUUyBzaWduYWwgY29udHJvbCBiaXQgaXMgbm90IGVmZmVjdGl2ZSB3aGVuIG5SVFMgYXV0by1mbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBpbiBVQVJUIGZ1bmN0aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgblJUUyBzaWduYWwgY29udHJvbCBiaXQgaXMgbm90IGVmZmVjdGl2ZSB3aGVuIFJTLTQ4NSBhdXRvIGRpcmVjdGlvbiBtb2RlIChBVUQpIGlzIGVuYWJsZWQgaW4gUlMtNDg1IGZ1bmN0aW9uIG1vZGUuCisgICAgICogfFs5XSAgICAgfFJUU0FDVExWICB8blJUUyBQaW4gQWN0aXZlIExldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgYWN0aXZlIGxldmVsIHN0YXRlIG9mIG5SVFMgcGluIG91dHB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gblJUUyBwaW4gb3V0cHV0IGlzIGhpZ2ggbGV2ZWwgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBuUlRTIHBpbiBvdXRwdXQgaXMgbG93IGxldmVsIGFjdGl2ZS4gKERlZmF1bHQpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogQmVmb3JlIHNldHRpbmcgdGhpcyBiaXQsIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgc2hvdWxkIGJlIHNldCB0aGVuIHdhaXRlZCBmb3IgVFhSWEFDVCAoVUFSVF9GSUZPU1RTWzMxXSkgaXMgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBjb25maWd1cmF0aW9uIGlzIGRvbmUsIGNsZWFyZWQgVFhSWERJUyAoVUFSVF9GVU5DU0VMWzNdKSB0byBhY3RpdmF0ZSBVQVJUIGNvbnRyb2xsZXIuCisgICAgICogfFsxM10gICAgfFJUU1NUUyAgICB8blJUUyBQaW4gU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgbWlycm9yIGZyb20gblJUUyBwaW4gb3V0cHV0IG9mIHZvbHRhZ2UgbG9naWMgc3RhdHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBuUlRTIHBpbiBvdXRwdXQgaXMgbG93IGxldmVsIHZvbHRhZ2UgbG9naWMgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5SVFMgcGluIG91dHB1dCBpcyBoaWdoIGxldmVsIHZvbHRhZ2UgbG9naWMgc3RhdGUuCisgICAgICogQHZhciBVQVJUX1Q6Ok1PREVNU1RTCisgICAgICogT2Zmc2V0OiAweDE0ICBVQVJUIE1vZGVtIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENUU0RFVEYgICB8RGV0ZWN0IG5DVFMgU3RhdGUgQ2hhbmdlIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbmV2ZXIgbkNUUyBpbnB1dCBoYXMgY2hhbmdlIHN0YXRlLCBhbmQgaXQgd2lsbCBnZW5lcmF0ZSBNb2RlbSBpbnRlcnJ1cHQgdG8gQ1BVIHdoZW4gTU9ERU1JRU4gKFVBUlRfSU5URU4gWzNdKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gbkNUUyBpbnB1dCBoYXMgbm90IGNoYW5nZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gbkNUUyBpbnB1dCBoYXMgY2hhbmdlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzRdICAgICB8Q1RTU1RTICAgIHxuQ1RTIFBpbiBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBtaXJyb3IgZnJvbSBuQ1RTIHBpbiBpbnB1dCBvZiB2b2x0YWdlIGxvZ2ljIHN0YXR1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gbkNUUyBwaW4gaW5wdXQgaXMgbG93IGxldmVsIHZvbHRhZ2UgbG9naWMgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5DVFMgcGluIGlucHV0IGlzIGhpZ2ggbGV2ZWwgdm9sdGFnZSBsb2dpYyBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBlY2hvZXMgd2hlbiBVQVJUIGNvbnRyb2xsZXIgcGVyaXBoZXJhbCBjbG9jayBpcyBlbmFibGVkLCBhbmQgbkNUUyBtdWx0aS1mdW5jdGlvbiBwb3J0IGlzIHNlbGVjdGVkLgorICAgICAqIHxbOF0gICAgIHxDVFNBQ1RMViAgfG5DVFMgUGluIEFjdGl2ZSBMZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIGFjdGl2ZSBsZXZlbCBzdGF0ZSBvZiBuQ1RTIHBpbiBpbnB1dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gbkNUUyBwaW4gaW5wdXQgaXMgaGlnaCBsZXZlbCBhY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5DVFMgcGluIGlucHV0IGlzIGxvdyBsZXZlbCBhY3RpdmUuIChEZWZhdWx0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LCBUWFJYRElTIChVQVJUX0ZVTkNTRUxbM10pIHNob3VsZCBiZSBzZXQgdGhlbiB3YWl0ZWQgZm9yIFRYUlhBQ1QgKFVBUlRfRklGT1NUU1szMV0pIGlzIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyBkb25lLCBjbGVhcmVkIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgdG8gYWN0aXZhdGUgVUFSVCBjb250cm9sbGVyLgorICAgICAqIEB2YXIgVUFSVF9UOjpGSUZPU1RTCisgICAgICogT2Zmc2V0OiAweDE4ICBVQVJUIEZJRk8gU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UlhPVklGICAgIHxSWCBPdmVyZmxvdyBFcnJvciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIFJYIEZJRk8gb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIG51bWJlciBvZiBieXRlcyBvZiByZWNlaXZlZCBkYXRhIGlzIGdyZWF0ZXIgdGhhbiBSWF9GSUZPIChVQVJUX0RBVCkgc2l6ZSAxNiBieXRlcywgdGhpcyBiaXQgd2lsbCBiZSBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJYIEZJRk8gaXMgbm90IG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCBGSUZPIGlzIG92ZXJmbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzFdICAgICB8QUJSRElGICAgIHxBdXRvLWJhdWQgUmF0ZSBEZXRlY3QgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gbG9naWMgMSB3aGVuIGF1dG8tYmF1ZCByYXRlIGRldGVjdCBmdW5jdGlvbiBpcyBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1iYXVkIHJhdGUgZGV0ZWN0IGZ1bmN0aW9uIGlzIG5vdCBmaW5pc2hlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0by1iYXVkIHJhdGUgZGV0ZWN0IGZ1bmN0aW9uIGlzIGZpbmlzaGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzJdICAgICB8QUJSRFRPSUYgIHxBdXRvLWJhdWQgUmF0ZSBEZXRlY3QgVGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gbG9naWMgMSBpbiBBdXRvLWJhdWQgUmF0ZSBEZXRlY3QgbW9kZSB3aGVuIHRoZSBiYXVkIHJhdGUgY291bnRlciBpcyBvdmVyZmxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1iYXVkIHJhdGUgY291bnRlciBpcyB1bmRlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tYmF1ZCByYXRlIGNvdW50ZXIgaXMgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbM10gICAgIHxBRERSREVURiAgfFJTLTQ4NSBBZGRyZXNzIEJ5dGUgRGV0ZWN0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZXIgZGV0ZWN0cyBhIGRhdGEgdGhhdCBpcyBub3QgYW4gYWRkcmVzcyBiaXQgKGJpdCA5ID0nMCcpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlciBkZXRlY3RzIGEgZGF0YSB0aGF0IGlzIGFuIGFkZHJlc3MgYml0IChiaXQgOSA9JzEnKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBmaWVsZCBpcyB1c2VkIGZvciBSUy00ODUgZnVuY3Rpb24gbW9kZSBhbmQgQUREUkRFTiAoVUFSVF9BTFRDVExbMTVdKSBpcyBzZXQgdG8gMSB0byBlbmFibGUgQWRkcmVzcyBkZXRlY3Rpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNF0gICAgIHxQRUYgICAgICAgfFBhcml0eSBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEgd2hlbmV2ZXIgdGhlIHJlY2VpdmVkIGNoYXJhY3RlciBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcGFyaXR5IGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcGFyaXR5IGVycm9yIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGFyaXR5IGVycm9yIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs1XSAgICAgfEZFRiAgICAgICB8RnJhbWluZyBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEgd2hlbmV2ZXIgdGhlIHJlY2VpdmVkIGNoYXJhY3RlciBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgc3RvcCBiaXQgKHRoYXQgaXMsIHRoZSBzdG9wIGJpdCBmb2xsb3dpbmcgdGhlIGxhc3QgZGF0YSBiaXQgb3IgcGFyaXR5IGJpdCBpcyBkZXRlY3RlZCBhcyBsb2dpYyAwKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZnJhbWluZyBlcnJvciBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEZyYW1pbmcgZXJyb3IgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzZdICAgICB8QklGICAgICAgIHxCcmVhayBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byBsb2dpYyAxIHdoZW5ldmVyIHRoZSByZWNlaXZlZCBkYXRhIGlucHV0IChSWCkgaXMgaGVsZCBpbiB0aGUgc3BhY2luZyBzdGF0ZSAobG9naWMgMCkgZm9yIGxvbmdlciB0aGFuIGEgZnVsbCB3b3JkIHRyYW5zbWlzc2lvbiB0aW1lICh0aGF0IGlzLCB0aGUgdG90YWwgdGltZSBvZiBzdGFydCBiaXQgKyBkYXRhIGJpdHMgKyBwYXJpdHkgKyBzdG9wIGJpdHMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBCcmVhayBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCcmVhayBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzEzOjhdICB8UlhQVFIgICAgIHxSWCBGSUZPIFBvaW50ZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgUlggRklGTyBCdWZmZXIgUG9pbnRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFVBUlQgcmVjZWl2ZXMgb25lIGJ5dGUgZnJvbSBleHRlcm5hbCBkZXZpY2UsIFJYUFRSIGluY3JlYXNlcyBvbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBvbmUgYnl0ZSBvZiBSWCBGSUZPIGlzIHJlYWQgYnkgQ1BVLCBSWFBUUiBkZWNyZWFzZXMgb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBNYXhpbXVtIHZhbHVlIHNob3duIGluIFJYUFRSIGlzIDE1CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgdXNpbmcgbGV2ZWwgb2YgUlggRklGTyBCdWZmZXIgZXF1YWwgdG8gMTYsIHRoZSBSWEZVTEwgYml0IGlzIHNldCB0byAxIGFuZCBSWFBUUiB3aWxsIHNob3cgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBcyBvbmUgYnl0ZSBvZiBSWCBGSUZPIGlzIHJlYWQgYnkgQ1BVLCB0aGUgUlhGVUxMIGJpdCBpcyBjbGVhcmVkIHRvIDAgYW5kIFJYUFRSIHdpbGwgc2hvdyAxNS4KKyAgICAgKiB8WzE0XSAgICB8UlhFTVBUWSAgIHxSZWNlaXZlciBGSUZPIEVtcHR5IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5pdGlhdGUgUlggRklGTyBlbXB0eSBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJYIEZJRk8gaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCBGSUZPIGlzIGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gdGhlIGxhc3QgYnl0ZSBvZiBSWCBGSUZPIGhhcyBiZWVuIHJlYWQgYnkgQ1BVLCBoYXJkd2FyZSBzZXRzIHRoaXMgYml0IGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gVUFSVCByZWNlaXZlcyBhbnkgbmV3IGRhdGEuCisgICAgICogfFsxNV0gICAgfFJYRlVMTCAgICB8UmVjZWl2ZXIgRklGTyBGdWxsIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5pdGlhdGVzIFJYIEZJRk8gZnVsbCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJYIEZJRk8gaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJYIEZJRk8gaXMgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgbnVtYmVyIG9mIHVzYWdlIGluIFJYIEZJRk8gQnVmZmVyIGlzIGVxdWFsIHRvIDE2LCBvdGhlcndpc2UgaXQgaXMgY2xlYXJlZCBieSBoYXJkd2FyZS4KKyAgICAgKiB8WzIxOjE2XSB8VFhQVFIgICAgIHxUWCBGSUZPIFBvaW50ZXIgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgVFggRklGTyBCdWZmZXIgUG9pbnRlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIENQVSB3cml0ZXMgb25lIGJ5dGUgaW50byBVQVJUX0RBVCwgVFhQVFIgaW5jcmVhc2VzIG9uZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIG9uZSBieXRlIG9mIFRYIEZJRk8gaXMgdHJhbnNmZXJyZWQgdG8gVHJhbnNtaXR0ZXIgU2hpZnQgUmVnaXN0ZXIsIFRYUFRSIGRlY3JlYXNlcyBvbmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIE1heGltdW0gdmFsdWUgc2hvd24gaW4gVFhQVFIgaXMgMTUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgdXNpbmcgbGV2ZWwgb2YgVFggRklGTyBCdWZmZXIgZXF1YWwgdG8gMTYsIHRoZSBUWEZVTEwgYml0IGlzIHNldCB0byAxIGFuZCBUWFBUUiB3aWxsIHNob3cgMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBcyBvbmUgYnl0ZSBvZiBUWCBGSUZPIGlzIHRyYW5zZmVycmVkIHRvIFRyYW5zbWl0dGVyIFNoaWZ0IFJlZ2lzdGVyLCB0aGUgVFhGVUxMIGJpdCBpcyBjbGVhcmVkIHRvIDAgYW5kIFRYUFRSIHdpbGwgc2hvdyAxNS4KKyAgICAgKiB8WzIyXSAgICB8VFhFTVBUWSAgIHxUcmFuc21pdHRlciBGSUZPIEVtcHR5IChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIFRYIEZJRk8gZW1wdHkgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUWCBGSUZPIGlzIG5vdCBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVFggRklGTyBpcyBlbXB0eS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIHRoZSBsYXN0IGJ5dGUgb2YgVFggRklGTyBoYXMgYmVlbiB0cmFuc2ZlcnJlZCB0byBUcmFuc21pdHRlciBTaGlmdCBSZWdpc3RlciwgaGFyZHdhcmUgc2V0cyB0aGlzIGJpdCBoaWdoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIHdyaXRpbmcgZGF0YSBpbnRvIFVBUlRfREFUIChUWCBGSUZPIG5vdCBlbXB0eSkuCisgICAgICogfFsyM10gICAgfFRYRlVMTCAgICB8VHJhbnNtaXR0ZXIgRklGTyBGdWxsIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIFRYIEZJRk8gZnVsbCBvciBub3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRYIEZJRk8gaXMgbm90IGZ1bGwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRYIEZJRk8gaXMgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgbnVtYmVyIG9mIHVzYWdlIGluIFRYIEZJRk8gQnVmZmVyIGlzIGVxdWFsIHRvIDE2LCBvdGhlcndpc2UgaXQgaXMgY2xlYXJlZCBieSBoYXJkd2FyZS4KKyAgICAgKiB8WzI0XSAgICB8VFhPVklGICAgIHxUWCBPdmVyZmxvdyBFcnJvciBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFRYIEZJRk8gKFVBUlRfREFUKSBpcyBmdWxsLCBhbiBhZGRpdGlvbmFsIHdyaXRlIHRvIFVBUlRfREFUIHdpbGwgY2F1c2UgdGhpcyBiaXQgdG8gbG9naWMgMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVFggRklGTyBpcyBub3Qgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRYIEZJRk8gaXMgb3ZlcmZsb3cuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMjhdICAgIHxUWEVNUFRZRiAgfFRyYW5zbWl0dGVyIEVtcHR5IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBUWCBGSUZPIChVQVJUX0RBVCkgaXMgZW1wdHkgYW5kIHRoZSBTVE9QIGJpdCBvZiB0aGUgbGFzdCBieXRlIGhhcyBiZWVuIHRyYW5zbWl0dGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUWCBGSUZPIGlzIG5vdCBlbXB0eSBvciB0aGUgU1RPUCBiaXQgb2YgdGhlIGxhc3QgYnl0ZSBoYXMgYmVlbiBub3QgdHJhbnNtaXR0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRYIEZJRk8gaXMgZW1wdHkgYW5kIHRoZSBTVE9QIGJpdCBvZiB0aGUgbGFzdCBieXRlIGhhcyBiZWVuIHRyYW5zbWl0dGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIFRYIEZJRk8gaXMgbm90IGVtcHR5IG9yIHRoZSBsYXN0IGJ5dGUgdHJhbnNtaXNzaW9uIGhhcyBub3QgY29tcGxldGVkLgorICAgICAqIHxbMjldICAgIHxSWElETEUgICAgfFJYIElkbGUgU3RhdHVzIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gUlggaXMgaWRsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlggaXMgYnVzeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlggaXMgaWRsZS4gKERlZmF1bHQpCisgICAgICogfFszMV0gICAgfFRYUlhBQ1QgICB8VFggYW5kIFJYIEFjdGl2ZSBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgVFggYW5kIFJYIGFyZSBhY3RpdmUgb3IgaW5hY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRYIGFuZCBSWCBhcmUgaW5hY3RpdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRYIGFuZCBSWCBhcmUgYWN0aXZlLiAoRGVmYXVsdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBXaGVuIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgaXMgc2V0IGFuZCBib3RoIFRYIGFuZCBSWCBhcmUgaW4gaWRsZSBzdGF0ZSwgdGhpcyBiaXQgaXMgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVUFSVCBjb250cm9sbGVyIGNhbiBub3QgdHJhbnNtaXQgb3IgcmVjZWl2ZSBkYXRhIGF0IHRoaXMgbW9tZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE90aGVyd2lzZSB0aGlzIGJpdCBpcyBzZXQuCisgICAgICogQHZhciBVQVJUX1Q6OklOVFNUUworICAgICAqIE9mZnNldDogMHgxQyAgVUFSVCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UkRBSUYgICAgIHxSZWNlaXZlIERhdGEgQXZhaWxhYmxlIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBSWCBGSUZPIGVxdWFscyB0aGUgUkZJVEwgdGhlbiB0aGUgUkRBSUYoVUFSVF9JTlRTVFNbMF0pIHdpbGwgYmUgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFJEQUlFTiAoVUFSVF9JTlRFTiBbMF0pIGlzIGVuYWJsZWQsIHRoZSBSREEgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBSREEgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSREEgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgaXQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIG51bWJlciBvZiB1bnJlYWQgYnl0ZXMgb2YgUlggRklGTyBkcm9wcyBiZWxvdyB0aGUgdGhyZXNob2xkIGxldmVsIChSRklUTChVQVJUX0ZJRk9bNzo0XSkuCisgICAgICogfFsxXSAgICAgfFRIUkVJRiAgICB8VHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciBFbXB0eSBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBsYXN0IGRhdGEgb2YgVFggRklGTyBpcyB0cmFuc2ZlcnJlZCB0byBUcmFuc21pdHRlciBTaGlmdCBSZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBUSFJFSUVOIChVQVJUX0lOVEVOWzFdKSBpcyBlbmFibGVkLCB0aGUgVEhSRSBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFRIUkUgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUSFJFIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIGl0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIHdyaXRpbmcgZGF0YSBpbnRvIFVBUlRfREFUIChUWCBGSUZPIG5vdCBlbXB0eSkuCisgICAgICogfFsyXSAgICAgfFJMU0lGICAgICB8UmVjZWl2ZSBMaW5lIEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIFJYIHJlY2VpdmUgZGF0YSBoYXZlIHBhcml0eSBlcnJvciwgZnJhbWUgZXJyb3Igb3IgYnJlYWsgZXJyb3IgKGF0IGxlYXN0IG9uZSBvZiAzIGJpdHMsIEJJRihVQVJUX0ZJRk9TVFNbNl0pLCBGRUYoVUFSVF9GSUZPU1RTWzVdKSBhbmQgUEVGKFVBUlRfRklGT1NUU1s0XSksIGlzIHNldCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgUkxTSUVOIChVQVJUX0lOVEVOIFsyXSkgaXMgZW5hYmxlZCwgdGhlIFJMUyBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFJMUyBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJMUyBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEluIFJTLTQ4NSBmdW5jdGlvbiBtb2RlLCB0aGlzIGZpZWxkIGlzIHNldCBpbmNsdWRlIHJlY2VpdmVyIGRldGVjdCBhbmQgcmVjZWl2ZWQgYWRkcmVzcyBieXRlIGNoYXJhY3RlciAoYml0OSA9IDEpIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBdCB0aGUgc2FtZSB0aW1lLCB0aGUgYml0IG9mIEFERFJERVRGIChVQVJUX0ZJRk9TVFNbM10pIGlzIGFsc28gc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIHJlc2V0IHRvIDAgd2hlbiBhbGwgYml0cyBvZiBCSUYgKFVBUlRfRklGT1NUU1s2XSksIEZFRihVQVJUX0ZJRk9TVFNbNV0pIGFuZCBQRUYoVUFSVF9GSUZPU1RTWzRdKSBhcmUgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSW4gUlMtNDg1IGZ1bmN0aW9uIG1vZGUsIHRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgcmVzZXQgdG8gMCB3aGVuIGFsbCBiaXRzIG9mIEJJRiAoVUFSVF9GSUZPU1RTWzZdKSAsIEZFRihVQVJUX0ZJRk9TVFNbNV0pLCBQRUYoVUFSVF9GSUZPU1RTWzRdKSBhbmQgQUREUkRFVEYgKFVBUlRfRklGT1NUU1szXSkgYXJlIGNsZWFyZWQuCisgICAgICogfFszXSAgICAgfE1PREVNSUYgICB8TU9ERU0gSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgbkNUUyBwaW4gaGFzIHN0YXRlIGNoYW5nZSAoQ1RTREVURiAoVUFSVF9NT0RFTVNUU1swXSkgPSAxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBNT0RFTUlFTiAoVUFSVF9JTlRFTiBbM10pIGlzIGVuYWJsZWQsIHRoZSBNb2RlbSBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIE1vZGVtIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTW9kZW0gaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgcmVzZXQgdG8gMCB3aGVuIGJpdCBDVFNERVRGIGlzIGNsZWFyZWQgYnkgYSB3cml0ZSAxIG9uIENUU0RFVEYoVUFSVF9NT0RFTVNUU1swXSkuCisgICAgICogfFs0XSAgICAgfFJYVE9JRiAgICB8UlggVGltZS1vdXQgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgUlggRklGTyBpcyBub3QgZW1wdHkgYW5kIG5vIGFjdGl2aXRpZXMgb2NjdXJyZWQgaW4gdGhlIFJYIEZJRk8gYW5kIHRoZSB0aW1lLW91dCBjb3VudGVyIGVxdWFsIHRvIFRPSUMgKFVBUlRfVE9VVFs3OjBdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBSWFRPSUVOIChVQVJUX0lOVEVOIFs0XSkgaXMgZW5hYmxlZCwgdGhlIFJYIHRpbWUtb3V0IGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUlggdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5IGFuZCB1c2VyIGNhbiByZWFkIFVBUlRfREFUIChSWCBpcyBpbiBhY3RpdmUpIHRvIGNsZWFyIGl0LgorICAgICAqIHxbNV0gICAgIHxCVUZFUlJJRiAgfEJ1ZmZlciBFcnJvciBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBUWCBGSUZPIG9yIFJYIEZJRk8gb3ZlcmZsb3dzIChUWE9WSUYgKFVBUlRfRklGT1NUU1syNF0pIG9yIFJYT1ZJRiAoVUFSVF9GSUZPU1RTWzBdKSBpcyBzZXQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gQlVGRVJSSUYgKFVBUlRfSU5UU1RTWzVdKSBpcyBzZXQsIHRoZSB0cmFuc2ZlciBpcyBub3QgY29ycmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBCVUZFUlJJRU4gKFVBUlRfSU5URU4gWzVdKSBpcyBlbmFibGVkLCB0aGUgYnVmZmVyIGVycm9yIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYnVmZmVyIGVycm9yIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnVmZmVyIGVycm9yIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGlmIGJvdGggb2YgUlhPVklGKFVBUlRfRklGT1NUU1swXSkgYW5kIFRYT1ZJRihVQVJUX0ZJRk9TVFNbMjRdKSBhcmUgY2xlYXJlZCB0byAwIGJ5IHdyaXRpbmcgMSB0byBSWE9WSUYoVUFSVF9GSUZPU1RTWzBdKSBhbmQgVFhPVklGKFVBUlRfRklGT1NUU1syNF0pLgorICAgICAqIHxbNl0gICAgIHxXS0lGICAgICAgfFVBUlQgV2FrZS11cCBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIFRPVVRXS0YgKFVBUlRfV0tTVFNbNF0pLCBSUzQ4NVdLRiAoVUFSVF9XS1NUU1szXSksIFJGUlRXS0YgKFVBUlRfV0tTVFNbMl0pLCBEQVRXS0YgKFVBUlRfV0tTVFNbMV0pIG9yIENUU1dLRihVQVJUX1dLU1RTWzBdKSBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVUFSVCB3YWtlLXVwIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVCB3YWtlLXVwIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGlmIGFsbCBvZiBUT1VUV0tGLCBSUzQ4NVdLRiwgUkZSVFdLRiwgREFUV0tGIGFuZCBDVFNXS0YgYXJlIGNsZWFyZWQgdG8gMCBieSB3cml0aW5nIDEgdG8gdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGZsYWcuCisgICAgICogfFs3XSAgICAgfExJTklGICAgICB8TElOIEJ1cyBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIExJTiBzbGF2ZSBoZWFkZXIgZGV0ZWN0IChTTFZIREVURiAoVUFSVF9MSU5TVFNbMF09MSkpLCBMSU4gYnJlYWsgZGV0ZWN0IChCUktERVRGKFVBUlRfTElOU1RTWzhdPTEpKSwgYml0IGVycm9yIGRldGVjdCAoQklURUYoVUFSVF9MSU5TVFNbOV09MSkpLCBMSU4gc2xhdmUgSUQgcGFyaXR5IGVycm9yIChTTFZJRFBFRihVQVJUX0xJTlNUU1syXSA9IDEpKSBvciBMSU4gc2xhdmUgaGVhZGVyIGVycm9yIGRldGVjdCAoU0xWSEVGIChVQVJUX0xJTlNUU1sxXSkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgTElOSUVOIChVQVJUX0lOVEVOIFs4XSkgaXMgZW5hYmxlZCB0aGUgTElOIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9uZSBvZiBTTFZIREVURiwgQlJLREVURiwgQklURUYsIFNMVklEUEVGIGFuZCBTTFZIRUYgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBdCBsZWFzdCBvbmUgb2YgU0xWSERFVEYsIEJSS0RFVEYsIEJJVEVGLCBTTFZJRFBFRiBhbmQgU0xWSEVGIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIHdoZW4gU0xWSERFVEYoVUFSVF9MSU5TVFNbMF0pLCBCUktERVRGKFVBUlRfTElOU1RTWzhdKSwgQklURUYoVUFSVF9MSU5TVFNbOV0pLCBTTFZJRFBFRiAoVUFSVF9MSU5TVFNbMl0pIGFuZCBTTFZIRUYoVUFSVF9MSU5TVFNbMV0pIGFsbCBhcmUgY2xlYXJlZCBhbmQgc29mdHdhcmUgd3JpdGluZyAxIHRvIExJTklGKFVBUlRfSU5UU1RTWzddKS4KKyAgICAgKiB8WzhdICAgICB8UkRBSU5UICAgIHxSZWNlaXZlIERhdGEgQXZhaWxhYmxlIEludGVycnVwdCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgUkRBSUVOIChVQVJUX0lOVEVOWzBdKSBhbmQgUkRBSUYgKFVBUlRfSU5UU1RTWzBdKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUkRBIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJEQSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbOV0gICAgIHxUSFJFSU5UICAgfFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgSW50ZXJydXB0IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBUSFJFSUVOIChVQVJUX0lOVEVOWzFdKSBhbmQgVEhSRUlGKFVBUlRfSU5UU1RTWzFdKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVEhSRSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUSFJFIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisgICAgICogfFsxMF0gICAgfFJMU0lOVCAgICB8UmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIFJMU0lFTiAoVUFSVF9JTlRFTlsyXSkgYW5kIFJMU0lGKFVBUlRfSU5UU1RTWzJdKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gUkxTIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJMUyBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbMTFdICAgIHxNT0RFTUlOVCAgfE1PREVNIFN0YXR1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIE1PREVNSUVOKFVBUlRfSU5URU5bM10pIGFuZCBNT0RFTUlGKFVBUlRfSU5UU1RTWzNdKSBhcmUgYm90aCBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBNb2RlbSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNb2RlbSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLi4KKyAgICAgKiB8WzEyXSAgICB8UlhUT0lOVCAgIHxSWCBUaW1lLW91dCBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIFJYVE9JRU4gKFVBUlRfSU5URU5bNF0pIGFuZCBSWFRPSUYoVUFSVF9JTlRTVFNbNF0pIGFyZSBib3RoIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbMTNdICAgIHxCVUZFUlJJTlQgfEJ1ZmZlciBFcnJvciBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIEJVRkVSUklFTihVQVJUX0lOVEVOWzVdKSBhbmQgQlVGRVJSSUYoVUFSVF8gSU5UU1RTWzVdKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYnVmZmVyIGVycm9yIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbMTRdICAgIHxXS0lOVCAgICAgfFVBUlQgV2FrZS11cCBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIFdLSUVOIChVQVJUX0lOVEVOWzZdKSBhbmQgV0tJRiAoVUFSVF9JTlRTVFNbNl0pIGFyZSBib3RoIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBVQVJUIHdha2UtdXAgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVUFSVCB3YWtlLXVwIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisgICAgICogfFsxNV0gICAgfExJTklOVCAgICB8TElOIEJ1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIExJTklFTiAoVUFSVF9JTlRFTls4XSkgYW5kIExJTklGKFVBUlRfSU5UU1RTWzddKSBhcmUgYm90aCBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gTElOIEJ1cyBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgTElOIEJ1cyBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbMThdICAgIHxIV1JMU0lGICAgfFBETUEgTW9kZSBSZWNlaXZlIExpbmUgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgUlggcmVjZWl2ZSBkYXRhIGhhdmUgcGFyaXR5IGVycm9yLCBmcmFtZSBlcnJvciBvciBicmVhayBlcnJvciAoYXQgbGVhc3Qgb25lIG9mIDMgYml0cywgQklGIChVQVJUX0ZJRk9TVFNbNl0pLCBGRUYgKFVBUlRfRklGT1NUU1s1XSkgYW5kIFBFRiAoVUFSVF9GSUZPU1RTWzRdKSBpcyBzZXQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFJMU0lFTiAoVUFSVF9JTlRFTiBbMl0pIGlzIGVuYWJsZWQsIHRoZSBSTFMgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBSTFMgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkIGluIFBETUEgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUkxTIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEluIFJTLTQ4NSBmdW5jdGlvbiBtb2RlLCB0aGlzIGZpZWxkIGluY2x1ZGUgcmVjZWl2ZXIgZGV0ZWN0IGFueSBhZGRyZXNzIGJ5dGUgcmVjZWl2ZWQgYWRkcmVzcyBieXRlIGNoYXJhY3RlciAoYml0OSA9IDEpIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gVUFSVCBmdW5jdGlvbiBtb2RlLCB0aGlzIGJpdCBpcyByZWFkIG9ubHkgYW5kIHJlc2V0IHRvIDAgd2hlbiBhbGwgYml0cyBvZiBCSUYoVUFSVF9GSUZPU1RTWzZdKSAsIEZFRihVQVJUX0ZJRk9TVFNbNV0pIGFuZCBQRUYoVUFSVF9GSUZPU1RTWzRdKSBhcmUgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzogSW4gUlMtNDg1IGZ1bmN0aW9uIG1vZGUsIHRoaXMgYml0IGlzIHJlYWQgb25seSBhbmQgcmVzZXQgdG8gMCB3aGVuIGFsbCBiaXRzIG9mIEJJRihVQVJUX0ZJRk9TVFNbNl0pLCBGRUYoVUFSVF9GSUZPU1RTWzVdKSwgUEVGKFVBUlRfRklGT1NUU1s0XSkgYW5kIEFERFJERVRGIChVQVJUX0ZJRk9TVFNbM10pIGFyZSBjbGVhcmVkLgorICAgICAqIHxbMTldICAgIHxIV01PRElGICAgfFBETUEgTW9kZSBNT0RFTSBJbnRlcnJ1cHQgRmxhZyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBuQ1RTIHBpbiBoYXMgc3RhdGUgY2hhbmdlIChDVFNERVRGIChVQVJUX01PREVNU1RTWzBdPTEpKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBNT0RFTUlFTiAoVUFSVF9JTlRFTiBbM10pIGlzIGVuYWJsZWQsIHRoZSBNb2RlbSBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIE1vZGVtIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IE1vZGVtIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5IGFuZCByZXNldCB0byAwIHdoZW4gdGhlIGJpdCBDVFNERVRGIChVQVJUX01PREVNU1RTWzBdKSBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSBvbiBDVFNERVRGIChVQVJUX01PREVNU1RTIFswXSkuCisgICAgICogfFsyMF0gICAgfEhXVE9JRiAgICB8UERNQSBNb2RlIFJYIFRpbWUtb3V0IEludGVycnVwdCBGbGFnIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIFJYIEZJRk8gaXMgbm90IGVtcHR5IGFuZCBubyBhY3Rpdml0aWVzIG9jY3VycmVkIGluIHRoZSBSWCBGSUZPIGFuZCB0aGUgdGltZS1vdXQgY291bnRlciBlcXVhbCB0byBUT0lDIChVQVJUX1RPVVRbNzowXSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgUlhUT0lFTiAoVUFSVF9JTlRFTiBbNF0pIGlzIGVuYWJsZWQsIHRoZSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5IGFuZCB1c2VyIGNhbiByZWFkIFVBUlRfREFUIChSWCBpcyBpbiBhY3RpdmUpIHRvIGNsZWFyIGl0LgorICAgICAqIHxbMjFdICAgIHxIV0JVRkVJRiAgfFBETUEgTW9kZSBCdWZmZXIgRXJyb3IgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgVFggb3IgUlggRklGTyBvdmVyZmxvd3MgKFRYT1ZJRiAoVUFSVF9GSUZPU1RTIFsyNF0pIG9yIFJYT1ZJRiAoVUFSVF9GSUZPU1RTWzBdKSBpcyBzZXQpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gQlVGRVJSSUYgKFVBUlRfSU5UU1RTWzVdKSBpcyBzZXQsIHRoZSB0cmFuc2ZlciBtYXliZSBpcyBub3QgY29ycmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBCVUZFUlJJRU4gKFVBUlRfSU5URU4gWzVdKSBpcyBlbmFibGVkLCB0aGUgYnVmZmVyIGVycm9yIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYnVmZmVyIGVycm9yIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgd2hlbiBib3RoIFRYT1ZJRiAoVUFSVF9GSUZPU1RTWzI0XV0pIGFuZCBSWE9WSUYgKFVBUlRfRklGT1NUU1swXSkgYXJlIGNsZWFyZWQuCisgICAgICogfFsyMl0gICAgfFRYRU5ESUYgICB8VHJhbnNtaXR0ZXIgRW1wdHkgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBUWCBGSUZPIChVQVJUX0RBVCkgaXMgZW1wdHkgYW5kIHRoZSBTVE9QIGJpdCBvZiB0aGUgbGFzdCBieXRlIGhhcyBiZWVuIHRyYW5zbWl0dGVkIChUWEVNUFRZRiAoVUFSVF9GSUZPU1RTWzI4XSkgaXMgc2V0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBUWEVORElFTiAoVUFSVF9JTlRFTlsyMl0pIGlzIGVuYWJsZWQsIHRoZSBUcmFuc21pdHRlciBFbXB0eSBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHRyYW5zbWl0dGVyIGVtcHR5IGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXR0ZXIgZW1wdHkgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIFRYIEZJRk8gaXMgbm90IGVtcHR5IG9yIHRoZSBsYXN0IGJ5dGUgdHJhbnNtaXNzaW9uIGhhcyBub3QgY29tcGxldGVkLgorICAgICAqIHxbMjZdICAgIHxIV1JMU0lOVCAgfFBETUEgTW9kZSBSZWNlaXZlIExpbmUgU3RhdHVzIEludGVycnVwdCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgUkxTSUVOIChVQVJUX0lOVEVOWzJdKSBhbmQgSFdSTFNJRihVQVJUX0lOVFNUU1sxOF0pIGFyZSBib3RoIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBSTFMgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBpbiBQRE1BIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJMUyBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGluIFBETUEgbW9kZS4KKyAgICAgKiB8WzI3XSAgICB8SFdNT0RJTlQgIHxQRE1BIE1vZGUgTU9ERU0gU3RhdHVzIEludGVycnVwdCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgTU9ERU1JRU4gKFVBUlRfSU5URU5bM10pIGFuZCBIV01PRElGKFVBUlRfSU5UU1RTWzE5XSkgYXJlIGJvdGggc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIE1vZGVtIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNb2RlbSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGluIFBETUEgbW9kZS4KKyAgICAgKiB8WzI4XSAgICB8SFdUT0lOVCAgIHxQRE1BIE1vZGUgUlggVGltZS1vdXQgSW50ZXJydXB0IEluZGljYXRvciAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBSWFRPSUVOIChVQVJUX0lOVEVOWzRdKSBhbmQgSFdUT0lGKFVBUlRfSU5UU1RTWzIwXSkgYXJlIGJvdGggc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFJYIHRpbWUtb3V0IGludGVycnVwdCBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGluIFBETUEgbW9kZS4KKyAgICAgKiB8WzI5XSAgICB8SFdCVUZFSU5UIHxQRE1BIE1vZGUgQnVmZmVyIEVycm9yIEludGVycnVwdCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgQlVGRVJSSUVOIChVQVJUX0lOVEVOWzVdKSBhbmQgSFdCVUZFSUYgKFVBUlRfSU5UU1RTWzIxXSkgYXJlIGJvdGggc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGJ1ZmZlciBlcnJvciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGluIFBETUEgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnVmZmVyIGVycm9yIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgaW4gUERNQSBtb2RlLgorICAgICAqIHxbMzBdICAgIHxUWEVORElOVCAgfFRyYW5zbWl0dGVyIEVtcHR5IEludGVycnVwdCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgVFhFTkRJRU4gKFVBUlRfSU5URU5bMjJdKSBhbmQgVFhFTkRJRihVQVJUX0lOVFNUU1syMl0pIGFyZSBib3RoIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBUcmFuc21pdHRlciBFbXB0eSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdHRlciBFbXB0eSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHxbMzFdICAgIHxBQlJJTlQgICAgfEF1dG8tYmF1ZCBSYXRlIEludGVycnVwdCBJbmRpY2F0b3IgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgaWYgQUJSSUVOIChVQVJUX0lOVEVOWzE4XSkgYW5kIEFCUklGIChVQVJUX0FMVENUTFsxN10pIGFyZSBib3RoIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBBdXRvLWJhdWQgUmF0ZSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgQXV0by1iYXVkIFJhdGUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAgICAgKiBAdmFyIFVBUlRfVDo6VE9VVAorICAgICAqIE9mZnNldDogMHgyMCAgVUFSVCBUaW1lLW91dCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfFRPSUMgICAgICB8VGltZS1vdXQgSW50ZXJydXB0IENvbXBhcmF0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdGltZS1vdXQgY291bnRlciByZXNldHMgYW5kIHN0YXJ0cyBjb3VudGluZyAodGhlIGNvdW50aW5nIGNsb2NrID0gYmF1ZCByYXRlKSB3aGVuZXZlciB0aGUgUlggRklGTyByZWNlaXZlcyBhIG5ldyBkYXRhIHdvcmQgaWYgdGltZSBvdXQgY291bnRlciBpcyBlbmFibGVkIGJ5IHNldHRpbmcgVE9DTlRFTiAoVUFSVF9JTlRFTlsxMV0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE9uY2UgdGhlIGNvbnRlbnQgb2YgdGltZS1vdXQgY291bnRlciBpcyBlcXVhbCB0byB0aGF0IG9mIHRpbWUtb3V0IGludGVycnVwdCBjb21wYXJhdG9yIChUT0lDIChVQVJUX1RPVVRbNzowXSkpLCBhIHJlY2VpdmVyIHRpbWUtb3V0IGludGVycnVwdCAoUlhUT0lOVChVQVJUX0lOVFNUU1sxMl0pKSBpcyBnZW5lcmF0ZWQgaWYgUlhUT0lFTiAoVUFSVF9JTlRFTiBbNF0pIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSBuZXcgaW5jb21pbmcgZGF0YSB3b3JkIG9yIFJYIEZJRk8gZW1wdHkgd2lsbCBjbGVhciBSWFRPSUYgKFVBUlRfSU5UU1RTWzRdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvcmRlciB0byBhdm9pZCByZWNlaXZlciB0aW1lLW91dCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBpbW1lZGlhdGVseSBkdXJpbmcgb25lIGNoYXJhY3RlciBpcyBiZWluZyByZWNlaXZlZCwgVE9JQyB2YWx1ZSBzaG91bGQgYmUgc2V0IGJldHdlZW4gNDAgYW5kIDI1NS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTbywgZm9yIGV4YW1wbGUsIGlmIFRPSUMgaXMgc2V0IHdpdGggNDAsIHRoZSB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGFmdGVyIGZvdXIgY2hhcmFjdGVycyBhcmUgbm90IHJlY2VpdmVkIHdoZW4gMSBzdG9wIGJpdCBhbmQgbm8gcGFyaXR5IGNoZWNrIGlzIHNldCBmb3IgVUFSVCB0cmFuc2Zlci4KKyAgICAgKiB8WzE1OjhdICB8RExZICAgICAgIHxUWCBEZWxheSBUaW1lIFZhbHVlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIHByb2dyYW1taW5nIHRoZSB0cmFuc2ZlciBkZWxheSB0aW1lIGJldHdlZW4gdGhlIGxhc3Qgc3RvcCBiaXQgYW5kIG5leHQgc3RhcnQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB1bml0IGlzIGJpdCB0aW1lLgorICAgICAqIEB2YXIgVUFSVF9UOjpCQVVECisgICAgICogT2Zmc2V0OiAweDI0ICBVQVJUIEJhdWQgUmF0ZSBEaXZpZGVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8QlJEICAgICAgIHxCYXVkIFJhdGUgRGl2aWRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBmaWVsZCBpbmRpY2F0ZXMgdGhlIGJhdWQgcmF0ZSBkaXZpZGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmlsZWQgaXMgdXNlZCBpbiBiYXVkIHJhdGUgY2FsY3VsYXRpb24uCisgICAgICogfFsyNzoyNF0gfEVESVZNMSAgICB8RXh0cmEgRGl2aWRlciBmb3IgQkFVRCBSYXRlIE1vZGUgMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgYmF1ZCByYXRlIGNhbGN1bGF0aW9uIGluIG1vZGUgMSBhbmQgaGFzIG5vIGVmZmVjdCBmb3IgYmF1ZCByYXRlIGNhbGN1bGF0aW9uIGluIG1vZGUgMCBhbmQgbW9kZSAyLgorICAgICAqIHxbMjhdICAgIHxCQVVETTAgICAgfEJBVUQgUmF0ZSBNb2RlIFNlbGVjdGlvbiBCaXQgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGJhdWQgcmF0ZSBtb2RlIHNlbGVjdGlvbiBiaXQgMAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVBUlQgcHJvdmlkZXMgdGhyZWUgYmF1ZCByYXRlIGNhbGN1bGF0aW9uIG1vZGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbWJpbmVzIHdpdGggQkFVRE0xIChVQVJUX0JBVURbMjldKSB0byBzZWxlY3QgYmF1ZCByYXRlIGNhbGN1bGF0aW9uIG1vZGUuCisgICAgICogfFsyOV0gICAgfEJBVURNMSAgICB8QkFVRCBSYXRlIE1vZGUgU2VsZWN0aW9uIEJpdCAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgYmF1ZCByYXRlIG1vZGUgc2VsZWN0aW9uIGJpdCAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVBUlQgcHJvdmlkZXMgdGhyZWUgYmF1ZCByYXRlIGNhbGN1bGF0aW9uIG1vZGVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbWJpbmVzIHdpdGggQkFVRE0wIChVQVJUX0JBVURbMjhdKSB0byBzZWxlY3QgYmF1ZCByYXRlIGNhbGN1bGF0aW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gSXJEQSBtb2RlIG11c3QgYmUgb3BlcmF0ZWQgaW4gbW9kZSAwLgorICAgICAqIEB2YXIgVUFSVF9UOjpJUkRBCisgICAgICogT2Zmc2V0OiAweDI4ICBVQVJUIElyREEgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxXSAgICAgfFRYRU4gICAgICB8SXJEQSBSZWNlaXZlci9UcmFuc21pdHRlciBTZWxlY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJckRBIFRyYW5zbWl0dGVyIERpc2FibGVkIGFuZCBSZWNlaXZlciBFbmFibGVkLiAoRGVmYXVsdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSXJEQSBUcmFuc21pdHRlciBFbmFibGVkIGFuZCBSZWNlaXZlciBEaXNhYmxlZC4KKyAgICAgKiB8WzVdICAgICB8VFhJTlYgICAgIHxJckRBIEludmVyc2UgVHJhbnNtaXR0aW5nIE91dHB1dCBTaWduYWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9uZSBpbnZlcnNlIHRyYW5zbWl0dGluZyBzaWduYWwuIChEZWZhdWx0KS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW52ZXJzZSB0cmFuc21pdHRpbmcgb3V0cHV0IHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmVmb3JlIHNldHRpbmcgdGhpcyBiaXQsIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgc2hvdWxkIGJlIHNldCB0aGVuIHdhaXRlZCBmb3IgVFhSWEFDVCAoVUFSVF9GSUZPU1RTWzMxXSkgaXMgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBjb25maWd1cmF0aW9uIGlzIGRvbmUsIGNsZWFyZWQgVFhSWERJUyAoVUFSVF9GVU5DU0VMWzNdKSB0byBhY3RpdmF0ZSBVQVJUIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHZhbGlkIHdoZW4gRlVOQ1NFTCAoVUFSVF9GVU5DU0VMWzE6MF0pIGlzIHNlbGVjdCBJckRBIGZ1bmN0aW9uLgorICAgICAqIHxbNl0gICAgIHxSWElOViAgICAgfElyREEgSW52ZXJzZSBSZWNlaXZlIElucHV0IFNpZ25hbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBOb25lIGludmVyc2UgcmVjZWl2aW5nIGlucHV0IHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW52ZXJzZSByZWNlaXZpbmcgaW5wdXQgc2lnbmFsLiAoRGVmYXVsdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogQmVmb3JlIHNldHRpbmcgdGhpcyBiaXQsIFRYUlhESVMgKFVBUlRfRlVOQ1NFTFszXSkgc2hvdWxkIGJlIHNldCB0aGVuIHdhaXRlZCBmb3IgVFhSWEFDVCAoVUFSVF9GSUZPU1RTWzMxXSkgaXMgY2xlYXJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBjb25maWd1cmF0aW9uIGlzIGRvbmUsIGNsZWFyZWQgVFhSWERJUyAoVUFSVF9GVU5DU0VMWzNdKSB0byBhY3RpdmF0ZSBVQVJUIGNvbnRyb2xsZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGlzIHZhbGlkIHdoZW4gRlVOQ1NFTCAoVUFSVF9GVU5DU0VMWzE6MF0pIGlzIHNlbGVjdCBJckRBIGZ1bmN0aW9uLgorICAgICAqIEB2YXIgVUFSVF9UOjpBTFRDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MkMgIFVBUlQgQWx0ZXJuYXRlIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8QlJLRkwgICAgIHxVQVJUIExJTiBCcmVhayBGaWVsZCBMZW5ndGgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyBhIDQtYml0IExJTiBUWCBicmVhayBmaWVsZCBjb3VudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBicmVhayBmaWVsZCBsZW5ndGggaXMgQlJLRkwgKyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBBY2NvcmRpbmcgdG8gTElOIHNwZWMsIHRoZSByZXNldCB2YWx1ZSBpcyAweEMgKGJyZWFrIGZpZWxkIGxlbmd0aCA9IDEzKS4KKyAgICAgKiB8WzZdICAgICB8TElOUlhFTiAgIHxMSU4gUlggRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSU4gUlggbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIFJYIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8WzddICAgICB8TElOVFhFTiAgIHxMSU4gVFggQnJlYWsgTW9kZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJTiBUWCBCcmVhayBtb2RlIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMSU4gVFggQnJlYWsgbW9kZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFdoZW4gVFggYnJlYWsgZmllbGQgdHJhbnNmZXIgb3BlcmF0aW9uIGZpbmlzaGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzhdICAgICB8UlM0ODVOTU0gIHxSUy00ODUgTm9ybWFsIE11bHRpLWRyb3AgT3BlcmF0aW9uIE1vZGUgKE5NTSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlMtNDg1IE5vcm1hbCBNdWx0aS1kcm9wIE9wZXJhdGlvbiBtb2RlIChOTU0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSUy00ODUgTm9ybWFsIE11bHRpLWRyb3AgT3BlcmF0aW9uIG1vZGUgKE5NTSkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBjYW5ub3QgYmUgYWN0aXZlIHdpdGggUlMtNDg1X0FBRCBvcGVyYXRpb24gbW9kZS4KKyAgICAgKiB8WzldICAgICB8UlM0ODVBQUQgIHxSUy00ODUgQXV0byBBZGRyZXNzIERldGVjdGlvbiBPcGVyYXRpb24gTW9kZSAoQUFEKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSUy00ODUgQXV0byBBZGRyZXNzIERldGVjdGlvbiBPcGVyYXRpb24gbW9kZSAoQUFEKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlMtNDg1IEF1dG8gQWRkcmVzcyBEZXRlY3Rpb24gT3BlcmF0aW9uIG1vZGUgKEFBRCkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBjYW5ub3QgYmUgYWN0aXZlIHdpdGggUlMtNDg1X05NTSBvcGVyYXRpb24gbW9kZS4KKyAgICAgKiB8WzEwXSAgICB8UlM0ODVBVUQgIHxSUy00ODUgQXV0byBEaXJlY3Rpb24gRnVuY3Rpb24gKEFVRCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUlMtNDg1IEF1dG8gRGlyZWN0aW9uIE9wZXJhdGlvbiBmdW5jdGlvbiAoQVVEKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUlMtNDg1IEF1dG8gRGlyZWN0aW9uIE9wZXJhdGlvbiBmdW5jdGlvbiAoQVVEKSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGNhbiBiZSBhY3RpdmUgd2l0aCBSUy00ODVfQUFEIG9yIFJTLTQ4NV9OTU0gb3BlcmF0aW9uIG1vZGUuCisgICAgICogfFsxNV0gICAgfEFERFJERU4gICB8UlMtNDg1IEFkZHJlc3MgRGV0ZWN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB1c2VkIHRvIGVuYWJsZSBSUy00ODUgQWRkcmVzcyBEZXRlY3Rpb24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQWRkcmVzcyBkZXRlY3Rpb24gbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQWRkcmVzcyBkZXRlY3Rpb24gbW9kZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHVzZWQgZm9yIFJTLTQ4NSBhbnkgb3BlcmF0aW9uIG1vZGUuCisgICAgICogfFsxN10gICAgfEFCUklGICAgICB8QXV0by1iYXVkIFJhdGUgSW50ZXJydXB0IEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBhdXRvLWJhdWQgcmF0ZSBkZXRlY3Rpb24gZnVuY3Rpb24gZmluaXNoZWQgb3IgdGhlIGF1dG8tYmF1ZCByYXRlIGNvdW50ZXIgd2FzIG92ZXJmbG93IGFuZCBpZiBBQlJJRU4oVUFSVF9JTlRFTiBbMThdKSBpcyBzZXQgdGhlbiB0aGUgYXV0by1iYXVkIHJhdGUgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBhdXRvLWJhdWQgcmF0ZSBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEF1dG8tYmF1ZCByYXRlIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHksIGJ1dCBpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gQUJSRFRPSUYgKFVBUlRfRklGT1NUU1syXSkgYW5kIEFCUkRJRihVQVJUX0ZJRk9TVFNbMV0pLgorICAgICAqIHxbMThdICAgIHxBQlJERU4gICAgfEF1dG8tYmF1ZCBSYXRlIERldGVjdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tYmF1ZCByYXRlIGRldGVjdCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0by1iYXVkIHJhdGUgZGV0ZWN0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZSA6IFRoaXMgYml0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBhdXRvLWJhdWQgZGV0ZWN0aW9uIGlzIGZpbmlzaGVkLgorICAgICAqIHxbMjA6MTldIHxBQlJEQklUUyAgfEF1dG8tYmF1ZCBSYXRlIERldGVjdCBCaXQgTGVuZ3RoCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSAxLWJpdCB0aW1lIGZyb20gU3RhcnQgYml0IHRvIHRoZSAxc3QgcmlzaW5nIGVkZ2UuIFRoZSBpbnB1dCBwYXR0ZXJuIHNoYWxsIGJlIDB4MDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSAyLWJpdCB0aW1lIGZyb20gU3RhcnQgYml0IHRvIHRoZSAxc3QgcmlzaW5nIGVkZ2UuIFRoZSBpbnB1dCBwYXR0ZXJuIHNoYWxsIGJlIDB4MDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSA0LWJpdCB0aW1lIGZyb20gU3RhcnQgYml0IHRvIHRoZSAxc3QgcmlzaW5nIGVkZ2UuIFRoZSBpbnB1dCBwYXR0ZXJuIHNoYWxsIGJlIDB4MDguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSA4LWJpdCB0aW1lIGZyb20gU3RhcnQgYml0IHRvIHRoZSAxc3QgcmlzaW5nIGVkZ2UuIFRoZSBpbnB1dCBwYXR0ZXJuIHNoYWxsIGJlIDB4ODAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZSA6IFRoZSBjYWxjdWxhdGlvbiBvZiBiaXQgbnVtYmVyIGluY2x1ZGVzIHRoZSBTVEFSVCBiaXQuCisgICAgICogfFszMToyNF0gfEFERFJNViAgICB8QWRkcmVzcyBNYXRjaCBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY29udGFpbnMgdGhlIFJTLTQ4NSBhZGRyZXNzIG1hdGNoIHZhbHVlcy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIFJTLTQ4NSBhdXRvIGFkZHJlc3MgZGV0ZWN0aW9uIG1vZGUuCisgICAgICogQHZhciBVQVJUX1Q6OkZVTkNTRUwKKyAgICAgKiBPZmZzZXQ6IDB4MzAgIFVBUlQgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8RlVOQ1NFTCAgIHxGdW5jdGlvbiBTZWxlY3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFVBUlQgZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBMSU4gZnVuY3Rpb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBJckRBIGZ1bmN0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gUlMtNDg1IGZ1bmN0aW9uLgorICAgICAqIHxbM10gICAgIHxUWFJYRElTICAgfFRYIGFuZCBSWCBEaXNhYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgdGhpcyBiaXQgY2FuIGRpc2FibGUgVFggYW5kIFJYLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUWCBhbmQgUlggRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVFggYW5kIFJYIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBUWCBhbmQgUlggd2lsbCBub3QgZGlzYWJsZSBpbW1lZGlhdGVseSB3aGVuIHRoaXMgYml0IGlzIHNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVFggYW5kIFJYIGNvbXBsZXRlIGN1cnJlbnQgdGFzayBiZWZvcmUgZGlzYWJsZSBUWCBhbmQgUlguCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBUWCBhbmQgUlggZGlzYWJsZSwgdGhlIFRYUlhBQ1QgKFVBUlRfRklGT1NUU1szMV0pIGlzIGNsZWFyZWQuCisgICAgICogQHZhciBVQVJUX1Q6OkxJTkNUTAorICAgICAqIE9mZnNldDogMHgzNCAgVUFSVCBMSU4gQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNMVkVOICAgICB8TElOIFNsYXZlIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSU4gc2xhdmUgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIHNsYXZlIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8U0xWSERFTiAgIHxMSU4gU2xhdmUgSGVhZGVyIERldGVjdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJTiBzbGF2ZSBoZWFkZXIgZGV0ZWN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMSU4gc2xhdmUgaGVhZGVyIGRldGVjdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBvbmx5IHZhbGlkIHdoZW4gaW4gTElOIHNsYXZlIG1vZGUgKFNMVkVOIChVQVJUX0xJTkNUTFswXSkgPSAxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSW4gTElOIGZ1bmN0aW9uIG1vZGUsIHdoZW4gZGV0ZWN0IGhlYWRlciBmaWVsZCAoYnJlYWsgKyBzeW5jICsgZnJhbWUgSUQpLCBTTFZIREVURiAoVUFSVF9MSU5TVFMgWzBdKSBmbGFnIHdpbGwgYmUgYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIExJTklFTiAoVUFSVF9JTlRFTls4XSkgPSAxLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfFsyXSAgICAgfFNMVkFSRU4gICB8TElOIFNsYXZlIEF1dG9tYXRpYyBSZXN5bmNocm9uaXphdGlvbiBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTElOIGF1dG9tYXRpYyByZXN5bmNocm9uaXphdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIGF1dG9tYXRpYyByZXN5bmNocm9uaXphdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBvbmx5IHZhbGlkIHdoZW4gaW4gTElOIHNsYXZlIG1vZGUgKFNMVkVOIChVQVJUX0xJTkNUTFswXSkgPSAxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogV2hlbiBvcGVyYXRpb24gaW4gQXV0b21hdGljIFJlc3luY2hyb25pemF0aW9uIG1vZGUsIHRoZSBiYXVkIHJhdGUgc2V0dGluZyBtdXN0IGJlIG1vZGUyIChCQVVETTEgKFVBUlRfQkFVRCBbMjldKSBhbmQgQkFVRE0wIChVQVJUX0JBVUQgWzI4XSkgbXVzdCBiZSAxKS4KKyAgICAgKiB8WzNdICAgICB8U0xWRFVFTiAgIHxMSU4gU2xhdmUgRGl2aWRlciBVcGRhdGUgTWV0aG9kIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVUFSVF9CQVVEIHVwZGF0ZWQgaXMgd3JpdHRlbiBieSBzb2Z0d2FyZSAoaWYgbm8gYXV0b21hdGljIHJlc3luY2hyb25pemF0aW9uIHVwZGF0ZSBvY2N1cnMgYXQgdGhlIHNhbWUgdGltZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVBUlRfQkFVRCBpcyB1cGRhdGVkIGF0IHRoZSBuZXh0IHJlY2VpdmVkIGNoYXJhY3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVzZXIgbXVzdCBzZXQgdGhlIGJpdCBiZWZvcmUgY2hlY2tzdW0gcmVjZXB0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBvbmx5IHZhbGlkIHdoZW4gaW4gTElOIHNsYXZlIG1vZGUgKFNMVkVOIChVQVJUX0xJTkNUTFswXSkgPSAxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgdXNlZCBmb3IgTElOIFNsYXZlIEF1dG9tYXRpYyBSZXN5bmNocm9uaXphdGlvbiBtb2RlLiAoZm9yIE5vbi1BdXRvbWF0aWMgUmVzeW5jaHJvbml6YXRpb24gbW9kZSwgdGhpcyBiaXQgc2hvdWxkIGJlIGtlcHQgY2xlYXJlZCkKKyAgICAgKiB8WzRdICAgICB8TVVURSAgICAgIHxMSU4gTXV0ZSBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTElOIG11dGUgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIG11dGUgbW9kZSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBleGl0IGZyb20gbXV0ZSBtb2RlIGNvbmRpdGlvbiBhbmQgZWFjaCBjb250cm9sIGFuZCBpbnRlcmFjdGlvbnMgb2YgdGhpcyBmaWVsZCBhcmUgZXhwbGFpbmVkIGluIDYuMTYuNS4xMCAoTElOIHNsYXZlIG1vZGUpLgorICAgICAqIHxbOF0gICAgIHxTRU5ESCAgICAgfExJTiBUWCBTZW5kIEhlYWRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIExJTiBUWCBoZWFkZXIgY2FuIGJlIGJyZWFrIGZpZWxkIG9yIGJyZWFrIGFuZCBzeW5jIGZpZWxkIG9yIGJyZWFrLCBzeW5jIGFuZCBmcmFtZSBJRCBmaWVsZCwgaXQgaXMgZGVwZW5kIG9uIHNldHRpbmcgSFNFTCAoVUFSVF9MSU5DVExbMjM6MjJdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2VuZCBMSU4gVFggaGVhZGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZW5kIExJTiBUWCBoZWFkZXIgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgc2hhZG93IGJpdCBvZiBMSU5UWEVOIChVQVJUX0FMVENUTCBbN10pOyB1c2VyIGNhbiByZWFkL3dyaXRlIGl0IGJ5IHNldHRpbmcgTElOVFhFTiAoVUFSVF9BTFRDVEwgWzddKSBvciBTRU5ESCAoVUFSVF9MSU5DVEwgWzhdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogV2hlbiB0cmFuc21pdHRlciBoZWFkZXIgZmllbGQgKGl0IG1heSBiZSBicmVhayBvciBicmVhayArIHN5bmMgb3IgYnJlYWsgKyBzeW5jICsgZnJhbWUgSUQgc2VsZWN0ZWQgYnkgSFNFTCAoVUFSVF9MSU5DVExbMjM6MjJdKSBmaWVsZCkgdHJhbnNmZXIgb3BlcmF0aW9uIGZpbmlzaGVkLCB0aGlzIGJpdCB3aWxsIGJlIGNsZWFyZWQgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzldICAgICB8SURQRU4gICAgIHxMSU4gSUQgUGFyaXR5IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTElOIGZyYW1lIElEIHBhcml0eSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIGZyYW1lIElEIHBhcml0eSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBjYW4gYmUgdXNlZCBmb3IgTElOIG1hc3RlciB0byBzZW5kaW5nIGhlYWRlciBmaWVsZCAoU0VOREggKFVBUlRfTElOQ1RMWzhdKSkgPSAxIGFuZCBIU0VMIChVQVJUX0xJTkNUTFsyMzoyMl0pID0gMTAgb3IgYmUgdXNlZCBmb3IgZW5hYmxlIExJTiBzbGF2ZSByZWNlaXZlZCBmcmFtZSBJRCBwYXJpdHkgY2hlY2tlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgb25seSB1c2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBoZWFkZXIgdHJhbnNtaXR0ZXIgaXMgaW4gSFNFTCAoVUFSVF9MSU5DVExbMjM6MjJdKSA9IDEwLgorICAgICAqIHxbMTBdICAgIHxCUktERVRFTiAgfExJTiBCcmVhayBEZXRlY3Rpb24gRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gZGV0ZWN0IGNvbnNlY3V0aXZlIGRvbWluYW50IGdyZWF0ZXIgdGhhbiAxMSBiaXRzLCBhbmQgYXJlIGZvbGxvd2VkIGJ5IGEgZGVsaW1pdGVyIGNoYXJhY3RlciwgdGhlIEJSS0RFVEYgKFVBUlRfTElOU1RTWzhdKSBmbGFnIGlzIHNldCBhdCB0aGUgZW5kIG9mIGJyZWFrIGZpZWxkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBMSU5JRU4gKFVBUlRfSU5URU4gWzhdKT0xLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJTiBicmVhayBkZXRlY3Rpb24gRGlzYWJsZWQgLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMSU4gYnJlYWsgZGV0ZWN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxMV0gICAgfExJTlJYT0ZGICB8TElOIFJlY2VpdmVyIERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQgKFJYT0ZGIChVQVJUX0xJTkNUTFsxMV0gKSA9IDApLCBhbGwgcmVjZWl2ZWQgYnl0ZSBkYXRhIHdpbGwgYmUgYWNjZXB0ZWQgYW5kIHN0b3JlZCBpbiB0aGUgUlggRklGTywgYW5kIGlmIHRoZSByZWNlaXZlciBpcyBkaXNhYmxlZCAoUlhPRkYgKFVBUlRfTElOQ1RMWzExXSA9IDEpLCBhbGwgcmVjZWl2ZWQgYnl0ZSBkYXRhIHdpbGwgYmUgaWdub3JlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBMSU4gcmVjZWl2ZXIgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTElOIHJlY2VpdmVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiBvcGVyYXRpbmcgaW4gTElOIGZ1bmN0aW9uIG1vZGUgKEZVTkNTRUwgKFVBUlRfRlVOQ1NFTFsxOjBdKSA9IDAxKS4KKyAgICAgKiB8WzEyXSAgICB8QklURVJSRU4gIHxCaXQgRXJyb3IgRGV0ZWN0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQml0IGVycm9yIGRldGVjdGlvbiBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQml0IGVycm9yIGRldGVjdGlvbiBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIExJTiBmdW5jdGlvbiBtb2RlLCB3aGVuIG9jY3VyIGJpdCBlcnJvciwgdGhlIEJJVEVGIChVQVJUX0xJTlNUU1s5XSkgZmxhZyB3aWxsIGJlIGFzc2VydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBMSU5JRU4gKFVBUlRfSU5URU5bOF0pID0gMSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHxbMTk6MTZdIHxCUktGTCAgICAgfExJTiBCcmVhayBGaWVsZCBMZW5ndGgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGluZGljYXRlcyBhIDQtYml0IExJTiBUWCBicmVhayBmaWVsZCBjb3VudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhlc2UgcmVnaXN0ZXJzIGFyZSBzaGFkb3cgcmVnaXN0ZXJzIG9mIEJSS0ZMIChVQVJUX0FMVENUTFszOjBdKSwgVXNlciBjYW4gcmVhZC93cml0ZSBpdCBieSBzZXR0aW5nIEJSS0ZMIChVQVJUX0FMVENUTFszOjBdKSBvciBCUktGTCAoVUFSVF9MSU5DVExbMTk6MTZdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBicmVhayBmaWVsZCBsZW5ndGggaXMgQlJLRkwgKyAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBBY2NvcmRpbmcgdG8gTElOIHNwZWMsIHRoZSByZXNldCB2YWx1ZSBpcyAxMiAoYnJlYWsgZmllbGQgbGVuZ3RoID0gMTMpLgorICAgICAqIHxbMjE6MjBdIHxCU0wgICAgICAgfExJTiBCcmVhay9TeW5jIERlbGltaXRlciBMZW5ndGgKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFRoZSBMSU4gYnJlYWsvc3luYyBkZWxpbWl0ZXIgbGVuZ3RoIGlzIDEtYml0IHRpbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBUaGUgTElOIGJyZWFrL3N5bmMgZGVsaW1pdGVyIGxlbmd0aCBpcyAyLWJpdCB0aW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gVGhlIExJTiBicmVhay9zeW5jIGRlbGltaXRlciBsZW5ndGggaXMgMy1iaXQgdGltZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFRoZSBMSU4gYnJlYWsvc3luYyBkZWxpbWl0ZXIgbGVuZ3RoIGlzIDQtYml0IHRpbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgdXNlZCBmb3IgTElOIG1hc3RlciB0byBzZW5kaW5nIGhlYWRlciBmaWVsZC4KKyAgICAgKiB8WzIzOjIyXSB8SFNFTCAgICAgIHxMSU4gSGVhZGVyIFNlbGVjdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gVGhlIExJTiBoZWFkZXIgaW5jbHVkZXMgYnJlYWsgZmllbGQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBUaGUgTElOIGhlYWRlciBpbmNsdWRlcyBicmVhayBmaWVsZCBhbmQgc3luYyBmaWVsZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFRoZSBMSU4gaGVhZGVyIGluY2x1ZGVzIGJyZWFrIGZpZWxkLCBzeW5jIGZpZWxkIGFuZCBmcmFtZSBJRCBmaWVsZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHVzZWQgdG8gbWFzdGVyIG1vZGUgZm9yIExJTiB0byBzZW5kIGhlYWRlciBmaWVsZCAoU0VOREggKFVBUlRfTElOQ1RMIFs4XSkgPSAxKSBvciB1c2VkIHRvIHNsYXZlIHRvIGluZGljYXRlcyBleGl0IGZyb20gbXV0ZSBtb2RlIGNvbmRpdGlvbiAoTVVURSAoVUFSVF9MSU5DVExbNF0gPSAxKS4KKyAgICAgKiB8WzMxOjI0XSB8UElEICAgICAgIHxMSU4gUElEIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBMSU4gZnJhbWUgSUQgdmFsdWUgd2hlbiBpbiBMSU4gZnVuY3Rpb24gbW9kZSwgdGhlIGZyYW1lIElEIHBhcml0eSBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHNvZnR3YXJlIG9yIGhhcmR3YXJlIGRlcGVuZHMgb24gSURQRU4gKFVBUlRfTElOQ1RMWzldKSA9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHBhcml0eSBnZW5lcmF0ZWQgYnkgaGFyZHdhcmUsIHVzZXIgZmlsbCBJRDB+SUQ1IChQSUQgWzI5OjI0XSApLCBoYXJkd2FyZSB3aWxsIGNhbGN1bGF0ZSBQMCAoUElEWzMwXSkgYW5kIFAxIChQSURbMzFdKSwgb3RoZXJ3aXNlIHVzZXIgbXVzdCBmaWxsZWQgZnJhbWUgSUQgYW5kIHBhcml0eSBpbiB0aGlzIGZpZWxkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBVc2VyIGNhbiBmaWxsIGFueSA4LWJpdCB2YWx1ZSB0byB0aGlzIGZpZWxkIGFuZCB0aGUgYml0IDI0IGluZGljYXRlcyBJRDAgKExTQiBmaXJzdCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgZmllbGQgY2FuIGJlIHVzZWQgZm9yIExJTiBtYXN0ZXIgbW9kZSBvciBzbGF2ZSBtb2RlLgorICAgICAqIEB2YXIgVUFSVF9UOjpMSU5TVFMKKyAgICAgKiBPZmZzZXQ6IDB4MzggIFVBUlQgTElOIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNMVkhERVRGICB8TElOIFNsYXZlIEhlYWRlciBEZXRlY3Rpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGEgTElOIGhlYWRlciBpcyBkZXRlY3RlZCBpbiBMSU4gc2xhdmUgbW9kZSBhbmQgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJTiBoZWFkZXIgbm90IGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBMSU4gaGVhZGVyIGRldGVjdGVkIChicmVhayArIHN5bmMgKyBmcmFtZSBJRCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgb25seSB2YWxpZCB3aGVuIGluIExJTiBzbGF2ZSBtb2RlIChTTFZFTiAoVUFSVF9MSU5DVEwgWzBdKSA9IDEpIGFuZCBlbmFibGUgTElOIHNsYXZlIGhlYWRlciBkZXRlY3Rpb24gZnVuY3Rpb24gKFNMVkhERU4gKFVBUlRfTElOQ1RMIFsxXSkpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBXaGVuIGVuYWJsZSBJRCBwYXJpdHkgY2hlY2sgSURQRU4gKFVBUlRfTElOQ1RMIFs5XSksIGlmIGhhcmR3YXJlIGRldGVjdCBjb21wbGV0ZSBoZWFkZXIgKGJyZWFrICsgc3luYyArIGZyYW1lIElEKSwgdGhlIFNMVkhERVRGIHdpbGwgYmUgc2V0IHdoZXRoZXIgdGhlIGZyYW1lIElEIGNvcnJlY3Qgb3Igbm90LgorICAgICAqIHxbMV0gICAgIHxTTFZIRUYgICAgfExJTiBTbGF2ZSBIZWFkZXIgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGEgTElOIGhlYWRlciBlcnJvciBpcyBkZXRlY3RlZCBpbiBMSU4gc2xhdmUgbW9kZSBhbmQgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgaGVhZGVyIGVycm9ycyBpbmNsdWRlIGJyZWFrIGRlbGltaXRlciBpcyB0b28gc2hvcnQgKGxlc3MgdGhhbiAwLjUgYml0IHRpbWUpLCBmcmFtZSBlcnJvciBpbiBzeW5jIGZpZWxkIG9yIElkZW50aWZpZXIgZmllbGQsIHN5bmMgZmllbGQgZGF0YSBpcyBub3QgMHg1NSBpbiBOb24tQXV0b21hdGljIFJlc3luY2hyb25pemF0aW9uIG1vZGUsIHN5bmMgZmllbGQgZGV2aWF0aW9uIGVycm9yIHdpdGggQXV0b21hdGljIFJlc3luY2hyb25pemF0aW9uIG1vZGUsIHN5bmMgZmllbGQgbWVhc3VyZSB0aW1lLW91dCB3aXRoIEF1dG9tYXRpYyBSZXN5bmNocm9uaXphdGlvbiBtb2RlIGFuZCBMSU4gaGVhZGVyIHJlY2VwdGlvbiB0aW1lLW91dC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTElOIGhlYWRlciBlcnJvciBub3QgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJTiBoZWFkZXIgZXJyb3IgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgb25seSB2YWxpZCB3aGVuIFVBUlQgaXMgb3BlcmF0ZWQgaW4gTElOIHNsYXZlIG1vZGUgKFNMVkVOIChVQVJUX0xJTkNUTCBbMF0pID0gMSkgYW5kIGVuYWJsZXMgTElOIHNsYXZlIGhlYWRlciBkZXRlY3Rpb24gZnVuY3Rpb24gKFNMVkhERU4gKFVBUlRfTElOQ1RMIFsxXSkpLgorICAgICAqIHxbMl0gICAgIHxTTFZJRFBFRiAgfExJTiBTbGF2ZSBJRCBQYXJpdHkgRXJyb3IgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIHJlY2VpcHRlZCBmcmFtZSBJRCBwYXJpdHkgaXMgbm90IGNvcnJlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWlwdGVkIGZyYW1lIElEIHBhcml0eSBpcyBub3QgY29ycmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBvbmx5IHZhbGlkIHdoZW4gaW4gTElOIHNsYXZlIG1vZGUgKFNMVkVOIChVQVJUX0xJTkNUTCBbMF0pID0gMSkgYW5kIGVuYWJsZSBMSU4gZnJhbWUgSUQgcGFyaXR5IGNoZWNrIGZ1bmN0aW9uIElEUEVOIChVQVJUX0xJTkNUTCBbOV0pLgorICAgICAqIHxbM10gICAgIHxTTFZTWU5DRiAgfExJTiBTbGF2ZSBTeW5jIEZpZWxkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIExJTiBzeW5jIGZpZWxkIGlzIGJlaW5nIGFuYWx5emVkIGluIEF1dG9tYXRpYyBSZXN5bmNocm9uaXphdGlvbiBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIHJlY2VpdmVyIGhlYWRlciBoYXZlIHNvbWUgZXJyb3IgYmVlbiBkZXRlY3QsIHVzZXIgbXVzdCByZXNldCB0aGUgaW50ZXJuYWwgY2lyY3VpdCB0byByZS1zZWFyY2ggbmV3IGZyYW1lIGhlYWRlciBieSB3cml0aW5nIDEgdG8gdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBub3QgYXQgTElOIHN5bmMgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhdCBMSU4gc3luYyBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgb25seSB2YWxpZCB3aGVuIGluIExJTiBTbGF2ZSBtb2RlIChTTFZFTihVQVJUX0xJTkNUTFswXSkgPSAxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBXaGVuIHdyaXRpbmcgMSB0byBpdCwgaGFyZHdhcmUgd2lsbCByZWxvYWQgdGhlIGluaXRpYWwgYmF1ZCByYXRlIGFuZCByZS1zZWFyY2ggYSBuZXcgZnJhbWUgaGVhZGVyLgorICAgICAqIHxbOF0gICAgIHxCUktERVRGICAgfExJTiBCcmVhayBEZXRlY3Rpb24gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGEgYnJlYWsgaXMgZGV0ZWN0ZWQgYW5kIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0IHRocm91Z2ggc29mdHdhcmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IExJTiBicmVhayBub3QgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExJTiBicmVhayBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBvbmx5IHZhbGlkIHdoZW4gTElOIGJyZWFrIGRldGVjdGlvbiBmdW5jdGlvbiBpcyBlbmFibGVkIChCUktERVRFTiAoVUFSVF9MSU5DVExbMTBdKSA9IDEpLgorICAgICAqIHxbOV0gICAgIHxCSVRFRiAgICAgfEJpdCBFcnJvciBEZXRlY3QgU3RhdHVzIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBdCBUWCB0cmFuc2ZlciBzdGF0ZSwgaGFyZHdhcmUgd2lsbCBtb25pdG9yIHRoZSBidXMgc3RhdGUsIGlmIHRoZSBpbnB1dCBwaW4gKFVBUlRfUlhEKSBzdGF0ZSBub3QgZXF1YWxzIHRvIHRoZSBvdXRwdXQgcGluIChVQVJUX1RYRCkgc3RhdGUsIEJJVEVGIChVQVJUX0xJTlNUU1s5XSkgd2lsbCBiZSBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBvY2N1ciBiaXQgZXJyb3IsIGlmIHRoZSBMSU5JRU4gKFVBUlRfSU5URU5bOF0pID0gMSwgYW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCaXQgZXJyb3Igbm90IGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCaXQgZXJyb3IgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaXMgb25seSB2YWxpZCB3aGVuIGVuYWJsZSBiaXQgZXJyb3IgZGV0ZWN0aW9uIGZ1bmN0aW9uIChCSVRFUlJFTiAoVUFSVF9MSU5DVEwgWzEyXSkgPSAxKS4KKyAgICAgKiBAdmFyIFVBUlRfVDo6QlJDT01QCisgICAgICogT2Zmc2V0OiAweDNDICBVQVJUIEJhdWQgUmF0ZSBDb21wZW5zYXRpb24gUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbODowXSAgIHxCUkNPTVAgICAgfEJhdWQgUmF0ZSBDb21wZW5zYXRpb24gUGF0dGVuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgOS1iaXRzIGFyZSB1c2VkIHRvIGRlZmluZSB0aGUgcmVsYXRpdmUgYml0IGlzIGNvbXBlbnNhdGVkIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxCUkNPTVBbNzowXSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgY29tcGVuc2F0aW9uIG9mIFVBUlRfREFUWzc6MF0gYW5kIEJSQ09NUFs4XSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgcGFyaXR5IGJpdC4KKyAgICAgKiB8WzMxXSAgICB8QlJDT01QREVDIHxCYXVkIFJhdGUgQ29tcGVuc2F0aW9uIERlY3JlYXNlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvc2l0aXZlIChpbmNyZWFzZSBvbmUgbW9kdWxlIGNsb2NrKSBjb21wZW5zYXRpb24gZm9yIGVhY2ggY29tcGVuc2F0ZWQgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBOZWdhdGl2ZSAoZGVjcmVhc2Ugb25lIG1vZHVsZSBjbG9jaykgY29tcGVuc2F0aW9uIGZvciBlYWNoIGNvbXBlbnNhdGVkIGJpdC4KKyAgICAgKiBAdmFyIFVBUlRfVDo6V0tDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NDAgIFVBUlQgV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8V0tDVFNFTiAgIHxuQ1RTIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBuQ1RTIFdha2UtdXAgc3lzdGVtIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBuQ1RTIFdha2UtdXAgc3lzdGVtIGZ1bmN0aW9uIEVuYWJsZWQsIHdoZW4gdGhlIHN5c3RlbSBpcyBpbiBQb3dlci1kb3duIG1vZGUsIGFuIGV4dGVybmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfG5DVFMgY2hhbmdlIHdpbGwgd2FrZS11cCBzeXN0ZW0gZnJvbSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfFsxXSAgICAgfFdLREFURU4gICB8SW5jb21pbmcgRGF0YSBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW5jb21pbmcgZGF0YSB3YWtlLXVwIHN5c3RlbSBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW5jb21pbmcgZGF0YSB3YWtlLXVwIHN5c3RlbSBmdW5jdGlvbiBFbmFibGVkLCB3aGVuIHRoZSBzeXN0ZW0gaXMgaW4gUG93ZXItZG93biBtb2RlLC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxpbmNvbWluZyBkYXRhIHdpbGwgd2FrZS11cCBzeXN0ZW0gZnJvbSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfFsyXSAgICAgfFdLUkZSVEVOICB8UmVjZWl2ZWQgRGF0YSBGSUZPIFJlYWNoZWQgVGhyZXNob2xkIFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlZCBEYXRhIEZJRk8gcmVhY2hlZCB0aHJlc2hvbGQgd2FrZS11cCBzeXN0ZW0gZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmVkIERhdGEgRklGTyByZWFjaGVkIHRocmVzaG9sZCB3YWtlLXVwIHN5c3RlbSBmdW5jdGlvbiBFbmFibGVkLCB3aGVuIHRoZSBzeXN0ZW0gaXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8aW4gUG93ZXItZG93biBtb2RlLCBSZWNlaXZlZCBEYXRhIEZJRk8gcmVhY2hlZCB0aHJlc2hvbGQgd2lsbCB3YWtlLXVwIHN5c3RlbSBmcm9tCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UG93ZXItZG93biBtb2RlLgorICAgICAqIHxbM10gICAgIHxXS1JTNDg1RU4gfFJTLTQ4NSBBZGRyZXNzIE1hdGNoIChBQUQgTW9kZSkgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJTLTQ4NSBBZGRyZXNzIE1hdGNoIChBQUQgbW9kZSkgd2FrZS11cCBzeXN0ZW0gZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJTLTQ4NSBBZGRyZXNzIE1hdGNoIChBQUQgbW9kZSkgd2FrZS11cCBzeXN0ZW0gZnVuY3Rpb24gRW5hYmxlZCwgd2hlbiB0aGUgc3lzdGVtIGlzIGluIFBvd2VyLWRvd24gbW9kZSwgUlMtNDg1IEFkZHJlc3MgTWF0Y2ggd2lsbCB3YWtlLXVwIHN5c3RlbSBmcm9tIFBvd2VyLWRvd24gbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB1c2VkIGZvciBSUy00ODUgQXV0byBBZGRyZXNzIERldGVjdGlvbiAoQUFEKSBtb2RlIGluIFJTLTQ4NSBmdW5jdGlvbiBtb2RlIGFuZCBBRERSREVOIChVQVJUX0FMVENUTFsxNV0pIGlzIHNldCB0byAxLgorICAgICAqIHxbNF0gICAgIHxXS1RPVVRFTiAgfFJlY2VpdmVkIERhdGEgRklGTyBSZWFjaGVkIFRocmVzaG9sZCBUaW1lLW91dCBXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZWQgRGF0YSBGSUZPIHJlYWNoZWQgdGhyZXNob2xkIHRpbWUtb3V0IHdha2UtdXAgc3lzdGVtIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlZCBEYXRhIEZJRk8gcmVhY2hlZCB0aHJlc2hvbGQgdGltZS1vdXQgd2FrZS11cCBzeXN0ZW0gZnVuY3Rpb24gRW5hYmxlZCwgd2hlbiB0aGUgc3lzdGVtIGlzIGluIFBvd2VyLWRvd24gbW9kZSwgUmVjZWl2ZWQgRGF0YSBGSUZPIHJlYWNoZWQgdGhyZXNob2xkIHRpbWUtb3V0IHdpbGwgd2FrZS11cCBzeXN0ZW0gZnJvbSBQb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgc3VnZ2VzdCB0aGUgZnVuY3Rpb24gaXMgZW5hYmxlZCB3aGVuIHRoZSBXS1JGUlRFTiAoVUFSVF9XS0NUTFsyXSkgaXMgc2V0IHRvIDEuCisgICAgICogQHZhciBVQVJUX1Q6OldLU1RTCisgICAgICogT2Zmc2V0OiAweDQ0ICBVQVJUIFdha2UtdXAgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8Q1RTV0tGICAgIHxuQ1RTIFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBjaGlwIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIHN0YXRlIGJ5IG5DVFMgd2FrZS11cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQ2hpcCBzdGF5cyBpbiBwb3dlci1kb3duIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDaGlwIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIHN0YXRlIGJ5IG5DVFMgd2FrZS11cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogSWYgV0tDVFNFTiAoVUFSVF9XS0NUTFswXSkgaXMgZW5hYmxlZCwgdGhlIG5DVFMgd2FrZS11cCBjYXVzZSB0aGlzIGJpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbMV0gICAgIHxEQVRXS0YgICAgfEluY29taW5nIERhdGEgV2FrZS11cCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIGNoaXAgd2FrZS11cCBmcm9tIHBvd2VyLWRvd24gc3RhdGUgYnkgZGF0YSB3YWtlLXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGlwIHN0YXlzIGluIHBvd2VyLWRvd24gc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoaXAgd2FrZS11cCBmcm9tIHBvd2VyLWRvd24gc3RhdGUgYnkgSW5jb21pbmcgRGF0YSB3YWtlLXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBJZiBXS0RBVEVOIChVQVJUX1dLQ1RMWzFdKSBpcyBlbmFibGVkLCB0aGUgSW5jb21pbmcgRGF0YSB3YWtlLXVwIGNhdXNlIHRoaXMgYml0IGlzIHNldCB0byAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFsyXSAgICAgfFJGUlRXS0YgICB8UmVjZWl2ZWQgRGF0YSBGSUZPIFJlYWNoZWQgVGhyZXNob2xkIFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBjaGlwIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIHN0YXRlIGJ5IFJlY2VpdmVkIERhdGEgRklGTyByZWFjaGVkIHRocmVzaG9sZCB3YWtlLXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGlwIHN0YXlzIGluIHBvd2VyLWRvd24gc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoaXAgd2FrZS11cCBmcm9tIHBvd2VyLWRvd24gc3RhdGUgYnkgUmVjZWl2ZWQgRGF0YSBGSUZPIFJlYWNoZWQgVGhyZXNob2xkIHdha2UtdXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIFdLUkZSVEVOIChVQVJUX1dLQ1RMWzJdKSBpcyBlbmFibGVkLCB0aGUgUmVjZWl2ZWQgRGF0YSBGSUZPIFJlYWNoZWQgVGhyZXNob2xkIHdha2UtdXAgY2F1c2UgdGhpcyBiaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzNdICAgICB8UlM0ODVXS0YgIHxSUy00ODUgQWRkcmVzcyBNYXRjaCAoQUFEIE1vZGUpIFdha2UtdXAgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBpZiBjaGlwIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIHN0YXRlIGJ5IFJTLTQ4NSBBZGRyZXNzIE1hdGNoIChBQUQgbW9kZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENoaXAgc3RheXMgaW4gcG93ZXItZG93biBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hpcCB3YWtlLXVwIGZyb20gcG93ZXItZG93biBzdGF0ZSBieSBSUy00ODUgQWRkcmVzcyBNYXRjaCAoQUFEIG1vZGUpIHdha2UtdXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIFdLUlM0ODVFTiAoVUFSVF9XS0NUTFszXSkgaXMgZW5hYmxlZCwgdGhlIFJTLTQ4NSBBZGRyZXNzIE1hdGNoIChBQUQgbW9kZSkgd2FrZS11cCBjYXVzZSB0aGlzIGJpdCBpcyBzZXQgdG8gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0LgorICAgICAqIHxbNF0gICAgIHxUT1VUV0tGICAgfFJlY2VpdmVkIERhdGEgRklGTyBUaHJlc2hvbGQgVGltZS1vdXQgV2FrZS11cCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IGlmIGNoaXAgd2FrZS11cCBmcm9tIHBvd2VyLWRvd24gc3RhdGUgYnkgUmVjZWl2ZWQgRGF0YSBGSUZPIFRocmVzaG9sZCBUaW1lLW91dCB3YWtlLXVwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBDaGlwIHN0YXlzIGluIHBvd2VyLWRvd24gc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENoaXAgd2FrZS11cCBmcm9tIHBvd2VyLWRvd24gc3RhdGUgYnkgUmVjZWl2ZWQgRGF0YSBGSUZPIHJlYWNoZWQgdGhyZXNob2xkIHRpbWUtb3V0IHdha2UtdXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IElmIFdLVE9VVEVOIChVQVJUX1dLQ1RMWzRdKSBpcyBlbmFibGVkLCB0aGUgUmVjZWl2ZWQgRGF0YSBGSUZPIHJlYWNoZWQgdGhyZXNob2xkIHRpbWUtb3V0IHdha2UtdXAgY2F1c2UgdGhpcyBiaXQgaXMgc2V0IHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiBAdmFyIFVBUlRfVDo6RFdLQ09NUAorICAgICAqIE9mZnNldDogMHg0OCAgVUFSVCBJbmNvbWluZyBEYXRhIFdha2UtdXAgQ29tcGVuc2F0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8U1RDT01QICAgIHxTdGFydCBCaXQgQ29tcGVuc2F0aW9uIFZhbHVlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBmaWVsZCBpbmRpY2F0ZSBob3cgbWFueSBjbG9jayBjeWNsZSBzZWxlY3RlZCBieSBVQVJUX0NMSyBkbyB0aGUgVUFSVCBjb250cm9sbGVyIGNhbiBnZXQgdGhlIDFzdCBiaXQgKHN0YXJ0IGJpdCkgd2hlbiB0aGUgZGV2aWNlIGlzIHdha2UtdXAgZnJvbSBwb3dlci1kb3duIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgdmFsaWQgb25seSB3aGVuIFdLREFURU4gKFVBUlRfV0tDVExbMV0pIGlzIHNldC4KKyAgICAgKi8KKworCisgICAgX19JTyB1aW50MzJfdCBEQVQ7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gVUFSVCBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFVBUlQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEZJRk87ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBVQVJUIEZJRk8gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBMSU5FOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gVUFSVCBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTU9ERU07ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMTBdIFVBUlQgTW9kZW0gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE1PREVNU1RTOyAgICAgICAgICAgICAgLyohPCBbMHgwMDE0XSBVQVJUIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBGSUZPU1RTOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAxOF0gVUFSVCBGSUZPIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5UU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMWNdIFVBUlQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRPVVQ7ICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBVQVJUIFRpbWUtb3V0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCQVVEOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyNF0gVUFSVCBCYXVkIFJhdGUgRGl2aWRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSVJEQTsgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMjhdIFVBUlQgSXJEQSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFMVENUTDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDJjXSBVQVJUIEFsdGVybmF0ZSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBGVU5DU0VMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAzMF0gVUFSVCBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTElOQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMzRdIFVBUlQgTElOIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IExJTlNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDM4XSBVQVJUIExJTiBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCUkNPTVA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzY10gVUFSVCBCYXVkIFJhdGUgQ29tcGVuc2F0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgV0tDVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNDBdIFVBUlQgV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFdLU1RTOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDQ0XSBVQVJUIFdha2UtdXAgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBEV0tDT01QOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA0OF0gVUFSVCBJbmNvbWluZyBEYXRhIFdha2UtdXAgQ29tcGVuc2F0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLworCisKK30gVUFSVF9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBVQVJUX0NPTlNUIFVBUlQgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgVUFSVCBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFVBUlRfREFUX0RBVF9Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkRBVDogREFUIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0RBVF9EQVRfTXNrICAgICAgICAgICAgICAgICAoMHhmZnVsIDw8IFVBUlRfREFUX0RBVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpEQVQ6IERBVCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0RBVF9QQVJJVFlfUG9zICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpEQVQ6IFBBUklUWSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9EQVRfUEFSSVRZX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfREFUX1BBUklUWV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6REFUOiBQQVJJVFkgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9SREFJRU5fUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFJEQUlFTiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fUkRBSUVOX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX1JEQUlFTl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBSREFJRU4gTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fVEhSRUlFTl9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBUSFJFSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX1RIUkVJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9USFJFSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogVEhSRUlFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX1JMU0lFTl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogUkxTSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9STFNJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fUkxTSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFJMU0lFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9NT0RFTUlFTl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IE1PREVNSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fTU9ERU1JRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX01PREVNSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBNT0RFTUlFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fUlhUT0lFTl9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBSWFRPSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX1JYVE9JRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9SWFRPSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogUlhUT0lFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX0JVRkVSUklFTl9Qb3MgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogQlVGRVJSSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9CVUZFUlJJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fQlVGRVJSSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IEJVRkVSUklFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9XS0lFTl9Qb3MgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFdLSUVOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fV0tJRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX1dLSUVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBXS0lFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fTElOSUVOX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBMSU5JRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX0xJTklFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9MSU5JRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogTElOSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX1RPQ05URU5fUG9zICAgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogVE9DTlRFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9UT0NOVEVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fVE9DTlRFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFRPQ05URU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9BVE9SVFNFTl9Qb3MgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IEFUT1JUU0VOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fQVRPUlRTRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX0FUT1JUU0VOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBBVE9SVFNFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fQVRPQ1RTRU5fUG9zICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBBVE9DVFNFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX0FUT0NUU0VOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9BVE9DVFNFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogQVRPQ1RTRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX1RYUERNQUVOX1BvcyAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogVFhQRE1BRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9UWFBETUFFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fVFhQRE1BRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFRYUERNQUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRFTl9SWFBETUFFTl9Qb3MgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFJYUERNQUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5URU5fUlhQRE1BRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVEVOX1JYUERNQUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBSWFBETUFFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5URU5fQUJSSUVOX1BvcyAgICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVEVOOiBBQlJJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVEVOX0FCUklFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRFTl9BQlJJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogQUJSSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVEVOX1RYRU5ESUVOX1BvcyAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRFTjogVFhFTkRJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRFTl9UWEVORElFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5URU5fVFhFTkRJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5URU46IFRYRU5ESUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPX1JYUlNUX1BvcyAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGTzogUlhSU1QgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT19SWFJTVF9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9fUlhSU1RfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk86IFJYUlNUIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT19UWFJTVF9Qb3MgICAgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk86IFRYUlNUIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9fVFhSU1RfTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPX1RYUlNUX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPOiBUWFJTVCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9fUkZJVExfUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPOiBSRklUTCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPX1JGSVRMX01zayAgICAgICAgICAgICAgKDB4ZnVsIDw8IFVBUlRfRklGT19SRklUTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGTzogUkZJVEwgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPX1JYT0ZGX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGTzogUlhPRkYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT19SWE9GRl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9fUlhPRkZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk86IFJYT0ZGIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT19SVFNUUkdMVl9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk86IFJUU1RSR0xWIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9fUlRTVFJHTFZfTXNrICAgICAgICAgICAoMHhmdWwgPDwgVUFSVF9GSUZPX1JUU1RSR0xWX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPOiBSVFNUUkdMViBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkVfV0xTX1BvcyAgICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBXTFMgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5FX1dMU19Nc2sgICAgICAgICAgICAgICAgKDB4M3VsIDw8IFVBUlRfTElORV9XTFNfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogV0xTIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5FX05TQl9Qb3MgICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogTlNCIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElORV9OU0JfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkVfTlNCX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IE5TQiBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElORV9QQkVfUG9zICAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IFBCRSBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkVfUEJFX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5FX1BCRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBQQkUgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkVfRVBFX1BvcyAgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBFUEUgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5FX0VQRV9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElORV9FUEVfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogRVBFIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5FX1NQRV9Qb3MgICAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogU1BFIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElORV9TUEVfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkVfU1BFX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IFNQRSBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElORV9CQ0JfUG9zICAgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IEJDQiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkVfQkNCX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5FX0JDQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBCQ0IgTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkVfUFNTX1BvcyAgICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBQU1MgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5FX1BTU19Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElORV9QU1NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogUFNTIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5FX1RYRElOVl9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElORTogVFhESU5WIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElORV9UWERJTlZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkVfVFhESU5WX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IFRYRElOViBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElORV9SWERJTlZfUG9zICAgICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkU6IFJYRElOViBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkVfUlhESU5WX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5FX1JYRElOVl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5FOiBSWERJTlYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX01PREVNX1JUU19Qb3MgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpNT0RFTTogUlRTIFBvc2l0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9NT0RFTV9SVFNfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTU9ERU1fUlRTX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TU9ERU06IFJUUyBNYXNrICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9NT0RFTV9SVFNBQ1RMVl9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TU9ERU06IFJUU0FDVExWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfTU9ERU1fUlRTQUNUTFZfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX01PREVNX1JUU0FDVExWX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6Ok1PREVNOiBSVFNBQ1RMViBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTU9ERU1fUlRTU1RTX1BvcyAgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6Ok1PREVNOiBSVFNTVFMgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX01PREVNX1JUU1NUU19Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9NT0RFTV9SVFNTVFNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpNT0RFTTogUlRTU1RTIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX01PREVNU1RTX0NUU0RFVEZfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpNT0RFTVNUUzogQ1RTREVURiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUFSVF9NT0RFTVNUU19DVFNERVRGX01zayAgICAgICAgKDB4MXVsIDw8IFVBUlRfTU9ERU1TVFNfQ1RTREVURl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TU9ERU1TVFM6IENUU0RFVEYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9NT0RFTVNUU19DVFNTVFNfUG9zICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TU9ERU1TVFM6IENUU1NUUyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfTU9ERU1TVFNfQ1RTU1RTX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX01PREVNU1RTX0NUU1NUU19Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6Ok1PREVNU1RTOiBDVFNTVFMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTU9ERU1TVFNfQ1RTQUNUTFZfUG9zICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6Ok1PREVNU1RTOiBDVFNBQ1RMViBQb3NpdGlvbiAgICAqLworI2RlZmluZSBVQVJUX01PREVNU1RTX0NUU0FDVExWX01zayAgICAgICAoMHgxdWwgPDwgVUFSVF9NT0RFTVNUU19DVFNBQ1RMVl9Qb3MpICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpNT0RFTVNUUzogQ1RTQUNUTFYgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfUlhPVklGX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBSWE9WSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1JYT1ZJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19SWE9WSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogUlhPVklGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX0FCUkRJRl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogQUJSRElGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19BQlJESUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfQUJSRElGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IEFCUkRJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19BQlJEVE9JRl9Qb3MgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IEFCUkRUT0lGIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfQUJSRFRPSUZfTXNrICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPU1RTX0FCUkRUT0lGX1BvcykgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBBQlJEVE9JRiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfQUREUkRFVEZfUG9zICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBBRERSREVURiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX0FERFJERVRGX01zayAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19BRERSREVURl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogQUREUkRFVEYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1BFRl9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogUEVGIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19QRUZfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfUEVGX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFBFRiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19GRUZfUG9zICAgICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IEZFRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfRkVGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPU1RTX0ZFRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBGRUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfQklGX1BvcyAgICAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBCSUYgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX0JJRl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19CSUZfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogQklGIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1JYUFRSX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogUlhQVFIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19SWFBUUl9Nc2sgICAgICAgICAgICgweDNmdWwgPDwgVUFSVF9GSUZPU1RTX1JYUFRSX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFJYUFRSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19SWEVNUFRZX1BvcyAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFJYRU1QVFkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfUlhFTVBUWV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPU1RTX1JYRU1QVFlfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBSWEVNUFRZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfUlhGVUxMX1BvcyAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBSWEZVTEwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1JYRlVMTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19SWEZVTExfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogUlhGVUxMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1RYUFRSX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogVFhQVFIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19UWFBUUl9Nc2sgICAgICAgICAgICgweDNmdWwgPDwgVUFSVF9GSUZPU1RTX1RYUFRSX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFRYUFRSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19UWEVNUFRZX1BvcyAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFRYRU1QVFkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfVFhFTVBUWV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPU1RTX1RYRU1QVFlfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBUWEVNUFRZIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfVFhGVUxMX1BvcyAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBUWEZVTEwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1RYRlVMTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19UWEZVTExfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogVFhGVUxMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1RYT1ZJRl9Qb3MgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogVFhPVklGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19UWE9WSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfVFhPVklGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFRYT1ZJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRklGT1NUU19UWEVNUFRZRl9Qb3MgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFRYRU1QVFlGIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVQVJUX0ZJRk9TVFNfVFhFTVBUWUZfTXNrICAgICAgICAoMHgxdWwgPDwgVUFSVF9GSUZPU1RTX1RYRU1QVFlGX1BvcykgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBUWEVNUFRZRiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0ZJRk9TVFNfUlhJRExFX1BvcyAgICAgICAgICAoMjkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGSUZPU1RTOiBSWElETEUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1JYSURMRV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfRklGT1NUU19SWElETEVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogUlhJRExFIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GSUZPU1RTX1RYUlhBQ1RfUG9zICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RklGT1NUUzogVFhSWEFDVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfRklGT1NUU19UWFJYQUNUX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0ZJRk9TVFNfVFhSWEFDVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZJRk9TVFM6IFRYUlhBQ1QgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX1JEQUlGX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogUkRBSUYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19SREFJRl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfUkRBSUZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFJEQUlGIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19USFJFSUZfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFRIUkVJRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfVEhSRUlGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX1RIUkVJRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBUSFJFSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfUkxTSUZfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBSTFNJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX1JMU0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19STFNJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogUkxTSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX01PREVNSUZfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogTU9ERU1JRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19NT0RFTUlGX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfTU9ERU1JRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IE1PREVNSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19SWFRPSUZfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFJYVE9JRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfUlhUT0lGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX1JYVE9JRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBSWFRPSUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfQlVGRVJSSUZfUG9zICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBCVUZFUlJJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX0JVRkVSUklGX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19CVUZFUlJJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogQlVGRVJSSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX1dLSUZfUG9zICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogV0tJRiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19XS0lGX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfV0tJRl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFdLSUYgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19MSU5JRl9Qb3MgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IExJTklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfTElOSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX0xJTklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBMSU5JRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfUkRBSU5UX1BvcyAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBSREFJTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX1JEQUlOVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19SREFJTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogUkRBSU5UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX1RIUkVJTlRfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogVEhSRUlOVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19USFJFSU5UX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfVEhSRUlOVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFRIUkVJTlQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19STFNJTlRfUG9zICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFJMU0lOVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfUkxTSU5UX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX1JMU0lOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBSTFNJTlQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfTU9ERU1JTlRfUG9zICAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBNT0RFTUlOVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX01PREVNSU5UX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19NT0RFTUlOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogTU9ERU1JTlQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX1JYVE9JTlRfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogUlhUT0lOVCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19SWFRPSU5UX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfUlhUT0lOVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFJYVE9JTlQgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19CVUZFUlJJTlRfUG9zICAgICAgICAoMTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEJVRkVSUklOVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfQlVGRVJSSU5UX01zayAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX0JVRkVSUklOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBCVUZFUlJJTlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfV0tJTlRfUG9zICAgICAgICAgICAgKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBXS0lOVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX1dLSU5UX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19XS0lOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogV0tJTlQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX0xJTklOVF9Qb3MgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogTElOSU5UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19MSU5JTlRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfTElOSU5UX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IExJTklOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19IV1JMU0lGX1BvcyAgICAgICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXUkxTSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdSTFNJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX0hXUkxTSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV1JMU0lGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdNT0RJRl9Qb3MgICAgICAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV01PRElGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXTU9ESUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19IV01PRElGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdNT0RJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXVE9JRl9Qb3MgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdUT0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19IV1RPSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfSFdUT0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXVE9JRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19IV0JVRkVJRl9Qb3MgICAgICAgICAoMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXQlVGRUlGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdCVUZFSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX0hXQlVGRUlGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV0JVRkVJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfVFhFTkRJRl9Qb3MgICAgICAgICAgKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBUWEVORElGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX1RYRU5ESUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19UWEVORElGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogVFhFTkRJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXUkxTSU5UX1BvcyAgICAgICAgICgyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdSTFNJTlQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19IV1JMU0lOVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfSFdSTFNJTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXUkxTSU5UIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19IV01PRElOVF9Qb3MgICAgICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXTU9ESU5UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdNT0RJTlRfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX0hXTU9ESU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV01PRElOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfSFdUT0lOVF9Qb3MgICAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBIV1RPSU5UIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXVE9JTlRfTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19IV1RPSU5UX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdUT0lOVCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSU5UU1RTX0hXQlVGRUlOVF9Qb3MgICAgICAgICgyOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogSFdCVUZFSU5UIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVQVJUX0lOVFNUU19IV0JVRkVJTlRfTXNrICAgICAgICAoMHgxdWwgPDwgVUFSVF9JTlRTVFNfSFdCVUZFSU5UX1BvcykgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IEhXQlVGRUlOVCBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lOVFNUU19UWEVORElOVF9Qb3MgICAgICAgICAoMzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJTlRTVFM6IFRYRU5ESU5UIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JTlRTVFNfVFhFTkRJTlRfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSU5UU1RTX1RYRU5ESU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBUWEVORElOVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JTlRTVFNfQUJSSU5UX1BvcyAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SU5UU1RTOiBBQlJJTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfSU5UU1RTX0FCUklOVF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lOVFNUU19BQlJJTlRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklOVFNUUzogQUJSSU5UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfVE9VVF9UT0lDX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OlRPVVQ6IFRPSUMgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1RPVVRfVE9JQ19Nc2sgICAgICAgICAgICAgICAoMHhmZnVsIDw8IFVBUlRfVE9VVF9UT0lDX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpUT1VUOiBUT0lDIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX1RPVVRfRExZX1BvcyAgICAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpUT1VUOiBETFkgUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9UT1VUX0RMWV9Nc2sgICAgICAgICAgICAgICAgKDB4ZmZ1bCA8PCBVQVJUX1RPVVRfRExZX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6VE9VVDogRExZIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9CQVVEX0JSRF9Qb3MgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QkFVRDogQlJEIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfQkFVRF9CUkRfTXNrICAgICAgICAgICAgICAgICgweGZmZmZ1bCA8PCBVQVJUX0JBVURfQlJEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkJBVUQ6IEJSRCBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQkFVRF9FRElWTTFfUG9zICAgICAgICAgICAgICgyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkJBVUQ6IEVESVZNMSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0JBVURfRURJVk0xX01zayAgICAgICAgICAgICAoMHhmdWwgPDwgVUFSVF9CQVVEX0VESVZNMV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpCQVVEOiBFRElWTTEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0JBVURfQkFVRE0wX1BvcyAgICAgICAgICAgICAoMjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpCQVVEOiBCQVVETTAgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9CQVVEX0JBVURNMF9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfQkFVRF9CQVVETTBfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QkFVRDogQkFVRE0wIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9CQVVEX0JBVURNMV9Qb3MgICAgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QkFVRDogQkFVRE0xIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfQkFVRF9CQVVETTFfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0JBVURfQkFVRE0xX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkJBVUQ6IEJBVURNMSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfSVJEQV9UWEVOX1BvcyAgICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklSREE6IFRYRU4gUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0lSREFfVFhFTl9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9JUkRBX1RYRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJUkRBOiBUWEVOIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0lSREFfVFhJTlZfUG9zICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpJUkRBOiBUWElOViBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9JUkRBX1RYSU5WX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfSVJEQV9UWElOVl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SVJEQTogVFhJTlYgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9JUkRBX1JYSU5WX1BvcyAgICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6SVJEQTogUlhJTlYgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfSVJEQV9SWElOVl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0lSREFfUlhJTlZfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OklSREE6IFJYSU5WIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0JSS0ZMX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogQlJLRkwgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0FMVENUTF9CUktGTF9Nc2sgICAgICAgICAgICAoMHhmdWwgPDwgVUFSVF9BTFRDVExfQlJLRkxfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IEJSS0ZMIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0FMVENUTF9MSU5SWEVOX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IExJTlJYRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9BTFRDVExfTElOUlhFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfQUxUQ1RMX0xJTlJYRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBMSU5SWEVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9BTFRDVExfTElOVFhFTl9Qb3MgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBMSU5UWEVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0xJTlRYRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0FMVENUTF9MSU5UWEVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogTElOVFhFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQUxUQ1RMX1JTNDg1Tk1NX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogUlM0ODVOTU0gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0FMVENUTF9SUzQ4NU5NTV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9BTFRDVExfUlM0ODVOTU1fUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IFJTNDg1Tk1NIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0FMVENUTF9SUzQ4NUFBRF9Qb3MgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IFJTNDg1QUFEIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9BTFRDVExfUlM0ODVBQURfTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfQUxUQ1RMX1JTNDg1QUFEX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBSUzQ4NUFBRCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9BTFRDVExfUlM0ODVBVURfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBSUzQ4NUFVRCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfQUxUQ1RMX1JTNDg1QVVEX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0FMVENUTF9SUzQ4NUFVRF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogUlM0ODVBVUQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0FERFJERU5fUG9zICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogQUREUkRFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0FMVENUTF9BRERSREVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9BTFRDVExfQUREUkRFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IEFERFJERU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0FMVENUTF9BQlJJRl9Qb3MgICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IEFCUklGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9BTFRDVExfQUJSSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfQUxUQ1RMX0FCUklGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBBQlJJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9BTFRDVExfQUJSREVOX1BvcyAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBBQlJERU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0FCUkRFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0FMVENUTF9BQlJERU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogQUJSREVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQUxUQ1RMX0FCUkRCSVRTX1BvcyAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkFMVENUTDogQUJSREJJVFMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0FMVENUTF9BQlJEQklUU19Nc2sgICAgICAgICAoMHgzdWwgPDwgVUFSVF9BTFRDVExfQUJSREJJVFNfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IEFCUkRCSVRTIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0FMVENUTF9BRERSTVZfUG9zICAgICAgICAgICAoMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpBTFRDVEw6IEFERFJNViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9BTFRDVExfQUREUk1WX01zayAgICAgICAgICAgKDB4ZmZ1bCA8PCBVQVJUX0FMVENUTF9BRERSTVZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QUxUQ1RMOiBBRERSTVYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9GVU5DU0VMX0ZVTkNTRUxfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6RlVOQ1NFTDogRlVOQ1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfRlVOQ1NFTF9GVU5DU0VMX01zayAgICAgICAgICgweDN1bCA8PCBVQVJUX0ZVTkNTRUxfRlVOQ1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZVTkNTRUw6IEZVTkNTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRlVOQ1NFTF9UWFJYRElTX1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkZVTkNTRUw6IFRYUlhESVMgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0ZVTkNTRUxfVFhSWERJU19Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9GVU5DU0VMX1RYUlhESVNfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpGVU5DU0VMOiBUWFJYRElTIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkNUTF9TTFZFTl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IFNMVkVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfU0xWRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOQ1RMX1NMVkVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBTTFZFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfU0xWSERFTl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBTTFZIREVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX1NMVkhERU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkNUTF9TTFZIREVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogU0xWSERFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOQ1RMX1NMVkFSRU5fUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogU0xWQVJFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9TTFZBUkVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5DVExfU0xWQVJFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IFNMVkFSRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkNUTF9TTFZEVUVOX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IFNMVkRVRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfU0xWRFVFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOQ1RMX1NMVkRVRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBTTFZEVUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfTVVURV9Qb3MgICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBNVVRFIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX01VVEVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkNUTF9NVVRFX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogTVVURSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOQ1RMX1NFTkRIX1BvcyAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogU0VOREggUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9TRU5ESF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5DVExfU0VOREhfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IFNFTkRIIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkNUTF9JRFBFTl9Qb3MgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IElEUEVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfSURQRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOQ1RMX0lEUEVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBJRFBFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfQlJLREVURU5fUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBCUktERVRFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0JSS0RFVEVOX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTkNUTF9CUktERVRFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogQlJLREVURU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOQ1RMX0xJTlJYT0ZGX1BvcyAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogTElOUlhPRkYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9MSU5SWE9GRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5DVExfTElOUlhPRkZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IExJTlJYT0ZGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkNUTF9CSVRFUlJFTl9Qb3MgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IEJJVEVSUkVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfQklURVJSRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOQ1RMX0JJVEVSUkVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBCSVRFUlJFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfQlJLRkxfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBCUktGTCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0JSS0ZMX01zayAgICAgICAgICAgICgweGZ1bCA8PCBVQVJUX0xJTkNUTF9CUktGTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogQlJLRkwgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOQ1RMX0JTTF9Qb3MgICAgICAgICAgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogQlNMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX0xJTkNUTF9CU0xfTXNrICAgICAgICAgICAgICAoMHgzdWwgPDwgVUFSVF9MSU5DVExfQlNMX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IEJTTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTkNUTF9IU0VMX1BvcyAgICAgICAgICAgICAoMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5DVEw6IEhTRUwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfSFNFTF9Nc2sgICAgICAgICAgICAgKDB4M3VsIDw8IFVBUlRfTElOQ1RMX0hTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBIU0VMIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5DVExfUElEX1BvcyAgICAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOQ1RMOiBQSUQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX1BJRF9Nc2sgICAgICAgICAgICAgICgweGZmdWwgPDwgVUFSVF9MSU5DVExfUElEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTkNUTDogUElEIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOU1RTX1NMVkhERVRGX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTlNUUzogU0xWSERFVEYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0xJTlNUU19TTFZIREVURl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5TVFNfU0xWSERFVEZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5TVFM6IFNMVkhERVRGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTlNUU19TTFZIRUZfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5TVFM6IFNMVkhFRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5TVFNfU0xWSEVGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOU1RTX1NMVkhFRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOU1RTOiBTTFZIRUYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5TVFNfU0xWSURQRUZfUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOU1RTOiBTTFZJRFBFRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfTElOU1RTX1NMVklEUEVGX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTlNUU19TTFZJRFBFRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTlNUUzogU0xWSURQRUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfTElOU1RTX1NMVlNZTkNGX1BvcyAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTlNUUzogU0xWU1lOQ0YgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVQVJUX0xJTlNUU19TTFZTWU5DRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUFSVF9MSU5TVFNfU0xWU1lOQ0ZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5TVFM6IFNMVlNZTkNGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0xJTlNUU19CUktERVRGX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpMSU5TVFM6IEJSS0RFVEYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9MSU5TVFNfQlJLREVURl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfTElOU1RTX0JSS0RFVEZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOU1RTOiBCUktERVRGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9MSU5TVFNfQklURUZfUG9zICAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6TElOU1RTOiBCSVRFRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfTElOU1RTX0JJVEVGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX0xJTlNUU19CSVRFRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkxJTlNUUzogQklURUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfQlJDT01QX0JSQ09NUF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkJSQ09NUDogQlJDT01QIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX0JSQ09NUF9CUkNPTVBfTXNrICAgICAgICAgICAoMHgxZmZ1bCA8PCBVQVJUX0JSQ09NUF9CUkNPTVBfUG9zKSAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpCUkNPTVA6IEJSQ09NUCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX0JSQ09NUF9CUkNPTVBERUNfUG9zICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpCUkNPTVA6IEJSQ09NUERFQyBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUFSVF9CUkNPTVBfQlJDT01QREVDX01zayAgICAgICAgKDB4MXVsIDw8IFVBUlRfQlJDT01QX0JSQ09NUERFQ19Qb3MpICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6QlJDT01QOiBCUkNPTVBERUMgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9XS0NUTF9XS0NUU0VOX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tDVEw6IFdLQ1RTRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfV0tDVExfV0tDVFNFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX1dLQ1RMX1dLQ1RTRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLQ1RMOiBXS0NUU0VOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfV0tDVExfV0tEQVRFTl9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLQ1RMOiBXS0RBVEVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX1dLQ1RMX1dLREFURU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9XS0NUTF9XS0RBVEVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS0NUTDogV0tEQVRFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX1dLQ1RMX1dLUkZSVEVOX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS0NUTDogV0tSRlJURU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9XS0NUTF9XS1JGUlRFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfV0tDVExfV0tSRlJURU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tDVEw6IFdLUkZSVEVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9XS0NUTF9XS1JTNDg1RU5fUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tDVEw6IFdLUlM0ODVFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVBUlRfV0tDVExfV0tSUzQ4NUVOX01zayAgICAgICAgICgweDF1bCA8PCBVQVJUX1dLQ1RMX1dLUlM0ODVFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLQ1RMOiBXS1JTNDg1RU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfV0tDVExfV0tUT1VURU5fUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLQ1RMOiBXS1RPVVRFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX1dLQ1RMX1dLVE9VVEVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9XS0NUTF9XS1RPVVRFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS0NUTDogV0tUT1VURU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX1dLU1RTX0NUU1dLRl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS1NUUzogQ1RTV0tGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9XS1NUU19DVFNXS0ZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfV0tTVFNfQ1RTV0tGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tTVFM6IENUU1dLRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9XS1NUU19EQVRXS0ZfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tTVFM6IERBVFdLRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVBUlRfV0tTVFNfREFUV0tGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVQVJUX1dLU1RTX0RBVFdLRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLU1RTOiBEQVRXS0YgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfV0tTVFNfUkZSVFdLRl9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLU1RTOiBSRlJUV0tGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVQVJUX1dLU1RTX1JGUlRXS0ZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUFSVF9XS1NUU19SRlJUV0tGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS1NUUzogUkZSVFdLRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVQVJUX1dLU1RTX1JTNDg1V0tGX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpXS1NUUzogUlM0ODVXS0YgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUFSVF9XS1NUU19SUzQ4NVdLRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVBUlRfV0tTVFNfUlM0ODVXS0ZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tTVFM6IFJTNDg1V0tGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUFSVF9XS1NUU19UT1VUV0tGX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRfVDo6V0tTVFM6IFRPVVRXS0YgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVBUlRfV0tTVFNfVE9VVFdLRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVQVJUX1dLU1RTX1RPVVRXS0ZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OldLU1RTOiBUT1VUV0tGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVBUlRfRFdLQ09NUF9TVENPTVBfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUX1Q6OkRXS0NPTVA6IFNUQ09NUCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVQVJUX0RXS0NPTVBfU1RDT01QX01zayAgICAgICAgICAoMHhmZmZmdWwgPDwgVUFSVF9EV0tDT01QX1NUQ09NUF9Qb3MpICAgICAgICAgICAgIC8qITwgVUFSVF9UOjpEV0tDT01QOiBTVENPTVAgTWFzayAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBVQVJUX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBVQVJUIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19VQVJUX1JFR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91aTJjX3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VpMmNfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkMjBiZQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91aTJjX3JlZy5oCkBAIC0wLDAgKzEsNTY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdWkyY19yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgVUkyQyByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VSTJDX1JFR19IX18KKyNkZWZpbmUgX19VSTJDX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSTJDIE1vZGUgb2YgVVNDSSBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgVUkyQyBJMkMgTW9kZSBvZiBVU0NJIENvbnRyb2xsZXIoVUkyQykKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgVUkyQyBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIFVJMkNfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwICBVU0NJIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxGVU5NT0RFICAgfEZ1bmN0aW9uIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBzZWxlY3RzIHRoZSBwcm90b2NvbCBmb3IgdGhpcyBVU0NJIGNvbnRyb2xsZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZWxlY3RpbmcgYSBwcm90b2NvbCB0aGF0IGlzIG5vdCBhdmFpbGFibGUgb3IgYSByZXNlcnZlZCBjb21iaW5hdGlvbiBkaXNhYmxlcyB0aGUgVVNDSQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc3dpdGNoaW5nIGJldHdlZW4gdHdvIHByb3RvY29scywgdGhlIFVTQ0kgaGFzIHRvIGJlIGRpc2FibGVkIGJlZm9yZSBzZWxlY3RpbmcgYSBuZXcgcHJvdG9jb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTaW11bHRhbmVvdXNseSwgdGhlIFVTQ0kgd2lsbCBiZSByZXNldCB3aGVuIHVzZXIgd3JpdGUgMDAwIHRvIEZVTk1PREUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gVGhlIFVTQ0kgaXMgZGlzYWJsZWQuIEFsbCBwcm90b2NvbCByZWxhdGVkIHN0YXRlIG1hY2hpbmVzIGFyZSBzZXQgdG8gaWRsZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBUaGUgU1BJIHByb3RvY29sIGlzIHNlbGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFRoZSBVQVJUIHByb3RvY29sIGlzIHNlbGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRoZSBJMkMgcHJvdG9jb2wgaXMgc2VsZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT3RoZXIgYml0IGNvbWJpbmF0aW9ucyBhcmUgcmVzZXJ2ZWQuCisgICAgICogQHZhciBVSTJDX1Q6OkJSR0VOCisgICAgICogT2Zmc2V0OiAweDA4ICBVU0NJIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxSQ0xLU0VMICAgfFJlZmVyZW5jZSBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2VsZWN0cyB0aGUgc291cmNlIHNpZ25hbCBvZiByZWZlcmVuY2UgY2xvY2sgKGZSRUZfQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUGVyaXBoZXJhbCBkZXZpY2UgY2xvY2sgZlBDTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2VydmVkLgorICAgICAqIHxbMV0gICAgIHxQVENMS1NFTCAgfFByb3RvY29sIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBzZWxlY3RzIHRoZSBzb3VyY2Ugc2lnbmFsIG9mIHByb3RvY29sIGNsb2NrIChmUFJPVF9DTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWZlcmVuY2UgY2xvY2sgZlJFRl9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IGZSRUZfQ0xLMiAoaXRzIGZyZXF1ZW5jeSBpcyBoYWxmIG9mIGZSRUZfQ0xLKS4KKyAgICAgKiB8WzM6Ml0gICB8U1BDTEtTRUwgIHxTYW1wbGUgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIHVzZWQgZm9yIHRoZSBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIG9mIGEgc2FtcGxlIGNsb2NrIChmU0FNUF9DTEspIGZvciB0aGUgcHJvdG9jb2wgcHJvY2Vzc29yLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gZlNBTVBfQ0xLID0gZkRJVl9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBmU0FNUF9DTEsgPSBmUFJPVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBmU0FNUF9DTEsgPSBmU0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IGZTQU1QX0NMSyA9IGZSRUZfQ0xLLgorICAgICAqIHxbNF0gICAgIHxUTUNOVEVOICAgfFRpbWUgTWVhc3VyZW1lbnQgQ291bnRlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgMTAtYml0IHRpbWluZyBtZWFzdXJlbWVudCBjb3VudGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaW1lIG1lYXN1cmVtZW50IGNvdW50ZXIgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWUgbWVhc3VyZW1lbnQgY291bnRlciBpcyBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxUTUNOVFNSQyAgfFRpbWUgTWVhc3VyZW1lbnQgQ291bnRlciBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWUgbWVhc3VyZW1lbnQgY291bnRlciB3aXRoIGZQUk9UX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZSBtZWFzdXJlbWVudCBjb3VudGVyIHdpdGggZkRJVl9DTEsuCisgICAgICogfFs5OjhdICAgfFBEU0NOVCAgICB8UHJlLWRpdmlkZXIgZm9yIFNhbXBsZSBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgZGVmaW5lcyB0aGUgZGl2aWRlIHJhdGlvIG9mIHRoZSBjbG9jayBkaXZpc2lvbiBmcm9tIHNhbXBsZSBjbG9jayBmU0FNUF9DTEsKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGl2aWRlZCBmcmVxdWVuY3kgZlBEU19DTlQgPSBmU0FNUF9DTEsgLyAoUERTQ05UKzEpLgorICAgICAqIHxbMTQ6MTBdIHxEU0NOVCAgICAgfERlbm9taW5hdG9yIGZvciBTYW1wbGUgQ291bnRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGRlZmluZXMgdGhlIGRpdmlkZSByYXRpbyBvZiB0aGUgc2FtcGxlIGNsb2NrIGZTQU1QX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGl2aWRlZCBmcmVxdWVuY3kgZkRTX0NOVCA9IGZQRFNfQ05UIC8gKERTQ05UKzEpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBtYXhpbXVtIHZhbHVlIG9mIERTQ05UIGlzIDB4RiBvbiBVQVJUIG1vZGUgYW5kIHN1Z2dlc3QgdG8gc2V0IG92ZXIgNCB0byBjb25maXJtIHRoZSByZWNlaXZlciBkYXRhIGlzIHNhbXBsZWQgaW4gcmlnaHQgdmFsdWUKKyAgICAgKiB8WzI1OjE2XSB8Q0xLRElWICAgIHxDbG9jayBEaXZpZGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgZGVmaW5lcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgcHJvdG9jb2wgY2xvY2sgZnJlcXVlbmN5IGZQUk9UX0NMSyBhbmQgdGhlIGNsb2NrIGRpdmlkZXIgZnJlcXVlbmN5IGZESVZfQ0xLIChmRElWX0NMSyA9IGZQUk9UX0NMSyAvIChDTEtESVYrMSkgKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBVQVJUIGZ1bmN0aW9uLCBpdCBjYW4gYmUgdXBkYXRlZCBieSBoYXJkd2FyZSBpbiB0aGUgNHRoIGZhbGxpbmcgZWRnZSBvZiB0aGUgaW5wdXQgZGF0YSAweDU1IHdoZW4gdGhlIGF1dG8gYmF1ZCByYXRlIGZ1bmN0aW9uIChBQlJFTihVSTJDX1BST1RDVExbNl0pKSBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJldmlzZWQgdmFsdWUgaXMgdGhlIGF2ZXJhZ2UgYml0IHRpbWUgYmV0d2VlbiBiaXQgNSBhbmQgYml0IDYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdXNlciBjYW4gdXNlIHJldmlzZWQgQ0xLRElWIGFuZCBuZXcgQlJERVRJVFYgKFVJMkNfUFJPVENUTFsyNDoxNl0pIHRvIGNhbGN1bGF0ZSB0aGUgcHJlY2lzZSBiYXVkIHJhdGUuCisgICAgICogQHZhciBVSTJDX1Q6OkxJTkVDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MkMgIFVTQ0kgTGluZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8TFNCICAgICAgIHxMU0IgRmlyc3QgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgTVNCLCB3aGljaCBiaXQgb2YgdHJhbnNtaXQvcmVjZWl2ZSBkYXRhIGJ1ZmZlciBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIERXSURUSCwgaXMgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgZmlyc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBMU0IsIHRoZSBiaXQgMCBvZiBkYXRhIGJ1ZmZlciwgd2lsbCBiZSB0cmFuc21pdHRlZC9yZWNlaXZlZCBmaXJzdC4KKyAgICAgKiB8WzExOjhdICB8RFdJRFRIICAgIHxXb3JkIExlbmd0aCBvZiBUcmFuc21pc3Npb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBkZWZpbmVzIHRoZSBkYXRhIHdvcmQgbGVuZ3RoIChhbW91bnQgb2YgYml0cykgZm9yIHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRhdGEgd29yZCBpcyBhbHdheXMgcmlnaHQtYWxpZ25lZCBpbiB0aGUgZGF0YSBidWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVU0NJIHN1cHBvcnQgd29yZCBsZW5ndGggZnJvbSA0IHRvIDE2IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwOiBUaGUgZGF0YSB3b3JkIGNvbnRhaW5zIDE2IGJpdHMgbG9jYXRlZCBhdCBiaXQgcG9zaXRpb25zIFsxNTowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDE6IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MjogUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzOiBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDQ6IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgNCBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbMzowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDU6IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgNSBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbNDowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEY6IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgMTUgYml0cyBsb2NhdGVkIGF0IGJpdCBwb3NpdGlvbnMgWzE0OjBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFVBUlQgcHJvdG9jb2wsIHRoZSBsZW5ndGggY2FuIGJlIGNvbmZpZ3VyZWQgYXMgNn4xMyBiaXRzLgorICAgICAqIEB2YXIgVUkyQ19UOjpUWERBVAorICAgICAqIE9mZnNldDogMHgzMCAgVVNDSSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8VFhEQVQgICAgIHxUcmFuc21pdCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIHVzZSB0aGlzIGJpdCBmaWVsZCB0byB3cml0ZSAxNi1iaXQgdHJhbnNtaXQgZGF0YSBmb3IgdHJhbnNtaXNzaW9uLgorICAgICAqIEB2YXIgVUkyQ19UOjpSWERBVAorICAgICAqIE9mZnNldDogMHgzNCAgVVNDSSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxSWERBVCAgICAgfFJlY2VpdmVkIERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBtb25pdG9ycyB0aGUgcmVjZWl2ZWQgZGF0YSB3aGljaCBzdG9yZWQgaW4gcmVjZWl2ZSBkYXRhIGJ1ZmZlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlIDE6IEluIEkyQyBwcm90b2NvbCwgUlhEQVRbMTI6OF0gaW5kaWNhdGUgdGhlIGRpZmZlcmVudCB0cmFuc21pc3Npb24gY29uZGl0aW9ucyB3aGljaCBkZWZpbmVkIGluIEkyQy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlIDI6IEluIFVBUlQgcHJvdG9jb2wsIFJYREFUWzE1OjEzXSBpbmRpY2F0ZSB0aGUgc2FtZSBmcmFtZSBzdGF0dXMgb2YgQlJFQUssIEZSTUVSUiBhbmQgUEFSSVRZRVJSIChVSTJDX1BST1RTVFNbNzo1XSkuCisgICAgICogQHZhciBVSTJDX1Q6OkRFVkFERFIwCisgICAgICogT2Zmc2V0OiAweDQ0ICBVU0NJIERldmljZSBBZGRyZXNzIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbOTowXSAgIHxERVZBRERSICAgfERldmljZSAgIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBJMkMgICBwcm90b2NvbCwgdGhpcyBiaXQgZmllbGQgY29udGFpbnMgdGhlIHByb2dyYW1tZWQgc2xhdmUgYWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBmaXJzdCAgIHJlY2VpdmVkIGFkZHJlc3MgYnl0ZSBhcmUgMTExMSAwQUFYQiwgdGhlIEFBIGJpdHMgYXJlIGNvbXBhcmVkIHRvICAgdGhlIGJpdHMgREVWQUREUls5OjhdIHRvIGNoZWNrIGZvciBhZGRyZXNzIG1hdGNoLCB3aGVyZSB0aGUgWCBpcyBSL1cgYml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlbiAgIHRoZSBzZWNvbmQgYWRkcmVzcyBieXRlIGlzIGFsc28gY29tcGFyZWQgdG8gREVWQUREUls3OjBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBERVZBRERSIFs5OjddIG11c3QgYmUgc2V0IDMnYjAwMCB3aGVuIEkyQyBvcGVyYXRpbmcgaW4gICA3LWJpdCBhZGRyZXNzIG1vZGUuCisgICAgICogQHZhciBVSTJDX1Q6OkRFVkFERFIxCisgICAgICogT2Zmc2V0OiAweDQ4ICBVU0NJIERldmljZSBBZGRyZXNzIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbOTowXSAgIHxERVZBRERSICAgfERldmljZSAgIEFkZHJlc3MKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBJMkMgICBwcm90b2NvbCwgdGhpcyBiaXQgZmllbGQgY29udGFpbnMgdGhlIHByb2dyYW1tZWQgc2xhdmUgYWRkcmVzcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBmaXJzdCAgIHJlY2VpdmVkIGFkZHJlc3MgYnl0ZSBhcmUgMTExMSAwQUFYQiwgdGhlIEFBIGJpdHMgYXJlIGNvbXBhcmVkIHRvICAgdGhlIGJpdHMgREVWQUREUls5OjhdIHRvIGNoZWNrIGZvciBhZGRyZXNzIG1hdGNoLCB3aGVyZSB0aGUgWCBpcyBSL1cgYml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlbiAgIHRoZSBzZWNvbmQgYWRkcmVzcyBieXRlIGlzIGFsc28gY29tcGFyZWQgdG8gREVWQUREUls3OjBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBERVZBRERSIFs5OjddIG11c3QgYmUgc2V0IDMnYjAwMCB3aGVuIEkyQyBvcGVyYXRpbmcgaW4gICA3LWJpdCBhZGRyZXNzIG1vZGUuCisgICAgICogQHZhciBVSTJDX1Q6OkFERFJNU0swCisgICAgICogT2Zmc2V0OiAweDRDICBVU0NJIERldmljZSBBZGRyZXNzIE1hc2sgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs5OjBdICAgfEFERFJNU0sgICB8VVNDSSBEZXZpY2UgQWRkcmVzcyBNYXNrCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc2sgRGlzYWJsZWQgKHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJpdCBzaG91bGQgYmUgZXhhY3QgdGhlIHNhbWUgYXMgYWRkcmVzcyByZWdpc3Rlci4pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBNYXNrIEVuYWJsZWQgKHRoZSByZWNlaXZlZCBjb3JyZXNwb25kaW5nIGFkZHJlc3MgYml0IGlzIGRvbid0IGNhcmUuKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVU0NJIHN1cHBvcnQgbXVsdGlwbGUgYWRkcmVzcyByZWNvZ25pdGlvbiB3aXRoIHR3byBhZGRyZXNzIG1hc2sgcmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBiaXQgaW4gdGhlIGFkZHJlc3MgbWFzayByZWdpc3RlciBpcyBzZXQgdG8gb25lLCBpdCBtZWFucyB0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyBhZGRyZXNzIGJpdCBpcyBkb24ndC1jYXJlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIGJpdCBpcyBzZXQgdG8gemVybywgdGhhdCBtZWFucyB0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyByZWdpc3RlciBiaXQgc2hvdWxkIGJlIGV4YWN0IHRoZSBzYW1lIGFzIGFkZHJlc3MgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIHdha2UtdXAgZnVuY3Rpb24gY2FuIG5vdCBzZXQgYWRkcmVzcyBtYXNrLgorICAgICAqIEB2YXIgVUkyQ19UOjpBRERSTVNLMQorICAgICAqIE9mZnNldDogMHg1MCAgVVNDSSBEZXZpY2UgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyIDEKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbOTowXSAgIHxBRERSTVNLICAgfFVTQ0kgRGV2aWNlIEFkZHJlc3MgTWFzaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBNYXNrIERpc2FibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyByZWdpc3RlciBiaXQgc2hvdWxkIGJlIGV4YWN0IHRoZSBzYW1lIGFzIGFkZHJlc3MgcmVnaXN0ZXIuKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTWFzayBFbmFibGVkICh0aGUgcmVjZWl2ZWQgY29ycmVzcG9uZGluZyBhZGRyZXNzIGJpdCBpcyBkb24ndCBjYXJlLikuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VVNDSSBzdXBwb3J0IG11bHRpcGxlIGFkZHJlc3MgcmVjb2duaXRpb24gd2l0aCB0d28gYWRkcmVzcyBtYXNrIHJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgYml0IGluIHRoZSBhZGRyZXNzIG1hc2sgcmVnaXN0ZXIgaXMgc2V0IHRvIG9uZSwgaXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBiaXQgaXMgZG9uJ3QtY2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBiaXQgaXMgc2V0IHRvIHplcm8sIHRoYXQgbWVhbnMgdGhlIHJlY2VpdmVkIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYml0IHNob3VsZCBiZSBleGFjdCB0aGUgc2FtZSBhcyBhZGRyZXNzIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSB3YWtlLXVwIGZ1bmN0aW9uIGNhbiBub3Qgc2V0IGFkZHJlc3MgbWFzay4KKyAgICAgKiBAdmFyIFVJMkNfVDo6V0tDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NTQgIFVTQ0kgV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8V0tFTiAgICAgIHxXYWtlLXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV2FrZS11cCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV2FrZS11cCBmdW5jdGlvbiBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxXS0FERFJFTiAgfFdha2UtdXAgQWRkcmVzcyBNYXRjaCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBjaGlwIGlzIHdva2VuIHVwIGFjY29yZGluZyBkYXRhIHRvZ2dsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGNoaXAgaXMgd29rZW4gdXAgYWNjb3JkaW5nIGFkZHJlc3MgbWF0Y2guCisgICAgICogQHZhciBVSTJDX1Q6OldLU1RTCisgICAgICogT2Zmc2V0OiAweDU4ICBVU0NJIFdha2UtdXAgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8V0tGICAgICAgIHxXYWtlLXVwIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGNoaXAgaXMgd29rZW4gdXAgZnJvbSBQb3dlci1kb3duIG1vZGUsIHRoaXMgYml0IGlzIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogQHZhciBVSTJDX1Q6OlBST1RDVEwKKyAgICAgKiBPZmZzZXQ6IDB4NUMgIFVTQ0kgUHJvdG9jb2wgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfEdDRlVOQyAgICB8R2VuZXJhbCBDYWxsIEZ1bmN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdlbmVyYWwgQ2FsbCBGdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gR2VuZXJhbCBDYWxsIEZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfEFBICAgICAgICB8QXNzZXJ0IEFja25vd2xlZGdlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIEFBID0xIHByaW9yIHRvIGFkZHJlc3Mgb3IgZGF0YSByZWNlaXZlZCwgYW4gYWNrbm93bGVkZ2VkIChsb3cgbGV2ZWwgdG8gU0RBKSB3aWxsIGJlIHJldHVybmVkIGR1cmluZyB0aGUgYWNrbm93bGVkZ2UgY2xvY2sgcHVsc2Ugb24gdGhlIFNDTCBsaW5lIHdoZW4gMS4pIEEgc2xhdmUgaXMgYWNrbm93bGVkZ2luZyB0aGUgYWRkcmVzcyBzZW50IGZyb20gbWFzdGVyLCAyLikgVGhlIHJlY2VpdmVyIGRldmljZXMgYXJlIGFja25vd2xlZGdpbmcgdGhlIGRhdGEgc2VudCBieSB0cmFuc21pdHRlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gQUE9MCBwcmlvciB0byBhZGRyZXNzIG9yIGRhdGEgcmVjZWl2ZWQsIGEgTm90IGFja25vd2xlZGdlZCAoaGlnaCBsZXZlbCB0byBTREEpIHdpbGwgYmUgcmV0dXJuZWQgZHVyaW5nIHRoZSBhY2tub3dsZWRnZSBjbG9jayBwdWxzZSBvbiB0aGUgU0NMIGxpbmUuCisgICAgICogfFsyXSAgICAgfFNUTyAgICAgICB8STJDIFNUT1AgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIE1hc3RlciBtb2RlLCBzZXR0aW5nIFNUTyB0byB0cmFuc21pdCBhIFNUT1AgY29uZGl0aW9uIHRvIGJ1cyB0aGVuIEkyQyBoYXJkd2FyZSB3aWxsIGNoZWNrIHRoZSBidXMgY29uZGl0aW9uIGlmIGEgU1RPUCBjb25kaXRpb24gaXMgZGV0ZWN0ZWQgdGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBhIHNsYXZlIG1vZGUsIHNldHRpbmcgU1RPIHJlc2V0cyBJMkMgaGFyZHdhcmUgdG8gdGhlIGRlZmluZWQgbm90IGFkZHJlc3NlZCBzbGF2ZSBtb2RlIHdoZW4gYnVzIGVycm9yIChVSTJDX1BST1RTVFMuRVJSSUYgPSAxKS4KKyAgICAgKiB8WzNdICAgICB8U1RBICAgICAgIHxJMkMgU1RBUlQgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgU1RBIHRvIGxvZ2ljIDEgdG8gZW50ZXIgTWFzdGVyIG1vZGUsIHRoZSBJMkMgaGFyZHdhcmUgc2VuZHMgYSBTVEFSVCBvciByZXBlYXQgU1RBUlQgY29uZGl0aW9uIHRvIGJ1cyB3aGVuIHRoZSBidXMgaXMgZnJlZS4KKyAgICAgKiB8WzRdICAgICB8QUREUjEwRU4gIHxBZGRyZXNzIDEwLWJpdCBGdW5jdGlvbiBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFkZHJlc3MgbWF0Y2ggMTAgYml0IGZ1bmN0aW9uIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBZGRyZXNzIG1hdGNoIDEwIGJpdCBmdW5jdGlvbiBpcyBlbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxQVFJHICAgICAgfEkyQyBQcm90b2NvbCBUcmlnZ2VyIChXcml0ZSBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gYSBuZXcgc3RhdGUgaXMgcHJlc2VudCBpbiB0aGUgVUkyQ19QUk9UU1RTIHJlZ2lzdGVyLCBpZiB0aGUgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMgYXJlIHNldCwgdGhlIEkyQyBpbnRlcnJ1cHQgaXMgcmVxdWVzdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgbXVzdCB3cml0ZSBvbmUgYnkgc29mdHdhcmUgdG8gdGhpcyBiaXQgYWZ0ZXIgdGhlIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzIGFyZSBzZXQgdG8gMSBhbmQgdGhlIEkyQyBwcm90b2NvbCBmdW5jdGlvbiB3aWxsIGdvIGFoZWFkIHVudGlsIHRoZSBTVE9QIGlzIGFjdGl2ZSBvciB0aGUgUFJPVEVOIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJMkMncyBzdHJldGNoIGRpc2FibGVkIGFuZCB0aGUgSTJDIHByb3RvY29sIGZ1bmN0aW9uIHdpbGwgZ28gYWhlYWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQydzIHN0cmV0Y2ggYWN0aXZlLgorICAgICAqIHxbOF0gICAgIHxTQ0xPVVRFTiAgfFNDTCBPdXRwdXQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgbW9uaXRvciBwdWxsaW5nIFNDTCB0byBsb3cKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIG1vbml0b3Igd2lsbCBwdWxsIFNDTCB0byBsb3cgdW50aWwgaXQgaGFzIGhhZCB0aW1lIHRvIHJlc3BvbmQgdG8gYW4gSTJDIGludGVycnVwdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU0NMIG91dHB1dCB3aWxsIGJlIGZvcmNlZCBoaWdoIGR1ZSB0byBvcGVuIGRyYWluIG1lY2hhbmlzbS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSTJDIG1vZHVsZSBtYXkgYWN0IGFzIGEgc2xhdmUgcGVyaXBoZXJhbCBqdXN0IGxpa2UgaW4gbm9ybWFsIG9wZXJhdGlvbiwgdGhlIEkyQyBob2xkcyB0aGUgY2xvY2sgbGluZSBsb3cgdW50aWwgaXQgaGFzIGhhZCB0aW1lIHRvIGNsZWFyIEkyQyBpbnRlcnJ1cHQuCisgICAgICogfFs5XSAgICAgfE1PTkVOICAgICB8TW9uaXRvciBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIG1vbml0b3IgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIG1vbml0b3IgbW9kZSB0aGUgU0RBIG91dHB1dCB3aWxsIGJlIHB1dCBpbiBoaWdoIGltcGVkYW5jZSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBwcmV2ZW50cyB0aGUgSTJDIG1vZHVsZSBmcm9tIG91dHB1dHRpbmcgZGF0YSBvZiBhbnkga2luZCAoaW5jbHVkaW5nIEFDSykgb250byB0aGUgSTJDIGRhdGEgYnVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgbW9uaXRvciBtb2RlIGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgbW9uaXRvciBtb2RlIGlzIGVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogRGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgU0NMT1VURU4gYml0LCB0aGUgU0NMIG91dHB1dCBtYXkgYmUgYWxzbyBmb3JjZWQgaGlnaCwgcHJldmVudGluZyB0aGUgbW9kdWxlIGZyb20gaGF2aW5nIGNvbnRyb2wgb3ZlciB0aGUgSTJDIGNsb2NrIGxpbmUuCisgICAgICogfFsyNToxNl0gfFRPQ05UICAgICB8VGltZS1vdXQgQ2xvY2sgQ3ljbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBpbmRpY2F0ZXMgaG93IG1hbnkgY2xvY2sgY3ljbGUgc2VsZWN0ZWQgYnkgVE1DTlRTUkMgKFVJMkNfQlJHRU4gWzVdKSB3aGVuIGVhY2ggaW50ZXJydXB0IGZsYWdzIGFyZSBjbGVhcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB0aW1lLW91dCBpcyBlbmFibGUgd2hlbiBUT0NOVCBiaWdnZXIgdGhhbiAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBUTUNOVFNSQyAoVUkyQ19CUkdFTiBbNV0pIG11c3QgYmUgc2V0IHplcm8gb24gSTJDIG1vZGUuCisgICAgICogfFszMV0gICAgfFBST1RFTiAgICB8STJDIFByb3RvY29sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSTJDIFByb3RvY29sIGRpc2FibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEkyQyBQcm90b2NvbCBlbmFibGUuCisgICAgICogQHZhciBVSTJDX1Q6OlBST1RJRU4KKyAgICAgKiBPZmZzZXQ6IDB4NjAgIFVTQ0kgUHJvdG9jb2wgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFRPSUVOICAgICB8VGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gSTJDIHByb3RvY29sLCB0aGlzIGJpdCBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBpbiBjYXNlIG9mIGEgdGltZS1vdXQgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0aW1lLW91dCBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8U1RBUklFTiAgIHxTdGFydCBDb25kaXRpb24gUmVjZWl2ZWQgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHByb3RvY29sIGludGVycnVwdCBpZiBhIHN0YXJ0IGNvbmRpdGlvbiBpcyBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHN0YXJ0IGNvbmRpdGlvbiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBzdGFydCBjb25kaXRpb24gaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFNUT1JJRU4gICB8U3RvcCBDb25kaXRpb24gUmVjZWl2ZWQgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHByb3RvY29sIGludGVycnVwdCBpZiBhIHN0b3AgY29uZGl0aW9uIGlzIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgc3RvcCBjb25kaXRpb24gaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc3RvcCBjb25kaXRpb24gaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFszXSAgICAgfE5BQ0tJRU4gICB8Tm9uIC0gQWNrbm93bGVkZ2UgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHByb3RvY29sIGludGVycnVwdCBpZiBhIG5vbiAtIGFja25vd2xlZGdlIGlzIGRldGVjdGVkIGJ5IGEgbWFzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgbm9uIC0gYWNrbm93bGVkZ2UgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgbm9uIC0gYWNrbm93bGVkZ2UgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFs0XSAgICAgfEFSQkxPSUVOICB8QXJiaXRyYXRpb24gTG9zdCBJbnRlcnJ1cHQgRW5hYmxlIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIHRoZSBnZW5lcmF0aW9uIG9mIGEgcHJvdG9jb2wgaW50ZXJydXB0IGlmIGFuIGFyYml0cmF0aW9uIGxvc3QgZXZlbnQgaXMgZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBhcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdCBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGFyYml0cmF0aW9uIGxvc3QgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfEVSUklFTiAgICB8RXJyb3IgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHByb3RvY29sIGludGVycnVwdCBpZiBhbiBJMkMgZXJyb3IgY29uZGl0aW9uIGlzIGRldGVjdGVkIChpbmRpY2F0ZWQgYnkgRVJSIChVSTJDX1BST1RTVFMgWzE2XSkpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgZXJyb3IgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgZXJyb3IgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFs2XSAgICAgfEFDS0lFTiAgICB8QWNrbm93bGVkZ2UgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHByb3RvY29sIGludGVycnVwdCBpZiBhbiBhY2tub3dsZWRnZSBpcyBkZXRlY3RlZCBieSBhIG1hc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGFja25vd2xlZGdlIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGFja25vd2xlZGdlIGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIEB2YXIgVUkyQ19UOjpQUk9UU1RTCisgICAgICogT2Zmc2V0OiAweDY0ICBVU0NJIFByb3RvY29sIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs1XSAgICAgfFRPSUYgICAgICB8VGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQSB0aW1lLW91dCBpbnRlcnJ1cHQgc3RhdHVzIGhhcyBub3Qgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgdGltZS1vdXQgaW50ZXJydXB0IHN0YXR1cyBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0aW5nIG9uZSBpbnRvIHRoaXMgYml0CisgICAgICogfFs2XSAgICAgfE9OQlVTWSAgICB8T24gQnVzIEJ1c3kKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZXMgdGhhdCBhIGNvbW11bmljYXRpb24gaXMgaW4gcHJvZ3Jlc3Mgb24gdGhlIGJ1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGEgU1RBUlQgY29uZGl0aW9uIGlzIGRldGVjdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSB3aGVuIGEgU1RPUCBjb25kaXRpb24gaXMgZGV0ZWN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGJ1cyBpcyBJRExFIChib3RoIFNDTEsgYW5kIFNEQSBIaWdoKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGJ1cyBpcyBidXN5LgorICAgICAqIHxbOF0gICAgIHxTVEFSSUYgICAgfFN0YXJ0IENvbmRpdGlvbiBSZWNlaXZlZCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IGEgc3RhcnQgY29uZGl0aW9uIG9yIHJlcGVhdGVkIHN0YXJ0IGNvbmRpdGlvbiBoYXMgYmVlbiBkZXRlY3RlZCBvbiBtYXN0ZXIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEhvd2V2ZXIsIHRoaXMgYml0IGFsc28gaW5kaWNhdGVzIHRoYXQgYSByZXBlYXRlZCBzdGFydCBjb25kaXRpb24gaGFzIGJlZW4gZGV0ZWN0ZWQgb24gc2xhdmUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxBIHByb3RvY29sIGludGVycnVwdCBjYW4gYmUgZ2VuZXJhdGVkIGlmIFVJMkNfUFJPVENUTC5TVEFSSUVOID0gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQSBzdGFydCBjb25kaXRpb24gaGFzIG5vdCB5ZXQgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQSBzdGFydCBjb25kaXRpb24gaGFzIGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0aW5nIG9uZSBpbnRvIHRoaXMgYml0CisgICAgICogfFs5XSAgICAgfFNUT1JJRiAgICB8U3RvcCBDb25kaXRpb24gUmVjZWl2ZWQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHN0b3AgY29uZGl0aW9uIGhhcyBiZWVuIGRldGVjdGVkIG9uIHRoZSBJMkMgYnVzIGxpbmVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSBwcm90b2NvbCBpbnRlcnJ1cHQgY2FuIGJlIGdlbmVyYXRlZCBpZiBVSTJDX1BST1RDVEwuU1RPUklFTiA9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEgc3RvcCBjb25kaXRpb24gaGFzIG5vdCB5ZXQgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQSBzdG9wIGNvbmRpdGlvbiBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRpbmcgb25lIGludG8gdGhpcyBiaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiBzbGF2ZSBSWCBtb2RlLgorICAgICAqIHxbMTBdICAgIHxOQUNLSUYgICAgfE5vbiAtIEFja25vd2xlZGdlIFJlY2VpdmVkIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgYSBub24gLSBhY2tub3dsZWRnZSBoYXMgYmVlbiByZWNlaXZlZCBpbiBtYXN0ZXIgbW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgcHJvdG9jb2wgaW50ZXJydXB0IGNhbiBiZSBnZW5lcmF0ZWQgaWYgVUkyQ19QUk9UQ1RMLk5BQ0tJRU4gPSAxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBIG5vbiAtIGFja25vd2xlZGdlIGhhcyBub3QgYmVlbiByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQSBub24gLSBhY2tub3dsZWRnZSBoYXMgYmVlbiByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRpbmcgb25lIGludG8gdGhpcyBiaXQKKyAgICAgKiB8WzExXSAgICB8QVJCTE9JRiAgIHxBcmJpdHJhdGlvbiBMb3N0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgYW4gYXJiaXRyYXRpb24gaGFzIGJlZW4gbG9zdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgcHJvdG9jb2wgaW50ZXJydXB0IGNhbiBiZSBnZW5lcmF0ZWQgaWYgVUkyQ19QUk9UQ1RMLkFSQkxPSUVOID0gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQW4gYXJiaXRyYXRpb24gaGFzIG5vdCBiZWVuIGxvc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFuIGFyYml0cmF0aW9uIGhhcyBiZWVuIGxvc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0aW5nIG9uZSBpbnRvIHRoaXMgYml0CisgICAgICogfFsxMl0gICAgfEVSUklGICAgICB8RXJyb3IgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIEJ1cyBFcnJvciBvY2N1cnMgd2hlbiBhIFNUQVJUIG9yIFNUT1AgY29uZGl0aW9uIGlzIHByZXNlbnQgYXQgYW4gaWxsZWdhbCBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0aW9uIGZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RXhhbXBsZSBvZiBpbGxlZ2FsIHBvc2l0aW9uIGFyZSBkdXJpbmcgdGhlIHNlcmlhbCB0cmFuc2ZlciBvZiBhbiBhZGRyZXNzIGJ5dGUsIGEgZGF0YSBieXRlIG9yIGFuIGFja25vd2xlZGdlIGJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEEgcHJvdG9jb2wgaW50ZXJydXB0IGNhbiBiZSBnZW5lcmF0ZWQgaWYgVUkyQ19QUk9UQ1RMLkVSUklFTiA9IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEFuIEkyQyBlcnJvciBoYXMgbm90IGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFuIEkyQyBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRpbmcgb25lIGludG8gdGhpcyBiaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiBzbGF2ZSBtb2RlLCB1c2VyIG11c3Qgd3JpdGUgb25lIGludG8gU1RPIHJlZ2lzdGVyIHRvIHRoZSBkZWZpbmVkIG5vdCBhZGRyZXNzZWQgc2xhdmUgbW9kZS4KKyAgICAgKiB8WzEzXSAgICB8QUNLSUYgICAgIHxBY2tub3dsZWRnZSBSZWNlaXZlZCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IGFuIGFja25vd2xlZGdlIGhhcyBiZWVuIHJlY2VpdmVkIGluIG1hc3RlciBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSBwcm90b2NvbCBpbnRlcnJ1cHQgY2FuIGJlIGdlbmVyYXRlZCBpZiBVSTJDX1BST1RDVEwuQUNLSUVOID0gMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQW4gYWNrbm93bGVkZ2UgaGFzIG5vdCBiZWVuIHJlY2VpdmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBbiBhY2tub3dsZWRnZSBoYXMgYmVlbiByZWNlaXZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRpbmcgb25lIGludG8gdGhpcyBiaXQKKyAgICAgKiB8WzE0XSAgICB8U0xBU0VMICAgIHxTbGF2ZSBTZWxlY3QgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhpcyBkZXZpY2UgaGFzIGJlZW4gc2VsZWN0ZWQgYXMgc2xhdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBkZXZpY2UgaXMgbm90IHNlbGVjdGVkIGFzIHNsYXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgZGV2aWNlIGlzIHNlbGVjdGVkIGFzIHNsYXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGhhcyBubyBpbnRlcnJ1cHQgc2lnbmFsLCBhbmQgaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYnkgaGFyZHdhcmUuCisgICAgICogfFsxNV0gICAgfFNMQVJFQUQgICB8U2xhdmUgUmVhZCBSZXF1ZXN0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IGEgc2xhdmUgcmVhZCByZXF1ZXN0IGhhcyBiZWVuIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBIHNsYXZlIFIvVyBiaXQgaXMgMSBoYXMgbm90IGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgc2xhdmUgUi9XIGJpdCBpcyAxIGhhcyBiZWVuIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGhhcyBubyBpbnRlcnJ1cHQgc2lnbmFsLCBhbmQgaXQgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYnkgaGFyZHdhcmUuCisgICAgICogfFsxNl0gICAgfFdLQUtET05FICB8V2FrZXVwIEFkZHJlc3MgRnJhbWUgQWNrbm93bGVkZ2UgQml0IERvbmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIEFDSyBiaXQgY3ljbGUgb2YgYWRkcmVzcyBtYXRjaCBmcmFtZSBpc24ndCBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgQUNLIGJpdCBjeWNsZSBvZiBhZGRyZXNzIG1hdGNoIGZyYW1lIGlzIGRvbmUgaW4gcG93ZXItZG93bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4ndCByZWxlYXNlIHdoZW4gV0tVUElGIGlzIHNldC4KKyAgICAgKiB8WzE3XSAgICB8V1JTVFNXSyAgIHxSZWFkL1dyaXRlIFN0YXR1cyBCaXQgaW4gQWRkcmVzcyBXYWtldXAgRnJhbWUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV3JpdGUgY29tbWFuZCBiZSByZWNvcmQgb24gdGhlIGFkZHJlc3MgbWF0Y2ggd2FrZXVwIGZyYW1lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWFkIGNvbW1hbmQgYmUgcmVjb3JkIG9uIHRoZSBhZGRyZXNzIG1hdGNoIHdha2V1cCBmcmFtZS4KKyAgICAgKiB8WzE4XSAgICB8QlVTSEFORyAgIHxCdXMgSGFuZy11cAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyBidXMgaGFuZy11cCBzdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVyZSBpcyA0LWJpdCBjb3VudGVyIGNvdW50IHdoZW4gU0NMIGhvbGQgaGlnaCBhbmQgcmVmZXIgZlNBTVBfQ0xLCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGhhbmctdXAgY291bnRlciB3aWxsIGNvdW50IHRvIG92ZXJmbG93IGFuZCBzZXQgdGhpcyBiaXQgd2hlbiBTREEgaXMgbG93CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGNvdW50ZXIgd2lsbCBiZSByZXNldCBieSBmYWxsaW5nIGVkZ2Ugb2YgU0NMIHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGJ1cyBpcyBub3JtYWwgc3RhdHVzIGZvciB0cmFuc21pc3Npb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBidXMgaXMgaGFuZy11cCBzdGF0dXMgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBoYXMgbm8gaW50ZXJydXB0IHNpZ25hbCwgYW5kIGl0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGJ5IGhhcmR3YXJlIHdoZW4gYSBTVEFSVCBjb25kaXRpb24gaXMgcHJlc2VudC4KKyAgICAgKiB8WzE5XSAgICB8RVJSQVJCTE8gIHxFcnJvciBBcmJpdHJhdGlvbiBMb3N0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIGJ1cyBhcmJpdHJhdGlvbiBsb3N0IGR1ZSB0byBiaWdnZXIgbm9pc2Ugd2hpY2ggaXMgY2FuJ3QgYmUgZmlsdGVyZWQgYnkgaW5wdXQgcHJvY2Vzc29yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEkyQyBjYW4gc2VuZCBzdGFydCBjb25kaXRpb24gd2hlbiBFUlJBUkJMTyBpcyBzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaHVzIHRoaXMgYml0IGRvZXNuJ3QgYmUgY2FyZWQgb24gc2xhdmUgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIGJ1cyBpcyBub3JtYWwgc3RhdHVzIGZvciB0cmFuc21pc3Npb24uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBidXMgaXMgZXJyb3IgYXJiaXRyYXRpb24gbG9zdCBzdGF0dXMgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBoYXMgbm8gaW50ZXJydXB0IHNpZ25hbCwgYW5kIGl0IHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGJ5IGhhcmR3YXJlIHdoZW4gYSBTVEFSVCBjb25kaXRpb24gaXMgcHJlc2VudC4KKyAgICAgKiBAdmFyIFVJMkNfVDo6QURNQVQKKyAgICAgKiBPZmZzZXQ6IDB4ODggIEkyQyBTbGF2ZSBNYXRjaCBBZGRyZXNzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QURNQVQwICAgIHxVU0NJIEFkZHJlc3MgMCBNYXRjaCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIGFkZHJlc3MgMCBpcyBtYXRjaGVkLCBoYXJkd2FyZSB3aWxsIGluZm9ybSB3aGljaCBhZGRyZXNzIHVzZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB3aWxsIHNldCB0byAxLCBhbmQgc29mdHdhcmUgY2FuIHdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQuCisgICAgICogfFsxXSAgICAgfEFETUFUMSAgICB8VVNDSSBBZGRyZXNzIDEgTWF0Y2ggU3RhdHVzIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBhZGRyZXNzIDEgaXMgbWF0Y2hlZCwgaGFyZHdhcmUgd2lsbCBpbmZvcm0gd2hpY2ggYWRkcmVzcyB1c2VkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBzZXQgdG8gMSwgYW5kIHNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIEB2YXIgVUkyQ19UOjpUTUNUTAorICAgICAqIE9mZnNldDogMHg4QyAgSTJDIFRpbWluZyBDb25maWd1cmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs4OjBdICAgfFNUQ1RMICAgICB8U2V0dXAgVGltZSBDb25maWd1cmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIGRlbGF5IHRpbWluZyBiZXR3ZWVuIFNEQSBlZGdlIGFuZCBTQ0wgcmlzaW5nIGVkZ2UgaW4gdHJhbnNtaXNzaW9uIG1vZGUuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBkZWxheSBzZXR1cCB0aW1lIGlzIG51bWJlcnMgb2YgcGVyaXBoZXJhbCBjbG9jayA9IFNUQ1RMIHggZlBDTEsuCisgICAgICogfFsyNDoxNl0gfEhUQ1RMICAgICB8SG9sZCBUaW1lIENvbmZpZ3VyZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBmaWVsZCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkZWxheSB0aW1pbmcgYmV0d2VlbiBTQ0wgZmFsbGluZyBlZGdlIFNEQSBlZGdlIGluCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8dHJhbnNtaXNzaW9uIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlbGF5IGhvbGQgdGltZSBpcyBudW1iZXJzIG9mIHBlcmlwaGVyYWwgY2xvY2sgPSBIVENUTCB4IGZQQ0xLLgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFVTQ0kgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUwWzFdOworICAgIF9fSU8gdWludDMyX3QgQlJHRU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIFVTQ0kgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJFU0VSVkUxWzhdOworICAgIF9fSU8gdWludDMyX3QgTElORUNUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMmNdIFVTQ0kgTGluZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFRYREFUOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBVU0NJIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSWERBVDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzNF0gVVNDSSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbM107CisgICAgX19JTyB1aW50MzJfdCBERVZBRERSMDsgICAgICAgICAgICAgIC8qITwgWzB4MDA0NF0gVVNDSSBEZXZpY2UgQWRkcmVzcyBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgREVWQUREUjE7ICAgICAgICAgICAgICAvKiE8IFsweDAwNDhdIFVTQ0kgRGV2aWNlIEFkZHJlc3MgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEFERFJNU0swOyAgICAgICAgICAgICAgLyohPCBbMHgwMDRjXSBVU0NJIERldmljZSBBZGRyZXNzIE1hc2sgUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBRERSTVNLMTsgICAgICAgICAgICAgIC8qITwgWzB4MDA1MF0gVVNDSSBEZXZpY2UgQWRkcmVzcyBNYXNrIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgV0tDVEw7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNTRdIFVTQ0kgV2FrZS11cCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFdLU1RTOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDU4XSBVU0NJIFdha2UtdXAgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQUk9UQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA1Y10gVVNDSSBQcm90b2NvbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFJPVElFTjsgICAgICAgICAgICAgICAvKiE8IFsweDAwNjBdIFVTQ0kgUHJvdG9jb2wgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBST1RTVFM7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDY0XSBVU0NJIFByb3RvY29sIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFM1s4XTsKKyAgICBfX0lPIHVpbnQzMl90IEFETUFUOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDg4XSBJMkMgU2xhdmUgTWF0Y2ggQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBUTUNUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA4Y10gSTJDIFRpbWluZyBDb25maWd1cmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFVJMkNfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgVUkyQ19DT05TVCBVSTJDIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFVJMkMgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBVSTJDX0NUTF9GVU5NT0RFX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpDVEw6IEZVTk1PREUgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19DVExfRlVOTU9ERV9Nc2sgICAgICAgICAgICAgKDB4N3VsIDw8IFVJMkNfQ1RMX0ZVTk1PREVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6Q1RMOiBGVU5NT0RFIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19CUkdFTl9SQ0xLU0VMX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IFJDTEtTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVJMkNfQlJHRU5fUkNMS1NFTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVSTJDX0JSR0VOX1JDTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBSQ0xLU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfQlJHRU5fUFRDTEtTRUxfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBQVENMS1NFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVSTJDX0JSR0VOX1BUQ0xLU0VMX01zayAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19CUkdFTl9QVENMS1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogUFRDTEtTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX0JSR0VOX1NQQ0xLU0VMX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogU1BDTEtTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19CUkdFTl9TUENMS1NFTF9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFVJMkNfQlJHRU5fU1BDTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IFNQQ0xLU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19CUkdFTl9UTUNOVEVOX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IFRNQ05URU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVJMkNfQlJHRU5fVE1DTlRFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVSTJDX0JSR0VOX1RNQ05URU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBUTUNOVEVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfQlJHRU5fVE1DTlRTUkNfUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBUTUNOVFNSQyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVSTJDX0JSR0VOX1RNQ05UU1JDX01zayAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19CUkdFTl9UTUNOVFNSQ19Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogVE1DTlRTUkMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX0JSR0VOX1BEU0NOVF9Qb3MgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogUERTQ05UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19CUkdFTl9QRFNDTlRfTXNrICAgICAgICAgICAgKDB4M3VsIDw8IFVJMkNfQlJHRU5fUERTQ05UX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IFBEU0NOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19CUkdFTl9EU0NOVF9Qb3MgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QlJHRU46IERTQ05UIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVJMkNfQlJHRU5fRFNDTlRfTXNrICAgICAgICAgICAgICgweDFmdWwgPDwgVUkyQ19CUkdFTl9EU0NOVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBEU0NOVCBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfQlJHRU5fQ0xLRElWX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkJSR0VOOiBDTEtESVYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVSTJDX0JSR0VOX0NMS0RJVl9Nc2sgICAgICAgICAgICAoMHgzZmZ1bCA8PCBVSTJDX0JSR0VOX0NMS0RJVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpCUkdFTjogQ0xLRElWIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX0xJTkVDVExfTFNCX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpMSU5FQ1RMOiBMU0IgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19MSU5FQ1RMX0xTQl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfTElORUNUTF9MU0JfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6TElORUNUTDogTFNCIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19MSU5FQ1RMX0RXSURUSF9Qb3MgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6TElORUNUTDogRFdJRFRIIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVJMkNfTElORUNUTF9EV0lEVEhfTXNrICAgICAgICAgICgweGZ1bCA8PCBVSTJDX0xJTkVDVExfRFdJRFRIX1BvcykgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkxJTkVDVEw6IERXSURUSCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfVFhEQVRfVFhEQVRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlRYREFUOiBUWERBVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVSTJDX1RYREFUX1RYREFUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgVUkyQ19UWERBVF9UWERBVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpUWERBVDogVFhEQVQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1JYREFUX1JYREFUX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpSWERBVDogUlhEQVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19SWERBVF9SWERBVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFVJMkNfUlhEQVRfUlhEQVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UlhEQVQ6IFJYREFUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19ERVZBRERSMF9ERVZBRERSX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6REVWQUREUjA6IERFVkFERFIgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVJMkNfREVWQUREUjBfREVWQUREUl9Nc2sgICAgICAgICgweDNmZnVsIDw8IFVJMkNfREVWQUREUjBfREVWQUREUl9Qb3MpICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkRFVkFERFIwOiBERVZBRERSIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfREVWQUREUjFfREVWQUREUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkRFVkFERFIxOiBERVZBRERSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVSTJDX0RFVkFERFIxX0RFVkFERFJfTXNrICAgICAgICAoMHgzZmZ1bCA8PCBVSTJDX0RFVkFERFIxX0RFVkFERFJfUG9zKSAgICAgICAgICAgIC8qITwgVUkyQ19UOjpERVZBRERSMTogREVWQUREUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX0FERFJNU0swX0FERFJNU0tfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpBRERSTVNLMDogQUREUk1TSyBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUkyQ19BRERSTVNLMF9BRERSTVNLX01zayAgICAgICAgKDB4M2ZmdWwgPDwgVUkyQ19BRERSTVNLMF9BRERSTVNLX1BvcykgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QUREUk1TSzA6IEFERFJNU0sgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19BRERSTVNLMV9BRERSTVNLX1BvcyAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QUREUk1TSzE6IEFERFJNU0sgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVJMkNfQUREUk1TSzFfQUREUk1TS19Nc2sgICAgICAgICgweDNmZnVsIDw8IFVJMkNfQUREUk1TSzFfQUREUk1TS19Qb3MpICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkFERFJNU0sxOiBBRERSTVNLIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfV0tDVExfV0tFTl9Qb3MgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OldLQ1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVSTJDX1dLQ1RMX1dLRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19XS0NUTF9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpXS0NUTDogV0tFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1dLQ1RMX1dLQUREUkVOX1BvcyAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpXS0NUTDogV0tBRERSRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19XS0NUTF9XS0FERFJFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfV0tDVExfV0tBRERSRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6V0tDVEw6IFdLQUREUkVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19XS1NUU19XS0ZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6V0tTVFM6IFdLRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFVJMkNfV0tTVFNfV0tGX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBVSTJDX1dLU1RTX1dLRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OldLU1RTOiBXS0YgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVENUTF9HQ0ZVTkNfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IEdDRlVOQyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RDVExfR0NGVU5DX01zayAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UQ1RMX0dDRlVOQ19Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBHQ0ZVTkMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RDVExfQUFfUG9zICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBBQSBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX0FBX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVENUTF9BQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogQUEgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX1NUT19Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogU1RPIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVENUTF9TVE9fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RDVExfU1RPX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IFNUTyBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVENUTF9TVEFfUG9zICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IFNUQSBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RDVExfU1RBX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UQ1RMX1NUQV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBTVEEgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RDVExfQUREUjEwRU5fUG9zICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBBRERSMTBFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX0FERFIxMEVOX01zayAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVENUTF9BRERSMTBFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogQUREUjEwRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX1BUUkdfUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogUFRSRyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVENUTF9QVFJHX01zayAgICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RDVExfUFRSR19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IFBUUkcgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVENUTF9TQ0xPVVRFTl9Qb3MgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IFNDTE9VVEVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVSTJDX1BST1RDVExfU0NMT1VURU5fTXNrICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UQ1RMX1NDTE9VVEVOX1BvcykgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBTQ0xPVVRFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RDVExfTU9ORU5fUG9zICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBNT05FTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX01PTkVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVENUTF9NT05FTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogTU9ORU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UQ1RMX1RPQ05UX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVENUTDogVE9DTlQgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVENUTF9UT0NOVF9Nc2sgICAgICAgICAgICgweDNmZnVsIDw8IFVJMkNfUFJPVENUTF9UT0NOVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IFRPQ05UIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVENUTF9QUk9URU5fUG9zICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RDVEw6IFBST1RFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RDVExfUFJPVEVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UQ1RMX1BST1RFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UQ1RMOiBQUk9URU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RJRU5fVE9JRU5fUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9USUVOOiBUT0lFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9USUVOX1RPSUVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVElFTl9UT0lFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogVE9JRU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9USUVOX1NUQVJJRU5fUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogU1RBUklFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVElFTl9TVEFSSUVOX01zayAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RJRU5fU1RBUklFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RJRU46IFNUQVJJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVElFTl9TVE9SSUVOX1BvcyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RJRU46IFNUT1JJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVSTJDX1BST1RJRU5fU1RPUklFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9USUVOX1NUT1JJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9USUVOOiBTVE9SSUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RJRU5fTkFDS0lFTl9Qb3MgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9USUVOOiBOQUNLSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9USUVOX05BQ0tJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVElFTl9OQUNLSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogTkFDS0lFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9USUVOX0FSQkxPSUVOX1BvcyAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogQVJCTE9JRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVJMkNfUFJPVElFTl9BUkJMT0lFTl9Nc2sgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RJRU5fQVJCTE9JRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RJRU46IEFSQkxPSUVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVElFTl9FUlJJRU5fUG9zICAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RJRU46IEVSUklFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RJRU5fRVJSSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9USUVOX0VSUklFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9USUVOOiBFUlJJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RJRU5fQUNLSUVOX1BvcyAgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9USUVOOiBBQ0tJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9USUVOX0FDS0lFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVElFTl9BQ0tJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVElFTjogQUNLSUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1RPSUZfUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogVE9JRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVFNUU19UT0lGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RTVFNfVE9JRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFRPSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19PTkJVU1lfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IE9OQlVTWSBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfT05CVVNZX01zayAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX09OQlVTWV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBPTkJVU1kgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RTVFNfU1RBUklGX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBTVEFSSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVFNUU19TVEFSSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogU1RBUklGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1NUT1JJRl9Qb3MgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogU1RPUklGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RTVFNfU1RPUklGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFNUT1JJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19OQUNLSUZfUG9zICAgICAgICAgICgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IE5BQ0tJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zayAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX05BQ0tJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBOQUNLSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RTVFNfQVJCTE9JRl9Qb3MgICAgICAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBBUkJMT0lGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVFNUU19BUkJMT0lGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogQVJCTE9JRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UU1RTX0VSUklGX1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogRVJSSUYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVFNUU19FUlJJRl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RTVFNfRVJSSUZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IEVSUklGIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19BQ0tJRl9Qb3MgICAgICAgICAgICgxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IEFDS0lGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfQUNLSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX0FDS0lGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBBQ0tJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RTVFNfU0xBU0VMX1BvcyAgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBTTEFTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1NMQVNFTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVFNUU19TTEFTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogU0xBU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1NMQVJFQURfUG9zICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogU0xBUkVBRCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVFNUU19TTEFSRUFEX01zayAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RTVFNfU0xBUkVBRF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFNMQVJFQUQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19XS0FLRE9ORV9Qb3MgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IFdLQUtET05FIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfV0tBS0RPTkVfTXNrICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX1dLQUtET05FX1BvcykgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBXS0FLRE9ORSBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1BST1RTVFNfV1JTVFNXS19Qb3MgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBXUlNUU1dLIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVUkyQ19QUk9UU1RTX1dSU1RTV0tfTXNrICAgICAgICAgKDB4MXVsIDw8IFVJMkNfUFJPVFNUU19XUlNUU1dLX1BvcykgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogV1JTVFNXSyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19QUk9UU1RTX0JVU0hBTkdfUG9zICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6UFJPVFNUUzogQlVTSEFORyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVJMkNfUFJPVFNUU19CVVNIQU5HX01zayAgICAgICAgICgweDF1bCA8PCBVSTJDX1BST1RTVFNfQlVTSEFOR19Qb3MpICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IEJVU0hBTkcgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfUFJPVFNUU19FUlJBUkJMT19Qb3MgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlBST1RTVFM6IEVSUkFSQkxPIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVSTJDX1BST1RTVFNfRVJSQVJCTE9fTXNrICAgICAgICAoMHgxdWwgPDwgVUkyQ19QUk9UU1RTX0VSUkFSQkxPX1BvcykgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpQUk9UU1RTOiBFUlJBUkJMTyBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX0FETUFUX0FETUFUMF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpBRE1BVDogQURNQVQwIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19BRE1BVF9BRE1BVDBfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVJMkNfQURNQVRfQURNQVQwX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QURNQVQ6IEFETUFUMCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVUkyQ19BRE1BVF9BRE1BVDFfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6QURNQVQ6IEFETUFUMSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVJMkNfQURNQVRfQURNQVQxX01zayAgICAgICAgICAgICgweDF1bCA8PCBVSTJDX0FETUFUX0FETUFUMV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OkFETUFUOiBBRE1BVDEgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVJMkNfVE1DVExfU1RDVExfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVSTJDX1Q6OlRNQ1RMOiBTVENUTCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVSTJDX1RNQ1RMX1NUQ1RMX01zayAgICAgICAgICAgICAoMHgxZmZ1bCA8PCBVSTJDX1RNQ1RMX1NUQ1RMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpUTUNUTDogU1RDVEwgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVSTJDX1RNQ1RMX0hUQ1RMX1BvcyAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVUkyQ19UOjpUTUNUTDogSFRDVEwgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVUkyQ19UTUNUTF9IVENUTF9Nc2sgICAgICAgICAgICAgKDB4MWZmdWwgPDwgVUkyQ19UTUNUTF9IVENUTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVJMkNfVDo6VE1DVEw6IEhUQ1RMIE1hc2sgICAgICAgICAgICAgICovCisKKy8qKkB9Ki8gLyogVUkyQ19DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgVUkyQyByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworI2VuZGlmIC8qIF9fVUkyQ19SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdXNiZF9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91c2JkX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNDBkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdXNiZF9yZWcuaApAQCAtMCwwICsxLDY2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHVzYmRfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFVTQkQgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVVNCRF9SRUdfSF9fCisjZGVmaW5lIF9fVVNCRF9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVTQiBEZXZpY2UgQ29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFVTQkQgVVNCIERldmljZSBDb250cm9sbGVyKFVTQkQpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFVTQkQgQ29udHJvbGxlcgorQHsgKi8KKworCisKKy8qKgorICAqIEBicmllZiBVU0JEIGVuZHBvaW50cyByZWdpc3RlcgorICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKioKKyAgICAgKiBAdmFyIFVTQkRfRVBfVDo6QlVGU0VHCisgICAgICogT2Zmc2V0OiAweDUwMC8weDUxMC8weDUyMC8weDUzMC8weDU0MC8weDU1MC8weDU2MC8weDU3MC8weDU4MC8weDU5MC8weDVBMC8weDVCMCAgRW5kcG9pbnQgQnVmZmVyIFNlZ21lbnRhdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs4OjNdICAgfEJVRlNFRyAgICB8RW5kcG9pbnQgQnVmZmVyIFNlZ21lbnRhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIG9mZnNldCBhZGRyZXNzIGZvciBlYWNoIGVuZHBvaW50IHdpdGggdGhlIFVTQiBTUkFNIHN0YXJ0aW5nIGFkZHJlc3MgVGhlIGVmZmVjdGl2ZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBlbmRwb2ludCBpcworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVTQkRfU1JBTSBhZGRyZXNzICsgeyBCVUZTRUcsIDMnYjAwMH0KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVyZSB0aGUgVVNCRF9TUkFNIGFkZHJlc3MgPSBVU0JEX0JBKzB4MTAwaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWZlciB0byB0aGUgc2VjdGlvbiA2LjI5LjUuNyBmb3IgdGhlIGVuZHBvaW50IFNSQU0gc3RydWN0dXJlIGFuZCBpdHMgZGVzY3JpcHRpb24uCisgICAgICogQHZhciBVU0JEX0VQX1Q6Ok1YUExECisgICAgICogT2Zmc2V0OiAweDUwNC8weDUxNC8weDUyNC8weDUzNC8weDU0NC8weDU1NC8weDU2NC8weDU3NC8weDU4NC8weDU5NC8weDVBNC8weDVCNCAgRW5kcG9pbnQgTWF4aW1hbCBQYXlsb2FkIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzg6MF0gICB8TVhQTEQgICAgIHxNYXhpbWFsIFBheWxvYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxEZWZpbmUgdGhlIGRhdGEgbGVuZ3RoIHdoaWNoIGlzIHRyYW5zbWl0dGVkIHRvIGhvc3QgKElOIHRva2VuKSBvciB0aGUgYWN0dWFsIGRhdGEgbGVuZ3RoIHdoaWNoIGlzIHJlY2VpdmVkIGZyb20gdGhlIGhvc3QgKE9VVCB0b2tlbikKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBhbHNvIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZW5kcG9pbnQgaXMgcmVhZHkgdG8gYmUgdHJhbnNtaXR0ZWQgaW4gSU4gdG9rZW4gb3IgcmVjZWl2ZWQgaW4gT1VUIHRva2VuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgxKSBXaGVuIHRoZSByZWdpc3RlciBpcyB3cml0dGVuIGJ5IENQVSwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgSU4gdG9rZW4sIHRoZSB2YWx1ZSBvZiBNWFBMRCBpcyB1c2VkIHRvIGRlZmluZSB0aGUgZGF0YSBsZW5ndGggdG8gYmUgdHJhbnNtaXR0ZWQgYW5kIGluZGljYXRlIHRoZSBkYXRhIGJ1ZmZlciBpcyByZWFkeS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgT1VUIHRva2VuLCBpdCBtZWFucyB0aGF0IHRoZSBjb250cm9sbGVyIGlzIHJlYWR5IHRvIHJlY2VpdmUgZGF0YSBmcm9tIHRoZSBob3N0IGFuZCB0aGUgdmFsdWUgb2YgTVhQTEQgaXMgdGhlIG1heGltYWwgZGF0YSBsZW5ndGggY29tZXMgZnJvbSBob3N0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfCgyKSBXaGVuIHRoZSByZWdpc3RlciBpcyByZWFkIGJ5IENQVSwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgSU4gdG9rZW4sIHRoZSB2YWx1ZSBvZiBNWFBMRCBpcyBpbmRpY2F0ZWQgYnkgdGhlIGRhdGEgbGVuZ3RoIGJlIHRyYW5zbWl0dGVkIHRvIGhvc3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxGb3IgT1VUIHRva2VuLCB0aGUgdmFsdWUgb2YgTVhQTEQgaXMgaW5kaWNhdGVkIHRoZSBhY3R1YWwgZGF0YSBsZW5ndGggcmVjZWl2aW5nIGZyb20gaG9zdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBPbmNlIE1YUExEIGlzIHdyaXR0ZW4sIHRoZSBkYXRhIHBhY2tldHMgd2lsbCBiZSB0cmFuc21pdHRlZC9yZWNlaXZlZCBpbW1lZGlhdGVseSBhZnRlciBJTi9PVVQgdG9rZW4gYXJyaXZlZC4KKyAgICAgKiBAdmFyIFVTQkRfRVBfVDo6Q0ZHCisgICAgICogT2Zmc2V0OiAweDUwOC8weDUxOC8weDUyOC8weDUzOC8weDU0OC8weDU1OC8weDU2OC8weDU3OC8weDU4OC8weDU5OC8weDVBOC8weDVCOCAgRW5kcG9pbnQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfEVQTlVNICAgICB8RW5kcG9pbnQgTnVtYmVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIGVuZHBvaW50IG51bWJlciBvZiB0aGUgY3VycmVudCBlbmRwb2ludAorICAgICAqIHxbNF0gICAgIHxJU09DSCAgICAgfElzb2Nocm9ub3VzIEVuZHBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBzZXQgdGhlIGVuZHBvaW50IGFzIElzb2Nocm9ub3VzIGVuZHBvaW50LCBubyBoYW5kc2hha2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIElzb2Nocm9ub3VzIGVuZHBvaW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJc29jaHJvbm91cyBlbmRwb2ludC4KKyAgICAgKiB8WzY6NV0gICB8U1RBVEUgICAgIHxFbmRwb2ludCBTVEFURQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gRW5kcG9pbnQgaXMgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBPdXQgZW5kcG9pbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBJTiBlbmRwb2ludC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IFVuZGVmaW5lZC4KKyAgICAgKiB8WzddICAgICB8RFNRU1lOQyAgIHxEYXRhIFNlcXVlbmNlIFN5bmNocm9uaXphdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBEQVRBMCBQSUQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERBVEExIFBJRC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIERBVEEwIG9yIERBVEExIFBJRCBpbiB0aGUgZm9sbG93aW5nIElOIHRva2VuIHRyYW5zYWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8aGFyZHdhcmUgd2lsbCB0b2dnbGUgYXV0b21hdGljYWxseSBpbiBJTiB0b2tlbiBiYXNlIG9uIHRoZSBiaXQuCisgICAgICogfFs5XSAgICAgfENTVEFMTCAgICB8Q2xlYXIgU1RBTEwgUmVzcG9uc2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGlzYWJsZSB0aGUgZGV2aWNlIHRvIGNsZWFyIHRoZSBTVEFMTCBoYW5kc2hha2UgaW4gc2V0dXAgc3RhZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIHRoZSBkZXZpY2UgdG8gcmVzcG9uc2UgU1RBTEwgaGFuZHNoYWtlIGluIHNldHVwIHN0YWdlLgorICAgICAqIEB2YXIgVVNCRF9FUF9UOjpDRkdQCisgICAgICogT2Zmc2V0OiAweDUwQy8weDUxQy8weDUyQy8weDUzQy8weDU0Qy8weDU1Qy8weDU2Qy8weDU3Qy8weDU4Qy8weDU5Qy8weDVBQy8weDVCQyAgRW5kcG9pbnQgU2V0IFN0YWxsIGFuZCBDbGVhciBJbi9PdXQgUmVhZHkgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfENMUlJEWSAgICB8Q2xlYXIgUmVhZHkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHRoZSBVU0JEX01YUExEeCByZWdpc3RlciBpcyBzZXQgYnkgdXNlciwgaXQgbWVhbnMgdGhhdCB0aGUgZW5kcG9pbnQgaXMgcmVhZHkgdG8gdHJhbnNtaXQgb3IgcmVjZWl2ZSBkYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdGhlIHVzZXIgd2FudHMgdG8gZGlzYWJsZSB0aGlzIHRyYW5zYWN0aW9uIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gc3RhcnQsIHVzZXJzIGNhbiBzZXQgdGhpcyBiaXQgdG8gMSB0byBkaXNhYmxlIGl0IGFuZCBpdCBpcyBhdXRvIGNsZWFyIHRvIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIElOIHRva2VuLCB3cml0ZSAnMScgdG8gY2xlYXIgdGhlIElOIHRva2VuIGhhZCByZWFkeSB0byB0cmFuc21pdCB0aGUgZGF0YSB0byBVU0IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIE9VVCB0b2tlbiwgd3JpdGUgJzEnIHRvIGNsZWFyIHRoZSBPVVQgdG9rZW4gaGFkIHJlYWR5IHRvIHJlY2VpdmUgdGhlIGRhdGEgZnJvbSBVU0IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgd3JpdGUgMSBvbmx5IGFuZCBpcyBhbHdheXMgMCB3aGVuIGl0IGlzIHJlYWQgYmFjay4KKyAgICAgKiB8WzFdICAgICB8U1NUQUxMICAgIHxTZXQgU1RBTEwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGlzYWJsZSB0aGUgZGV2aWNlIHRvIHJlc3BvbnNlIFNUQUxMLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgdGhlIGRldmljZSB0byByZXNwb25kIFNUQUxMIGF1dG9tYXRpY2FsbHkuCisgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCVUZTRUc7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gRW5kcG9pbnQgQnVmZmVyIFNlZ21lbnRhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTVhQTEQ7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIEVuZHBvaW50IE1heGltYWwgUGF5bG9hZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENGRzsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBFbmRwb2ludCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBDRkdQOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gRW5kcG9pbnQgU2V0IFN0YWxsIGFuZCBDbGVhciBJbi9PdXQgUmVhZHkgQ29udHJvbCBSZWdpc3RlciAgICAgICAqLworCit9IFVTQkRfRVBfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBVU0JEX1Q6OklOVEVOCisgICAgICogT2Zmc2V0OiAweDAwICBVU0IgRGV2aWNlIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxCVVNJRU4gICAgfEJ1cyBFdmVudCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCVVMgZXZlbnQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCVVMgZXZlbnQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFVTQklFTiAgICB8VVNCIEV2ZW50IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQiBldmVudCBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8VkJERVRJRU4gIHxWQlVTIERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBWQlVTIGRldGVjdGlvbiBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFZCVVMgZGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxORVZXS0lFTiAgfFVTQiBOby1ldmVudC13YWtlLXVwIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vLWV2ZW50LXdha2UtdXAgSW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBOby1ldmVudC13YWtlLXVwIEludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxTT0ZJRU4gICAgfFN0YXJ0IG9mIEZyYW1lIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFNPRiBJbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNPRiBJbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzhdICAgICB8V0tFTiAgICAgIHxXYWtlLXVwIEZ1bmN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVVNCIHdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiB3YWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsxNV0gICAgfElOTkFLRU4gICB8QWN0aXZlIE5BSyBGdW5jdGlvbiBhbmQgSXRzIFN0YXR1cyBpbiBJTiBUb2tlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXaGVuIGRldmljZSByZXNwb25kcyBOQUsgYWZ0ZXIgcmVjZWl2aW5nIElOIHRva2VuLCBJTiBOQUsgc3RhdHVzIHdpbGwgbm90IGJlIHVwZGF0ZWQgdG8gVVNCRF9FUFNUUzAgYW5kIFVTQkRfRVBTVFMxcmVnaXN0ZXIsIHNvIHRoYXQgdGhlIFVTQiBpbnRlcnJ1cHQgZXZlbnQgd2lsbCBub3QgYmUgYXNzZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElOIE5BSyBzdGF0dXMgd2lsbCBiZSB1cGRhdGVkIHRvIFVTQkRfRVBTVFMwIGFuZCBVU0JEX0VQU1RTMSByZWdpc3RlciBhbmQgdGhlIFVTQiBpbnRlcnJ1cHQgZXZlbnQgd2lsbCBiZSBhc3NlcnRlZCwgd2hlbiB0aGUgZGV2aWNlIHJlc3BvbmRzIE5BSyBhZnRlciByZWNlaXZpbmcgSU4gdG9rZW4uCisgICAgICogQHZhciBVU0JEX1Q6OklOVFNUUworICAgICAqIE9mZnNldDogMHgwNCAgVVNCIERldmljZSBJbnRlcnJ1cHQgRXZlbnQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8QlVTSUYgICAgIHxCVVMgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBCVVMgZXZlbnQgbWVhbnMgdGhhdCB0aGVyZSBpcyBvbmUgb2YgdGhlIHN1c3BlbnNlIG9yIHRoZSByZXN1bWUgZnVuY3Rpb24gaW4gdGhlIGJ1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gQlVTIGV2ZW50IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCdXMgZXZlbnQgb2NjdXJyZWQ7IGNoZWNrIFVTQkRfQVRUUlszOjBdIHRvIGtub3cgd2hpY2gga2luZCBvZiBidXMgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMF0uCisgICAgICogfFsxXSAgICAgfFVTQklGICAgICB8VVNCIEV2ZW50IEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgVVNCIGV2ZW50IGluY2x1ZGVzIHRoZSBTRVRVUCBUb2tlbiwgSU4gVG9rZW4sIE9VVCBBQ0ssIElTTyBJTiwgb3IgSVNPIE9VVCBldmVudHMgaW4gdGhlIGJ1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gVVNCIGV2ZW50IG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgb2NjdXJyZWQsIGNoZWNrIEVQU1RTMH41WzI6MF0gdG8ga25vdyB3aGljaCBraW5kIG9mIFVTQiBldmVudCB3YXMgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1sxXSBvciBFUFNUUzB+MTEgYW5kIFNFVFVQIChVU0JEX0lOVFNUU1szMV0pLgorICAgICAqIHxbMl0gICAgIHxWQkRFVElGICAgfFZCVVMgRGV0ZWN0aW9uIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlcmUgaXMgbm90IGF0dGFjaGVkL2RldGFjaGVkIGV2ZW50IGluIHRoZSBVU0IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZXJlIGlzIGF0dGFjaGVkL2RldGFjaGVkIGV2ZW50IGluIHRoZSBVU0IgYnVzIGFuZCBpdCBpcyBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMl0uCisgICAgICogfFszXSAgICAgfE5FVldLSUYgICB8Tm8tZXZlbnQtd2FrZS11cCBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5FVldLIGV2ZW50IGRvZXMgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBOby1ldmVudC13YWtlLXVwIGV2ZW50IG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbM10uCisgICAgICogfFs0XSAgICAgfFNPRklGICAgICB8U3RhcnQgb2YgRnJhbWUgSW50ZXJydXB0IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTT0YgZXZlbnQgZG9lcyBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNPRiBldmVudCBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzRdLgorICAgICAqIHxbMTZdICAgIHxFUEVWVDAgICAgfEVuZHBvaW50IDAncyBVU0IgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGV2ZW50IG9jY3VycmVkIGluIGVuZHBvaW50IDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBvY2N1cnJlZCBvbiBFbmRwb2ludCAwLCBjaGVjayBVU0JEX0VQU1RTMFszOjBdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMTZdIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMTddICAgIHxFUEVWVDEgICAgfEVuZHBvaW50IDEncyBVU0IgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGV2ZW50IG9jY3VycmVkIGluIGVuZHBvaW50IDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBvY2N1cnJlZCBvbiBFbmRwb2ludCAxLCBjaGVjayBVU0JEX0VQU1RTMFs3OjRdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMTddIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMThdICAgIHxFUEVWVDIgICAgfEVuZHBvaW50IDIncyBVU0IgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGV2ZW50IG9jY3VycmVkIGluIGVuZHBvaW50IDIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBvY2N1cnJlZCBvbiBFbmRwb2ludCAyLCBjaGVjayBVU0JEX0VQU1RTMFsxMTo4XSB0byBrbm93IHdoaWNoIGtpbmQgb2YgVVNCIGV2ZW50IHdhcyBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzE4XSBvciBVU0JEX0lOVFNUU1sxXS4KKyAgICAgKiB8WzE5XSAgICB8RVBFVlQzICAgIHxFbmRwb2ludCAzJ3MgVVNCIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBldmVudCBvY2N1cnJlZCBpbiBlbmRwb2ludCAzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgb2NjdXJyZWQgb24gRW5kcG9pbnQgMywgY2hlY2sgVVNCRF9FUFNUUzBbMTU6MTJdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMTldIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMjBdICAgIHxFUEVWVDQgICAgfEVuZHBvaW50IDQncyBVU0IgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGV2ZW50IG9jY3VycmVkIGluIGVuZHBvaW50IDQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBvY2N1cnJlZCBvbiBFbmRwb2ludCA0LCBjaGVjayBVU0JEX0VQU1RTMFsxOToxNl0gdG8ga25vdyB3aGljaCBraW5kIG9mIFVTQiBldmVudCB3YXMgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1syMF0gb3IgVVNCRF9JTlRTVFNbMV0uCisgICAgICogfFsyMV0gICAgfEVQRVZUNSAgICB8RW5kcG9pbnQgNSdzIFVTQiBFdmVudCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXZlbnQgb2NjdXJyZWQgaW4gZW5kcG9pbnQgNS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIGV2ZW50IG9jY3VycmVkIG9uIEVuZHBvaW50IDUsIGNoZWNrIFVTQkRfRVBTVFMwWzIzOjIwXSB0byBrbm93IHdoaWNoIGtpbmQgb2YgVVNCIGV2ZW50IHdhcyBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzIxXSBvciBVU0JEX0lOVFNUU1sxXS4KKyAgICAgKiB8WzIyXSAgICB8RVBFVlQ2ICAgIHxFbmRwb2ludCA2J3MgVVNCIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBldmVudCBvY2N1cnJlZCBpbiBlbmRwb2ludCA2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgb2NjdXJyZWQgb24gRW5kcG9pbnQgNiwgY2hlY2sgVVNCRF9FUFNUUzBbMjc6MjRdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMjJdIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMjNdICAgIHxFUEVWVDcgICAgfEVuZHBvaW50IDcncyBVU0IgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGV2ZW50IG9jY3VycmVkIGluIGVuZHBvaW50IDcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFVTQiBldmVudCBvY2N1cnJlZCBvbiBFbmRwb2ludCA3LCBjaGVjayBVU0JEX0VQU1RTMFszMToyOF0gdG8ga25vdyB3aGljaCBraW5kIG9mIFVTQiBldmVudCB3YXMgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1syM10gb3IgVVNCRF9JTlRTVFNbMV0uCisgICAgICogfFsyNF0gICAgfEVQRVZUOCAgICB8RW5kcG9pbnQgOCdzIFVTQiBFdmVudCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXZlbnQgb2NjdXJyZWQgaW4gZW5kcG9pbnQgOC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIGV2ZW50IG9jY3VycmVkIG9uIEVuZHBvaW50IDgsIGNoZWNrIFVTQkRfRVBTVFMxWzM6MF0gdG8ga25vdyB3aGljaCBraW5kIG9mIFVTQiBldmVudCB3YXMgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1syNF0gb3IgVVNCRF9JTlRTVFNbMV0uCisgICAgICogfFsyNV0gICAgfEVQRVZUOSAgICB8RW5kcG9pbnQgOSdzIFVTQiBFdmVudCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZXZlbnQgb2NjdXJyZWQgaW4gZW5kcG9pbnQgOS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIGV2ZW50IG9jY3VycmVkIG9uIEVuZHBvaW50IDksIGNoZWNrIFVTQkRfRVBTVFMxWzc6NF0gdG8ga25vdyB3aGljaCBraW5kIG9mIFVTQiBldmVudCB3YXMgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1syNV0gb3IgVVNCRF9JTlRTVFNbMV0uCisgICAgICogfFsyNl0gICAgfEVQRVZUMTAgICB8RW5kcG9pbnQgMTAncyBVU0IgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGV2ZW50IG9jY3VycmVkIGluIGVuZHBvaW50IDEwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgZXZlbnQgb2NjdXJyZWQgb24gRW5kcG9pbnQgMTAsIGNoZWNrIFVTQkRfRVBTVFMxWzExOjhdIHRvIGtub3cgd2hpY2gga2luZCBvZiBVU0IgZXZlbnQgd2FzIG9jY3VycmVkLCBjbGVhcmVkIGJ5IHdyaXRlIDEgdG8gVVNCRF9JTlRTVFNbMjZdIG9yIFVTQkRfSU5UU1RTWzFdLgorICAgICAqIHxbMjddICAgIHxFUEVWVDExICAgfEVuZHBvaW50IDExJ3MgVVNCIEV2ZW50IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBldmVudCBvY2N1cnJlZCBpbiBlbmRwb2ludCAxMS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVVNCIGV2ZW50IG9jY3VycmVkIG9uIEVuZHBvaW50IDExLCBjaGVjayBVU0JEX0VQU1RTMVsxNToxMl0gdG8ga25vdyB3aGljaCBraW5kIG9mIFVTQiBldmVudCB3YXMgb2NjdXJyZWQsIGNsZWFyZWQgYnkgd3JpdGUgMSB0byBVU0JEX0lOVFNUU1syN10gb3IgVVNCRF9JTlRTVFNbMV0uCisgICAgICogfFszMV0gICAgfFNFVFVQICAgICB8U2V0dXAgRXZlbnQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIFNldHVwIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXR1cCBldmVudCBvY2N1cnJlZCwgY2xlYXJlZCBieSB3cml0ZSAxIHRvIFVTQkRfSU5UU1RTWzMxXS4KKyAgICAgKiBAdmFyIFVTQkRfVDo6RkFERFIKKyAgICAgKiBPZmZzZXQ6IDB4MDggIFVTQiBEZXZpY2UgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs2OjBdICAgfEZBRERSICAgICB8VVNCIERldmljZSBGdW5jdGlvbiBBZGRyZXNzCisgICAgICogQHZhciBVU0JEX1Q6OkVQU1RTCisgICAgICogT2Zmc2V0OiAweDBDICBVU0IgRGV2aWNlIEVuZHBvaW50IFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3XSAgICAgfE9WICAgICAgICB8T3ZlcnJ1bgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGluZGljYXRlcyB0aGF0IHRoZSByZWNlaXZlZCBkYXRhIGlzIG92ZXIgdGhlIG1heGltdW0gcGF5bG9hZCBudW1iZXIgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBvdmVycnVuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdXQgRGF0YSBpcyBtb3JlIHRoYW4gdGhlIE1heCBQYXlsb2FkIGluIE1YUExEIHJlZ2lzdGVyIG9yIHRoZSBTZXR1cCBEYXRhIGlzIG1vcmUgdGhhbiA4IEJ5dGVzLgorICAgICAqIEB2YXIgVVNCRF9UOjpBVFRSCisgICAgICogT2Zmc2V0OiAweDEwICBVU0IgRGV2aWNlIEJ1cyBTdGF0dXMgYW5kIEF0dHJpYnV0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8VVNCUlNUICAgIHxVU0IgUmVzZXQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEJ1cyBubyByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnVzIHJlc2V0IHdoZW4gU0UwIChzaW5nbGUtZW5kZWQgMCkgbW9yZSB0aGFuIDIuNXVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seS4KKyAgICAgKiB8WzFdICAgICB8U1VTUEVORCAgIHxTdXNwZW5kIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCdXMgbm8gc3VzcGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQnVzIGlkbGUgbW9yZSB0aGFuIDNtcywgZWl0aGVyIGNhYmxlIGlzIHBsdWdnZWQgb2ZmIG9yIGhvc3QgaXMgc2xlZXBpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgcmVhZCBvbmx5LgorICAgICAqIHxbMl0gICAgIHxSRVNVTUUgICAgfFJlc3VtZSBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gYnVzIHJlc3VtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzdW1lIGZyb20gc3VzcGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkuCisgICAgICogfFszXSAgICAgfFRPVVQgICAgICB8VGltZS1vdXQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIHRpbWUtb3V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBObyBCdXMgcmVzcG9uc2UgbW9yZSB0aGFuIDE4IGJpdHMgdGltZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkuCisgICAgICogfFs0XSAgICAgfFBIWUVOICAgICB8UEhZIFRyYW5zY2VpdmVyIEZ1bmN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEhZIHRyYW5zY2VpdmVyIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQSFkgdHJhbnNjZWl2ZXIgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8UldBS0VVUCAgIHxSZW1vdGUgV2FrZS11cAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWxlYXNlIHRoZSBVU0IgYnVzIGZyb20gSyBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRm9yY2UgVVNCIGJ1cyB0byBLIChVU0JfRCsgbG93LCBVU0JfRC06IGhpZ2gpIHN0YXRlLCB1c2VkIGZvciByZW1vdGUgd2FrZS11cC4KKyAgICAgKiB8WzddICAgICB8VVNCRU4gICAgIHxVU0IgQ29udHJvbGxlciBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFVTQiBDb250cm9sbGVyIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVU0IgQ29udHJvbGxlciBFbmFibGVkLgorICAgICAqIHxbOF0gICAgIHxEUFBVRU4gICAgfFB1bGwtdXAgUmVzaXN0b3Igb24gVVNCX0RQIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUHVsbC11cCByZXNpc3RvciBpbiBVU0JfRCsgYnVzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQdWxsLXVwIHJlc2lzdG9yIGluIFVTQl9EKyBidXMgQWN0aXZlLgorICAgICAqIHxbMTBdICAgIHxCWVRFTSAgICAgfENQVSBBY2Nlc3MgVVNCIFNSQU0gU2l6ZSBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXb3JkIG1vZGU6IFRoZSBzaXplIG9mIHRoZSB0cmFuc2ZlciBmcm9tIENQVSB0byBVU0IgU1JBTSBjYW4gYmUgV29yZCBvbmx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBCeXRlIG1vZGU6IFRoZSBzaXplIG9mIHRoZSB0cmFuc2ZlciBmcm9tIENQVSB0byBVU0IgU1JBTSBjYW4gYmUgQnl0ZSBvbmx5LgorICAgICAqIHxbMTFdICAgIHxMUE1BQ0sgICAgfExQTSBUb2tlbiBBY2tub3dsZWRnZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIE5ZRVQvQUNLIHdpbGwgYmUgcmV0dXJuZWQgb25seSBvbiBhIHN1Y2Nlc3NmdWwgTFBNIHRyYW5zYWN0aW9uIGlmIG5vIGVycm9ycyBpbiBib3RoIHRoZSBFWFQgdG9rZW4gYW5kIHRoZSBMUE0gdG9rZW4gYW5kIGEgdmFsaWQgYkxpbmtTdGF0ZSA9IDAwMDEgKEwxKSBpcyByZWNlaXZlZCwgZWxzZSBFUlJPUiBhbmQgU1RBTEwgd2lsbCBiZSByZXR1cm5lZCBhdXRvbWF0aWNhbGx5LCByZXNwZWN0aXZlbHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MD0gdGhlIHZhbGlkIExQTSBUb2tlbiB3aWxsIGJlIE5ZRVQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MT0gdGhlIHZhbGlkIExQTSBUb2tlbiB3aWxsIGJlIEFDSy4KKyAgICAgKiB8WzEyXSAgICB8TDFTVVNQRU5EIHxMUE0gTDEgU3VzcGVuZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCdXMgbm8gTDEgc3RhdGUgc3VzcGVuZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhpcyBiaXQgaXMgc2V0IGJ5IHRoZSBoYXJkd2FyZSB3aGVuIExQTSBjb21tYW5kIHRvIGVudGVyIHRoZSBMMSBzdGF0ZSBpcyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYW5kIGFja25vd2xlZGdlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyByZWFkIG9ubHkuCisgICAgICogfFsxM10gICAgfEwxUkVTVU1FICB8TFBNIEwxIFJlc3VtZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBCdXMgbm8gTFBNIEwxIHN0YXRlIHJlc3VtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gTFBNIEwxIHN0YXRlIFJlc3VtZSBmcm9tIExQTSBMMSBzdGF0ZSBzdXNwZW5kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGlzIHJlYWQgb25seS4KKyAgICAgKiBAdmFyIFVTQkRfVDo6VkJVU0RFVAorICAgICAqIE9mZnNldDogMHgxNCAgVVNCIERldmljZSBWQlVTIERldGVjdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFZCVVNERVQgICB8RGV2aWNlIFZCVVMgRGV0ZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbnRyb2xsZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBVU0IgaG9zdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ29udHJvbGxlciBpcyBhdHRhY2hlZCB0byB0aGUgVVNCIGhvc3QuCisgICAgICogQHZhciBVU0JEX1Q6OlNUQlVGU0VHCisgICAgICogT2Zmc2V0OiAweDE4ICBTRVRVUCBUb2tlbiBCdWZmZXIgU2VnbWVudGF0aW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzg6M10gICB8U1RCVUZTRUcgIHxTRVRVUCBUb2tlbiBCdWZmZXIgU2VnbWVudGF0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgb2Zmc2V0IGFkZHJlc3MgZm9yIHRoZSBTRVRVUCB0b2tlbiB3aXRoIHRoZSBVU0IgRGV2aWNlIFNSQU0gc3RhcnRpbmcgYWRkcmVzcyBUaGUgZWZmZWN0aXZlIHN0YXJ0aW5nIGFkZHJlc3MgaXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVU0JEX1NSQU0gYWRkcmVzcyArIHtTVEJVRlNFRywgMydiMDAwfQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZXJlIHRoZSBVU0JEX1NSQU0gYWRkcmVzcyA9IFVTQkRfQkErMHgxMDBoLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIHVzZWQgZm9yIFNFVFVQIHRva2VuIG9ubHkuCisgICAgICogQHZhciBVU0JEX1Q6OkVQU1RTMAorICAgICAqIE9mZnNldDogMHgyMCAgVVNCIERldmljZSBFbmRwb2ludCBTdGF0dXMgUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfEVQU1RTMCAgICB8RW5kcG9pbnQgMCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIGVuZHBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEluIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gSW4gTkFLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBPdXQgUGFja2V0IERhdGEwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2V0dXAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBPdXQgUGFja2V0IERhdGExIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gSXNvY2hyb25vdXMgdHJhbnNmZXIgZW5kLgorICAgICAqIHxbNzo0XSAgIHxFUFNUUzEgICAgfEVuZHBvaW50IDEgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhpcyBlbmRwb2ludAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBJbiBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEluIE5BSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gT3V0IFBhY2tldCBEYXRhMCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFNldHVwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gT3V0IFBhY2tldCBEYXRhMSBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IElzb2Nocm9ub3VzIHRyYW5zZmVyIGVuZC4KKyAgICAgKiB8WzExOjhdICB8RVBTVFMyICAgIHxFbmRwb2ludCAyIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgZW5kcG9pbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gSW4gQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBJbiBOQUsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IE91dCBQYWNrZXQgRGF0YTAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTZXR1cCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IE91dCBQYWNrZXQgRGF0YTEgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBJc29jaHJvbm91cyB0cmFuc2ZlciBlbmQuCisgICAgICogfFsxNToxMl0gfEVQU1RTMyAgICB8RW5kcG9pbnQgMyBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIGVuZHBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEluIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gSW4gTkFLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBPdXQgUGFja2V0IERhdGEwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2V0dXAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBPdXQgUGFja2V0IERhdGExIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gSXNvY2hyb25vdXMgdHJhbnNmZXIgZW5kLgorICAgICAqIHxbMTk6MTZdIHxFUFNUUzQgICAgfEVuZHBvaW50IDQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhpcyBlbmRwb2ludAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBJbiBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEluIE5BSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gT3V0IFBhY2tldCBEYXRhMCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFNldHVwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gT3V0IFBhY2tldCBEYXRhMSBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IElzb2Nocm9ub3VzIHRyYW5zZmVyIGVuZC4KKyAgICAgKiB8WzIzOjIwXSB8RVBTVFM1ICAgIHxFbmRwb2ludCA1IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgZW5kcG9pbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gSW4gQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBJbiBOQUsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IE91dCBQYWNrZXQgRGF0YTAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTZXR1cCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IE91dCBQYWNrZXQgRGF0YTEgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBJc29jaHJvbm91cyB0cmFuc2ZlciBlbmQuCisgICAgICogfFsyNzoyNF0gfEVQU1RTNiAgICB8RW5kcG9pbnQgNiBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIGVuZHBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEluIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gSW4gTkFLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBPdXQgUGFja2V0IERhdGEwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2V0dXAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBPdXQgUGFja2V0IERhdGExIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gSXNvY2hyb25vdXMgdHJhbnNmZXIgZW5kLgorICAgICAqIHxbMzE6MjhdIHxFUFNUUzcgICAgfEVuZHBvaW50IDcgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhpcyBlbmRwb2ludAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBJbiBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEluIE5BSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gT3V0IFBhY2tldCBEYXRhMCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFNldHVwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gT3V0IFBhY2tldCBEYXRhMSBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IElzb2Nocm9ub3VzIHRyYW5zZmVyIGVuZC4KKyAgICAgKiBAdmFyIFVTQkRfVDo6RVBTVFMxCisgICAgICogT2Zmc2V0OiAweDI0ICBVU0IgRGV2aWNlIEVuZHBvaW50IFN0YXR1cyBSZWdpc3RlciAxCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzM6MF0gICB8RVBTVFM4ICAgIHxFbmRwb2ludCA4IFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgZW5kcG9pbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gSW4gQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBJbiBOQUsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IE91dCBQYWNrZXQgRGF0YTAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTZXR1cCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IE91dCBQYWNrZXQgRGF0YTEgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBJc29jaHJvbm91cyB0cmFuc2ZlciBlbmQuCisgICAgICogfFs3OjRdICAgfEVQU1RTOSAgICB8RW5kcG9pbnQgOSBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIGVuZHBvaW50CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMCA9IEluIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gSW4gTkFLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBPdXQgUGFja2V0IERhdGEwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gU2V0dXAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSBPdXQgUGFja2V0IERhdGExIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTExID0gSXNvY2hyb25vdXMgdHJhbnNmZXIgZW5kLgorICAgICAqIHxbMTE6OF0gIHxFUFNUUzEwICAgfEVuZHBvaW50IDEwIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgZW5kcG9pbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gSW4gQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDEgPSBJbiBOQUsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IE91dCBQYWNrZXQgRGF0YTAgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSBTZXR1cCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IE91dCBQYWNrZXQgRGF0YTEgQUNLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTEgPSBJc29jaHJvbm91cyB0cmFuc2ZlciBlbmQuCisgICAgICogfFsxNToxMl0gfEVQU1RTMTEgICB8RW5kcG9pbnQgMTEgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlc2UgYml0cyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhpcyBlbmRwb2ludAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSBJbiBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IEluIE5BSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwID0gT3V0IFBhY2tldCBEYXRhMCBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMSA9IFNldHVwIEFDSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTEwID0gT3V0IFBhY2tldCBEYXRhMSBBQ0suCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IElzb2Nocm9ub3VzIHRyYW5zZmVyIGVuZC4KKyAgICAgKiBAdmFyIFVTQkRfVDo6TFBNQVRUUgorICAgICAqIE9mZnNldDogMHg4OCAgVVNCIExQTSBBdHRyaWJ1dGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszOjBdICAgfExQTUxJTktTVFN8TFBNIExpbmsgU3RhdGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGNvbnRhaW4gdGhlIGJMaW5rU3RhdGUgcmVjZWl2ZWQgd2l0aCBsYXN0IEFDSyBMUE0gVG9rZW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gUmVzZXJ2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gTDEgKFNsZWVwKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEwIC0gMTExMSA9IFJlc2VydmUuCisgICAgICogfFs3OjRdICAgfExQTUJFU0wgICB8TFBNIEJlc3QgRWZmb3J0IFNlcnZpY2UgTGF0ZW5jeQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIGJpdHMgY29udGFpbiB0aGUgQkVTTCB2YWx1ZSByZWNlaXZlZCB3aXRoIGxhc3QgQUNLIExQTSBUb2tlbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMDAgPSAxMjV1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAxID0gMTUwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAxMCA9IDIwMHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTEgPSAzMDB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMTAwID0gNDAwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IDUwMHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMTAgPSAxMDAwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IDIwMDB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gMzAwMHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSA0MDAwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IDUwMDB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gNjAwMHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDAgPSA3MDAwdXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IDgwMDB1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTEwID0gOTAwMHVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTEgPSAxMDAwMHVzLgorICAgICAqIHxbOF0gICAgIHxMUE1SV0FLVVAgfExQTSBSZW1vdGUgV2FrZXVwCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY29udGFpbnMgdGhlIGJSZW1vdGVXYWtlIHZhbHVlIHJlY2VpdmVkIHdpdGggbGFzdCBBQ0sgTFBNIFRva2VuCisgICAgICogQHZhciBVU0JEX1Q6OkZOCisgICAgICogT2Zmc2V0OiAweDhDICBVU0IgRnJhbWUgbnVtYmVyIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzEwOjBdICB8Rk4gICAgICAgIHxGcmFtZSBOdW1iZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGNvbnRhaW4gdGhlIDExLWJpdHMgZnJhbWUgbnVtYmVyIGluIHRoZSBsYXN0IHJlY2VpdmVkIFNPRiBwYWNrZXQuCisgICAgICogQHZhciBVU0JEX1Q6OlNFMAorICAgICAqIE9mZnNldDogMHg5MCAgVVNCIERldmljZSBEcml2ZSBTRTAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNFMCAgICAgICB8RHJpdmUgU2luZ2xlIEVuZGVkIFplcm8gaW4gVVNCIEJ1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBTaW5nbGUgRW5kZWQgWmVybyAoU0UwKSBpcyB3aGVuIGJvdGggbGluZXMgKFVTQl9EKyBhbmQgVVNCX0QtKSBhcmUgYmVpbmcgcHVsbGVkIGxvdy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRm9yY2UgVVNCIFBIWSB0cmFuc2NlaXZlciB0byBkcml2ZSBTRTAuCisgICAgICovCisKKyAgICBfX0lPIHVpbnQzMl90IElOVEVOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBVU0IgRGV2aWNlIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBJTlRTVFM7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gVVNCIERldmljZSBJbnRlcnJ1cHQgRXZlbnQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgRkFERFI7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIFVTQiBEZXZpY2UgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEVQU1RTOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDBjXSBVU0IgRGV2aWNlIEVuZHBvaW50IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBVFRSOyAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gVVNCIERldmljZSBCdXMgU3RhdHVzIGFuZCBBdHRyaWJ1dGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgVkJVU0RFVDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMTRdIFVTQiBEZXZpY2UgVkJVUyBEZXRlY3Rpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQlVGU0VHOyAgICAgICAgICAgICAgLyohPCBbMHgwMDE4XSBTRVRVUCBUb2tlbiBCdWZmZXIgU2VnbWVudGF0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsxXTsKKyAgICBfX0kgIHVpbnQzMl90IEVQU1RTMDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBVU0IgRGV2aWNlIEVuZHBvaW50IFN0YXR1cyBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBFUFNUUzE7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyNF0gVVNCIERldmljZSBFbmRwb2ludCBTdGF0dXMgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbMjRdOworICAgIF9fSSAgdWludDMyX3QgTFBNQVRUUjsgICAgICAgICAgICAgICAvKiE8IFsweDAwODhdIFVTQiBMUE0gQXR0cmlidXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEZOOyAgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDhjXSBVU0IgRnJhbWUgbnVtYmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBTRTA7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA5MF0gVVNCIERldmljZSBEcml2ZSBTRTAgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbMjgzXTsKKyAgICBVU0JEX0VQX1QgICAgIEVQWzEyXTsgICAgICAgICAgICAgICAgLyohPCBbMHg1MDB+MHg1YmNdIFVTQiBFbmQgUG9pbnQgMCB+IDExIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICovCisKK30gVVNCRF9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBVU0JEX0NPTlNUIFVTQkQgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgVVNCRCBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFVTQkRfSU5URU5fQlVTSUVOX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVEVOOiBCVVNJRU4gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVEVOX0JVU0lFTl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRFTl9CVVNJRU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogQlVTSUVOIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVEVOX1VTQklFTl9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogVVNCSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRFTl9VU0JJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5URU5fVVNCSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5URU46IFVTQklFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRFTl9WQkRFVElFTl9Qb3MgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5URU46IFZCREVUSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5URU5fVkJERVRJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVEVOX1ZCREVUSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVEVOOiBWQkRFVElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5URU5fTkVWV0tJRU5fUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVEVOOiBORVZXS0lFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVEVOX05FVldLSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRFTl9ORVZXS0lFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogTkVWV0tJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVEVOX1NPRklFTl9Qb3MgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogU09GSUVOIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRFTl9TT0ZJRU5fTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5URU5fU09GSUVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5URU46IFNPRklFTiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRFTl9XS0VOX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5URU46IFdLRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5URU5fV0tFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVEVOX1dLRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVEVOOiBXS0VOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5URU5fSU5OQUtFTl9Qb3MgICAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVEVOOiBJTk5BS0VOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVEVOX0lOTkFLRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRFTl9JTk5BS0VOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRFTjogSU5OQUtFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19CVVNJRl9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEJVU0lGIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfQlVTSUZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX0JVU0lGX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBCVVNJRiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfVVNCSUZfUG9zICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBVU0JJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX1VTQklGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19VU0JJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogVVNCSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX1ZCREVUSUZfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogVkJERVRJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19WQkRFVElGX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfVkJERVRJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IFZCREVUSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19ORVZXS0lGX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IE5FVldLSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfTkVWV0tJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX05FVldLSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBORVZXS0lGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfU09GSUZfUG9zICAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBTT0ZJRiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX1NPRklGX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19TT0ZJRl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogU09GSUYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUMF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQwIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDBfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfRVBFVlQwX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUMCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDFfUG9zICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUMSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQxX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX0VQRVZUMV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDEgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQyX1BvcyAgICAgICAgICAgKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUMl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19FUEVWVDJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQyIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUM19Qb3MgICAgICAgICAgICgxOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQzIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDNfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfRVBFVlQzX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUMyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDRfUG9zICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUNCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQ0X01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX0VQRVZUNF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDQgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQ1X1BvcyAgICAgICAgICAgKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUNV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19FUEVWVDVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQ1IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUNl9Qb3MgICAgICAgICAgICgyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQ2IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfRVBFVlQ2X1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUNiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDdfUG9zICAgICAgICAgICAoMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUNyBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQ3X01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX0VQRVZUN19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDcgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQ4X1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUOF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19FUEVWVDhfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQ4IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUOV9Qb3MgICAgICAgICAgICgyNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQ5IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDlfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfRVBFVlQ5X1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUOSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19FUEVWVDEwX1BvcyAgICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IEVQRVZUMTAgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQxMF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfSU5UU1RTX0VQRVZUMTBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDEwIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9JTlRTVFNfRVBFVlQxMV9Qb3MgICAgICAgICAgKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6SU5UU1RTOiBFUEVWVDExIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQRVZUMTFfTXNrICAgICAgICAgICgweDF1bCA8PCBVU0JEX0lOVFNUU19FUEVWVDExX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogRVBFVlQxMSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfSU5UU1RTX1NFVFVQX1BvcyAgICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OklOVFNUUzogU0VUVVAgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU0JEX0lOVFNUU19TRVRVUF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9JTlRTVFNfU0VUVVBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpJTlRTVFM6IFNFVFVQIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0ZBRERSX0ZBRERSX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpGQUREUjogRkFERFIgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9GQUREUl9GQUREUl9Nc2sgICAgICAgICAgICAgKDB4N2Z1bCA8PCBVU0JEX0ZBRERSX0ZBRERSX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RkFERFI6IEZBRERSIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9FUFNUU19PVl9Qb3MgICAgICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFM6IE9WIFBvc2l0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQkRfRVBTVFNfT1ZfTXNrICAgICAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0VQU1RTX09WX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTOiBPViBNYXNrICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQVRUUl9VU0JSU1RfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IFVTQlJTVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVU0JEX0FUVFJfVVNCUlNUX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9BVFRSX1VTQlJTVF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBVU0JSU1QgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0FUVFJfU1VTUEVORF9Qb3MgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBTVVNQRU5EIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9BVFRSX1NVU1BFTkRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQVRUUl9TVVNQRU5EX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogU1VTUEVORCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9BVFRSX1JFU1VNRV9Qb3MgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogUkVTVU1FIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVTQkRfQVRUUl9SRVNVTUVfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0FUVFJfUkVTVU1FX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IFJFU1VNRSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQVRUUl9UT1VUX1BvcyAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IFRPVVQgUG9zaXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBVU0JEX0FUVFJfVE9VVF9Nc2sgICAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9BVFRSX1RPVVRfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBUT1VUIE1hc2sgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0FUVFJfUEhZRU5fUG9zICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBQSFlFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9BVFRSX1BIWUVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQVRUUl9QSFlFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogUEhZRU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9BVFRSX1JXQUtFVVBfUG9zICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogUldBS0VVUCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTQkRfQVRUUl9SV0FLRVVQX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0FUVFJfUldBS0VVUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IFJXQUtFVVAgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQVRUUl9VU0JFTl9Qb3MgICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IFVTQkVOIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBVU0JEX0FUVFJfVVNCRU5fTXNrICAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9BVFRSX1VTQkVOX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBVU0JFTiBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0FUVFJfRFBQVUVOX1BvcyAgICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBEUFBVRU4gUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9BVFRSX0RQUFVFTl9Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQVRUUl9EUFBVRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogRFBQVUVOIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9BVFRSX0JZVEVNX1BvcyAgICAgICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogQllURU0gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVTQkRfQVRUUl9CWVRFTV9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0FUVFJfQllURU1fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IEJZVEVNIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQVRUUl9MUE1BQ0tfUG9zICAgICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IExQTUFDSyBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVU0JEX0FUVFJfTFBNQUNLX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9BVFRSX0xQTUFDS19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBMUE1BQ0sgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0FUVFJfTDFTVVNQRU5EX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpBVFRSOiBMMVNVU1BFTkQgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCRF9BVFRSX0wxU1VTUEVORF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQVRUUl9MMVNVU1BFTkRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogTDFTVVNQRU5EIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9BVFRSX0wxUkVTVU1FX1BvcyAgICAgICAgICAgKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6QVRUUjogTDFSRVNVTUUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfQVRUUl9MMVJFU1VNRV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0FUVFJfTDFSRVNVTUVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkFUVFI6IEwxUkVTVU1FIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfVkJVU0RFVF9WQlVTREVUX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OlZCVVNERVQ6IFZCVVNERVQgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU0JEX1ZCVVNERVRfVkJVU0RFVF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNCRF9WQlVTREVUX1ZCVVNERVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpWQlVTREVUOiBWQlVTREVUIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX1NUQlVGU0VHX1NUQlVGU0VHX1BvcyAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpTVEJVRlNFRzogU1RCVUZTRUcgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVNCRF9TVEJVRlNFR19TVEJVRlNFR19Nc2sgICAgICAgKDB4M2Z1bCA8PCBVU0JEX1NUQlVGU0VHX1NUQlVGU0VHX1BvcykgICAgICAgICAgICAvKiE8IFVTQkRfVDo6U1RCVUZTRUc6IFNUQlVGU0VHIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFMwX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzAgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTMF9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBVU0JEX0VQU1RTMF9FUFNUUzBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFMwIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTMV9Qb3MgICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFMxIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzFfTXNrICAgICAgICAgICAoMHhmdWwgPDwgVVNCRF9FUFNUUzBfRVBTVFMxX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTMSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzJfUG9zICAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTMiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFMyX01zayAgICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfRVBTVFMwX0VQU1RTMl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzIgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFMzX1BvcyAgICAgICAgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzMgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTM19Nc2sgICAgICAgICAgICgweGZ1bCA8PCBVU0JEX0VQU1RTMF9FUFNUUzNfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFMzIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTNF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFM0IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzRfTXNrICAgICAgICAgICAoMHhmdWwgPDwgVVNCRF9FUFNUUzBfRVBTVFM0X1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTNCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzVfUG9zICAgICAgICAgICAoMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTNSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFM1X01zayAgICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfRVBTVFMwX0VQU1RTNV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9FUFNUUzBfRVBTVFM2X1BvcyAgICAgICAgICAgKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMwOiBFUFNUUzYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTNl9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBVU0JEX0VQU1RTMF9FUFNUUzZfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFM2IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRVBTVFMwX0VQU1RTN19Qb3MgICAgICAgICAgICgyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMDogRVBTVFM3IFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU0JEX0VQU1RTMF9FUFNUUzdfTXNrICAgICAgICAgICAoMHhmdWwgPDwgVVNCRF9FUFNUUzBfRVBTVFM3X1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzA6IEVQU1RTNyBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0VQU1RTMV9FUFNUUzhfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzE6IEVQU1RTOCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9FUFNUUzFfRVBTVFM4X01zayAgICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfRVBTVFMxX0VQU1RTOF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMxOiBFUFNUUzggTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9FUFNUUzFfRVBTVFM5X1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMxOiBFUFNUUzkgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkRfRVBTVFMxX0VQU1RTOV9Nc2sgICAgICAgICAgICgweGZ1bCA8PCBVU0JEX0VQU1RTMV9FUFNUUzlfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMTogRVBTVFM5IE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfRVBTVFMxX0VQU1RTMTBfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkVQU1RTMTogRVBTVFMxMCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JEX0VQU1RTMV9FUFNUUzEwX01zayAgICAgICAgICAoMHhmdWwgPDwgVVNCRF9FUFNUUzFfRVBTVFMxMF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzE6IEVQU1RTMTAgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0VQU1RTMV9FUFNUUzExX1BvcyAgICAgICAgICAoMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpFUFNUUzE6IEVQU1RTMTEgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCRF9FUFNUUzFfRVBTVFMxMV9Nc2sgICAgICAgICAgKDB4ZnVsIDw8IFVTQkRfRVBTVFMxX0VQU1RTMTFfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6RVBTVFMxOiBFUFNUUzExIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9MUE1BVFRSX0xQTUxJTktTVFNfUG9zICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6TFBNQVRUUjogTFBNTElOS1NUUyBQb3NpdGlvbiAgICovCisjZGVmaW5lIFVTQkRfTFBNQVRUUl9MUE1MSU5LU1RTX01zayAgICAgICgweGZ1bCA8PCBVU0JEX0xQTUFUVFJfTFBNTElOS1NUU19Qb3MpICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkxQTUFUVFI6IExQTUxJTktTVFMgTWFzayAgICAgICAqLworCisjZGVmaW5lIFVTQkRfTFBNQVRUUl9MUE1CRVNMX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkxQTUFUVFI6IExQTUJFU0wgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU0JEX0xQTUFUVFJfTFBNQkVTTF9Nc2sgICAgICAgICAoMHhmdWwgPDwgVVNCRF9MUE1BVFRSX0xQTUJFU0xfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpMUE1BVFRSOiBMUE1CRVNMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0xQTUFUVFJfTFBNUldBS1VQX1BvcyAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpMUE1BVFRSOiBMUE1SV0FLVVAgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVNCRF9MUE1BVFRSX0xQTVJXQUtVUF9Nc2sgICAgICAgKDB4MXVsIDw8IFVTQkRfTFBNQVRUUl9MUE1SV0FLVVBfUG9zKSAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6TFBNQVRUUjogTFBNUldBS1VQIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9GTl9GTl9Qb3MgICAgICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfVDo6Rk46IEZOIFBvc2l0aW9uICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQkRfRk5fRk5fTXNrICAgICAgICAgICAgICAgICAgICgweDdmZnVsIDw8IFVTQkRfRk5fRk5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OkZOOiBGTiBNYXNrICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfU0UwX1NFMF9Qb3MgICAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX1Q6OlNFMDogU0UwIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JEX1NFMF9TRTBfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9TRTBfU0UwX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9UOjpTRTA6IFNFMCBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0JVRlNFR19CVUZTRUdfUG9zICAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpCVUZTRUc6IEJVRlNFRyBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVNCRF9CVUZTRUdfQlVGU0VHX01zayAgICAgICAgICAgKDB4M2Z1bCA8PCBVU0JEX0JVRlNFR19CVUZTRUdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6QlVGU0VHOiBCVUZTRUcgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9NWFBMRF9NWFBMRF9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6TVhQTEQ6IE1YUExEIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkRfTVhQTERfTVhQTERfTXNrICAgICAgICAgICAgICgweDFmZnVsIDw8IFVTQkRfTVhQTERfTVhQTERfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6Ok1YUExEOiBNWFBMRCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQ0ZHX0VQTlVNX1BvcyAgICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkNGRzogRVBOVU0gUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU0JEX0NGR19FUE5VTV9Nc2sgICAgICAgICAgICAgICAoMHhmdWwgPDwgVVNCRF9DRkdfRVBOVU1fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkc6IEVQTlVNIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0NGR19JU09DSF9Qb3MgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkc6IElTT0NIIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9DRkdfSVNPQ0hfTXNrICAgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQ0ZHX0lTT0NIX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6Q0ZHOiBJU09DSCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9DRkdfU1RBVEVfUG9zICAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6Q0ZHOiBTVEFURSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTQkRfQ0ZHX1NUQVRFX01zayAgICAgICAgICAgICAgICgweDN1bCA8PCBVU0JEX0NGR19TVEFURV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkNGRzogU1RBVEUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQ0ZHX0RTUVNZTkNfUG9zICAgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkNGRzogRFNRU1lOQyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JEX0NGR19EU1FTWU5DX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9DRkdfRFNRU1lOQ19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkc6IERTUVNZTkMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JEX0NGR19DU1RBTExfUG9zICAgICAgICAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkc6IENTVEFMTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCRF9DRkdfQ1NUQUxMX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFVTQkRfQ0ZHX0NTVEFMTF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6Q0ZHOiBDU1RBTEwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCRF9DRkdQX0NMUlJEWV9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkRfRVBfVDo6Q0ZHUDogQ0xSUkRZIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkRfQ0ZHUF9DTFJSRFlfTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVU0JEX0NGR1BfQ0xSUkRZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkNGR1A6IENMUlJEWSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkRfQ0ZHUF9TU1RBTExfUG9zICAgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JEX0VQX1Q6OkNGR1A6IFNTVEFMTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JEX0NGR1BfU1NUQUxMX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVVNCRF9DRkdQX1NTVEFMTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVVNCRF9FUF9UOjpDRkdQOiBTU1RBTEwgTWFzayAgICAgICAgICAgKi8KKworCisvKipAfSovIC8qIFVTQkRfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFVTQkQgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX1VTQkRfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VzYmhfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdXNiaF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2NkMWUwCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3VzYmhfcmVnLmgKQEAgLTAsMCArMSw3OTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1c2JoX3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBVU0JIIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1VTQkhfUkVHX0hfXworI2RlZmluZSBfX1VTQkhfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVTQiBIb3N0IENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBVU0JIIFVTQiBIb3N0IENvbnRyb2xsZXIoVVNCSCkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgVVNCSCBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNSZXZpc2lvbgorICAgICAqIE9mZnNldDogMHgwMCAgSG9zdCBDb250cm9sbGVyIFJldmlzaW9uIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8Wzc6MF0gICB8UkVWICAgICAgIHxSZXZpc2lvbiBOdW1iZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbmRpY2F0ZXMgdGhlIE9wZW4gSENJIFNwZWNpZmljYXRpb24gcmV2aXNpb24gbnVtYmVyIGltcGxlbWVudGVkIGJ5IHRoZSBIYXJkd2FyZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEhvc3QgQ29udHJvbGxlciBzdXBwb3J0cyAxLjEgc3BlY2lmaWNhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoWC5ZID0gWFloKS4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNDb250cm9sCisgICAgICogT2Zmc2V0OiAweDA0ICBIb3N0IENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxOjBdICAgfENCU1IgICAgICB8Q29udHJvbCBCdWxrIFNlcnZpY2UgUmF0aW8KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIHNwZWNpZmllcyB0aGUgc2VydmljZSByYXRpbyBiZXR3ZWVuIENvbnRyb2wgYW5kIEJ1bGsgRURzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QmVmb3JlIHByb2Nlc3NpbmcgYW55IG9mIHRoZSBub24tcGVyaW9kaWMgbGlzdHMsIEhDIG11c3QgY29tcGFyZSB0aGUgcmF0aW8gc3BlY2lmaWVkIHdpdGggaXRzIGludGVybmFsIGNvdW50IG9uIGhvdyBtYW55IG5vbmVtcHR5IENvbnRyb2wgRURzIGhhdmUgYmVlbiBwcm9jZXNzZWQsIGluIGRldGVybWluaW5nIHdoZXRoZXIgdG8gY29udGludWUgc2VydmluZyBhbm90aGVyIENvbnRyb2wgRUQgb3Igc3dpdGNoaW5nIHRvIEJ1bGsgRURzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGludGVybmFsIGNvdW50IHdpbGwgYmUgcmV0YWluZWQgd2hlbiBjcm9zc2luZyB0aGUgZnJhbWUgYm91bmRhcnkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBjYXNlIG9mIHJlc2V0LCBIQ0QgaXMgcmVzcG9uc2libGUgZm9yIHJlc3RvcmluZyB0aGlzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VmFsdWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBOdW1iZXIgb2YgQ29udHJvbCBFRHMgb3ZlciBCdWxrIEVEcyBzZXJ2ZWQgaXMgMToxLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gTnVtYmVyIG9mIENvbnRyb2wgRURzIG92ZXIgQnVsayBFRHMgc2VydmVkIGlzIDI6MS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IE51bWJlciBvZiBDb250cm9sIEVEcyBvdmVyIEJ1bGsgRURzIHNlcnZlZCBpcyAzOjEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBOdW1iZXIgb2YgQ29udHJvbCBFRHMgb3ZlciBCdWxrIEVEcyBzZXJ2ZWQgaXMgNDoxLgorICAgICAqIHxbMl0gICAgIHxQTEUgICAgICAgfFBlcmlvZGljIExpc3QgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc2V0LCB0aGlzIGJpdCBlbmFibGVzIHByb2Nlc3Npbmcgb2YgdGhlIFBlcmlvZGljIChpbnRlcnJ1cHQgYW5kIGlzb2Nocm9ub3VzKSBsaXN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIEhvc3QgQ29udHJvbGxlciBjaGVja3MgdGhpcyBiaXQgcHJpb3IgdG8gYXR0ZW1wdGluZyBhbnkgcGVyaW9kaWMgdHJhbnNmZXJzIGluIGEgZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFByb2Nlc3Npbmcgb2YgdGhlIFBlcmlvZGljIChJbnRlcnJ1cHQgYW5kIElzb2Nocm9ub3VzKSBsaXN0IGFmdGVyIG5leHQgU09GIChTdGFydC1PZi1GcmFtZSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFByb2Nlc3Npbmcgb2YgdGhlIFBlcmlvZGljIChJbnRlcnJ1cHQgYW5kIElzb2Nocm9ub3VzKSBsaXN0IGluIHRoZSBuZXh0IGZyYW1lIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVG8gZW5hYmxlIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBJc29jaHJvbm91cyBsaXN0LCB1c2VyIGhhcyB0byBzZXQgYm90aCBQTEUgYW5kIElFIChIY0NvbnRyb2xbM10pIGhpZ2guCisgICAgICogfFszXSAgICAgfElFICAgICAgICB8SXNvY2hyb25vdXMgTGlzdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Qm90aCBJU09FbiBhbmQgUExFIChIY0NvbnRyb2xbMl0pIGhpZ2ggZW5hYmxlcyBIb3N0IENvbnRyb2xsZXIgdG8gcHJvY2VzcyB0aGUgSXNvY2hyb25vdXMgbGlzdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEVpdGhlciBJU09FbiBvciBQTEUgKEhjQ29udHJvbFsyXSkgaXMgbG93IGRpc2FibGVzIEhvc3QgQ29udHJvbGxlciB0byBwcm9jZXNzIHRoZSBJc29jaHJvbm91cyBsaXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQcm9jZXNzaW5nIG9mIHRoZSBJc29jaHJvbm91cyBsaXN0IGFmdGVyIG5leHQgU09GIChTdGFydC1PZi1GcmFtZSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFByb2Nlc3Npbmcgb2YgdGhlIElzb2Nocm9ub3VzIGxpc3QgaW4gdGhlIG5leHQgZnJhbWUgRW5hYmxlZCwgaWYgdGhlIFBMRSAoSGNDb250cm9sWzJdKSBpcyBoaWdoLCB0b28uCisgICAgICogfFs0XSAgICAgfENMRSAgICAgICB8Q29udHJvbCBMaXN0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUHJvY2Vzc2luZyBvZiB0aGUgQ29udHJvbCBsaXN0IGFmdGVyIG5leHQgU09GIChTdGFydC1PZi1GcmFtZSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFByb2Nlc3Npbmcgb2YgdGhlIENvbnRyb2wgbGlzdCBpbiB0aGUgbmV4dCBmcmFtZSBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxCTEUgICAgICAgfEJ1bGsgTGlzdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFByb2Nlc3Npbmcgb2YgdGhlIEJ1bGsgbGlzdCBhZnRlciBuZXh0IFNPRiAoU3RhcnQtT2YtRnJhbWUpIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQcm9jZXNzaW5nIG9mIHRoZSBCdWxrIGxpc3QgaW4gdGhlIG5leHQgZnJhbWUgRW5hYmxlZC4KKyAgICAgKiB8Wzc6Nl0gICB8SENGUyAgICAgIHxIb3N0IENvbnRyb2xsZXIgRnVuY3Rpb25hbCBTdGF0ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgc2V0cyB0aGUgSG9zdCBDb250cm9sbGVyIHN0YXRlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIENvbnRyb2xsZXIgbWF5IGZvcmNlIGEgc3RhdGUgY2hhbmdlIGZyb20gVVNCU1VTUEVORCB0byBVU0JSRVNVTUUgYWZ0ZXIgZGV0ZWN0aW5nIHJlc3VtZSBzaWduYWxpbmcgZnJvbSBhIGRvd25zdHJlYW0gcG9ydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFN0YXRlcyBhcmU6CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBVU0JTVVNQRU5ELgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxID0gVVNCT1BFUkFUSU9OQUwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAgPSBVU0JSRVNVTUUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEgPSBVU0JSRVNFVC4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNDb21tYW5kU3RhdHVzCisgICAgICogT2Zmc2V0OiAweDA4ICBIb3N0IENvbnRyb2xsZXIgQ29tbWFuZCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxIQ1IgICAgICAgfEhvc3QgQ29udHJvbGxlciBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byBpbml0aWF0ZSB0aGUgc29mdHdhcmUgcmVzZXQgb2YgSG9zdCBDb250cm9sbGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgY2xlYXJlZCBieSB0aGUgSG9zdCBDb250cm9sbGVyLCB1cG9uIGNvbXBsZXRlZCBvZiB0aGUgcmVzZXQgb3BlcmF0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0LCB3aGVuIHNldCwgZGlkbid0IHJlc2V0IHRoZSBSb290IEh1YiBhbmQgbm8gc3Vic2VxdWVudCByZXNldCBzaWduYWxpbmcgYmUgYXNzZXJ0ZWQgdG8gaXRzIGRvd25zdHJlYW0gcG9ydHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEhvc3QgQ29udHJvbGxlciBpcyBub3QgaW4gc29mdHdhcmUgcmVzZXQgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEhvc3QgQ29udHJvbGxlciBpcyBpbiBzb2Z0d2FyZSByZXNldCBzdGF0ZS4KKyAgICAgKiB8WzFdICAgICB8Q0xGICAgICAgIHxDb250cm9sIExpc3QgRmlsbGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IGhpZ2ggdG8gaW5kaWNhdGUgdGhlcmUgaXMgYW4gYWN0aXZlIFREIG9uIHRoZSBDb250cm9sIExpc3QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBtYXkgYmUgc2V0IGJ5IGVpdGhlciBzb2Z0d2FyZSBvciB0aGUgSG9zdCBDb250cm9sbGVyIGFuZCBjbGVhcmVkIGJ5IHRoZSBIb3N0IENvbnRyb2xsZXIgZWFjaCB0aW1lIGl0IGJlZ2lucyBwcm9jZXNzaW5nIHRoZSBoZWFkIG9mIHRoZSBDb250cm9sIExpc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGFjdGl2ZSBURCBmb3VuZCBvciBIb3N0IENvbnRyb2xsZXIgYmVnaW5zIHRvIHByb2Nlc3MgdGhlIGhlYWQgb2YgdGhlIENvbnRyb2wgbGlzdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQW4gYWN0aXZlIFREIGFkZGVkIG9yIGZvdW5kIG9uIHRoZSBDb250cm9sIGxpc3QuCisgICAgICogfFsyXSAgICAgfEJMRiAgICAgICB8QnVsayBMaXN0IEZpbGxlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCBoaWdoIHRvIGluZGljYXRlIHRoZXJlIGlzIGFuIGFjdGl2ZSBURCBvbiB0aGUgQnVsayBsaXN0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgbWF5IGJlIHNldCBieSBlaXRoZXIgc29mdHdhcmUgb3IgdGhlIEhvc3QgQ29udHJvbGxlciBhbmQgY2xlYXJlZCBieSB0aGUgSG9zdCBDb250cm9sbGVyIGVhY2ggdGltZSBpdCBiZWdpbnMgcHJvY2Vzc2luZyB0aGUgaGVhZCBvZiB0aGUgQnVsayBsaXN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBhY3RpdmUgVEQgZm91bmQgb3IgSG9zdCBDb250cm9sbGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBoZWFkIG9mIHRoZSBCdWxrIGxpc3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEFuIGFjdGl2ZSBURCBhZGRlZCBvciBmb3VuZCBvbiB0aGUgQnVsayBsaXN0LgorICAgICAqIHxbMTc6MTZdIHxTT0MgICAgICAgfFNjaGVkdWxlIE92ZXJydW4gQ291bnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGFyZSBpbmNyZW1lbnRlZCBvbiBlYWNoIHNjaGVkdWxpbmcgb3ZlcnJ1biBlcnJvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGluaXRpYWxpemVkIHRvIDAwYiBhbmQgd3JhcHMgYXJvdW5kIGF0IDExYgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgd2lsbCBiZSBpbmNyZW1lbnRlZCB3aGVuIGEgc2NoZWR1bGluZyBvdmVycnVuIGlzIGRldGVjdGVkIGV2ZW4gaWYgU08gKEhjSW50ZXJydXB0U3RhdHVzWzBdKSBoYXMgYWxyZWFkeSBiZWVuIHNldC4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNJbnRlcnJ1cHRTdGF0dXMKKyAgICAgKiBPZmZzZXQ6IDB4MEMgIEhvc3QgQ29udHJvbGxlciBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U08gICAgICAgIHxTY2hlZHVsaW5nIE92ZXJydW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgd2hlbiB0aGUgTGlzdCBQcm9jZXNzb3IgZGV0ZXJtaW5lcyBhIFNjaGVkdWxlIE92ZXJydW4gaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTY2hlZHVsZSBPdmVycnVuIGRpZG4ndCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2NoZWR1bGUgT3ZlcnJ1biBoYXMgb2NjdXJyZWQuCisgICAgICogfFsxXSAgICAgfFdESCAgICAgICB8V3JpdGUgQmFjayBEb25lIEhlYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgYWZ0ZXIgdGhlIEhvc3QgQ29udHJvbGxlciBoYXMgd3JpdHRlbiBIY0RvbmVIZWFkIHRvIEhjY2FEb25lSGVhZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEZ1cnRoZXIgdXBkYXRlcyBvZiB0aGUgSGNjYURvbmVIZWFkIHdpbGwgbm90IG9jY3VyIHVudGlsIHRoaXMgYml0IGhhcyBiZWVuIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9Lkhvc3QgQ29udHJvbGxlciBkaWRuJ3QgdXBkYXRlIEhjY2FEb25lSGVhZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0uSG9zdCBDb250cm9sbGVyIGhhcyB3cml0dGVuIEhjRG9uZUhlYWQgdG8gSGNjYURvbmVIZWFkLgorICAgICAqIHxbMl0gICAgIHxTRiAgICAgICAgfFN0YXJ0IG9mIEZyYW1lCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHdoZW4gdGhlIEZyYW1lIE1hbmFnZW1lbnQgZnVuY3Rpb25hbCBibG9jayBzaWduYWxzIGEgdTIwMThTdGFydCBvZiBGcmFtZScgZXZlbnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxIb3N0IENvbnRyb2wgZ2VuZXJhdGVzIGEgU09GIHRva2VuIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9Lk5vdCB0aGUgc3RhcnQgb2YgYSBmcmFtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0uSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGEgZnJhbWUgYW5kIEhvc3QgQ29udHJvbGxlciBnZW5lcmF0ZXMgYSBTT0YgdG9rZW4uCisgICAgICogfFszXSAgICAgfFJEICAgICAgICB8UmVzdW1lIERldGVjdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2V0IHdoZW4gSG9zdCBDb250cm9sbGVyIGRldGVjdHMgcmVzdW1lIHNpZ25hbGluZyBvbiBhIGRvd25zdHJlYW0gcG9ydC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcmVzdW1lIHNpZ25hbGluZyBkZXRlY3RlZCBvbiBhIGRvd25zdHJlYW0gcG9ydC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzdW1lIHNpZ25hbGluZyBkZXRlY3RlZCBvbiBhIGRvd25zdHJlYW0gcG9ydC4KKyAgICAgKiB8WzVdICAgICB8Rk5PICAgICAgIHxGcmFtZSBOdW1iZXIgT3ZlcmZsb3cKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgd2hlbiBiaXQgMTUgb2YgRnJhbWUgTnVtYmVyIGNoYW5nZXMgZnJvbSAxIHRvIDAgb3IgZnJvbSAwIHRvIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBiaXQgMTUgb2YgRnJhbWUgTnVtYmVyIGRpZG4ndCBjaGFuZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBiaXQgMTUgb2YgRnJhbWUgTnVtYmVyIGNoYW5nZXMgZnJvbSAxIHRvIDAgb3IgZnJvbSAwIHRvIDEuCisgICAgICogfFs2XSAgICAgfFJIU0MgICAgICB8Um9vdCBIdWIgU3RhdHVzIENoYW5nZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBjb250ZW50IG9mIEhjUmhTdGF0dXMgb3IgdGhlIGNvbnRlbnQgb2YgSGNSaFBvcnRTdGF0dXMgcmVnaXN0ZXIgaGFzIGNoYW5nZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBjb250ZW50IG9mIEhjUmhTdGF0dXMgYW5kIHRoZSBjb250ZW50IG9mIEhjUmhQb3J0U3RhdHVzIHJlZ2lzdGVyIGRpZG4ndCBjaGFuZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBjb250ZW50IG9mIEhjUmhTdGF0dXMgb3IgdGhlIGNvbnRlbnQgb2YgSGNSaFBvcnRTdGF0dXMgcmVnaXN0ZXIgaGFzIGNoYW5nZWQuCisgICAgICogQHZhciBVU0JIX1Q6OkhjSW50ZXJydXB0RW5hYmxlCisgICAgICogT2Zmc2V0OiAweDEwICBIb3N0IENvbnRyb2xsZXIgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNPICAgICAgICB8U2NoZWR1bGluZyBPdmVycnVuIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFNPIChIY0ludGVycnVwdFN0YXR1c1swXSkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFNPIChIY0ludGVycnVwdFN0YXR1c1swXSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIEVuYWJsZWQuCisgICAgICogfFsxXSAgICAgfFdESCAgICAgICB8V3JpdGUgQmFjayBEb25lIEhlYWQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gV0RIIChIY0ludGVycnVwdFN0YXR1c1sxXSkgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFdESCAoSGNJbnRlcnJ1cHRTdGF0dXNbMV0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gV0RIIChIY0ludGVycnVwdFN0YXR1c1sxXSkgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8U0YgICAgICAgIHxTdGFydCBvZiBGcmFtZSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBTRiAoSGNJbnRlcnJ1cHRTdGF0dXNbMl0pIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBTRiAoSGNJbnRlcnJ1cHRTdGF0dXNbMl0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gU0YgKEhjSW50ZXJydXB0U3RhdHVzWzJdKSBFbmFibGVkLgorICAgICAqIHxbM10gICAgIHxSRCAgICAgICAgfFJlc3VtZSBEZXRlY3RlZCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSRCAoSGNJbnRlcnJ1cHRTdGF0dXNbM10pIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSRCAoSGNJbnRlcnJ1cHRTdGF0dXNbM10pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkQgKEhjSW50ZXJydXB0U3RhdHVzWzNdKSBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxGTk8gICAgICAgfEZyYW1lIE51bWJlciBPdmVyZmxvdyBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBGTk8gKEhjSW50ZXJydXB0U3RhdHVzWzVdKSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gRk5PIChIY0ludGVycnVwdFN0YXR1c1s1XSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBGTk8gKEhjSW50ZXJydXB0U3RhdHVzWzVdKSBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxSSFNDICAgICAgfFJvb3QgSHViIFN0YXR1cyBDaGFuZ2UgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkhTQyAoSGNJbnRlcnJ1cHRTdGF0dXNbNl0pIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSkgRW5hYmxlZC4KKyAgICAgKiB8WzMxXSAgICB8TUlFICAgICAgIHxNYXN0ZXIgSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBhIGdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8QSB3cml0ZSBvZiB1MjAxODEnIGFsbG93cyBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQgdmlhIHRoZSBzcGVjaWZpYyBlbmFibGUgYml0cyBsaXN0ZWQgYWJvdmUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSksIEZOTyAoSGNJbnRlcnJ1cHRTdGF0dXNbNV0pLCBSRCAoSGNJbnRlcnJ1cHRTdGF0dXNbM10pLCBTRiAoSGNJbnRlcnJ1cHRTdGF0dXNbMl0pLCBXREggKEhjSW50ZXJydXB0U3RhdHVzWzFdKSBvciBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIEVuYWJsZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIEhjSW50ZXJydXB0RW5hYmxlIGlzIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSksIEZOTyAoSGNJbnRlcnJ1cHRTdGF0dXNbNV0pLCBSRCAoSGNJbnRlcnJ1cHRTdGF0dXNbM10pLCBTRiAoSGNJbnRlcnJ1cHRTdGF0dXNbMl0pLCBXREggKEhjSW50ZXJydXB0U3RhdHVzWzFdKSBvciBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIERpc2FibGVkIGV2ZW4gaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIEhjSW50ZXJydXB0RW5hYmxlIGlzIGhpZ2guCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSSFNDIChIY0ludGVycnVwdFN0YXR1c1s2XSksIEZOTyAoSGNJbnRlcnJ1cHRTdGF0dXNbNV0pLCBSRCAoSGNJbnRlcnJ1cHRTdGF0dXNbM10pLCBTRiAoSGNJbnRlcnJ1cHRTdGF0dXNbMl0pLCBXREggKEhjSW50ZXJydXB0U3RhdHVzWzFdKSBvciBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIEVuYWJsZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIEhjSW50ZXJydXB0RW5hYmxlIGlzIGhpZ2guCisgICAgICogQHZhciBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZQorICAgICAqIE9mZnNldDogMHgxNCAgSG9zdCBDb250cm9sbGVyIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U08gICAgICAgIHxTY2hlZHVsaW5nIE92ZXJydW4gRGlzYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFNPIChIY0ludGVycnVwdFN0YXR1c1swXSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBTTyAoSGNJbnRlcnJ1cHRTdGF0dXNbMF0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gU08gKEhjSW50ZXJydXB0U3RhdHVzWzBdKSBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxXREggICAgICAgfFdyaXRlIEJhY2sgRG9uZSBIZWFkIERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBXREggKEhjSW50ZXJydXB0U3RhdHVzWzFdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFdESCAoSGNJbnRlcnJ1cHRTdGF0dXNbMV0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gV0RIIChIY0ludGVycnVwdFN0YXR1c1sxXSkgRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8U0YgICAgICAgIHxTdGFydCBvZiBGcmFtZSBEaXNhYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gU0YgKEhjSW50ZXJydXB0U3RhdHVzWzJdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFNGIChIY0ludGVycnVwdFN0YXR1c1syXSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBTRiAoSGNJbnRlcnJ1cHRTdGF0dXNbMl0pIEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFJEICAgICAgICB8UmVzdW1lIERldGVjdGVkIERpc2FibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBSRCAoSGNJbnRlcnJ1cHRTdGF0dXNbM10pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkQgKEhjSW50ZXJydXB0U3RhdHVzWzNdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJEIChIY0ludGVycnVwdFN0YXR1c1szXSkgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8Rk5PICAgICAgIHxGcmFtZSBOdW1iZXIgT3ZlcmZsb3cgRGlzYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIEZOTyAoSGNJbnRlcnJ1cHRTdGF0dXNbNV0pIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gRk5PIChIY0ludGVycnVwdFN0YXR1c1s1XSkgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEludGVycnVwdCBnZW5lcmF0aW9uIGR1ZSB0byBGTk8gKEhjSW50ZXJydXB0U3RhdHVzWzVdKSBFbmFibGVkLgorICAgICAqIHxbNl0gICAgIHxSSFNDICAgICAgfFJvb3QgSHViIFN0YXR1cyBDaGFuZ2UgRGlzYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJIU0MgKEhjSW50ZXJydXB0U3RhdHVzWzZdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJIU0MgKEhjSW50ZXJydXB0U3RhdHVzWzZdKSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJIU0MgKEhjSW50ZXJydXB0U3RhdHVzWzZdKSBFbmFibGVkLgorICAgICAqIHxbMzFdICAgIHxNSUUgICAgICAgfE1hc3RlciBJbnRlcnJ1cHQgRGlzYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxHbG9iYWwgaW50ZXJydXB0IGRpc2FibGUuIFdyaXRpbmcgdTIwMTgxJyB0byBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBkdWUgdG8gUkhTQyAoSGNJbnRlcnJ1cHRTdGF0dXNbNl0pLCBGTk8gKEhjSW50ZXJydXB0U3RhdHVzWzVdKSwgUkQgKEhjSW50ZXJydXB0U3RhdHVzWzNdKSwgU0YgKEhjSW50ZXJydXB0U3RhdHVzWzJdKSwgV0RIIChIY0ludGVycnVwdFN0YXR1c1sxXSkgb3IgU08gKEhjSW50ZXJydXB0U3RhdHVzWzBdKSBEaXNhYmxlZCBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gSGNJbnRlcnJ1cHRFbmFibGUgaXMgaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJIU0MgKEhjSW50ZXJydXB0U3RhdHVzWzZdKSwgRk5PIChIY0ludGVycnVwdFN0YXR1c1s1XSksIFJEIChIY0ludGVycnVwdFN0YXR1c1szXSksIFNGIChIY0ludGVycnVwdFN0YXR1c1syXSksIFdESCAoSGNJbnRlcnJ1cHRTdGF0dXNbMV0pIG9yIFNPIChIY0ludGVycnVwdFN0YXR1c1swXSkgRGlzYWJsZWQgZXZlbiBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gSGNJbnRlcnJ1cHRFbmFibGUgaXMgaGlnaC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSW50ZXJydXB0IGdlbmVyYXRpb24gZHVlIHRvIFJIU0MgKEhjSW50ZXJydXB0U3RhdHVzWzZdKSwgRk5PIChIY0ludGVycnVwdFN0YXR1c1s1XSksIFJEIChIY0ludGVycnVwdFN0YXR1c1szXSksIFNGIChIY0ludGVycnVwdFN0YXR1c1syXSksIFdESCAoSGNJbnRlcnJ1cHRTdGF0dXNbMV0pIG9yIFNPIChIY0ludGVycnVwdFN0YXR1c1swXSkgRW5hYmxlZCBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gSGNJbnRlcnJ1cHRFbmFibGUgaXMgaGlnaC4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNIQ0NBCisgICAgICogT2Zmc2V0OiAweDE4ICBIb3N0IENvbnRyb2xsZXIgQ29tbXVuaWNhdGlvbiBBcmVhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjhdICB8SENDQSAgICAgIHxIb3N0IENvbnRyb2xsZXIgQ29tbXVuaWNhdGlvbiBBcmVhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UG9pbnRlciB0byBpbmRpY2F0ZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEhvc3QgQ29udHJvbGxlciBDb21tdW5pY2F0aW9uIEFyZWEgKEhDQ0EpLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY1BlcmlvZEN1cnJlbnRFRAorICAgICAqIE9mZnNldDogMHgxQyAgSG9zdCBDb250cm9sbGVyIFBlcmlvZCBDdXJyZW50IEVEIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjRdICB8UENFRCAgICAgIHxQZXJpb2RpYyBDdXJyZW50IEVECisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UG9pbnRlciB0byBpbmRpY2F0ZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IElzb2Nocm9ub3VzIG9yIEludGVycnVwdCBFbmRwb2ludCBEZXNjcmlwdG9yLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0NvbnRyb2xIZWFkRUQKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIEhvc3QgQ29udHJvbGxlciBDb250cm9sIEhlYWQgRUQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6NF0gIHxDSEVEICAgICAgfENvbnRyb2wgSGVhZCBFRAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFBvaW50ZXIgdG8gaW5kaWNhdGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgRW5kcG9pbnQgRGVzY3JpcHRvciBvZiB0aGUgQ29udHJvbCBsaXN0LgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0NvbnRyb2xDdXJyZW50RUQKKyAgICAgKiBPZmZzZXQ6IDB4MjQgIEhvc3QgQ29udHJvbGxlciBDb250cm9sIEN1cnJlbnQgRUQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6NF0gIHxDQ0VEICAgICAgfENvbnRyb2wgQ3VycmVudCBIZWFkIEVECisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UG9pbnRlciB0byBpbmRpY2F0ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBFbmRwb2ludCBEZXNjcmlwdG9yIG9mIHRoZSBDb250cm9sIGxpc3QuCisgICAgICogQHZhciBVU0JIX1Q6OkhjQnVsa0hlYWRFRAorICAgICAqIE9mZnNldDogMHgyOCAgSG9zdCBDb250cm9sbGVyIEJ1bGsgSGVhZCBFRCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTo0XSAgfEJIRUQgICAgICB8QnVsayBIZWFkIEVECisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UG9pbnRlciB0byBpbmRpY2F0ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgRW5kcG9pbnQgRGVzY3JpcHRvciBvZiB0aGUgQnVsayBsaXN0LgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0J1bGtDdXJyZW50RUQKKyAgICAgKiBPZmZzZXQ6IDB4MkMgIEhvc3QgQ29udHJvbGxlciBCdWxrIEN1cnJlbnQgRUQgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMzE6NF0gIHxCQ0VEICAgICAgfEJ1bGsgQ3VycmVudCBIZWFkIEVECisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UG9pbnRlciB0byBpbmRpY2F0ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBlbmRwb2ludCBvZiB0aGUgQnVsayBsaXN0LgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0RvbmVIZWFkCisgICAgICogT2Zmc2V0OiAweDMwICBIb3N0IENvbnRyb2xsZXIgRG9uZSBIZWFkIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjRdICB8REggICAgICAgIHxEb25lIEhlYWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxQb2ludGVyIHRvIGluZGljYXRlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBsYXN0IGNvbXBsZXRlZCBUcmFuc2ZlciBEZXNjcmlwdG9yIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBEb25lIHF1ZXVlLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0ZtSW50ZXJ2YWwKKyAgICAgKiBPZmZzZXQ6IDB4MzQgIEhvc3QgQ29udHJvbGxlciBGcmFtZSBJbnRlcnZhbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMzowXSAgfEZJICAgICAgICB8RnJhbWUgSW50ZXJ2YWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIGEgZnJhbWUgYXMgKGJpdCB0aW1lcyAtIDEpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Rm9yIDEyLDAwMCBiaXQgdGltZXMgaW4gYSBmcmFtZSwgYSB2YWx1ZSBvZiAxMSw5OTkgaXMgc3RvcmVkIGhlcmUuCisgICAgICogfFszMDoxNl0gfEZTTVBTICAgICB8RlMgTGFyZ2VzdCBEYXRhIFBhY2tldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgc3BlY2lmaWVzIGEgdmFsdWUgdGhhdCBpcyBsb2FkZWQgaW50byB0aGUgTGFyZ2VzdCBEYXRhIFBhY2tldCBDb3VudGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBmcmFtZS4KKyAgICAgKiB8WzMxXSAgICB8RklUICAgICAgIHxGcmFtZSBJbnRlcnZhbCBUb2dnbGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyB0b2dnbGVkIGJ5IEhvc3QgQ29udHJvbGxlciBEcml2ZXIgd2hlbiBpdCBsb2FkcyBhIG5ldyB2YWx1ZSBpbnRvIEZJIChIY0ZtSW50ZXJ2YWxbMTM6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIGRpZG4ndCBsb2FkIG5ldyB2YWx1ZSBpbnRvIEZJIChIY0ZtSW50ZXJ2YWxbMTM6MF0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIGxvYWRzIGEgbmV3IHZhbHVlIGludG8gRkkgKEhjRm1JbnRlcnZhbFsxMzowXSkuCisgICAgICogQHZhciBVU0JIX1Q6OkhjRm1SZW1haW5pbmcKKyAgICAgKiBPZmZzZXQ6IDB4MzggIEhvc3QgQ29udHJvbGxlciBGcmFtZSBSZW1haW5pbmcgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTM6MF0gIHxGUiAgICAgICAgfEZyYW1lIFJlbWFpbmluZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gdGhlIEhvc3QgQ29udHJvbGxlciBpcyBpbiB0aGUgVVNCT1BFUkFUSU9OQUwgc3RhdGUsIHRoaXMgMTQtYml0IGZpZWxkIGRlY3JlbWVudHMgZWFjaCAxMiBNSHogY2xvY2sgcGVyaW9kCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgY291bnQgcmVhY2hlcyAwLCAoZW5kIG9mIGZyYW1lKSB0aGUgY291bnRlciByZWxvYWRzIHdpdGggRnJhbWUgSW50ZXJ2YWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBhZGRpdGlvbiwgdGhlIGNvdW50ZXIgbG9hZHMgd2hlbiB0aGUgSG9zdCBDb250cm9sbGVyIHRyYW5zaXRpb25zIGludG8gVVNCT1BFUkFUSU9OQUwuCisgICAgICogfFszMV0gICAgfEZSVCAgICAgICB8RnJhbWUgUmVtYWluaW5nIFRvZ2dsZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGxvYWRlZCBmcm9tIHRoZSBGSVQgKEhjRm1JbnRlcnZhbFszMV0pIHdoZW5ldmVyIEZSIChIY0ZtUmVtYWluaW5nWzEzOjBdKSByZWFjaGVzIDAuCisgICAgICogQHZhciBVU0JIX1Q6OkhjRm1OdW1iZXIKKyAgICAgKiBPZmZzZXQ6IDB4M0MgIEhvc3QgQ29udHJvbGxlciBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxGTiAgICAgICAgfEZyYW1lIE51bWJlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgMTYtYml0IGluY3JlbWVudGluZyBjb3VudGVyIGZpZWxkIGlzIGluY3JlbWVudGVkIGNvaW5jaWRlbnQgd2l0aCB0aGUgcmUtbG9hZCBvZiBGUiAoSGNGbVJlbWFpbmluZ1sxMzowXSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgY291bnQgcm9sbHMgb3ZlciBmcm9tIHUyMDE4RkZGRmgnIHRvIHUyMDE4MGguJworICAgICAqIEB2YXIgVVNCSF9UOjpIY1BlcmlvZGljU3RhcnQKKyAgICAgKiBPZmZzZXQ6IDB4NDAgIEhvc3QgQ29udHJvbGxlciBQZXJpb2RpYyBTdGFydCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMzowXSAgfFBTICAgICAgICB8UGVyaW9kaWMgU3RhcnQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdXNlZCBieSB0aGUgTGlzdCBQcm9jZXNzb3IgdG8gZGV0ZXJtaW5lIHdoZXJlIGluIGEgZnJhbWUgdGhlIFBlcmlvZGljIExpc3QgcHJvY2Vzc2luZyBtdXN0IGJlZ2luLgorICAgICAqIEB2YXIgVVNCSF9UOjpIY0xTVGhyZXNob2xkCisgICAgICogT2Zmc2V0OiAweDQ0ICBIb3N0IENvbnRyb2xsZXIgTG93LXNwZWVkIFRocmVzaG9sZCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxMTowXSAgfExTVCAgICAgICB8TG93LXNwZWVkIFRocmVzaG9sZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgY29udGFpbnMgYSB2YWx1ZSB3aGljaCBpcyBjb21wYXJlZCB0byB0aGUgRlIgKEhjRm1SZW1haW5pbmdbMTM6MF0pIGZpZWxkIHByaW9yIHRvIGluaXRpYXRpbmcgYSBMb3ctc3BlZWQgdHJhbnNhY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdHJhbnNhY3Rpb24gaXMgc3RhcnRlZCBvbmx5IGlmIEZSIChIY0ZtUmVtYWluaW5nWzEzOjBdKSA+PSB0aGlzIGZpZWxkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYnkgSG9zdCBDb250cm9sbGVyIERyaXZlciB3aXRoIHRoZSBjb25zaWRlcmF0aW9uIG9mIHRyYW5zbWlzc2lvbiBhbmQgc2V0dXAgb3ZlcmhlYWQuCisgICAgICogQHZhciBVU0JIX1Q6OkhjUmhEZXNjcmlwdG9yQQorICAgICAqIE9mZnNldDogMHg0OCAgSG9zdCBDb250cm9sbGVyIFJvb3QgSHViIERlc2NyaXB0b3IgQSBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFs3OjBdICAgfE5EUCAgICAgICB8TnVtYmVyIERvd25zdHJlYW0gUG9ydHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVU0IgaG9zdCBjb250cm9sIHN1cHBvcnRzIHR3byBkb3duc3RyZWFtIHBvcnRzIGFuZCBvbmx5IG9uZSBwb3J0IGlzIGF2YWlsYWJsZSBpbiB0aGlzIHNlcmllcyBvZiBjaGlwLgorICAgICAqIHxbOF0gICAgIHxQU00gICAgICAgfFBvd2VyIFN3aXRjaGluZyBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlZCB0byBzcGVjaWZ5IGhvdyB0aGUgcG93ZXIgc3dpdGNoaW5nIG9mIHRoZSBSb290IEh1YiBwb3J0cyBpcyBjb250cm9sbGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBHbG9iYWwgU3dpdGNoaW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJbmRpdmlkdWFsIFN3aXRjaGluZy4KKyAgICAgKiB8WzExXSAgICB8T0NQTSAgICAgIHxvdmVyIEN1cnJlbnQgUHJvdGVjdGlvbiBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVzY3JpYmVzIGhvdyB0aGUgb3ZlciBjdXJyZW50IHN0YXR1cyBmb3IgdGhlIFJvb3QgSHViIHBvcnRzIHJlcG9ydGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgb25seSB2YWxpZCB3aGVuIE5PQ1AgKEhjUmhEZXNjcmlwdG9yQVsxMl0pIGlzIGNsZWFyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEdsb2JhbCBPdmVyIGN1cnJlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEluZGl2aWR1YWwgT3ZlciBjdXJyZW50LgorICAgICAqIHxbMTJdICAgIHxOT0NQICAgICAgfE5vIG92ZXIgQ3VycmVudCBQcm90ZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVzY3JpYmVzIGhvdyB0aGUgb3ZlciBjdXJyZW50IHN0YXR1cyBmb3IgdGhlIFJvb3QgSHViIHBvcnRzIHJlcG9ydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPdmVyIGN1cnJlbnQgc3RhdHVzIGlzIHJlcG9ydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdmVyIGN1cnJlbnQgc3RhdHVzIGlzIG5vdCByZXBvcnRlZC4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNSaERlc2NyaXB0b3JCCisgICAgICogT2Zmc2V0OiAweDRDICBIb3N0IENvbnRyb2xsZXIgUm9vdCBIdWIgRGVzY3JpcHRvciBCIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzMxOjE2XSB8UFBDTSAgICAgIHxQb3J0IFBvd2VyIENvbnRyb2wgTWFzaworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEdsb2JhbCBwb3dlciBzd2l0Y2hpbmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaWYgUG93ZXJTd2l0Y2hpbmdNb2RlIGlzIHNldCAoaW5kaXZpZHVhbCBwb3J0IHN3aXRjaGluZykKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHNldCwgdGhlIHBvcnQgb25seSByZXNwb25kcyB0byBpbmRpdmlkdWFsIHBvcnQgcG93ZXIgc3dpdGNoaW5nIGNvbW1hbmRzIChTZXQvQ2xlYXJQb3J0UG93ZXIpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBjbGVhcmVkLCB0aGUgcG9ydCBvbmx5IHJlc3BvbmRzIHRvIGdsb2JhbCBwb3dlciBzd2l0Y2hpbmcgY29tbWFuZHMgKFNldC9DbGVhckdsb2JhbFBvd2VyKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUG9ydCBwb3dlciBjb250cm9sbGVkIGJ5IGdsb2JhbCBwb3dlciBzd2l0Y2hpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvcnQgcG93ZXIgY29udHJvbGxlZCBieSBwb3J0IHBvd2VyIHN3aXRjaGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBQUENNWzE1OjJdIGFuZCBQUENNWzBdIGFyZSByZXNlcnZlZC4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNSaFN0YXR1cworICAgICAqIE9mZnNldDogMHg1MCAgSG9zdCBDb250cm9sbGVyIFJvb3QgSHViIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfExQUyAgICAgICB8Q2xlYXIgR2xvYmFsIFBvd2VyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gZ2xvYmFsIHBvd2VyIG1vZGUgKFBTTSAoSGNSaERlc2NyaXB0b3JBWzhdKSA9IDApLCB0aGlzIGJpdCBpcyB3cml0dGVuIHRvIG9uZSB0byBjbGVhciBhbGwgcG9ydHMnIHBvd2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGFsd2F5cyByZWFkIGFzIHplcm8uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENsZWFyIGdsb2JhbCBwb3dlci4KKyAgICAgKiB8WzFdICAgICB8T0NJICAgICAgIHxvdmVyIEN1cnJlbnQgSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBvdmVyIGN1cnJlbnQgc3RhdHVzIHBpbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpZiBOT0NQIChIY1JoRGVzQVsxMl0pIGFuZCBPQ1BNIChIY1JoRGVzQVsxMV0pIGFyZSBjbGVhcmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBvdmVyIGN1cnJlbnQgY29uZGl0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdmVyIGN1cnJlbnQgY29uZGl0aW9uLgorICAgICAqIHxbMTVdICAgIHxEUldFICAgICAgfERldmljZSBSZW1vdGUgV2FrZXVwIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBjb250cm9scyBpZiBwb3J0J3MgQ29ubmVjdCBTdGF0dXMgQ2hhbmdlIGFzIGEgcmVtb3RlIHdha2UtdXAgZXZlbnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IENvbm5lY3QgU3RhdHVzIENoYW5nZSBhcyBhIHJlbW90ZSB3YWtlLXVwIGV2ZW50IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IENvbm5lY3QgU3RhdHVzIENoYW5nZSBhcyBhIHJlbW90ZSB3YWtlLXVwIGV2ZW50IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDb25uZWN0IFN0YXR1cyBDaGFuZ2UgYXMgYSByZW1vdGUgd2FrZS11cCBldmVudCBFbmFibGVkLgorICAgICAqIHxbMTZdICAgIHxMUFNDICAgICAgfFNldCBHbG9iYWwgUG93ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBnbG9iYWwgcG93ZXIgbW9kZSAoUFNNIChIY1JoRGVzY3JpcHRvckFbOF0pID0gMCksIHRoaXMgYml0IGlzIHdyaXR0ZW4gdG8gb25lIHRvIGVuYWJsZSBwb3dlciB0byBhbGwgcG9ydHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgYWx3YXlzIHJlYWQgYXMgemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2V0IGdsb2JhbCBwb3dlci4KKyAgICAgKiB8WzE3XSAgICB8T0NJQyAgICAgIHxvdmVyIEN1cnJlbnQgSW5kaWNhdG9yIENoYW5nZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCBieSBoYXJkd2FyZSB3aGVuIGEgY2hhbmdlIGhhcyBvY2N1cnJlZCBpbiBPQ0kgKEhjUmhTdGF0dXNbMV0pLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gT0NJIChIY1JoU3RhdHVzWzFdKSBkaWRuJ3QgY2hhbmdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPQ0kgKEhjUmhTdGF0dXNbMV0pIGNoYW5nZS4KKyAgICAgKiB8WzMxXSAgICB8Q1JXRSAgICAgIHxDbGVhciBSZW1vdGUgV2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgdXNlIHRvIGNsZWFyIERSV0UgKEhjUmhTdGF0dXNbMTVdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBhbHdheXMgcmVhZCBhcyB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciBEUldFIChIY1JoU3RhdHVzWzE1XSkuCisgICAgICogQHZhciBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzWzJdCisgICAgICogT2Zmc2V0OiAweDU0ICBIb3N0IENvbnRyb2xsZXIgUm9vdCBIdWIgUG9ydCBTdGF0dXMKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxDQ1MgICAgICAgfEN1cnJlbnRDb25uZWN0U3RhdHVzIChSZWFkKSBvciBDbGVhclBvcnRFbmFibGUgQml0IChXcml0ZSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgcG9ydCBlbmFibGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGRldmljZSBjb25uZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERldmljZSBjb25uZWN0ZWQuCisgICAgICogfFsxXSAgICAgfFBFUyAgICAgICB8UG9ydCBFbmFibGUgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBwb3J0IGVuYWJsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUG9ydCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG9ydCBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxQU1MgICAgICAgfFBvcnQgU3VzcGVuZCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHBvcnQgaXMgc3VzcGVuZGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBwb3J0IHN1c3BlbmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8UmVhZCBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBvcnQgaXMgbm90IHN1c3BlbmRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG9ydCBpcyBzZWxlY3RpdmVseSBzdXNwZW5kZWQuCisgICAgICogfFszXSAgICAgfFBPQ0kgICAgICB8UG9ydCBvdmVyIEN1cnJlbnQgSW5kaWNhdG9yIChSZWFkKSBvciBDbGVhciBQb3J0IFN1c3BlbmQgKFdyaXRlKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUgb3ZlciBjdXJyZW50IHN0YXR1cyBwaW4gZGVkaWNhdGVkIHRvIHRoaXMgcG9ydAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpZiBOT0NQIChIY1JoRGVzY3JpcHRvckFbMTJdKSBpcyBjbGVhcmVkIGFuZCBPQ1BNIChIY1JoRGVzY3JpcHRvckFbMTFdKSBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgYWxzbyB1c2VkIHRvIGluaXRpYXRlIHRoZSBzZWxlY3RpdmUgcmVzdWx0IHNlcXVlbmNlIGZvciB0aGUgcG9ydC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0ZSBPcGVyYXRpb246CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2xlYXIgcG9ydCBzdXNwZW5kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFJlYWQgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBvdmVyIGN1cnJlbnQgY29uZGl0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdmVyIGN1cnJlbnQgY29uZGl0aW9uLgorICAgICAqIHxbNF0gICAgIHxQUlMgICAgICAgfFBvcnQgUmVzZXQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgcmVmbGVjdHMgdGhlIHJlc2V0IHN0YXRlIG9mIHRoZSBwb3J0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgcG9ydCByZXNldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQb3J0IHJlc2V0IHNpZ25hbCBpcyBub3QgYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3J0IHJlc2V0IHNpZ25hbCBpcyBhY3RpdmUuCisgICAgICogfFs4XSAgICAgfFBQUyAgICAgICB8UG9ydCBQb3dlciBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCByZWZsZWN0cyB0aGUgcG93ZXIgc3RhdGUgb2YgdGhlIHBvcnQgcmVnYXJkbGVzcyBvZiB0aGUgcG93ZXIgc3dpdGNoaW5nIG1vZGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgT3BlcmF0aW9uOgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvcnQgUG93ZXIgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUG9ydCBwb3dlciBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUG9ydCBwb3dlciBpcyBFbmFibGVkLgorICAgICAqIHxbOV0gICAgIHxMU0RBICAgICAgfExvdyBTcGVlZCBEZXZpY2UgQXR0YWNoZWQgKFJlYWQpIG9yIENsZWFyIFBvcnQgUG93ZXIgKFdyaXRlKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIHNwZWVkIChhbmQgYnVkIGlkbGUpIG9mIHRoZSBhdHRhY2hlZCBkZXZpY2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBvbmx5IHZhbGlkIHdoZW4gQ0NTIChIY1JoUG9ydFN0YXR1c1swXSkgaXMgc2V0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIGFsc28gdXNlZCB0byBjbGVhciBwb3J0IHBvd2VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBDbGVhciBQUFMgKEhjUmhQb3J0U3RhdHVzWzhdKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxSZWFkIE9wZXJhdGlvbjoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRnVsbCBTcGVlZCBkZXZpY2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IExvdy1zcGVlZCBkZXZpY2UuCisgICAgICogfFsxNl0gICAgfENTQyAgICAgICB8Q29ubmVjdCBTdGF0dXMgQ2hhbmdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIGNvbm5lY3Qgb3IgZGlzY29ubmVjdCBldmVudCBoYXMgYmVlbiBkZXRlY3RlZCAoQ0NTIChIY1JoUG9ydFN0YXR1c1swXSkgY2hhbmdlZCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBjb25uZWN0L2Rpc2Nvbm5lY3QgZXZlbnQgKENDUyAoSGNSaFBvcnRTdGF0dXNbMF0pIGRpZG4ndCBjaGFuZ2UpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBIYXJkd2FyZSBkZXRlY3Rpb24gb2YgY29ubmVjdC9kaXNjb25uZWN0IGV2ZW50IChDQ1MgKEhjUmhQb3J0U3RhdHVzWzBdKSBjaGFuZ2VkKS4KKyAgICAgKiB8WzE3XSAgICB8UEVTQyAgICAgIHxQb3J0IEVuYWJsZSBTdGF0dXMgQ2hhbmdlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIHBvcnQgaGFzIGJlZW4gZGlzYWJsZWQgKFBFUyAoSGNSaFBvcnRTdGF0dXNbMV0pIGNsZWFyZWQpIGR1ZSB0byBhIGhhcmR3YXJlIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUEVTIChIY1JoUG9ydFN0YXR1c1sxXSkgZGlkbid0IGNoYW5nZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUEVTIChIY1JoUG9ydFN0YXR1c1sxXSkgY2hhbmdlZC4KKyAgICAgKiB8WzE4XSAgICB8UFNTQyAgICAgIHxQb3J0IFN1c3BlbmQgU3RhdHVzIENoYW5nZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgY29tcGxldGlvbiBvZiB0aGUgc2VsZWN0aXZlIHJlc3VtZSBzZXF1ZW5jZSBmb3IgdGhlIHBvcnQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V3JpdGUgMSB0byBjbGVhciB0aGlzIGJpdCB0byB6ZXJvLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQb3J0IHJlc3VtZSBpcyBub3QgY29tcGxldGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQb3J0IHJlc3VtZSBjb21wbGV0ZWQuCisgICAgICogfFsxOV0gICAgfE9DSUMgICAgICB8UG9ydCBvdmVyIEN1cnJlbnQgSW5kaWNhdG9yIENoYW5nZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIFBPQ0kgKEhjUmhQb3J0U3RhdHVzWzNdKSBjaGFuZ2VzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUE9DSSAoSGNSaFBvcnRTdGF0dXNbM10pIGRpZG4ndCBjaGFuZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBPQ0kgKEhjUmhQb3J0U3RhdHVzWzNdKSBjaGFuZ2VzLgorICAgICAqIHxbMjBdICAgIHxQUlNDICAgICAgfFBvcnQgUmVzZXQgU3RhdHVzIENoYW5nZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGF0IHRoZSBwb3J0IHJlc2V0IHNpZ25hbCBoYXMgY29tcGxldGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRlIDEgdG8gY2xlYXIgdGhpcyBiaXQgdG8gemVyby4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUG9ydCByZXNldCBpcyBub3QgY29tcGxldGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFBvcnQgcmVzZXQgaXMgY29tcGxldGUuCisgICAgICogQHZhciBVU0JIX1Q6OkhjUGh5Q29udHJvbAorICAgICAqIE9mZnNldDogMHgyMDAgIEhvc3QgQ29udHJvbGxlciBQSFkgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyN10gICAgfFNUQllFTiAgICB8VVNCIFRyYW5zY2VpdmVyIFN0YW5kYnkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGNvbnRyb2xzIGlmIFVTQiB0cmFuc2NlaXZlciBjb3VsZCBlbnRlciB0aGUgc3RhbmRieSBtb2RlIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIFVTQiB0cmFuc2NlaXZlciB3b3VsZCBuZXZlciBlbnRlciB0aGUgc3RhbmRieSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgVVNCIHRyYW5zY2VpdmVyIHdpbGwgZW50ZXIgc3RhbmRieSBtb2RlIHdoaWxlIHBvcnQgaXMgaW4gcG93ZXIgb2ZmIHN0YXRlIChwb3J0IHBvd2VyIGlzIGluYWN0aXZlKS4KKyAgICAgKiBAdmFyIFVTQkhfVDo6SGNNaXNjQ29udHJvbAorICAgICAqIE9mZnNldDogMHgyMDQgIEhvc3QgQ29udHJvbGxlciBNaXNjZWxsYW5lb3VzIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxBQk9SVCAgICAgfEFIQiBCdXMgRVJST1IgUmVzcG9uc2UKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlcmUgaXMgYW4gRVJST1IgcmVzcG9uc2UgcmVjZWl2ZWQgaW4gQUhCIGJ1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gRVJST1IgcmVzcG9uc2UgcmVjZWl2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEVSUk9SIHJlc3BvbnNlIHJlY2VpdmVkLgorICAgICAqIHxbM10gICAgIHxPQ0FMICAgICAgfG92ZXIgQ3VycmVudCBBY3RpdmUgTG93CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY29udHJvbHMgdGhlIHBvbGFyaXR5IG9mIG92ZXIgY3VycmVudCBmbGFnIGZyb20gZXh0ZXJuYWwgcG93ZXIgSUMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE92ZXIgY3VycmVudCBmbGFnIGlzIGhpZ2ggYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPdmVyIGN1cnJlbnQgZmxhZyBpcyBsb3cgYWN0aXZlLgorICAgICAqIHxbMTZdICAgIHxEUFJUMSAgICAgfERpc2FibGUgUG9ydCAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY29udHJvbHMgaWYgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBVU0IgaG9zdCBjb250cm9sbGVyIGFuZCB0cmFuc2NlaXZlciBvZiBwb3J0IDEgaXMgZGlzYWJsZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgY29ubmVjdGlvbiBpcyBkaXNhYmxlZCwgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgd2lsbCBub3QgcmVjb2duaXplIGFueSBldmVudCBvZiBVU0IgYnVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIGJpdCBoaWdoLCB0aGUgdHJhbnNjZWl2ZXIgb2YgcG9ydCAxIHdpbGwgYWxzbyBiZSBmb3JjZWQgaW50byB0aGUgc3RhbmRieSBtb2RlIG5vIG1hdHRlciB3aGF0IFVTQiBob3N0IGNvbnRyb2xsZXIgb3BlcmF0aW9uIGlzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgY29ubmVjdGlvbiBiZXR3ZWVuIFVTQiBob3N0IGNvbnRyb2xsZXIgYW5kIHRyYW5zY2VpdmVyIG9mIHBvcnQgMSBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgY29ubmVjdGlvbiBiZXR3ZWVuIFVTQiBob3N0IGNvbnRyb2xsZXIgYW5kIHRyYW5zY2VpdmVyIG9mIHBvcnQgMSBEaXNhYmxlZCBhbmQgdGhlIHRyYW5zY2VpdmVyIG9mIHBvcnQgMSB3aWxsIGFsc28gYmUgZm9yY2VkIGludG8gdGhlIHN0YW5kYnkgbW9kZS4KKyAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEhjUmV2aXNpb247ICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBIb3N0IENvbnRyb2xsZXIgUmV2aXNpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY0NvbnRyb2w7ICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gSG9zdCBDb250cm9sbGVyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNDb21tYW5kU3RhdHVzOyAgICAgICAvKiE8IFsweDAwMDhdIEhvc3QgQ29udHJvbGxlciBDb21tYW5kIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjSW50ZXJydXB0U3RhdHVzOyAgICAgLyohPCBbMHgwMDBjXSBIb3N0IENvbnRyb2xsZXIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY0ludGVycnVwdEVuYWJsZTsgICAgIC8qITwgWzB4MDAxMF0gSG9zdCBDb250cm9sbGVyIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNJbnRlcnJ1cHREaXNhYmxlOyAgICAvKiE8IFsweDAwMTRdIEhvc3QgQ29udHJvbGxlciBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjSENDQTsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDE4XSBIb3N0IENvbnRyb2xsZXIgQ29tbXVuaWNhdGlvbiBBcmVhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY1BlcmlvZEN1cnJlbnRFRDsgICAgIC8qITwgWzB4MDAxY10gSG9zdCBDb250cm9sbGVyIFBlcmlvZCBDdXJyZW50IEVEIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNDb250cm9sSGVhZEVEOyAgICAgICAvKiE8IFsweDAwMjBdIEhvc3QgQ29udHJvbGxlciBDb250cm9sIEhlYWQgRUQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjQ29udHJvbEN1cnJlbnRFRDsgICAgLyohPCBbMHgwMDI0XSBIb3N0IENvbnRyb2xsZXIgQ29udHJvbCBDdXJyZW50IEVEIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY0J1bGtIZWFkRUQ7ICAgICAgICAgIC8qITwgWzB4MDAyOF0gSG9zdCBDb250cm9sbGVyIEJ1bGsgSGVhZCBFRCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNCdWxrQ3VycmVudEVEOyAgICAgICAvKiE8IFsweDAwMmNdIEhvc3QgQ29udHJvbGxlciBCdWxrIEN1cnJlbnQgRUQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjRG9uZUhlYWQ7ICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBIb3N0IENvbnRyb2xsZXIgRG9uZSBIZWFkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY0ZtSW50ZXJ2YWw7ICAgICAgICAgIC8qITwgWzB4MDAzNF0gSG9zdCBDb250cm9sbGVyIEZyYW1lIEludGVydmFsIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgSGNGbVJlbWFpbmluZzsgICAgICAgICAvKiE8IFsweDAwMzhdIEhvc3QgQ29udHJvbGxlciBGcmFtZSBSZW1haW5pbmcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IEhjRm1OdW1iZXI7ICAgICAgICAgICAgLyohPCBbMHgwMDNjXSBIb3N0IENvbnRyb2xsZXIgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY1BlcmlvZGljU3RhcnQ7ICAgICAgIC8qITwgWzB4MDA0MF0gSG9zdCBDb250cm9sbGVyIFBlcmlvZGljIFN0YXJ0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNMU1RocmVzaG9sZDsgICAgICAgICAvKiE8IFsweDAwNDRdIEhvc3QgQ29udHJvbGxlciBMb3ctc3BlZWQgVGhyZXNob2xkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjUmhEZXNjcmlwdG9yQTsgICAgICAgLyohPCBbMHgwMDQ4XSBIb3N0IENvbnRyb2xsZXIgUm9vdCBIdWIgRGVzY3JpcHRvciBBIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBIY1JoRGVzY3JpcHRvckI7ICAgICAgIC8qITwgWzB4MDA0Y10gSG9zdCBDb250cm9sbGVyIFJvb3QgSHViIERlc2NyaXB0b3IgQiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSGNSaFN0YXR1czsgICAgICAgICAgICAvKiE8IFsweDAwNTBdIEhvc3QgQ29udHJvbGxlciBSb290IEh1YiBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjUmhQb3J0U3RhdHVzWzJdOyAgICAgLyohPCBbMHgwMDU0XSBIb3N0IENvbnRyb2xsZXIgUm9vdCBIdWIgUG9ydCBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsxMDVdOworICAgIF9fSU8gdWludDMyX3QgSGNQaHlDb250cm9sOyAgICAgICAgICAvKiE8IFsweDAyMDBdIEhvc3QgQ29udHJvbGxlciBQSFkgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEhjTWlzY0NvbnRyb2w7ICAgICAgICAgLyohPCBbMHgwMjA0XSBIb3N0IENvbnRyb2xsZXIgTWlzY2VsbGFuZW91cyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisKK30gVVNCSF9UOworCisvKioKKyAgICBAYWRkdG9ncm91cCBVU0JIX0NPTlNUIFVTQkggQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgVVNCSCBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFVTQkhfSGNSZXZpc2lvbl9SRVZfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmV2aXNpb246IFJFViBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JIX0hjUmV2aXNpb25fUkVWX01zayAgICAgICAgICAoMHhmZnVsIDw8IFVTQkhfSGNSZXZpc2lvbl9SRVZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JldmlzaW9uOiBSRVYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjQ29udHJvbF9DQlNSX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2w6IENCU1IgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY0NvbnRyb2xfQ0JTUl9Nc2sgICAgICAgICAgKDB4M3VsIDw8IFVTQkhfSGNDb250cm9sX0NCU1JfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb250cm9sOiBDQlNSIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0NvbnRyb2xfUExFX1BvcyAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb250cm9sOiBQTEUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkhfSGNDb250cm9sX1BMRV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JIX0hjQ29udHJvbF9QTEVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbDogUExFIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNDb250cm9sX0lFX1BvcyAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbDogSUUgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU0JIX0hjQ29udHJvbF9JRV9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNCSF9IY0NvbnRyb2xfSUVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2w6IElFIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjQ29udHJvbF9DTEVfUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2w6IENMRSBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY0NvbnRyb2xfQ0xFX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTQkhfSGNDb250cm9sX0NMRV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb250cm9sOiBDTEUgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0NvbnRyb2xfQkxFX1BvcyAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb250cm9sOiBCTEUgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkhfSGNDb250cm9sX0JMRV9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU0JIX0hjQ29udHJvbF9CTEVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbDogQkxFIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNDb250cm9sX0hDRlNfUG9zICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbDogSENGUyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU0JIX0hjQ29udHJvbF9IQ0ZTX01zayAgICAgICAgICAoMHgzdWwgPDwgVVNCSF9IY0NvbnRyb2xfSENGU19Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbnRyb2w6IEhDRlMgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjQ29tbWFuZFN0YXR1c19IQ1JfUG9zICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbW1hbmRTdGF0dXM6IEhDUiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY0NvbW1hbmRTdGF0dXNfSENSX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNDb21tYW5kU3RhdHVzX0hDUl9Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb21tYW5kU3RhdHVzOiBIQ1IgTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0NvbW1hbmRTdGF0dXNfQ0xGX1BvcyAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb21tYW5kU3RhdHVzOiBDTEYgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNDb21tYW5kU3RhdHVzX0NMRl9Nc2sgICAgICgweDF1bCA8PCBVU0JIX0hjQ29tbWFuZFN0YXR1c19DTEZfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29tbWFuZFN0YXR1czogQ0xGIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNDb21tYW5kU3RhdHVzX0JMRl9Qb3MgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29tbWFuZFN0YXR1czogQkxGIFBvc2l0aW9uICAqLworI2RlZmluZSBVU0JIX0hjQ29tbWFuZFN0YXR1c19CTEZfTXNrICAgICAoMHgxdWwgPDwgVVNCSF9IY0NvbW1hbmRTdGF0dXNfQkxGX1BvcykgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbW1hbmRTdGF0dXM6IEJMRiBNYXNrICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjQ29tbWFuZFN0YXR1c19TT0NfUG9zICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0NvbW1hbmRTdGF0dXM6IFNPQyBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY0NvbW1hbmRTdGF0dXNfU09DX01zayAgICAgKDB4M3VsIDw8IFVTQkhfSGNDb21tYW5kU3RhdHVzX1NPQ19Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb21tYW5kU3RhdHVzOiBTT0MgTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdFN0YXR1c19TT19Qb3MgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRTdGF0dXM6IFNPIFBvc2l0aW9uICovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfU09fTXNrICAgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1NPX1BvcykgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0U3RhdHVzOiBTTyBNYXNrICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfV0RIX1BvcyAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0U3RhdHVzOiBXREggUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1dESF9Nc2sgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdFN0YXR1c19XREhfUG9zKSAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdFN0YXR1czogV0RIIE1hc2sgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1NGX1BvcyAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdFN0YXR1czogU0YgUG9zaXRpb24gKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdFN0YXR1c19TRl9Nc2sgICAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfU0ZfUG9zKSAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRTdGF0dXM6IFNGIE1hc2sgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdFN0YXR1c19SRF9Qb3MgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRTdGF0dXM6IFJEIFBvc2l0aW9uICovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfUkRfTXNrICAgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1JEX1BvcykgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0U3RhdHVzOiBSRCBNYXNrICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfRk5PX1BvcyAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0U3RhdHVzOiBGTk8gUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX0ZOT19Nc2sgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdFN0YXR1c19GTk9fUG9zKSAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdFN0YXR1czogRk5PIE1hc2sgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1JIU0NfUG9zICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdFN0YXR1czogUkhTQyBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRTdGF0dXNfUkhTQ19Nc2sgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0U3RhdHVzX1JIU0NfUG9zKSAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0U3RhdHVzOiBSSFNDIE1hc2sgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfU09fUG9zICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RW5hYmxlOiBTTyBQb3NpdGlvbiAqLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX1NPX01zayAgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9TT19Qb3MpICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZTogU08gTWFzayAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX1dESF9Qb3MgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZTogV0RIIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9XREhfTXNrICAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfV0RIX1BvcykgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IFdESCBNYXNrICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9TRl9Qb3MgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IFNGIFBvc2l0aW9uICovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfU0ZfTXNrICAgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX1NGX1BvcykgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RW5hYmxlOiBTRiBNYXNrICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfUkRfUG9zICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RW5hYmxlOiBSRCBQb3NpdGlvbiAqLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX1JEX01zayAgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9SRF9Qb3MpICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZTogUkQgTWFzayAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX0ZOT19Qb3MgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZTogRk5PIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9GTk9fTXNrICAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfRk5PX1BvcykgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IEZOTyBNYXNrICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9SSFNDX1BvcyAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IFJIU0MgUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX1JIU0NfTXNrICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9SSFNDX1BvcykgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZTogUkhTQyBNYXNrICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RW5hYmxlX01JRV9Qb3MgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdEVuYWJsZTogTUlFIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdEVuYWJsZV9NSUVfTXNrICAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHRFbmFibGVfTUlFX1BvcykgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHRFbmFibGU6IE1JRSBNYXNrICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdERpc2FibGVfU09fUG9zICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHREaXNhYmxlOiBTTyBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1NPX01zayAgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9TT19Qb3MpICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogU08gTWFzayAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1dESF9Qb3MgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogV0RIIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdERpc2FibGVfV0RIX01zayAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1dESF9Qb3MpICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHREaXNhYmxlOiBXREggTWFzayAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdERpc2FibGVfU0ZfUG9zICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHREaXNhYmxlOiBTRiBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1NGX01zayAgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9TRl9Qb3MpICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogU0YgTWFzayAgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1JEX1BvcyAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogUkQgUG9zaXRpb24qLworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9SRF9Nc2sgICAoMHgxdWwgPDwgVVNCSF9IY0ludGVycnVwdERpc2FibGVfUkRfUG9zKSAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IFJEIE1hc2sgICAgKi8KKworI2RlZmluZSBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9GTk9fUG9zICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ludGVycnVwdERpc2FibGU6IEZOTyBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX0ZOT19Nc2sgICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9GTk9fUG9zKSAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogRk5PIE1hc2sgICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1JIU0NfUG9zICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogUkhTQyBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX1JIU0NfTXNrICgweDF1bCA8PCBVU0JIX0hjSW50ZXJydXB0RGlzYWJsZV9SSFNDX1BvcykgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogUkhTQyBNYXNrICAqLworCisjZGVmaW5lIFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX01JRV9Qb3MgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSW50ZXJydXB0RGlzYWJsZTogTUlFIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY0ludGVycnVwdERpc2FibGVfTUlFX01zayAgKDB4MXVsIDw8IFVTQkhfSGNJbnRlcnJ1cHREaXNhYmxlX01JRV9Qb3MpICAgICAgICAvKiE8IFVTQkhfVDo6SGNJbnRlcnJ1cHREaXNhYmxlOiBNSUUgTWFzayAgICovCisKKyNkZWZpbmUgVVNCSF9IY0hDQ0FfSENDQV9Qb3MgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNIQ0NBOiBIQ0NBIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVTQkhfSGNIQ0NBX0hDQ0FfTXNrICAgICAgICAgICAgICgweGZmZmZmZnVsIDw8IFVTQkhfSGNIQ0NBX0hDQ0FfUG9zKSAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjSENDQTogSENDQSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNQZXJpb2RDdXJyZW50RURfUENFRF9Qb3MgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUGVyaW9kQ3VycmVudEVEOiBQQ0VEIFBvc2l0aW9uKi8KKyNkZWZpbmUgVVNCSF9IY1BlcmlvZEN1cnJlbnRFRF9QQ0VEX01zayAgKDB4ZmZmZmZmZnVsIDw8IFVTQkhfSGNQZXJpb2RDdXJyZW50RURfUENFRF9Qb3MpICAvKiE8IFVTQkhfVDo6SGNQZXJpb2RDdXJyZW50RUQ6IFBDRUQgTWFzayAgICovCisKKyNkZWZpbmUgVVNCSF9IY0NvbnRyb2xIZWFkRURfQ0hFRF9Qb3MgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNDb250cm9sSGVhZEVEOiBDSEVEIFBvc2l0aW9uICovCisjZGVmaW5lIFVTQkhfSGNDb250cm9sSGVhZEVEX0NIRURfTXNrICAgICgweGZmZmZmZmZ1bCA8PCBVU0JIX0hjQ29udHJvbEhlYWRFRF9DSEVEX1BvcykgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbEhlYWRFRDogQ0hFRCBNYXNrICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNDb250cm9sQ3VycmVudEVEX0NDRURfUG9zICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQ29udHJvbEN1cnJlbnRFRDogQ0NFRCBQb3NpdGlvbiovCisjZGVmaW5lIFVTQkhfSGNDb250cm9sQ3VycmVudEVEX0NDRURfTXNrICgweGZmZmZmZmZ1bCA8PCBVU0JIX0hjQ29udHJvbEN1cnJlbnRFRF9DQ0VEX1BvcykgLyohPCBVU0JIX1Q6OkhjQ29udHJvbEN1cnJlbnRFRDogQ0NFRCBNYXNrICAqLworCisjZGVmaW5lIFVTQkhfSGNCdWxrSGVhZEVEX0JIRURfUG9zICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjQnVsa0hlYWRFRDogQkhFRCBQb3NpdGlvbiAgICAqLworI2RlZmluZSBVU0JIX0hjQnVsa0hlYWRFRF9CSEVEX01zayAgICAgICAoMHhmZmZmZmZmdWwgPDwgVVNCSF9IY0J1bGtIZWFkRURfQkhFRF9Qb3MpICAgICAgIC8qITwgVVNCSF9UOjpIY0J1bGtIZWFkRUQ6IEJIRUQgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjQnVsa0N1cnJlbnRFRF9CQ0VEX1BvcyAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0J1bGtDdXJyZW50RUQ6IEJDRUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVVNCSF9IY0J1bGtDdXJyZW50RURfQkNFRF9Nc2sgICAgKDB4ZmZmZmZmZnVsIDw8IFVTQkhfSGNCdWxrQ3VycmVudEVEX0JDRURfUG9zKSAgICAvKiE8IFVTQkhfVDo6SGNCdWxrQ3VycmVudEVEOiBCQ0VEIE1hc2sgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0RvbmVIZWFkX0RIX1BvcyAgICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNEb25lSGVhZDogREggUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkhfSGNEb25lSGVhZF9ESF9Nc2sgICAgICAgICAgICgweGZmZmZmZmZ1bCA8PCBVU0JIX0hjRG9uZUhlYWRfREhfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRG9uZUhlYWQ6IERIIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNGbUludGVydmFsX0ZJX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRm1JbnRlcnZhbDogRkkgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU0JIX0hjRm1JbnRlcnZhbF9GSV9Nc2sgICAgICAgICAoMHgzZmZmdWwgPDwgVVNCSF9IY0ZtSW50ZXJ2YWxfRklfUG9zKSAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ZtSW50ZXJ2YWw6IEZJIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjRm1JbnRlcnZhbF9GU01QU19Qb3MgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ZtSW50ZXJ2YWw6IEZTTVBTIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVVNCSF9IY0ZtSW50ZXJ2YWxfRlNNUFNfTXNrICAgICAgKDB4N2ZmZnVsIDw8IFVTQkhfSGNGbUludGVydmFsX0ZTTVBTX1BvcykgICAgICAgICAvKiE8IFVTQkhfVDo6SGNGbUludGVydmFsOiBGU01QUyBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ZtSW50ZXJ2YWxfRklUX1BvcyAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNGbUludGVydmFsOiBGSVQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTQkhfSGNGbUludGVydmFsX0ZJVF9Nc2sgICAgICAgICgweDF1bCA8PCBVU0JIX0hjRm1JbnRlcnZhbF9GSVRfUG9zKSAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRm1JbnRlcnZhbDogRklUIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNGbVJlbWFpbmluZ19GUl9Qb3MgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRm1SZW1haW5pbmc6IEZSIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVU0JIX0hjRm1SZW1haW5pbmdfRlJfTXNrICAgICAgICAoMHgzZmZmdWwgPDwgVVNCSF9IY0ZtUmVtYWluaW5nX0ZSX1BvcykgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ZtUmVtYWluaW5nOiBGUiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjRm1SZW1haW5pbmdfRlJUX1BvcyAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0ZtUmVtYWluaW5nOiBGUlQgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVNCSF9IY0ZtUmVtYWluaW5nX0ZSVF9Nc2sgICAgICAgKDB4MXVsIDw8IFVTQkhfSGNGbVJlbWFpbmluZ19GUlRfUG9zKSAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNGbVJlbWFpbmluZzogRlJUIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY0ZtTnVtYmVyX0ZOX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNGbU51bWJlcjogRk4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTQkhfSGNGbU51bWJlcl9GTl9Nc2sgICAgICAgICAgICgweGZmZmZ1bCA8PCBVU0JIX0hjRm1OdW1iZXJfRk5fUG9zKSAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjRm1OdW1iZXI6IEZOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNQZXJpb2RpY1N0YXJ0X1BTX1BvcyAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUGVyaW9kaWNTdGFydDogUFMgUG9zaXRpb24gICAqLworI2RlZmluZSBVU0JIX0hjUGVyaW9kaWNTdGFydF9QU19Nc2sgICAgICAoMHgzZmZmdWwgPDwgVVNCSF9IY1BlcmlvZGljU3RhcnRfUFNfUG9zKSAgICAgICAgIC8qITwgVVNCSF9UOjpIY1BlcmlvZGljU3RhcnQ6IFBTIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjTFNUaHJlc2hvbGRfTFNUX1BvcyAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY0xTVGhyZXNob2xkOiBMU1QgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVNCSF9IY0xTVGhyZXNob2xkX0xTVF9Nc2sgICAgICAgKDB4ZmZmdWwgPDwgVVNCSF9IY0xTVGhyZXNob2xkX0xTVF9Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNMU1RocmVzaG9sZDogTFNUIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoRGVzY3JpcHRvckFfTkRQX1BvcyAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaERlc2NyaXB0b3JBOiBORFAgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNSaERlc2NyaXB0b3JBX05EUF9Nc2sgICAgICgweGZmdWwgPDwgVVNCSF9IY1JoRGVzY3JpcHRvckFfTkRQX1BvcykgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhEZXNjcmlwdG9yQTogTkRQIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaERlc2NyaXB0b3JBX1BTTV9Qb3MgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhEZXNjcmlwdG9yQTogUFNNIFBvc2l0aW9uICAqLworI2RlZmluZSBVU0JIX0hjUmhEZXNjcmlwdG9yQV9QU01fTXNrICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoRGVzY3JpcHRvckFfUFNNX1BvcykgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoRGVzY3JpcHRvckE6IFBTTSBNYXNrICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhEZXNjcmlwdG9yQV9PQ1BNX1BvcyAgICAoMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoRGVzY3JpcHRvckE6IE9DUE0gUG9zaXRpb24gKi8KKyNkZWZpbmUgVVNCSF9IY1JoRGVzY3JpcHRvckFfT0NQTV9Nc2sgICAgKDB4MXVsIDw8IFVTQkhfSGNSaERlc2NyaXB0b3JBX09DUE1fUG9zKSAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaERlc2NyaXB0b3JBOiBPQ1BNIE1hc2sgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoRGVzY3JpcHRvckFfTk9DUF9Qb3MgICAgKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaERlc2NyaXB0b3JBOiBOT0NQIFBvc2l0aW9uICovCisjZGVmaW5lIFVTQkhfSGNSaERlc2NyaXB0b3JBX05PQ1BfTXNrICAgICgweDF1bCA8PCBVU0JIX0hjUmhEZXNjcmlwdG9yQV9OT0NQX1BvcykgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhEZXNjcmlwdG9yQTogTk9DUCBNYXNrICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaERlc2NyaXB0b3JCX1BQQ01fUG9zICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhEZXNjcmlwdG9yQjogUFBDTSBQb3NpdGlvbiAqLworI2RlZmluZSBVU0JIX0hjUmhEZXNjcmlwdG9yQl9QUENNX01zayAgICAoMHhmZmZmdWwgPDwgVVNCSF9IY1JoRGVzY3JpcHRvckJfUFBDTV9Qb3MpICAgICAgIC8qITwgVVNCSF9UOjpIY1JoRGVzY3JpcHRvckI6IFBQQ00gTWFzayAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhTdGF0dXNfTFBTX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoU3RhdHVzOiBMUFMgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoU3RhdHVzX0xQU19Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFN0YXR1c19MUFNfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFN0YXR1czogTFBTIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoU3RhdHVzX09DSV9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFN0YXR1czogT0NJIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTQkhfSGNSaFN0YXR1c19PQ0lfTXNrICAgICAgICAgICgweDF1bCA8PCBVU0JIX0hjUmhTdGF0dXNfT0NJX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhTdGF0dXM6IE9DSSBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFN0YXR1c19EUldFX1BvcyAgICAgICAgICgxNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhTdGF0dXM6IERSV0UgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU0JIX0hjUmhTdGF0dXNfRFJXRV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoU3RhdHVzX0RSV0VfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoU3RhdHVzOiBEUldFIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhTdGF0dXNfTFBTQ19Qb3MgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoU3RhdHVzOiBMUFNDIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoU3RhdHVzX0xQU0NfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFN0YXR1c19MUFNDX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFN0YXR1czogTFBTQyBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoU3RhdHVzX09DSUNfUG9zICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFN0YXR1czogT0NJQyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTQkhfSGNSaFN0YXR1c19PQ0lDX01zayAgICAgICAgICgweDF1bCA8PCBVU0JIX0hjUmhTdGF0dXNfT0NJQ19Qb3MpICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhTdGF0dXM6IE9DSUMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFN0YXR1c19DUldFX1BvcyAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhTdGF0dXM6IENSV0UgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU0JIX0hjUmhTdGF0dXNfQ1JXRV9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoU3RhdHVzX0NSV0VfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoU3RhdHVzOiBDUldFIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX0NDU19Qb3MgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogQ0NTIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19DQ1NfTXNrICAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFBvcnRTdGF0dXNfQ0NTX1BvcykgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IENDUyBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QRVNfUG9zICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBFUyBQb3NpdGlvbiAgICovCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUEVTX01zayAgICAgICgweDF1bCA8PCBVU0JIX0hjUmhQb3J0U3RhdHVzX1BFU19Qb3MpICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQRVMgTWFzayAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUFNTX1BvcyAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQU1MgUG9zaXRpb24gICAqLworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BTU19Nc2sgICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoUG9ydFN0YXR1c19QU1NfUG9zKSAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUFNTIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BPQ0lfUG9zICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUE9DSSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QT0NJX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFBvcnRTdGF0dXNfUE9DSV9Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBPQ0kgTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QUlNfUG9zICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBSUyBQb3NpdGlvbiAgICovCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUFJTX01zayAgICAgICgweDF1bCA8PCBVU0JIX0hjUmhQb3J0U3RhdHVzX1BSU19Qb3MpICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQUlMgTWFzayAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUFBTX1BvcyAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQUFMgUG9zaXRpb24gICAqLworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BQU19Nc2sgICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoUG9ydFN0YXR1c19QUFNfUG9zKSAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUFBTIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX0xTREFfUG9zICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogTFNEQSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19MU0RBX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFBvcnRTdGF0dXNfTFNEQV9Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IExTREEgTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19DU0NfUG9zICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IENTQyBQb3NpdGlvbiAgICovCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfQ1NDX01zayAgICAgICgweDF1bCA8PCBVU0JIX0hjUmhQb3J0U3RhdHVzX0NTQ19Qb3MpICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBDU0MgTWFzayAgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUEVTQ19Qb3MgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQRVNDIFBvc2l0aW9uICAqLworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BFU0NfTXNrICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoUG9ydFN0YXR1c19QRVNDX1BvcykgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUEVTQyBNYXNrICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BTU0NfUG9zICAgICAoMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUFNTQyBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19QU1NDX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNSaFBvcnRTdGF0dXNfUFNTQ19Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IFBTU0MgTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY1JoUG9ydFN0YXR1c19PQ0lDX1BvcyAgICAgKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNSaFBvcnRTdGF0dXM6IE9DSUMgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfT0NJQ19Nc2sgICAgICgweDF1bCA8PCBVU0JIX0hjUmhQb3J0U3RhdHVzX09DSUNfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBPQ0lDIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNSaFBvcnRTdGF0dXNfUFJTQ19Qb3MgICAgICgyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjUmhQb3J0U3RhdHVzOiBQUlNDIFBvc2l0aW9uICAqLworI2RlZmluZSBVU0JIX0hjUmhQb3J0U3RhdHVzX1BSU0NfTXNrICAgICAoMHgxdWwgPDwgVVNCSF9IY1JoUG9ydFN0YXR1c19QUlNDX1BvcykgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1JoUG9ydFN0YXR1czogUFJTQyBNYXNrICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjUGh5Q29udHJvbF9TVEJZRU5fUG9zICAgICAoMjcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY1BoeUNvbnRyb2w6IFNUQllFTiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY1BoeUNvbnRyb2xfU1RCWUVOX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNQaHlDb250cm9sX1NUQllFTl9Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNQaHlDb250cm9sOiBTVEJZRU4gTWFzayAgICAgICovCisKKyNkZWZpbmUgVVNCSF9IY01pc2NDb250cm9sX0FCT1JUX1BvcyAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNNaXNjQ29udHJvbDogQUJPUlQgUG9zaXRpb24gICovCisjZGVmaW5lIFVTQkhfSGNNaXNjQ29udHJvbF9BQk9SVF9Nc2sgICAgICgweDF1bCA8PCBVU0JIX0hjTWlzY0NvbnRyb2xfQUJPUlRfUG9zKSAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjTWlzY0NvbnRyb2w6IEFCT1JUIE1hc2sgICAgICAqLworCisjZGVmaW5lIFVTQkhfSGNNaXNjQ29udHJvbF9PQ0FMX1BvcyAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0JIX1Q6OkhjTWlzY0NvbnRyb2w6IE9DQUwgUG9zaXRpb24gICAqLworI2RlZmluZSBVU0JIX0hjTWlzY0NvbnRyb2xfT0NBTF9Nc2sgICAgICAoMHgxdWwgPDwgVVNCSF9IY01pc2NDb250cm9sX09DQUxfUG9zKSAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY01pc2NDb250cm9sOiBPQ0FMIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVU0JIX0hjTWlzY0NvbnRyb2xfRFBSVDFfUG9zICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNCSF9UOjpIY01pc2NDb250cm9sOiBEUFJUMSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVNCSF9IY01pc2NDb250cm9sX0RQUlQxX01zayAgICAgKDB4MXVsIDw8IFVTQkhfSGNNaXNjQ29udHJvbF9EUFJUMV9Qb3MpICAgICAgICAgICAvKiE8IFVTQkhfVDo6SGNNaXNjQ29udHJvbDogRFBSVDEgTWFzayAgICAgICovCisKKy8qKkB9Ki8gLyogVVNCSF9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgVVNCSCByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworI2VuZGlmIC8qIF9fVVNCSF9SRUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdXNwaV9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS91c3BpX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OGQzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdXNwaV9yZWcuaApAQCAtMCwwICsxLDY2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHVzcGlfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFVTUEkgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVVNQSV9SRUdfSF9fCisjZGVmaW5lIF9fVVNQSV9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1BJIE1vZGUgb2YgVVNDSSBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgVVNQSSBTUEkgTW9kZSBvZiBVU0NJIENvbnRyb2xsZXIoVVNQSSkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgVVNQSSBDb250cm9sbGVyCitAeyAqLworCit0eXBlZGVmIHN0cnVjdAoreworCisKKyAgICAvKioKKyAgICAgKiBAdmFyIFVTUElfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwICBVU0NJIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMjowXSAgIHxGVU5NT0RFICAgfEZ1bmN0aW9uIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBzZWxlY3RzIHRoZSBwcm90b2NvbCBmb3IgdGhpcyBVU0NJIGNvbnRyb2xsZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZWxlY3RpbmcgYSBwcm90b2NvbCB0aGF0IGlzIG5vdCBhdmFpbGFibGUgb3IgYSByZXNlcnZlZCBjb21iaW5hdGlvbiBkaXNhYmxlcyB0aGUgVVNDSQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gc3dpdGNoaW5nIGJldHdlZW4gdHdvIHByb3RvY29scywgdGhlIFVTQ0kgaGFzIHRvIGJlIGRpc2FibGVkIGJlZm9yZSBzZWxlY3RpbmcgYSBuZXcgcHJvdG9jb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTaW11bHRhbmVvdXNseSwgdGhlIFVTQ0kgd2lsbCBiZSByZXNldCB3aGVuIHVzZXIgd3JpdGUgMDAwIHRvIEZVTk1PREUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwID0gVGhlIFVTQ0kgaXMgZGlzYWJsZWQuIEFsbCBwcm90b2NvbCByZWxhdGVkIHN0YXRlIG1hY2hpbmVzIGFyZSBzZXQgdG8gaWRsZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSBUaGUgU1BJIHByb3RvY29sIGlzIHNlbGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMCA9IFRoZSBVQVJUIHByb3RvY29sIGlzIHNlbGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMCA9IFRoZSBJMkMgcHJvdG9jb2wgaXMgc2VsZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogT3RoZXIgYml0IGNvbWJpbmF0aW9ucyBhcmUgcmVzZXJ2ZWQuCisgICAgICogQHZhciBVU1BJX1Q6OklOVEVOCisgICAgICogT2Zmc2V0OiAweDA0ICBVU0NJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxUWFNUSUVOICAgfFRyYW5zbWl0IFN0YXJ0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gaW4gY2FzZSBvZiBhIHRyYW5zbWl0IHN0YXJ0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdHJhbnNtaXQgc3RhcnQgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJhbnNtaXQgc3RhcnQgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFRYRU5ESUVOICB8VHJhbnNtaXQgRW5kIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gaW4gY2FzZSBvZiBhIHRyYW5zbWl0IGZpbmlzaCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHRyYW5zbWl0IGZpbmlzaCBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0cmFuc21pdCBmaW5pc2ggaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFJYU1RJRU4gICB8UmVjZWl2ZSBTdGFydCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgYSByZWNlaXZlIHN0YXJ0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVjZWl2ZSBzdGFydCBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWNlaXZlIHN0YXJ0IGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxSWEVORElFTiAgfFJlY2VpdmUgRW5kIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gaW4gY2FzZSBvZiBhIHJlY2VpdmUgZmluaXNoIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVjZWl2ZSBlbmQgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVjZWl2ZSBlbmQgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogQHZhciBVU1BJX1Q6OkJSR0VOCisgICAgICogT2Zmc2V0OiAweDA4ICBVU0NJIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxSQ0xLU0VMICAgfFJlZmVyZW5jZSBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2VsZWN0cyB0aGUgc291cmNlIG9mIHJlZmVyZW5jZSBjbG9jayAoZlJFRl9DTEspLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQZXJpcGhlcmFsIGRldmljZSBjbG9jayBmUENMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXJ2ZWQuCisgICAgICogfFsxXSAgICAgfFBUQ0xLU0VMICB8UHJvdG9jb2wgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHNlbGVjdHMgdGhlIHNvdXJjZSBvZiBwcm90b2NvbCBjbG9jayAoZlBST1RfQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVmZXJlbmNlIGNsb2NrIGZSRUZfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBmUkVGX0NMSzIgKGl0cyBmcmVxdWVuY3kgaXMgaGFsZiBvZiBmUkVGX0NMSykuCisgICAgICogfFszOjJdICAgfFNQQ0xLU0VMICB8U2FtcGxlIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCB1c2VkIGZvciB0aGUgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBvZiBzYW1wbGUgY2xvY2sgKGZTQU1QX0NMSykgZm9yIHRoZSBwcm90b2NvbCBwcm9jZXNzb3IuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAgPSBmRElWX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IGZQUk9UX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IGZTQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gZlJFRl9DTEsuCisgICAgICogfFs0XSAgICAgfFRNQ05URU4gICB8VGltZSBNZWFzdXJlbWVudCBDb3VudGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIHRoZSAxMC1iaXQgdGltaW5nIG1lYXN1cmVtZW50IGNvdW50ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWUgbWVhc3VyZW1lbnQgY291bnRlciBpcyBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGltZSBtZWFzdXJlbWVudCBjb3VudGVyIGlzIEVuYWJsZWQuCisgICAgICogfFs1XSAgICAgfFRNQ05UU1JDICB8VGltZSBNZWFzdXJlbWVudCBDb3VudGVyIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltZSBtZWFzdXJlbWVudCBjb3VudGVyIHdpdGggZlBST1RfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1lIG1lYXN1cmVtZW50IGNvdW50ZXIgd2l0aCBmRElWX0NMSy4KKyAgICAgKiB8WzI1OjE2XSB8Q0xLRElWICAgIHxDbG9jayBEaXZpZGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgZGVmaW5lcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgcHJvdG9jb2wgY2xvY2sgZnJlcXVlbmN5IGZQUk9UX0NMSyBhbmQgdGhlIGNsb2NrIGRpdmlkZXIgZnJlcXVlbmN5IGZESVZfQ0xLIChmRElWX0NMSyA9IGZQUk9UX0NMSyAvIChDTEtESVYrMSkgKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBVQVJUIGZ1bmN0aW9uLCBpdCBjYW4gYmUgdXBkYXRlZCBieSBoYXJkd2FyZSBpbiB0aGUgNHRoIGZhbGxpbmcgZWRnZSBvZiB0aGUgaW5wdXQgZGF0YSAweDU1IHdoZW4gdGhlIGF1dG8gYmF1ZCByYXRlIGZ1bmN0aW9uIChBQlJFTihVU1BJX1BST1RDVExbNl0pKSBpcyBlbmFibGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHJldmlzZWQgdmFsdWUgaXMgdGhlIGF2ZXJhZ2UgYml0IHRpbWUgYmV0d2VlbiBiaXQgNSBhbmQgYml0IDYKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgdXNlciBjYW4gdXNlIHJldmlzZWQgQ0xLRElWIGFuZCBuZXcgQlJERVRJVFYgKFVTUElfUFJPVENUTFsyNDoxNl0pIHRvIGNhbGN1bGF0ZSB0aGUgcHJlY2lzZSBiYXVkIHJhdGUuCisgICAgICogQHZhciBVU1BJX1Q6OkRBVElOMAorICAgICAqIE9mZnNldDogMHgxMCAgVVNDSSBJbnB1dCBEYXRhIFNpZ25hbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTWU5DU0VMICAgfElucHV0IFNpZ25hbCBTeW5jaHJvbml6YXRpb24gU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2VsZWN0cyBpZiB0aGUgdW4tc3luY2hyb25pemVkIGlucHV0IHNpZ25hbCAod2l0aCBvcHRpb25hbGx5IGludmVydGVkKSBvciB0aGUgICBzeW5jaHJvbml6ZWQgKGFuZCBvcHRpb25hbGx5IGZpbHRlcmVkKSBzaWduYWwgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIHRoZSAgIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHVuLXN5bmNocm9uaXplZCBzaWduYWwgY2FuIGJlIHRha2VuIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc3luY2hyb25pemVkIHNpZ25hbCBjYW4gYmUgdGFrZW4gYXMgaW5wdXQgZm9yIHRoZSBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gU1BJIHByb3RvY29sLCB3ZSBzdWdnZXN0IHRoaXMgYml0ICAgc2hvdWxkIGJlIHNldCBhcyAwLgorICAgICAqIHxbMl0gICAgIHxJTklOViAgICAgfElucHV0IFNpZ25hbCBJbnZlcnNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIGludmVydGVyIGVuYWJsZSBvZiB0aGUgaW5wdXQgYXN5bmNocm9ub3VzIHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHVuLXN5bmNocm9uaXplZCBpbnB1dCBzaWduYWwgd2lsbCBub3QgYmUgaW52ZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsIHdpbGwgYmUgaW52ZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gU1BJIHByb3RvY29sLCB3ZSBzdWdnZXN0IHRoaXMgYml0ICAgc2hvdWxkIGJlIHNldCBhcyAwLgorICAgICAqIEB2YXIgVVNQSV9UOjpDVExJTjAKKyAgICAgKiBPZmZzZXQ6IDB4MjAgIFVTQ0kgSW5wdXQgQ29udHJvbCBTaWduYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1lOQ1NFTCAgIHxJbnB1dCBTeW5jaHJvbml6YXRpb24gU2lnbmFsIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHNlbGVjdHMgaWYgdGhlIHVuLXN5bmNocm9uaXplZCBpbnB1dCBzaWduYWwgKHdpdGggb3B0aW9uYWxseSBpbnZlcnRlZCkgb3IgdGhlICAgc3luY2hyb25pemVkIChhbmQgb3B0aW9uYWxseSBmaWx0ZXJlZCkgc2lnbmFsIGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciB0aGUgICBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgc2lnbmFsIGNhbiBiZSB0YWtlbiBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHN5bmNocm9uaXplZCBzaWduYWwgY2FuIGJlIHRha2VuIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFNQSSBwcm90b2NvbCwgd2Ugc3VnZ2VzdCB0aGlzIGJpdCAgIHNob3VsZCBiZSBzZXQgYXMgMC4KKyAgICAgKiB8WzJdICAgICB8SU5JTlYgICAgIHxJbnB1dCBTaWduYWwgSW52ZXJzZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSBpbnZlcnRlciBlbmFibGUgb2YgdGhlIGlucHV0IGFzeW5jaHJvbm91cyBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsIHdpbGwgbm90IGJlIGludmVydGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdW4tc3luY2hyb25pemVkIGlucHV0IHNpZ25hbCB3aWxsIGJlIGludmVydGVkLgorICAgICAqIEB2YXIgVVNQSV9UOjpDTEtJTgorICAgICAqIE9mZnNldDogMHgyOCAgVVNDSSBJbnB1dCBDbG9jayBTaWduYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNZTkNTRUwgICB8SW5wdXQgU3luY2hyb25pemF0aW9uIFNpZ25hbCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBzZWxlY3RzIGlmIHRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsIG9yIHRoZSBzeW5jaHJvbml6ZWQgKGFuZCAgIG9wdGlvbmFsbHkgZmlsdGVyZWQpIHNpZ25hbCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHVuLXN5bmNocm9uaXplZCBzaWduYWwgY2FuIGJlIHRha2VuIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc3luY2hyb25pemVkIHNpZ25hbCBjYW4gYmUgdGFrZW4gYXMgaW5wdXQgZm9yIHRoZSBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gU1BJIHByb3RvY29sLCB3ZSBzdWdnZXN0IHRoaXMgYml0ICAgc2hvdWxkIGJlIHNldCBhcyAwLgorICAgICAqIEB2YXIgVVNQSV9UOjpMSU5FQ1RMCisgICAgICogT2Zmc2V0OiAweDJDICBVU0NJIExpbmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfExTQiAgICAgICB8TFNCIEZpcnN0IFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIE1TQiwgd2hpY2ggYml0IG9mIHRyYW5zbWl0L3JlY2VpdmUgZGF0YSBidWZmZXIgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBEV0lEVEgsIGlzIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGZpcnN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgTFNCLCB0aGUgYml0IDAgb2YgZGF0YSBidWZmZXIsIHdpbGwgYmUgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgZmlyc3QuCisgICAgICogfFs1XSAgICAgfERBVE9JTlYgICB8RGF0YSBPdXRwdXQgSW52ZXJzZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSBpbnRlcm5hbCBzaGlmdCBkYXRhIHZhbHVlIGFuZCB0aGUgb3V0cHV0IGRhdGEgc2lnbmFsIG9mIFVTQ0l4X0RBVDAvMSBwaW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IERhdGEgb3V0cHV0IGxldmVsIGlzIG5vdCBpbnZlcnRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRGF0YSBvdXRwdXQgbGV2ZWwgaXMgaW52ZXJ0ZWQuCisgICAgICogfFs3XSAgICAgfENUTE9JTlYgICB8Q29udHJvbCBTaWduYWwgT3V0cHV0IEludmVyc2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZGVmaW5lcyB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgaW50ZXJuYWwgY29udHJvbCBzaWduYWwgYW5kIHRoZSBvdXRwdXQgY29udHJvbCBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGNvbnRyb2wgc2lnbmFsIHdpbGwgYmUgaW52ZXJ0ZWQgYmVmb3JlIGl0cyBvdXRwdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhlIGNvbnRyb2wgc2lnbmFsIGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgaW4gZGlmZmVyZW50IHByb3RvY29sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SW4gU1BJIHByb3RvY29sLCB0aGUgY29udHJvbCBzaWduYWwgbWVhbnMgc2xhdmUgc2VsZWN0IHNpZ25hbAorICAgICAqIHxbMTE6OF0gIHxEV0lEVEggICAgfFdvcmQgTGVuZ3RoIG9mIFRyYW5zbWlzc2lvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGRlZmluZXMgdGhlIGRhdGEgd29yZCBsZW5ndGggKGFtb3VudCBvZiBiaXRzKSBmb3IgcmVjZXB0aW9uIGFuZCB0cmFuc21pc3Npb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGF0YSB3b3JkIGlzIGFsd2F5cyByaWdodC1hbGlnbmVkIGluIHRoZSBkYXRhIGJ1ZmZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFVTQ0kgc3VwcG9ydCB3b3JkIGxlbmd0aCBmcm9tIDQgdG8gMTYgYml0cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDA6IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgMTYgYml0cyBsb2NhdGVkIGF0IGJpdCBwb3NpdGlvbnMgWzE1OjBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4MTogUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgyOiBSZXNlcnZlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweDM6IFJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NDogVGhlIGRhdGEgd29yZCBjb250YWlucyA0IGJpdHMgbG9jYXRlZCBhdCBiaXQgcG9zaXRpb25zIFszOjBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NTogVGhlIGRhdGEgd29yZCBjb250YWlucyA1IGJpdHMgbG9jYXRlZCBhdCBiaXQgcG9zaXRpb25zIFs0OjBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfC4uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4RjogVGhlIGRhdGEgd29yZCBjb250YWlucyAxNSBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbMTQ6MF0uCisgICAgICogQHZhciBVU1BJX1Q6OlRYREFUCisgICAgICogT2Zmc2V0OiAweDMwICBVU0NJIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxUWERBVCAgICAgfFRyYW5zbWl0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gdXNlIHRoaXMgYml0IGZpZWxkIHRvIHdyaXRlIDE2LWJpdCB0cmFuc21pdCBkYXRhIGZvciB0cmFuc21pc3Npb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBvcmRlciB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUgdHJhbnNtaXQgZGF0YSwgdXNlciBoYXZlIHRvIGNoZWNrIFRYRU1QVFkgKFVTUElfQlVGU1RTWzhdKSBzdGF0dXMgYmVmb3JlIHdyaXRpbmcgdHJhbnNtaXQgZGF0YSBpbnRvIHRoaXMgYml0IGZpZWxkLgorICAgICAqIHxbMTZdICAgIHxQT1JURElSICAgfFBvcnQgRGlyZWN0aW9uIENvbnRyb2wKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBpcyBvbmx5IGF2YWlsYWJsZSB3aGlsZSBVU0NJIG9wZXJhdGVzIGluIFNQSSBwcm90b2NvbCAoRlVOTU9ERSA9IDB4MSkgd2l0aCBoYWxmLWR1cGxleCB0cmFuc2ZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGRhdGEgcG9ydCBwaW4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHNvZnR3YXJlIHdyaXRlcyBVU1BJX1RYREFUIHJlZ2lzdGVyLCB0aGUgdHJhbnNtaXQgZGF0YSBhbmQgaXRzIHBvcnQgZGlyZWN0aW9uIGFyZSBzZXR0bGVkIHNpbXVsdGFuZW91c2x5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgZGF0YSBwaW4gaXMgY29uZmlndXJlZCBhcyBvdXRwdXQgbW9kZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIGRhdGEgcGluIGlzIGNvbmZpZ3VyZWQgYXMgaW5wdXQgbW9kZS4KKyAgICAgKiBAdmFyIFVTUElfVDo6UlhEQVQKKyAgICAgKiBPZmZzZXQ6IDB4MzQgIFVTQ0kgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE1OjBdICB8UlhEQVQgICAgIHxSZWNlaXZlZCBEYXRhCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgbW9uaXRvcnMgdGhlIHJlY2VpdmVkIGRhdGEgd2hpY2ggc3RvcmVkIGluIHJlY2VpdmUgZGF0YSBidWZmZXIuCisgICAgICogQHZhciBVU1BJX1Q6OkJVRkNUTAorICAgICAqIE9mZnNldDogMHgzOCAgVVNDSSBUcmFuc21pdC9SZWNlaXZlIEJ1ZmZlciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzZdICAgICB8VFhVRFJJRU4gIHxTbGF2ZSBUcmFuc21pdCBVbmRlci1ydW4gSW50ZXJydXB0IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVHJhbnNtaXQgdW5kZXItcnVuIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgdW5kZXItcnVuIGludGVycnVwdCBFbmFibGVkLgorICAgICAqIHxbN10gICAgIHxUWENMUiAgICAgfENsZWFyIFRyYW5zbWl0IEJ1ZmZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0cmFuc21pdCBidWZmZXIgaXMgY2xlYXJlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNob3VsZCBvbmx5IGJlIHVzZWQgd2hpbGUgdGhlIGJ1ZmZlciBpcyBub3QgdGFraW5nIHBhcnQgaW4gZGF0YSB0cmFmZmljLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBvbmUgUENMSyBjeWNsZS4KKyAgICAgKiB8WzE0XSAgICB8UlhPVklFTiAgIHxSZWNlaXZlIEJ1ZmZlciBPdmVycnVuIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgb3ZlcnJ1biBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlY2VpdmUgb3ZlcnJ1biBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8WzE1XSAgICB8UlhDTFIgICAgIHxDbGVhciBSZWNlaXZlIEJ1ZmZlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWNlaXZlIGJ1ZmZlciBpcyBjbGVhcmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2hvdWxkIG9ubHkgYmUgdXNlZCB3aGlsZSB0aGUgYnVmZmVyIGlzIG5vdCB0YWtpbmcgcGFydCBpbiBkYXRhIHRyYWZmaWMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIG9uZSBQQ0xLIGN5Y2xlLgorICAgICAqIHxbMTZdICAgIHxUWFJTVCAgICAgfFRyYW5zbWl0IFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdGhlIHRyYW5zbWl0LXJlbGF0ZWQgY291bnRlcnMsIHN0YXRlIG1hY2hpbmUsIGFuZCB0aGUgY29udGVudCBvZiB0cmFuc21pdCBzaGlmdCByZWdpc3RlciBhbmQgZGF0YSBidWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIG9uZSBQQ0xLIGN5Y2xlLgorICAgICAqIHxbMTddICAgIHxSWFJTVCAgICAgfFJlY2VpdmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgcmVjZWl2ZS1yZWxhdGVkIGNvdW50ZXJzLCBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhlIGNvbnRlbnQgb2YgcmVjZWl2ZSBzaGlmdCByZWdpc3RlciBhbmQgZGF0YSBidWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIG9uZSBQQ0xLIGN5Y2xlLgorICAgICAqIEB2YXIgVVNQSV9UOjpCVUZTVFMKKyAgICAgKiBPZmZzZXQ6IDB4M0MgIFVTQ0kgVHJhbnNtaXQvUmVjZWl2ZSBCdWZmZXIgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UlhFTVBUWSAgIHxSZWNlaXZlIEJ1ZmZlciBFbXB0eSBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgKiB8WzFdICAgICB8UlhGVUxMICAgIHxSZWNlaXZlIEJ1ZmZlciBGdWxsIEluZGljYXRvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBidWZmZXIgaXMgZnVsbC4KKyAgICAgKiB8WzNdICAgICB8UlhPVklGICAgIHxSZWNlaXZlIEJ1ZmZlciBPdmVycnVuIEludGVycnVwdCBTdGF0dXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHJlY2VpdmUgYnVmZmVyIG92ZXJydW4gZXZlbnQgaGFzIGJlZW4gZGV0ZWN0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiBSWE9WSUVOIChVU1BJX0JVRkNUTFsxNF0pIGlzIGVuYWJsZWQsIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCByZXF1ZXN0IGlzIGFjdGl2YXRlZAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGVzIDEgdG8gdGhpcyBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEgcmVjZWl2ZSBidWZmZXIgb3ZlcnJ1biBldmVudCBoYXMgbm90IGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgcmVjZWl2ZSBidWZmZXIgb3ZlcnJ1biBldmVudCBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiB8WzhdICAgICB8VFhFTVBUWSAgIHxUcmFuc21pdCBCdWZmZXIgRW1wdHkgSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IGJ1ZmZlciBpcyBub3QgZW1wdHkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IGJ1ZmZlciBpcyBlbXB0eSBhbmQgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCB0cmFuc21pc3Npb24gZGF0dW0uCisgICAgICogfFs5XSAgICAgfFRYRlVMTCAgICB8VHJhbnNtaXQgQnVmZmVyIEZ1bGwgSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgYnVmZmVyIGlzIGZ1bGwuCisgICAgICogfFsxMV0gICAgfFRYVURSSUYgICB8VHJhbnNtaXQgQnVmZmVyIFVuZGVyLXJ1biBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgYSB0cmFuc21pdCBidWZmZXIgdW5kZXItcnVuIGV2ZW50IGhhcyBiZWVuIGRldGVjdGVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgZW5hYmxlZCBieSBUWFVEUklFTiAoVVNQSV9CVUZDVExbNl0pLCB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgcmVxdWVzdCBpcyBhY3RpdmF0ZWQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRlcyAxIHRvIHRoaXMgYml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEgdHJhbnNtaXQgYnVmZmVyIHVuZGVyLXJ1biBldmVudCBoYXMgbm90IGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgdHJhbnNtaXQgYnVmZmVyIHVuZGVyLXJ1biBldmVudCBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAgKiBAdmFyIFVTUElfVDo6UERNQUNUTAorICAgICAqIE9mZnNldDogMHg0MCAgVVNDSSBQRE1BIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxQRE1BUlNUICAgfFBETUEgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgVVNDSSdzIFBETUEgY29udHJvbCBsb2dpYy4gVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzFdICAgICB8VFhQRE1BRU4gIHxQRE1BIFRyYW5zbWl0IENoYW5uZWwgQXZhaWxhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IFBETUEgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UlhQRE1BRU4gIHxQRE1BIFJlY2VpdmUgQ2hhbm5lbCBBdmFpbGFibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIFBETUEgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8UERNQUVOICAgIHxQRE1BIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90aWNlOiBUaGUgSTJDIGlzIG5vdCBzdXBwb3J0aW5nIFBETUEgZnVuY3Rpb24uCisgICAgICogQHZhciBVU1BJX1Q6OldLQ1RMCisgICAgICogT2Zmc2V0OiAweDU0ICBVU0NJIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRU4gICAgICB8V2FrZS11cCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdha2UtdXAgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdha2UtdXAgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzFdICAgICB8V0tBRERSRU4gIHxXYWtlLXVwIEFkZHJlc3MgTWF0Y2ggRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgY2hpcCBpcyB3b2tlbiB1cCBhY2NvcmRpbmcgZGF0YSB0b2dnbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBjaGlwIGlzIHdva2VuIHVwIGFjY29yZGluZyBhZGRyZXNzIG1hdGNoLgorICAgICAqIHxbMl0gICAgIHxQREJPUFQgICAgfFBvd2VyIERvd24gQmxvY2tpbmcgT3B0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElmIHVzZXIgYXR0ZW1wdHMgdG8gZW50ZXIgUG93ZXItZG93biBtb2RlIGJ5IGV4ZWN1dGluZyBXRkkgd2hpbGUgdGhlIHByb3RvY29sIGlzIGluIHRyYW5zZmVycmluZywgTUNVIHdpbGwgc3RvcCB0aGUgdHJhbnNmZXIgYW5kIGVudGVyIFBvd2VyLWRvd24gbW9kZSBpbW1lZGlhdGVseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gSWYgdXNlciBhdHRlbXB0cyB0byBlbnRlciBQb3dlci1kb3duIG1vZGUgYnkgZXhlY3V0aW5nIFdGSSB3aGlsZSB0aGUgcHJvdG9jb2wgaXMgaW4gdHJhbnNmZXJyaW5nLCB0aGUgb24tZ29pbmcgdHJhbnNmZXIgd2lsbCBub3QgYmUgc3RvcHBlZCBhbmQgTUNVIHdpbGwgZW50ZXIgaWRsZSBtb2RlIGltbWVkaWF0ZWx5LgorICAgICAqIEB2YXIgVVNQSV9UOjpXS1NUUworICAgICAqIE9mZnNldDogMHg1OCAgVVNDSSBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRiAgICAgICB8V2FrZS11cCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBjaGlwIGlzIHdva2VuIHVwIGZyb20gUG93ZXItZG93biBtb2RlLCB0aGlzIGJpdCBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIEB2YXIgVVNQSV9UOjpQUk9UQ1RMCisgICAgICogT2Zmc2V0OiAweDVDICBVU0NJIFByb3RvY29sIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxTTEFWRSAgICAgfFNsYXZlIE1vZGUgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE1hc3RlciBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBtb2RlLgorICAgICAqIHxbMV0gICAgIHxTTFYzV0lSRSAgfFNsYXZlIDMtd2lyZSBNb2RlIFNlbGVjdGlvbiAoU2xhdmUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgU1BJIHByb3RvY29sIGNhbiB3b3JrIHdpdGggMy13aXJlIGludGVyZmFjZSAod2l0aG91dCBzbGF2ZSBzZWxlY3Qgc2lnbmFsKSBpbiBTbGF2ZSBtb2RlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSA0LXdpcmUgYmktZGlyZWN0aW9uIGludGVyZmFjZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gMy13aXJlIGJpLWRpcmVjdGlvbiBpbnRlcmZhY2UuCisgICAgICogfFsyXSAgICAgfFNTICAgICAgICB8U2xhdmUgU2VsZWN0IENvbnRyb2wgKE1hc3RlciBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIEFVVE9TUyBiaXQgaXMgY2xlYXJlZCwgc2V0dGluZyB0aGlzIGJpdCB0byAxIHdpbGwgc2V0IHRoZSBzbGF2ZSBzZWxlY3Qgc2lnbmFsIHRvIGFjdGl2ZSBzdGF0ZSwgYW5kIHNldHRpbmcgdGhpcyBiaXQgdG8gMCB3aWxsIHNldCB0aGUgc2xhdmUgc2VsZWN0IHNpZ25hbCBiYWNrIHRvIGluYWN0aXZlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoZSBBVVRPU1MgZnVuY3Rpb24gaXMgZW5hYmxlZCAoQVVUT1NTID0gMSksIHRoZSBzZXR0aW5nIHZhbHVlIG9mIHRoaXMgYml0IHdpbGwgbm90IGFmZmVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiBzbGF2ZSBzZWxlY3Qgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFNQSSBwcm90b2NvbCwgdGhlIGludGVybmFsIHNsYXZlIHNlbGVjdCBzaWduYWwgaXMgYWN0aXZlIGhpZ2guCisgICAgICogfFszXSAgICAgfEFVVE9TUyAgICB8QXV0b21hdGljIFNsYXZlIFNlbGVjdCBGdW5jdGlvbiBFbmFibGUgKE1hc3RlciBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBzZWxlY3Qgc2lnbmFsIHdpbGwgYmUgY29udHJvbGxlZCBieSB0aGUgc2V0dGluZyB2YWx1ZSBvZiBTUyAoVVNQSV9QUk9UQ1RMWzJdKSBiaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBzaWduYWwgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBzbGF2ZSBzZWxlY3Qgc2lnbmFsIHdpbGwgYmUgYXNzZXJ0ZWQgYnkgdGhlIFNQSSBjb250cm9sbGVyIHdoZW4gdHJhbnNtaXQvcmVjZWl2ZSBpcyBzdGFydGVkLCBhbmQgd2lsbCBiZSBkZS1hc3NlcnRlZCBhZnRlciBlYWNoIHRyYW5zbWl0L3JlY2VpdmUgaXMgZmluaXNoZWQuCisgICAgICogfFs3OjZdICAgfFNDTEtNT0RFICB8U2VyaWFsIEJ1cyBDbG9jayBNb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgZGVmaW5lcyB0aGUgU0NMSyBpZGxlIHN0YXR1cywgZGF0YSB0cmFuc21pdCwgYW5kIGRhdGEgcmVjZWl2ZSBlZGdlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE1PREUwID0gVGhlIGlkbGUgc3RhdGUgb2YgU1BJIGNsb2NrIGlzIGxvdyBsZXZlbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfERhdGEgaXMgdHJhbnNtaXR0ZWQgd2l0aCBmYWxsaW5nIGVkZ2UgYW5kIHJlY2VpdmVkIHdpdGggcmlzaW5nIGVkZ2UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8TU9ERTEgPSBUaGUgaWRsZSBzdGF0ZSBvZiBTUEkgY2xvY2sgaXMgbG93IGxldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSBpcyB0cmFuc21pdHRlZCB3aXRoIHJpc2luZyBlZGdlIGFuZCByZWNlaXZlZCB3aXRoIGZhbGxpbmcgZWRnZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNT0RFMiA9IFRoZSBpZGxlIHN0YXRlIG9mIFNQSSBjbG9jayBpcyBoaWdoIGxldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSBpcyB0cmFuc21pdHRlZCB3aXRoIHJpc2luZyBlZGdlIGFuZCByZWNlaXZlZCB3aXRoIGZhbGxpbmcgZWRnZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxNT0RFMyA9IFRoZSBpZGxlIHN0YXRlIG9mIFNQSSBjbG9jayBpcyBoaWdoIGxldmVsCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RGF0YSBpcyB0cmFuc21pdHRlZCB3aXRoIGZhbGxpbmcgZWRnZSBhbmQgcmVjZWl2ZWQgd2l0aCByaXNpbmcgZWRnZS4KKyAgICAgKiB8WzExOjhdICB8U1VTUElUViAgIHxTdXNwZW5kIEludGVydmFsIChNYXN0ZXIgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBwcm92aWRlcyB0aGUgY29uZmlndXJhYmxlIHN1c3BlbmQgaW50ZXJ2YWwgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSB0cmFuc21pdC9yZWNlaXZlIHRyYW5zYWN0aW9uIGluIGEgdHJhbnNmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGUgZGVmaW5pdGlvbiBvZiB0aGUgc3VzcGVuZCBpbnRlcnZhbCBpcyB0aGUgaW50ZXJ2YWwgYmV0d2VlbiB0aGUgbGFzdCBjbG9jayBlZGdlIG9mIHRoZSBwcmVjZWRpbmcgdHJhbnNhY3Rpb24gd29yZCBhbmQgdGhlIGZpcnN0IGNsb2NrIGVkZ2Ugb2YgdGhlIGZvbGxvd2luZyB0cmFuc2FjdGlvbiB3b3JkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRlZmF1bHQgdmFsdWUgaXMgMHgzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHBlcmlvZCBvZiB0aGUgc3VzcGVuZCBpbnRlcnZhbCBpcyBvYnRhaW5lZCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBlcXVhdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwoU1VTUElUVlszOjBdICsgMC41KSAqIHBlcmlvZCBvZiBTUElfQ0xLIGNsb2NrIGN5Y2xlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8RXhhbXBsZToKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHgwIC4uLiAwLjUgU1BJX0NMSyBjbG9jayBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHgxIC4uLiAxLjUgU1BJX0NMSyBjbG9jayBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNVU1BJVFYgPSAweEUgLi4uIDE0LjUgU1BJX0NMSyBjbG9jayBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTVVNQSVRWID0gMHhGIC4uLiAxNS41IFNQSV9DTEsgY2xvY2sgY3ljbGUuCisgICAgICogfFsxNDoxMl0gfFRTTVNFTCAgICB8VHJhbnNtaXQgRGF0YSBNb2RlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIGRlc2NyaWJlcyBob3cgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGF0YSBpcyBzaGlmdGVkIGluIGFuZCBvdXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VFNNU0VMID0gMDAwYjogRnVsbC1kdXBsZXggU1BJLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRTTVNFTCA9IDEwMGI6IEhhbGYtZHVwbGV4IFNQSS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IENoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGlzIGJpdCBmaWVsZCB3aWxsIHByb2R1Y2UgdGhlIFRYUlNUIGFuZCBSWFJTVCB0byBjbGVhciB0aGUgVFgvUlggZGF0YSBidWZmZXIgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzI1OjE2XSB8U0xWVE9DTlQgIHxTbGF2ZSBNb2RlIFRpbWUtb3V0IFBlcmlvZCAoU2xhdmUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJbiBTbGF2ZSBtb2RlLCB0aGlzIGJpdCBmaWVsZCBpcyB1c2VkIGZvciBTbGF2ZSB0aW1lLW91dCBwZXJpb2QKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBpbmRpY2F0ZXMgaG93IG1hbnkgY2xvY2sgcGVyaW9kcyAoc2VsZWN0ZWQgYnkgVE1DTlRTUkMsIFVTUElfQlJHRU5bNV0pIGJldHdlZW4gdGhlIHR3byBlZGdlcyBvZiBpbnB1dCBTQ0xLIHdpbGwgYXNzZXJ0IHRoZSBTbGF2ZSB0aW1lLW91dCBldmVudAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgMHgwIGludG8gdGhpcyBiaXQgZmllbGQgd2lsbCBkaXNhYmxlIHRoZSBTbGF2ZSB0aW1lLW91dCBmdW5jdGlvbi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxFeGFtcGxlOiBBc3N1bWUgU0xWVE9DTlQgaXMgMHgwQSBhbmQgVE1DTlRTUkMgKFVTUElfQlJHRU5bNV0pIGlzIDEsIGl0IG1lYW5zIHRoZSB0aW1lLW91dCBldmVudCB3aWxsIG9jY3VyIGlmIHRoZSBzdGF0ZSBvZiBTUEkgYnVzIGNsb2NrIHBpbiBpcyBub3QgY2hhbmdlZCBtb3JlIHRoYW4gKDEwKzEpIHBlcmlvZHMgb2YgZkRJVl9DTEsuCisgICAgICogfFsyOF0gICAgfFRYVURSUE9MICB8VHJhbnNtaXQgVW5kZXItcnVuIERhdGEgUG9sYXJpdHkgKGZvciBTbGF2ZSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSB0cmFuc21pdHRpbmcgZGF0YSBsZXZlbCB3aGVuIG5vIGRhdGEgaXMgYXZhaWxhYmxlIGZvciB0cmFuc2ZlcnJpbmcuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBvdXRwdXQgZGF0YSBsZXZlbCBpcyAwIGlmIFRYIHVuZGVyLXJ1biBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBvdXRwdXQgZGF0YSBsZXZlbCBpcyAxIGlmIFRYIHVuZGVyLXJ1biBldmVudCBvY2N1cnMuCisgICAgICogfFszMV0gICAgfFBST1RFTiAgICB8U1BJIFByb3RvY29sIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU1BJIFByb3RvY29sIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTUEkgUHJvdG9jb2wgRW5hYmxlZC4KKyAgICAgKiBAdmFyIFVTUElfVDo6UFJPVElFTgorICAgICAqIE9mZnNldDogMHg2MCAgVVNDSSBQcm90b2NvbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1NJTkFJRU4gIHxTbGF2ZSBTZWxlY3QgSW5hY3RpdmUgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHNsYXZlIHNlbGVjdCBpbnRlcnJ1cHQgaWYgdGhlIHNsYXZlIHNlbGVjdCBjaGFuZ2VzIHRvIGluYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTbGF2ZSBzZWxlY3QgaW5hY3RpdmUgaW50ZXJydXB0IGdlbmVyYXRpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHNlbGVjdCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBFbmFibGVkLgorICAgICAqIHxbMV0gICAgIHxTU0FDVElFTiAgfFNsYXZlIFNlbGVjdCBBY3RpdmUgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHNsYXZlIHNlbGVjdCBpbnRlcnJ1cHQgaWYgdGhlIHNsYXZlIHNlbGVjdCBjaGFuZ2VzIHRvIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgc2VsZWN0IGFjdGl2ZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU2xhdmUgc2VsZWN0IGFjdGl2ZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBFbmFibGVkLgorICAgICAqIHxbMl0gICAgIHxTTFZUT0lFTiAgfFNsYXZlIFRpbWUtb3V0IEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNQSSBwcm90b2NvbCwgdGhpcyBiaXQgZW5hYmxlcyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gaW4gY2FzZSBvZiBhIFNsYXZlIHRpbWUtb3V0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgU2xhdmUgdGltZS1vdXQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgU2xhdmUgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFNMVkJFSUVOICB8U2xhdmUgTW9kZSBCaXQgQ291bnQgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgZGF0YSB0cmFuc2ZlciBpcyB0ZXJtaW5hdGVkIGJ5IHNsYXZlIHRpbWUtb3V0IG9yIHNsYXZlIHNlbGVjdCBpbmFjdGl2ZSBldmVudCBpbiBTbGF2ZSBtb2RlLCBzbyB0aGF0IHRoZSB0cmFuc21pdC9yZWNlaXZlIGRhdGEgYml0IGNvdW50IGRvZXMgbm90IG1hdGNoIHRoZSBzZXR0aW5nIG9mIERXSURUSCAoVVNQSV9MSU5FQ1RMWzExOjhdKQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEJpdCBjb3VudCBlcnJvciBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBTbGF2ZSBtb2RlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBTbGF2ZSBtb2RlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiBAdmFyIFVTUElfVDo6UFJPVFNUUworICAgICAqIE9mZnNldDogMHg2NCAgVVNDSSBQcm90b2NvbCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxUWFNUSUYgICAgfFRyYW5zbWl0IFN0YXJ0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IHN0YXJ0IGV2ZW50IGRvZXMgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBzdGFydCBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0ZXMgMSB0byB0aGlzIGJpdAorICAgICAqIHxbMl0gICAgIHxUWEVORElGICAgfFRyYW5zbWl0IEVuZCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBlbmQgZXZlbnQgZG9lcyBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IGVuZCBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0ZXMgMSB0byB0aGlzIGJpdAorICAgICAqIHxbM10gICAgIHxSWFNUSUYgICAgfFJlY2VpdmUgU3RhcnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBzdGFydCBldmVudCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBzdGFydCBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0ZXMgMSB0byB0aGlzIGJpdAorICAgICAqIHxbNF0gICAgIHxSWEVORElGICAgfFJlY2VpdmUgRW5kIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFJlY2VpdmUgZW5kIGV2ZW50IGRvZXMgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIGVuZCBldmVudCBvY2N1cnMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0ZXMgMSB0byB0aGlzIGJpdAorICAgICAqIHxbNV0gICAgIHxTTFZUT0lGICAgfFNsYXZlIFRpbWUtb3V0IEludGVycnVwdCBGbGFnIChmb3IgU2xhdmUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgdGltZS1vdXQgZXZlbnQgZG9lcyBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNsYXZlIHRpbWUtb3V0IGV2ZW50IG9jY3Vycy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRlcyAxIHRvIHRoaXMgYml0CisgICAgICogfFs2XSAgICAgfFNMVkJFSUYgICB8U2xhdmUgQml0IENvdW50IEVycm9yIEludGVycnVwdCBGbGFnIChmb3IgU2xhdmUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgYml0IGNvdW50IGVycm9yIGV2ZW50IGRvZXMgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSBiaXQgY291bnQgZXJyb3IgZXZlbnQgb2NjdXJzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGVzIDEgdG8gdGhpcyBiaXQuCisgICAgICogfFs4XSAgICAgfFNTSU5BSUYgICB8U2xhdmUgU2VsZWN0IEluYWN0aXZlIEludGVycnVwdCBGbGFnIChmb3IgU2xhdmUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgaW50ZXJuYWwgc2xhdmUgc2VsZWN0IHNpZ25hbCBoYXMgY2hhbmdlZCB0byBpbmFjdGl2ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGVzIDEgdG8gdGhpcyBiaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHNsYXZlIHNlbGVjdCBzaWduYWwgaGFzIG5vdCBjaGFuZ2VkIHRvIGluYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc2xhdmUgc2VsZWN0IHNpZ25hbCBoYXMgY2hhbmdlZCB0byBpbmFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgaW50ZXJuYWwgc2xhdmUgc2VsZWN0IHNpZ25hbCBpcyBhY3RpdmUgaGlnaC4KKyAgICAgKiB8WzldICAgICB8U1NBQ1RJRiAgIHxTbGF2ZSBTZWxlY3QgQWN0aXZlIEludGVycnVwdCBGbGFnIChmb3IgU2xhdmUgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgaW50ZXJuYWwgc2xhdmUgc2VsZWN0IHNpZ25hbCBoYXMgY2hhbmdlZCB0byBhY3RpdmUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRlcyBvbmUgdG8gdGhpcyBiaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHNsYXZlIHNlbGVjdCBzaWduYWwgaGFzIG5vdCBjaGFuZ2VkIHRvIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHNsYXZlIHNlbGVjdCBzaWduYWwgaGFzIGNoYW5nZWQgdG8gYWN0aXZlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoZSBpbnRlcm5hbCBzbGF2ZSBzZWxlY3Qgc2lnbmFsIGlzIGFjdGl2ZSBoaWdoLgorICAgICAqIHxbMTZdICAgIHxTU0xJTkUgICAgfFNsYXZlIFNlbGVjdCBMaW5lIEJ1cyBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBTbGF2ZSBtb2RlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SXQgdXNlZCB0byBtb25pdG9yIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaW5wdXQgc2xhdmUgc2VsZWN0IHNpZ25hbCBvbiB0aGUgYnVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgc2xhdmUgc2VsZWN0IGxpbmUgc3RhdHVzIGlzIDAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBzbGF2ZSBzZWxlY3QgbGluZSBzdGF0dXMgaXMgMS4KKyAgICAgKiB8WzE3XSAgICB8QlVTWSAgICAgIHxCdXN5IFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTUEkgaXMgaW4gaWRsZSBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU1BJIGlzIGluIGJ1c3kgc3RhdGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGZvbGxvd2luZyBsaXN0aW5nIGFyZSB0aGUgYnVzIGJ1c3kgY29uZGl0aW9uczoKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxhLiBVU1BJX1BST1RDVExbMzFdID0gMSBhbmQgdGhlIFRYRU1QVFkgPSAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfGIuIEZvciBTUEkgTWFzdGVyIG1vZGUsIHRoZSBUWEVNUFRZID0gMSBidXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgbm90IGZpbmlzaGVkIHlldC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxjLiBGb3IgU1BJIFNsYXZlIG1vZGUsIHRoZSBVU1BJX1BST1RDVExbMzFdID0gMSBhbmQgdGhlcmUgaXMgc2VyaWFsIGNsb2NrIGlucHV0IGludG8gdGhlIFNQSSBjb3JlIGxvZ2ljIHdoZW4gc2xhdmUgc2VsZWN0IGlzIGFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxkLiBGb3IgU1BJIFNsYXZlIG1vZGUsIHRoZSBVU1BJX1BST1RDVExbMzFdID0gMSBhbmQgdGhlIHRyYW5zbWl0IGJ1ZmZlciBvciB0cmFuc21pdCBzaGlmdCByZWdpc3RlciBpcyBub3QgZW1wdHkgZXZlbiBpZiB0aGUgc2xhdmUgc2VsZWN0IGlzIGluYWN0aXZlLgorICAgICAqIHxbMThdICAgIHxTTFZVRFIgICAgfFNsYXZlIE1vZGUgVHJhbnNtaXQgVW5kZXItcnVuIFN0YXR1cyAoUmVhZCBPbmx5KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfEluIFNsYXZlIG1vZGUsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSB0cmFuc21pdCBkYXRhIGluIGJ1ZmZlciB3aGlsZSB0cmFuc21pdCBkYXRhIHNoaWZ0IG91dCBjYXVzZWQgYnkgaW5wdXQgc2VyaWFsIGJ1cyBjbG9jaywgdGhpcyBzdGF0dXMgZmxhZyB3aWxsIGJlIHNldCB0byAxCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgc2hpZnQtb3V0IGRhdGEgb2Ygd29yZCB0cmFuc21pc3Npb24gaXMgc3dpdGNoZWQgdG8gVFhVRFJQT0wgKFVTUElfUFJPVENUTFsyOF0pIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2xhdmUgdHJhbnNtaXQgdW5kZXItcnVuIGV2ZW50IGRvZXMgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTbGF2ZSB0cmFuc21pdCB1bmRlci1ydW4gZXZlbnQgb2NjdXJzLgorICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDBdIFVTQ0kgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IElOVEVOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA0XSBVU0NJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCUkdFTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwOF0gVVNDSSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTBbMV07CisgICAgX19JTyB1aW50MzJfdCBEQVRJTjA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAxMF0gVVNDSSBJbnB1dCBEYXRhIFNpZ25hbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTFbM107CisgICAgX19JTyB1aW50MzJfdCBDVExJTjA7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyMF0gVVNDSSBJbnB1dCBDb250cm9sIFNpZ25hbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTJbMV07CisgICAgX19JTyB1aW50MzJfdCBDTEtJTjsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAyOF0gVVNDSSBJbnB1dCBDbG9jayBTaWduYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgTElORUNUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwMmNdIFVTQ0kgTGluZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX08gIHVpbnQzMl90IFRYREFUOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDMwXSBVU0NJIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSWERBVDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzNF0gVVNDSSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlVGQ1RMOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMzhdIFVTQ0kgVHJhbnNtaXQvUmVjZWl2ZSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJVRlNUUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDNjXSBVU0NJIFRyYW5zbWl0L1JlY2VpdmUgQnVmZmVyIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQRE1BQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA0MF0gVVNDSSBQRE1BIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSSAgdWludDMyX3QgUkVTRVJWRTNbNF07CisgICAgX19JTyB1aW50MzJfdCBXS0NUTDsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1NF0gVVNDSSBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgV0tTVFM7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwNThdIFVTQ0kgV2FrZS11cCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBST1RDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDVjXSBVU0NJIFByb3RvY29sIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQUk9USUVOOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA2MF0gVVNDSSBQcm90b2NvbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFJPVFNUUzsgICAgICAgICAgICAgICAvKiE8IFsweDAwNjRdIFVTQ0kgUHJvdG9jb2wgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBVU1BJX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFVTUElfQ09OU1QgVVNQSSBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBVU1BJIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgVVNQSV9DVExfRlVOTU9ERV9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6Q1RMOiBGVU5NT0RFIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVTUElfQ1RMX0ZVTk1PREVfTXNrICAgICAgICAgICAgICgweDd1bCA8PCBVU1BJX0NUTF9GVU5NT0RFX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkNUTDogRlVOTU9ERSBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfSU5URU5fVFhTVElFTl9Qb3MgICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OklOVEVOOiBUWFNUSUVOIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU1BJX0lOVEVOX1RYU1RJRU5fTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9JTlRFTl9UWFNUSUVOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpJTlRFTjogVFhTVElFTiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0lOVEVOX1RYRU5ESUVOX1BvcyAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpJTlRFTjogVFhFTkRJRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9JTlRFTl9UWEVORElFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfSU5URU5fVFhFTkRJRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6SU5URU46IFRYRU5ESUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9JTlRFTl9SWFNUSUVOX1BvcyAgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6SU5URU46IFJYU1RJRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTUElfSU5URU5fUlhTVElFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0lOVEVOX1JYU1RJRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OklOVEVOOiBSWFNUSUVOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfSU5URU5fUlhFTkRJRU5fUG9zICAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OklOVEVOOiBSWEVORElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX0lOVEVOX1JYRU5ESUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9JTlRFTl9SWEVORElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpJTlRFTjogUlhFTkRJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JSR0VOX1JDTEtTRUxfUG9zICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCUkdFTjogUkNMS1NFTCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CUkdFTl9SQ0xLU0VMX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlJHRU5fUkNMS1NFTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlJHRU46IFJDTEtTRUwgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CUkdFTl9QVENMS1NFTF9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlJHRU46IFBUQ0xLU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfQlJHRU5fUFRDTEtTRUxfTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JSR0VOX1BUQ0xLU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJSR0VOOiBQVENMS1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlJHRU5fU1BDTEtTRUxfUG9zICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJSR0VOOiBTUENMS1NFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX0JSR0VOX1NQQ0xLU0VMX01zayAgICAgICAgICAoMHgzdWwgPDwgVVNQSV9CUkdFTl9TUENMS1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCUkdFTjogU1BDTEtTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JSR0VOX1RNQ05URU5fUG9zICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCUkdFTjogVE1DTlRFTiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CUkdFTl9UTUNOVEVOX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlJHRU5fVE1DTlRFTl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlJHRU46IFRNQ05URU4gTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CUkdFTl9UTUNOVFNSQ19Qb3MgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlJHRU46IFRNQ05UU1JDIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfQlJHRU5fVE1DTlRTUkNfTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JSR0VOX1RNQ05UU1JDX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJSR0VOOiBUTUNOVFNSQyBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlJHRU5fQ0xLRElWX1BvcyAgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJSR0VOOiBDTEtESVYgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU1BJX0JSR0VOX0NMS0RJVl9Nc2sgICAgICAgICAgICAoMHgzZmZ1bCA8PCBVU1BJX0JSR0VOX0NMS0RJVl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCUkdFTjogQ0xLRElWIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0RBVElOMF9TWU5DU0VMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpEQVRJTjA6IFNZTkNTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9EQVRJTjBfU1lOQ1NFTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfREFUSU4wX1NZTkNTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6REFUSU4wOiBTWU5DU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9EQVRJTjBfSU5JTlZfUG9zICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6REFUSU4wOiBJTklOViBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTUElfREFUSU4wX0lOSU5WX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0RBVElOMF9JTklOVl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkRBVElOMDogSU5JTlYgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQ1RMSU4wX1NZTkNTRUxfUG9zICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkNUTElOMDogU1lOQ1NFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX0NUTElOMF9TWU5DU0VMX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9DVExJTjBfU1lOQ1NFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpDVExJTjA6IFNZTkNTRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0NUTElOMF9JTklOVl9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpDVExJTjA6IElOSU5WIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9DVExJTjBfSU5JTlZfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQ1RMSU4wX0lOSU5WX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6Q1RMSU4wOiBJTklOViBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9DTEtJTl9TWU5DU0VMX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6Q0xLSU46IFNZTkNTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTUElfQ0xLSU5fU1lOQ1NFTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0NMS0lOX1NZTkNTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkNMS0lOOiBTWU5DU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfTElORUNUTF9MU0JfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkxJTkVDVEw6IExTQiBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVU1BJX0xJTkVDVExfTFNCX01zayAgICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9MSU5FQ1RMX0xTQl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpMSU5FQ1RMOiBMU0IgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0xJTkVDVExfREFUT0lOVl9Qb3MgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpMSU5FQ1RMOiBEQVRPSU5WIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNQSV9MSU5FQ1RMX0RBVE9JTlZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTUElfTElORUNUTF9EQVRPSU5WX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6TElORUNUTDogREFUT0lOViBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9MSU5FQ1RMX0NUTE9JTlZfUG9zICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6TElORUNUTDogQ1RMT0lOViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTUElfTElORUNUTF9DVExPSU5WX01zayAgICAgICAgICgweDF1bCA8PCBVU1BJX0xJTkVDVExfQ1RMT0lOVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkxJTkVDVEw6IENUTE9JTlYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfTElORUNUTF9EV0lEVEhfUG9zICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkxJTkVDVEw6IERXSURUSCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX0xJTkVDVExfRFdJRFRIX01zayAgICAgICAgICAoMHhmdWwgPDwgVVNQSV9MSU5FQ1RMX0RXSURUSF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpMSU5FQ1RMOiBEV0lEVEggTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1RYREFUX1RYREFUX1BvcyAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpUWERBVDogVFhEQVQgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9UWERBVF9UWERBVF9Nc2sgICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFVTUElfVFhEQVRfVFhEQVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6VFhEQVQ6IFRYREFUIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9UWERBVF9QT1JURElSX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6VFhEQVQ6IFBPUlRESVIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTUElfVFhEQVRfUE9SVERJUl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU1BJX1RYREFUX1BPUlRESVJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlRYREFUOiBQT1JURElSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUlhEQVRfUlhEQVRfUG9zICAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlJYREFUOiBSWERBVCBQb3NpdGlvbiAgICAgICAgICAqLworI2RlZmluZSBVU1BJX1JYREFUX1JYREFUX01zayAgICAgICAgICAgICAoMHhmZmZmdWwgPDwgVVNQSV9SWERBVF9SWERBVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpSWERBVDogUlhEQVQgTWFzayAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JVRkNUTF9UWFVEUklFTl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZDVEw6IFRYVURSSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CVUZDVExfVFhVRFJJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlVGQ1RMX1RYVURSSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGQ1RMOiBUWFVEUklFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CVUZDVExfVFhDTFJfUG9zICAgICAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGQ1RMOiBUWENMUiBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTUElfQlVGQ1RMX1RYQ0xSX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JVRkNUTF9UWENMUl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRkNUTDogVFhDTFIgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlVGQ1RMX1JYT1ZJRU5fUG9zICAgICAgICAgICgxNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRkNUTDogUlhPVklFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX0JVRkNUTF9SWE9WSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CVUZDVExfUlhPVklFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZDVEw6IFJYT1ZJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JVRkNUTF9SWENMUl9Qb3MgICAgICAgICAgICAoMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZDVEw6IFJYQ0xSIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CVUZDVExfUlhDTFJfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlVGQ1RMX1JYQ0xSX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGQ1RMOiBSWENMUiBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CVUZDVExfVFhSU1RfUG9zICAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGQ1RMOiBUWFJTVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTUElfQlVGQ1RMX1RYUlNUX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JVRkNUTF9UWFJTVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRkNUTDogVFhSU1QgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlVGQ1RMX1JYUlNUX1BvcyAgICAgICAgICAgICgxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRkNUTDogUlhSU1QgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVU1BJX0JVRkNUTF9SWFJTVF9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CVUZDVExfUlhSU1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZDVEw6IFJYUlNUIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JVRlNUU19SWEVNUFRZX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZTVFM6IFJYRU1QVFkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CVUZTVFNfUlhFTVBUWV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlVGU1RTX1JYRU1QVFlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGU1RTOiBSWEVNUFRZIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CVUZTVFNfUlhGVUxMX1BvcyAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGU1RTOiBSWEZVTEwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTUElfQlVGU1RTX1JYRlVMTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JVRlNUU19SWEZVTExfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRlNUUzogUlhGVUxMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlVGU1RTX1JYT1ZJRl9Qb3MgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRlNUUzogUlhPVklGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU1BJX0JVRlNUU19SWE9WSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CVUZTVFNfUlhPVklGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZTVFM6IFJYT1ZJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX0JVRlNUU19UWEVNUFRZX1BvcyAgICAgICAgICAoOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZTVFM6IFRYRU1QVFkgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9CVUZTVFNfVFhFTVBUWV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfQlVGU1RTX1RYRU1QVFlfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGU1RTOiBUWEVNUFRZIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9CVUZTVFNfVFhGVUxMX1BvcyAgICAgICAgICAgKDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6QlVGU1RTOiBUWEZVTEwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVTUElfQlVGU1RTX1RYRlVMTF9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVU1BJX0JVRlNUU19UWEZVTExfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRlNUUzogVFhGVUxMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfQlVGU1RTX1RYVURSSUZfUG9zICAgICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OkJVRlNUUzogVFhVRFJJRiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX0JVRlNUU19UWFVEUklGX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9CVUZTVFNfVFhVRFJJRl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpCVUZTVFM6IFRYVURSSUYgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BETUFDVExfUERNQVJTVF9Qb3MgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQRE1BQ1RMOiBQRE1BUlNUIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QRE1BQ1RMX1BETUFSU1RfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTUElfUERNQUNUTF9QRE1BUlNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UERNQUNUTDogUERNQVJTVCBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QRE1BQ1RMX1RYUERNQUVOX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UERNQUNUTDogVFhQRE1BRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgICAgICAgICgweDF1bCA8PCBVU1BJX1BETUFDVExfVFhQRE1BRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBETUFDVEw6IFRYUERNQUVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUERNQUNUTF9SWFBETUFFTl9Qb3MgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBETUFDVEw6IFJYUERNQUVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrICAgICAgICAoMHgxdWwgPDwgVVNQSV9QRE1BQ1RMX1JYUERNQUVOX1BvcykgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQRE1BQ1RMOiBSWFBETUFFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BETUFDVExfUERNQUVOX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQRE1BQ1RMOiBQRE1BRU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QRE1BQ1RMX1BETUFFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfUERNQUNUTF9QRE1BRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UERNQUNUTDogUERNQUVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9XS0NUTF9XS0VOX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6V0tDVEw6IFdLRU4gUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVTUElfV0tDVExfV0tFTl9Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX1dLQ1RMX1dLRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OldLQ1RMOiBXS0VOIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfV0tDVExfV0tBRERSRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OldLQ1RMOiBXS0FERFJFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX1dLQ1RMX1dLQUREUkVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9XS0NUTF9XS0FERFJFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpXS0NUTDogV0tBRERSRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1dLQ1RMX1BEQk9QVF9Qb3MgICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpXS0NUTDogUERCT1BUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVNQSV9XS0NUTF9QREJPUFRfTXNrICAgICAgICAgICAgKDB4MXVsIDw8IFVTUElfV0tDVExfUERCT1BUX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6V0tDVEw6IFBEQk9QVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9XS1NUU19XS0ZfUG9zICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6V0tTVFM6IFdLRiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFVTUElfV0tTVFNfV0tGX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX1dLU1RTX1dLRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OldLU1RTOiBXS0YgTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVENUTF9TTEFWRV9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFNMQVZFIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVU1BJX1BST1RDVExfU0xBVkVfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UQ1RMX1NMQVZFX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBTTEFWRSBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RDVExfU0xWM1dJUkVfUG9zICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBTTFYzV0lSRSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1NMVjNXSVJFX01zayAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVENUTF9TTFYzV0lSRV9Qb3MpICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogU0xWM1dJUkUgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1NTX1BvcyAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogU1MgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFVTUElfUFJPVENUTF9TU19Nc2sgICAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RDVExfU1NfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFNTIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVENUTF9BVVRPU1NfUG9zICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IEFVVE9TUyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX1BST1RDVExfQVVUT1NTX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UQ1RMX0FVVE9TU19Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBBVVRPU1MgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RDVExfU0NMS01PREVfUG9zICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBTQ0xLTU9ERSBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1NDTEtNT0RFX01zayAgICAgICAgKDB4M3VsIDw8IFVTUElfUFJPVENUTF9TQ0xLTU9ERV9Qb3MpICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogU0NMS01PREUgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1NVU1BJVFZfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogU1VTUElUViBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTUElfUFJPVENUTF9TVVNQSVRWX01zayAgICAgICAgICgweGZ1bCA8PCBVU1BJX1BST1RDVExfU1VTUElUVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFNVU1BJVFYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVENUTF9UU01TRUxfUG9zICAgICAgICAgICgxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFRTTVNFTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX1BST1RDVExfVFNNU0VMX01zayAgICAgICAgICAoMHg3dWwgPDwgVVNQSV9QUk9UQ1RMX1RTTVNFTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBUU01TRUwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RDVExfU0xWVE9DTlRfUG9zICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBTTFZUT0NOVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1NMVlRPQ05UX01zayAgICAgICAgKDB4M2ZmdWwgPDwgVVNQSV9QUk9UQ1RMX1NMVlRPQ05UX1BvcykgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogU0xWVE9DTlQgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UQ1RMX1RYVURSUE9MX1BvcyAgICAgICAgKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVENUTDogVFhVRFJQT0wgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTUElfUFJPVENUTF9UWFVEUlBPTF9Nc2sgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RDVExfVFhVRFJQT0xfUG9zKSAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFRYVURSUE9MIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVENUTF9QUk9URU5fUG9zICAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RDVEw6IFBST1RFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX1BST1RDVExfUFJPVEVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UQ1RMX1BST1RFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UQ1RMOiBQUk9URU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RJRU5fU1NJTkFJRU5fUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9USUVOOiBTU0lOQUlFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9USUVOX1NTSU5BSUVOX01zayAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVElFTl9TU0lOQUlFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVElFTjogU1NJTkFJRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9USUVOX1NTQUNUSUVOX1BvcyAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVElFTjogU1NBQ1RJRU4gUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVTUElfUFJPVElFTl9TU0FDVElFTl9Nc2sgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RJRU5fU1NBQ1RJRU5fUG9zKSAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RJRU46IFNTQUNUSUVOIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVElFTl9TTFZUT0lFTl9Qb3MgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RJRU46IFNMVlRPSUVOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVU1BJX1BST1RJRU5fU0xWVE9JRU5fTXNrICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9USUVOX1NMVlRPSUVOX1BvcykgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9USUVOOiBTTFZUT0lFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RJRU5fU0xWQkVJRU5fUG9zICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9USUVOOiBTTFZCRUlFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9USUVOX1NMVkJFSUVOX01zayAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVElFTl9TTFZCRUlFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVElFTjogU0xWQkVJRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1RYU1RJRl9Qb3MgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogVFhTVElGIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVTUElfUFJPVFNUU19UWFNUSUZfTXNrICAgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RTVFNfVFhTVElGX1BvcykgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFRYU1RJRiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVFNUU19UWEVORElGX1BvcyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFRYRU5ESUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU1BJX1BST1RTVFNfVFhFTkRJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UU1RTX1RYRU5ESUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBUWEVORElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RTVFNfUlhTVElGX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBSWFNUSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1JYU1RJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVFNUU19SWFNUSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogUlhTVElGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1JYRU5ESUZfUG9zICAgICAgICAgKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogUlhFTkRJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTUElfUFJPVFNUU19SWEVORElGX01zayAgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RTVFNfUlhFTkRJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFJYRU5ESUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVFNUU19TTFZUT0lGX1BvcyAgICAgICAgICg1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFNMVlRPSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU1BJX1BST1RTVFNfU0xWVE9JRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UU1RTX1NMVlRPSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBTTFZUT0lGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RTVFNfU0xWQkVJRl9Qb3MgICAgICAgICAoNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBTTFZCRUlGIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1NMVkJFSUZfTXNrICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVFNUU19TTFZCRUlGX1BvcykgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogU0xWQkVJRiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1NTSU5BSUZfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogU1NJTkFJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVTUElfUFJPVFNUU19TU0lOQUlGX01zayAgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RTVFNfU1NJTkFJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFNTSU5BSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVFNUU19TU0FDVElGX1BvcyAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFNTQUNUSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVU1BJX1BST1RTVFNfU1NBQ1RJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UU1RTX1NTQUNUSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBTU0FDVElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVU1BJX1BST1RTVFNfU1NMSU5FX1BvcyAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBTU0xJTkUgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVNQSV9QUk9UU1RTX1NTTElORV9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVTUElfUFJPVFNUU19TU0xJTkVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogU1NMSU5FIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVNQSV9QUk9UU1RTX0JVU1lfUG9zICAgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTUElfVDo6UFJPVFNUUzogQlVTWSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVTUElfUFJPVFNUU19CVVNZX01zayAgICAgICAgICAgICgweDF1bCA8PCBVU1BJX1BST1RTVFNfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IEJVU1kgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVTUElfUFJPVFNUU19TTFZVRFJfUG9zICAgICAgICAgICgxOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU1BJX1Q6OlBST1RTVFM6IFNMVlVEUiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVU1BJX1BST1RTVFNfU0xWVURSX01zayAgICAgICAgICAoMHgxdWwgPDwgVVNQSV9QUk9UU1RTX1NMVlVEUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVNQSV9UOjpQUk9UU1RTOiBTTFZVRFIgTWFzayAgICAgICAgICAgKi8KKworLyoqQH0qLyAvKiBVU1BJX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBVU1BJIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisKKyNlbmRpZiAvKiBfX1VTUElfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3V1YXJ0X3JlZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3V1YXJ0X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NDgzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvdXVhcnRfcmVnLmgKQEAgLTAsMCArMSw2NjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1dWFydF9yZWcuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgVVVBUlQgcmVnaXN0ZXIgZGVmaW5pdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVVVBUlRfUkVHX0hfXworI2RlZmluZSBfX1VVQVJUX1JFR19IX18KKworLyoqIEBhZGR0b2dyb3VwIFJFR0lTVEVSIENvbnRyb2wgUmVnaXN0ZXIKKworICBAeworCisqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVQVJUIE1vZGUgb2YgVVNDSSBDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgICAgQGFkZHRvZ3JvdXAgVVVBUlQgVUFSVCBNb2RlIG9mIFVTQ0kgQ29udHJvbGxlcihVVUFSVCkKKyAgICBNZW1vcnkgTWFwcGVkIFN0cnVjdHVyZSBmb3IgVVVBUlQgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBVVUFSVF9UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDAgIFVTQ0kgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsyOjBdICAgfEZVTk1PREUgICB8RnVuY3Rpb24gTW9kZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGZpZWxkIHNlbGVjdHMgdGhlIHByb3RvY29sIGZvciB0aGlzIFVTQ0kgY29udHJvbGxlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZWxlY3RpbmcgYSBwcm90b2NvbCB0aGF0IGlzIG5vdCBhdmFpbGFibGUgb3IgYSByZXNlcnZlZCBjb21iaW5hdGlvbiBkaXNhYmxlcyB0aGUgVVNDSS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIHN3aXRjaGluZyBiZXR3ZWVuIHR3byBwcm90b2NvbHMsIHRoZSBVU0NJIGhhcyB0byBiZSBkaXNhYmxlZCBiZWZvcmUgc2VsZWN0aW5nIGEgbmV3IHByb3RvY29sLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNpbXVsdGFuZW91c2x5LCB0aGUgVVNDSSB3aWxsIGJlIHJlc2V0IHdoZW4gdXNlciB3cml0ZSAwMDAgdG8gRlVOTU9ERS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAgPSBUaGUgVVNDSSBpcyBkaXNhYmxlZC4gQWxsIHByb3RvY29sIHJlbGF0ZWQgc3RhdGUgbWFjaGluZXMgYXJlIHNldCB0byBpZGxlIHN0YXRlLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMSA9IFRoZSBTUEkgcHJvdG9jb2wgaXMgc2VsZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gVGhlIFVBUlQgcHJvdG9jb2wgaXMgc2VsZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gVGhlIEkyQyBwcm90b2NvbCBpcyBzZWxlY3RlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxPdGhlcnMgPSBSZXNlcnZlZC4KKyAgICAgKiBAdmFyIFVVQVJUX1Q6OklOVEVOCisgICAgICogT2Zmc2V0OiAweDA0ICBVU0NJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxUWFNUSUVOICAgfFRyYW5zbWl0IFN0YXJ0IEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gaW4gY2FzZSBvZiBhIHRyYW5zbWl0IHN0YXJ0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdHJhbnNtaXQgc3RhcnQgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJhbnNtaXQgc3RhcnQgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFRYRU5ESUVOICB8VHJhbnNtaXQgRW5kIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gaW4gY2FzZSBvZiBhIHRyYW5zbWl0IGZpbmlzaCBldmVudC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHRyYW5zbWl0IGZpbmlzaCBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB0cmFuc21pdCBmaW5pc2ggaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogfFszXSAgICAgfFJYU1RJRU4gICB8UmVjZWl2ZSBTdGFydCBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGVuYWJsZXMgdGhlIGludGVycnVwdCBnZW5lcmF0aW9uIGluIGNhc2Ugb2YgYSByZWNlaXZlIHN0YXJ0IGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVjZWl2ZSBzdGFydCBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWNlaXZlIHN0YXJ0IGludGVycnVwdCBpcyBlbmFibGVkLgorICAgICAqIHxbNF0gICAgIHxSWEVORElFTiAgfFJlY2VpdmUgRW5kIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlcyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gaW4gY2FzZSBvZiBhIHJlY2VpdmUgZmluaXNoIGV2ZW50LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgcmVjZWl2ZSBlbmQgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVjZWl2ZSBlbmQgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgICAgICogQHZhciBVVUFSVF9UOjpCUkdFTgorICAgICAqIE9mZnNldDogMHgwOCAgVVNDSSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UkNMS1NFTCAgIHxSZWZlcmVuY2UgQ2xvY2sgU291cmNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHNlbGVjdHMgdGhlIHNvdXJjZSBzaWduYWwgb2YgcmVmZXJlbmNlIGNsb2NrIChmUkVGX0NMSykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFBlcmlwaGVyYWwgZGV2aWNlIGNsb2NrIGZQQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNlcnZlZC4KKyAgICAgKiB8WzFdICAgICB8UFRDTEtTRUwgIHxQcm90b2NvbCBDbG9jayBTb3VyY2UgU2VsZWN0aW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgc2VsZWN0cyB0aGUgc291cmNlIHNpZ25hbCBvZiBwcm90b2NvbCBjbG9jayAoZlBST1RfQ0xLKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVmZXJlbmNlIGNsb2NrIGZSRUZfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBmUkVGX0NMSzIgKGl0cyBmcmVxdWVuY3kgaXMgaGFsZiBvZiBmUkVGX0NMSykuCisgICAgICogfFszOjJdICAgfFNQQ0xLU0VMICB8U2FtcGxlIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCB1c2VkIGZvciB0aGUgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBvZiBhIHNhbXBsZSBjbG9jayAoZlNBTVBfQ0xLKSBmb3IgdGhlIHByb3RvY29sIHByb2Nlc3Nvci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IGZTQU1QX0NMSyBmcmVxdWVuY3kgaXMgZkRJVl9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBmU0FNUF9DTEsgZnJlcXVlbmN5IGlzIGZyb20gZlBST1RfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwID0gZlNBTVBfQ0xLIGZyZXF1ZW5jeSBpcyBmcm9tIGZTQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gZlNBTVBfQ0xLIGZyZXF1ZW5jeSBpcyBmcm9tIGZSRUZfQ0xLLgorICAgICAqIHxbNF0gICAgIHxUTUNOVEVOICAgfFRpbWluZyBNZWFzdXJlbWVudCBDb3VudGVyIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBlbmFibGVzIHRoZSAxMC1iaXQgdGltaW5nIG1lYXN1cmVtZW50IGNvdW50ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRpbWluZyBtZWFzdXJlbWVudCBjb3VudGVyIGlzIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaW1pbmcgbWVhc3VyZW1lbnQgY291bnRlciBpcyBFbmFibGVkLgorICAgICAqIHxbNV0gICAgIHxUTUNOVFNSQyAgfFRpbWluZyBNZWFzdXJlbWVudCBDb3VudGVyIENsb2NrIFNvdXJjZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGltaW5nIG1lYXN1cmVtZW50IGNvdW50ZXIgd2l0aCBmUFJPVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRpbWluZyBtZWFzdXJlbWVudCBjb3VudGVyIHdpdGggZkRJVl9DTEsuCisgICAgICogfFs5OjhdICAgfFBEU0NOVCAgICB8UHJlLWRpdmlkZXIgZm9yIFNhbXBsZSBDb3VudGVyCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZmllbGQgZGVmaW5lcyB0aGUgZGl2aWRlIHJhdGlvIG9mIHRoZSBjbG9jayBkaXZpc2lvbiBmcm9tIHNhbXBsZSBjbG9jayBmU0FNUF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRpdmlkZWQgZnJlcXVlbmN5IGZQRFNfQ05UID0gZlNBTVBfQ0xLIC8gKFBEU0NOVCsxKS4KKyAgICAgKiB8WzE0OjEwXSB8RFNDTlQgICAgIHxEZW5vbWluYXRvciBmb3IgU2FtcGxlIENvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBkZWZpbmVzIHRoZSBkaXZpZGUgcmF0aW8gb2YgdGhlIHNhbXBsZSBjbG9jayBmU0FNUF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRpdmlkZWQgZnJlcXVlbmN5IGZEU19DTlQgPSBmUERTX0NOVCAvIChEU0NOVCsxKS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGUgbWF4aW11bSB2YWx1ZSBvZiBEU0NOVCBpcyAweEYgb24gVUFSVCBtb2RlIGFuZCBzdWdnZXN0IHRvIHNldCBvdmVyIDQgdG8gY29uZmlybSB0aGUgcmVjZWl2ZXIgZGF0YSBpcyBzYW1wbGVkIGluIHJpZ2h0IHZhbHVlLgorICAgICAqIHxbMjU6MTZdIHxDTEtESVYgICAgfENsb2NrIERpdmlkZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBkZWZpbmVzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSBwcm90b2NvbCBjbG9jayBmcmVxdWVuY3kgZlBST1RfQ0xLIGFuZCB0aGUgY2xvY2sgZGl2aWRlciBmcmVxdWVuY3kgZkRJVl9DTEsgKGZESVZfQ0xLID0gZlBST1RfQ0xLIC8gKENMS0RJVisxKSApLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFVBUlQgZnVuY3Rpb24sIGl0IGNhbiBiZSB1cGRhdGVkIGJ5IGhhcmR3YXJlIGluIHRoZSA0dGggZmFsbGluZyBlZGdlIG9mIHRoZSBpbnB1dCBkYXRhIDB4NTUgd2hlbiB0aGUgYXV0byBiYXVkIHJhdGUgZnVuY3Rpb24gKEFCUkVOKFVVQVJUX1BST1RDVExbNl0pKSBpcyBlbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSByZXZpc2VkIHZhbHVlIGlzIHRoZSBhdmVyYWdlIGJpdCB0aW1lIGJldHdlZW4gYml0IDUgYW5kIGJpdCA2LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSB1c2VyIGNhbiB1c2UgcmV2aXNlZCBDTEtESVYgYW5kIG5ldyBCUkRFVElUViAoVVVBUlRfUFJPVENUTFsyNDoxNl0pIHRvIGNhbGN1bGF0ZSB0aGUgcHJlY2lzZSBiYXVkIHJhdGUuCisgICAgICogQHZhciBVVUFSVF9UOjpEQVRJTjAKKyAgICAgKiBPZmZzZXQ6IDB4MTAgIFVTQ0kgSW5wdXQgRGF0YSBTaWduYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1lOQ1NFTCAgIHxJbnB1dCBTaWduYWwgU3luY2hyb25pemF0aW9uIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IHNlbGVjdHMgaWYgdGhlIHVuLXN5bmNocm9uaXplZCBpbnB1dCBzaWduYWwgKHdpdGggb3B0aW9uYWxseSBpbnZlcnRlZCkgb3IgdGhlIHN5bmNocm9uaXplZCAoYW5kIG9wdGlvbmFsbHkgZmlsdGVyZWQpIHNpZ25hbCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgc2lnbmFsIGNhbiBiZSB0YWtlbiBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHN5bmNocm9uaXplZCBzaWduYWwgY2FuIGJlIHRha2VuIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHxbMl0gICAgIHxJTklOViAgICAgfElucHV0IFNpZ25hbCBJbnZlcnNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIGludmVydGVyIGVuYWJsZSBvZiB0aGUgaW5wdXQgYXN5bmNocm9ub3VzIHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHVuLXN5bmNocm9uaXplZCBpbnB1dCBzaWduYWwgd2lsbCBub3QgYmUgaW52ZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsIHdpbGwgYmUgaW52ZXJ0ZWQuCisgICAgICogfFs0OjNdICAgfEVER0VERVQgICB8SW5wdXQgU2lnbmFsIEVkZ2UgRGV0ZWN0aW9uIE1vZGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBzZWxlY3RzIHdoaWNoIGVkZ2UgYWN0aXZlcyB0aGUgdHJpZ2dlciBldmVudCBvZiBpbnB1dCBkYXRhIHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMCA9IFRoZSB0cmlnZ2VyIGV2ZW50IGFjdGl2YXRpb24gaXMgZGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEgPSBBIHJpc2luZyBlZGdlIGFjdGl2YXRlcyB0aGUgdHJpZ2dlciBldmVudCBvZiBpbnB1dCBkYXRhIHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IEEgZmFsbGluZyBlZGdlIGFjdGl2YXRlcyB0aGUgdHJpZ2dlciBldmVudCBvZiBpbnB1dCBkYXRhIHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMSA9IEJvdGggZWRnZXMgYWN0aXZhdGUgdGhlIHRyaWdnZXIgZXZlbnQgb2YgaW5wdXQgZGF0YSBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSW4gVUFSVCBmdW5jdGlvbiBtb2RlLCBpdCBpcyBzdWdnZXN0ZWQgdG8gc2V0IHRoaXMgYml0IGZpZWxkIGFzIDEwLgorICAgICAqIEB2YXIgVVVBUlRfVDo6Q1RMSU4wCisgICAgICogT2Zmc2V0OiAweDIwICBVU0NJIElucHV0IENvbnRyb2wgU2lnbmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNZTkNTRUwgICB8SW5wdXQgU3luY2hyb25pemF0aW9uIFNpZ25hbCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBzZWxlY3RzIGlmIHRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsICh3aXRoIG9wdGlvbmFsbHkgaW52ZXJ0ZWQpIG9yIHRoZSBzeW5jaHJvbml6ZWQgKGFuZCBvcHRpb25hbGx5IGZpbHRlcmVkKSBzaWduYWwgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIHRoZSBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgc2lnbmFsIGNhbiBiZSB0YWtlbiBhcyBpbnB1dCBmb3IgdGhlIGRhdGEgc2hpZnQgdW5pdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHN5bmNocm9uaXplZCBzaWduYWwgY2FuIGJlIHRha2VuIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHxbMl0gICAgIHxJTklOViAgICAgfElucHV0IFNpZ25hbCBJbnZlcnNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIGludmVydGVyIGVuYWJsZSBvZiB0aGUgaW5wdXQgYXN5bmNocm9ub3VzIHNpZ25hbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHVuLXN5bmNocm9uaXplZCBpbnB1dCBzaWduYWwgd2lsbCBub3QgYmUgaW52ZXJ0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsIHdpbGwgYmUgaW52ZXJ0ZWQuCisgICAgICogQHZhciBVVUFSVF9UOjpDTEtJTgorICAgICAqIE9mZnNldDogMHgyOCAgVVNDSSBJbnB1dCBDbG9jayBTaWduYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFNZTkNTRUwgICB8SW5wdXQgU3luY2hyb25pemF0aW9uIFNpZ25hbCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBzZWxlY3RzIGlmIHRoZSB1bi1zeW5jaHJvbml6ZWQgaW5wdXQgc2lnbmFsIG9yIHRoZSBzeW5jaHJvbml6ZWQgKGFuZCBvcHRpb25hbGx5IGZpbHRlcmVkKSBzaWduYWwgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIHRoZSBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSB1bi1zeW5jaHJvbml6ZWQgICBzaWduYWwgY2FuIGJlIHRha2VuIGFzIGlucHV0IGZvciB0aGUgZGF0YSBzaGlmdCB1bml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgc3luY2hyb25pemVkIHNpZ25hbCBjYW4gYmUgdGFrZW4gYXMgaW5wdXQgZm9yIHRoZSBkYXRhIHNoaWZ0IHVuaXQuCisgICAgICogQHZhciBVVUFSVF9UOjpMSU5FQ1RMCisgICAgICogT2Zmc2V0OiAweDJDICBVU0NJIExpbmUgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfExTQiAgICAgICB8TFNCIEZpcnN0IFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIE1TQiwgd2hpY2ggYml0IG9mIHRyYW5zbWl0L3JlY2VpdmUgZGF0YSBidWZmZXIgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBEV0lEVEgsIGlzIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGZpcnN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgTFNCLCB0aGUgYml0IDAgb2YgZGF0YSBidWZmZXIsIHdpbGwgYmUgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgZmlyc3QuCisgICAgICogfFs1XSAgICAgfERBVE9JTlYgICB8RGF0YSBPdXRwdXQgSW52ZXJzZSBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSBpbnRlcm5hbCBzaGlmdCBkYXRhIHZhbHVlIGFuZCB0aGUgb3V0cHV0IGRhdGEgc2lnbmFsIG9mIFVTQ0l4X0RBVDEgcGluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgdmFsdWUgb2YgVVNDSXhfREFUMSBpcyBlcXVhbCB0byB0aGUgZGF0YSBzaGlmdCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVGhlIHZhbHVlIG9mIFVTQ0l4X0RBVDEgaXMgdGhlIGludmVyc2lvbiBvZiBkYXRhIHNoaWZ0IHJlZ2lzdGVyLgorICAgICAqIHxbN10gICAgIHxDVExPSU5WICAgfENvbnRyb2wgU2lnbmFsIE91dHB1dCBJbnZlcnNlIFNlbGVjdGlvbgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGRlZmluZXMgdGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIGludGVybmFsIGNvbnRyb2wgc2lnbmFsIGFuZCB0aGUgb3V0cHV0IGNvbnRyb2wgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBjb250cm9sIHNpZ25hbCB3aWxsIGJlIGludmVydGVkIGJlZm9yZSBpdHMgb3V0cHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEluIFVBUlQgcHJvdG9jb2wsIHRoZSBjb250cm9sIHNpZ25hbCBtZWFucyBuUlRTIHNpZ25hbC4KKyAgICAgKiB8WzExOjhdICB8RFdJRFRIICAgIHxXb3JkIExlbmd0aCBvZiBUcmFuc21pc3Npb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBkZWZpbmVzIHRoZSBkYXRhIHdvcmQgbGVuZ3RoIChhbW91bnQgb2YgYml0cykgZm9yIHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIGRhdGEgd29yZCBpcyBhbHdheXMgcmlnaHQtYWxpZ25lZCBpbiB0aGUgZGF0YSBidWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxVU0NJIHN1cHBvcnQgd29yZCBsZW5ndGggZnJvbSA0IHRvIDE2IGJpdHMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgwID0gVGhlIGRhdGEgd29yZCBjb250YWlucyAxNiBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbMTU6MF0uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgxID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgyID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHgzID0gUmVzZXJ2ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MHg0ID0gVGhlIGRhdGEgd29yZCBjb250YWlucyA0IGJpdHMgbG9jYXRlZCBhdCBiaXQgcG9zaXRpb25zIFszOjBdLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDB4NSA9IFRoZSBkYXRhIHdvcmQgY29udGFpbnMgNSBiaXRzIGxvY2F0ZWQgYXQgYml0IHBvc2l0aW9ucyBbNDowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwuLi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwweEYgPSBUaGUgZGF0YSB3b3JkIGNvbnRhaW5zIDE1IGJpdHMgbG9jYXRlZCBhdCBiaXQgcG9zaXRpb25zIFsxNDowXS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJbiBVQVJUIHByb3RvY29sLCB0aGUgbGVuZ3RoIGNhbiBiZSBjb25maWd1cmVkIGFzIDZ+MTMgYml0cy4KKyAgICAgKiBAdmFyIFVVQVJUX1Q6OlRYREFUCisgICAgICogT2Zmc2V0OiAweDMwICBVU0NJIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxUWERBVCAgICAgfFRyYW5zbWl0IERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTb2Z0d2FyZSBjYW4gdXNlIHRoaXMgYml0IGZpZWxkIHRvIHdyaXRlIDE2LWJpdCB0cmFuc21pdCBkYXRhIGZvciB0cmFuc21pc3Npb24uCisgICAgICogQHZhciBVVUFSVF9UOjpSWERBVAorICAgICAqIE9mZnNldDogMHgzNCAgVVNDSSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMTU6MF0gIHxSWERBVCAgICAgfFJlY2VpdmVkIERhdGEKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZCBtb25pdG9ycyB0aGUgcmVjZWl2ZWQgZGF0YSB3aGljaCBzdG9yZWQgaW4gcmVjZWl2ZSBkYXRhIGJ1ZmZlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBSWERBVFsxNToxM10gaW5kaWNhdGUgdGhlIHNhbWUgZnJhbWUgc3RhdHVzIG9mIEJSRUFLLCBGUk1FUlIgYW5kIFBBUklUWUVSUiAoVVVBUlRfUFJPVFNUU1s3OjVdKS4KKyAgICAgKiBAdmFyIFVVQVJUX1Q6OkJVRkNUTAorICAgICAqIE9mZnNldDogMHgzOCAgVVNDSSBUcmFuc21pdC9SZWNlaXZlIEJ1ZmZlciBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzddICAgICB8VFhDTFIgICAgIHxDbGVhciBUcmFuc21pdCBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgdHJhbnNtaXQgYnVmZmVyIGlzIGNsZWFyZWQgKGZpbGxpbmcgbGV2ZWwgaXMgY2xlYXJlZCBhbmQgb3V0cHV0IHBvaW50ZXIgaXMgc2V0IHRvIGlucHV0IHBvaW50ZXIgdmFsdWUpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNob3VsZCBvbmx5IGJlIHVzZWQgd2hpbGUgdGhlIGJ1ZmZlciBpcyBub3QgdGFraW5nIHBhcnQgaW4gZGF0YSB0cmFmZmljLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBvbmUgUENMSyBjeWNsZS4KKyAgICAgKiB8WzE0XSAgICB8UlhPVklFTiAgIHxSZWNlaXZlIEJ1ZmZlciBPdmVycnVuIEVycm9yIEludGVycnVwdCBFbmFibGUgQ29udHJvbAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxNV0gICAgfFJYQ0xSICAgICB8Q2xlYXIgUmVjZWl2ZSBCdWZmZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgcmVjZWl2ZSBidWZmZXIgaXMgY2xlYXJlZCAoZmlsbGluZyBsZXZlbCBpcyBjbGVhcmVkIGFuZCBvdXRwdXQgcG9pbnRlciBpcyBzZXQgdG8gaW5wdXQgcG9pbnRlciB2YWx1ZSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8U2hvdWxkIG9ubHkgYmUgdXNlZCB3aGlsZSB0aGUgYnVmZmVyIGlzIG5vdCB0YWtpbmcgcGFydCBpbiBkYXRhIHRyYWZmaWMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIG9uZSBQQ0xLIGN5Y2xlLgorICAgICAqIHxbMTZdICAgIHxUWFJTVCAgICAgfFRyYW5zbWl0IFJlc2V0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVzZXQgdGhlIHRyYW5zbWl0LXJlbGF0ZWQgY291bnRlcnMsIHN0YXRlIG1hY2hpbmUsIGFuZCB0aGUgY29udGVudCBvZiB0cmFuc21pdCBzaGlmdCByZWdpc3RlciBhbmQgZGF0YSBidWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIG9uZSBQQ0xLIGN5Y2xlLgorICAgICAqIHxbMTddICAgIHxSWFJTVCAgICAgfFJlY2VpdmUgUmVzZXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gZWZmZWN0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZXNldCB0aGUgcmVjZWl2ZS1yZWxhdGVkIGNvdW50ZXJzLCBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhlIGNvbnRlbnQgb2YgcmVjZWl2ZSBzaGlmdCByZWdpc3RlciBhbmQgZGF0YSBidWZmZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEl0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciBvbmUgUENMSyBjeWNsZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogSXQgaXMgc3VnZ2VzdCB0byBjaGVjayB0aGUgUlhCVVNZIChVVUFSVF9QUk9UU1RTWzEwXSkgYmVmb3JlIHRoaXMgYml0IHdpbGwgYmUgc2V0IHRvIDEuCisgICAgICogQHZhciBVVUFSVF9UOjpCVUZTVFMKKyAgICAgKiBPZmZzZXQ6IDB4M0MgIFVTQ0kgVHJhbnNtaXQvUmVjZWl2ZSBCdWZmZXIgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8UlhFTVBUWSAgIHxSZWNlaXZlIEJ1ZmZlciBFbXB0eSBJbmRpY2F0b3IKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgKiB8WzFdICAgICB8UlhGVUxMICAgIHxSZWNlaXZlIEJ1ZmZlciBGdWxsIEluZGljYXRvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBidWZmZXIgaXMgZnVsbC4KKyAgICAgKiB8WzNdICAgICB8UlhPVklGICAgIHxSZWNlaXZlIEJ1ZmZlciBPdmVyLXJ1biBFcnJvciBJbnRlcnJ1cHQgU3RhdHVzCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgYSByZWNlaXZlIGJ1ZmZlciBvdmVycnVuIGVycm9yIGV2ZW50IGhhcyBiZWVuIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIFJYT1ZJRU4gKFVVQVJUX0JVRkNUTFsxNF0pIGlzIGVuYWJsZWQsIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCByZXF1ZXN0IGlzIGFjdGl2YXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRlcyAxIHRvIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBIHJlY2VpdmUgYnVmZmVyIG92ZXJydW4gZXJyb3IgZXZlbnQgaGFzIG5vdCBiZWVuIGRldGVjdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBBIHJlY2VpdmUgYnVmZmVyIG92ZXJydW4gZXJyb3IgZXZlbnQgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgICAgICogfFs4XSAgICAgfFRYRU1QVFkgICB8VHJhbnNtaXQgQnVmZmVyIEVtcHR5IEluZGljYXRvcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBidWZmZXIgaXMgbm90IGVtcHR5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBidWZmZXIgaXMgZW1wdHkuCisgICAgICogfFs5XSAgICAgfFRYRlVMTCAgICB8VHJhbnNtaXQgQnVmZmVyIEZ1bGwgSW5kaWNhdG9yCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gVHJhbnNtaXQgYnVmZmVyIGlzIGZ1bGwuCisgICAgICogQHZhciBVVUFSVF9UOjpQRE1BQ1RMCisgICAgICogT2Zmc2V0OiAweDQwICBVU0NJIFBETUEgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFBETUFSU1QgICB8UERNQSBSZXNldAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBlZmZlY3QuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFJlc2V0IHRoZSBVU0NJIFBETUEgY29udHJvbCBsb2dpYy4gVGhpcyBiaXQgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYXV0b21hdGljYWxseS4KKyAgICAgKiB8WzFdICAgICB8VFhQRE1BRU4gIHxQRE1BIFRyYW5zbWl0IENoYW5uZWwgQXZhaWxhYmxlCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyYW5zbWl0IFBETUEgZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyYW5zbWl0IFBETUEgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzJdICAgICB8UlhQRE1BRU4gIHxQRE1BIFJlY2VpdmUgQ2hhbm5lbCBBdmFpbGFibGUKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gUmVjZWl2ZSBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBSZWNlaXZlIFBETUEgZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8WzNdICAgICB8UERNQUVOICAgIHxQRE1BIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBQRE1BIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBQRE1BIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogQHZhciBVVUFSVF9UOjpXS0NUTAorICAgICAqIE9mZnNldDogMHg1NCAgVVNDSSBXYWtlLXVwIENvbnRyb2wgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMF0gICAgIHxXS0VOICAgICAgfFdha2UtdXAgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXYWtlLXVwIGZ1bmN0aW9uIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXYWtlLXVwIGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFBEQk9QVCAgICB8UG93ZXIgRG93biBCbG9ja2luZyBPcHRpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gSWYgdXNlciBhdHRlbXB0cyB0byBlbnRlciBQb3dlci1kb3duIG1vZGUgYnkgZXhlY3V0aW5nIFdGSSB3aGlsZSB0aGUgcHJvdG9jb2wgaXMgaW4gdHJhbnNmZXJyaW5nLCBNQ1Ugd2lsbCBzdG9wIHRoZSB0cmFuc2ZlciBhbmQgZW50ZXIgUG93ZXItZG93biBtb2RlIGltbWVkaWF0ZWx5LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBJZiB1c2VyIGF0dGVtcHRzIHRvIGVudGVyIFBvd2VyLWRvd24gbW9kZSBieSBleGVjdXRpbmcgV0ZJIHdoaWxlIHRoZSBwcm90b2NvbCBpcyBpbiB0cmFuc2ZlcnJpbmcsIHRoZSBvbi1nb2luZyB0cmFuc2ZlciB3aWxsIG5vdCBiZSBzdG9wcGVkIGFuZCBNQ1Ugd2lsbCBlbnRlciBpZGxlIG1vZGUgaW1tZWRpYXRlbHkuCisgICAgICogQHZhciBVVUFSVF9UOjpXS1NUUworICAgICAqIE9mZnNldDogMHg1OCAgVVNDSSBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdLRiAgICAgICB8V2FrZS11cCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiBjaGlwIGlzIHdva2VuIHVwIGZyb20gUG93ZXItZG93biBtb2RlLCB0aGlzIGJpdCBpcyBzZXQgdG8gMQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNvZnR3YXJlIGNhbiB3cml0ZSAxIHRvIGNsZWFyIHRoaXMgYml0LgorICAgICAqIEB2YXIgVVVBUlRfVDo6UFJPVENUTAorICAgICAqIE9mZnNldDogMHg1QyAgVVNDSSBQcm90b2NvbCBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzBdICAgICB8U1RPUEIgICAgIHxTdG9wIEJpdHMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSBudW1iZXIgb2Ygc3RvcCBiaXRzIGluIGFuIFVBUlQgZnJhbWUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRoZSBudW1iZXIgb2Ygc3RvcCBiaXRzIGlzIDEuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBudW1iZXIgb2Ygc3RvcCBiaXRzIGlzIDIuCisgICAgICogfFsxXSAgICAgfFBBUklUWUVOICB8UGFyaXR5IEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBkZWZpbmVzIHRoZSBwYXJpdHkgYml0IGlzIGVuYWJsZWQgaW4gYW4gVUFSVCBmcmFtZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHBhcml0eSBiaXQgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSBwYXJpdHkgYml0IEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfEVWRU5QQVJJVFl8RXZlbiBQYXJpdHkgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBPZGQgbnVtYmVyIG9mIGxvZ2ljIDEncyBpcyB0cmFuc21pdHRlZCBhbmQgY2hlY2tlZCBpbiBlYWNoIHdvcmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEV2ZW4gbnVtYmVyIG9mIGxvZ2ljIDEncyBpcyB0cmFuc21pdHRlZCBhbmQgY2hlY2tlZCBpbiBlYWNoIHdvcmQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaGFzIGVmZmVjdCBvbmx5IHdoZW4gUEFSSVRZRU4gaXMgc2V0LgorICAgICAqIHxbM10gICAgIHxSVFNBVVRPRU4gfG5SVFMgQXV0by1mbG93IENvbnRyb2wgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gblJUUyBhdXRvLWZsb3cgaXMgZW5hYmxlZCwgaWYgdGhlIHJlY2VpdmVyIGJ1ZmZlciBpcyBmdWxsIChSWEZVTEwgKFVVQVJUX0JVRlNUU1sxXSA9IDEpKSwgdGhlIFVBUlQgd2lsbCBkZS1hc3NlcnQgblJUUyBzaWduYWwuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IG5SVFMgYXV0by1mbG93IGNvbnRyb2wgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5SVFMgYXV0by1mbG93IGNvbnRyb2wgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBoYXMgZWZmZWN0IG9ubHkgd2hlbiB0aGUgUlRTQVVESVJFTiBpcyBub3Qgc2V0LgorICAgICAqIHxbNF0gICAgIHxDVFNBVVRPRU4gfG5DVFMgQXV0by1mbG93IENvbnRyb2wgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdoZW4gbkNUUyBhdXRvLWZsb3cgaXMgZW5hYmxlZCwgdGhlIFVBUlQgd2lsbCBzZW5kIGRhdGEgdG8gZXh0ZXJuYWwgZGV2aWNlIHdoZW4gbkNUUyBpbnB1dCBhc3NlcnQgKFVBUlQgd2lsbCBub3Qgc2VuZCBkYXRhIHRvIGRldmljZSBpZiBuQ1RTIGlucHV0IGlzIGRpcy1hc3NlcnRlZCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IG5DVFMgYXV0by1mbG93IGNvbnRyb2wgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IG5DVFMgYXV0by1mbG93IGNvbnRyb2wgRW5hYmxlZC4KKyAgICAgKiB8WzVdICAgICB8UlRTQVVESVJFTnxuUlRTIEF1dG8gRGlyZWN0aW9uIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIG5SVFMgYXV0byBkaXJlY3Rpb24gaXMgZW5hYmxlZCwgaWYgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzIGluIHRoZSBUWCBidWZmZXIgaXMgZW1wdHksIHRoZSBuUlRTIHNpZ25hbCBpcyBpbmFjdGl2ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gblJUUyBhdXRvIGRpcmVjdGlvbiBjb250cm9sIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBuUlRTIGF1dG8gZGlyZWN0aW9uIGNvbnRyb2wgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgdXNlZCBmb3IgblJUUyBhdXRvIGRpcmVjdGlvbiBjb250cm9sIGZvciBSUzQ4NS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVGhpcyBiaXQgaGFzIGVmZmVjdCBvbmx5IHdoZW4gdGhlIFJUU0FVVE9FTiBpcyBub3Qgc2V0LgorICAgICAqIHxbNl0gICAgIHxBQlJFTiAgICAgfEF1dG8tYmF1ZCBSYXRlIERldGVjdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tYmF1ZCByYXRlIGRldGVjdCBmdW5jdGlvbiBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0by1iYXVkIHJhdGUgZGV0ZWN0IGZ1bmN0aW9uIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiB0aGUgYXV0byAtIGJhdWQgcmF0ZSBkZXRlY3Qgb3BlcmF0aW9uIGZpbmlzaGVzLCBoYXJkd2FyZSB3aWxsIGNsZWFyIHRoaXMgYml0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBhc3NvY2lhdGVkIGludGVycnVwdCBBQlJERVRJRiAoVVVBUlRfUFJPVFNUU1s5XSkgd2lsbCBiZSBnZW5lcmF0ZWQgKElmIEFSQklFTiAoVVVBUlRfUFJPVElFTiBbMV0pIGlzIGVuYWJsZWQpLgorICAgICAqIHxbOV0gICAgIHxEQVRXS0VOICAgfERhdGEgV2FrZS11cCBNb2RlIEVuYWJsZSBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gRGF0YSB3YWtlLXVwIG1vZGUgRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IERhdGEgd2FrZS11cCBtb2RlIEVuYWJsZWQuCisgICAgICogfFsxMF0gICAgfENUU1dLRU4gICB8bkNUUyBXYWtlLXVwIE1vZGUgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBuQ1RTIHdha2UtdXAgbW9kZSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gbkNUUyB3YWtlLXVwIG1vZGUgRW5hYmxlZC4KKyAgICAgKiB8WzE0OjExXSB8V0FLRUNOVCAgIHxXYWtlLXVwIENvdW50ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGVzZSBiaXRzIGZpZWxkIGluZGljYXRlIGhvdyBtYW55IGNsb2NrIGN5Y2xlIHNlbGVjdGVkIGJ5IGZQRFNfQ05UIGRvIHRoZSBzbGF2ZSBjYW4gZ2V0IHRoZSAxc3QgYml0IChzdGFydCBiaXQpIHdoZW4gdGhlIGRldmljZSBpcyB3YWtlLXVwIGZyb20gUG93ZXItZG93biBtb2RlLgorICAgICAqIHxbMjQ6MTZdIHxCUkRFVElUViAgfEJhdWQgUmF0ZSBEZXRlY3Rpb24gSW50ZXJ2YWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBmaWVsZHMgaW5kaWNhdGUgaG93IG1hbnkgY2xvY2sgY3ljbGUgc2VsZWN0ZWQgYnkgVE1DTlRTUkMgKFVVQVJUX0JSR0VOIFs1XSkgZG9lcyB0aGUgc2xhdmUgY2FsY3VsYXRlcyB0aGUgYmF1ZCByYXRlIGluIG9uZSBiaXRzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZSBvcmRlciBvZiB0aGUgYnVzIHNoYWxsIGJlIDEgYW5kIDAgc3RlcCBieSBzdGVwIChlLmcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHx0aGUgaW5wdXQgZGF0YSBwYXR0ZXJuIHNoYWxsIGJlIDB4NTUpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhlIHVzZXIgY2FuIHJlYWQgdGhlIHZhbHVlIHRvIGtub3cgdGhlIGN1cnJlbnQgaW5wdXQgYmF1ZCByYXRlIG9mIHRoZSBidXMgd2hlbmV2ZXIgdGhlIEFCUkRFVElGIChVVUFSVF9QUk9UQ1RMWzldKSBpcyBzZXQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgdG8gMCBieSBzb2Z0d2FyZSB3cml0aW5nIDEgdG8gdGhlIEJSREVUSVRWLgorICAgICAqIHxbMjZdICAgIHxTVElDS0VOICAgfFN0aWNrIFBhcml0eSBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFN0aWNrIHBhcml0eSBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gU3RpY2sgcGFyaXR5IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogUmVmZXIgdG8gUlMtNDg1IFN1cHBvcnQgc2VjdGlvbiBmb3IgZGV0YWlsIGluZm9ybWF0aW9uLgorICAgICAqIHxbMjldICAgIHxCQ0VOICAgICAgfFRyYW5zbWl0IEJyZWFrIENvbnRyb2wgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUcmFuc21pdCBCcmVhayBDb250cm9sIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUcmFuc21pdCBCcmVhayBDb250cm9sIEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gbG9naWMgMSwgdGhlIHNlcmlhbCBkYXRhIG91dHB1dCAoVFgpIGlzIGZvcmNlZCB0byB0aGUgU3BhY2luZyBTdGF0ZSAobG9naWMgMCkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgYWN0cyBvbmx5IG9uIFRYIGxpbmUgYW5kIGhhcyBubyBlZmZlY3Qgb24gdGhlIHRyYW5zbWl0dGVyIGxvZ2ljLgorICAgICAqIHxbMzFdICAgIHxQUk9URU4gICAgfFVBUlQgUHJvdG9jb2wgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBVQVJUIFByb3RvY29sIERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBVQVJUIFByb3RvY29sIEVuYWJsZWQuCisgICAgICogQHZhciBVVUFSVF9UOjpQUk9USUVOCisgICAgICogT2Zmc2V0OiAweDYwICBVU0NJIFByb3RvY29sIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbMV0gICAgIHxBQlJJRU4gICAgfEF1dG8tYmF1ZCBSYXRlIEludGVycnVwdCBFbmFibGUgQml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEF1dG8tYmF1ZCByYXRlIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0by1iYXVkIHJhdGUgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsyXSAgICAgfFJMU0lFTiAgICB8UmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlIEJpdAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBSZWNlaXZlIGxpbmUgc3RhdHVzIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBVVUFSVF9QUk9UU1RTWzc6NV0gaW5kaWNhdGVzIHRoZSBjdXJyZW50IGludGVycnVwdCBldmVudCBmb3IgcmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQuCisgICAgICogQHZhciBVVUFSVF9UOjpQUk9UU1RTCisgICAgICogT2Zmc2V0OiAweDY0ICBVU0NJIFByb3RvY29sIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxXSAgICAgfFRYU1RJRiAgICB8VHJhbnNtaXQgU3RhcnQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQSB0cmFuc21pdCBzdGFydCBpbnRlcnJ1cHQgc3RhdHVzIGhhcyBub3Qgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgdHJhbnNtaXQgc3RhcnQgaW50ZXJydXB0IHN0YXR1cyBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGluZyBvbmUgaW50byB0aGlzIGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogVXNlZCBmb3IgdXNlciB0byBsb2FkIG5leHQgdHJhbnNtaXQgZGF0YSB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgaW4gdHJhbnNtaXQgYnVmZmVyLgorICAgICAqIHxbMl0gICAgIHxUWEVORElGICAgfFRyYW5zbWl0IEVuZCBJbnRlcnJ1cHQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBIHRyYW5zbWl0IGVuZCBpbnRlcnJ1cHQgc3RhdHVzIGhhcyBub3Qgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgdHJhbnNtaXQgZW5kIGludGVycnVwdCBzdGF0dXMgaGFzIG9jY3VycmVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IEl0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgd3JpdGluZyBvbmUgaW50byB0aGlzIGJpdC4KKyAgICAgKiB8WzNdICAgICB8UlhTVElGICAgIHxSZWNlaXZlIFN0YXJ0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IEEgcmVjZWl2ZSBzdGFydCBpbnRlcnJ1cHQgc3RhdHVzIGhhcyBub3Qgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgcmVjZWl2ZSBzdGFydCBpbnRlcnJ1cHQgc3RhdHVzIGhhcyBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBJdCBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHdyaXRpbmcgb25lIGludG8gdGhpcyBiaXQuCisgICAgICogfFs0XSAgICAgfFJYRU5ESUYgICB8UmVjZWl2ZSBFbmQgSW50ZXJydXB0IEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQSByZWNlaXZlIGZpbmlzaCBpbnRlcnJ1cHQgc3RhdHVzIGhhcyBub3Qgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEEgcmVjZWl2ZSBmaW5pc2ggaW50ZXJydXB0IHN0YXR1cyBoYXMgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogSXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSB3cml0aW5nIG9uZSBpbnRvIHRoaXMgYml0LgorICAgICAqIHxbNV0gICAgIHxQQVJJVFlFUlIgfFBhcml0eSBFcnJvciBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHRvIGxvZ2ljIDEgd2hlbmV2ZXIgdGhlIHJlY2VpdmVkIGNoYXJhY3RlciBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcGFyaXR5IGJpdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gTm8gcGFyaXR5IGVycm9yIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gUGFyaXR5IGVycm9yIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBjYW4gYmUgY2xlYXJlZCBieSB3cml0ZSAxIGFtb25nIHRoZSBCUkVBSywgRlJNRVJSIGFuZCBQQVJJVFlFUlIgYml0cy4KKyAgICAgKiB8WzZdICAgICB8RlJNRVJSICAgIHxGcmFtaW5nIEVycm9yIEZsYWcKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpcyBzZXQgdG8gbG9naWMgMSB3aGVuZXZlciB0aGUgcmVjZWl2ZWQgY2hhcmFjdGVyIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBzdG9wIGJpdCAodGhhdCBpcywgdGhlIHN0b3AgYml0IGZvbGxvd2luZyB0aGUgbGFzdCBkYXRhIGJpdCBvciBwYXJpdHkgYml0IGlzIGRldGVjdGVkIGFzIGxvZ2ljIDApLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBmcmFtaW5nIGVycm9yIGlzIGdlbmVyYXRlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gRnJhbWluZyBlcnJvciBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgY2FuIGJlIGNsZWFyZWQgYnkgd3JpdGUgMSBhbW9uZyB0aGUgQlJFQUssIEZSTUVSUiBhbmQgUEFSSVRZRVJSIGJpdHMuCisgICAgICogfFs3XSAgICAgfEJSRUFLICAgICB8QnJlYWsgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB0byBsb2dpYyAxIHdoZW5ldmVyIHRoZSByZWNlaXZlZCBkYXRhIGlucHV0IChSWCkgaXMgaGVsZCBpbiB0aGUgc3BhY2luZyBzdGF0ZSAobG9naWMgMCkgZm9yIGxvbmdlciB0aGFuIGEgZnVsbCB3b3JkIHRyYW5zbWlzc2lvbiB0aW1lICh0aGF0IGlzLCB0aGUgdG90YWwgdGltZSBvZiBzdGFydCBiaXQgKyBkYXRhIGJpdHMgKyBwYXJpdHkgKyBzdG9wIGJpdHMpLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBObyBCcmVhayBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IEJyZWFrIGlzIGdlbmVyYXRlZCBpbiB0aGUgcmVjZWl2ZXIgYnVzLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRlIDEgYW1vbmcgdGhlIEJSRUFLLCBGUk1FUlIgYW5kIFBBUklUWUVSUiBiaXRzLgorICAgICAqIHxbOV0gICAgIHxBQlJERVRJRiAgfEF1dG8tYmF1ZCBSYXRlIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaXMgc2V0IHdoZW4gYXV0by1iYXVkIHJhdGUgZGV0ZWN0aW9uIGlzIGRvbmUgYW1vbmcgdGhlIGZhbGxpbmcgZWRnZSBvZiB0aGUgaW5wdXQgZGF0YS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGUgQUJSSUVOIChVVUFSVF9QUk9UQ1RMWzZdKSBpcyBzZXQsIHRoZSBhdXRvLWJhdWQgcmF0ZSBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgY2FuIGJlIHNldCA0IHRpbWVzIHdoZW4gdGhlIGlucHV0IGRhdGEgcGF0dGVybiBpcyAweDU1IGFuZCBpdCBpcyBjbGVhcmVkIGJlZm9yZSB0aGUgbmV4dCBmYWxsaW5nIGVkZ2Ugb2YgdGhlIGlucHV0IGJ1cy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gQXV0by1iYXVkIHJhdGUgZGV0ZWN0IGZ1bmN0aW9uIGlzIG5vdCBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBPbmUgQml0IGF1dG8tYmF1ZCByYXRlIGRldGVjdCBmdW5jdGlvbiBpcyBkb25lLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzEwXSAgICB8UlhCVVNZICAgIHxSWCBCdXMgU3RhdHVzIEZsYWcgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIGJ1c3kgc3RhdHVzIG9mIHRoZSByZWNlaXZlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gVGhlIHJlY2VpdmVyIGlzIElkbGUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRoZSByZWNlaXZlciBpcyBCVVNZLgorICAgICAqIHxbMTFdICAgIHxBQkVSUlNUUyAgfEF1dG8tYmF1ZCBSYXRlIEVycm9yIFN0YXR1cworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGlzIHNldCB3aGVuIGF1dG8tYmF1ZCByYXRlIGRldGVjdGlvbiBjb3VudGVyIG92ZXJydW4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8V2hlbiB0aGUgYXV0by1iYXVkIHJhdGUgY291bnRlciBvdmVycnVuLCB0aGUgdXNlciBzaGFsbCByZXZpc2UgdGhlIENMS0RJViAoVVVBUlRfQlJHRU5bMjU6MTZdKSB2YWx1ZSBhbmQgZW5hYmxlIEFCUkVOIChVVUFSVF9QUk9UQ1RMWzZdKSB0byBkZXRlY3QgdGhlIGNvcnJlY3QgYmF1ZCByYXRlIGFnYWluLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBBdXRvLWJhdWQgcmF0ZSBkZXRlY3QgY291bnRlciBpcyBub3Qgb3ZlcnJ1bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQXV0by1iYXVkIHJhdGUgZGV0ZWN0IGNvdW50ZXIgaXMgb3ZlcnJ1bi4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgc2V0IGF0IHRoZSBzYW1lIHRpbWUgb2YgQUJSREVUSUYuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgYml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBBQlJERVRJRiBvciBBQkVSUlNUUy4KKyAgICAgKiB8WzE2XSAgICB8Q1RTU1lOQ0xWIHxuQ1RTIFN5bmNocm9uaXplZCBMZXZlbCBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaW50ZXJuYWwgc3luY2hyb25pemVkIG5DVFMgc2lnbmFsLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBUaGUgaW50ZXJuYWwgc3luY2hyb25pemVkIG5DVFMgaXMgbG93LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBUaGUgaW50ZXJuYWwgc3luY2hyb25pemVkIG5DVFMgaXMgaGlnaC4KKyAgICAgKiB8WzE3XSAgICB8Q1RTTFYgICAgIHxuQ1RTIFBpbiBTdGF0dXMgKFJlYWQgT25seSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxUaGlzIGJpdCB1c2VkIHRvIG1vbml0b3IgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIG5DVFMgcGluIGlucHV0LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBuQ1RTIHBpbiBpbnB1dCBpcyBsb3cgbGV2ZWwgdm9sdGFnZSBsb2dpYyBzdGF0ZS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gbkNUUyBwaW4gaW5wdXQgaXMgaGlnaCBsZXZlbCB2b2x0YWdlIGxvZ2ljIHN0YXRlLgorICAgICAqLworCisgICAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gVVNDSSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgSU5URU47ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFVTQ0kgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IEJSR0VOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBVU0NJIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMFsxXTsKKyAgICBfX0lPIHVpbnQzMl90IERBVElOMDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDEwXSBVU0NJIElucHV0IERhdGEgU2lnbmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMVszXTsKKyAgICBfX0lPIHVpbnQzMl90IENUTElOMDsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDIwXSBVU0NJIElucHV0IENvbnRyb2wgU2lnbmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFMlsxXTsKKyAgICBfX0lPIHVpbnQzMl90IENMS0lOOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDI4XSBVU0NJIElucHV0IENsb2NrIFNpZ25hbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBMSU5FQ1RMOyAgICAgICAgICAgICAgIC8qITwgWzB4MDAyY10gVVNDSSBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgVFhEQVQ7ICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMzBdIFVTQ0kgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFJYREFUOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDM0XSBVU0NJIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBCVUZDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAzOF0gVVNDSSBUcmFuc21pdC9SZWNlaXZlIEJ1ZmZlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQlVGU1RTOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwM2NdIFVTQ0kgVHJhbnNtaXQvUmVjZWl2ZSBCdWZmZXIgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBETUFDVEw7ICAgICAgICAgICAgICAgLyohPCBbMHgwMDQwXSBVU0NJIFBETUEgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBSRVNFUlZFM1s0XTsKKyAgICBfX0lPIHVpbnQzMl90IFdLQ1RMOyAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDU0XSBVU0NJIFdha2UtdXAgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBXS1NUUzsgICAgICAgICAgICAgICAgIC8qITwgWzB4MDA1OF0gVVNDSSBXYWtlLXVwIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgUFJPVENUTDsgICAgICAgICAgICAgICAvKiE8IFsweDAwNWNdIFVTQ0kgUHJvdG9jb2wgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBST1RJRU47ICAgICAgICAgICAgICAgLyohPCBbMHgwMDYwXSBVU0NJIFByb3RvY29sIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBQUk9UU1RTOyAgICAgICAgICAgICAgIC8qITwgWzB4MDA2NF0gVVNDSSBQcm90b2NvbCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFVVQVJUX1Q7CisKKy8qKgorICAgIEBhZGR0b2dyb3VwIFVVQVJUX0NPTlNUIFVVQVJUIEJpdCBGaWVsZCBEZWZpbml0aW9uCisgICAgQ29uc3RhbnQgRGVmaW5pdGlvbnMgZm9yIFVVQVJUIENvbnRyb2xsZXIKK0B7ICovCisKKyNkZWZpbmUgVVVBUlRfQ1RMX0ZVTk1PREVfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkNUTDogRlVOTU9ERSBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVVQVJUX0NUTF9GVU5NT0RFX01zayAgICAgICAgICAgICgweDd1bCA8PCBVVUFSVF9DVExfRlVOTU9ERV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpDVEw6IEZVTk1PREUgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0lOVEVOX1RYU1RJRU5fUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpJTlRFTjogVFhTVElFTiBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVVUFSVF9JTlRFTl9UWFNUSUVOX01zayAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfSU5URU5fVFhTVElFTl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6SU5URU46IFRYU1RJRU4gTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9JTlRFTl9UWEVORElFTl9Qb3MgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6SU5URU46IFRYRU5ESUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfSU5URU5fVFhFTkRJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0lOVEVOX1RYRU5ESUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OklOVEVOOiBUWEVORElFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfSU5URU5fUlhTVElFTl9Qb3MgICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OklOVEVOOiBSWFNUSUVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVVQVJUX0lOVEVOX1JYU1RJRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9JTlRFTl9SWFNUSUVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpJTlRFTjogUlhTVElFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0lOVEVOX1JYRU5ESUVOX1BvcyAgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpJTlRFTjogUlhFTkRJRU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9JTlRFTl9SWEVORElFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfSU5URU5fUlhFTkRJRU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6SU5URU46IFJYRU5ESUVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CUkdFTl9SQ0xLU0VMX1BvcyAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IFJDTEtTRUwgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlJHRU5fUkNMS1NFTF9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0JSR0VOX1JDTEtTRUxfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBSQ0xLU0VMIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlJHRU5fUFRDTEtTRUxfUG9zICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBQVENMS1NFTCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX0JSR0VOX1BUQ0xLU0VMX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CUkdFTl9QVENMS1NFTF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogUFRDTEtTRUwgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JSR0VOX1NQQ0xLU0VMX1BvcyAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogU1BDTEtTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9CUkdFTl9TUENMS1NFTF9Nc2sgICAgICAgICAoMHgzdWwgPDwgVVVBUlRfQlJHRU5fU1BDTEtTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IFNQQ0xLU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CUkdFTl9UTUNOVEVOX1BvcyAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IFRNQ05URU4gUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlJHRU5fVE1DTlRFTl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0JSR0VOX1RNQ05URU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBUTUNOVEVOIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlJHRU5fVE1DTlRTUkNfUG9zICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBUTUNOVFNSQyBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX0JSR0VOX1RNQ05UU1JDX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CUkdFTl9UTUNOVFNSQ19Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogVE1DTlRTUkMgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JSR0VOX1BEU0NOVF9Qb3MgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogUERTQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVVUFSVF9CUkdFTl9QRFNDTlRfTXNrICAgICAgICAgICAoMHgzdWwgPDwgVVVBUlRfQlJHRU5fUERTQ05UX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IFBEU0NOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CUkdFTl9EU0NOVF9Qb3MgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlJHRU46IERTQ05UIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlJHRU5fRFNDTlRfTXNrICAgICAgICAgICAgKDB4MWZ1bCA8PCBVVUFSVF9CUkdFTl9EU0NOVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBEU0NOVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlJHRU5fQ0xLRElWX1BvcyAgICAgICAgICAgKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJSR0VOOiBDTEtESVYgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVVQVJUX0JSR0VOX0NMS0RJVl9Nc2sgICAgICAgICAgICgweDNmZnVsIDw8IFVVQVJUX0JSR0VOX0NMS0RJVl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCUkdFTjogQ0xLRElWIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0RBVElOMF9TWU5DU0VMX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpEQVRJTjA6IFNZTkNTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9EQVRJTjBfU1lOQ1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfREFUSU4wX1NZTkNTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6REFUSU4wOiBTWU5DU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9EQVRJTjBfSU5JTlZfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6REFUSU4wOiBJTklOViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfREFUSU4wX0lOSU5WX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0RBVElOMF9JTklOVl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkRBVElOMDogSU5JTlYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfREFUSU4wX0VER0VERVRfUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkRBVElOMDogRURHRURFVCBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX0RBVElOMF9FREdFREVUX01zayAgICAgICAgICgweDN1bCA8PCBVVUFSVF9EQVRJTjBfRURHRURFVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpEQVRJTjA6IEVER0VERVQgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0NUTElOMF9TWU5DU0VMX1BvcyAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpDVExJTjA6IFNZTkNTRUwgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9DVExJTjBfU1lOQ1NFTF9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQ1RMSU4wX1NZTkNTRUxfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6Q1RMSU4wOiBTWU5DU0VMIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9DVExJTjBfSU5JTlZfUG9zICAgICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6Q1RMSU4wOiBJTklOViBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQ1RMSU4wX0lOSU5WX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0NUTElOMF9JTklOVl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkNUTElOMDogSU5JTlYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQ0xLSU5fU1lOQ1NFTF9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkNMS0lOOiBTWU5DU0VMIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVVQVJUX0NMS0lOX1NZTkNTRUxfTXNrICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9DTEtJTl9TWU5DU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpDTEtJTjogU1lOQ1NFTCBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0xJTkVDVExfTFNCX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpMSU5FQ1RMOiBMU0IgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBVVUFSVF9MSU5FQ1RMX0xTQl9Nc2sgICAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfTElORUNUTF9MU0JfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6TElORUNUTDogTFNCIE1hc2sgICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9MSU5FQ1RMX0RBVE9JTlZfUG9zICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6TElORUNUTDogREFUT0lOViBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVVBUlRfTElORUNUTF9EQVRPSU5WX01zayAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0xJTkVDVExfREFUT0lOVl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkxJTkVDVEw6IERBVE9JTlYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfTElORUNUTF9DVExPSU5WX1BvcyAgICAgICAgKDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkxJTkVDVEw6IENUTE9JTlYgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVVQVJUX0xJTkVDVExfQ1RMT0lOVl9Nc2sgICAgICAgICgweDF1bCA8PCBVVUFSVF9MSU5FQ1RMX0NUTE9JTlZfUG9zKSAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpMSU5FQ1RMOiBDVExPSU5WIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0xJTkVDVExfRFdJRFRIX1BvcyAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpMSU5FQ1RMOiBEV0lEVEggUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9MSU5FQ1RMX0RXSURUSF9Nc2sgICAgICAgICAoMHhmdWwgPDwgVVVBUlRfTElORUNUTF9EV0lEVEhfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6TElORUNUTDogRFdJRFRIIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9UWERBVF9UWERBVF9Qb3MgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6VFhEQVQ6IFRYREFUIFBvc2l0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfVFhEQVRfVFhEQVRfTXNrICAgICAgICAgICAgKDB4ZmZmZnVsIDw8IFVVQVJUX1RYREFUX1RYREFUX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlRYREFUOiBUWERBVCBNYXNrICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUlhEQVRfUlhEQVRfUG9zICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlJYREFUOiBSWERBVCBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFVVQVJUX1JYREFUX1JYREFUX01zayAgICAgICAgICAgICgweGZmZmZ1bCA8PCBVVUFSVF9SWERBVF9SWERBVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpSWERBVDogUlhEQVQgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JVRkNUTF9UWENMUl9Qb3MgICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZDVEw6IFRYQ0xSIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVVUFSVF9CVUZDVExfVFhDTFJfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQlVGQ1RMX1RYQ0xSX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGQ1RMOiBUWENMUiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CVUZDVExfUlhPVklFTl9Qb3MgICAgICAgICAoMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGQ1RMOiBSWE9WSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlVGQ1RMX1JYT1ZJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0JVRkNUTF9SWE9WSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRkNUTDogUlhPVklFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlVGQ1RMX1JYQ0xSX1BvcyAgICAgICAgICAgKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRkNUTDogUlhDTFIgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVVQVJUX0JVRkNUTF9SWENMUl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CVUZDVExfUlhDTFJfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZDVEw6IFJYQ0xSIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JVRkNUTF9UWFJTVF9Qb3MgICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZDVEw6IFRYUlNUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVVUFSVF9CVUZDVExfVFhSU1RfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQlVGQ1RMX1RYUlNUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGQ1RMOiBUWFJTVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CVUZDVExfUlhSU1RfUG9zICAgICAgICAgICAoMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGQ1RMOiBSWFJTVCBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlVGQ1RMX1JYUlNUX01zayAgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0JVRkNUTF9SWFJTVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRkNUTDogUlhSU1QgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlVGU1RTX1JYRU1QVFlfUG9zICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRlNUUzogUlhFTVBUWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX0JVRlNUU19SWEVNUFRZX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CVUZTVFNfUlhFTVBUWV9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZTVFM6IFJYRU1QVFkgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JVRlNUU19SWEZVTExfUG9zICAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZTVFM6IFJYRlVMTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVVUFSVF9CVUZTVFNfUlhGVUxMX01zayAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQlVGU1RTX1JYRlVMTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGU1RTOiBSWEZVTEwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9CVUZTVFNfUlhPVklGX1BvcyAgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGU1RTOiBSWE9WSUYgUG9zaXRpb24gICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfQlVGU1RTX1JYT1ZJRl9Nc2sgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX0JVRlNUU19SWE9WSUZfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRlNUUzogUlhPVklGIE1hc2sgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfQlVGU1RTX1RYRU1QVFlfUG9zICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OkJVRlNUUzogVFhFTVBUWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX0JVRlNUU19UWEVNUFRZX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9CVUZTVFNfVFhFTVBUWV9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZTVFM6IFRYRU1QVFkgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX0JVRlNUU19UWEZVTExfUG9zICAgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpCVUZTVFM6IFRYRlVMTCBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVVUFSVF9CVUZTVFNfVFhGVUxMX01zayAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfQlVGU1RTX1RYRlVMTF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6QlVGU1RTOiBUWEZVTEwgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QRE1BQ1RMX1BETUFSU1RfUG9zICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UERNQUNUTDogUERNQVJTVCBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUERNQUNUTF9QRE1BUlNUX01zayAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BETUFDVExfUERNQVJTVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBETUFDVEw6IFBETUFSU1QgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUERNQUNUTF9UWFBETUFFTl9Qb3MgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBETUFDVEw6IFRYUERNQUVOIFBvc2l0aW9uICAgICovCisjZGVmaW5lIFVVQVJUX1BETUFDVExfVFhQRE1BRU5fTXNrICAgICAgICgweDF1bCA8PCBVVUFSVF9QRE1BQ1RMX1RYUERNQUVOX1BvcykgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQRE1BQ1RMOiBUWFBETUFFTiBNYXNrICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BETUFDVExfUlhQRE1BRU5fUG9zICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQRE1BQ1RMOiBSWFBETUFFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBVVUFSVF9QRE1BQ1RMX1JYUERNQUVOX01zayAgICAgICAoMHgxdWwgPDwgVVVBUlRfUERNQUNUTF9SWFBETUFFTl9Qb3MpICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UERNQUNUTDogUlhQRE1BRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QRE1BQ1RMX1BETUFFTl9Qb3MgICAgICAgICAoMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UERNQUNUTDogUERNQUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUERNQUNUTF9QRE1BRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BETUFDVExfUERNQUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBETUFDVEw6IFBETUFFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfV0tDVExfV0tFTl9Qb3MgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OldLQ1RMOiBXS0VOIFBvc2l0aW9uICAgICAgICAgICovCisjZGVmaW5lIFVVQVJUX1dLQ1RMX1dLRU5fTXNrICAgICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9XS0NUTF9XS0VOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpXS0NUTDogV0tFTiBNYXNrICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1dLQ1RMX1BEQk9QVF9Qb3MgICAgICAgICAgICgyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpXS0NUTDogUERCT1BUIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBVVUFSVF9XS0NUTF9QREJPUFRfTXNrICAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfV0tDVExfUERCT1BUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6V0tDVEw6IFBEQk9QVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9XS1NUU19XS0ZfUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6V0tTVFM6IFdLRiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfV0tTVFNfV0tGX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1dLU1RTX1dLRl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OldLU1RTOiBXS0YgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9TVE9QQl9Qb3MgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IFNUT1BCIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RDVExfU1RPUEJfTXNrICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UQ1RMX1NUT1BCX1BvcykgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBTVE9QQiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfUEFSSVRZRU5fUG9zICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBQQVJJVFlFTiBQb3NpdGlvbiAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX1BBUklUWUVOX01zayAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVENUTF9QQVJJVFlFTl9Qb3MpICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogUEFSSVRZRU4gTWFzayAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0VWRU5QQVJJVFlfUG9zICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogRVZFTlBBUklUWSBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9FVkVOUEFSSVRZX01zayAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RDVExfRVZFTlBBUklUWV9Qb3MpICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IEVWRU5QQVJJVFkgTWFzayAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9SVFNBVVRPRU5fUG9zICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IFJUU0FVVE9FTiBQb3NpdGlvbiAgICovCisjZGVmaW5lIFVVQVJUX1BST1RDVExfUlRTQVVUT0VOX01zayAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UQ1RMX1JUU0FVVE9FTl9Qb3MpICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBSVFNBVVRPRU4gTWFzayAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfQ1RTQVVUT0VOX1BvcyAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBDVFNBVVRPRU4gUG9zaXRpb24gICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0NUU0FVVE9FTl9Nc2sgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVENUTF9DVFNBVVRPRU5fUG9zKSAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogQ1RTQVVUT0VOIE1hc2sgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX1JUU0FVRElSRU5fUG9zICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogUlRTQVVESVJFTiBQb3NpdGlvbiAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9SVFNBVURJUkVOX01zayAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RDVExfUlRTQVVESVJFTl9Qb3MpICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IFJUU0FVRElSRU4gTWFzayAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9BQlJFTl9Qb3MgICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IEFCUkVOIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RDVExfQUJSRU5fTXNrICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UQ1RMX0FCUkVOX1BvcykgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBBQlJFTiBNYXNrICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfREFUV0tFTl9Qb3MgICAgICAgICg5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBEQVRXS0VOIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0RBVFdLRU5fTXNrICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVENUTF9EQVRXS0VOX1BvcykgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogREFUV0tFTiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0NUU1dLRU5fUG9zICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogQ1RTV0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9DVFNXS0VOX01zayAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RDVExfQ1RTV0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IENUU1dLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9XQUtFQ05UX1BvcyAgICAgICAgKDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IFdBS0VDTlQgUG9zaXRpb24gICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RDVExfV0FLRUNOVF9Nc2sgICAgICAgICgweGZ1bCA8PCBVVUFSVF9QUk9UQ1RMX1dBS0VDTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBXQUtFQ05UIE1hc2sgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfQlJERVRJVFZfUG9zICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBCUkRFVElUViBQb3NpdGlvbiAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX0JSREVUSVRWX01zayAgICAgICAoMHgxZmZ1bCA8PCBVVUFSVF9QUk9UQ1RMX0JSREVUSVRWX1BvcykgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogQlJERVRJVFYgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX1NUSUNLRU5fUG9zICAgICAgICAoMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogU1RJQ0tFTiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9TVElDS0VOX01zayAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RDVExfU1RJQ0tFTl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IFNUSUNLRU4gTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVENUTF9CQ0VOX1BvcyAgICAgICAgICAgKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RDVEw6IEJDRU4gUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RDVExfQkNFTl9Nc2sgICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UQ1RMX0JDRU5fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBCQ0VOIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RDVExfUFJPVEVOX1BvcyAgICAgICAgICgzMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UQ1RMOiBQUk9URU4gUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UQ1RMX1BST1RFTl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVENUTF9QUk9URU5fUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVENUTDogUFJPVEVOIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9USUVOX0FCUklFTl9Qb3MgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVElFTjogQUJSSUVOIFBvc2l0aW9uICAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVElFTl9BQlJJRU5fTXNrICAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RJRU5fQUJSSUVOX1BvcykgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RJRU46IEFCUklFTiBNYXNrICAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVElFTl9STFNJRU5fUG9zICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RJRU46IFJMU0lFTiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RJRU5fUkxTSUVOX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9USUVOX1JMU0lFTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9USUVOOiBSTFNJRU4gTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfVFhTVElGX1BvcyAgICAgICAgICgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBUWFNUSUYgUG9zaXRpb24gICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UU1RTX1RYU1RJRl9Nc2sgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVFNUU19UWFNUSUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogVFhTVElGIE1hc2sgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UU1RTX1RYRU5ESUZfUG9zICAgICAgICAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogVFhFTkRJRiBQb3NpdGlvbiAgICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19UWEVORElGX01zayAgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RTVFNfVFhFTkRJRl9Qb3MpICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IFRYRU5ESUYgTWFzayAgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19SWFNUSUZfUG9zICAgICAgICAgKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IFJYU1RJRiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfUlhTVElGX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UU1RTX1JYU1RJRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBSWFNUSUYgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfUlhFTkRJRl9Qb3MgICAgICAgICg0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBSWEVORElGIFBvc2l0aW9uICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UU1RTX1JYRU5ESUZfTXNrICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVFNUU19SWEVORElGX1BvcykgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogUlhFTkRJRiBNYXNrICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UU1RTX1BBUklUWUVSUl9Qb3MgICAgICAoNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogUEFSSVRZRVJSIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19QQVJJVFlFUlJfTXNrICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RTVFNfUEFSSVRZRVJSX1BvcykgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IFBBUklUWUVSUiBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19GUk1FUlJfUG9zICAgICAgICAgKDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IEZSTUVSUiBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfRlJNRVJSX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UU1RTX0ZSTUVSUl9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBGUk1FUlIgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfQlJFQUtfUG9zICAgICAgICAgICg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBCUkVBSyBQb3NpdGlvbiAgICAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UU1RTX0JSRUFLX01zayAgICAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVFNUU19CUkVBS19Qb3MpICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogQlJFQUsgTWFzayAgICAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UU1RTX0FCUkRFVElGX1BvcyAgICAgICAoOSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogQUJSREVUSUYgUG9zaXRpb24gICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19BQlJERVRJRl9Nc2sgICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RTVFNfQUJSREVUSUZfUG9zKSAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IEFCUkRFVElGIE1hc2sgICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19SWEJVU1lfUG9zICAgICAgICAgKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IFJYQlVTWSBQb3NpdGlvbiAgICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfUlhCVVNZX01zayAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UU1RTX1JYQlVTWV9Qb3MpICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBSWEJVU1kgTWFzayAgICAgICAgICAqLworCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfQUJFUlJTVFNfUG9zICAgICAgICgxMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBBQkVSUlNUUyBQb3NpdGlvbiAgICAqLworI2RlZmluZSBVVUFSVF9QUk9UU1RTX0FCRVJSU1RTX01zayAgICAgICAoMHgxdWwgPDwgVVVBUlRfUFJPVFNUU19BQkVSUlNUU19Qb3MpICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogQUJFUlJTVFMgTWFzayAgICAgICAgKi8KKworI2RlZmluZSBVVUFSVF9QUk9UU1RTX0NUU1NZTkNMVl9Qb3MgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVVBUlRfVDo6UFJPVFNUUzogQ1RTU1lOQ0xWIFBvc2l0aW9uICAgKi8KKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19DVFNTWU5DTFZfTXNrICAgICAgKDB4MXVsIDw8IFVVQVJUX1BST1RTVFNfQ1RTU1lOQ0xWX1BvcykgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IENUU1NZTkNMViBNYXNrICAgICAgICovCisKKyNkZWZpbmUgVVVBUlRfUFJPVFNUU19DVFNMVl9Qb3MgICAgICAgICAgKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVVQVJUX1Q6OlBST1RTVFM6IENUU0xWIFBvc2l0aW9uICAgICAgICovCisjZGVmaW5lIFVVQVJUX1BST1RTVFNfQ1RTTFZfTXNrICAgICAgICAgICgweDF1bCA8PCBVVUFSVF9QUk9UU1RTX0NUU0xWX1BvcykgICAgICAgICAgICAgICAgLyohPCBVVUFSVF9UOjpQUk9UU1RTOiBDVFNMViBNYXNrICAgICAgICAgICAqLworCisvKipAfSovIC8qIFVVQVJUX0NPTlNUICovCisvKipAfSovIC8qIGVuZCBvZiBVVUFSVCByZWdpc3RlciBncm91cCAqLworLyoqQH0qLyAvKiBlbmQgb2YgUkVHSVNURVIgZ3JvdXAgKi8KKworI2VuZGlmIC8qIF9fVVVBUlRfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3dkdF9yZWcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS93ZHRfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5YTgyOQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvRGV2aWNlL051dm90b24vTTIzNTEvSW5jbHVkZS93ZHRfcmVnLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB3ZHRfcmVnLmgKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIFdEVCByZWdpc3RlciBkZWZpbml0aW9uIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19XRFRfUkVHX0hfXworI2RlZmluZSBfX1dEVF9SRUdfSF9fCisKKy8qKiBAYWRkdG9ncm91cCBSRUdJU1RFUiBDb250cm9sIFJlZ2lzdGVyCisKKyAgQHsKKworKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2F0Y2ggRG9nIFRpbWVyIENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgICBAYWRkdG9ncm91cCBXRFQgV2F0Y2ggRG9nIFRpbWVyIENvbnRyb2xsZXIoV0RUKQorICAgIE1lbW9yeSBNYXBwZWQgU3RydWN0dXJlIGZvciBXRFQgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBXRFRfVDo6Q1RMCisgICAgICogT2Zmc2V0OiAweDAwICBXRFQgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFsxXSAgICAgfFJTVEVOICAgICB8V0RUIFRpbWUtb3V0IFJlc2V0IEVuYWJsZSBDb250cm9sIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldHRpbmcgdGhpcyBiaXQgd2lsbCBlbmFibGUgdGhlIFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZnVuY3Rpb24gSWYgdGhlIFdEVCB1cCBjb3VudGVyIHZhbHVlIGhhcyBub3QgYmVlbiBjbGVhcmVkIGFmdGVyIHRoZSBzcGVjaWZpYyBXRFQgcmVzZXQgZGVsYXkgcGVyaW9kIGV4cGlyZXMuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZnVuY3Rpb24gRGlzYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZnVuY3Rpb24gRW5hYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzJdICAgICB8UlNURiAgICAgIHxXRFQgVGltZS1vdXQgUmVzZXQgRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoaXMgYml0IGluZGljYXRlcyB0aGUgc3lzdGVtIGhhcyBiZWVuIHJlc2V0IGJ5IFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZXZlbnQgb3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGV2ZW50IGRpZCBub3Qgb2NjdXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZXZlbnQgaGFzIGJlZW4gb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFszXSAgICAgfElGICAgICAgICB8V0RUIFRpbWUtb3V0IEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgd2lsbCBzZXQgdG8gMSB3aGlsZSBXRFQgdXAgY291bnRlciB2YWx1ZSByZWFjaGVzIHRoZSBzZWxlY3RlZCBXRFQgdGltZS1vdXQgaW50ZXJ2YWwKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV0RUIHRpbWUtb3V0IGludGVycnVwdCBldmVudCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1ci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV0RUIHRpbWUtb3V0IGludGVycnVwdCBpbnRlcnJ1cHQgZXZlbnQgb2NjdXJyZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gaXQuCisgICAgICogfFs0XSAgICAgfFdLRU4gICAgICB8V0RUIFRpbWUtb3V0IFdha2UtdXAgRnVuY3Rpb24gQ29udHJvbCAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgd2hpbGUgV0RUIHRpbWUtb3V0IGludGVycnVwdCBmbGFnIElGIChXRFRfQ1RMWzNdKSBpcyBnZW5lcmF0ZWQgdG8gMSBhbmQgaW50ZXJydXB0IGVuYWJsZSBiaXQgSU5URU4gKFdEVF9DVExbNl0pIGlzIGVuYWJsZWQsIHRoZSBXRFQgdGltZS1vdXQgaW50ZXJydXB0IHNpZ25hbCB3aWxsIGdlbmVyYXRlIGEgZXZlbnQgdG8gdHJpZ2dlciBDUFUgd2FrZS11cCB0cmlnZ2VyIGV2ZW50IHRvIGNoaXAuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFRyaWdnZXIgd1dha2UtdXAgdHJpZ2dlciBldmVudCBmdW5jdGlvbiBEaXNhYmxlZCBpZiBXRFQgdGltZS1vdXQgaW50ZXJydXB0IHNpZ25hbCBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFRyaWdnZXIgV2FrZS11cCB0cmlnZ2VyIGV2ZW50IGZ1bmN0aW9uIEVuYWJsZWQgaWYgV0RUIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgZ2VuZXJhdGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogQ2hpcCBjYW4gYmUgd29rZW4tdXAgYnkgd2hpbGUgV0RUIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgZ2VuZXJhdGVkIG9ubHkgaWYgV0RUIGNsb2NrIHNvdXJjZSBpcyBzZWxlY3RlZCB0byAxMCBrSHogKExJUkMgKDEwIGtIeikgb3IgTFhUICgzMiBrSHopLgorICAgICAqIHxbNV0gICAgIHxXS0YgICAgICAgfFdEVCBUaW1lLW91dCBXYWtlLXVwIEZsYWcgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSBXRFQgdGltZS1vdXQgZXZlbnQgaGFzIHRyaWdnZXJlZCBpbnRlcnJ1cHQgY2hpcCB3YWtlLXVwIG9yIG5vdC5mbGFnIHN0YXR1cyBvZiBXRFQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV0RUIGRvZXMgbm90IGNhdXNlIGNoaXAgd2FrZS11cC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gQ2hpcCB3YWtlLXVwIGZyb20gSWRsZSBvciBQb3dlci1kb3duIG1vZGUgaWYgd2hlbiBXRFQgdGltZS1vdXQgaW50ZXJydXB0IHNpZ25hbCBpcyBnZW5lcmF0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTE6IFRoaXMgYml0IGlzIHdyaXRlIHByb3RlY3RlZC4gUmVmZXIgdG8gdGhlIFNZU19SRUdMQ1RMIHJlZ2lzdGVyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUyOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzZdICAgICB8SU5URU4gICAgIHxXRFQgVGltZS1vdXQgSW50ZXJydXB0IEVuYWJsZSBDb250cm9sIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIGVuYWJsZWQsIHdoZW4gV0RUIHRpbWUtb3V0IGV2ZW50IG9jY3VycywgdGhlIElGIChXRFRfQ1RMWzNdKSB3aWxsIGJlIHNldCB0byAxIGFuZCB0aGUgV0RUIHRpbWUtb3V0IGludGVycnVwdCBzaWduYWwgaXMgZ2VuZXJhdGVkIGFuZCBpbmZvcm0gdG8gQ1BVLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXRFQgdGltZS1vdXQgaW50ZXJydXB0IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXRFQgdGltZS1vdXQgaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfFs3XSAgICAgfFdEVEVOICAgICB8V0RUIEVuYWJsZSBDb250cm9sIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBTZXQgV0RUIGNvdW50ZXIgc3RvcCBEaXNhYmxlZCwgYW5kIChUaGlzIGFjdGlvbiB3aWxsIHJlc2V0IHRoZSBpbnRlcm5hbCB1cCBjb3VudGVyIHZhbHVlIHdpbGwgYmUgcmVzZXQgYWxzbykuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFNldCBXRFQgY291bnRlciBzdGFydCBFbmFibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogUGVyZm9ybSBlbmFibGUgb3IgZGlzYWJsZSBXRFRFTiBiaXQgbmVlZHMgMiAqIFdEVF9DTEsgcGVyaW9kIHRvIGJlY29tZSBhY3RpdmUsIHVzZXIgY2FuIHJlYWQgU1lOQyAoV0RUX0NUTFszMF0pIHRvIGNoZWNrIGVuYWJsZS9kaXNhYmxlIGNvbW1hbmQgaXMgY29tcGxldGVkIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMzI6IElmIENXRFRFTlsyOjBdIChjb21iaW5lZCBieSB3aXRoIENvbmZpZzBbMzFdIGFuZCBDb25maWcwWzQ6M10pIGJpdHMgaXMgbm90IGNvbmZpZ3VyZSB0byAweDExMSwgdGhpcyBiaXQgaXMgZm9yY2VkIGFzIDEgYW5kIHVzZXIgY2Fubm90IGNoYW5nZSB0aGlzIGJpdCB0byAwLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUzOiBUaGlzIGJpdCBkaXNhYmxlZCBuZWVkcyAyICogV0RUX0NMSy4KKyAgICAgKiB8WzEwOjhdICB8VE9VVFNFTCAgIHxXRFQgVGltZS1vdXQgSW50ZXJ2YWwgU2VsZWN0aW9uIChXcml0ZSBQcm90ZWN0KQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFRoZXNlIHRocmVlIGJpdHMgc2VsZWN0IHRoZSB0aW1lLW91dCBpbnRlcnZhbCBwZXJpb2QgYWZ0ZXIgZm9yIHRoZSBXRFQgc3RhcnRzIGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMCA9IDI0ICogV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDEgPSAyNiAqIFdEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwID0gMjggKiBXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAxMSA9IDIxMCAqIFdEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAwID0gMjEyICogV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDEgPSAyMTQgKiBXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMCA9IDIxNiAqIFdEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTExID0gMjE4ICogV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiB8WzMwXSAgICB8U1lOQyAgICAgIHxXRFQgRW5hYmxlIENvbnRyb2wgU1lOQyBTWU5DIEZsYWcgSW5kaWNhdG9yIChSZWFkIE9ubHkpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8SWYgdXNlIHRvIHN5bmNocm9uaXphdGlvbiwgc29mdHdhcmUgZXIgY2FuIGNoZWNrIGV4ZWN1dGUgZW5hYmxlL2Rpc2FibGUgdGhpcyBmbGFnIGFmdGVyIGVuYWJsZSBXRFRFTiAoV0RUX0NUTFs3XSksIHRoaXMgZmxhZyBjYW4gYmUgaW5kaWNhdGVkIGVuYWJsZS9kaXNhYmxlIFdEVEVOIGZ1bmN0aW9uIGlzIGJlY29tZSBjb21wbGV0ZWQgb3Igbm90IGFjdGl2ZSBvciBub3QuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNZTkMgZGVsYXkgaXMKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gU2V0IFdEVEVOIGJpdCBpcyBXRFQgZW5hYmxlIGNvbnRyb2wgc3luY2NvbXBsZXRlZGhyb25pemluZyBpcyBjb21wbGV0aW9uLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBTZXQgV0RURU4gYml0IFdEVCBlbmFibGUgY29udHJvbCBpcyBzeW5jaHJvbml6aW5nIGFuZCBub3QgYmVjb21lIGFjdGl2ZSB5ZXQuLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGU6IFBlcmZvcm0gZW5hYmxlIG9yIGRpc2FibGUgV0RURU4gYml0CisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgZW5hYmxlZCBuZWVkcyAyICogV0RUX0NMSyBwZXJpb2QgdG8gYmVjb21lIGFjdGl2ZS4KKyAgICAgKiB8WzMxXSAgICB8SUNFREVCVUcgIHxJQ0UgRGVidWcgTW9kZSBBY2tub3dsZWRnZSBEaXNhYmxlIENvbnRyb2wgKFdyaXRlIFByb3RlY3QpCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdtZW50IGFmZmVjdHMgV0RUIGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdEVCB1cCBjb3VudGVyIHdpbGwgYmUgaGVsZCB3aGlsZSBDUFUgaXMgaGVsZCBieSBJQ0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdtZW50IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdEVCB1cCBjb3VudGVyIHdpbGwga2VlcCBnb2luZyBubyBtYXR0ZXIgQ1BVIGlzIGhlbGQgYnkgSUNFIG9yIG5vdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyB3cml0ZSBwcm90ZWN0ZWQuIFJlZmVyIHRvIHRoZSBTWVNfUkVHTENUTCByZWdpc3Rlci4KKyAgICAgKiBAdmFyIFdEVF9UOjpBTFRDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIFdEVCBBbHRlcm5hdGl2ZSBDb250cm9sIFJlZ2lzdGVyCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogfEJpdHMgICAgfEZpZWxkICAgICB8RGVzY3JpcHRpb25zCisgICAgICogfCA6LS0tLTogfCA6LS0tLTogICB8IDotLS0tIHwKKyAgICAgKiB8WzE6MF0gICB8UlNURFNFTCAgIHxXRFQgUmVzZXQgRGVsYXkgUGVyaW9kIFNlbGVjdGlvbiAoV3JpdGUgUHJvdGVjdCkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXaGVuIFdEVCB0aW1lLW91dCBldmVudCBoYXBwZW5lZCwgdXNlciBoYXMgYSB0aW1lIG5hbWVkIFdEVCBSZXNldCBEZWxheSBQZXJpb2QgdG8gY2xlYXIgZXhlY3V0ZSBXRFQgY291bnRlciBieSBzZXR0aW5nIFJTVENOVCAoV0RUX0NUTFswXSkgcmVzZXQgdG8gcHJldmVudCBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIG9jY3VycmVkIGhhcHBlbmVkCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VXNlciBjYW4gc2VsZWN0IGEgc3VpdGFibGUgc2V0dGluZyBvZiBSU1REU0VMIGZvciBkaWZmZXJlbnQgYXBwbGljYXRpb24gcHJvZ3JhbSBXRFQgUmVzZXQgRGVsYXkgUGVyaW9kLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwID0gV0RUIFJlc2V0IERlbGF5IFBlcmlvZCBpcyAxMDI2ICogV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMSA9IFdEVCBSZXNldCBEZWxheSBQZXJpb2QgaXMgMTMwICogV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMCA9IFdEVCBSZXNldCBEZWxheSBQZXJpb2QgaXMgMTggKiBXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExID0gV0RUIFJlc2V0IERlbGF5IFBlcmlvZCBpcyAzICogV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMTogVGhpcyBiaXQgaXMgd3JpdGUgcHJvdGVjdGVkLiBSZWZlciB0byB0aGUgU1lTX1JFR0xDVEwgcmVnaXN0ZXIuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTI6IFRoaXMgcmVnaXN0ZXIgd2lsbCBiZSByZXNldCB0byAwIGlmIFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZXZlbnQgb2NjdXJyZWQgaGFwcGVuZWQuCisgICAgICogQHZhciBXRFRfVDo6UlNUQ05UCisgICAgICogT2Zmc2V0OiAweDA4ICBXRFQgUmVzZXQgQ291bnRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFJTVENOVCAgICB8V0RUIFJlc2V0IENvdW50ZXIgUmVnaXN0ZXIKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxXcml0aW5nIDB4MDAwMDVBQTUgdG8gdGhpcyByZWdpc3RlciBmaWVsZCB3aWxsIHJlc2V0IHRoZSBpbnRlcm5hbCAxOC1iaXQgV0RUIHVwIGNvdW50ZXIgdmFsdWUgdG8gMC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIFdEVF9SU1RDTlQgaXMgbm90IHdyaXRlIHByb3RlY3RlZCwgYnV0IHRoaXMgUlNUQ05UIChXRFRfQ1RMWzBdKSBpcyB3cml0ZSBwcm90ZWN0ZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogUGVyZm9ybSBSU1RDTlQgdG8gcmVzZXQgY291bnRlciBuZWVkcyAyICogV0RUX0NMSyBwZXJpb2QgdG8gYmVjb21lIGFjdGl2ZS4KKyAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IENUTDsgICAgICAgICAgICAgICAgICAgLyohPCBbMHgwMDAwXSBXRFQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JTyB1aW50MzJfdCBBTFRDVEw7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwNF0gV0RUIEFsdGVybmF0aXZlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fTyAgdWludDMyX3QgUlNUQ05UOyAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDhdIFdEVCBSZXNldCBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBXRFRfVDsKKworLyoqCisgICAgQGFkZHRvZ3JvdXAgV0RUX0NPTlNUIFdEVCBCaXQgRmllbGQgRGVmaW5pdGlvbgorICAgIENvbnN0YW50IERlZmluaXRpb25zIGZvciBXRFQgQ29udHJvbGxlcgorQHsgKi8KKworI2RlZmluZSBXRFRfQ1RMX1JTVEVOX1BvcyAgICAgICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogUlNURU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RUX0NUTF9SU1RFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFdEVF9DVExfUlNURU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFJTVEVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV0RUX0NUTF9SU1RGX1BvcyAgICAgICAgICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFJTVEYgUG9zaXRpb24gICAgICAgICAgICAgICovCisjZGVmaW5lIFdEVF9DVExfUlNURl9Nc2sgICAgICAgICAgICAgICAgICgweDF1bCA8PCBXRFRfQ1RMX1JTVEZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBSU1RGIE1hc2sgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdEVF9DVExfSUZfUG9zICAgICAgICAgICAgICAgICAgICgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBJRiBQb3NpdGlvbiAgICAgICAgICAgICAgICAqLworI2RlZmluZSBXRFRfQ1RMX0lGX01zayAgICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgV0RUX0NUTF9JRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogSUYgTWFzayAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXRFRfQ1RMX1dLRU5fUG9zICAgICAgICAgICAgICAgICAoNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogV0tFTiBQb3NpdGlvbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RUX0NUTF9XS0VOX01zayAgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFdEVF9DVExfV0tFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFdLRU4gTWFzayAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV0RUX0NUTF9XS0ZfUG9zICAgICAgICAgICAgICAgICAgKDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFdLRiBQb3NpdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdEVF9DVExfV0tGX01zayAgICAgICAgICAgICAgICAgICgweDF1bCA8PCBXRFRfQ1RMX1dLRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBXS0YgTWFzayAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdEVF9DVExfSU5URU5fUG9zICAgICAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBJTlRFTiBQb3NpdGlvbiAgICAgICAgICAgICAqLworI2RlZmluZSBXRFRfQ1RMX0lOVEVOX01zayAgICAgICAgICAgICAgICAoMHgxdWwgPDwgV0RUX0NUTF9JTlRFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogSU5URU4gTWFzayAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXRFRfQ1RMX1dEVEVOX1BvcyAgICAgICAgICAgICAgICAoNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogV0RURU4gUG9zaXRpb24gICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RUX0NUTF9XRFRFTl9Nc2sgICAgICAgICAgICAgICAgKDB4MXVsIDw8IFdEVF9DVExfV0RURU5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFdEVEVOIE1hc2sgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV0RUX0NUTF9UT1VUU0VMX1BvcyAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IFRPVVRTRUwgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFdEVF9DVExfVE9VVFNFTF9Nc2sgICAgICAgICAgICAgICgweDd1bCA8PCBXRFRfQ1RMX1RPVVRTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBUT1VUU0VMIE1hc2sgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdEVF9DVExfU1lOQ19Qb3MgICAgICAgICAgICAgICAgICgzMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6Q1RMOiBTWU5DIFBvc2l0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBXRFRfQ1RMX1NZTkNfTXNrICAgICAgICAgICAgICAgICAoMHgxdWwgPDwgV0RUX0NUTF9TWU5DX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogU1lOQyBNYXNrICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXRFRfQ1RMX0lDRURFQlVHX1BvcyAgICAgICAgICAgICAoMzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUX1Q6OkNUTDogSUNFREVCVUcgUG9zaXRpb24gICAgICAgICAgKi8KKyNkZWZpbmUgV0RUX0NUTF9JQ0VERUJVR19Nc2sgICAgICAgICAgICAgKDB4MXVsIDw8IFdEVF9DVExfSUNFREVCVUdfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpDVEw6IElDRURFQlVHIE1hc2sgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV0RUX0FMVENUTF9SU1REU0VMX1BvcyAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdEVF9UOjpBTFRDVEw6IFJTVERTRUwgUG9zaXRpb24gICAgICAgICovCisjZGVmaW5lIFdEVF9BTFRDVExfUlNURFNFTF9Nc2sgICAgICAgICAgICgweDN1bCA8PCBXRFRfQUxUQ1RMX1JTVERTRUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6QUxUQ1RMOiBSU1REU0VMIE1hc2sgICAgICAgICAgICAqLworCisjZGVmaW5lIFdEVF9SU1RDTlRfUlNUQ05UX1BvcyAgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXRFRfVDo6UlNUQ05UOiBSU1RDTlQgUG9zaXRpb24gICAgICAgICAqLworI2RlZmluZSBXRFRfUlNUQ05UX1JTVENOVF9Nc2sgICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFdEVF9SU1RDTlRfUlNUQ05UX1BvcykgICAgICAgICAgIC8qITwgV0RUX1Q6OlJTVENOVDogUlNUQ05UIE1hc2sgICAgICAgICAgICAgKi8KKworCisvKipAfSovIC8qIFdEVF9DT05TVCAqLworLyoqQH0qLyAvKiBlbmQgb2YgV0RUIHJlZ2lzdGVyIGdyb3VwICovCisvKipAfSovIC8qIGVuZCBvZiBSRUdJU1RFUiBncm91cCAqLworCisjZW5kaWYgLyogX19XRFRfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3d3ZHRfcmVnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0RldmljZS9OdXZvdG9uL00yMzUxL0luY2x1ZGUvd3dkdF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDgwYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9EZXZpY2UvTnV2b3Rvbi9NMjM1MS9JbmNsdWRlL3d3ZHRfcmVnLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB3d2R0X3JlZy5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBXV0RUIHJlZ2lzdGVyIGRlZmluaXRpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1dXRFRfUkVHX0hfXworI2RlZmluZSBfX1dXRFRfUkVHX0hfXworCisvKiogQGFkZHRvZ3JvdXAgUkVHSVNURVIgQ29udHJvbCBSZWdpc3RlcgorCisgIEB7CisKKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdpbmRvdyBXYXRjaGRvZyBUaW1lciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICAgIEBhZGR0b2dyb3VwIFdXRFQgV2luZG93IFdhdGNoZG9nIFRpbWVyKFdXRFQpCisgICAgTWVtb3J5IE1hcHBlZCBTdHJ1Y3R1cmUgZm9yIFdXRFQgQ29udHJvbGxlcgorQHsgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKworCisgICAgLyoqCisgICAgICogQHZhciBXV0RUX1Q6OlJMRENOVAorICAgICAqIE9mZnNldDogMHgwMCAgV1dEVCBSZWxvYWQgQ291bnRlciBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFszMTowXSAgfFJMRENOVCAgICB8V1dEVCBSZWxvYWQgQ291bnRlciBSZWdpc3RlcgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdyaXRpbmcgb25seSAweDAwMDA1QUE1IHRvIHRoaXMgcmVnaXN0ZXIgd2lsbCByZWxvYWQgdGhlIFdXRFQgY291bnRlciB2YWx1ZSB0byAweDNGLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfE5vdGUxOiBVc2VyIGNhbiBvbmx5IHdyaXRlIGV4ZWN1dGUgV1dEVF9STERDTlQgcmVnaXN0ZXIgdG8gdGhlIHJlbG9hZCBXV0RUIGNvdW50ZXIgdmFsdWUgY29tbWFuZCB3aGVuIGN1cnJlbnQgY3VycmVudCBXV0RUIGNvdW50ZXIgdmFsdWUgQ05UREFUIChXV0RUX0NOVFs1OjBdKSBpcyBiZXR3ZWVuIDEwIGFuZCBDTVBEQVQgKFdXRFRfQ1RMWzIxOjE2XSkKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB1c2VyIHdyaXRlcyAweDAwMDA1QUE1IGluIFdXRFRfUkxEQ05UIHJlZ2lzdGVyIHdoZW4gY3VycmVudCBjdXJyZW50IENOVERBVFdXRFQgY291bnRlciB2YWx1ZSBpcyBsYXJnZXIgdGhhbiBDTVBEQVQsIFdXRFQgcmVzZXQgc2lnbmFsIHN5c3RlbSBldmVudCB3aWxsIGJlIGdlbmVyYXRlZCBpbW1lZGlhdGVseS4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlMjogRXhlY3V0ZSBXV0RUIGNvdW50ZXIgcmVsb2FkIGFsd2F5cyBuZWVkcyAoV1dEVF9DTEsgKjMpIHBlcmlvZCB0byByZWxvYWQgQ05UREFUIHRvIDB4M0YgYW5kIGludGVybmFsIHByZXNjYWxlIGNvdW50ZXIgd2lsbCBiZSByZXNldCBhbHNvLgorICAgICAqIEB2YXIgV1dEVF9UOjpDVEwKKyAgICAgKiBPZmZzZXQ6IDB4MDQgIFdXRFQgQ29udHJvbCBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdXRFRFTiAgICB8V1dEVCBFbmFibGUgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxTZXQgdGhpcyBiaXQgdG8gZW5hYmxlIHN0YXJ0IFdXRFQgY291bnRlciBjb3VudGluZy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwID0gV1dEVCBjb3VudGVyIGlzIHN0b3BwZWQuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IFdXRFQgY291bnRlciBpcyBzdGFydGluZyBjb3VudGluZy4KKyAgICAgKiB8WzFdICAgICB8SU5URU4gICAgIHxXV0RUIEludGVycnVwdCBFbmFibGUgQ29udHJvbCBCaXQKKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxJZiB0aGlzIGJpdCBpcyBlbmFibGVkLCB3aGVuIFdXRFRJRiAoV1dEVF9TVEFUVVNbMF0pIGlzIHNldCB0byAxLCB0aGUgV1dEVCBjb3VudGVyIGNvbXBhcmUgbWF0Y2ggaW50ZXJydXB0IHNpZ25hbCBpcyBnZW5lcmF0ZWQgYW5kIGluZm9ybSB0byBDUFUuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IFdXRFQgY291bnRlciBjb21wYXJlIG1hdGNoIGludGVycnVwdCBEaXNhYmxlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV1dEVCBjb3VudGVyIGNvbXBhcmUgbWF0Y2ggaW50ZXJydXB0IEVuYWJsZWQuCisgICAgICogfFsxMTo4XSAgfFBTQ1NFTCAgICB8V1dEVCBDb3VudGVyIFByZXNjYWxlIFBlcmlvZCBTZWxlY3Rpb24KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDAwID0gUHJlLXNjYWxlIGlzIDE7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgMSAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDAwMSA9IFByZS1zY2FsZSBpcyAyOyBNYXggdGltZS1vdXQgcGVyaW9kIGlzIDIgKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAwMTAgPSBQcmUtc2NhbGUgaXMgNDsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyA0ICogNjQgKiBXV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwwMDExID0gUHJlLXNjYWxlIGlzIDg7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgOCAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMCA9IFByZS1zY2FsZSBpcyAxNjsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyAxNiAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDEwMSA9IFByZS1zY2FsZSBpcyAzMjsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyAzMiAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMCA9IFByZS1zY2FsZSBpcyA2NDsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyA2NCAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MDExMSA9IFByZS1zY2FsZSBpcyAxMjg7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgMTI4ICogNjQgKiBXV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDAwID0gUHJlLXNjYWxlIGlzIDE5MjsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyAxOTIgKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEwMDEgPSBQcmUtc2NhbGUgaXMgMjU2OyBNYXggdGltZS1vdXQgcGVyaW9kIGlzIDI1NiAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTAxMCA9IFByZS1zY2FsZSBpcyAzODQ7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgMzg0ICogNjQgKiBXV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMDExID0gUHJlLXNjYWxlIGlzIDUxMjsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyA1MTIgKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMDAgPSBQcmUtc2NhbGUgaXMgNzY4OyBNYXggdGltZS1vdXQgcGVyaW9kIGlzIDc2OCAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MTEwMSA9IFByZS1zY2FsZSBpcyAxMDI0OyBNYXggdGltZS1vdXQgcGVyaW9kIGlzIDEwMjQgKiA2NCAqIFdXRFRfQ0xLLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDExMTAgPSBQcmUtc2NhbGUgaXMgMTUzNjsgTWF4IHRpbWUtb3V0IHBlcmlvZCBpcyAxNTM2ICogNjQgKiBXV0RUX0NMSy4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxMTExID0gUHJlLXNjYWxlIGlzIDIwNDg7IE1heCB0aW1lLW91dCBwZXJpb2QgaXMgMjA0OCAqIDY0ICogV1dEVF9DTEsuCisgICAgICogfFsyMToxNl0gfENNUERBVCAgICB8V1dEVCBXaW5kb3cgQ29tcGFyZSBSZWdpc3RlciBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFNldCB0aGlzIHJlZ2lzdGVyIGZpZWxkIHRvIGFkanVzdCB0aGUgdmFsaWQgcmVsb2FkIHdpbmRvdyBpbnRlcnZhbCB3aGVuIFdXRFRJRiAoV1dEVF9TVEFUVVNbMF0pIGlzIGdlbmVyYXRlZC4uCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8Tm90ZTogVXNlciBjYW4gb25seSB3cml0ZSBXV0RUX1JMRENOVCByZWdpc3RlciB0byByZWxvYWQgV1dEVCBjb3VudGVyIHZhbHVlIHdoZW4gY3VycmVudCBXV0RUIENOVERBVCAoV1dEVF9DTlRbNTpdKSBpcyBjb3VudGVyIHZhbHVlIGJldHdlZW4gMTAgYW5kIENNUERBVAorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHVzZXIgd3JpdGVzIDB4MDAwMDVBQTUgaW4gV1dEVF9STERDTlQgcmVnaXN0ZXIgd2hlbiBjdXJyZW50IFdXRFQgY291bnRlciB2YWx1ZSBDTlREQVQgaXMgbGFyZ2VyIHRoYW4gQ01QREFULCBXV0RUIHJlc2V0IHN5c3RlbSBldmVudCBzaWduYWwgd2lsbCBiZSBnZW5lcmF0ZWQgaW1tZWRpYXRlbHkuCisgICAgICogfFszMV0gICAgfElDRURFQlVHICB8SUNFIERlYnVnIE1vZGUgQWNrbm93bGVkZ2UgRGlzYWJsZSBDb250cm9sCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdtZW50IGVmZmVjdHMgV1dEVCBjb3VudGVyIGNvdW50aW5nLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdXRFQgZG93biBjb3VudGVyIHdpbGwgYmUgaGVsZCB3aGlsZSBDUFUgaXMgaGVsZCBieSBJQ0UuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MSA9IElDRSBkZWJ1ZyBtb2RlIGFja25vd2xlZGdtZW50IERpc2FibGVkLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfFdXRFQgZG93biBjb3VudGVyIHdpbGwga2VlcCBnb2luZyBjb3VudGluZyBubyBtYXR0ZXIgQ1BVIGlzIGhlbGQgYnkgSUNFIG9yIG5vdC4KKyAgICAgKiBAdmFyIFdXRFRfVDo6U1RBVFVTCisgICAgICogT2Zmc2V0OiAweDA4ICBXV0RUIFN0YXR1cyBSZWdpc3RlcgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIHxCaXRzICAgIHxGaWVsZCAgICAgfERlc2NyaXB0aW9ucworICAgICAqIHwgOi0tLS06IHwgOi0tLS06ICAgfCA6LS0tLSB8CisgICAgICogfFswXSAgICAgfFdXRFRJRiAgICB8V1dEVCBDb21wYXJlIE1hdGNoIEludGVycnVwdCBGbGFnCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8VGhpcyBiaXQgaW5kaWNhdGVzIHRoZSB0aGF0IGN1cnJlbnQgQ05UREFUIChXV0RUX0NOVFs1OjBdKSBtYXRjaGVzIHRoZSBDTVBEQVQgKFdXRFRfQ1RMWzIxOjE2XSlpbnRlcnJ1cHQgZmxhZyBzdGF0dXMgb2YgV1dEVCB3aGlsZSBXV0RUIGNvdW50ZXIgdmFsdWUgbWF0Y2hlcyBDTVBEQVQgKFdXRFRfQ1RMWzIxOjE2XSkuCisgICAgICogfCAgICAgICAgfCAgICAgICAgICB8MCA9IE5vIGVmZmVjdC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHwxID0gV1dEVCBXV0RUIENOVERBVCBjb3VudGVyIHZhbHVlIG1hdGNoZXMgdGhlIENNUERBVC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiB8WzFdICAgICB8V1dEVFJGICAgIHxXV0RUIFRpbWVyLW91dCBSZXNldCBTeXN0ZW0gRmxhZworICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfElmIHRoaXMgYml0IGlzIHNldCB0byAxLCBpdCBUaGlzIGJpdCBpbmRpY2F0ZXMgdGhlIHRoYXQgc3lzdGVtIGhhcyBiZWVuIHJlc2V0IGJ5IFdXRFQgY291bnRlciB0aW1lLW91dCByZXNldCBzeXN0ZW0gZXZlbnQub3Igbm90LgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDAgPSBXV0RUIHRpbWUtb3V0IHJlc2V0IHN5c3RlbSBldmVudCBkaWQgbm90IG9jY3VyLgorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfDEgPSBXV0RUIHRpbWUtb3V0IHJlc2V0IHN5c3RlbSBldmVudCBvY2N1cnJlZC4KKyAgICAgKiB8ICAgICAgICB8ICAgICAgICAgIHxOb3RlOiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdC4KKyAgICAgKiBAdmFyIFdXRFRfVDo6Q05UCisgICAgICogT2Zmc2V0OiAweDBDICBXV0RUIENvdW50ZXIgVmFsdWUgUmVnaXN0ZXIKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB8Qml0cyAgICB8RmllbGQgICAgIHxEZXNjcmlwdGlvbnMKKyAgICAgKiB8IDotLS0tOiB8IDotLS0tOiAgIHwgOi0tLS0gfAorICAgICAqIHxbNTowXSAgIHxDTlREQVQgICAgfFdXRFQgQ291bnRlciBWYWx1ZQorICAgICAqIHwgICAgICAgIHwgICAgICAgICAgfENOVERBVCB3aWxsIGJlIHVwZGF0ZWQgY29udGludW91c2x5IHRvIG1vbml0b3IgNi1iaXQgV1dEVCBkb3duIGNvdW50ZXIgdmFsdWUuCisgICAgICovCisgICAgX19PICB1aW50MzJfdCBSTERDTlQ7ICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwMF0gV1dEVCBSZWxvYWQgQ291bnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgQ1RMOyAgICAgICAgICAgICAgICAgICAvKiE8IFsweDAwMDRdIFdXRFQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFNUQVRVUzsgICAgICAgICAgICAgICAgLyohPCBbMHgwMDA4XSBXV0RUIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19JICB1aW50MzJfdCBDTlQ7ICAgICAgICAgICAgICAgICAgIC8qITwgWzB4MDAwY10gV1dEVCBDb3VudGVyIFZhbHVlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCit9IFdXRFRfVDsKKworCisvKioKKyAgICBAYWRkdG9ncm91cCBXV0RUX0NPTlNUIFdXRFQgQml0IEZpZWxkIERlZmluaXRpb24KKyAgICBDb25zdGFudCBEZWZpbml0aW9ucyBmb3IgV1dEVCBDb250cm9sbGVyCitAeyAqLworCisjZGVmaW5lIFdXRFRfUkxEQ05UX1JMRENOVF9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OlJMRENOVDogUkxEQ05UIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBXV0RUX1JMRENOVF9STERDTlRfTXNrICAgICAgICAgICAoMHhmZmZmZmZmZnVsIDw8IFdXRFRfUkxEQ05UX1JMRENOVF9Qb3MpICAgICAgICAgIC8qITwgV1dEVF9UOjpSTERDTlQ6IFJMRENOVCBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBXV0RUX0NUTF9XV0RURU5fUG9zICAgICAgICAgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpDVEw6IFdXRFRFTiBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgV1dEVF9DVExfV1dEVEVOX01zayAgICAgICAgICAgICAgKDB4MXVsIDw8IFdXRFRfQ1RMX1dXRFRFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6Q1RMOiBXV0RURU4gTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV1dEVF9DVExfSU5URU5fUG9zICAgICAgICAgICAgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6Q1RMOiBJTlRFTiBQb3NpdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIFdXRFRfQ1RMX0lOVEVOX01zayAgICAgICAgICAgICAgICgweDF1bCA8PCBXV0RUX0NUTF9JTlRFTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OkNUTDogSU5URU4gTWFzayAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdXRFRfQ1RMX1BTQ1NFTF9Qb3MgICAgICAgICAgICAgICg4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OkNUTDogUFNDU0VMIFBvc2l0aW9uICAgICAgICAgICAqLworI2RlZmluZSBXV0RUX0NUTF9QU0NTRUxfTXNrICAgICAgICAgICAgICAoMHhmdWwgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpDVEw6IFBTQ1NFTCBNYXNrICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBXV0RUX0NUTF9DTVBEQVRfUG9zICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpDVEw6IENNUERBVCBQb3NpdGlvbiAgICAgICAgICAgKi8KKyNkZWZpbmUgV1dEVF9DVExfQ01QREFUX01zayAgICAgICAgICAgICAgKDB4M2Z1bCA8PCBXV0RUX0NUTF9DTVBEQVRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6Q1RMOiBDTVBEQVQgTWFzayAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgV1dEVF9DVExfSUNFREVCVUdfUG9zICAgICAgICAgICAgKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6Q1RMOiBJQ0VERUJVRyBQb3NpdGlvbiAgICAgICAgICovCisjZGVmaW5lIFdXRFRfQ1RMX0lDRURFQlVHX01zayAgICAgICAgICAgICgweDF1bCA8PCBXV0RUX0NUTF9JQ0VERUJVR19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OkNUTDogSUNFREVCVUcgTWFzayAgICAgICAgICAgICAqLworCisjZGVmaW5lIFdXRFRfU1RBVFVTX1dXRFRJRl9Qb3MgICAgICAgICAgICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OlNUQVRVUzogV1dEVElGIFBvc2l0aW9uICAgICAgICAqLworI2RlZmluZSBXV0RUX1NUQVRVU19XV0RUSUZfTXNrICAgICAgICAgICAoMHgxdWwgPDwgV1dEVF9TVEFUVVNfV1dEVElGX1BvcykgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpTVEFUVVM6IFdXRFRJRiBNYXNrICAgICAgICAgICAgKi8KKworI2RlZmluZSBXV0RUX1NUQVRVU19XV0RUUkZfUG9zICAgICAgICAgICAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dEVF9UOjpTVEFUVVM6IFdXRFRSRiBQb3NpdGlvbiAgICAgICAgKi8KKyNkZWZpbmUgV1dEVF9TVEFUVVNfV1dEVFJGX01zayAgICAgICAgICAgKDB4MXVsIDw8IFdXRFRfU1RBVFVTX1dXRFRSRl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6U1RBVFVTOiBXV0RUUkYgTWFzayAgICAgICAgICAgICovCisKKyNkZWZpbmUgV1dEVF9DTlRfQ05UREFUX1BvcyAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXRFRfVDo6Q05UOiBDTlREQVQgUG9zaXRpb24gICAgICAgICAgICovCisjZGVmaW5lIFdXRFRfQ05UX0NOVERBVF9Nc2sgICAgICAgICAgICAgICgweDNmdWwgPDwgV1dEVF9DTlRfQ05UREFUX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBXV0RUX1Q6OkNOVDogQ05UREFUIE1hc2sgICAgICAgICAgICAgICAqLworCisvKipAfSovIC8qIFdXRFRfQ09OU1QgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFdXRFQgcmVnaXN0ZXIgZ3JvdXAgKi8KKy8qKkB9Ki8gLyogZW5kIG9mIFJFR0lTVEVSIGdyb3VwICovCisKKyNlbmRpZiAvKiBfX1dXRFRfUkVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvYWNtcC5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvYWNtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODk2YjgKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9hY21wLmgKQEAgLTAsMCArMSwzODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBBQ01QLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIFNlcmllcyBBQ01QIERyaXZlciBIZWFkZXIgRmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BQ01QX0hfXworI2RlZmluZSBfX0FDTVBfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBBQ01QX0RyaXZlciBBQ01QIERyaXZlcgorICBAeworKi8KKworCisvKiogQGFkZHRvZ3JvdXAgQUNNUF9FWFBPUlRFRF9DT05TVEFOVFMgQUNNUCBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBBQ01QX0NUTCBjb25zdGFudCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEFDTVBfQ1RMX0ZJTFRTRUxfT0ZGICAgICAgICAgKDBVTCA8PCAxMykgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciBmaWx0ZXIgZnVuY3Rpb24gZGlzYWJsZWQuICovCisjZGVmaW5lIEFDTVBfQ1RMX0ZJTFRTRUxfMVBDTEsgICAgICAgKDFVTCA8PCAxMykgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciAxIFBDTEsgZmlsdGVyIGNvdW50LiAqLworI2RlZmluZSBBQ01QX0NUTF9GSUxUU0VMXzJQQ0xLICAgICAgICgyVUwgPDwgMTMpIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3IgMiBQQ0xLIGZpbHRlciBjb3VudC4gKi8KKyNkZWZpbmUgQUNNUF9DVExfRklMVFNFTF80UENMSyAgICAgICAoM1VMIDw8IDEzKSAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIDQgUENMSyBmaWx0ZXIgY291bnQuICovCisjZGVmaW5lIEFDTVBfQ1RMX0ZJTFRTRUxfOFBDTEsgICAgICAgKDRVTCA8PCAxMykgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciA4IFBDTEsgZmlsdGVyIGNvdW50LiAqLworI2RlZmluZSBBQ01QX0NUTF9GSUxUU0VMXzE2UENMSyAgICAgICg1VUwgPDwgMTMpIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3IgMTYgUENMSyBmaWx0ZXIgY291bnQuICovCisjZGVmaW5lIEFDTVBfQ1RMX0ZJTFRTRUxfMzJQQ0xLICAgICAgKDZVTCA8PCAxMykgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciAzMiBQQ0xLIGZpbHRlciBjb3VudC4gKi8KKyNkZWZpbmUgQUNNUF9DVExfRklMVFNFTF82NFBDTEsgICAgICAoN1VMIDw8IDEzKSAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIDY0IFBDTEsgZmlsdGVyIGNvdW50LiAqLworI2RlZmluZSBBQ01QX0NUTF9JTlRQT0xfUkYgICAgICAgICAgICgwVUwgPDwgOCkgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3Igc2VsZWN0aW5nIHJpc2luZyBlZGdlIGFuZCBmYWxsaW5nIGVkZ2UgYXMgaW50ZXJydXB0IGNvbmRpdGlvbi4gKi8KKyNkZWZpbmUgQUNNUF9DVExfSU5UUE9MX1IgICAgICAgICAgICAoMVVMIDw8IDgpICAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIHNlbGVjdGluZyByaXNpbmcgZWRnZSBhcyBpbnRlcnJ1cHQgY29uZGl0aW9uLiAqLworI2RlZmluZSBBQ01QX0NUTF9JTlRQT0xfRiAgICAgICAgICAgICgyVUwgPDwgOCkgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3Igc2VsZWN0aW5nIGZhbGxpbmcgZWRnZSBhcyBpbnRlcnJ1cHQgY29uZGl0aW9uLiAqLworI2RlZmluZSBBQ01QX0NUTF9QT1NTRUxfUDAgICAgICAgICAgICgwVUwgPDwgNikgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3Igc2VsZWN0aW5nIEFDTVB4X1AwIHBpbiBhcyB0aGUgc291cmNlIG9mIEFDTVAgVisuICovCisjZGVmaW5lIEFDTVBfQ1RMX1BPU1NFTF9QMSAgICAgICAgICAgKDFVTCA8PCA2KSAgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciBzZWxlY3RpbmcgQUNNUHhfUDEgcGluIGFzIHRoZSBzb3VyY2Ugb2YgQUNNUCBWKy4gKi8KKyNkZWZpbmUgQUNNUF9DVExfUE9TU0VMX1AyICAgICAgICAgICAoMlVMIDw8IDYpICAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIHNlbGVjdGluZyBBQ01QeF9QMiBwaW4gYXMgdGhlIHNvdXJjZSBvZiBBQ01QIFYrLiAqLworI2RlZmluZSBBQ01QX0NUTF9QT1NTRUxfUDMgICAgICAgICAgICgzVUwgPDwgNikgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3Igc2VsZWN0aW5nIEFDTVB4X1AzIHBpbiBhcyB0aGUgc291cmNlIG9mIEFDTVAgVisuICovCisjZGVmaW5lIEFDTVBfQ1RMX05FR1NFTF9QSU4gICAgICAgICAgKDBVTCA8PCA0KSAgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciBzZWxlY3RpbmcgdGhlIHZvbHRhZ2Ugb2YgQUNNUCBuZWdhdGl2ZSBpbnB1dCBwaW4gYXMgdGhlIHNvdXJjZSBvZiBBQ01QIFYtLiAqLworI2RlZmluZSBBQ01QX0NUTF9ORUdTRUxfQ1JWICAgICAgICAgICgxVUwgPDwgNCkgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3Igc2VsZWN0aW5nIGludGVybmFsIGNvbXBhcmF0b3IgcmVmZXJlbmNlIHZvbHRhZ2UgYXMgdGhlIHNvdXJjZSBvZiBBQ01QIFYtLiAqLworI2RlZmluZSBBQ01QX0NUTF9ORUdTRUxfVkJHICAgICAgICAgICgyVUwgPDwgNCkgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3Igc2VsZWN0aW5nIGludGVybmFsIEJhbmQtZ2FwIHZvbHRhZ2UgYXMgdGhlIHNvdXJjZSBvZiBBQ01QIFYtLiAqLworI2RlZmluZSBBQ01QX0NUTF9ORUdTRUxfREFDICAgICAgICAgICgzVUwgPDwgNCkgIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3Igc2VsZWN0aW5nIERBQyBvdXRwdXQgdm9sdGFnZSBhcyB0aGUgc291cmNlIG9mIEFDTVAgVi0uICovCisjZGVmaW5lIEFDTVBfQ1RMX0hZU1RFUkVTSVNfMzBNViAgICAgKDNVTCA8PCAyNCkgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciBlbmFibGluZyB0aGUgaHlzdGVyZXNpcyBmdW5jdGlvbiBhdCAzMG1WLiAqLworI2RlZmluZSBBQ01QX0NUTF9IWVNURVJFU0lTXzIwTVYgICAgICgyVUwgPDwgMjQpIC8qITwgQUNNUF9DVEwgc2V0dGluZyBmb3IgZW5hYmxpbmcgdGhlIGh5c3RlcmVzaXMgZnVuY3Rpb24gYXQgMjBtVi4gKi8KKyNkZWZpbmUgQUNNUF9DVExfSFlTVEVSRVNJU18xME1WICAgICAoMVVMIDw8IDI0KSAvKiE8IEFDTVBfQ1RMIHNldHRpbmcgZm9yIGVuYWJsaW5nIHRoZSBoeXN0ZXJlc2lzIGZ1bmN0aW9uIGF0IDEwbVYuICovCisjZGVmaW5lIEFDTVBfQ1RMX0hZU1RFUkVTSVNfRElTQUJMRSAgKDBVTCA8PCAyKSAgLyohPCBBQ01QX0NUTCBzZXR0aW5nIGZvciBkaXNhYmxpbmcgdGhlIGh5c3RlcmVzaXMgZnVuY3Rpb24uICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEFDTVBfVlJFRiBjb25zdGFudCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQUNNUF9WUkVGX0NSVlNTRUxfVkREQSAgICAgICAoMFVMIDw8IDYpICAvKiE8IEFDTVBfVlJFRiBzZXR0aW5nIGZvciBzZWxlY3RpbmcgYW5hbG9nIHN1cHBseSB2b2x0YWdlIFZEREEgYXMgdGhlIENSViBzb3VyY2Ugdm9sdGFnZSAqLworI2RlZmluZSBBQ01QX1ZSRUZfQ1JWU1NFTF9JTlRWUkVGICAgICgxVUwgPDwgNikgIC8qITwgQUNNUF9WUkVGIHNldHRpbmcgZm9yIHNlbGVjdGluZyBpbnRlcm5hbCByZWZlcmVuY2Ugdm9sdGFnZSBhcyB0aGUgQ1JWIHNvdXJjZSB2b2x0YWdlICovCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBBQ01QX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBBQ01QX0VYUE9SVEVEX0ZVTkNUSU9OUyBBQ01QIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIERlZmluZSBNYWNyb3MgYW5kIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIG91dHB1dCBpbnZlcnNlIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgQUNNUE9JTlYgYml0IG9mIEFDTVBfQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBvdXRwdXQgaW52ZXJzZSBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgQUNNUF9FTkFCTEVfT1VUUFVUX0lOVkVSU0UoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSB8PSBBQ01QX0NUTF9BQ01QT0lOVl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBvdXRwdXQgaW52ZXJzZSBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgQUNNUE9JTlYgYml0IG9mIEFDTVBfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgb3V0cHV0IGludmVyc2UgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEFDTVBfRElTQUJMRV9PVVRQVVRfSU5WRVJTRShhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICY9IH5BQ01QX0NUTF9BQ01QT0lOVl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VsZWN0IEFDTVAgbmVnYXRpdmUgaW5wdXQgc291cmNlCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEBwYXJhbVtpbl0gdTMyU3JjIGlzIGNvbXBhcmF0b3IgbmVnYXRpdmUgaW5wdXQgc2VsZWN0aW9uLiBJbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfTkVHU0VMX1BJTgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX05FR1NFTF9DUlYKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9ORUdTRUxfVkJHCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfTkVHU0VMX0RBQworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgTkVHU0VMIChBQ01QX0NUTFs1OjRdKSB0byBkZXRlcm1pbmUgdGhlIHNvdXJjZSBvZiBuZWdhdGl2ZSBpbnB1dC4KKyAgKi8KKyNkZWZpbmUgQUNNUF9TRVRfTkVHX1NSQyhhY21wLCB1MzJDaE51bSwgdTMyU3JjKSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gPSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gJiB+QUNNUF9DVExfTkVHU0VMX01zaykgfCAodTMyU3JjKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgaHlzdGVyZXNpcyBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KKyNkZWZpbmUgQUNNUF9FTkFCTEVfSFlTVEVSRVNJUyhhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldIHw9IEFDTVBfQ1RMX0hZU1RFUkVTSVNfMzBNVikKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIGh5c3RlcmVzaXMgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBIWVNTRUwgb2YgQUNNUF9DVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBoeXN0ZXJlc2lzIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBBQ01QX0RJU0FCTEVfSFlTVEVSRVNJUyhhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICY9IH5BQ01QX0NUTF9IWVNTRUxfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNlbGVjdCBoeXN0ZXJlc2lzIGxldmVsCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEBwYXJhbVtpbl0gdTMySHlzU2VsIFRoZSBoeXN0ZXJlc2lzIGZ1bmN0aW9uIG9wdGlvbi4gSW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0hZU1RFUkVTSVNfMzBNVgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0hZU1RFUkVTSVNfMjBNVgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0hZU1RFUkVTSVNfMTBNVgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0hZU1RFUkVTSVNfRElTQUJMRQorICAqIEByZXR1cm4gTm9uZQorICAqLworI2RlZmluZSBBQ01QX0NPTkZJR19IWVNURVJFU0lTKGFjbXAsIHUzMkNoTnVtLCB1MzJIeXNTZWwpICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSA9ICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmIH5BQ01QX0NUTF9IWVNTRUxfTXNrKSB8ICh1MzJIeXNTZWwpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBBQ01QSUUgYml0IG9mIEFDTVBfQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogICAgICAgICAgSWYgd2FrZS11cCBmdW5jdGlvbiBpcyBlbmFibGVkLCB0aGUgd2FrZS11cCBpbnRlcnJ1cHQgd2lsbCBiZSBlbmFibGVkIGFzIHdlbGwuCisgICovCisjZGVmaW5lIEFDTVBfRU5BQkxFX0lOVChhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldIHw9IEFDTVBfQ1RMX0FDTVBJRV9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIEFDTVBJRSBiaXQgb2YgQUNNUF9DVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEFDTVBfRElTQUJMRV9JTlQoYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSAmPSB+QUNNUF9DVExfQUNNUElFX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgQUNNUAorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IEFDTVBFTiBiaXQgb2YgQUNNUF9DVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIGFuYWxvZyBjb21wYXJhdG9yLgorICAqLworI2RlZmluZSBBQ01QX0VOQUJMRShhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldIHw9IEFDTVBfQ1RMX0FDTVBFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBBQ01QCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBBQ01QRU4gYml0IG9mIEFDTVBfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgYW5hbG9nIGNvbXBhcmF0b3IuCisgICovCisjZGVmaW5lIEFDTVBfRElTQUJMRShhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICY9IH5BQ01QX0NUTF9BQ01QRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCBBQ01QIG91dHB1dCB2YWx1ZQorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuICBBQ01QIG91dHB1dCB2YWx1ZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCByZXR1cm4gdGhlIEFDTVAgb3V0cHV0IHZhbHVlLgorICAqLworI2RlZmluZSBBQ01QX0dFVF9PVVRQVVQoYWNtcCwgdTMyQ2hOdW0pICgoKGFjbXApLT5TVEFUVVMgJiAoQUNNUF9TVEFUVVNfQUNNUE8wX01zazw8KCh1MzJDaE51bSkpKSk/MTowKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCBBQ01QIGludGVycnVwdCBmbGFnCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gICBBQ01QIGludGVycnVwdCBvY2N1cnJlZCAoMSkgb3Igbm90ICgwKQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCByZXR1cm4gdGhlIEFDTVAgaW50ZXJydXB0IGZsYWcuCisgICovCisjZGVmaW5lIEFDTVBfR0VUX0lOVF9GTEFHKGFjbXAsIHUzMkNoTnVtKSAoKChhY21wKS0+U1RBVFVTICYgKEFDTVBfU1RBVFVTX0FDTVBJRjBfTXNrPDwoKHUzMkNoTnVtKSkpKT8xOjApCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgQUNNUCBpbnRlcnJ1cHQgZmxhZworICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCB3cml0ZSAxIHRvIEFDTVBJRm4gYml0IG9mIEFDTVBfU1RBVFVTIHJlZ2lzdGVyIHRvIGNsZWFyIGludGVycnVwdCBmbGFnLgorICAqLworI2RlZmluZSBBQ01QX0NMUl9JTlRfRkxBRyhhY21wLCB1MzJDaE51bSkgKChhY21wKS0+U1RBVFVTID0gKEFDTVBfU1RBVFVTX0FDTVBJRjBfTXNrPDwoKHUzMkNoTnVtKSkpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIEFDTVAgd2FrZS11cCBpbnRlcnJ1cHQgZmxhZworICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCB3cml0ZSAxIHRvIFdLSUZuIGJpdCBvZiBBQ01QX1NUQVRVUyByZWdpc3RlciB0byBjbGVhciBpbnRlcnJ1cHQgZmxhZy4KKyAgKi8KKyNkZWZpbmUgQUNNUF9DTFJfV0FLRVVQX0lOVF9GTEFHKGFjbXAsIHUzMkNoTnVtKSAoKGFjbXApLT5TVEFUVVMgPSAoQUNNUF9TVEFUVVNfV0tJRjBfTXNrPDwoKHUzMkNoTnVtKSkpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBBQ01QIHdha2UtdXAgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBXS0VOIChBQ01QX0NUTFsxNl0pIHRvIGVuYWJsZSBBQ01QIHdha2UtdXAgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEFDTVBfRU5BQkxFX1dBS0VVUChhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldIHw9IEFDTVBfQ1RMX1dLRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgQUNNUCB3YWtlLXVwIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBXS0VOIChBQ01QX0NUTFsxNl0pIHRvIGRpc2FibGUgQUNNUCB3YWtlLXVwIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBBQ01QX0RJU0FCTEVfV0FLRVVQKGFjbXAsIHUzMkNoTnVtKSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gJj0gfkFDTVBfQ1RMX1dLRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNlbGVjdCBBQ01QIHBvc2l0aXZlIGlucHV0IHBpbgorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcGFyYW1baW5dIHUzMlBpbiBDb21wYXJhdG9yIHBvc2l0aXZlIHBpbiBzZWxlY3Rpb24uIEluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9QT1NTRUxfUDAKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9QT1NTRUxfUDEKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9QT1NTRUxfUDIKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9QT1NTRUxfUDMKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IFBPU1NFTCAoQUNNUF9DVExbNzo2XSkgdG8gZGV0ZXJtaW5lIHRoZSBjb21wYXJhdG9yIHBvc2l0aXZlIGlucHV0IHBpbi4KKyAgKi8KKyNkZWZpbmUgQUNNUF9TRUxFQ1RfUChhY21wLCB1MzJDaE51bSwgdTMyUGluKSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gPSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gJiB+QUNNUF9DVExfUE9TU0VMX01zaykgfCAodTMyUGluKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgQUNNUCBmaWx0ZXIgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBPVVRTRUwgKEFDTVBfQ1RMWzEyXSkgdG8gZW5hYmxlIG91dHB1dCBmaWx0ZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEFDTVBfRU5BQkxFX0ZJTFRFUihhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldIHw9IEFDTVBfQ1RMX09VVFNFTF9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBBQ01QIGZpbHRlciBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgT1VUU0VMIChBQ01QX0NUTFsxMl0pIHRvIGRpc2FibGUgb3V0cHV0IGZpbHRlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgQUNNUF9ESVNBQkxFX0ZJTFRFUihhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICY9IH5BQ01QX0NUTF9PVVRTRUxfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBBQ01QIGZpbHRlciBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcGFyYW1baW5dIHUzMkNudCBpcyBjb21wYXJhdG9yIGZpbHRlciBjb3VudCBzZXR0aW5nLgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0ZJTFRTRUxfT0ZGCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfRklMVFNFTF8xUENMSworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0ZJTFRTRUxfMlBDTEsKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9GSUxUU0VMXzRQQ0xLCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfRklMVFNFTF84UENMSworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0ZJTFRTRUxfMTZQQ0xLCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfRklMVFNFTF8zMlBDTEsKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9GSUxUU0VMXzY0UENMSworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFdoZW4gQUNNUCBvdXRwdXQgZmlsdGVyIGZ1bmN0aW9uIGlzIGVuYWJsZWQsIHRoZSBvdXRwdXQgc2FtcGxpbmcgY291bnQgaXMgZGV0ZXJtaW5lZCBieSBGSUxUU0VMIChBQ01QX0NUTFsxNToxM10pLgorICAqLworI2RlZmluZSBBQ01QX1NFVF9GSUxURVIoYWNtcCwgdTMyQ2hOdW0sIHUzMkNudCkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldID0gKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICYgfkFDTVBfQ1RMX0ZJTFRTRUxfTXNrKSB8ICh1MzJDbnQpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNlbGVjdCBjb21wYXJhdG9yIHJlZmVyZW5jZSB2b2x0YWdlCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkxldmVsICBUaGUgY29tcGFyYXRvciByZWZlcmVuY2Ugdm9sdGFnZSBzZXR0aW5nLgorICAqICAgICAgICAgICAgIFRoZSBmb3JtdWxhIGlzOgorICAqICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJhdG9yIHJlZmVyZW5jZSB2b2x0YWdlID0gQ1JWIHNvdXJjZSB2b2x0YWdlIHggKDEvNiArIHUzMkxldmVsLzI0KQorICAqICAgICAgICAgICAgIFRoZSByYW5nZSBvZiB1MzJMZXZlbCBpcyAwIH4gMTUuCisgICogQHJldHVybiAgIE5vbmUKKyAgKiBAZGV0YWlscyAgV2hlbiBDUlYgaXMgc2VsZWN0ZWQgYXMgQUNNUCBuZWdhdGl2ZSBpbnB1dCBzb3VyY2UsIHRoZSBDUlYgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSBDUlZDVEwgKEFDTVBfVlJFRlszOjBdKS4KKyAgKi8KKyNkZWZpbmUgQUNNUF9DUlZfU0VMKGFjbXAsIHUzMkxldmVsKSAoKGFjbXApLT5WUkVGID0gKChhY21wKS0+VlJFRiAmIH5BQ01QX1ZSRUZfQ1JWQ1RMX01zaykgfCAoKHUzMkxldmVsKTw8QUNNUF9WUkVGX0NSVkNUTF9Qb3MpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgc291cmNlIG9mIENSVgorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJTcmMgaXMgdGhlIHNvdXJjZSBvZiBDUlYuIEluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX1ZSRUZfQ1JWU1NFTF9WRERBCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9WUkVGX0NSVlNTRUxfSU5UVlJFRgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoZSBzb3VyY2Ugb2YgQ1JWIGNhbiBiZSBWRERBIG9yIGludGVybmFsIHJlZmVyZW5jZSB2b2x0YWdlLiBUaGUgaW50ZXJuYWwgcmVmZXJlbmNlIHZvbHRhZ2UgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSBTWVNfVlJFRkNUTCByZWdpc3Rlci4KKyAgKi8KKyNkZWZpbmUgQUNNUF9TRUxFQ1RfQ1JWX1NSQyhhY21wLCB1MzJTcmMpICgoYWNtcCktPlZSRUYgPSAoKGFjbXApLT5WUkVGICYgfkFDTVBfVlJFRl9DUlZTU0VMX01zaykgfCAodTMyU3JjKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZWxlY3QgQUNNUCBpbnRlcnJ1cHQgY29uZGl0aW9uCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEBwYXJhbVtpbl0gdTMyQ29uZCBDb21wYXJhdG9yIGludGVycnVwdCBjb25kaXRpb24gc2VsZWN0aW9uLiBJbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfSU5UUE9MX1JGCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfSU5UUE9MX1IKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9JTlRQT0xfRgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoZSBBQ01QIG91dHB1dCBpbnRlcnJ1cHQgY29uZGl0aW9uIGNhbiBiZSByaXNpbmcgZWRnZSwgZmFsbGluZyBlZGdlIG9yIGFueSBlZGdlLgorICAqLworI2RlZmluZSBBQ01QX1NFTEVDVF9JTlRfQ09ORChhY21wLCB1MzJDaE51bSwgdTMyQ29uZCkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldID0gKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICYgfkFDTVBfQ1RMX0lOVFBPTF9Nc2spIHwgKHUzMkNvbmQpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBBQ01QIHdpbmRvdyBsYXRjaCBtb2RlCisgICogQHBhcmFtW2luXSBhY21wIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKiBAcGFyYW1baW5dIHUzMkNoTnVtIFRoZSBBQ01QIG51bWJlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgV0xBVEVOIChBQ01QX0NUTFsxN10pIHRvIGVuYWJsZSBBQ01QIHdpbmRvdyBsYXRjaCBtb2RlLgorICAqICAgICAgICAgIFdoZW4gQUNNUDAvMV9XTEFUIHBpbiBpcyBhdCBoaWdoIGxldmVsLCBBQ01QTzAvMSBwYXNzZXMgdGhyb3VnaCB3aW5kb3cgbGF0Y2gKKyAgKiAgICAgICAgICBibG9jazsgd2hlbiBBQ01QMC8xX1dMQVQgcGluIGlzIGF0IGxvdyBsZXZlbCwgdGhlIG91dHB1dCBvZiB3aW5kb3cgbGF0Y2ggYmxvY2ssCisgICogICAgICAgICAgV0xBVE9VVCwgaXMgZnJvemVuLgorICAqLworI2RlZmluZSBBQ01QX0VOQUJMRV9XSU5ET1dfTEFUQ0goYWNtcCwgdTMyQ2hOdW0pICgoYWNtcCktPkNUTFsodTMyQ2hOdW0pXSB8PSBBQ01QX0NUTF9XTEFURU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgQUNNUCB3aW5kb3cgbGF0Y2ggbW9kZQorICAqIEBwYXJhbVtpbl0gYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSB1MzJDaE51bSBUaGUgQUNNUCBudW1iZXIKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgV0xBVEVOIChBQ01QX0NUTFsxN10pIHRvIGRpc2FibGUgQUNNUCB3aW5kb3cgbGF0Y2ggbW9kZS4KKyAgKi8KKyNkZWZpbmUgQUNNUF9ESVNBQkxFX1dJTkRPV19MQVRDSChhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICY9IH5BQ01QX0NUTF9XTEFURU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBBQ01QIHdpbmRvdyBjb21wYXJlIG1vZGUKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBXQ01QU0VMIChBQ01QX0NUTFsxOF0pIHRvIGVuYWJsZSBBQ01QIHdpbmRvdyBjb21wYXJlIG1vZGUuCisgICogICAgICAgICAgV2hlbiB3aW5kb3cgY29tcGFyZSBtb2RlIGlzIGVuYWJsZWQsIHVzZXIgY2FuIGNvbm5lY3QgdGhlIHNwZWNpZmljIGFuYWxvZyB2b2x0YWdlCisgICogICAgICAgICAgc291cmNlIHRvIGVpdGhlciB0aGUgcG9zaXRpdmUgaW5wdXRzIG9mIGJvdGggY29tcGFyYXRvcnMgb3IgdGhlIG5lZ2F0aXZlIGlucHV0cyBvZgorICAqICAgICAgICAgIGJvdGggY29tcGFyYXRvcnMuIFRoZSB1cHBlciBib3VuZCBhbmQgbG93ZXIgYm91bmQgb2YgdGhlIGRlc2lnbmF0ZWQgcmFuZ2UgYXJlCisgICogICAgICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgdm9sdGFnZXMgYXBwbGllZCB0byB0aGUgb3RoZXIgaW5wdXRzIG9mIGJvdGggY29tcGFyYXRvcnMuIElmIHRoZQorICAqICAgICAgICAgIG91dHB1dCBvZiBhIGNvbXBhcmF0b3IgaXMgbG93IGFuZCB0aGUgb3RoZXIgY29tcGFyYXRvciBvdXRwdXRzIGhpZ2gsIHdoaWNoIG1lYW5zIHR3bworICAqICAgICAgICAgIGNvbXBhcmF0b3JzIGltcGxpZXMgdGhlIHVwcGVyIGFuZCBsb3dlciBib3VuZC4gVXNlciBjYW4gZGlyZWN0bHkgbW9uaXRvciBhIHNwZWNpZmljCisgICogICAgICAgICAgYW5hbG9nIHZvbHRhZ2Ugc291cmNlIHZpYSBBQ01QV08gKEFDTVBfU1RBVFVTWzE2XSkuCisgICovCisjZGVmaW5lIEFDTVBfRU5BQkxFX1dJTkRPV19DT01QQVJFKGFjbXAsIHUzMkNoTnVtKSAoKGFjbXApLT5DVExbKHUzMkNoTnVtKV0gfD0gQUNNUF9DVExfV0NNUFNFTF9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBBQ01QIHdpbmRvdyBjb21wYXJlIG1vZGUKKyAgKiBAcGFyYW1baW5dIGFjbXAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBBQ01QIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gdTMyQ2hOdW0gVGhlIEFDTVAgbnVtYmVyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIFdDTVBTRUwgKEFDTVBfQ1RMWzE4XSkgdG8gZGlzYWJsZSBBQ01QIHdpbmRvdyBjb21wYXJlIG1vZGUuCisgICovCisjZGVmaW5lIEFDTVBfRElTQUJMRV9XSU5ET1dfQ09NUEFSRShhY21wLCB1MzJDaE51bSkgKChhY21wKS0+Q1RMWyh1MzJDaE51bSldICY9IH5BQ01QX0NUTF9XQ01QU0VMX01zaykKKworCisKKworLyogRnVuY3Rpb24gcHJvdG90eXBlIGRlY2xhcmF0aW9uICovCit2b2lkIEFDTVBfT3BlbihBQ01QX1QgKmFjbXAsIHVpbnQzMl90IHUzMkNoTnVtLCB1aW50MzJfdCB1MzJOZWdTcmMsIHVpbnQzMl90IHUzMkh5c1NlbCk7Cit2b2lkIEFDTVBfQ2xvc2UoQUNNUF9UICphY21wLCB1aW50MzJfdCB1MzJDaE51bSk7CisKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEFDTVBfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQUNNUF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogX19BQ01QX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9icHdtLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9icHdtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyOGJmOQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2Jwd20uaApAQCAtMCwwICsxLDM2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGJwd20uaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIEJQV00gZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19CUFdNX0hfXworI2RlZmluZSBfX0JQV01fSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBCUFdNX0RyaXZlciBCUFdNIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEJQV01fRVhQT1JURURfQ09OU1RBTlRTIEJQV00gRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworI2RlZmluZSBCUFdNX0NIQU5ORUxfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAoNlVMKSAgICAgIC8qITwgQlBXTSBjaGFubmVsIG51bWJlciAqLworI2RlZmluZSBCUFdNX0NIXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVUwpICAgIC8qITwgQlBXTSBjaGFubmVsIDAgbWFzayBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEJQV01fQ0hfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDJVTCkgICAgLyohPCBCUFdNIGNoYW5uZWwgMSBtYXNrIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9DSF8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFVMKSAgICAvKiE8IEJQV00gY2hhbm5lbCAyIG1hc2sgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX0NIXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4VUwpICAgIC8qITwgQlBXTSBjaGFubmVsIDMgbWFzayBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEJQV01fQ0hfNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVUwpICAgLyohPCBCUFdNIGNoYW5uZWwgNCBtYXNrIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9DSF81X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVTCkgICAvKiE8IEJQV00gY2hhbm5lbCA1IG1hc2sgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQ291bnRlciBUeXBlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJQV01fVVBfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgICAgLyohPCBVcCBjb3VudGVyIHR5cGUgKi8KKyNkZWZpbmUgQlBXTV9ET1dOX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCkgICAgICAvKiE8IERvd24gY291bnRlciB0eXBlICovCisjZGVmaW5lIEJQV01fVVBfRE9XTl9DT1VOVEVSICAgICAgICAgICAgICAgICAgICAgICgyVUwpICAgICAgLyohPCBVcC1Eb3duIGNvdW50ZXIgdHlwZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQWxpZ25lZCBUeXBlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJQV01fRURHRV9BTElHTkVEICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwpICAgICAgLyohPCBCUFdNIHdvcmtpbmcgaW4gZWRnZSBhbGlnbmVkIHR5cGUoZG93biBjb3VudCkgKi8KKyNkZWZpbmUgQlBXTV9DRU5URVJfQUxJR05FRCAgICAgICAgICAgICAgICAgICAgICAgKDJVTCkgICAgICAvKiE8IEJQV00gd29ya2luZyBpbiBjZW50ZXIgYWxpZ25lZCB0eXBlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBPdXRwdXQgTGV2ZWwgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQlBXTV9PVVRQVVRfTk9USElORyAgICAgICAgICAgICAgICAgICAgICAgKDBVTCkgICAgICAvKiE8IEJQV00gb3V0cHV0IG5vdGhpbmcgKi8KKyNkZWZpbmUgQlBXTV9PVVRQVVRfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCkgICAgICAvKiE8IEJQV00gb3V0cHV0IGxvdyAqLworI2RlZmluZSBCUFdNX09VVFBVVF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAoMlVMKSAgICAgIC8qITwgQlBXTSBvdXRwdXQgaGlnaCAqLworI2RlZmluZSBCUFdNX09VVFBVVF9UT0dHTEUgICAgICAgICAgICAgICAgICAgICAgICAoM1VMKSAgICAgIC8qITwgQlBXTSBvdXRwdXQgdG9nZ2xlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBTeW5jaHJvbm91cyBTdGFydCBGdW5jdGlvbiBDb250cm9sIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQlBXTV9TU0NUTF9TU1JDX1BXTTAgICAgICAgICAgICAgICAgICAgICAgKDBVTDw8QlBXTV9TU0NUTF9TU1JDX1BvcykgICAgLyohPCBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZXMgZnJvbSBQV00wICAqLworI2RlZmluZSBCUFdNX1NTQ1RMX1NTUkNfUFdNMSAgICAgICAgICAgICAgICAgICAgICAoMVVMPDxCUFdNX1NTQ1RMX1NTUkNfUG9zKSAgICAvKiE8IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lcyBmcm9tIFBXTTEgICovCisjZGVmaW5lIEJQV01fU1NDVExfU1NSQ19CUFdNMCAgICAgICAgICAgICAgICAgICAgICgyVUw8PEJQV01fU1NDVExfU1NSQ19Qb3MpICAgIC8qITwgU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWVzIGZyb20gQlBXTTAgKi8KKyNkZWZpbmUgQlBXTV9TU0NUTF9TU1JDX0JQV00xICAgICAgICAgICAgICAgICAgICAgKDNVTDw8QlBXTV9TU0NUTF9TU1JDX1BvcykgICAgLyohPCBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZXMgZnJvbSBCUFdNMSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgVHJpZ2dlciBTb3VyY2UgU2VsZWN0IENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJQV01fVFJJR0dFUl9BRENfRVZFTl9aRVJPX1BPSU5UICAgICAgICAgICAgICAgICAgICAgKDBVTCkgICAgIC8qITwgQlBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGV2ZW4gY2hhbm5lbCBtYXRjaGVzIHplcm8gcG9pbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX1RSSUdHRVJfQURDX0VWRU5fUEVSSU9EX1BPSU5UICAgICAgICAgICAgICAgICAgICgxVUwpICAgICAvKiE8IEJQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBldmVuIGNoYW5uZWwgbWF0Y2hlcyBwZXJpb2QgcG9pbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX1RSSUdHRVJfQURDX0VWRU5fWkVST19PUl9QRVJJT0RfUE9JTlQgICAgICAgICAgICgyVUwpICAgICAvKiE8IEJQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBldmVuIGNoYW5uZWwgbWF0Y2hlcyB6ZXJvIG9yIHBlcmlvZCBwb2ludCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEJQV01fVFJJR0dFUl9BRENfRVZFTl9DTVBfVVBfQ09VTlRfUE9JTlQgICAgICAgICAgICAgKDNVTCkgICAgIC8qITwgQlBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGV2ZW4gY2hhbm5lbCBtYXRjaGVzIHVwIGNvdW50IHRvIGNvbXBhcmF0b3IgcG9pbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX1RSSUdHRVJfQURDX0VWRU5fQ01QX0RPV05fQ09VTlRfUE9JTlQgICAgICAgICAgICg0VUwpICAgICAvKiE8IEJQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBldmVuIGNoYW5uZWwgbWF0Y2hlcyBkb3duIGNvdW50IHRvIGNvbXBhcmF0b3IgcG9pbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX1RSSUdHRVJfQURDX09ERF9DTVBfVVBfQ09VTlRfUE9JTlQgICAgICAgICAgICAgICg4VUwpICAgICAvKiE8IEJQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBvZGQgY2hhbm5lbCBtYXRjaGVzIHVwIGNvdW50IHRvIGNvbXBhcmF0b3IgcG9pbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX1RSSUdHRVJfQURDX09ERF9DTVBfRE9XTl9DT1VOVF9QT0lOVCAgICAgICAgICAgICg5VUwpICAgICAvKiE8IEJQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBvZGQgY2hhbm5lbCBtYXRjaGVzIGRvd24gY291bnQgdG8gY29tcGFyYXRvciBwb2ludCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDYXB0dXJlIENvbnRyb2wgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQlBXTV9DQVBUVVJFX0lOVF9SSVNJTkdfTEFUQ0ggICAgICAgICAgICAgKDFVTCkgICAgICAgIC8qITwgQlBXTSBjYXB0dXJlIGludGVycnVwdCBpZiBjaGFubmVsIGhhcyByaXNpbmcgdHJhbnNpdGlvbiAqLworI2RlZmluZSBCUFdNX0NBUFRVUkVfSU5UX0ZBTExJTkdfTEFUQ0ggICAgICAgICAgICAoMHgxMDBVTCkgICAgLyohPCBCUFdNIGNhcHR1cmUgaW50ZXJydXB0IGlmIGNoYW5uZWwgaGFzIGZhbGxpbmcgdHJhbnNpdGlvbiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgRHV0eSBJbnRlcnJ1cHQgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJQV01fRFVUWV9JTlRfRE9XTl9DT1VOVF9NQVRDSF9DTVAgICAgICAgICgxIDw8IEJQV01fSU5URU5fQ01QRElFTjBfUG9zKSAgIC8qITwgQlBXTSBkdXR5IGludGVycnVwdCB0cmlnZ2VyZWQgaWYgZG93biBjb3VudCBtYXRjaCBjb21wYXJhdG9yIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9EVVRZX0lOVF9VUF9DT1VOVF9NQVRDSF9DTVAgICAgICAgICAgKDEgPDwgQlBXTV9JTlRFTl9DTVBVSUVOMF9Qb3MpICAgLyohPCBCUFdNIGR1dHkgaW50ZXJydXB0IHRyaWdnZXJlZCBpZiB1cCBkb3duIG1hdGNoIGNvbXBhcmF0b3IgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgTG9hZCBNb2RlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJQV01fTE9BRF9NT0RFX0lNTUVESUFURSAgICAgICAgICAgICAgICAgICgxIDw8IEJQV01fQ1RMMF9JTU1MREVOMF9Qb3MpICAgIC8qITwgQlBXTSBpbW1lZGlhdGVseSBsb2FkIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX0xPQURfTU9ERV9DRU5URVIgICAgICAgICAgICAgICAgICAgICAoMSA8PCBCUFdNX0NUTDBfQ1RSTEQwX1BvcykgICAgICAvKiE8IEJQV00gY2VudGVyIGxvYWQgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDbG9jayBTb3VyY2UgU2VsZWN0IENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQlBXTV9DTEtTUkNfQlBXTV9DTEsgICAgICAgICAgICAgICAgICAgICAgKDBVTCkgICAgLyohPCBCUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIEJQV00wX0NMSyBvciBCUFdNMV9DTEsgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX0NMS1NSQ19USU1FUjAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAvKiE8IEJQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gVElNRVIwIG92ZXJmbG93IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQlBXTV9DTEtTUkNfVElNRVIxICAgICAgICAgICAgICAgICAgICAgICAgKDJVTCkgICAgLyohPCBCUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIFRJTUVSMSBvdmVyZmxvdyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEJQV01fQ0xLU1JDX1RJTUVSMiAgICAgICAgICAgICAgICAgICAgICAgICgzVUwpICAgIC8qITwgQlBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBUSU1FUjIgb3ZlcmZsb3cgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBCUFdNX0NMS1NSQ19USU1FUjMgICAgICAgICAgICAgICAgICAgICAgICAoNFVMKSAgICAvKiE8IEJQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gVElNRVIzIG92ZXJmbG93IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBCUFdNX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBCUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyBCUFdNIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIHRpbWVyIHN5bmNocm9ub3VzIHN0YXJ0IGNvdW50aW5nIGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEBwYXJhbVtpbl0gdTMyU3luY1NyYyBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2Ugc2VsZWN0aW9uLCB2YWxpZCB2YWx1ZXMgYXJlOgorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX1NTQ1RMX1NTUkNfUFdNMAorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX1NTQ1RMX1NTUkNfUFdNMQorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX1NTQ1RMX1NTUkNfQlBXTTAKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9TU0NUTF9TU1JDX0JQV00xCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgdGltZXIgc3luY2hyb25vdXMgc3RhcnQgY291bnRpbmcgZnVuY3Rpb24gb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9FTkFCTEVfVElNRVJfU1lOQyhicHdtLCB1MzJDaGFubmVsTWFzaywgdTMyU3luY1NyYykgKChicHdtKS0+U1NDVEwgPSAoKGJwd20pLT5TU0NUTCAmIH5CUFdNX1NTQ1RMX1NTUkNfTXNrKSB8ICh1MzJTeW5jU3JjKSB8IEJQV01fU1NDVExfU1NFTjBfTXNrKQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIHRpbWVyIHN5bmNocm9ub3VzIHN0YXJ0IGNvdW50aW5nIGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgdGltZXIgc3luY2hyb25vdXMgc3RhcnQgY291bnRpbmcgZnVuY3Rpb24gb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9ESVNBQkxFX1RJTUVSX1NZTkMoYnB3bSwgdTMyQ2hhbm5lbE1hc2spICgoYnB3bSktPlNTQ1RMICY9IH5CUFdNX1NTQ1RMX1NTRU4wX01zaykKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGUgQlBXTSBjb3VudGVyIHN5bmNocm9ub3VzIHN0YXJ0IGNvdW50aW5nIGZ1bmN0aW9uLgorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIG1ha2Ugc2VsZWN0ZWQgQlBXTTAgYW5kIEJQV00xIGNoYW5uZWwocykgc3RhcnQgY291bnRpbmcgYXQgdGhlIHNhbWUgdGltZS4KKyAqICAgICAgICAgIFRvIGNvbmZpZ3VyZSBzeW5jaHJvbm91cyBzdGFydCBjb3VudGluZyBjaGFubmVsKHMpIGJ5IEJQV01fRU5BQkxFX1RJTUVSX1NZTkMoKSBhbmQgQlBXTV9ESVNBQkxFX1RJTUVSX1NZTkMoKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX1RSSUdHRVJfU1lOQ19TVEFSVChicHdtKSAoKGJwd20pLT5TU1RSRyA9IEJQV01fU1NUUkdfQ05UU0VOX01zaykKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGUgb3V0cHV0IGludmVydGVyIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgcmVwcmVzZW50cyBjaGFubmVsIDAsIGJpdCAxIHJlcHJlc2VudHMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX0VOQUJMRV9PVVRQVVRfSU5WRVJURVIoYnB3bSwgdTMyQ2hhbm5lbE1hc2spICgoYnB3bSktPlBPTENUTCA9ICh1MzJDaGFubmVsTWFzaykpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0IGNhcHR1cmVkIHJpc2luZyBkYXRhCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fR0VUX0NBUFRVUkVfUklTSU5HX0RBVEEoYnB3bSwgdTMyQ2hhbm5lbE51bSkgKChicHdtKS0+Q0FQREFUWyh1MzJDaGFubmVsTnVtKV0uUkNBUERBVCkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXQgY2FwdHVyZWQgZmFsbGluZyBkYXRhCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fR0VUX0NBUFRVUkVfRkFMTElOR19EQVRBKGJwd20sIHUzMkNoYW5uZWxOdW0pICgoYnB3bSktPkNBUERBVFsodTMyQ2hhbm5lbE51bSldLkZDQVBEQVQpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gbWFzayBvdXRwdXQgbG9naWMgdG8gaGlnaCBvciBsb3cKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCByZXByZXNlbnRzIGNoYW5uZWwgMCwgYml0IDEgcmVwcmVzZW50cyBjaGFubmVsIDEuLi4KKyAqIEBwYXJhbVtpbl0gdTMyTGV2ZWxNYXNrIE91dHB1dCBsb2dpYyB0byBoaWdoIG9yIGxvdworICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbWFzayBvdXRwdXQgbG9naWMgdG8gaGlnaCBvciBsb3cgb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykuCisgSWYgdTMyQ2hhbm5lbE1hc2sgcGFyYW1ldGVyIGlzIDAsIHRoZW4gbWFzayBmdW5jdGlvbiB3aWxsIGJlIGRpc2FibGVkLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fTUFTS19PVVRQVVQoYnB3bSwgdTMyQ2hhbm5lbE1hc2ssIHUzMkxldmVsTWFzaykgXAorICAgIHsgXAorICAgICAgICAoYnB3bSktPk1TS0VOID0gKHUzMkNoYW5uZWxNYXNrKTsgXAorICAgICAgICAoYnB3bSktPk1TSyA9ICh1MzJMZXZlbE1hc2spOyBcCisgICAgfQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIHNldCB0aGUgcHJlc2NhbGVyIG9mIGFsbCBjaGFubmVscworICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEBwYXJhbVtpbl0gdTMyUHJlc2NhbGVyIENsb2NrIHByZXNjYWxlciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDEgfiAweEZGRgorICogQHJldHVybiBOb25lCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9TRVRfUFJFU0NBTEVSKGJwd20sIHUzMkNoYW5uZWxOdW0sIHUzMlByZXNjYWxlcikgKChicHdtKS0+Q0xLUFNDID0gKHUzMlByZXNjYWxlcikpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gc2V0IHRoZSBkdXR5IG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyQ01SIER1dHkgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjB4RkZGRgorICogQHJldHVybiBOb25lCisgVGhpcyBuZXcgc2V0dGluZyB3aWxsIHRha2UgZWZmZWN0IG9uIG5leHQgQlBXTSBwZXJpb2QKKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX1NFVF9DTVIoYnB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyQ01SKSAoKGJwd20pLT5DTVBEQVRbKHUzMkNoYW5uZWxOdW0pXSA9ICh1MzJDTVIpKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIGdldCB0aGUgZHV0eSBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIFJldHVybiB0aGUgY29tcGFyYXRvciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+MHhGRkZGCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZ2V0IHRoZSBjb21wYXJhdG9yIG9mIHNwZWNpZmllZCBjaGFubmVsLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fR0VUX0NNUihicHdtLCB1MzJDaGFubmVsTnVtKSAoKGJwd20pLT5DTVBEQVRbKHUzMkNoYW5uZWxOdW0pXSkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBzZXQgdGhlIHBlcmlvZCBvZiBhbGwgY2hhbm5lbHMKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcGFyYW1baW5dIHUzMkNOUiBQZXJpb2Qgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjB4RkZGRgorICogQHJldHVybiBOb25lCisgVGhpcyBuZXcgc2V0dGluZyB3aWxsIHRha2UgZWZmZWN0IG9uIG5leHQgQlBXTSBwZXJpb2QKKyBCUFdNIGNvdW50ZXIgd2lsbCBzdG9wIGlmIHBlcmlvZCBsZW5ndGggc2V0IHRvIDAKKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX1NFVF9DTlIoYnB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyQ05SKSAoKGJwd20pLT5QRVJJT0QgPSAodTMyQ05SKSkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXQgdGhlIHBlcmlvZCBvZiBhbGwgY2hhbm5lbHMKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBCUFdNX0dFVF9DTlIoYnB3bSwgdTMyQ2hhbm5lbE51bSkgKChicHdtKS0+UEVSSU9EKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIHNldCB0aGUgQlBXTSBhbGlnbmVkIHR5cGUKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHBhcmFtW2luXSB1MzJBbGlnbmVkVHlwZSBCUFdNIGFsaWduZWQgdHlwZSwgdmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9FREdFX0FMSUdORUQKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9DRU5URVJfQUxJR05FRAorICogQHJldHVybiBOb25lCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9TRVRfQUxJR05FRF9UWVBFKGJwd20sIHUzMkNoYW5uZWxNYXNrLCB1MzJBbGlnbmVkVHlwZSkgKChicHdtKS0+Q1RMMSA9ICh1MzJBbGlnbmVkVHlwZSkpCisKKy8qKgorICogQGJyaWVmIENsZWFyIGNvdW50ZXIgb2YgY2hhbm5lbCAwCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIGNvdW50ZXIgb2YgY2hhbm5lbCAwCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgQlBXTV9DTFJfQ09VTlRFUihicHdtLCB1MzJDaGFubmVsTWFzaykgKChicHdtKS0+Q05UQ0xSID0gKEJQV01fQ05UQ0xSX0NOVENMUjBfTXNrKSkKKworLyoqCisgKiBAYnJpZWYgU2V0IG91dHB1dCBsZXZlbCBhdCB6ZXJvLCBjb21wYXJlIHVwLCBwZXJpb2QoY2VudGVyKSBhbmQgY29tcGFyZSBkb3duIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgcmVwcmVzZW50cyBjaGFubmVsIDAsIGJpdCAxIHJlcHJlc2VudHMgY2hhbm5lbCAxLi4uCisgKiBAcGFyYW1baW5dIHUzMlplcm9MZXZlbCBvdXRwdXQgbGV2ZWwgYXQgemVybyBwb2ludCwgdmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfTk9USElORworICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9MT1cKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfSElHSAorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9UT0dHTEUKKyAqIEBwYXJhbVtpbl0gdTMyQ21wVXBMZXZlbCBvdXRwdXQgbGV2ZWwgYXQgY29tcGFyZSB1cCBwb2ludCwgdmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfTk9USElORworICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9MT1cKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfSElHSAorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9UT0dHTEUKKyAqIEBwYXJhbVtpbl0gdTMyUGVyaW9kTGV2ZWwgb3V0cHV0IGxldmVsIGF0IHBlcmlvZChjZW50ZXIpIHBvaW50LCB2YWxpZCB2YWx1ZXMgYXJlOgorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9OT1RISU5HCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fT1VUUFVUX0xPVworICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9ISUdICisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fT1VUUFVUX1RPR0dMRQorICogQHBhcmFtW2luXSB1MzJDbXBEb3duTGV2ZWwgb3V0cHV0IGxldmVsIGF0IGNvbXBhcmUgZG93biBwb2ludCwgdmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfTk9USElORworICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9MT1cKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9PVVRQVVRfSElHSAorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX09VVFBVVF9UT0dHTEUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIFNldCBvdXRwdXQgbGV2ZWwgYXQgemVybywgY29tcGFyZSB1cCwgcGVyaW9kKGNlbnRlcikgYW5kIGNvbXBhcmUgZG93biBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEJQV01fU0VUX09VVFBVVF9MRVZFTChicHdtLCB1MzJDaGFubmVsTWFzaywgdTMyWmVyb0xldmVsLCB1MzJDbXBVcExldmVsLCB1MzJQZXJpb2RMZXZlbCwgdTMyQ21wRG93bkxldmVsKSBcCisgICBkb3sgXAorICAgICAgICB1aW50MzJfdCBpOyBcCisgICAgICAgIGZvcihpID0gMFVMOyBpIDwgNlVMOyBpKyspIHsgXAorICAgICAgICAgICAgaWYoKHUzMkNoYW5uZWxNYXNrKSAmICgxVUwgPDwgaSkpIHsgXAorICAgICAgICAgICAgICAgIChicHdtKS0+V0dDVEwwID0gKCgoYnB3bSktPldHQ1RMMCAmIH4oM1VMIDw8IChpIDw8IDEpKSkgfCAoKHUzMlplcm9MZXZlbCkgPDwgKGkgPDwgMSkpKTsgXAorICAgICAgICAgICAgICAgIChicHdtKS0+V0dDVEwwID0gKCgoYnB3bSktPldHQ1RMMCAmIH4oM1VMIDw8IChCUFdNX1dHQ1RMMF9QUkRQQ1RMMF9Qb3MgKyAoaSA8PCAxKSkpKSB8ICgodTMyUGVyaW9kTGV2ZWwpIDw8IChCUFdNX1dHQ1RMMF9QUkRQQ1RMMF9Qb3MgKyAoaSA8PCAxKSkpKTsgXAorICAgICAgICAgICAgICAgIChicHdtKS0+V0dDVEwxID0gKCgoYnB3bSktPldHQ1RMMSAmIH4oM1VMIDw8IChpIDw8IDEpKSkgfCAoKHUzMkNtcFVwTGV2ZWwpIDw8IChpIDw8IDEpKSk7IFwKKyAgICAgICAgICAgICAgICAoYnB3bSktPldHQ1RMMSA9ICgoKGJwd20pLT5XR0NUTDEgJiB+KDNVTCA8PCAoQlBXTV9XR0NUTDFfQ01QRENUTDBfUG9zICsgKGkgPDwgMSkpKSkgfCAoKHUzMkNtcERvd25MZXZlbCkgPDwgKEJQV01fV0dDVEwxX0NNUERDVEwwX1BvcyArIChpIDw8IDEpKSkpOyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgfSBcCisgICAgfXdoaWxlKDApCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVmaW5lIEJQV00gZnVuY3Rpb25zIHByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3VpbnQzMl90IEJQV01fQ29uZmlnQ2FwdHVyZUNoYW5uZWwoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJVbml0VGltZU5zZWMsIHVpbnQzMl90IHUzMkNhcHR1cmVFZGdlKTsKK3VpbnQzMl90IEJQV01fQ29uZmlnT3V0cHV0Q2hhbm5lbChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkZyZXF1ZW5jeSwgdWludDMyX3QgdTMyRHV0eUN5Y2xlKTsKK3ZvaWQgQlBXTV9TdGFydChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgQlBXTV9TdG9wKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBCUFdNX0ZvcmNlU3RvcChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgQlBXTV9FbmFibGVBRENUcmlnZ2VyKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ29uZGl0aW9uKTsKK3ZvaWQgQlBXTV9EaXNhYmxlQURDVHJpZ2dlcihCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBCUFdNX0NsZWFyQURDVHJpZ2dlckZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJDb25kaXRpb24pOwordWludDMyX3QgQlBXTV9HZXRBRENUcmlnZ2VyRmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBCUFdNX0VuYWJsZUNhcHR1cmUoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzayk7Cit2b2lkIEJQV01fRGlzYWJsZUNhcHR1cmUoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzayk7Cit2b2lkIEJQV01fRW5hYmxlT3V0cHV0KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBCUFdNX0Rpc2FibGVPdXRwdXQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzayk7Cit2b2lkIEJQV01fRW5hYmxlQ2FwdHVyZUludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkVkZ2UpOwordm9pZCBCUFdNX0Rpc2FibGVDYXB0dXJlSW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyRWRnZSk7Cit2b2lkIEJQV01fQ2xlYXJDYXB0dXJlSW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkVkZ2UpOwordWludDMyX3QgQlBXTV9HZXRDYXB0dXJlSW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBCUFdNX0VuYWJsZUR1dHlJbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJJbnREdXR5VHlwZSk7Cit2b2lkIEJQV01fRGlzYWJsZUR1dHlJbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9DbGVhckR1dHlJbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit1aW50MzJfdCBCUFdNX0dldER1dHlJbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEJQV01fRW5hYmxlUGVyaW9kSW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgIHVpbnQzMl90IHUzMkludFBlcmlvZFR5cGUpOwordm9pZCBCUFdNX0Rpc2FibGVQZXJpb2RJbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9DbGVhclBlcmlvZEludEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3VpbnQzMl90IEJQV01fR2V0UGVyaW9kSW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBCUFdNX0VuYWJsZVplcm9JbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9EaXNhYmxlWmVyb0ludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBCUFdNX0NsZWFyWmVyb0ludEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3VpbnQzMl90IEJQV01fR2V0WmVyb0ludEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgQlBXTV9FbmFibGVMb2FkTW9kZShCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkxvYWRNb2RlKTsKK3ZvaWQgQlBXTV9EaXNhYmxlTG9hZE1vZGUoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJMb2FkTW9kZSk7Cit2b2lkIEJQV01fU2V0Q2xvY2tTb3VyY2UoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJDbGtTcmNTZWwpOwordWludDMyX3QgQlBXTV9HZXRXcmFwQXJvdW5kRmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBCUFdNX0NsZWFyV3JhcEFyb3VuZEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEJQV01fRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQlBXTV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQlBXTV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvY2FuLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9jYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmRlNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvY2FuLmgKQEAgLTAsMCArMSwxOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjYW4uaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgU2VyaWVzIENBTiBEcml2ZXIgSGVhZGVyIEZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19DQU5fSF9fCisjZGVmaW5lIF9fQ0FOX0hfXworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBDQU5fRHJpdmVyIENBTiBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBDQU5fRVhQT1JURURfQ09OU1RBTlRTIENBTiBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDQU4gVGVzdCBNb2RlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lICAgIENBTl9OT1JNQUxfTU9ERSAgIDBVICAgIC8qITwgQ0FOIHNlbGVjdCBub3JtYWwgbW9kZSAqLworI2RlZmluZSAgICBDQU5fQkFTSUNfTU9ERSAgICAxVSAgICAvKiE8IENBTiBzZWxlY3QgYmFzaWMgbW9kZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNZXNzYWdlIElEIFR5cGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lICAgIENBTl9TVERfSUQgICAgMFVMICAgIC8qITwgQ0FOIHNlbGVjdCBzdGFuZGFyZCBJRCAqLworI2RlZmluZSAgICBDQU5fRVhUX0lEICAgIDFVTCAgICAvKiE8IENBTiBzZWxlY3QgZXh0ZW5kZWQgSUQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTWVzc2FnZSBGcmFtZSBUeXBlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSAgICBDQU5fUkVNT1RFX0ZSQU1FICAgIDAgICAgLyohPCBDQU4gZnJhbWUgc2VsZWN0IHJlbW90ZSBmcmFtZSAqLworI2RlZmluZSAgICBDQU5fREFUQV9GUkFNRSAgICAxICAgICAgLyohPCBDQU4gZnJhbWUgc2VsZWN0IGRhdGEgZnJhbWUgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDQU5fRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIENBTl9FWFBPUlRFRF9TVFJVQ1RTIENBTiBFeHBvcnRlZCBTdHJ1Y3RzCisgIEB7CisqLworLyoqCisgICogQGRldGFpbHMgICAgQ0FOIG1lc3NhZ2Ugc3RydWN0dXJlCisgICovCisjcHJhZ21hIHBhY2socHVzaCkKKyNwcmFnbWEgcGFjaygxKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCAgSWRUeXBlOyAgICAgICAvKiE8IElEIHR5cGUgKi8KKyAgICB1aW50MzJfdCAgRnJhbWVUeXBlOyAgICAvKiE8IEZyYW1lIHR5cGUgKi8KKyAgICB1aW50MzJfdCAgSWQ7ICAgICAgICAgICAvKiE8IE1lc3NhZ2UgSUQgKi8KKyAgICB1aW50OF90ICAgRExDOyAgICAgICAgICAvKiE8IERhdGEgbGVuZ3RoICovCisgICAgdWludDhfdCAgIERhdGFbOF07ICAgICAgLyohPCBEYXRhICovCit9IFNUUl9DQU5NU0dfVDsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8qKgorICAqIEBkZXRhaWxzICAgIENBTiBtYXNrIG1lc3NhZ2Ugc3RydWN0dXJlCisgICovCisjcHJhZ21hIHBhY2socHVzaCkKKyNwcmFnbWEgcGFjaygxKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90ICAgdThYdGQ7ICAgICAgLyohPCBFeHRlbmRlZCBJRCAqLworICAgIHVpbnQ4X3QgICB1OERpcjsgICAgICAvKiE8IERpcmVjdGlvbiAqLworICAgIHVpbnQzMl90ICB1MzJJZDsgICAgICAvKiE8IE1lc3NhZ2UgSUQgKi8KKyAgICB1aW50OF90ICAgdThJZFR5cGU7ICAgLyohPCBJRCB0eXBlKi8KK30gU1RSX0NBTk1BU0tfVDsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ0FOX0VYUE9SVEVEX1NUUlVDVFMgKi8KKworLyoqIEBjb25kIEhJRERFTl9TWU1CT0xTICovCisjZGVmaW5lIE1TRyhpZCkgIChpZCkKKy8qKiBAZW5kY29uZCBISURERU5fU1lNQk9MUyAqLworCisvKiogQGFkZHRvZ3JvdXAgQ0FOX0VYUE9SVEVEX0ZVTkNUSU9OUyBDQU4gRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAqIEBicmllZiBHZXQgaW50ZXJydXB0IHN0YXR1cy4KKyAqCisgKiBAcGFyYW1baW5dIGNhbiBUaGUgYmFzZSBhZGRyZXNzIG9mIGNhbiBtb2R1bGUuCisgKgorICogQHJldHVybiBDQU4gbW9kdWxlIHN0YXR1cyByZWdpc3RlciB2YWx1ZS4KKyAqCisgKiBAZGV0YWlscyBTdGF0dXMgSW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSBiaXRzIEJPZmYgKENBTl9TVEFUVVNbN10pLCBFV2FybiAoQ0FOX1NUQVRVU1s2XSksCisgKiAgICAgICAgICBFUGFzcyAoQ0FOX1NUQVRVU1s1XSksIFJ4T2sgKENBTl9TVEFUVVNbNF0pLCBUeE9rIChDQU5fU1RBVFVTWzNdKSwgYW5kIExFQyAoQ0FOX1NUQVRVU1syOjBdKS4KKyAqLworI2RlZmluZSBDQU5fR0VUX0lOVF9TVEFUVVMoY2FuKSAoKGNhbiktPlNUQVRVUykKKworLyoqCisgKiBAYnJpZWYgR2V0IHNwZWNpZmllZCBpbnRlcnJ1cHQgcGVuZGluZyBzdGF0dXMuCisgKgorICogQHBhcmFtW2luXSBjYW4gVGhlIGJhc2UgYWRkcmVzcyBvZiBjYW4gbW9kdWxlLgorICoKKyAqIEByZXR1cm4gVGhlIHNvdXJjZSBvZiB0aGUgaW50ZXJydXB0LgorICoKKyAqIEBkZXRhaWxzIElmIHNldmVyYWwgaW50ZXJydXB0cyBhcmUgcGVuZGluZywgdGhlIENBTiBJbnRlcnJ1cHQgUmVnaXN0ZXIgd2lsbCBwb2ludCB0byB0aGUgcGVuZGluZyBpbnRlcnJ1cHQKKyAqICAgICAgICAgIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHksIGRpc3JlZ2FyZGluZyB0aGVpciBjaHJvbm9sb2dpY2FsIG9yZGVyLgorICovCisjZGVmaW5lIENBTl9HRVRfSU5UX1BFTkRJTkdfU1RBVFVTKGNhbikgKChjYW4pLT5JSURSKQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIHdha2UtdXAgZnVuY3Rpb24uCisgKgorICogQHBhcmFtW2luXSBjYW4gVGhlIGJhc2UgYWRkcmVzcyBvZiBjYW4gbW9kdWxlLgorICoKKyAqIEByZXR1cm4gTm9uZQorICoKKyAqIEBkZXRhaWxzICBUaGUgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIHdha2UtdXAgZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgQ0FOX0RJU0FCTEVfV0FLRVVQKGNhbikgKChjYW4pLT5XVV9FTiA9IDApCisKKy8qKgorICogQGJyaWVmIEVuYWJsZSB3YWtlLXVwIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gY2FuIFRoZSBiYXNlIGFkZHJlc3Mgb2YgY2FuIG1vZHVsZS4KKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqCisgKiBAZGV0YWlscyBVc2VyIGNhbiB3YWtlLXVwIHN5c3RlbSB3aGVuIHRoZXJlIGlzIGEgZmFsbGluZyBlZGdlIGluIHRoZSBDQU5fUnggcGluLgorICovCisjZGVmaW5lIENBTl9FTkFCTEVfV0FLRVVQKGNhbikgKChjYW4pLT5XVV9FTiA9IENBTl9XVV9FTl9XQUtVUF9FTl9Nc2spCisKKy8qKgorICogQGJyaWVmIEdldCBzcGVjaWZpZWQgTWVzc2FnZSBPYmplY3QgbmV3IGRhdGEgaW50byBiaXQgdmFsdWUuCisgKgorICogQHBhcmFtW2luXSBjYW4gVGhlIGJhc2UgYWRkcmVzcyBvZiBjYW4gbW9kdWxlLgorICogQHBhcmFtW2luXSB1MzJNc2dOdW0gU3BlY2lmaWVkIE1lc3NhZ2UgT2JqZWN0IG51bWJlciwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAzMS4KKyAqCisgKiBAcmV0dXJuIFNwZWNpZmllZCBNZXNzYWdlIE9iamVjdCBuZXcgZGF0YSBpbnRvIGJpdCB2YWx1ZS4KKyAqCisgKiBAZGV0YWlscyBUaGUgTmV3RGF0IGJpdCAoQ0FOX0lGbl9NQ09OWzE1XSkgb2YgYSBzcGVjaWZpYyBNZXNzYWdlIE9iamVjdCBjYW4gYmUgc2V0L3Jlc2V0IGJ5IHRoZSBzb2Z0d2FyZSB0aHJvdWdoIHRoZSBJRm4gTWVzc2FnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKiAgICAgICAgICBvciBieSB0aGUgTWVzc2FnZSBIYW5kbGVyIGFmdGVyIHJlY2VwdGlvbiBvZiBhIERhdGEgRnJhbWUgb3IgYWZ0ZXIgYSBzdWNjZXNzZnVsIHRyYW5zbWlzc2lvbi4KKyAqLworI2RlZmluZSBDQU5fR0VUX05FV19EQVRBX0lOX0JJVChjYW4sIHUzMk1zZ051bSkgKCh1MzJNc2dOdW0pIDwgMTYgPyAoY2FuKS0+TkRBVDEgJiAoMSA8PCAodTMyTXNnTnVtKSkgOiAoY2FuKS0+TkRBVDIgJiAoMSA8PCAoKHUzMk1zZ051bSktMTYpKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBEZWZpbmUgQ0FOIGZ1bmN0aW9ucyBwcm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit1aW50MzJfdCBDQU5fU2V0QmF1ZFJhdGUoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMkJhdWRSYXRlKTsKK3ZvaWQgQ0FOX0Nsb3NlKENBTl9UICp0Q0FOKTsKK3VpbnQzMl90IENBTl9PcGVuKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJCYXVkUmF0ZSwgdWludDMyX3QgdTMyTW9kZSk7Cit2b2lkIENBTl9DTFJfSU5UX1BFTkRJTkdfQklUKENBTl9UICp0Q0FOLCB1aW50OF90IHUzMk1zZ051bSk7Cit2b2lkIENBTl9FbmFibGVJbnQoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBDQU5fRGlzYWJsZUludChDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTWFzayk7CitpbnQzMl90IENBTl9UcmFuc21pdChDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTXNnTnVtLCBTVFJfQ0FOTVNHX1QqIHBDYW5Nc2cpOworaW50MzJfdCBDQU5fUmVjZWl2ZShDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTXNnTnVtLCBTVFJfQ0FOTVNHX1QqIHBDYW5Nc2cpOworaW50MzJfdCBDQU5fU2V0TXVsdGlSeE1zZyhDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTXNnTnVtLCB1aW50MzJfdCB1MzJNc2dDb3VudCwgdWludDMyX3QgdTMySURUeXBlLCB1aW50MzJfdCB1MzJJRCk7CitpbnQzMl90IENBTl9TZXRSeE1zZyhDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTXNnTnVtLCB1aW50MzJfdCB1MzJJRFR5cGUsIHVpbnQzMl90IHUzMklEKTsKK2ludDMyX3QgQ0FOX1NldFJ4TXNnQW5kTXNrKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJNc2dOdW0sIHVpbnQzMl90IHUzMklEVHlwZSwgdWludDMyX3QgdTMySUQsIHVpbnQzMl90IHUzMklETWFzayk7CitpbnQzMl90IENBTl9TZXRUeE1zZyhDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTXNnTnVtLCBTVFJfQ0FOTVNHX1QqIHBDYW5Nc2cpOworaW50MzJfdCBDQU5fVHJpZ2dlclR4TXNnKENBTl9UICAqdENBTiwgdWludDMyX3QgdTMyTXNnTnVtKTsKK3ZvaWQgQ0FOX0VudGVySW5pdE1vZGUoQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThNYXNrKTsKK3ZvaWQgQ0FOX0xlYXZlSW5pdE1vZGUoQ0FOX1QgKnRDQU4pOwordm9pZCBDQU5fV2FpdE1zZyhDQU5fVCAqdENBTik7Cit1aW50MzJfdCBDQU5fR2V0Q0FOQml0UmF0ZShDQU5fVCAqdENBTik7Cit2b2lkIENBTl9FbnRlclRlc3RNb2RlKENBTl9UICp0Q0FOLCB1aW50OF90IHU4VGVzdE1hc2spOwordm9pZCBDQU5fTGVhdmVUZXN0TW9kZShDQU5fVCAqdENBTik7Cit1aW50MzJfdCBDQU5fSXNOZXdEYXRhUmVjZWl2ZWQoQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThNc2dPYmopOworaW50MzJfdCBDQU5fQmFzaWNTZW5kTXNnKENBTl9UICp0Q0FOLCBTVFJfQ0FOTVNHX1QqIHBDYW5Nc2cpOworaW50MzJfdCBDQU5fQmFzaWNSZWNlaXZlTXNnKENBTl9UICp0Q0FOLCBTVFJfQ0FOTVNHX1QqIHBDYW5Nc2cpOworaW50MzJfdCBDQU5fU2V0UnhNc2dPYmpBbmRNc2soQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThNc2dPYmosIHVpbnQ4X3QgdThpZFR5cGUsIHVpbnQzMl90IHUzMmlkLCB1aW50MzJfdCB1MzJpZG1hc2ssIHVpbnQ4X3QgdThzaW5nbGVPckZpZm9MYXN0KTsKK2ludDMyX3QgQ0FOX1NldFJ4TXNnT2JqKENBTl9UICp0Q0FOLCB1aW50OF90IHU4TXNnT2JqLCB1aW50OF90IHU4aWRUeXBlLCB1aW50MzJfdCB1MzJpZCwgdWludDhfdCB1OHNpbmdsZU9yRmlmb0xhc3QpOworaW50MzJfdCBDQU5fUmVhZE1zZ09iaihDQU5fVCAqdENBTiwgdWludDhfdCB1OE1zZ09iaiwgdWludDhfdCB1OFJlbGVhc2UsIFNUUl9DQU5NU0dfVCogcENhbk1zZyk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDQU5fRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ0FOX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DQU5fSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2Nsay5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvY2xrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhMWFiZAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2Nsay5oCkBAIC0wLDAgKzEsODU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY2xrLmgKKyAqIEB2ZXJzaW9uICBWMy4wCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIENsb2NrIENvbnRyb2xsZXIgKENMSykgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQ0xLX0hfXworI2RlZmluZSBfX0NMS19IX18KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBDTEtfRHJpdmVyIENMSyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBDTEtfRVhQT1JURURfQ09OU1RBTlRTIENMSyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKworI2RlZmluZSBGUkVRXzJNSFogICAgICAgICAgMjAwMDAwMFVMCisjZGVmaW5lIEZSRVFfOE1IWiAgICAgICAgICA4MDAwMDAwVUwKKyNkZWZpbmUgRlJFUV8yNE1IWiAgICAgICAgIDI0MDAwMDAwVUwKKyNkZWZpbmUgRlJFUV80OE1IWiAgICAgICAgIDQ4MDAwMDAwVUwKKyNkZWZpbmUgRlJFUV82NE1IWiAgICAgICAgIDY0MDAwMDAwVUwKKyNkZWZpbmUgRlJFUV85Nk1IWiAgICAgICAgIDk2MDAwMDAwVUwKKyNkZWZpbmUgRlJFUV8xNDRNSFogICAgICAgIDE0NDAwMDAwMFVMCisjZGVmaW5lIEZSRVFfMjAwTUhaICAgICAgICAyMDAwMDAwMDBVTAorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENMS1NFTDAgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0hYVCAgICAgICAgICgweDAwVUw8PENMS19DTEtTRUwwX0hDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgSENMSyBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwwX0hDTEtTRUxfTFhUICAgICAgICAgKDB4MDFVTDw8Q0xLX0NMS1NFTDBfSENMS1NFTF9Qb3MpIC8qITwgU2V0dGluZyBIQ0xLIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfSENMS1NFTF9QTEwgICAgICAgICAoMHgwMlVMPDxDTEtfQ0xLU0VMMF9IQ0xLU0VMX1BvcykgLyohPCBTZXR0aW5nIEhDTEsgY2xvY2sgc291cmNlIGFzIFBMTCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0xJUkMgICAgICAgICgweDAzVUw8PENMS19DTEtTRUwwX0hDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgSENMSyBjbG9jayBzb3VyY2UgYXMgTElSQyAqLworI2RlZmluZSBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0hJUkM0OCAgICAgICgweDA1VUw8PENMS19DTEtTRUwwX0hDTEtTRUxfUG9zKSAvKiE8IFNldHRpbmcgSENMSyBjbG9jayBzb3VyY2UgYXMgSElSQzQ4ICovCisjZGVmaW5lIENMS19DTEtTRUwwX0hDTEtTRUxfSElSQyAgICAgICAgKDB4MDdVTDw8Q0xLX0NMS1NFTDBfSENMS1NFTF9Qb3MpIC8qITwgU2V0dGluZyBIQ0xLIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSFhUICAgICAgICAoMHgwMFVMPDxDTEtfQ0xLU0VMMF9TVENMS1NFTF9Qb3MpIC8qITwgU2V0dGluZyBTeXNUaWNrIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfTFhUICAgICAgICAoMHgwMVVMPDxDTEtfQ0xLU0VMMF9TVENMS1NFTF9Qb3MpIC8qITwgU2V0dGluZyBTeXNUaWNrIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSFhUX0RJVjIgICAoMHgwMlVMPDxDTEtfQ0xLU0VMMF9TVENMS1NFTF9Qb3MpIC8qITwgU2V0dGluZyBTeXNUaWNrIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSENMS19ESVYyICAoMHgwM1VMPDxDTEtfQ0xLU0VMMF9TVENMS1NFTF9Qb3MpIC8qITwgU2V0dGluZyBTeXNUaWNrIGNsb2NrIHNvdXJjZSBhcyBIQ0xLLzIgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSElSQ19ESVYyICAoMHgwN1VMPDxDTEtfQ0xLU0VMMF9TVENMS1NFTF9Qb3MpIC8qITwgU2V0dGluZyBTeXNUaWNrIGNsb2NrIHNvdXJjZSBhcyBISVJDLzIgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSENMSyAgICAgICAoMHgwMVVMPDxTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcykgLyohPCBTZXR0aW5nIFN5c1RpY2sgY2xvY2sgc291cmNlIGFzIEhDTEsgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMF9TREgwU0VMX0hYVCAgICAgICAgICgweDAwVUw8PENMS19DTEtTRUwwX1NESDBTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0RIMCBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwwX1NESDBTRUxfUExMICAgICAgICAgKDB4MDFVTDw8Q0xLX0NMS1NFTDBfU0RIMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBTREgwIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU0RIMFNFTF9IQ0xLICAgICAgICAoMHgwMlVMPDxDTEtfQ0xLU0VMMF9TREgwU0VMX1BvcykgLyohPCBTZXR0aW5nIFNESDAgY2xvY2sgc291cmNlIGFzIEhDTEsgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfU0RIMFNFTF9ISVJDICAgICAgICAoMHgwM1VMPDxDTEtfQ0xLU0VMMF9TREgwU0VMX1BvcykgLyohPCBTZXR0aW5nIFNESDAgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMF9VU0JTRUxfSElSQzQ4ICAgICAgICgweDAwVUw8PENMS19DTEtTRUwwX1VTQlNFTF9Qb3MpICAvKiE8IFNldHRpbmcgVVNCIGNsb2NrIHNvdXJjZSBhcyBISVJDNDggKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDBfVVNCU0VMX1BMTCAgICAgICAgICAoMHgwMVVMPDxDTEtfQ0xLU0VMMF9VU0JTRUxfUG9zKSAgLyohPCBTZXR0aW5nIFVTQiBjbG9jayBzb3VyY2UgYXMgUExMICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENMS1NFTDEgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfQ0xLU0VMMV9XRFRTRUxfTFhUICAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwxX1dEVFNFTF9Qb3MpICAvKiE8IFNldHRpbmcgV0RUIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfV0RUU0VMX0hDTEtfRElWMjA0OCAgKDB4MlVMPDxDTEtfQ0xLU0VMMV9XRFRTRUxfUG9zKSAgLyohPCBTZXR0aW5nIFdEVCBjbG9jayBzb3VyY2UgYXMgSENMSy8yMDQ4ICovCisjZGVmaW5lIENMS19DTEtTRUwxX1dEVFNFTF9MSVJDICAgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDFfV0RUU0VMX1BvcykgIC8qITwgU2V0dGluZyBXRFQgY2xvY2sgc291cmNlIGFzIExJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIwU0VMX0hYVCAgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwxX1RNUjBTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMCBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjBTRUxfTFhUICAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDFfVE1SMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAwIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMFNFTF9QQ0xLMCAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMMV9UTVIwU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDAgY2xvY2sgc291cmNlIGFzIFBDTEswICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjBTRUxfRVhUX1RSRyAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDFfVE1SMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAwIGNsb2NrIHNvdXJjZSBhcyBleHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjBTRUxfTElSQyAgICAgICAgICgweDVVTDw8Q0xLX0NMS1NFTDFfVE1SMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAwIGNsb2NrIHNvdXJjZSBhcyBMSVJDICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjBTRUxfSElSQyAgICAgICAgICgweDdVTDw8Q0xLX0NMS1NFTDFfVE1SMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAwIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMVNFTF9IWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMMV9UTVIxU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDEgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIxU0VMX0xYVCAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwxX1RNUjFTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMSBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjFTRUxfUENMSzAgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDFfVE1SMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAxIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIxU0VMX0VYVF9UUkcgICAgICAoMHgzVUw8PENMS19DTEtTRUwxX1RNUjFTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMSBjbG9jayBzb3VyY2UgYXMgZXh0ZXJuYWwgdHJpZ2dlciAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIxU0VMX0xJUkMgICAgICAgICAoMHg1VUw8PENMS19DTEtTRUwxX1RNUjFTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMSBjbG9jayBzb3VyY2UgYXMgTElSQyAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIxU0VMX0hJUkMgICAgICAgICAoMHg3VUw8PENMS19DTEtTRUwxX1RNUjFTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMSBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjJTRUxfSFhUICAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDFfVE1SMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAyIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMlNFTF9MWFQgICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMMV9UTVIyU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDIgY2xvY2sgc291cmNlIGFzIExYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIyU0VMX1BDTEsxICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwxX1RNUjJTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMiBjbG9jayBzb3VyY2UgYXMgUENMSzEgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMlNFTF9FWFRfVFJHICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMMV9UTVIyU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDIgY2xvY2sgc291cmNlIGFzIGV4dGVybmFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMlNFTF9MSVJDICAgICAgICAgKDB4NVVMPDxDTEtfQ0xLU0VMMV9UTVIyU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDIgY2xvY2sgc291cmNlIGFzIExJUkMgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SMlNFTF9ISVJDICAgICAgICAgKDB4N1VMPDxDTEtfQ0xLU0VMMV9UTVIyU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDIgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9UTVIzU0VMX0hYVCAgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwxX1RNUjNTRUxfUG9zKSAvKiE8IFNldHRpbmcgVGltZXIgMyBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjNTRUxfTFhUICAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDFfVE1SM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAzIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVE1SM1NFTF9QQ0xLMSAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMMV9UTVIzU0VMX1BvcykgLyohPCBTZXR0aW5nIFRpbWVyIDMgY2xvY2sgc291cmNlIGFzIFBDTEsxICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjNTRUxfRVhUX1RSRyAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDFfVE1SM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAzIGNsb2NrIHNvdXJjZSBhcyBleHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjNTRUxfTElSQyAgICAgICAgICgweDVVTDw8Q0xLX0NMS1NFTDFfVE1SM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAzIGNsb2NrIHNvdXJjZSBhcyBMSVJDICovCisjZGVmaW5lIENMS19DTEtTRUwxX1RNUjNTRUxfSElSQyAgICAgICAgICgweDdVTDw8Q0xLX0NMS1NFTDFfVE1SM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBUaW1lciAzIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVUFSVDBTRUxfSFhUICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMMV9VQVJUMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMCBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1VBUlQwU0VMX1BMTCAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDFfVUFSVDBTRUxfUG9zKSAvKiE8IFNldHRpbmcgVUFSVDAgY2xvY2sgc291cmNlIGFzIFBMTCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9VQVJUMFNFTF9MWFQgICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwxX1VBUlQwU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQwIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVUFSVDBTRUxfSElSQyAgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMMV9VQVJUMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMCBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwxX1VBUlQxU0VMX0hYVCAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDFfVUFSVDFTRUxfUG9zKSAvKiE8IFNldHRpbmcgVUFSVDEgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMV9VQVJUMVNFTF9QTEwgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwxX1VBUlQxU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQxIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfVUFSVDFTRUxfTFhUICAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMMV9VQVJUMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBVQVJUMSBjbG9jayBzb3VyY2UgYXMgTFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX1VBUlQxU0VMX0hJUkMgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDFfVUFSVDFTRUxfUG9zKSAvKiE8IFNldHRpbmcgVUFSVDEgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9DTEtPU0VMX0hYVCAgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwxX0NMS09TRUxfUG9zKSAvKiE8IFNldHRpbmcgQ0xLTyBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwxX0NMS09TRUxfTFhUICAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDFfQ0xLT1NFTF9Qb3MpIC8qITwgU2V0dGluZyBDTEtPIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfQ0xLT1NFTF9IQ0xLICAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMMV9DTEtPU0VMX1BvcykgLyohPCBTZXR0aW5nIENMS08gY2xvY2sgc291cmNlIGFzIEhDTEsgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDFfQ0xLT1NFTF9ISVJDICAgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMMV9DTEtPU0VMX1BvcykgLyohPCBTZXR0aW5nIENMS08gY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMV9XV0RUU0VMX0hDTEtfRElWMjA0OCAoMHgyVUw8PENMS19DTEtTRUwxX1dXRFRTRUxfUG9zKSAvKiE8IFNldHRpbmcgV1dEVCBjbG9jayBzb3VyY2UgYXMgSENMSy8yMDQ4ICovCisjZGVmaW5lIENMS19DTEtTRUwxX1dXRFRTRUxfTElSQyAgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDFfV1dEVFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXV0RUIGNsb2NrIHNvdXJjZSBhcyBMSVJDICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENMS1NFTDIgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfQ0xLU0VMMl9FUFdNMFNFTF9QQ0xLMCAgICAgICAoMHgxVUw8PENMS19DTEtTRUwyX0VQV00wU0VMX1BvcykgLyohPCBTZXR0aW5nIEVQV00wIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9FUFdNMVNFTF9QQ0xLMSAgICAgICAoMHgxVUw8PENMS19DTEtTRUwyX0VQV00xU0VMX1BvcykgLyohPCBTZXR0aW5nIEVQV00xIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMSAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX0JQV00wU0VMX1BDTEswICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDJfQlBXTTBTRUxfUG9zKSAvKiE8IFNldHRpbmcgQlBXTTAgY2xvY2sgc291cmNlIGFzIFBDTEswICovCisjZGVmaW5lIENMS19DTEtTRUwyX0JQV00xU0VMX1BDTEsxICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDJfQlBXTTFTRUxfUG9zKSAvKiE8IFNldHRpbmcgQlBXTTEgY2xvY2sgc291cmNlIGFzIFBDTEsxICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfSFhUICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBRU1BJMCBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwyX1FTUEkwU0VMX1BMTCAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSAvKiE8IFNldHRpbmcgUVNQSTAgY2xvY2sgc291cmNlIGFzIFBMTCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QQ0xLMCAgICAgICAoMHgyVUw8PENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgLyohPCBTZXR0aW5nIFFTUEkwIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9ISVJDICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgLyohPCBTZXR0aW5nIFFTUEkwIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMFNFTF9IWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTAgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BMTCAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMCBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTBTRUxfUENMSzEgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkwIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMSAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkwU0VMX0hJUkMgICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMCBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTFTRUxfSFhUICAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkxIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMVNFTF9QTEwgICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTEgY2xvY2sgc291cmNlIGFzIFBMTCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BDTEswICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMSBjbG9jayBzb3VyY2UgYXMgUENMSzAgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMVNFTF9ISVJDICAgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTEgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkyU0VMX0hYVCAgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMiBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTJTRUxfUExMICAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkyIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJMlNFTF9QQ0xLMSAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTIgY2xvY2sgc291cmNlIGFzIFBDTEsxICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTJTRUxfSElSQyAgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkyIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDJfU1BJM1NFTF9IWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgLyohPCBTZXR0aW5nIFNQSTMgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BMTCAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMyBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwyX1NQSTNTRUxfUENMSzAgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpIC8qITwgU2V0dGluZyBTUEkzIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMCAqLworI2RlZmluZSBDTEtfQ0xLU0VMMl9TUEkzU0VMX0hJUkMgICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSAvKiE8IFNldHRpbmcgU1BJMyBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDTEtTRUwzIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MwU0VMX0hYVCAgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwzX1NDMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBTQzAgY2xvY2sgc291cmNlIGFzIEhYVCAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzBTRUxfUExMICAgICAgICAgICgweDFVTDw8Q0xLX0NMS1NFTDNfU0MwU0VMX1BvcykgLyohPCBTZXR0aW5nIFNDMCBjbG9jayBzb3VyY2UgYXMgUExMICovCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMFNFTF9QQ0xLMCAgICAgICAgKDB4MlVMPDxDTEtfQ0xLU0VMM19TQzBTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0MwIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMCAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzBTRUxfSElSQyAgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDNfU0MwU0VMX1BvcykgLyohPCBTZXR0aW5nIFNDMCBjbG9jayBzb3VyY2UgYXMgSElSQyAqLworCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMVNFTF9IWFQgICAgICAgICAgKDB4MFVMPDxDTEtfQ0xLU0VMM19TQzFTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0MxIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MxU0VMX1BMTCAgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwzX1NDMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBTQzEgY2xvY2sgc291cmNlIGFzIFBMTCAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzFTRUxfUENMSzEgICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDNfU0MxU0VMX1BvcykgLyohPCBTZXR0aW5nIFNDMSBjbG9jayBzb3VyY2UgYXMgUENMSzEgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MxU0VMX0hJUkMgICAgICAgICAoMHgzVUw8PENMS19DTEtTRUwzX1NDMVNFTF9Qb3MpIC8qITwgU2V0dGluZyBTQzEgY2xvY2sgc291cmNlIGFzIEhJUkMgKi8KKworI2RlZmluZSBDTEtfQ0xLU0VMM19TQzJTRUxfSFhUICAgICAgICAgICgweDBVTDw8Q0xLX0NMS1NFTDNfU0MyU0VMX1BvcykgLyohPCBTZXR0aW5nIFNDMiBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMlNFTF9QTEwgICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMM19TQzJTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0MyIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfU0MyU0VMX1BDTEswICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwzX1NDMlNFTF9Qb3MpIC8qITwgU2V0dGluZyBTQzIgY2xvY2sgc291cmNlIGFzIFBDTEsxICovCisjZGVmaW5lIENMS19DTEtTRUwzX1NDMlNFTF9ISVJDICAgICAgICAgKDB4M1VMPDxDTEtfQ0xLU0VMM19TQzJTRUxfUG9zKSAvKiE8IFNldHRpbmcgU0MyIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfUlRDU0VMX0xYVCAgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwzX1JUQ1NFTF9Qb3MpICAvKiE8IFNldHRpbmcgUlRDIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfUlRDU0VMX0xJUkMgICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwzX1JUQ1NFTF9Qb3MpICAvKiE8IFNldHRpbmcgUlRDIGNsb2NrIHNvdXJjZSBhcyBMSVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfSTJTMFNFTF9IWFQgICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwzX0kyUzBTRUxfUG9zKSAvKiE8IFNldHRpbmcgSTJTMCBjbG9jayBzb3VyY2UgYXMgSFhUICovCisjZGVmaW5lIENMS19DTEtTRUwzX0kyUzBTRUxfUExMICAgICAgICAgKDB4MVVMPDxDTEtfQ0xLU0VMM19JMlMwU0VMX1BvcykgLyohPCBTZXR0aW5nIEkyUzAgY2xvY2sgc291cmNlIGFzIFBMTCAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19JMlMwU0VMX1BDTEswICAgICAgICgweDJVTDw8Q0xLX0NMS1NFTDNfSTJTMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBJMlMwIGNsb2NrIHNvdXJjZSBhcyBQQ0xLMCAqLworI2RlZmluZSBDTEtfQ0xLU0VMM19JMlMwU0VMX0hJUkMgICAgICAgICgweDNVTDw8Q0xLX0NMS1NFTDNfSTJTMFNFTF9Qb3MpIC8qITwgU2V0dGluZyBJMlMwIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDJTRUxfSFhUICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwzX1VBUlQyU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQyIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDJTRUxfUExMICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwzX1VBUlQyU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQyIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDJTRUxfTFhUICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwzX1VBUlQyU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQyIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDJTRUxfSElSQyAgICAgICAoMHgzVUw8PENMS19DTEtTRUwzX1VBUlQyU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQyIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDNTRUxfSFhUICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwzX1VBUlQzU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQzIGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDNTRUxfUExMICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwzX1VBUlQzU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQzIGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDNTRUxfTFhUICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwzX1VBUlQzU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQzIGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDNTRUxfSElSQyAgICAgICAoMHgzVUw8PENMS19DTEtTRUwzX1VBUlQzU0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQzIGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDRTRUxfSFhUICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwzX1VBUlQ0U0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQ0IGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDRTRUxfUExMICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwzX1VBUlQ0U0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQ0IGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDRTRUxfTFhUICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwzX1VBUlQ0U0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQ0IGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDRTRUxfSElSQyAgICAgICAoMHgzVUw8PENMS19DTEtTRUwzX1VBUlQ0U0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQ0IGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDVTRUxfSFhUICAgICAgICAoMHgwVUw8PENMS19DTEtTRUwzX1VBUlQ1U0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQ1IGNsb2NrIHNvdXJjZSBhcyBIWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDVTRUxfUExMICAgICAgICAoMHgxVUw8PENMS19DTEtTRUwzX1VBUlQ1U0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQ1IGNsb2NrIHNvdXJjZSBhcyBQTEwgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDVTRUxfTFhUICAgICAgICAoMHgyVUw8PENMS19DTEtTRUwzX1VBUlQ1U0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQ1IGNsb2NrIHNvdXJjZSBhcyBMWFQgKi8KKyNkZWZpbmUgQ0xLX0NMS1NFTDNfVUFSVDVTRUxfSElSQyAgICAgICAoMHgzVUw8PENMS19DTEtTRUwzX1VBUlQ1U0VMX1BvcykgLyohPCBTZXR0aW5nIFVBUlQ1IGNsb2NrIHNvdXJjZSBhcyBISVJDICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENMS0RJVjAgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfQ0xLRElWMF9IQ0xLKHgpICAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVYwX0hDTEtESVZfUG9zKSAgLyohPCBDTEtESVYwIFNldHRpbmcgZm9yIEhDTEsgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4xNiAqLworI2RlZmluZSBDTEtfQ0xLRElWMF9VU0IoeCkgICAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVYwX1VTQkRJVl9Qb3MpICAgLyohPCBDTEtESVYwIFNldHRpbmcgZm9yIFVTQiBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjE2ICovCisjZGVmaW5lIENMS19DTEtESVYwX1VBUlQwKHgpICAgICgoKHgpLTFVTCkgPDwgQ0xLX0NMS0RJVjBfVUFSVDBESVZfUG9zKSAvKiE8IENMS0RJVjAgU2V0dGluZyBmb3IgVUFSVDAgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4xNiAqLworI2RlZmluZSBDTEtfQ0xLRElWMF9VQVJUMSh4KSAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVYwX1VBUlQxRElWX1BvcykgLyohPCBDTEtESVYwIFNldHRpbmcgZm9yIFVBUlQxIGNsb2NrIGRpdmlkZXIuIEl0IGNvdWxkIGJlIDF+MTYgKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjBfRUFEQyh4KSAgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWMF9FQURDRElWX1BvcykgIC8qITwgQ0xLRElWMCBTZXR0aW5nIGZvciBFQURDIGNsb2NrIGRpdmlkZXIuIEl0IGNvdWxkIGJlIDF+MjU2ICovCisjZGVmaW5lIENMS19DTEtESVYwX1NESDAoeCkgICAgICgoKHgpLTFVTCkgPDwgQ0xLX0NMS0RJVjBfU0RIMERJVl9Qb3MpICAvKiE8IENMS0RJVjAgU2V0dGluZyBmb3IgU0RIMCBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjI1NiAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDTEtESVYxIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX0NMS0RJVjFfU0MwKHgpICAgICAgKCgoeCktMVVMKSA8PCBDTEtfQ0xLRElWMV9TQzBESVZfUG9zKSAgLyohPCBDTEtESVYxIFNldHRpbmcgZm9yIFNDMCBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjI1NiAqLworI2RlZmluZSBDTEtfQ0xLRElWMV9TQzEoeCkgICAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVYxX1NDMURJVl9Qb3MpICAvKiE8IENMS0RJVjEgU2V0dGluZyBmb3IgU0MxIGNsb2NrIGRpdmlkZXIuIEl0IGNvdWxkIGJlIDF+MjU2ICovCisjZGVmaW5lIENMS19DTEtESVYxX1NDMih4KSAgICAgICgoKHgpLTFVTCkgPDwgQ0xLX0NMS0RJVjFfU0MyRElWX1BvcykgIC8qITwgQ0xLRElWMSBTZXR0aW5nIGZvciBTQzIgY2xvY2sgZGl2aWRlci4gSXQgY291bGQgYmUgMX4yNTYgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQ0xLRElWNCBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQyKHgpICAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVY0X1VBUlQyRElWX1BvcykgIC8qITwgQ0xLRElWNCBTZXR0aW5nIGZvciBVQVJUMiBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjE2ICovCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQzKHgpICAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVY0X1VBUlQzRElWX1BvcykgIC8qITwgQ0xLRElWNCBTZXR0aW5nIGZvciBVQVJUMyBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjE2ICovCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQ0KHgpICAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVY0X1VBUlQ0RElWX1BvcykgIC8qITwgQ0xLRElWNCBTZXR0aW5nIGZvciBVQVJUNCBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjE2ICovCisjZGVmaW5lIENMS19DTEtESVY0X1VBUlQ1KHgpICAgICAoKCh4KS0xVUwpIDw8IENMS19DTEtESVY0X1VBUlQ1RElWX1BvcykgIC8qITwgQ0xLRElWNCBTZXR0aW5nIGZvciBVQVJUNSBjbG9jayBkaXZpZGVyLiBJdCBjb3VsZCBiZSAxfjE2ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFBDTEtESVYgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX0RJVjEgICAgICAgICAgICAoMHgwVUwgPDwgQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzAgPSBIQ0xLICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMERJVl9ESVYyICAgICAgICAgICAgKDB4MVVMIDw8IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEswID0gMS8yIEhDTEsgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjBESVZfRElWNCAgICAgICAgICAgICgweDJVTCA8PCBDTEtfUENMS0RJVl9BUEIwRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMCA9IDEvNCBIQ0xLICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX0RJVjggICAgICAgCSAgICAoMHgzVUwgPDwgQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzAgPSAxLzggSENMSyAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMERJVl9ESVYxNiAgICAgIAkgICAgKDB4NFVMIDw8IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEswID0gMS8xNiBIQ0xLICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjBESVZfRElWMzIgICAgICAJICAgICgweDVVTCA8PCBDTEtfUENMS0RJVl9BUEIwRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMCA9IDEvMzIgSENMSyAqLworCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjBESVZfSENMSyAgICAgICAgICAgICgweDBVTCA8PCBDTEtfUENMS0RJVl9BUEIwRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMCA9IEhDTEsgICAgICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX0hDTEtfRElWMiAgICAgICAoMHgxVUwgPDwgQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzAgPSAxLzIgSENMSyAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMERJVl9IQ0xLX0RJVjQgICAgICAgKDB4MlVMIDw8IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEswID0gMS80IEhDTEsgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjBESVZfSENMS19ESVY4ICAgICAgICgweDNVTCA8PCBDTEtfUENMS0RJVl9BUEIwRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMCA9IDEvOCBIQ0xLICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIwRElWX0hDTEtfRElWMTYgICAgICAoMHg0VUwgPDwgQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzAgPSAxLzE2IEhDTEsgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMERJVl9IQ0xLX0RJVjMyICAgICAgKDB4NVVMIDw8IENMS19QQ0xLRElWX0FQQjBESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEswID0gMS8zMiBIQ0xLICovCisKKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9ESVYxICAgICAgICAgICAgKDB4MFVMIDw8IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEsxID0gSENMSyAgICAgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjFESVZfRElWMiAgICAgICAJICAgICgweDFVTCA8PCBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMSA9IDEvMiBIQ0xLICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIxRElWX0RJVjQgICAgICAgCSAgICAoMHgyVUwgPDwgQ0xLX1BDTEtESVZfQVBCMURJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzEgPSAxLzQgSENMSyAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9ESVY4ICAgICAgIAkgICAgKDB4M1VMIDw8IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEsxID0gMS84IEhDTEsgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjFESVZfRElWMTYgICAgICAJICAgICgweDRVTCA8PCBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMSA9IDEvMTYgSENMSyAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIxRElWX0RJVjMyICAgICAgCSAgICAoMHg1VUwgPDwgQ0xLX1BDTEtESVZfQVBCMURJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzEgPSAxLzMyIEhDTEsgKi8KKworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIxRElWX0hDTEsgICAgICAgICAgICAoMHgwVUwgPDwgQ0xLX1BDTEtESVZfQVBCMURJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzEgPSBIQ0xLICAgICAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9IQ0xLX0RJVjIgICAgICAgKDB4MVVMIDw8IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEsxID0gMS8yIEhDTEsgICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjFESVZfSENMS19ESVY0ICAgICAgICgweDJVTCA8PCBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMSA9IDEvNCBIQ0xLICAqLworI2RlZmluZSBDTEtfUENMS0RJVl9BUEIxRElWX0hDTEtfRElWOCAgICAgICAoMHgzVUwgPDwgQ0xLX1BDTEtESVZfQVBCMURJVl9Qb3MpICAvKiE8IFBDTEtESVYgU2V0dGluZyBmb3IgUENMSzEgPSAxLzggSENMSyAgKi8KKyNkZWZpbmUgQ0xLX1BDTEtESVZfQVBCMURJVl9IQ0xLX0RJVjE2ICAgICAgKDB4NFVMIDw8IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSAgLyohPCBQQ0xLRElWIFNldHRpbmcgZm9yIFBDTEsxID0gMS8xNiBIQ0xLICovCisjZGVmaW5lIENMS19QQ0xLRElWX0FQQjFESVZfSENMS19ESVYzMiAgICAgICgweDVVTCA8PCBDTEtfUENMS0RJVl9BUEIxRElWX1BvcykgIC8qITwgUENMS0RJViBTZXR0aW5nIGZvciBQQ0xLMSA9IDEvMzIgSENMSyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBQTExDVEwgY29uc3RhbnQgZGVmaW5pdGlvbnMuIFBMTCA9IEZJTiAqICgyKk5GKSAvIE5SIC8gTk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF9QTExTUkNfSFhUICAgMHgwMDAwMDAwMFVMICAgIC8qITwgRm9yIFBMTCBjbG9jayBzb3VyY2UgaXMgSFhULiAgMk1IeiA8IEZJTi9OUiA8IDhNSHogKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF9QTExTUkNfSElSQyAgMHgwMDA4MDAwMFVMICAgIC8qITwgRm9yIFBMTCBjbG9jayBzb3VyY2UgaXMgSElSQy4gMk1IeiA8IEZJTi9OUiA8IDhNSHogKi8KKworI2RlZmluZSBDTEtfUExMQ1RMX05GKHgpICAgICAgICAoKHgpLTJVTCkgICAgICAgICAvKiE8IHggbXVzdCBiZSBjb25zdGFudCBhbmQgMiA8PSB4IDw9IDUxMy4gOTZNSHogPCBGSU4qKDIqTkYpL05SIDwgMjAwTUh6ICovCisjZGVmaW5lIENMS19QTExDVExfTlIoeCkgICAgICAgICgoKHgpLTFVTCk8PDkpICAgIC8qITwgeCBtdXN0IGJlIGNvbnN0YW50IGFuZCAyIDw9IHggPD0gMzMuICAyTUh6IDwgRklOL05SIDwgOE1IeiAqLworCisjZGVmaW5lIENMS19QTExDVExfTk9fMSAgICAgICAgIDB4MDAwMFVMICAgICAgICAvKiE8IEZvciBvdXRwdXQgZGl2aWRlciBpcyAxICovCisjZGVmaW5lIENMS19QTExDVExfTk9fMiAgICAgICAgIDB4NDAwMFVMICAgICAgICAvKiE8IEZvciBvdXRwdXQgZGl2aWRlciBpcyAyICovCisjZGVmaW5lIENMS19QTExDVExfTk9fNCAgICAgICAgIDB4QzAwMFVMICAgICAgICAvKiE8IEZvciBvdXRwdXQgZGl2aWRlciBpcyA0ICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF80OE1Iel9IWFQgICAgKENMS19QTExDVExfUExMU1JDX0hYVCAgfCBDTEtfUExMQ1RMX05SKDJVTCkgfCBDTEtfUExMQ1RMX05GKDE2VUwpIHwgQ0xLX1BMTENUTF9OT180KSAvKiE8IFByZWRlZmluZWQgUExMQ1RMIHNldHRpbmcgZm9yIDQ4TUh6IFBMTCBvdXRwdXQgd2l0aCBIWFQgKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF80OE1Iel9ISVJDICAgKENMS19QTExDVExfUExMU1JDX0hJUkMgfCBDTEtfUExMQ1RMX05SKDJVTCkgfCBDTEtfUExMQ1RMX05GKDE2VUwpIHwgQ0xLX1BMTENUTF9OT180KSAvKiE8IFByZWRlZmluZWQgUExMQ1RMIHNldHRpbmcgZm9yIDQ4TUh6IFBMTCBvdXRwdXQgd2l0aCBISVJDICovCisKKyNkZWZpbmUgQ0xLX1BMTENUTF82NE1Iel9IWFQgICAgKENMS19QTExDVExfUExMU1JDX0hYVCAgfCBDTEtfUExMQ1RMX05SKDNVTCkgfCBDTEtfUExMQ1RMX05GKDE2VUwpIHwgQ0xLX1BMTENUTF9OT18yKSAvKiE8IFByZWRlZmluZWQgUExMQ1RMIHNldHRpbmcgZm9yIDY0TUh6IFBMTCBvdXRwdXQgd2l0aCBIWFQgKi8KKyNkZWZpbmUgQ0xLX1BMTENUTF82NE1Iel9ISVJDICAgKENMS19QTExDVExfUExMU1JDX0hJUkMgfCBDTEtfUExMQ1RMX05SKDNVTCkgfCBDTEtfUExMQ1RMX05GKDE2VUwpIHwgQ0xLX1BMTENUTF9OT18yKSAvKiE8IFByZWRlZmluZWQgUExMQ1RMIHNldHRpbmcgZm9yIDY0SHogUExMIG91dHB1dCB3aXRoIEhJUkMgKi8KKworI2RlZmluZSBDTEtfUExMQ1RMXzk2TUh6X0hYVCAgICAoQ0xLX1BMTENUTF9QTExTUkNfSFhUICB8IENMS19QTExDVExfTlIoMlVMKSB8IENMS19QTExDVExfTkYoMTZVTCkgfCBDTEtfUExMQ1RMX05PXzIpIC8qITwgUHJlZGVmaW5lZCBQTExDVEwgc2V0dGluZyBmb3IgOTZNSHogUExMIG91dHB1dCB3aXRoIEhYVCAqLworI2RlZmluZSBDTEtfUExMQ1RMXzk2TUh6X0hJUkMgICAoQ0xLX1BMTENUTF9QTExTUkNfSElSQyB8IENMS19QTExDVExfTlIoMlVMKSB8IENMS19QTExDVExfTkYoMTZVTCkgfCBDTEtfUExMQ1RMX05PXzIpIC8qITwgUHJlZGVmaW5lZCBQTExDVEwgc2V0dGluZyBmb3IgOTZNSHogUExMIG91dHB1dCB3aXRoIEhJUkMgKi8KKworI2RlZmluZSBDTEtfUExMQ1RMXzEyOE1Iel9IWFQgICAgKENMS19QTExDVExfUExMU1JDX0hYVCAgfCBDTEtfUExMQ1RMX05SKDNVTCkgfCBDTEtfUExMQ1RMX05GKDE2VUwpIHwgQ0xLX1BMTENUTF9OT18xKSAvKiE8IFByZWRlZmluZWQgUExMQ1RMIHNldHRpbmcgZm9yIDEyOE1IeiBQTEwgb3V0cHV0IHdpdGggSFhUICovCisjZGVmaW5lIENMS19QTExDVExfMTI4TUh6X0hJUkMgICAoQ0xLX1BMTENUTF9QTExTUkNfSElSQyB8IENMS19QTExDVExfTlIoM1VMKSB8IENMS19QTExDVExfTkYoMTZVTCkgfCBDTEtfUExMQ1RMX05PXzEpIC8qITwgUHJlZGVmaW5lZCBQTExDVEwgc2V0dGluZyBmb3IgMTI4TUh6IFBMTCBvdXRwdXQgd2l0aCBISVJDICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE1PRFVMRSBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQVBCQ0xLKDMxOjMwKXxDTEtTRUwoMjk6MjgpfENMS1NFTF9Nc2soMjc6MjUpIHxDTEtTRUxfUG9zKDI0OjIwKXxDTEtESVYoMTk6MTgpfENMS0RJVl9Nc2soMTc6MTApfENMS0RJVl9Qb3MoOTo1KXxJUF9FTl9Qb3MoNDowKSAqLworCisjZGVmaW5lIE1PRFVMRV9BUEJDTEsoeCkgICAgICAgICgoKHgpID4+MzApICYgMHgzVUwpICAgIC8qITwgQ2FsY3VsYXRlIEFIQkNMSy9BUEJDTEsgb2Zmc2V0IG9uIE1PRFVMRSBpbmRleCwgMHgwOkFIQkNMSywgMHgxOkFQQkNMSzAsIDB4MjpBUEJDTEsxICovCisjZGVmaW5lIE1PRFVMRV9DTEtTRUwoeCkgICAgICAgICgoKHgpID4+MjgpICYgMHgzVUwpICAgIC8qITwgQ2FsY3VsYXRlIENMS1NFTCBvZmZzZXQgb24gTU9EVUxFIGluZGV4LCAweDA6Q0xLU0VMMCwgMHgxOkNMS1NFTDEsIDB4MjpDTEtTRUwyLCAweDM6Q0xLU0VMMyAqLworI2RlZmluZSBNT0RVTEVfQ0xLU0VMX01zayh4KSAgICAoKCh4KSA+PjI1KSAmIDB4N1VMKSAgICAvKiE8IENhbGN1bGF0ZSBDTEtTRUwgbWFzayBvZmZzZXQgb24gTU9EVUxFIGluZGV4ICovCisjZGVmaW5lIE1PRFVMRV9DTEtTRUxfUG9zKHgpICAgICgoKHgpID4+MjApICYgMHgxZlVMKSAgIC8qITwgQ2FsY3VsYXRlIENMS1NFTCBwb3NpdGlvbiBvZmZzZXQgb24gTU9EVUxFIGluZGV4ICovCisjZGVmaW5lIE1PRFVMRV9DTEtESVYoeCkgICAgICAgICgoKHgpID4+MTgpICYgMHgzVUwpICAgIC8qITwgQ2FsY3VsYXRlIEFQQkNMSyBDTEtESVYgb24gTU9EVUxFIGluZGV4LCAweDA6Q0xLRElWMCwgMHgxOkNMS0RJVjEsIDB4NDpDTEtESVY0ICovCisjZGVmaW5lIE1PRFVMRV9DTEtESVZfTXNrKHgpICAgICgoKHgpID4+MTApICYgMHhmZlVMKSAgIC8qITwgQ2FsY3VsYXRlIENMS0RJViBtYXNrIG9mZnNldCBvbiBNT0RVTEUgaW5kZXggKi8KKyNkZWZpbmUgTU9EVUxFX0NMS0RJVl9Qb3MoeCkgICAgKCgoeCkgPj41ICkgJiAweDFmVUwpICAgLyohPCBDYWxjdWxhdGUgQ0xLRElWIHBvc2l0aW9uIG9mZnNldCBvbiBNT0RVTEUgaW5kZXggKi8KKyNkZWZpbmUgTU9EVUxFX0lQX0VOX1Bvcyh4KSAgICAgKCgoeCkgPj4wICkgJiAweDFmVUwpICAgLyohPCBDYWxjdWxhdGUgQVBCQ0xLIG9mZnNldCBvbiBNT0RVTEUgaW5kZXggKi8KKyNkZWZpbmUgTU9EVUxFX05vTXNrICAgICAgICAgICAgMHgwVUwgICAgICAgICAgICAgICAgICAgICAvKiE8IE5vdCBtYXNrIG9uIE1PRFVMRSBpbmRleCAqLworI2RlZmluZSBOQSAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfTm9Nc2sgICAgICAgICAgICAgIC8qITwgTm90IEF2YWlsYWJsZSAqLworCisjZGVmaW5lIE1PRFVMRV9BUEJDTEtfRU5DKHgpICAgICAgICAoKCh4KSAmIDB4MDNVTCkgPDwgMzApICAgLyohPCBNT0RVTEUgaW5kZXgsIDB4MDpBSEJDTEssIDB4MTpBUEJDTEswLCAweDI6QVBCQ0xLMSAqLworI2RlZmluZSBNT0RVTEVfQ0xLU0VMX0VOQyh4KSAgICAgICAgKCgoeCkgJiAweDAzVUwpIDw8IDI4KSAgIC8qITwgQ0xLU0VMIG9mZnNldCBvbiBNT0RVTEUgaW5kZXgsIDB4MDpDTEtTRUwwLCAweDE6Q0xLU0VMMSwgMHgyOkNMS1NFTDIsIDB4MzpDTEtTRUwzICovCisjZGVmaW5lIE1PRFVMRV9DTEtTRUxfTXNrX0VOQyh4KSAgICAoKCh4KSAmIDB4MDdVTCkgPDwgMjUpICAgLyohPCBDTEtTRUwgbWFzayBvZmZzZXQgb24gTU9EVUxFIGluZGV4ICovCisjZGVmaW5lIE1PRFVMRV9DTEtTRUxfUG9zX0VOQyh4KSAgICAoKCh4KSAmIDB4MWZVTCkgPDwgMjApICAgLyohPCBDTEtTRUwgcG9zaXRpb24gb2Zmc2V0IG9uIE1PRFVMRSBpbmRleCAqLworI2RlZmluZSBNT0RVTEVfQ0xLRElWX0VOQyh4KSAgICAgICAgKCgoeCkgJiAweDAzVUwpIDw8IDE4KSAgIC8qITwgQVBCQ0xLIENMS0RJViBvbiBNT0RVTEUgaW5kZXgsIDB4MDpDTEtESVYsIDB4MTpDTEtESVYxLCAweDQ6Q0xLRElWNCAqLworI2RlZmluZSBNT0RVTEVfQ0xLRElWX01za19FTkMoeCkgICAgKCgoeCkgJiAweGZmVUwpIDw8IDEwKSAgIC8qITwgQ0xLRElWIG1hc2sgb2Zmc2V0IG9uIE1PRFVMRSBpbmRleCAqLworI2RlZmluZSBNT0RVTEVfQ0xLRElWX1Bvc19FTkMoeCkgICAgKCgoeCkgJiAweDFmVUwpIDw8ICA1KSAgIC8qITwgQ0xLRElWIHBvc2l0aW9uIG9mZnNldCBvbiBNT0RVTEUgaW5kZXggKi8KKyNkZWZpbmUgTU9EVUxFX0lQX0VOX1Bvc19FTkMoeCkgICAgICgoKHgpICYgMHgxZlVMKSA8PCAgMCkgICAvKiE8IEFIQkNMSy9BUEJDTEsgb2Zmc2V0IG9uIE1PRFVMRSBpbmRleCAqLworCisKKy8qIEFIQkNMSyAqLworI2RlZmluZSBQRE1BMF9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDBVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BSEJDTEtfUERNQTBDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IFBETUEgTW9kdWxlICovCisKKyNkZWZpbmUgUERNQTFfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAwVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQUhCQ0xLX1BETUExQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBQRE1BIE1vZHVsZSAqLworCisjZGVmaW5lIElTUF9NT0RVTEUgICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMFVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FIQkNMS19JU1BDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IElTUCBNb2R1bGUgKi8KKworI2RlZmluZSBFQklfTU9EVUxFICAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDBVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BSEJDTEtfRUJJQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBFQkkgTW9kdWxlICovCisKKyNkZWZpbmUgU0RIMF9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAwVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQUhCQ0xLX1NESDBDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDBVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAgIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDIwVUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAwVUwpfE1PRFVMRV9DTEtESVZfTXNrX0VOQygweEZGVUwpfE1PRFVMRV9DTEtESVZfUG9zX0VOQygyNFVMKSkvKiE8IFNESDAgTW9kdWxlICovCisKKyNkZWZpbmUgQ1JDX01PRFVMRSAgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAwVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQUhCQ0xLX0NSQ0NLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAgLyohPCBDUkMgTW9kdWxlICovCisKKyNkZWZpbmUgQ1JQVF9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAwVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQUhCQ0xLX0NSUFRDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IENSUFQgTW9kdWxlICovCisKKyNkZWZpbmUgRk1DSURMRV9NT0RVTEUgKE1PRFVMRV9BUEJDTEtfRU5DKCAwKXxNT0RVTEVfSVBfRU5fUG9zX0VOQyhDTEtfQUhCQ0xLX0ZNQ0lETEVfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgICAvKiE8IEZNQ0lETEUgTW9kdWxlICovCisKKyNkZWZpbmUgVVNCSF9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAwVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQUhCQ0xLX1VTQkhDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDBVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAgMVVMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoIDhVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDBVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4RlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoIDRVTCkpICAvKiE8IFVTQkggTW9kdWxlICovCisKKy8qIEFQQkNMSzAgKi8KKyNkZWZpbmUgV0RUX01PRFVMRSAgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9XRFRDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDFVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggMFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCBOQSkpICAgIC8qITwgV0RUIE1vZHVsZSAqLworCisjZGVmaW5lIFdXRFRfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfV0RUQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAxVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMzBVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAvKiE8IFdXRFQgTW9kdWxlICovCisKKyNkZWZpbmUgUlRDX01PRFVMRSAgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9SVENDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAxVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggOFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyggICBOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgIC8qITwgUlRDIE1vZHVsZSAqLworCisjZGVmaW5lIFRNUjBfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfVE1SMENLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMVVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoIDdVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKCA4VUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoICBOQSkpICAgIC8qITwgVE1SMCBNb2R1bGUgKi8KKworI2RlZmluZSBUTVIxX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1RNUjFDS0VOX1BvcykgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAxVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggN1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMTJVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoICAgTkEpKSAgICAgLyohPCBUTVIxIE1vZHVsZSAqLworCisjZGVmaW5lIFRNUjJfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfVE1SMkNLRU5fUG9zKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDFVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCA3VUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQygxNlVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggICAgTkEpKSAgICAvKiE8IFRNUjIgTW9kdWxlICovCisKKyNkZWZpbmUgVE1SM19NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9UTVIzQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMVVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoIDdVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDIwVUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCAgIE5BKSkgICAgIC8qITwgVE1SMyBNb2R1bGUgKi8KKworI2RlZmluZSBDTEtPX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX0NMS09DS0VOX1BvcykgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAxVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQygzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQygyOFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggICBOQSkpICAgICAvKiE8IENMS08gTW9kdWxlICovCisKKyNkZWZpbmUgQUNNUDAxX01PRFVMRSAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9BQ01QMDFDS0VOX1BvcykgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgICAvKiE8IEFDTVAwMSBNb2R1bGUgKi8KKworI2RlZmluZSBJMkMwX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX0kyQzBDS0VOX1BvcykgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgICAvKiE8IEkyQzAgTW9kdWxlICovCisKKyNkZWZpbmUgSTJDMV9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9JMkMxQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgICAgLyohPCBJMkMxIE1vZHVsZSAqLworCisjZGVmaW5lIEkyQzJfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfSTJDMkNLRU5fUG9zKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAgIC8qITwgSTJDMiBNb2R1bGUgKi8KKworI2RlZmluZSBRU1BJMF9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1FTUEkwQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMlVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKCAyVUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoICBOQSkpICAgIC8qITwgUVNQSTAgTW9kdWxlICovCisKKyNkZWZpbmUgU1BJMF9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1NQSTBDS0VOX1BvcykgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKDJVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggNFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKCAgIE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoICBOQSkpICAgICAvKiE8IFNQSTAgTW9kdWxlICovCisKKyNkZWZpbmUgU1BJMV9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9TUEkxQ0tFTl9Qb3MpIHxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMlVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKCA2VUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoICBOQSkpICAgIC8qITwgU1BJMSBNb2R1bGUgKi8KKworI2RlZmluZSBTUEkyX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1NQSTJDS0VOX1BvcykgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAyVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMTBVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggIE5BKSkgICAgLyohPCBTUEkyIE1vZHVsZSAqLworCisjZGVmaW5lIFVBUlQwX01PRFVMRSAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfVUFSVDBDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDFVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAgIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDI0VUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAwVUwpfE1PRFVMRV9DTEtESVZfTXNrX0VOQygweDBGVUwpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggOFVMKSkgICAgLyohPCBVQVJUMCBNb2R1bGUgKi8KKworI2RlZmluZSBVQVJUMV9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1VBUlQxQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAxVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggICAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQygyNlVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggMFVMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHgwRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoMTJVTCkpICAvKiE8IFVBUlQxIE1vZHVsZSAqLworCisjZGVmaW5lIFVBUlQyX01PRFVMRSAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfVUFSVDJDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQygyNFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggM1VMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHgwRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoIDBVTCkpICAvKiE8IFVBUlQyIE1vZHVsZSAqLworCisjZGVmaW5lIFVBUlQzX01PRFVMRSAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfVUFSVDNDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAgIDNVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKDI2VUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAzVUwpfE1PRFVMRV9DTEtESVZfTXNrX0VOQygweDBGVUwpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggNFVMKSkgIC8qITwgVUFSVDMgTW9kdWxlICovCisKKyNkZWZpbmUgVUFSVDRfTU9EVUxFICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9VQVJUNENLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoICAgM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMjhVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIDNVTCl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKDB4MEZVTCl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKCA4VUwpKSAgLyohPCBVQVJUNCBNb2R1bGUgKi8KKworI2RlZmluZSBVQVJUNV9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDFVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEswX1VBUlQ1Q0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggICAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQygzMFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggM1VMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHgwRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoMTJVTCkpICAvKiE8IFVBUlQ1IE1vZHVsZSAqLworCisjZGVmaW5lIENBTjBfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfQ0FOMENLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgICAgLyohPCBDQU4wIE1vZHVsZSAqLworCisjZGVmaW5lIE9UR19NT0RVTEUgICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfT1RHQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAwVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggIDFVTCl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKCA4VUwpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAwVUwpfE1PRFVMRV9DTEtESVZfTXNrX0VOQygweDBGVUwpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggNFVMKSkgIC8qITwgT1RHIE1vZHVsZSAqLworCisjZGVmaW5lIFVTQkRfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMVVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzBfVVNCRENLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggMFVMKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoICAxVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggOFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggMFVMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHgwRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoNFVMKSkgICAvKiE8IFVTQkQgTW9kdWxlICovCisKKyNkZWZpbmUgRUFEQ19NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9FQURDQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggICAgTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggIE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggMFVMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHhGRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoMTZVTCkpICAvKiE8IEVBREMgTW9kdWxlICovCisKKyNkZWZpbmUgSTJTMF9NT0RVTEUgICAgKE1PRFVMRV9BUEJDTEtfRU5DKCAxVUwpfE1PRFVMRV9JUF9FTl9Qb3NfRU5DKCh1aW50MzJfdClDTEtfQVBCQ0xLMF9JMlMwQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMTZVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoICAgTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyggIE5BKSkgICAgLyohPCBJMlMwIE1vZHVsZSAqLworCisvKiBBUEJDTEsxICovCisjZGVmaW5lIFNDMF9NT0RVTEUgICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfU0MwQ0tFTl9Qb3MpICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggMFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggMVVMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHhGRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoIDBVTCkpICAgIC8qITwgU0MwIE1vZHVsZSAqLworCisjZGVmaW5lIFNDMV9NT0RVTEUgICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfU0MxQ0tFTl9Qb3MpICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggMlVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggMVVMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHhGRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoIDhVTCkpICAgIC8qITwgU0MxIE1vZHVsZSAqLworCisjZGVmaW5lIFNDMl9NT0RVTEUgICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfU0MyQ0tFTl9Qb3MpICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoIDNVTCl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKCAzVUwpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyggNFVMKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggMVVMKXxNT0RVTEVfQ0xLRElWX01za19FTkMoMHhGRlVMKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoMTZVTCkpICAgIC8qITwgU0MyIE1vZHVsZSAqLworCisjZGVmaW5lIFNQSTNfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfU1BJM0NLRU5fUG9zKSAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAyVUwpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyggM1VMKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoMTJVTCl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgU1BJMyBNb2R1bGUgKi8KKworI2RlZmluZSBVU0NJMF9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX1VTQ0kwQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBVU0NJMCBNb2R1bGUgKi8KKworI2RlZmluZSBVU0NJMV9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX1VTQ0kxQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBVU0NJMSBNb2R1bGUgKi8KKworI2RlZmluZSBEQUNfTU9EVUxFICAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX0RBQ0NLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgREFDIE1vZHVsZSAqLworCisjZGVmaW5lIEVQV00wX01PRFVMRSAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfRVBXTTBDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IEVQV00wIE1vZHVsZSAqLworCisjZGVmaW5lIEVQV00xX01PRFVMRSAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfRVBXTTFDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IEVQV00xIE1vZHVsZSAqLworCisjZGVmaW5lIEJQV00wX01PRFVMRSAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfQlBXTTBDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IEJQV00wIE1vZHVsZSAqLworCisjZGVmaW5lIEJQV00xX01PRFVMRSAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfQlBXTTFDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IEJQV00xIE1vZHVsZSAqLworCisjZGVmaW5lIFFFSTBfTU9EVUxFICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfUUVJMENLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgUUVJMCBNb2R1bGUgKi8KKworI2RlZmluZSBRRUkxX01PRFVMRSAgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX1FFSTFDS0VOX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS1NFTF9FTkMoICBOQSl8TU9EVUxFX0NMS1NFTF9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLU0VMX1Bvc19FTkMoTkEpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtESVZfRU5DKCAgTkEpfE1PRFVMRV9DTEtESVZfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS0RJVl9Qb3NfRU5DKE5BKSkgICAgICAvKiE8IFFFSTEgTW9kdWxlICovCisKKyNkZWZpbmUgVFJOR19NT0RVTEUgICAgIChNT0RVTEVfQVBCQ0xLX0VOQyggMlVMKXxNT0RVTEVfSVBfRU5fUG9zX0VOQygodWludDMyX3QpQ0xLX0FQQkNMSzFfVFJOR0NLRU5fUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLU0VMX0VOQyggIE5BKXxNT0RVTEVfQ0xLU0VMX01za19FTkMoTkEpfE1PRFVMRV9DTEtTRUxfUG9zX0VOQyhOQSl8XAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0NMS0RJVl9FTkMoICBOQSl8TU9EVUxFX0NMS0RJVl9Nc2tfRU5DKE5BKXxNT0RVTEVfQ0xLRElWX1Bvc19FTkMoTkEpKSAgICAgIC8qITwgVFJORyBNb2R1bGUgKi8KKworI2RlZmluZSBFQ0FQMF9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX0VDQVAwQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBFQ0FQMCBNb2R1bGUgKi8KKworI2RlZmluZSBFQ0FQMV9NT0RVTEUgICAoTU9EVUxFX0FQQkNMS19FTkMoIDJVTCl8TU9EVUxFX0lQX0VOX1Bvc19FTkMoKHVpbnQzMl90KUNMS19BUEJDTEsxX0VDQVAxQ0tFTl9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9DTEtTRUxfRU5DKCAgTkEpfE1PRFVMRV9DTEtTRUxfTXNrX0VOQyhOQSl8TU9EVUxFX0NMS1NFTF9Qb3NfRU5DKE5BKXxcCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfQ0xLRElWX0VOQyggIE5BKXxNT0RVTEVfQ0xLRElWX01za19FTkMoTkEpfE1PRFVMRV9DTEtESVZfUG9zX0VOQyhOQSkpICAgICAgLyohPCBFQ0FQMSBNb2R1bGUgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgUERNU0VMIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENMS19QTVVDVExfUERNU0VMX1BEICAgICAgICAgICgweDBVTCA8PCBDTEtfUE1VQ1RMX1BETVNFTF9Qb3MpICAgICAgICAvKiE8IFNlbGVjdCBQb3dlci1kb3duIG1vZGUgaXMgUG93ZXItZG93biBtb2RlICovCisjZGVmaW5lIENMS19QTVVDVExfUERNU0VMX0xMUEQgICAgICAgICgweDFVTCA8PCBDTEtfUE1VQ1RMX1BETVNFTF9Qb3MpICAgICAgICAvKiE8IFNlbGVjdCBQb3dlci1kb3duIG1vZGUgaXMgTG93IGxlYWthZ2UgUG93ZXItZG93biBtb2RlICovCisjZGVmaW5lIENMS19QTVVDVExfUERNU0VMX0ZXUEQgICAgICAgICgweDJVTCA8PCBDTEtfUE1VQ1RMX1BETVNFTF9Qb3MpICAgICAgICAvKiE8IFNlbGVjdCBQb3dlci1kb3duIG1vZGUgaXMgRmFzdCBXYWtlLXVwIFBvd2VyLWRvd24gbW9kZSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1BETVNFTF9VTExQRCAgICAgICAoMHgzVUwgPDwgQ0xLX1BNVUNUTF9QRE1TRUxfUG9zKSAgICAgICAgLyohPCBTZWxlY3QgUG93ZXItZG93biBtb2RlIGlzIFVsdHJhIExvdyBsZWFrYWdlIFBvd2VyLWRvd24gbW9kZSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1BETVNFTF9TUEQgICAgICAgICAoMHg0VUwgPDwgQ0xLX1BNVUNUTF9QRE1TRUxfUG9zKSAgICAgICAgLyohPCBTZWxlY3QgUG93ZXItZG93biBtb2RlIGlzIFN0YW5kYnkgUG93ZXItZG93biBtb2RlICovCisjZGVmaW5lIENMS19QTVVDVExfUERNU0VMX0RQRCAgICAgICAgICgweDZVTCA8PCBDTEtfUE1VQ1RMX1BETVNFTF9Qb3MpICAgICAgICAvKiE8IFNlbGVjdCBQb3dlci1kb3duIG1vZGUgaXMgRGVlcCBQb3dlci1kb3duIG1vZGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFdLVE1SSVMgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SSVNfMTI4ICAgICAgICAgICgweDBVTCA8PCBDTEtfUE1VQ1RMX1dLVE1SSVNfUG9zKSAgICAgLyohPCBTZWxlY3QgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbCBpcyAxMjggTElSQyBjbG9ja3MgKDEyLjggbXMpICovCisjZGVmaW5lIENMS19QTVVDVExfV0tUTVJJU18yNTYgICAgICAgICAgKDB4MVVMIDw8IENMS19QTVVDVExfV0tUTVJJU19Qb3MpICAgICAvKiE8IFNlbGVjdCBXYWtlLXVwIFRpbWVyIFRpbWUtb3V0IEludGVydmFsIGlzIDI1NiBMSVJDIGNsb2NrcyAoMjUuNiBtcykgKi8KKyNkZWZpbmUgQ0xLX1BNVUNUTF9XS1RNUklTXzUxMiAgICAgICAgICAoMHgyVUwgPDwgQ0xLX1BNVUNUTF9XS1RNUklTX1BvcykgICAgIC8qITwgU2VsZWN0IFdha2UtdXAgVGltZXIgVGltZS1vdXQgSW50ZXJ2YWwgaXMgNTEyIExJUkMgY2xvY2tzICg1MS4yIG1zKSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SSVNfMTAyNCAgICAgICAgICgweDNVTCA8PCBDTEtfUE1VQ1RMX1dLVE1SSVNfUG9zKSAgICAgLyohPCBTZWxlY3QgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbCBpcyAxMDI0IExJUkMgY2xvY2tzICgxMDIuNG1zKSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SSVNfNDA5NiAgICAgICAgICgweDRVTCA8PCBDTEtfUE1VQ1RMX1dLVE1SSVNfUG9zKSAgICAgLyohPCBTZWxlY3QgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbCBpcyA0MDk2IExJUkMgY2xvY2tzICg0MDkuNm1zKSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SSVNfODE5MiAgICAgICAgICgweDVVTCA8PCBDTEtfUE1VQ1RMX1dLVE1SSVNfUG9zKSAgICAgLyohPCBTZWxlY3QgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbCBpcyA4MTkyIExJUkMgY2xvY2tzICg4MTkuMm1zKSAqLworI2RlZmluZSBDTEtfUE1VQ1RMX1dLVE1SSVNfMTYzODQgICAgICAgICgweDZVTCA8PCBDTEtfUE1VQ1RMX1dLVE1SSVNfUG9zKSAgICAgLyohPCBTZWxlY3QgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbCBpcyAxNjM4NCBMSVJDIGNsb2NrcyAoMTYzOC40bXMpICovCisjZGVmaW5lIENMS19QTVVDVExfV0tUTVJJU182NTUzNiAgICAgICAgKDB4N1VMIDw8IENMS19QTVVDVExfV0tUTVJJU19Qb3MpICAgICAvKiE8IFNlbGVjdCBXYWtlLXVwIFRpbWVyIFRpbWUtb3V0IEludGVydmFsIGlzIDY1NTM2IExJUkMgY2xvY2tzICg2NTUzLjZtcykgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFNXS0RCQ0xLU0VMIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMSAgICAgICAgICAoMHgwVUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDEgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8yICAgICAgICAgICgweDFVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgMiBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzQgICAgICAgICAgKDB4MlVMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyA0IGNsb2NrcyAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfOCAgICAgICAgICAoMHgzVUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDggY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8xNiAgICAgICAgICgweDRVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgMTYgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8zMiAgICAgICAgICgweDVVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgMzIgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF82NCAgICAgICAgICgweDZVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgNjQgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8xMjggICAgICAgICgweDdVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgMTI4IGNsb2NrcyAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMjU2ICAgICAgICAoMHg4VUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDI1NiBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzJ4MjU2ICAgICAgKDB4OVVMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyAyeDI1NiBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzR4MjU2ICAgICAgKDB4YVVMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyA0eDI1NiBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzh4MjU2ICAgICAgKDB4YlVMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyA4eDI1NiBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzE2eDI1NiAgICAgKDB4Y1VMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyAxNngyNTYgY2xvY2tzICovCisjZGVmaW5lIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8zMngyNTYgICAgICgweGRVTCA8PCBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfUG9zKSAgICAgLyohPCBTZWxlY3QgU3RhbmRieSBQb3dlci1kb3duIFBpbiBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgaXMgMzJ4MjU2IGNsb2NrcyAqLworI2RlZmluZSBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfNjR4MjU2ICAgICAoMHhlVUwgPDwgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMX1BvcykgICAgIC8qITwgU2VsZWN0IFN0YW5kYnkgUG93ZXItZG93biBQaW4gRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIGlzIDY0eDI1NiBjbG9ja3MgKi8KKyNkZWZpbmUgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzEyOHgyNTYgICAgKDB4ZlVMIDw8IENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF9Qb3MpICAgICAvKiE8IFNlbGVjdCBTdGFuZGJ5IFBvd2VyLWRvd24gUGluIERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBpcyAxMjh4MjU2IGNsb2NrcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgRFBEIFBpbiBSaXNpbmcvRmFsbGluZyBFZGdlIFdha2UtdXAgRW5hYmxlIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENMS19EUERXS1BJTl9ESVNBQkxFICAgICAoMHgwVUwgPDwgQ0xLX1BNVUNUTF9XS1BJTkVOX1BvcykgICAgIC8qITwgRGlzYWJsZSBXYWtlLXVwIHBpbiBhdCBEZWVwIFBvd2VyLWRvd24gbW9kZSAqLworI2RlZmluZSBDTEtfRFBEV0tQSU5fUklTSU5HICAgICAgKDB4MVVMIDw8IENMS19QTVVDVExfV0tQSU5FTl9Qb3MpICAgICAvKiE8IEVuYWJsZSBXYWtlLXVwIHBpbiByaXNpbmcgZWRnZSBhdCBEZWVwIFBvd2VyLWRvd24gbW9kZSAqLworI2RlZmluZSBDTEtfRFBEV0tQSU5fRkFMTElORyAgICAgKDB4MlVMIDw8IENMS19QTVVDVExfV0tQSU5FTl9Qb3MpICAgICAvKiE8IEVuYWJsZSBXYWtlLXVwIHBpbiBmYWxsaW5nIGVkZ2UgYXQgRGVlcCBQb3dlci1kb3duIG1vZGUgKi8KKyNkZWZpbmUgQ0xLX0RQRFdLUElOX0JPVEhFREdFICAgICgweDNVTCA8PCBDTEtfUE1VQ1RMX1dLUElORU5fUG9zKSAgICAgLyohPCBFbmFibGUgV2FrZS11cCBwaW4gYm90aCBlZGdlIGF0IERlZXAgUG93ZXItZG93biBtb2RlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBTUEQgUGluIFJpc2luZy9GYWxsaW5nIEVkZ2UgV2FrZS11cCBFbmFibGUgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0xLX1NQRFdLUElOX0VOQUJMRSAgICAgICAgICgweDFVTCA8PCAwKSAgICAgLyohPCBFbmFibGUgU3RhbmRieSBQb3dlci1kb3duIFBpbiBXYWtlLXVwICovCisjZGVmaW5lIENMS19TUERXS1BJTl9SSVNJTkcgICAgICAgICAoMHgxVUwgPDwgMSkgICAgIC8qITwgU3RhbmRieSBQb3dlci1kb3duIFdha2UtdXAgb24gU3RhbmRieSBQb3dlci1kb3duIFBpbiByaXNpbmcgZWRnZSAqLworI2RlZmluZSBDTEtfU1BEV0tQSU5fRkFMTElORyAgICAgICAgKDB4MVVMIDw8IDIpICAgICAvKiE8IFN0YW5kYnkgUG93ZXItZG93biBXYWtlLXVwIG9uIFN0YW5kYnkgUG93ZXItZG93biBQaW4gZmFsbGluZyBlZGdlICovCisjZGVmaW5lIENMS19TUERXS1BJTl9ERUJPVU5DRUVOICAgICAoMHgxVUwgPDwgOCkgICAgIC8qITwgRW5hYmxlIFN0YW5kYnkgcG93ZXItZG93biBwaW4gRGUtYm91bmNlIGZ1bmN0aW9uICovCisjZGVmaW5lIENMS19TUERXS1BJTl9ERUJPVU5DRURJUyAgICAoMHgwVUwgPDwgOCkgICAgIC8qITwgRGlzYWJsZSBTdGFuZGJ5IHBvd2VyLWRvd24gcGluIERlLWJvdW5jZSBmdW5jdGlvbiAqLworCisjZGVmaW5lIENMS19ESVNBQkxFX1dLVE1SKHZvaWQpICAgICAgIChDTEstPlBNVUNUTCAmPSB+Q0xLX1BNVUNUTF9XS1RNUkVOX01zaykgICAgLyohPCBEaXNhYmxlIFdha2UtdXAgdGltZXIgYXQgU3RhbmRieSBvciBEZWVwIFBvd2VyLWRvd24gbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENMS19FTkFCTEVfV0tUTVIodm9pZCkgICAgICAgIChDTEstPlBNVUNUTCB8PSBDTEtfUE1VQ1RMX1dLVE1SRU5fTXNrKSAgICAgLyohPCBFbmFibGUgV2FrZS11cCB0aW1lciBhdCBTdGFuZGJ5IG9yIERlZXAgUG93ZXItZG93biBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQ0xLX0RJU0FCTEVfRFBEV0tQSU4odm9pZCkgICAgKENMSy0+UE1VQ1RMICY9IH5DTEtfUE1VQ1RMX1dLUElORU5fTXNrKSAgICAvKiE8IERpc2FibGUgV2FrZS11cCBwaW4gYXQgRGVlcCBQb3dlci1kb3duIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDTEtfRElTQUJMRV9TUERBQ01QKHZvaWQpICAgICAoQ0xLLT5QTVVDVEwgJj0gfkNMS19QTVVDVExfQUNNUFNQV0tfTXNrKSAgIC8qITwgRGlzYWJsZSBBQ01QIHdha2UtdXAgYXQgU3RhbmRieSBQb3dlci1kb3duIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDTEtfRU5BQkxFX1NQREFDTVAodm9pZCkgICAgICAoQ0xLLT5QTVVDVEwgfD0gQ0xLX1BNVUNUTF9BQ01QU1BXS19Nc2spICAgIC8qITwgRW5hYmxlIEFDTVAgd2FrZS11cCBhdCBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENMS19ESVNBQkxFX1JUQ1dLKHZvaWQpICAgICAgIChDTEstPlBNVUNUTCAmPSB+Q0xLX1BNVUNUTF9SVENXS0VOX01zaykgICAgLyohPCBEaXNhYmxlIFJUQyBXYWtlLXVwIGF0IFN0YW5kYnkgb3IgRGVlcCBQb3dlci1kb3duIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDTEtfRU5BQkxFX1JUQ1dLKHZvaWQpICAgICAgICAoQ0xLLT5QTVVDVEwgfD0gQ0xLX1BNVUNUTF9SVENXS0VOX01zaykgICAgIC8qITwgRW5hYmxlIFJUQyBXYWtlLXVwIGF0IFN0YW5kYnkgb3IgRGVlcCBQb3dlci1kb3duIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ0xLX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisvKiogQGFkZHRvZ3JvdXAgQ0xLX0VYUE9SVEVEX0ZVTkNUSU9OUyBDTEsgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBXYWtlLXVwIFRpbWVyIFRpbWUtb3V0IEludGVydmFsCisgKgorICogQHBhcmFtW2luXSAgIHUzMkludGVydmFsICBUaGUgV2FrZS11cCBUaW1lciBUaW1lLW91dCBJbnRlcnZhbCBzZWxlY3Rpb24uIEl0IGNvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfV0tUTVJJU18xMjgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BNVUNUTF9XS1RNUklTXzI1NgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1dLVE1SSVNfNTEyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfV0tUTVJJU18xMDI0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfV0tUTVJJU180MDk2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfV0tUTVJJU184MTkyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfV0tUTVJJU18xNjM4NAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1dLVE1SSVNfNjU1MzYKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIHNldCBXYWtlLXVwIFRpbWVyIFRpbWUtb3V0IEludGVydmFsLgorICoKKyAqCisgKi8KKyNkZWZpbmUgQ0xLX1NFVF9XS1RNUl9JTlRFUlZBTCh1MzJJbnRlcnZhbCkgICAoQ0xLLT5QTVVDVEwgPSAoQ0xLLT5QTVVDVEwgJiAofkNMS19QTVVDVExfV0tUTVJJU19Nc2spKSB8ICh1MzJJbnRlcnZhbCkpCisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBEZS1ib3VuY2UgU2FtcGxpbmcgQ3ljbGUgVGltZQorICoKKyAqIEBwYXJhbVtpbl0gICB1MzJDeWNsZVNlbCAgIFRoZSBkZS1ib3VuY2Ugc2FtcGxpbmcgY3ljbGUgc2VsZWN0aW9uLiBJdCBjb3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfNAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfOAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMTYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzMyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF82NAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMTI4CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF8yNTYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzJ4MjU2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF80eDI1NgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfOHgyNTYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzE2eDI1NgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1dLREJDVExfU1dLREJDTEtTRUxfMzJ4MjU2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENMS19TV0tEQkNUTF9TV0tEQkNMS1NFTF82NHgyNTYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NXS0RCQ1RMX1NXS0RCQ0xLU0VMXzEyOHgyNTYKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIHNldCBTZXQgRGUtYm91bmNlIFNhbXBsaW5nIEN5Y2xlIFRpbWUgZm9yIFN0YW5kYnkgUG93ZXItZG93biBwaW4gd2FrZS11cC4KKyAqCisgKgorICovCisjZGVmaW5lIENMS19TRVRfU1BEREVCT1VOQ0VUSU1FKHUzMkN5Y2xlU2VsKSAgICAoQ0xLLT5TV0tEQkNUTCA9ICh1MzJDeWNsZVNlbCkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlY2xhcmUgdGhlc2UgaW5saW5lIGZ1bmN0aW9ucyBoZXJlIHRvIGF2b2lkIE1JU1JBIEMgMjAwNCBydWxlIDguMSBlcnJvciAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgQ0xLX1N5c1RpY2tEZWxheSh1aW50MzJfdCB1cyk7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBDTEtfU3lzVGlja0xvbmdEZWxheSh1aW50MzJfdCB1cyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBleGVjdXRlIGRlbGF5IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHVzICBEZWxheSB0aW1lLiBUaGUgTWF4IHZhbHVlIGlzICgyXjI0LTEpIC8gQ1BVIENsb2NrKE1IeikuIEV4OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NE1IeiA9PiAyNjIxNDN1cywgNDhNSHogPT4gMzQ5NTI1dXMgLi4uCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFVzZSB0aGUgU3lzVGljayB0byBnZW5lcmF0ZSB0aGUgZGVsYXkgdGltZSBhbmQgdGhlIFVOSVQgaXMgaW4gdXMuCisgICogICAgICAgICAgICAgVGhlIFN5c1RpY2sgY2xvY2sgc291cmNlIGlzIGZyb20gSENMSywgaS5lIHRoZSBzYW1lIGFzIHN5c3RlbSBjb3JlIGNsb2NrLgorICAqICAgICAgICAgICAgIFVzZXIgY2FuIHVzZSBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUoKSB0byBjYWxjdWxhdGUgQ3ljbGVzUGVyVXMgYXV0b21hdGljYWxseSBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIENMS19TeXNUaWNrRGVsYXkodWludDMyX3QgdXMpCit7CisgICAgU3lzVGljay0+TE9BRCA9IHVzICogQ3ljbGVzUGVyVXM7CisgICAgU3lzVGljay0+VkFMICA9ICgweDBVTCk7CisgICAgU3lzVGljay0+Q1RSTCA9IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrIHwgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2s7CisKKyAgICAvKiBXYWl0aW5nIGZvciBkb3duLWNvdW50IHRvIHplcm8gKi8KKyAgICB3aGlsZSgoU3lzVGljay0+Q1RSTCAmIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfTXNrKSA9PSAwVUwpCisgICAgeworICAgIH0KKworICAgIC8qIERpc2FibGUgU3lzVGljayBjb3VudGVyICovCisgICAgU3lzVGljay0+Q1RSTCA9IDBVTDsKK30KKworCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNMKQorCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBDTEtfU3lzVGlja0RlbGF5X05TKHVpbnQzMl90IHVzKTsKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBleGVjdXRlIGRlbGF5IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHVzICBEZWxheSB0aW1lLiBUaGUgTWF4IHZhbHVlIGlzICgyXjI0LTEpIC8gQ1BVIENsb2NrKE1IeikuIEV4OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NE1IeiA9PiAyNjIxNDN1cywgNDhNSHogPT4gMzQ5NTI1dXMgLi4uCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFVzZSB0aGUgU3lzVGljayB0byBnZW5lcmF0ZSB0aGUgZGVsYXkgdGltZSBhbmQgdGhlIFVOSVQgaXMgaW4gdXMuCisgICogICAgICAgICAgICAgVGhlIFN5c1RpY2sgY2xvY2sgc291cmNlIGlzIGZyb20gSENMSywgaS5lIHRoZSBzYW1lIGFzIHN5c3RlbSBjb3JlIGNsb2NrLgorICAqICAgICAgICAgICAgIFVzZXIgY2FuIHVzZSBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUoKSB0byBjYWxjdWxhdGUgQ3ljbGVzUGVyVXMgYXV0b21hdGljYWxseSBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIENMS19TeXNUaWNrRGVsYXlfTlModWludDMyX3QgdXMpCit7CisgICAgU3lzVGlja19OUy0+TE9BRCA9IHVzICogQ3ljbGVzUGVyVXM7CisgICAgU3lzVGlja19OUy0+VkFMICA9ICgweDAwVUwpOworICAgIFN5c1RpY2tfTlMtPkNUUkwgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOworCisgICAgLyogV2FpdGluZyBmb3IgZG93bi1jb3VudCB0byB6ZXJvICovCisgICAgd2hpbGUoKFN5c1RpY2tfTlMtPkNUUkwgJiBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX01zaykgPT0gMFVMKTsKKworICAgIC8qIERpc2FibGUgU3lzVGljayBjb3VudGVyICovCisgICAgU3lzVGlja19OUy0+Q1RSTCA9IDBVTDsKK30KKyNlbmRpZiAvKiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM0wpICovCisKKworCisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZSBsb25nIGRlbGF5IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHVzICBEZWxheSB0aW1lLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBVc2UgdGhlIFN5c1RpY2sgdG8gZ2VuZXJhdGUgdGhlIGxvbmcgZGVsYXkgdGltZSBhbmQgdGhlIFVOSVQgaXMgaW4gdXMuCisgICogICAgICAgICAgICAgVGhlIFN5c1RpY2sgY2xvY2sgc291cmNlIGlzIGZyb20gSENMSywgaS5lIHRoZSBzYW1lIGFzIHN5c3RlbSBjb3JlIGNsb2NrLgorICAqICAgICAgICAgICAgIFVzZXIgY2FuIHVzZSBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUoKSB0byBjYWxjdWxhdGUgQ3ljbGVzUGVyVXMgYXV0b21hdGljYWxseSBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIENMS19TeXNUaWNrTG9uZ0RlbGF5KHVpbnQzMl90IHVzKQoreworICAgIHVpbnQzMl90IHUzMkRlbGF5OworCisgICAgLyogSXQgc2hvdWxkIDw9IDY1NTM2dXMgZm9yIGVhY2ggZGVsYXkgbG9vcCAqLworICAgIHUzMkRlbGF5ID0gNjU1MzZVTDsKKworICAgIGRvCisgICAgeworICAgICAgICBpZih1cyA+IHUzMkRlbGF5KQorICAgICAgICB7CisgICAgICAgICAgICB1cyAtPSB1MzJEZWxheTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkRlbGF5ID0gdXM7CisgICAgICAgICAgICB1cyA9IDBVTDsKKyAgICAgICAgfQorCisgICAgICAgIFN5c1RpY2stPkxPQUQgPSB1MzJEZWxheSAqIEN5Y2xlc1BlclVzOworICAgICAgICBTeXNUaWNrLT5WQUwgID0gKDB4MFVMKTsKKyAgICAgICAgU3lzVGljay0+Q1RSTCA9IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrIHwgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2s7CisKKyAgICAgICAgLyogV2FpdGluZyBmb3IgZG93bi1jb3VudCB0byB6ZXJvICovCisgICAgICAgIHdoaWxlKChTeXNUaWNrLT5DVFJMICYgU3lzVGlja19DVFJMX0NPVU5URkxBR19Nc2spID09IDBVTCk7CisKKyAgICAgICAgLyogRGlzYWJsZSBTeXNUaWNrIGNvdW50ZXIgKi8KKyAgICAgICAgU3lzVGljay0+Q1RSTCA9IDBVTDsKKworICAgIH0KKyAgICB3aGlsZSh1cyA+IDBVTCk7CisKK30KKworI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzTCkKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgQ0xLX1N5c1RpY2tMb25nRGVsYXlfTlModWludDMyX3QgdXMpOworCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGV4ZWN1dGUgbG9uZyBkZWxheSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1cyAgRGVsYXkgdGltZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVXNlIHRoZSBTeXNUaWNrIHRvIGdlbmVyYXRlIHRoZSBsb25nIGRlbGF5IHRpbWUgYW5kIHRoZSBVTklUIGlzIGluIHVzLgorICAqICAgICAgICAgICAgIFRoZSBTeXNUaWNrIGNsb2NrIHNvdXJjZSBpcyBmcm9tIEhDTEssIGkuZSB0aGUgc2FtZSBhcyBzeXN0ZW0gY29yZSBjbG9jay4KKyAgKiAgICAgICAgICAgICBVc2VyIGNhbiB1c2UgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCkgdG8gY2FsY3VsYXRlIEN5Y2xlc1BlclVzIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBDTEtfU3lzVGlja0xvbmdEZWxheV9OUyh1aW50MzJfdCB1cykKK3sKKyAgICB1aW50MzJfdCB1MzJEZWxheTsKKworICAgIC8qIEl0IHNob3VsZCA8PSA2NTUzNnVzIGZvciBlYWNoIGRlbGF5IGxvb3AgKi8KKyAgICB1MzJEZWxheSA9IDY1NTM2VUw7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgaWYodXMgPiB1MzJEZWxheSkKKyAgICAgICAgeworICAgICAgICAgICAgdXMgLT0gdTMyRGVsYXk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJEZWxheSA9IHVzOworICAgICAgICAgICAgdXMgPSAwVUw7CisgICAgICAgIH0KKworICAgICAgICBTeXNUaWNrX05TLT5MT0FEID0gdTMyRGVsYXkgKiBDeWNsZXNQZXJVczsKKyAgICAgICAgU3lzVGlja19OUy0+VkFMICA9ICgweDBVTCk7CisgICAgICAgIFN5c1RpY2tfTlMtPkNUUkwgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOworCisgICAgICAgIC8qIFdhaXRpbmcgZm9yIGRvd24tY291bnQgdG8gemVybyAqLworICAgICAgICB3aGlsZSgoU3lzVGlja19OUy0+Q1RSTCAmIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfTXNrKSA9PSAwVUwpOworCisgICAgICAgIC8qIERpc2FibGUgU3lzVGljayBjb3VudGVyICovCisgICAgICAgIFN5c1RpY2tfTlMtPkNUUkwgPSAwVUw7CisKKyAgICB9CisgICAgd2hpbGUodXMgPiAwVUwpOworCit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM0wpICovCisKKwordm9pZCBDTEtfRGlzYWJsZUNLTyh2b2lkKTsKK3ZvaWQgQ0xLX0VuYWJsZUNLTyh1aW50MzJfdCB1MzJDbGtTcmMsIHVpbnQzMl90IHUzMkNsa0RpdiwgdWludDMyX3QgdTMyQ2xrRGl2QnkxRW4pOwordm9pZCBDTEtfUG93ZXJEb3duKHZvaWQpOwordm9pZCBDTEtfSWRsZSh2b2lkKTsKK3VpbnQzMl90IENMS19HZXRIWFRGcmVxKHZvaWQpOwordWludDMyX3QgQ0xLX0dldExYVEZyZXEodm9pZCk7Cit1aW50MzJfdCBDTEtfR2V0SENMS0ZyZXEodm9pZCk7Cit1aW50MzJfdCBDTEtfR2V0UENMSzBGcmVxKHZvaWQpOwordWludDMyX3QgQ0xLX0dldFBDTEsxRnJlcSh2b2lkKTsKK3VpbnQzMl90IENMS19HZXRDUFVGcmVxKHZvaWQpOwordWludDMyX3QgQ0xLX1NldENvcmVDbG9jayh1aW50MzJfdCB1MzJIY2xrKTsKK3ZvaWQgQ0xLX1NldEhDTEsodWludDMyX3QgdTMyQ2xrU3JjLCB1aW50MzJfdCB1MzJDbGtEaXYpOwordm9pZCBDTEtfU2V0TW9kdWxlQ2xvY2sodWludDMyX3QgdTMyTW9kdWxlSWR4LCB1aW50MzJfdCB1MzJDbGtTcmMsIHVpbnQzMl90IHUzMkNsa0Rpdik7Cit2b2lkIENMS19TZXRTeXNUaWNrQ2xvY2tTcmModWludDMyX3QgdTMyQ2xrU3JjKTsKK3ZvaWQgQ0xLX0VuYWJsZVh0YWxSQyh1aW50MzJfdCB1MzJDbGtNYXNrKTsKK3ZvaWQgQ0xLX0Rpc2FibGVYdGFsUkModWludDMyX3QgdTMyQ2xrTWFzayk7Cit2b2lkIENMS19FbmFibGVNb2R1bGVDbG9jayh1aW50MzJfdCB1MzJNb2R1bGVJZHgpOwordm9pZCBDTEtfRGlzYWJsZU1vZHVsZUNsb2NrKHVpbnQzMl90IHUzMk1vZHVsZUlkeCk7Cit1aW50MzJfdCBDTEtfRW5hYmxlUExMKHVpbnQzMl90IHUzMlBsbENsa1NyYywgdWludDMyX3QgdTMyUGxsRnJlcSk7Cit2b2lkIENMS19EaXNhYmxlUExMKHZvaWQpOwordWludDMyX3QgQ0xLX1dhaXRDbG9ja1JlYWR5KHVpbnQzMl90IHUzMkNsa01hc2spOwordm9pZCBDTEtfRW5hYmxlU3lzVGljayh1aW50MzJfdCB1MzJDbGtTcmMsIHVpbnQzMl90IHUzMkNvdW50KTsKK3ZvaWQgQ0xLX0Rpc2FibGVTeXNUaWNrKHZvaWQpOwordm9pZCBDTEtfU2V0UG93ZXJEb3duTW9kZSh1aW50MzJfdCB1MzJQRE1vZGUpOwordm9pZCBDTEtfRW5hYmxlRFBEV0tQaW4odWludDMyX3QgdTMyVHJpZ2dlclR5cGUpOwordWludDMyX3QgQ0xLX0dldFBNVVdLU3JjKHZvaWQpOwordm9pZCBDTEtfRW5hYmxlU1BEV0tQaW4odWludDMyX3QgdTMyUG9ydCwgdWludDMyX3QgdTMyUGluLCB1aW50MzJfdCB1MzJUcmlnZ2VyVHlwZSwgdWludDMyX3QgdTMyRGVib3VuY2VFbik7Cit1aW50MzJfdCBDTEtfR2V0UExMQ2xvY2tGcmVxKHZvaWQpOwordWludDMyX3QgQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKHVpbnQzMl90IHUzMk1vZHVsZUlkeCk7Cit1aW50MzJfdCBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKHVpbnQzMl90IHUzMk1vZHVsZUlkeCk7CisKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENMS19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTEtfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogX19DTEtfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2NyYy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvY3JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2ZmJkOQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2NyYy5oCkBAIC0wLDAgKzEsMTE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY3JjLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIEN5Y2xpYyBSZWR1bmRhbmN5IENoZWNrKENSQykgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19DUkNfSF9fCisjZGVmaW5lIF9fQ1JDX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ1JDX0RyaXZlciBDUkMgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ1JDX0VYUE9SVEVEX0NPTlNUQU5UUyBDUkMgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENSQyBQb2x5bm9taWFsIE1vZGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDUkNfQ0NJVFQgICAgICAgICAgICgwVUwgPDwgQ1JDX0NUTF9DUkNNT0RFX1BvcykgLyohPENSQyBQb2x5bm9taWFsIE1vZGUgLSBDQ0lUVCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENSQ184ICAgICAgICAgICAgICAgKDFVTCA8PCBDUkNfQ1RMX0NSQ01PREVfUG9zKSAvKiE8Q1JDIFBvbHlub21pYWwgTW9kZSAtIENSQzggXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUkNfMTYgICAgICAgICAgICAgICgyVUwgPDwgQ1JDX0NUTF9DUkNNT0RFX1BvcykgLyohPENSQyBQb2x5bm9taWFsIE1vZGUgLSBDUkMxNiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENSQ18zMiAgICAgICAgICAgICAgKDNVTCA8PCBDUkNfQ1RMX0NSQ01PREVfUG9zKSAvKiE8Q1JDIFBvbHlub21pYWwgTW9kZSAtIENSQzMyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENoZWNrc3VtLCBXcml0ZSBkYXRhIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDUkNfQ0hFQ0tTVU1fQ09NICAgIChDUkNfQ1RMX0NIS1NGTVRfTXNrKSAgICAgICAvKiE8Q1JDIENoZWNrc3VtIENvbXBsZW1lbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUkNfQ0hFQ0tTVU1fUlZTICAgIChDUkNfQ1RMX0NIS1NSRVZfTXNrKSAgICAgICAvKiE8Q1JDIENoZWNrc3VtIFJldmVyc2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBDUkNfV0RBVEFfQ09NICAgICAgIChDUkNfQ1RMX0RBVEZNVF9Nc2spICAgICAgICAvKiE8Q1JDIFdyaXRlIERhdGEgQ29tcGxlbWVudCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENSQ19XREFUQV9SVlMgICAgICAgKENSQ19DVExfREFUUkVWX01zaykgICAgICAgIC8qITxDUkMgV3JpdGUgRGF0YSBSZXZlcnNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENQVSBXcml0ZSBEYXRhIExlbmd0aCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDUkNfQ1BVX1dEQVRBXzggICAgICgwVUwgPDwgQ1JDX0NUTF9EQVRMRU5fUG9zKSAvKiE8Q1JDIENQVSBXcml0ZSBEYXRhIGxlbmd0aCBpcyA4LWJpdCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENSQ19DUFVfV0RBVEFfMTYgICAgKDFVTCA8PCBDUkNfQ1RMX0RBVExFTl9Qb3MpIC8qITxDUkMgQ1BVIFdyaXRlIERhdGEgbGVuZ3RoIGlzIDE2LWJpdCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENSQ19DUFVfV0RBVEFfMzIgICAgKDJVTCA8PCBDUkNfQ1RMX0RBVExFTl9Qb3MpIC8qITxDUkMgQ1BVIFdyaXRlIERhdGEgbGVuZ3RoIGlzIDMyLWJpdCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ1JDX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBDUkNfRVhQT1JURURfRlVOQ1RJT05TIENSQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBDUkMgU2VlZCBWYWx1ZQorICAqCisgICogQHBhcmFtW2luXSAgY3JjICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJTZWVkICAgICBTZWVkIHZhbHVlCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IENSQyBzZWVkIHZhbHVlLgorICAqCisgICAgICAgIFVzZXIgbXVzdCB0byBwZXJmb3JtIENSQ19DSEtTSU5JVChDUkNfQ1RMWzFdIENSQyBFbmdpbmUgUmVzZXQpIHRvIHJlbG9hZCB0aGUgbmV3IHNlZWQgdmFsdWUKKyAgKiAgICAgICAgICAgICB0byBDUkMgY29udHJvbGxlci4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIENSQ19TRVRfU0VFRChjcmMsIHUzMlNlZWQpICAgICAgICAgIGRveyAoY3JjKS0+U0VFRCA9ICh1MzJTZWVkKTsgKGNyYyktPkNUTCB8PSBDUkNfQ1RMX0NIS1NJTklUX01zazsgfXdoaWxlKDApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBDUkMgU2VlZCBWYWx1ZQorICAqCisgICogQHBhcmFtW2luXSAgY3JjICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JDIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIENSQyBzZWVkIHZhbHVlCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGdldHMgdGhlIGN1cnJlbnQgQ1JDIHNlZWQgdmFsdWUuCisgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIENSQ19HRVRfU0VFRChjcmMpICAgICAgICAgICAgICAgICAgICgoY3JjKS0+U0VFRCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ1JDIFdyaXRlIERhdGEKKyAgKgorICAqIEBwYXJhbVtpbl0gIGNyYyAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YSAgICAgV3JpdGUgZGF0YQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVXNlciBjYW4gd3JpdGUgZGF0YSBkaXJlY3RseSB0byBDUkMgV3JpdGUgRGF0YSBSZWdpc3RlcihDUkNfREFUKSBieSB0aGlzIG1hY3JvIHRvIHBlcmZvcm0gQ1JDIG9wZXJhdGlvbi4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgQ1JDX1dSSVRFX0RBVEEoY3JjLCB1MzJEYXRhKSAgICAgICAgKChjcmMpLT5EQVQgPSAodTMyRGF0YSkpCisKKwordm9pZCBDUkNfT3Blbih1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJBdHRyaWJ1dGUsIHVpbnQzMl90IHUzMlNlZWQsIHVpbnQzMl90IHUzMkRhdGFMZW4pOwordWludDMyX3QgQ1JDX0dldENoZWNrc3VtKHZvaWQpOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENSQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDUkNfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NSQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvY3J5cHRvLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9jcnlwdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGY4ZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvY3J5cHRvLmgKQEAgLTAsMCArMSwzOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjcnlwdG8uaAorICogQHZlcnNpb24gIFYxLjEwCisgKiBAYnJpZWYgICAgQ3J5cHRvZ3JhcGhpYyBBY2NlbGVyYXRvciBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19DUllQVE9fSF9fCisjZGVmaW5lIF9fQ1JZUFRPX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIENSWVBUT19Ecml2ZXIgQ1JZUFRPIERyaXZlcgorICBAeworKi8KKworCisvKiogQGFkZHRvZ3JvdXAgQ1JZUFRPX0VYUE9SVEVEX0NPTlNUQU5UUyBDUllQVE8gRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisjZGVmaW5lIFBSTkdfS0VZX1NJWkVfNjQgICAgICAgIDBVTCAgICAgLyohPCBTZWxlY3QgdG8gZ2VuZXJhdGUgNjQtYml0IHJhbmRvbSBrZXkgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQUk5HX0tFWV9TSVpFXzEyOCAgICAgICAxVUwgICAgIC8qITwgU2VsZWN0IHRvIGdlbmVyYXRlIDEyOC1iaXQgcmFuZG9tIGtleSAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUFJOR19LRVlfU0laRV8xOTIgICAgICAgMlVMICAgICAvKiE8IFNlbGVjdCB0byBnZW5lcmF0ZSAxOTItYml0IHJhbmRvbSBrZXkgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBSTkdfS0VZX1NJWkVfMjU2ICAgICAgIDNVTCAgICAgLyohPCBTZWxlY3QgdG8gZ2VuZXJhdGUgMjU2LWJpdCByYW5kb20ga2V5ICAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFBSTkdfU0VFRF9DT05UICAgICAgICAgIDBVTCAgICAgLyohPCBQUk5HIHVzaW5nIGN1cnJlbnQgc2VlZCAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQUk5HX1NFRURfUkVMT0FEICAgICAgICAxVUwgICAgIC8qITwgUFJORyByZWxvYWQgbmV3IHNlZWQgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBBRVNfS0VZX1NJWkVfMTI4ICAgICAgICAwVUwgICAgIC8qITwgQUVTIHNlbGVjdCAxMjgtYml0IGtleSBsZW5ndGggICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQUVTX0tFWV9TSVpFXzE5MiAgICAgICAgMVVMICAgICAvKiE8IEFFUyBzZWxlY3QgMTkyLWJpdCBrZXkgbGVuZ3RoICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEFFU19LRVlfU0laRV8yNTYgICAgICAgIDJVTCAgICAgLyohPCBBRVMgc2VsZWN0IDI1Ni1iaXQga2V5IGxlbmd0aCAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIEFFU19NT0RFX0VDQiAgICAgICAgICAgIDBVTCAgICAgLyohPCBBRVMgc2VsZWN0IEVDQiBtb2RlICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBBRVNfTU9ERV9DQkMgICAgICAgICAgICAxVUwgICAgIC8qITwgQUVTIHNlbGVjdCBDQkMgbW9kZSAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQUVTX01PREVfQ0ZCICAgICAgICAgICAgMlVMICAgICAvKiE8IEFFUyBzZWxlY3QgQ0ZCIG1vZGUgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEFFU19NT0RFX09GQiAgICAgICAgICAgIDNVTCAgICAgLyohPCBBRVMgc2VsZWN0IE9GQiBtb2RlICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBBRVNfTU9ERV9DVFIgICAgICAgICAgICA0VUwgICAgIC8qITwgQUVTIHNlbGVjdCBDVFIgbW9kZSAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQUVTX01PREVfQ0JDX0NTMSAgICAgICAgMHgxMFVMICAvKiE8IEFFUyBzZWxlY3QgQ0JDIENTMSBtb2RlICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEFFU19NT0RFX0NCQ19DUzIgICAgICAgIDB4MTFVTCAgLyohPCBBRVMgc2VsZWN0IENCQyBDUzIgbW9kZSAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBBRVNfTU9ERV9DQkNfQ1MzICAgICAgICAweDEyVUwgIC8qITwgQUVTIHNlbGVjdCBDQkMgQ1MzIG1vZGUgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBBRVNfTk9fU1dBUCAgICAgICAgICAgICAwVUwgICAgIC8qITwgQUVTIGRvIG5vdCBzd2FwIGlucHV0IGFuZCBvdXRwdXQgZGF0YSAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgQUVTX09VVF9TV0FQICAgICAgICAgICAgMVVMICAgICAvKiE8IEFFUyBzd2FwIG91dHB1dCBkYXRhICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEFFU19JTl9TV0FQICAgICAgICAgICAgIDJVTCAgICAgLyohPCBBRVMgc3dhcCBpbnB1dCBkYXRhICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBBRVNfSU5fT1VUX1NXQVAgICAgICAgICAzVUwgICAgIC8qITwgQUVTIHN3YXAgYm90aCBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBERVNfTU9ERV9FQ0IgICAgICAgICAgICAweDAwMFVMIC8qITwgREVTIHNlbGVjdCBFQ0IgbW9kZSAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgREVTX01PREVfQ0JDICAgICAgICAgICAgMHgxMDBVTCAvKiE8IERFUyBzZWxlY3QgQ0JDIG1vZGUgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIERFU19NT0RFX0NGQiAgICAgICAgICAgIDB4MjAwVUwgLyohPCBERVMgc2VsZWN0IENGQiBtb2RlICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBERVNfTU9ERV9PRkIgICAgICAgICAgICAweDMwMFVMIC8qITwgREVTIHNlbGVjdCBPRkIgbW9kZSAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgREVTX01PREVfQ1RSICAgICAgICAgICAgMHg0MDBVTCAvKiE8IERFUyBzZWxlY3QgQ1RSIG1vZGUgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRERVNfTU9ERV9FQ0IgICAgICAgICAgIDB4MDA0VUwgLyohPCBUREVTIHNlbGVjdCBFQ0IgbW9kZSAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUREVTX01PREVfQ0JDICAgICAgICAgICAweDEwNFVMIC8qITwgVERFUyBzZWxlY3QgQ0JDIG1vZGUgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVERFU19NT0RFX0NGQiAgICAgICAgICAgMHgyMDRVTCAvKiE8IFRERVMgc2VsZWN0IENGQiBtb2RlICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRERVNfTU9ERV9PRkIgICAgICAgICAgIDB4MzA0VUwgLyohPCBUREVTIHNlbGVjdCBPRkIgbW9kZSAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUREVTX01PREVfQ1RSICAgICAgICAgICAweDQwNFVMIC8qITwgVERFUyBzZWxlY3QgQ1RSIG1vZGUgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBUREVTX05PX1NXQVAgICAgICAgICAgICAwVUwgICAgIC8qITwgVERFUyBkbyBub3Qgc3dhcCBkYXRhICAgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRERVNfV0hMX1NXQVAgICAgICAgICAgIDFVTCAgICAgLyohPCBUREVTIHN3YXAgaGlnaC1sb3cgd29yZCAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVERFU19PVVRfU1dBUCAgICAgICAgICAgMlVMICAgICAvKiE8IFRERVMgc3dhcCBvdXRwdXQgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUREVTX09VVF9XSExfU1dBUCAgICAgICAzVUwgICAgIC8qITwgVERFUyBzd2FwIG91dHB1dCBkYXRhIGFuZCBoaWdoLWxvdyB3b3JkICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRERVNfSU5fU1dBUCAgICAgICAgICAgIDRVTCAgICAgLyohPCBUREVTIHN3YXAgaW5wdXQgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVERFU19JTl9XSExfU1dBUCAgICAgICAgNVVMICAgICAvKiE8IFRERVMgc3dhcCBpbnB1dCBkYXRhIGFuZCBoaWdoLWxvdyB3b3JkICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUREVTX0lOX09VVF9TV0FQICAgICAgICA2VUwgICAgIC8qITwgVERFUyBzd2FwIGJvdGggaW5wdXQgYW5kIG91dHB1dCBkYXRhICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRERVNfSU5fT1VUX1dITF9TV0FQICAgIDdVTCAgICAgLyohPCBUREVTIHN3YXAgaW5wdXQsIG91dHB1dCBhbmQgaGlnaC1sb3cgd29yZCAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBTSEFfTU9ERV9TSEExICAgICAgICAgICAwVUwgICAgIC8qITwgU0hBIHNlbGVjdCBTSEEtMSAxNjAtYml0ICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0hBX01PREVfU0hBMjI0ICAgICAgICAgNVVMICAgICAvKiE8IFNIQSBzZWxlY3QgU0hBLTIyNCAyMjQtYml0ICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNIQV9NT0RFX1NIQTI1NiAgICAgICAgIDRVTCAgICAgLyohPCBTSEEgc2VsZWN0IFNIQS0yNTYgMjU2LWJpdCAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTSEFfTU9ERV9TSEEzODQgICAgICAgICA3VUwgICAgIC8qITwgU0hBIHNlbGVjdCBTSEEtMzg0IDM4NC1iaXQgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0hBX01PREVfU0hBNTEyICAgICAgICAgNlVMICAgICAvKiE8IFNIQSBzZWxlY3QgU0hBLTUxMiA1MTItYml0ICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgU0hBX05PX1NXQVAgICAgICAgICAgICAgMFVMICAgICAvKiE8IFNIQSBkbyBub3Qgc3dhcCBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNIQV9PVVRfU1dBUCAgICAgICAgICAgIDFVTCAgICAgLyohPCBTSEEgc3dhcCBvdXRwdXQgZGF0YSAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTSEFfSU5fU1dBUCAgICAgICAgICAgICAyVUwgICAgIC8qITwgU0hBIHN3YXAgaW5wdXQgZGF0YSAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0hBX0lOX09VVF9TV0FQICAgICAgICAgM1VMICAgICAvKiE8IFNIQSBzd2FwIGJvdGggaW5wdXQgYW5kIG91dHB1dCBkYXRhICAgICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgQ1JZUFRPX0RNQV9GSVJTVCAgICAgICAgMHg0VUwgICAvKiE8IERvIGZpcnN0IGVuY3J5cHQvZGVjcnlwdCBpbiBETUEgY2FzY2FkZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENSWVBUT19ETUFfT05FX1NIT1QgICAgIDB4NVVMICAgLyohPCBEbyBvbmUgc2hvdCBlbmNyeXB0L2RlY3J5cHQgd2l0aCBETUEgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENSWVBUT19ETUFfQ09OVElOVUUgICAgIDB4NlVMICAgLyohPCBEbyBjb250aW51b3VzIGVuY3J5cHQvZGVjcnlwdCBpbiBETUEgY2FzY2FkZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIENSWVBUT19ETUFfTEFTVCAgICAgICAgIDB4N1VMICAgLyohPCBEbyBsYXN0IGVuY3J5cHQvZGVjcnlwdCBpbiBETUEgY2FzY2FkZSAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBDVVJWRV9QXzE5MiwKKyAgICBDVVJWRV9QXzIyNCwKKyAgICBDVVJWRV9QXzI1NiwKKyAgICBDVVJWRV9QXzM4NCwKKyAgICBDVVJWRV9QXzUyMSwKKyAgICBDVVJWRV9LXzE2MywKKyAgICBDVVJWRV9LXzIzMywKKyAgICBDVVJWRV9LXzI4MywKKyAgICBDVVJWRV9LXzQwOSwKKyAgICBDVVJWRV9LXzU3MSwKKyAgICBDVVJWRV9CXzE2MywKKyAgICBDVVJWRV9CXzIzMywKKyAgICBDVVJWRV9CXzI4MywKKyAgICBDVVJWRV9CXzQwOSwKKyAgICBDVVJWRV9CXzU3MQorfQorRV9FQ0NfQ1VSVkU7CisKKworCit0eXBlZGVmIHN0cnVjdCBlX2N1cnZlX3QKK3sKKyAgICBFX0VDQ19DVVJWRSAgY3VydmVfaWQ7CisgICAgaW50MzJfdCAgIEVjaGFyOworICAgIGNoYXIgIEVhWzE0NF07CisgICAgY2hhciAgRWJbMTQ0XTsKKyAgICBjaGFyICBQeFsxNDRdOworICAgIGNoYXIgIFB5WzE0NF07CisgICAgaW50MzJfdCAgIEVwbDsKKyAgICBjaGFyICBQcFsxNzZdOworICAgIGludDMyX3QgICBFb2w7CisgICAgY2hhciAgRW9yZGVyWzE3Nl07CisgICAgaW50MzJfdCAgIGtleV9sZW47CisgICAgaW50MzJfdCAgIGlycmVkdWNpYmxlX2sxOworICAgIGludDMyX3QgICBpcnJlZHVjaWJsZV9rMjsKKyAgICBpbnQzMl90ICAgaXJyZWR1Y2libGVfazM7CisgICAgaW50MzJfdCAgIEdGOworfSAgRUNDX0NVUlZFOworCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDUllQVE9fRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIENSWVBUT19FWFBPUlRFRF9NQUNST1MgQ1JZUFRPIEV4cG9ydGVkIE1hY3JvcworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBNYWNyb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGVzIFBSTkcgaW50ZXJydXB0LgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUFJOR19FTkFCTEVfSU5UKGNycHQpICAgICAgICgoY3JwdCktPklOVEVOIHw9IENSUFRfSU5URU5fUFJOR0lFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGRpc2FibGVzIFBSTkcgaW50ZXJydXB0LgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUFJOR19ESVNBQkxFX0lOVChjcnB0KSAgICAgICgoY3JwdCktPklOVEVOICY9IH5DUlBUX0lOVEVOX1BSTkdJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXRzIFBSTkcgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtIGNycHQgICAgIFNwZWNpZmllZCBjcnlwdG8gbW9kdWxlCisgICogQHJldHVybiBQUk5HIGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUFJOR19HRVRfSU5UX0ZMQUcoY3JwdCkgICAgICgoY3JwdCktPklOVFNUUyAmIENSUFRfSU5UU1RTX1BSTkdJRl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGNsZWFycyBQUk5HIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUFJOR19DTFJfSU5UX0ZMQUcoY3JwdCkgICAgICgoY3JwdCktPklOVFNUUyA9IENSUFRfSU5UU1RTX1BSTkdJRl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGVuYWJsZXMgQUVTIGludGVycnVwdC4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEFFU19FTkFCTEVfSU5UKGNycHQpICAgICAgICAoKGNycHQpLT5JTlRFTiB8PSAoQ1JQVF9JTlRFTl9BRVNJRU5fTXNrfENSUFRfSU5URU5fQUVTRUlFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBkaXNhYmxlcyBBRVMgaW50ZXJydXB0LgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgQUVTX0RJU0FCTEVfSU5UKGNycHQpICAgICAgICgoY3JwdCktPklOVEVOICY9IH4oQ1JQVF9JTlRFTl9BRVNJRU5fTXNrfENSUFRfSU5URU5fQUVTRUlFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXRzIEFFUyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIEFFUyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEFFU19HRVRfSU5UX0ZMQUcoY3JwdCkgICAgICAoKGNycHQpLT5JTlRTVFMgJiAoQ1JQVF9JTlRTVFNfQUVTSUZfTXNrfENSUFRfSU5UU1RTX0FFU0VJRl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBjbGVhcnMgQUVTIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgQUVTX0NMUl9JTlRfRkxBRyhjcnB0KSAgICAgICgoY3JwdCktPklOVFNUUyA9IChDUlBUX0lOVFNUU19BRVNJRl9Nc2t8Q1JQVF9JTlRTVFNfQUVTRUlGX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGVuYWJsZXMgQUVTIGtleSBwcm90ZWN0aW9uLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgQUVTX0VOQUJMRV9LRVlfUFJPVEVDVChjcnB0KSAgKChjcnB0KS0+QUVTX0NUTCB8PSBDUlBUX0FFU19DVExfS0VZUFJUX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZGlzYWJsZXMgQUVTIGtleSBwcm90ZWN0aW9uLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgQUVTX0RJU0FCTEVfS0VZX1BST1RFQ1QoY3JwdCkgKChjcnB0KS0+QUVTX0NUTCA9ICgoY3JwdCktPkFFU19DVEwgJiB+Q1JQVF9BRVNfQ1RMX0tFWVBSVF9Nc2spIHwgKDB4MTZVTDw8Q1JQVF9BRVNfQ1RMX0tFWVVOUFJUX1BvcykpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY3JwdCktPkFFU19DVEwgJj0gfkNSUFRfQUVTX0NUTF9LRVlQUlRfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGVzIFRERVMgaW50ZXJydXB0LgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVERFU19FTkFCTEVfSU5UKGNycHQpICAgICAgICgoY3JwdCktPklOVEVOIHw9IChDUlBUX0lOVEVOX1RERVNJRU5fTXNrfENSUFRfSU5URU5fVERFU0VJRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZGlzYWJsZXMgVERFUyBpbnRlcnJ1cHQuCisgICogQHBhcmFtIGNycHQgICAgIFNwZWNpZmllZCBjcnlwdG8gbW9kdWxlCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUREVTX0RJU0FCTEVfSU5UKGNycHQpICAgICAgKChjcnB0KS0+SU5URU4gJj0gfihDUlBUX0lOVEVOX1RERVNJRU5fTXNrfENSUFRfSU5URU5fVERFU0VJRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0cyBUREVTIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gVERFUyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRERVNfR0VUX0lOVF9GTEFHKGNycHQpICAgICAoKGNycHQpLT5JTlRTVFMgJiAoQ1JQVF9JTlRTVFNfVERFU0lGX01za3xDUlBUX0lOVFNUU19UREVTRUlGX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGNsZWFycyBUREVTIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVERFU19DTFJfSU5UX0ZMQUcoY3JwdCkgICAgICgoY3JwdCktPklOVFNUUyA9IChDUlBUX0lOVFNUU19UREVTSUZfTXNrfENSUFRfSU5UU1RTX1RERVNFSUZfTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlcyBUREVTIGtleSBwcm90ZWN0aW9uLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVERFU19FTkFCTEVfS0VZX1BST1RFQ1QoY3JwdCkgICgoY3JwdCktPlRERVNfQ1RMIHw9IENSUFRfVERFU19DVExfS0VZUFJUX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gZGlzYWJsZXMgVERFUyBrZXkgcHJvdGVjdGlvbi4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRERVNfRElTQUJMRV9LRVlfUFJPVEVDVChjcnB0KSAoKGNycHQpLT5UREVTX0NUTCA9ICgoY3JwdCktPlRERVNfQ1RMICYgfkNSUFRfVERFU19DVExfS0VZUFJUX01zaykgfCAoMHgxNlVMPDxDUlBUX1RERVNfQ1RMX0tFWVVOUFJUX1BvcykpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNycHQpLT5UREVTX0NUTCAmPSB+Q1JQVF9UREVTX0NUTF9LRVlQUlRfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGVzIFNIQSBpbnRlcnJ1cHQuCisgICogQHBhcmFtIGNycHQgICAgIFNwZWNpZmllZCBjcnlwdG8gbW9kdWxlCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTSEFfRU5BQkxFX0lOVChjcnB0KSAgICAgICAgKChjcnB0KS0+SU5URU4gfD0gKENSUFRfSU5URU5fSE1BQ0lFTl9Nc2t8Q1JQVF9JTlRFTl9ITUFDRUlFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBkaXNhYmxlcyBTSEEgaW50ZXJydXB0LgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0hBX0RJU0FCTEVfSU5UKGNycHQpICAgICAgICgoY3JwdCktPklOVEVOICY9IH4oQ1JQVF9JTlRFTl9ITUFDSUVOX01za3xDUlBUX0lOVEVOX0hNQUNFSUVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGdldHMgU0hBIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gU0hBIGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0hBX0dFVF9JTlRfRkxBRyhjcnB0KSAgICAgICgoY3JwdCktPklOVFNUUyAmIChDUlBUX0lOVFNUU19ITUFDSUZfTXNrfENSUFRfSU5UU1RTX0hNQUNFSUZfTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gY2xlYXJzIFNIQSBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNIQV9DTFJfSU5UX0ZMQUcoY3JwdCkgICAgICAoKGNycHQpLT5JTlRTVFMgPSAoQ1JQVF9JTlRTVFNfSE1BQ0lGX01za3xDUlBUX0lOVFNUU19ITUFDRUlGX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGVuYWJsZXMgRUNDIGludGVycnVwdC4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQ19FTkFCTEVfSU5UKGNycHQpICAgICAgICAoKGNycHQpLT5JTlRFTiB8PSAoQ1JQVF9JTlRFTl9FQ0NJRU5fTXNrfENSUFRfSU5URU5fRUNDRUlFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBkaXNhYmxlcyBFQ0MgaW50ZXJydXB0LgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNDX0RJU0FCTEVfSU5UKGNycHQpICAgICAgICgoY3JwdCktPklOVEVOICY9IH4oQ1JQVF9JTlRFTl9FQ0NJRU5fTXNrfENSUFRfSU5URU5fRUNDRUlFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXRzIEVDQyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW0gY3JwdCAgICAgU3BlY2lmaWVkIGNyeXB0byBtb2R1bGUKKyAgKiBAcmV0dXJuIEVDQyBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQ19HRVRfSU5UX0ZMQUcoY3JwdCkgICAgICAoKGNycHQpLT5JTlRTVFMgJiAoQ1JQVF9JTlRTVFNfRUNDSUZfTXNrfENSUFRfSU5UU1RTX0VDQ0VJRl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBjbGVhcnMgRUNDIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbSBjcnB0ICAgICBTcGVjaWZpZWQgY3J5cHRvIG1vZHVsZQorICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNDX0NMUl9JTlRfRkxBRyhjcnB0KSAgICAgICgoY3JwdCktPklOVFNUUyA9IChDUlBUX0lOVFNUU19FQ0NJRl9Nc2t8Q1JQVF9JTlRTVFNfRUNDRUlGX01zaykpCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDUllQVE9fRVhQT1JURURfTUFDUk9TICovCisKKworCisvKiogQGFkZHRvZ3JvdXAgQ1JZUFRPX0VYUE9SVEVEX0ZVTkNUSU9OUyBDUllQVE8gRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgRnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIFBSTkdfT3BlbihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMktleVNpemUsIHVpbnQzMl90IHUzMlNlZWRSZWxvYWQsIHVpbnQzMl90IHUzMlNlZWQpOwordm9pZCBQUk5HX1N0YXJ0KENSUFRfVCAqY3JwdCk7Cit2b2lkIFBSTkdfUmVhZChDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMlJhbmRLZXlbXSk7Cit2b2lkIEFFU19PcGVuKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyRW5jRGVjLCB1aW50MzJfdCB1MzJPcE1vZGUsIHVpbnQzMl90IHUzMktleVNpemUsIHVpbnQzMl90IHUzMlN3YXBUeXBlKTsKK3ZvaWQgQUVTX1N0YXJ0KENSUFRfVCAqY3JwdCwgaW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJETUFNb2RlKTsKK3ZvaWQgQUVTX1NldEtleShDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IGF1MzJLZXlzW10sIHVpbnQzMl90IHUzMktleVNpemUpOwordm9pZCBBRVNfU2V0SW5pdFZlY3QoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCBhdTMySVZbXSk7Cit2b2lkIEFFU19TZXRETUFUcmFuc2ZlcihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMlNyY0FkZHIsIHVpbnQzMl90IHUzMkRzdEFkZHIsIHVpbnQzMl90IHUzMlRyYW5zQ250KTsKK3ZvaWQgVERFU19PcGVuKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyRW5jRGVjLCBpbnQzMl90IElzM0RFUywgaW50MzJfdCBJczNLZXksIHVpbnQzMl90IHUzMk9wTW9kZSwgdWludDMyX3QgdTMyU3dhcFR5cGUpOwordm9pZCBUREVTX1N0YXJ0KENSUFRfVCAqY3JwdCwgaW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJETUFNb2RlKTsKK3ZvaWQgVERFU19TZXRLZXkoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCBhdTMyS2V5c1szXVsyXSk7Cit2b2lkIFRERVNfU2V0SW5pdFZlY3QoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJJVkgsIHVpbnQzMl90IHUzMklWTCk7Cit2b2lkIFRERVNfU2V0RE1BVHJhbnNmZXIoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJTcmNBZGRyLCB1aW50MzJfdCB1MzJEc3RBZGRyLCB1aW50MzJfdCB1MzJUcmFuc0NudCk7Cit2b2lkIFNIQV9PcGVuKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyT3BNb2RlLCB1aW50MzJfdCB1MzJTd2FwVHlwZSwgdWludDMyX3QgaG1hY19rZXlfbGVuKTsKK3ZvaWQgU0hBX1N0YXJ0KENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyRE1BTW9kZSk7Cit2b2lkIFNIQV9TZXRETUFUcmFuc2ZlcihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMlNyY0FkZHIsIHVpbnQzMl90IHUzMlRyYW5zQ250KTsKK3ZvaWQgU0hBX1JlYWQoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJEaWdlc3RbXSk7Cit2b2lkIEVDQ19Ecml2ZXJJU1IoQ1JQVF9UICpjcnB0KTsKK2ludCAgRUNDX0lzUHJpdmF0ZUtleVZhbGlkKENSUFRfVCAqY3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlLCAgY2hhciBwcml2YXRlX2tbXSk7CitpbnQzMl90ICBFQ0NfR2VuZXJhdGVTZWNyZXRaKENSUFRfVCAqY3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlLCBjaGFyICpwcml2YXRlX2ssIGNoYXIgcHVibGljX2sxW10sIGNoYXIgcHVibGljX2syW10sIGNoYXIgc2VjcmV0X3pbXSk7CitpbnQzMl90ICBFQ0NfR2VuZXJhdGVQdWJsaWNLZXkoQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKnByaXZhdGVfaywgY2hhciBwdWJsaWNfazFbXSwgY2hhciBwdWJsaWNfazJbXSk7CitpbnQzMl90ICBFQ0NfR2VuZXJhdGVTaWduYXR1cmUoQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKm1lc3NhZ2UsIGNoYXIgKmQsIGNoYXIgKmssIGNoYXIgKlIsIGNoYXIgKlMpOworaW50MzJfdCAgRUNDX1ZlcmlmeVNpZ25hdHVyZShDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqbWVzc2FnZSwgY2hhciAqcHVibGljX2sxLCBjaGFyICpwdWJsaWNfazIsIGNoYXIgKlIsIGNoYXIgKlMpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ1JZUFRPX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENSWVBUT19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvKiBfX0NSWVBUT19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZGFjLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9kYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDFkYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZGFjLmgKQEAgLTAsMCArMSwyNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBkYWMuaAorICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIERBQyBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0RBQ19IX18KKyNkZWZpbmUgX19EQUNfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBEQUNfRHJpdmVyIERBQyBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIERBQ19FWFBPUlRFRF9DT05TVEFOVFMgREFDIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIERBQ19DVEwgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgREFDX0NUTF9MQUxJR05fUklHSFRfQUxJR04gICAoMFVMPDxEQUNfQ1RMX0xBTElHTl9Qb3MpICAgLyohPCBSaWdodCBhbGlnbm1lbnQuICovCisjZGVmaW5lIERBQ19DVExfTEFMSUdOX0xFRlRfQUxJR04gICAgKDFVTDw8REFDX0NUTF9MQUxJR05fUG9zKSAgIC8qITwgTGVmdCBhbGlnbm1lbnQgKi8KKworI2RlZmluZSBEQUNfV1JJVEVfREFUX1RSSUdHRVIgICAgICAoMFVMKSAgICAvKiE8IFdyaXRlIERBQ19EQVQgdHJpZ2dlciAqLworI2RlZmluZSBEQUNfU09GVFdBUkVfVFJJR0dFUiAgICAgICAoMFVMfERBQ19DVExfVFJHRU5fTXNrKSAgICAvKiE8IFNvZnR3YXJlIHRyaWdnZXIgKi8KKyNkZWZpbmUgREFDX0xPV19MRVZFTF9UUklHR0VSICAgICAgKCgwVUw8PERBQ19DVExfRVRSR1NFTF9Qb3MpfCgxVUw8PERBQ19DVExfVFJHU0VMX1Bvcyl8REFDX0NUTF9UUkdFTl9Nc2spICAgLyohPCBTVERBQyBwaW4gbG93IGxldmVsIHRyaWdnZXIgKi8KKyNkZWZpbmUgREFDX0hJR0hfTEVWRUxfVFJJR0dFUiAgICAgKCgxVUw8PERBQ19DVExfRVRSR1NFTF9Qb3MpfCgxVUw8PERBQ19DVExfVFJHU0VMX1Bvcyl8REFDX0NUTF9UUkdFTl9Nc2spICAgLyohPCBTVERBQyBwaW4gaGlnaCBsZXZlbCB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19GQUxMSU5HX0VER0VfVFJJR0dFUiAgICgoMlVMPDxEQUNfQ1RMX0VUUkdTRUxfUG9zKXwoMVVMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgU1REQUMgcGluIGZhbGxpbmcgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19SSVNJTkdfRURHRV9UUklHR0VSICAgICgoM1VMPDxEQUNfQ1RMX0VUUkdTRUxfUG9zKXwoMVVMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgU1REQUMgcGluIHJpc2luZyBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgREFDX1RJTUVSMF9UUklHR0VSICAgICAgICAgKCgyVUw8PERBQ19DVExfVFJHU0VMX1Bvcyl8REFDX0NUTF9UUkdFTl9Nc2spICAgLyohPCBUaW1lciAwIHRyaWdnZXIgKi8KKyNkZWZpbmUgREFDX1RJTUVSMV9UUklHR0VSICAgICAgICAgKCgzVUw8PERBQ19DVExfVFJHU0VMX1Bvcyl8REFDX0NUTF9UUkdFTl9Nc2spICAgLyohPCBUaW1lciAxIHRyaWdnZXIgKi8KKyNkZWZpbmUgREFDX1RJTUVSMl9UUklHR0VSICAgICAgICAgKCg0VUw8PERBQ19DVExfVFJHU0VMX1Bvcyl8REFDX0NUTF9UUkdFTl9Nc2spICAgLyohPCBUaW1lciAyIHRyaWdnZXIgKi8KKyNkZWZpbmUgREFDX1RJTUVSM19UUklHR0VSICAgICAgICAgKCg1VUw8PERBQ19DVExfVFJHU0VMX1Bvcyl8REFDX0NUTF9UUkdFTl9Nc2spICAgLyohPCBUaW1lciAzIHRyaWdnZXIgKi8KKyNkZWZpbmUgREFDX0VQV00wX1RSSUdHRVIgICAgICAgICAgKCg2VUw8PERBQ19DVExfVFJHU0VMX1Bvcyl8REFDX0NUTF9UUkdFTl9Nc2spICAgLyohPCBFUFdNMCB0cmlnZ2VyICovCisjZGVmaW5lIERBQ19FUFdNMV9UUklHR0VSICAgICAgICAgICgoN1VMPDxEQUNfQ1RMX1RSR1NFTF9Qb3MpfERBQ19DVExfVFJHRU5fTXNrKSAgIC8qITwgRVBXTTEgdHJpZ2dlciAqLworCisjZGVmaW5lIERBQ19UUklHR0VSX01PREVfRElTQUJMRSAgICgwVUw8PERBQ19DVExfVFJHRU5fUG9zKSAgIC8qITwgVHJpZ2dlciBtb2RlIGRpc2FibGUgKi8KKyNkZWZpbmUgREFDX1RSSUdHRVJfTU9ERV9FTkFCTEUgICAgKDFVTDw8REFDX0NUTF9UUkdFTl9Qb3MpICAgLyohPCBUcmlnZ2VyIG1vZGUgZW5hYmxlICovCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBEQUNfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIERBQ19FWFBPUlRFRF9GVU5DVElPTlMgREFDIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBEQUMgTWFjcm8gRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgICogQGJyaWVmIFN0YXJ0IHRoZSBEL0EgY29udmVyc2lvbi4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVXNlciB3cml0ZXMgU1dUUkcgYml0IChEQUNfU1dUUkdbMF0pIHRvIGdlbmVyYXRlIG9uZSBzaG90IHB1bHNlIGFuZCBpdCBpcyBjbGVhcmVkIHRvIDAgYnkgaGFyZHdhcmUgYXV0b21hdGljYWxseS4KKyAgKi8KKyNkZWZpbmUgREFDX1NUQVJUX0NPTlYoZGFjKSAoKGRhYyktPlNXVFJHID0gREFDX1NXVFJHX1NXVFJHX01zaykKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBEQUMgZGF0YSBsZWZ0LWFsaWduZWQuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFVzZXIgaGFzIHRvIGxvYWQgZGF0YSBpbnRvIERBQ19EQVRbMTU6NF0gYml0cy4gREFDX0RBVFszMToxNl0gYW5kIERBQ19EQVRbMzowXSBhcmUgaWdub3JlZCBpbiBEQUMgY29udmVyc2lvbi4KKyAgKi8KKyNkZWZpbmUgREFDX0VOQUJMRV9MRUZUX0FMSUdOKGRhYykgKChkYWMpLT5DVEwgfD0gREFDX0NUTF9MQUxJR05fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIERBQyBkYXRhIHJpZ2h0LWFsaWduZWQuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFVzZXIgaGFzIHRvIGxvYWQgZGF0YSBpbnRvIERBQ19EQVRbMTE6MF0gYml0cywgREFDX0RBVFszMToxMl0gYXJlIGlnbm9yZWQgaW4gREFDIGNvbnZlcnNpb24uCisgICovCisjZGVmaW5lIERBQ19FTkFCTEVfUklHSFRfQUxJR04oZGFjKSAoKGRhYyktPkNUTCAmPSB+REFDX0NUTF9MQUxJR05fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIG91dHB1dCB2b2x0YWdlIGJ1ZmZlci4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhlIERBQyBpbnRlZ3JhdGVzIGEgdm9sdGFnZSBvdXRwdXQgYnVmZmVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVkdWNlIG91dHB1dCBpbXBlZGFuY2UgYW5kCisgICogICAgICAgICBkcml2ZSBleHRlcm5hbCBsb2FkcyBkaXJlY3RseSB3aXRob3V0IGhhdmluZyB0byBhZGQgYW4gZXh0ZXJuYWwgb3BlcmF0aW9uYWwgYW1wbGlmaWVyLgorICAqLworI2RlZmluZSBEQUNfRU5BQkxFX0JZUEFTU19CVUZGRVIoZGFjKSAoKGRhYyktPkNUTCB8PSBEQUNfQ1RMX0JZUEFTU19Nc2spCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIG91dHB1dCB2b2x0YWdlIGJ1ZmZlci4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgb3V0cHV0IHZvbHRhZ2UgYnVmZmVyLgorICAqLworI2RlZmluZSBEQUNfRElTQUJMRV9CWVBBU1NfQlVGRkVSKGRhYykgKChkYWMpLT5DVEwgJj0gfkRBQ19DVExfQllQQVNTX01zaykKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSB0aGUgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoIE5vdCB1c2VkIGluIE0yMzUxIFNlcmllcyBEQUMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBEQUMgaW50ZXJydXB0LgorICAqLworI2RlZmluZSBEQUNfRU5BQkxFX0lOVChkYWMsIHUzMkNoKSAoKGRhYyktPkNUTCB8PSBEQUNfQ1RMX0RBQ0lFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2ggTm90IHVzZWQgaW4gTTIzNTEgU2VyaWVzIERBQy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBEQUMgaW50ZXJydXB0LgorICAqLworI2RlZmluZSBEQUNfRElTQUJMRV9JTlQoZGFjLCB1MzJDaCkgKChkYWMpLT5DVEwgJj0gfkRBQ19DVExfREFDSUVOX01zaykKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBETUEgdW5kZXItcnVuIGludGVycnVwdC4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBETUEgdW5kZXItcnVuIGludGVycnVwdC4KKyAgKi8KKyNkZWZpbmUgREFDX0VOQUJMRV9ETUFVRFJfSU5UKGRhYykgKChkYWMpLT5DVEwgfD0gREFDX0NUTF9ETUFVUklFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIERNQSB1bmRlci1ydW4gaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBETUEgdW5kZXItcnVuIGludGVycnVwdC4KKyAgKi8KKyNkZWZpbmUgREFDX0RJU0FCTEVfRE1BVURSX0lOVChkYWMpICgoZGFjKS0+Q1RMICY9IH5EQUNfQ1RMX0RNQVVSSUVOX01zaykKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBQRE1BIG1vZGUuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIERBQyBETUEgcmVxdWVzdCBpcyBnZW5lcmF0ZWQgd2hlbiBhIGhhcmR3YXJlIHRyaWdnZXIgZXZlbnQgb2NjdXJzIHdoaWxlIERNQUVOIChEQUNfQ1RMWzJdKSBpcyBzZXQuCisgICovCisjZGVmaW5lIERBQ19FTkFCTEVfUERNQShkYWMpICgoZGFjKS0+Q1RMIHw9IERBQ19DVExfRE1BRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBQRE1BIG1vZGUuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIERNQSBtb2RlLgorICAqLworI2RlZmluZSBEQUNfRElTQUJMRV9QRE1BKGRhYykgKChkYWMpLT5DVEwgJj0gfkRBQ19DVExfRE1BRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgV3JpdGUgZGF0YSBmb3IgY29udmVyc2lvbi4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDaCBOb3QgdXNlZCBpbiBNMjM1MSBTZXJpZXMgREFDLgorICAqIEBwYXJhbVtpbl0gdTMyRGF0YSBEZWNpZGVzIHRoZSBkYXRhIGZvciBjb252ZXJzaW9uLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAwfjB4RkZGLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIDEyIGJpdCBsZWZ0IGFsaWdubWVudDogdXNlciBoYXMgdG8gbG9hZCBkYXRhIGludG8gREFDX0RBVFsxNTo0XSBiaXRzLgorICAqICAgICAgICAgMTIgYml0IHJpZ2h0IGFsaWdubWVudDogdXNlciBoYXMgdG8gbG9hZCBkYXRhIGludG8gREFDX0RBVFsxMTowXSBiaXRzLgorICAqLworI2RlZmluZSBEQUNfV1JJVEVfREFUQShkYWMsIHUzMkNoLCB1MzJEYXRhKSAoKGRhYyktPkRBVCA9ICh1MzJEYXRhKSkKKworLyoqCisgICogQGJyaWVmIFJlYWQgREFDIDEyLWJpdCBob2xkaW5nIGRhdGEuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2ggTm90IHVzZWQgaW4gTTIzNTEgU2VyaWVzIERBQy4KKyAgKiBAcmV0dXJuIFJldHVybiBEQUMgMTItYml0IGhvbGRpbmcgZGF0YS4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCBEQUNfREFUIHJlZ2lzdGVyLgorICAqLworI2RlZmluZSBEQUNfUkVBRF9EQVRBKGRhYywgdTMyQ2gpICgoZGFjKS0+REFUKQorCisvKioKKyAgKiBAYnJpZWYgR2V0IHRoZSBidXN5IHN0YXRlIG9mIERBQy4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDaCBOb3QgdXNlZCBpbiBNMjM1MSBTZXJpZXMgREFDLgorICAqIEByZXR2YWwgMCBJZGxlIHN0YXRlLgorICAqIEByZXR2YWwgMSBCdXN5IHN0YXRlLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIEJVU1kgYml0IChEQUNfU1RBVFVTWzhdKSB0byBnZXQgYnVzeSBzdGF0ZS4KKyAgKi8KKyNkZWZpbmUgREFDX0lTX0JVU1koZGFjLCB1MzJDaCkgKCgoZGFjKS0+U1RBVFVTICYgREFDX1NUQVRVU19CVVNZX01zaykgPj4gREFDX1NUQVRVU19CVVNZX1BvcykKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2ggTm90IHVzZWQgaW4gTTIzNTEgU2VyaWVzIERBQy4KKyAgKiBAcmV0dmFsIDAgREFDIGlzIGluIGNvbnZlcnNpb24gc3RhdGUuCisgICogQHJldHZhbCAxIERBQyBjb252ZXJzaW9uIGZpbmlzaC4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCBGSU5JU0ggYml0IChEQUNfU1RBVFVTWzBdKSB0byBnZXQgREFDIGNvbnZlcnNpb24gY29tcGxldGUgZmluaXNoIGZsYWcuCisgICovCisjZGVmaW5lIERBQ19HRVRfSU5UX0ZMQUcoZGFjLCB1MzJDaCkgKChkYWMpLT5TVEFUVVMgJiBEQUNfU1RBVFVTX0ZJTklTSF9Nc2spCisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIERNQSB1bmRlci1ydW4gZmxhZy4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHJldHZhbCAwIE5vIERNQSB1bmRlci1ydW4gZXJyb3IgY29uZGl0aW9uIG9jY3VycmVkLgorICAqIEByZXR2YWwgMSBETUEgdW5kZXItcnVuIGVycm9yIGNvbmRpdGlvbiBvY2N1cnJlZC4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCBETUFVRFIgYml0IChEQUNfU1RBVFVTWzFdKSB0byBnZXQgRE1BIHVuZGVyLXJ1biBzdGF0ZS4KKyAgKi8KKyNkZWZpbmUgREFDX0dFVF9ETUFVRFJfRkxBRyhkYWMpICgoKGRhYyktPlNUQVRVUyAmIERBQ19TVEFUVVNfRE1BVURSX01zaykgPj4gREFDX1NUQVRVU19ETUFVRFJfUG9zKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBjbGVhciB0aGUgaW50ZXJydXB0IHN0YXR1cyBiaXQuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2ggTm90IHVzZWQgaW4gTTIzNTEgU2VyaWVzIERBQy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBVc2VyIHdyaXRlcyBGSU5JU0ggYml0IChEQUNfU1RBVFVTWzBdKSB0byBjbGVhciBEQUMgY29udmVyc2lvbiBjb21wbGV0ZSBmaW5pc2ggZmxhZy4KKyAgKi8KKyNkZWZpbmUgREFDX0NMUl9JTlRfRkxBRyhkYWMsIHUzMkNoKSAoKGRhYyktPlNUQVRVUyA9IERBQ19TVEFUVVNfRklOSVNIX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gY2xlYXIgdGhlICBETUEgdW5kZXItcnVuIGZsYWcuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFVzZXIgd3JpdGVzIERNQVVEUiBiaXQgKERBQ19TVEFUVVNbMV0pIHRvIGNsZWFyIERNQSB1bmRlci1ydW4gZmxhZy4KKyAgKi8KKyNkZWZpbmUgREFDX0NMUl9ETUFVRFJfRkxBRyhkYWMpICgoZGFjKS0+U1RBVFVTID0gREFDX1NUQVRVU19ETUFVRFJfTXNrKQorCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgREFDIGdyb3VwIG1vZGUKKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgIE9ubHkgREFDMCBoYXMgdGhpcyBjb250cm9sIGJpdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIERBQ19FTkFCTEVfR1JPVVBfTU9ERShkYWMpICgoZGFjKS0+Q1RMIHw9IERBQ19DVExfR1JQRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBEQUMgZ3JvdXAgbW9kZQorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgT25seSBEQUMwIGhhcyB0aGlzIGNvbnRyb2wgYml0LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgREFDX0RJU0FCTEVfR1JPVVBfTU9ERShkYWMpICgoZGFjKS0+Q1RMICY9IH5EQUNfQ1RMX0dSUEVOX01zaykKKwordm9pZCBEQUNfT3BlbihEQUNfVCAqZGFjLCB1aW50MzJfdCB1MzJDaCwgdWludDMyX3QgdTMyVHJnU3JjKTsKK3ZvaWQgREFDX0Nsb3NlKERBQ19UICpkYWMsIHVpbnQzMl90IHUzMkNoKTsKK3VpbnQzMl90IERBQ19TZXREZWxheVRpbWUoREFDX1QgKmRhYywgdWludDMyX3QgdTMyRGVsYXkpOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIERBQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBEQUNfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0RBQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZWFkYy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZWFkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYWRiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9lYWRjLmgKQEAgLTAsMCArMSw1NTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBlYWRjLmgKKyAqIEB2ZXJzaW9uICBWMC4xMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBFQURDIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRUFEQ19IX18KKyNkZWZpbmUgX19FQURDX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUFEQ19Ecml2ZXIgRUFEQyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBFQURDX0VYUE9SVEVEX0NPTlNUQU5UUyBFQURDIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEVBRENfQ1RMIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFQURDX0NUTF9ESUZGRU5fU0lOR0xFX0VORCAgICAgICAgICAoMFVMPDxFQURDX0NUTF9ESUZGRU5fUG9zKSAgIC8qITwgU2luZ2xlLWVuZCBpbnB1dCBtb2RlICAgICAgKi8KKyNkZWZpbmUgRUFEQ19DVExfRElGRkVOX0RJRkZFUkVOVElBTCAgICAgICAgKDFVTDw8RUFEQ19DVExfRElGRkVOX1BvcykgICAvKiE8IERpZmZlcmVudGlhbCBpbnB1dCBtb2RlICAgICovCisKKyNkZWZpbmUgRUFEQ19DVExfRE1PRl9TVFJBSUdIVF9CSU5BUlkgICAgICAgKDBVTDw8RUFEQ19DVExfRE1PRl9Qb3MpICAgICAvKiE8IFNlbGVjdCB0aGUgc3RyYWlnaHQgYmluYXJ5IGZvcm1hdCBhcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiB0aGUgY29udmVyc2lvbiByZXN1bHQgICAqLworI2RlZmluZSBFQURDX0NUTF9ETU9GX1RXT1NfQ09NUExFTUVOVCAgICAgICAoMVVMPDxFQURDX0NUTF9ETU9GX1BvcykgICAgIC8qITwgU2VsZWN0IHRoZSAyJ3MgY29tcGxlbWVudCBmb3JtYXQgYXMgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIGNvbnZlcnNpb24gcmVzdWx0ICAgICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRUFEQ19TQ1RMIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFQURDX1NDVExfQ0hTRUwoeCkgICAgICAgICAgICAgICAgICAoKHgpIDw8IEVBRENfU0NUTF9DSFNFTF9Qb3MpICAgICAgIC8qITwgQS9EIHNhbXBsZSBtb2R1bGUgY2hhbm5lbCBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgRUFEQ19TQ1RMX1RSR0RMWURJVih4KSAgICAgICAgICAgICAgKCh4KSA8PCBFQURDX1NDVExfVFJHRExZRElWX1BvcykgICAvKiE8IEEvRCBzYW1wbGUgbW9kdWxlIHN0YXJ0IG9mIGNvbnZlcnNpb24gdHJpZ2dlciBkZWxheSBjbG9jayBkaXZpZGVyIHNlbGVjdGlvbiAqLworI2RlZmluZSBFQURDX1NDVExfVFJHRExZQ05UKHgpICAgICAgICAgICAgICAoKHgpIDw8IEVBRENfU0NUTF9UUkdETFlDTlRfUG9zKSAgIC8qITwgQS9EIHNhbXBsZSBtb2R1bGUgc3RhcnQgb2YgY29udmVyc2lvbiB0cmlnZ2VyIGRlbGF5IHRpbWUgKi8KKworI2RlZmluZSBFQURDX1NPRlRXQVJFX1RSSUdHRVIgICAgICAgICAgICAgICAoMFVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgICAvKiE8IFNvZnR3YXJlIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19GQUxMSU5HX0VER0VfVFJJR0dFUiAgICAgICAgICAgKEVBRENfU0NUTF9FWFRGRU5fTXNrIHwgKDFVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpKSAgICAgICAvKiE8IFNUQURDIHBpbiBmYWxsaW5nIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1JJU0lOR19FREdFX1RSSUdHRVIgICAgICAgICAgICAoRUFEQ19TQ1RMX0VYVFJFTl9Nc2sgfCAoMVVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykpICAgICAgIC8qITwgU1RBREMgcGluIHJpc2luZyBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19GQUxMSU5HX1JJU0lOR19FREdFX1RSSUdHRVIgICAgKEVBRENfU0NUTF9FWFRGRU5fTXNrIHwgRUFEQ19TQ1RMX0VYVFJFTl9Nc2sgfCAoMVVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykpIC8qITwgU1RBREMgcGluIGJvdGggZmFsbGluZyBhbmQgcmlzaW5nIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX0FESU5UMF9UUklHR0VSICAgICAgICAgICAgICAgICAoMlVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgICAvKiE8IEFEQyBBRElOVDAgaW50ZXJydXB0IEVPQyBwdWxzZSB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfQURJTlQxX1RSSUdHRVIgICAgICAgICAgICAgICAgICgzVUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAgIC8qITwgQURDIEFESU5UMSBpbnRlcnJ1cHQgRU9DIHB1bHNlIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19USU1FUjBfVFJJR0dFUiAgICAgICAgICAgICAgICAgKDRVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgICAgLyohPCBUaW1lcjAgb3ZlcmZsb3cgcHVsc2UgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1RJTUVSMV9UUklHR0VSICAgICAgICAgICAgICAgICAoNVVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgICAvKiE8IFRpbWVyMSBvdmVyZmxvdyBwdWxzZSB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfVElNRVIyX1RSSUdHRVIgICAgICAgICAgICAgICAgICg2VUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAgIC8qITwgVGltZXIyIG92ZXJmbG93IHB1bHNlIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19USU1FUjNfVFJJR0dFUiAgICAgICAgICAgICAgICAgKDdVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgICAgLyohPCBUaW1lcjMgb3ZlcmZsb3cgcHVsc2UgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1BXTTBURzBfVFJJR0dFUiAgICAgICAgICAgICAgICAoOFVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgICAvKiE8IEVQV00wVEcwIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19QV00wVEcxX1RSSUdHRVIgICAgICAgICAgICAgICAgKDlVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgICAgLyohPCBFUFdNMFRHMSB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfUFdNMFRHMl9UUklHR0VSICAgICAgICAgICAgICAgICgweEFVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgIC8qITwgRVBXTTBURzIgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1BXTTBURzNfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHhCVUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAvKiE8IEVQV00wVEczIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19QV00wVEc0X1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4Q1VMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgLyohPCBFUFdNMFRHNCB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfUFdNMFRHNV9UUklHR0VSICAgICAgICAgICAgICAgICgweERVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgIC8qITwgRVBXTTBURzUgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1BXTTFURzBfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHhFVUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgICAvKiE8IEVQV00xVEcwIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19QV00xVEcxX1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4RlVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAgLyohPCBFUFdNMVRHMSB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfUFdNMVRHMl9UUklHR0VSICAgICAgICAgICAgICAgICgweDEwVUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgIC8qITwgRVBXTTFURzIgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX1BXTTFURzNfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHgxMVVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAvKiE8IEVQV00xVEczIHRyaWdnZXIgKi8KKyNkZWZpbmUgRUFEQ19QV00xVEc0X1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4MTJVTDw8RUFEQ19TQ1RMX1RSR1NFTF9Qb3MpICAgLyohPCBFUFdNMVRHNCB0cmlnZ2VyICovCisjZGVmaW5lIEVBRENfUFdNMVRHNV9UUklHR0VSICAgICAgICAgICAgICAgICgweDEzVUw8PEVBRENfU0NUTF9UUkdTRUxfUG9zKSAgIC8qITwgRVBXTTFURzUgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX0JQV00wVEdfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHgxNFVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAvKiE8IEJQV00wVEcgdHJpZ2dlciAqLworI2RlZmluZSBFQURDX0JQV00xVEdfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHgxNVVMPDxFQURDX1NDVExfVFJHU0VMX1BvcykgICAvKiE8IEJQV00xVEcgdHJpZ2dlciAqLworCisjZGVmaW5lIEVBRENfU0NUTF9UUkdETFlESVZfRElWSURFUl8xICAgICAgICgwVUw8PEVBRENfU0NUTF9UUkdETFlESVZfUG9zKSAgICAgICAgIC8qITwgVHJpZ2dlciBkZWxheSBjbG9jayBmcmVxdWVuY3kgaXMgQURDX0NMSy8xICovCisjZGVmaW5lIEVBRENfU0NUTF9UUkdETFlESVZfRElWSURFUl8yICAgICAgICgweDFVTDw8RUFEQ19TQ1RMX1RSR0RMWURJVl9Qb3MpICAgICAgIC8qITwgVHJpZ2dlciBkZWxheSBjbG9jayBmcmVxdWVuY3kgaXMgQURDX0NMSy8yICovCisjZGVmaW5lIEVBRENfU0NUTF9UUkdETFlESVZfRElWSURFUl80ICAgICAgICgweDJVTDw8RUFEQ19TQ1RMX1RSR0RMWURJVl9Qb3MpICAgICAgIC8qITwgVHJpZ2dlciBkZWxheSBjbG9jayBmcmVxdWVuY3kgaXMgQURDX0NMSy80ICovCisjZGVmaW5lIEVBRENfU0NUTF9UUkdETFlESVZfRElWSURFUl8xNiAgICAgICgweDNVTDw8RUFEQ19TQ1RMX1RSR0RMWURJVl9Qb3MpICAgICAgIC8qITwgVHJpZ2dlciBkZWxheSBjbG9jayBmcmVxdWVuY3kgaXMgQURDX0NMSy8xNiAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEVBRENfQ01QIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRUFEQ19DTVBfQ01QQ09ORF9MRVNTX1RIQU4gICAgICAgICAgKDBVTDw8RUFEQ19DTVBfQ01QQ09ORF9Qb3MpICAgLyohPCBUaGUgY29tcGFyZSBjb25kaXRpb24gaXMgImxlc3MgdGhhbiIgKi8KKyNkZWZpbmUgRUFEQ19DTVBfQ01QQ09ORF9HUkVBVEVSX09SX0VRVUFMICAgKDFVTDw8RUFEQ19DTVBfQ01QQ09ORF9Qb3MpICAgLyohPCBUaGUgY29tcGFyZSBjb25kaXRpb24gaXMgImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byIgKi8KKyNkZWZpbmUgRUFEQ19DTVBfQ01QV0VOX0VOQUJMRSAgICAgICAgICAgICAgKEVBRENfQ01QX0NNUFdFTl9Nc2spICAgIC8qITwgQ29tcGFyZSB3aW5kb3cgbW9kZSBlbmFibGUgKi8KKyNkZWZpbmUgRUFEQ19DTVBfQ01QV0VOX0RJU0FCTEUgICAgICAgICAgICAgKH5FQURDX0NNUF9DTVBXRU5fTXNrKSAgIC8qITwgQ29tcGFyZSB3aW5kb3cgbW9kZSBkaXNhYmxlICovCisjZGVmaW5lIEVBRENfQ01QX0FEQ01QSUVfRU5BQkxFICAgICAgICAgICAgIChFQURDX0NNUF9BRENNUElFX01zaykgICAvKiE8IEEvRCByZXN1bHQgY29tcGFyZSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIEVBRENfQ01QX0FEQ01QSUVfRElTQUJMRSAgICAgICAgICAgICh+RUFEQ19DTVBfQURDTVBJRV9Nc2spICAvKiE8IEEvRCByZXN1bHQgY29tcGFyZSBpbnRlcnJ1cHQgZGlzYWJsZSAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVBRENfRVhQT1JURURfQ09OU1RBTlRTICovCisKKy8qKiBAYWRkdG9ncm91cCBFQURDX0VYUE9SVEVEX0ZVTkNUSU9OUyBFQURDIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBFQURDIE1hY3JvIERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgICogQGJyaWVmIEEvRCBDb252ZXJ0ZXIgQ29udHJvbCBDaXJjdWl0cyBSZXNldC4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBBRENSU1QgYml0IChFQURDX0NUWzFdKSByZW1haW5zIDEgZHVyaW5nIEFEQyByZXNldCwgd2hlbiBBREMgcmVzZXQgZW5kLCB0aGUgQURDUlNUIGJpdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgdG8gMC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19DT05WX1JFU0VUKGVhZGMpICgoZWFkYyktPkNUTCB8PSBFQURDX0NUTF9BRENSU1RfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgV2hlbiBBL0QgY29udmVyc2lvbiBpcyBjb21wbGV0ZWQsIHRoZSBjb252ZXJ0ZWQgZGF0YSBpcyBsb2FkZWQgaW50byBFQURDX0RBVG4gKG46IDAgfiAxOCkgcmVnaXN0ZXIsCisgICogICAgICAgICB1c2VyIGNhbiBlbmFibGUgdGhpcyBiaXQgdG8gZ2VuZXJhdGUgYSBQRE1BIGRhdGEgdHJhbnNmZXIgcmVxdWVzdC4KKyAgV2hlbiBzZXQgUERNQUVOIGJpdCAoRUFEQ19DVExbMTFdKSwgdXNlciBtdXN0IHNldCBBRElOVEVObiAoRUFEQ19DVExbNToyXSwgbj0wfjMpID0gMCB0byBkaXNhYmxlIGludGVycnVwdC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfUERNQShlYWRjKSAoKGVhZGMpLT5DVEwgfD0gRUFEQ19DVExfUERNQUVOX01zaykKKworLyoqCisgICogQGJyaWVmIERpc2FibGUgUERNQSB0cmFuc2Zlci4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBQRE1BIHRyYW5zZmVyLgorICAqLworI2RlZmluZSBFQURDX0RJU0FCTEVfUERNQShlYWRjKSAoKGVhZGMpLT5DVEwgJj0gKH5FQURDX0NUTF9QRE1BRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBkb3VibGUgYnVmZmVyIG1vZGUuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVOdW0gRGVjaWRlcyB0aGUgc2FtcGxlIG1vZHVsZSBudW1iZXIsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGUgQURDIGNvbnRyb2xsZXIgc3VwcG9ydHMgYSBkb3VibGUgYnVmZmVyIG1vZGUgaW4gc2FtcGxlIG1vZHVsZSAwfjMuCisgICogICAgICAgICBJZiB1c2VyIGVuYWJsZSBEQk1FTiAoRUFEQ19TQ1RMblsyM10sIG49MH4zKSwgdGhlIGRvdWJsZSBidWZmZXIgbW9kZSB3aWxsIGVuYWJsZS4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfRE9VQkxFX0JVRkZFUihlYWRjLCB1MzJNb2R1bGVOdW0pICgoZWFkYyktPlNDVExbKHUzMk1vZHVsZU51bSldIHw9IEVBRENfU0NUTF9EQk1FTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIGRvdWJsZSBidWZmZXIgbW9kZS4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU51bSBEZWNpZGVzIHRoZSBzYW1wbGUgbW9kdWxlIG51bWJlciwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAzLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFNhbXBsZSBoYXMgb25lIHNhbXBsZSByZXN1bHQgcmVnaXN0ZXIuCisgICovCisjZGVmaW5lIEVBRENfRElTQUJMRV9ET1VCTEVfQlVGRkVSKGVhZGMsIHUzMk1vZHVsZU51bSkgKChlYWRjKS0+U0NUTFsodTMyTW9kdWxlTnVtKV0gJj0gfkVBRENfU0NUTF9EQk1FTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBTZXQgQURJRm4gYXQgQS9EIGVuZCBvZiBjb252ZXJzaW9uLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIERlY2lkZXMgdGhlIHNhbXBsZSBtb2R1bGUgbnVtYmVyLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE1LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoZSBBL0QgY29udmVydGVyIGdlbmVyYXRlcyBBRElGbiAoRUFEQ19TVEFUVVMyWzM6MF0sIG49MH4zKSBhdCB0aGUgc3RhcnQgb2YgY29udmVyc2lvbi4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfSU5UX1BPU0lUSU9OKGVhZGMsIHUzMk1vZHVsZU51bSkgKChlYWRjKS0+U0NUTFsodTMyTW9kdWxlTnVtKV0gfD0gRUFEQ19TQ1RMX0lOVFBPU19Nc2spCisKKy8qKgorICAqIEBicmllZiBTZXQgQURJRm4gYXQgQS9EIHN0YXJ0IG9mIGNvbnZlcnNpb24uCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVOdW0gRGVjaWRlcyB0aGUgc2FtcGxlIG1vZHVsZSBudW1iZXIsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMTUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhlIEEvRCBjb252ZXJ0ZXIgZ2VuZXJhdGVzIEFESUZuIChFQURDX1NUQVRVUzJbMzowXSwgbj0wfjMpIGF0IHRoZSBlbmQgb2YgY29udmVyc2lvbi4KKyAgKi8KKyNkZWZpbmUgRUFEQ19ESVNBQkxFX0lOVF9QT1NJVElPTihlYWRjLCB1MzJNb2R1bGVOdW0pICgoZWFkYyktPlNDVExbKHUzMk1vZHVsZU51bSldICY9IH5FQURDX1NDVExfSU5UUE9TX01zaykKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSB0aGUgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBEZWNpZGVzIHRoZSBjb21iaW5hdGlvbiBvZiBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHN0YXR1cy4KKyAgKiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZC4gQml0IDAgaXMgQURDSUVOMCwgYml0IDEgaXMgQURDSUVOMS4uLiwgYml0IDMgaXMgQURDSUVOMy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGUgQS9EIGNvbnZlcnRlciBnZW5lcmF0ZXMgYSBjb252ZXJzaW9uIGVuZCBBRElGbiAoRUFEQ19TVEFUVVMyW25dKSB1cG9uIHRoZSBlbmQgb2Ygc3BlY2lmaWMgc2FtcGxlIG1vZHVsZSBBL0QgY29udmVyc2lvbi4KKyAgKiAgICAgICAgIElmIEFEQ0lFTm4gYml0IChFQURDX0NUTFtuKzJdKSBpcyBzZXQgdGhlbiBjb252ZXJzaW9uIGVuZCBpbnRlcnJ1cHQgcmVxdWVzdCBBRElOVG4gaXMgZ2VuZXJhdGVkIChuPTB+MykuCisgICovCisjZGVmaW5lIEVBRENfRU5BQkxFX0lOVChlYWRjLCB1MzJNYXNrKSAoKGVhZGMpLT5DVEwgfD0gKCh1MzJNYXNrKSA8PCBFQURDX0NUTF9BRENJRU4wX1BvcykpCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIERlY2lkZXMgdGhlIGNvbWJpbmF0aW9uIG9mIGludGVycnVwdCBzdGF0dXMgYml0cy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc3RhdHVzLgorICAqICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdHMgd2lsbCBiZSBkaXNhYmxlZC4gQml0IDAgaXMgQURDSUVOMCwgYml0IDEgaXMgQURDSUVOMS4uLiwgYml0IDMgaXMgQURDSUVOMy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBTcGVjaWZpYyBzYW1wbGUgbW9kdWxlIEEvRCBBRElOVDAgaW50ZXJydXB0IGZ1bmN0aW9uIERpc2FibGVkLgorICAqLworI2RlZmluZSBFQURDX0RJU0FCTEVfSU5UKGVhZGMsIHUzMk1hc2spICgoZWFkYyktPkNUTCAmPSB+KCh1MzJNYXNrKSA8PCBFQURDX0NUTF9BRENJRU4wX1BvcykpCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgdGhlIHNhbXBsZSBtb2R1bGUgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMySW50U2VsIERlY2lkZXMgd2hpY2ggaW50ZXJydXB0IHNvdXJjZSB3aWxsIGJlIHVzZWQsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMy4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU1hc2sgdGhlIGNvbWJpbmF0aW9uIG9mIHNhbXBsZSBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cyBiaXRzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIHNhbXBsZSBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBzYW1wbGUgbW9kdWxlIGludGVycnVwdHMgd2lsbCBiZSBlbmFibGVkLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAxfjB4N0ZGRkYuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhlcmUgYXJlIDQgQURDIGludGVycnVwdHMgQURJTlQwfjMsIGFuZCBlYWNoIG9mIHRoZXNlIGludGVycnVwdHMgaGFzIGl0cyBvd24gaW50ZXJydXB0IHZlY3RvciBhZGRyZXNzLgorICAqLworI2RlZmluZSBFQURDX0VOQUJMRV9TQU1QTEVfTU9EVUxFX0lOVChlYWRjLCB1MzJJbnRTZWwsIHUzMk1vZHVsZU1hc2spICgoZWFkYyktPklOVFNSQ1sodTMySW50U2VsKV0gfD0gKHUzMk1vZHVsZU1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSB0aGUgc2FtcGxlIG1vZHVsZSBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJJbnRTZWwgRGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgc291cmNlIHdpbGwgYmUgdXNlZCwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAzLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTWFzayB0aGUgY29tYmluYXRpb24gb2Ygc2FtcGxlIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgc2FtcGxlIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIHNhbXBsZSBtb2R1bGUgaW50ZXJydXB0cyB3aWxsIGJlIGRpc2FibGVkLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAxfjB4N0ZGRkYuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhlcmUgYXJlIDQgQURDIGludGVycnVwdHMgQURJTlQwfjMsIGFuZCBlYWNoIG9mIHRoZXNlIGludGVycnVwdHMgaGFzIGl0cyBvd24gaW50ZXJydXB0IHZlY3RvciBhZGRyZXNzLgorICAqLworI2RlZmluZSBFQURDX0RJU0FCTEVfU0FNUExFX01PRFVMRV9JTlQoZWFkYywgdTMySW50U2VsLCB1MzJNb2R1bGVNYXNrKSAoKGVhZGMpLT5JTlRTUkNbKHUzMkludFNlbCldICY9IH4odTMyTW9kdWxlTWFzaykpCisKKy8qKgorICAqIEBicmllZiBTZXQgdGhlIGlucHV0IG1vZGUgb3V0cHV0IGZvcm1hdC4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkZvcm1hdCBEZWNpZGVzIHRoZSBvdXRwdXQgZm9ybWF0LiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DVExfRE1PRl9TVFJBSUdIVF9CSU5BUlkgICAgICA6U2VsZWN0IHRoZSBzdHJhaWdodCBiaW5hcnkgZm9ybWF0IGFzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSBjb252ZXJzaW9uIHJlc3VsdC4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfQ1RMX0RNT0ZfVFdPU19DT01QTEVNRU5UICAgICAgOlNlbGVjdCB0aGUgMidzIGNvbXBsZW1lbnQgZm9ybWF0IGFzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSBjb252ZXJzaW9uIHJlc3VsdC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGUgbWFjcm8gaXMgdXNlZCB0byBzZXQgQS9EIGlucHV0IG1vZGUgb3V0cHV0IGZvcm1hdC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19TRVRfRE1PRihlYWRjLCB1MzJGb3JtYXQpICgoZWFkYyktPkNUTCA9ICgoZWFkYyktPkNUTCAmIH5FQURDX0NUTF9ETU9GX01zaykgfCAodTMyRm9ybWF0KSkKKworLyoqCisgICogQGJyaWVmIFN0YXJ0IHRoZSBBL0QgY29udmVyc2lvbi4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIHNhbXBsZSBtb2R1bGUuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgc2FtcGxlIG1vZHVsZS4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIHNhbXBsZSBtb2R1bGUgd2lsbCBiZSBjb252ZXJzaW9uLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAxfjB4N0ZGRkYuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgc2FtcGxlIG1vZHVsZSAwLCBiaXQgMSBpcyBzYW1wbGUgbW9kdWxlIDEuLi4sIGJpdCAxOCBpcyBzYW1wbGUgbW9kdWxlIDE4LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIEFmdGVyIHdyaXRlIEVBRENfU1dUUkcgcmVnaXN0ZXIgdG8gc3RhcnQgQURDIGNvbnZlcnNpb24sIHRoZSBFQURDX1BFTkRTVFMgcmVnaXN0ZXIgd2lsbCBzaG93IHdoaWNoIFNBTVBMRSB3aWxsIGNvbnZlcnNpb24uCisgICovCisjZGVmaW5lIEVBRENfU1RBUlRfQ09OVihlYWRjLCB1MzJNb2R1bGVNYXNrKSAoKGVhZGMpLT5TV1RSRyA9ICh1MzJNb2R1bGVNYXNrKSkKKworLyoqCisgICogQGJyaWVmIENhbmNlbCB0aGUgY29udmVyc2lvbiBmb3Igc2FtcGxlIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIHNhbXBsZSBtb2R1bGUuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgc2FtcGxlIG1vZHVsZS4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIHNhbXBsZSBtb2R1bGUgd2lsbCBzdG9wIHRoZSBjb252ZXJzaW9uLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAxfjB4N0ZGRkYuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgc2FtcGxlIG1vZHVsZSAwLCBiaXQgMSBpcyBzYW1wbGUgbW9kdWxlIDEuLi4sIGJpdCAxOCBpcyBzYW1wbGUgbW9kdWxlMTguCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgSWYgdXNlciB3YW50IHRvIGRpc2FibGUgdGhlIGNvbnZlcnNpb24gb2YgdGhlIHNhbXBsZSBtb2R1bGUsIHVzZXIgY2FuIHdyaXRlIEVBRENfUEVORFNUUyByZWdpc3RlciB0byBjbGVhciBpdC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19TVE9QX0NPTlYoZWFkYywgdTMyTW9kdWxlTWFzaykgKChlYWRjKS0+UEVORFNUUyA9ICh1MzJNb2R1bGVNYXNrKSkKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgY29udmVyc2lvbiBwZW5kaW5nIGZsYWcuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHJldHVybiBSZXR1cm4gdGhlIGNvbnZlcnNpb24gcGVuZGluZyBzYW1wbGUgbW9kdWxlLgorICAqIEBkZXRhaWxzIFRoaXMgU1RQRm4oRUFEQ19QRU5EU1RTWzE4OjBdKSBiaXQgcmVtYWlucyAxIGR1cmluZyBwZW5kaW5nIHN0YXRlLCB3aGVuIHRoZSByZXNwZWN0aXZlIEFEQyBjb252ZXJzaW9uIGlzIGVuZCwKKyAgKiAgICAgICAgIHRoZSBTVFBGbiAobj0wfjE4KSBiaXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIHRvIDAuCisgICovCisjZGVmaW5lIEVBRENfR0VUX1BFTkRJTkdfQ09OVihlYWRjKSAoKGVhZGMpLT5QRU5EU1RTKQorCisvKioKKyAgKiBAYnJpZWYgR2V0IHRoZSBjb252ZXJzaW9uIGRhdGEgb2YgdGhlIHVzZXItc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVOdW0gRGVjaWRlcyB0aGUgc2FtcGxlIG1vZHVsZSBudW1iZXIsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMTguCisgICogQHJldHVybiBSZXR1cm4gdGhlIGNvbnZlcnNpb24gZGF0YSBvZiB0aGUgdXNlci1zcGVjaWZpZWQgc2FtcGxlIG1vZHVsZS4KKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCBSRVNVTFQgYml0IChFQURDX0RBVG5bMTU6MF0sIG49MH4xOCkgZmllbGQgdG8gZ2V0IGNvbnZlcnNpb24gZGF0YS4KKyAgKi8KKyNkZWZpbmUgRUFEQ19HRVRfQ09OVl9EQVRBKGVhZGMsIHUzMk1vZHVsZU51bSkgKChlYWRjKS0+REFUWyh1MzJNb2R1bGVOdW0pXSAmIEVBRENfREFUX1JFU1VMVF9Nc2spCisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIGRhdGEgb3ZlcnJ1biBmbGFnIG9mIHRoZSB1c2VyLXNwZWNpZmllZCBzYW1wbGUgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTWFzayBUaGUgY29tYmluYXRpb24gb2YgZGF0YSBvdmVycnVuIHN0YXR1cyBiaXRzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGRhdGEgb3ZlcnJ1biBzdGF0dXMsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDF+MHg3RkZGRi4KKyAgKiBAcmV0dXJuIFJldHVybiB0aGUgZGF0YSBvdmVycnVuIGZsYWcgb2YgdGhlIHVzZXItc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUuCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgT1YgYml0IChFQURDX1NUQVRVUzBbMzE6MTZdLCBFQURDX1NUQVRVUzFbMTg6MTZdKSBmaWVsZCB0byBnZXQgZGF0YSBvdmVycnVuIHN0YXR1cy4KKyAgKi8KKyNkZWZpbmUgRUFEQ19HRVRfREFUQV9PVkVSUlVOX0ZMQUcoZWFkYywgdTMyTW9kdWxlTWFzaykgKCgoKGVhZGMpLT5TVEFUVVMwID4+IEVBRENfU1RBVFVTMF9PVl9Qb3MpIHwgKChlYWRjKS0+U1RBVFVTMSAmIEVBRENfU1RBVFVTMV9PVl9Nc2spKSAmICh1MzJNb2R1bGVNYXNrKSkKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgZGF0YSB2YWxpZCBmbGFnIG9mIHRoZSB1c2VyLXNwZWNpZmllZCBzYW1wbGUgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTWFzayBUaGUgY29tYmluYXRpb24gb2YgZGF0YSB2YWxpZCBzdGF0dXMgYml0cy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBkYXRhIHZhbGlkIHN0YXR1cywgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMX4weDdGRkZGLgorICAqIEByZXR1cm4gUmV0dXJuIHRoZSBkYXRhIHZhbGlkIGZsYWcgb2YgdGhlIHVzZXItc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUuCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgVkFMSUQgYml0IChFQURDX1NUQVRVUzBbMTU6MF0sIEVBRENfU1RBVFVTMVsyOjBdKSBmaWVsZCB0byBnZXQgZGF0YSB2YWxpZCBzdGF0dXMuCisgICovCisjZGVmaW5lIEVBRENfR0VUX0RBVEFfVkFMSURfRkxBRyhlYWRjLCB1MzJNb2R1bGVNYXNrKSAoKCgoZWFkYyktPlNUQVRVUzAgJiBFQURDX1NUQVRVUzBfVkFMSURfTXNrKSB8ICgoKGVhZGMpLT5TVEFUVVMxICYgRUFEQ19TVEFUVVMxX1ZBTElEX01zaykgPDwgMTYpKSAmICh1MzJNb2R1bGVNYXNrKSkKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgZG91YmxlIGRhdGEgb2YgdGhlIHVzZXItc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVOdW0gRGVjaWRlcyB0aGUgc2FtcGxlIG1vZHVsZSBudW1iZXIsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMTguCisgICogQHJldHVybiBSZXR1cm4gdGhlIGRvdWJsZSBkYXRhIG9mIHRoZSB1c2VyLXNwZWNpZmllZCBzYW1wbGUgbW9kdWxlLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIFJFU1VMVCBiaXQgKEVBRENfRERBVG5bMTU6MF0sIG49MH4zKSBmaWVsZCB0byBnZXQgY29udmVyc2lvbiBkYXRhLgorICAqLworI2RlZmluZSBFQURDX0dFVF9ET1VCTEVfREFUQShlYWRjLCB1MzJNb2R1bGVOdW0pICgoZWFkYyktPkREQVRbKHUzMk1vZHVsZU51bSldICYgRUFEQ19EREFUMF9SRVNVTFRfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgR2V0IHRoZSB1c2VyLXNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZ3MuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHN0YXR1cy4KKyAgKiAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgQURJRjAsIGJpdCAxIGlzIEFESUYxLi4uLCBiaXQgMyBpcyBBRElGMy4KKyAgKiAgICAgICAgICAgICAgICAgICAgQml0IDQgaXMgQURDTVBGMCwgYml0IDUgaXMgQURDTVBGMS4uLiwgYml0IDcgaXMgQURDTVBGMy4KKyAgKiBAcmV0dXJuIFJldHVybiB0aGUgdXNlci1zcGVjaWZpZWQgaW50ZXJydXB0IGZsYWdzLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgdGhlIHVzZXItc3BlY2lmaWVkIGludGVycnVwdCBmbGFncy4KKyAgKi8KKyNkZWZpbmUgRUFEQ19HRVRfSU5UX0ZMQUcoZWFkYywgdTMyTWFzaykgKChlYWRjKS0+U1RBVFVTMiAmICh1MzJNYXNrKSkKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgdXNlci1zcGVjaWZpZWQgc2FtcGxlIG1vZHVsZSBvdmVycnVuIGZsYWdzLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTWFzayBUaGUgY29tYmluYXRpb24gb2Ygc2FtcGxlIG1vZHVsZSBvdmVycnVuIHN0YXR1cyBiaXRzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIHNhbXBsZSBtb2R1bGUgb3ZlcnJ1biBzdGF0dXMsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDF+MHg3RkZGRi4KKyAgKiBAcmV0dXJuIFJldHVybiB0aGUgdXNlci1zcGVjaWZpZWQgc2FtcGxlIG1vZHVsZSBvdmVycnVuIGZsYWdzLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgdGhlIHVzZXItc3BlY2lmaWVkIHNhbXBsZSBtb2R1bGUgb3ZlcnJ1biBmbGFncy4KKyAgKi8KKyNkZWZpbmUgRUFEQ19HRVRfU0FNUExFX01PRFVMRV9PVl9GTEFHKGVhZGMsIHUzMk1vZHVsZU1hc2spICgoZWFkYyktPk9WU1RTICYgKHUzMk1vZHVsZU1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgQ2xlYXIgdGhlIHNlbGVjdGVkIGludGVycnVwdCBzdGF0dXMgYml0cy4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGNvbXBhcmUgaW50ZXJydXB0IHN0YXR1cyBiaXRzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNvbXBhcmUgaW50ZXJydXB0IHN0YXR1cy4KKyAgKiAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgQURJRjAsIGJpdCAxIGlzIEFESUYxLi4uLCBiaXQgMyBpcyBBRElGMy4KKyAgKiAgICAgICAgICAgICAgICAgICAgQml0IDQgaXMgQURDTVBGMCwgYml0IDUgaXMgQURDTVBGMS4uLiwgYml0IDcgaXMgQURDTVBGMy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgY2xlYXIgdGhlIHNlbGVjdGVkIGludGVycnVwdCBzdGF0dXMgYml0cy4KKyAgKi8KKyNkZWZpbmUgRUFEQ19DTFJfSU5UX0ZMQUcoZWFkYywgdTMyTWFzaykgKChlYWRjKS0+U1RBVFVTMiA9ICh1MzJNYXNrKSkKKworLyoqCisgICogQGJyaWVmIENsZWFyIHRoZSBzZWxlY3RlZCBzYW1wbGUgbW9kdWxlIG92ZXJydW4gc3RhdHVzIGJpdHMuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBzYW1wbGUgbW9kdWxlIG92ZXJydW4gc3RhdHVzIGJpdHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgc2FtcGxlIG1vZHVsZSBvdmVycnVuIHN0YXR1cy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICBCaXQgMCBpcyBTUE9WRjAsIGJpdCAxIGlzIFNQT1ZGMS4uLiwgYml0IDE4IGlzIFNQT1ZGMTguCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIHRoZSBzZWxlY3RlZCBzYW1wbGUgbW9kdWxlIG92ZXJydW4gc3RhdHVzIGJpdHMuCisgICovCisjZGVmaW5lIEVBRENfQ0xSX1NBTVBMRV9NT0RVTEVfT1ZfRkxBRyhlYWRjLCB1MzJNb2R1bGVNYXNrKSAoKGVhZGMpLT5PVlNUUyA9ICh1MzJNb2R1bGVNYXNrKSkKKworLyoqCisgICogQGJyaWVmIENoZWNrIGFsbCBzYW1wbGUgbW9kdWxlIEEvRCByZXN1bHQgZGF0YSByZWdpc3RlciBvdmVycnVuIGZsYWdzLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEByZXR2YWwgMCBOb25lIG9mIHNhbXBsZSBtb2R1bGUgZGF0YSByZWdpc3RlciBvdmVycnVuIGZsYWcgaXMgc2V0IHRvIDEuCisgICogQHJldHZhbCAxIEFueSBvbmUgb2Ygc2FtcGxlIG1vZHVsZSBkYXRhIHJlZ2lzdGVyIG92ZXJydW4gZmxhZyBpcyBzZXQgdG8gMS4KKyAgKiBAZGV0YWlscyBUaGUgQU9WIGJpdCAoRUFEQ19TVEFUVVMyWzI3XSkgd2lsbCBrZWVwIDEgd2hlbiBhbnkgb25lIG9mIHNhbXBsZSBtb2R1bGUgZGF0YSByZWdpc3RlciBvdmVycnVuIGZsYWcgT1ZuIChFQURDX0RBVG5bMTZdKSBpcyBzZXQgdG8gMS4KKyAgKi8KKyNkZWZpbmUgRUFEQ19JU19EQVRBX09WKGVhZGMpICgoKGVhZGMpLT5TVEFUVVMyICYgRUFEQ19TVEFUVVMyX0FPVl9Nc2spID4+IEVBRENfU1RBVFVTMl9BT1ZfUG9zKQorCisvKioKKyAgKiBAYnJpZWYgQ2hlY2sgYWxsIHNhbXBsZSBtb2R1bGUgQS9EIHJlc3VsdCBkYXRhIHJlZ2lzdGVyIHZhbGlkIGZsYWdzLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEByZXR2YWwgMCBOb25lIG9mIHNhbXBsZSBtb2R1bGUgZGF0YSByZWdpc3RlciB2YWxpZCBmbGFnIGlzIHNldCB0byAxLgorICAqIEByZXR2YWwgMSBBbnkgb25lIG9mIHNhbXBsZSBtb2R1bGUgZGF0YSByZWdpc3RlciB2YWxpZCBmbGFnIGlzIHNldCB0byAxLgorICAqIEBkZXRhaWxzIFRoZSBBVkFMSUQgYml0IChFQURDX1NUQVRVUzJbMjZdKSB3aWxsIGtlZXAgMSB3aGVuIGFueSBvbmUgb2Ygc2FtcGxlIG1vZHVsZSBkYXRhIHJlZ2lzdGVyIHZhbGlkIGZsYWcgVkFMSURuIChFQURDX0RBVG5bMTddKSBpcyBzZXQgdG8gMS4KKyAgKi8KKyNkZWZpbmUgRUFEQ19JU19EQVRBX1ZBTElEKGVhZGMpICgoKGVhZGMpLT5TVEFUVVMyICYgRUFEQ19TVEFUVVMyX0FWQUxJRF9Nc2spID4+IEVBRENfU1RBVFVTMl9BVkFMSURfUG9zKQorCisvKioKKyAgKiBAYnJpZWYgQ2hlY2sgYWxsIEEvRCBzYW1wbGUgbW9kdWxlIHN0YXJ0IG9mIGNvbnZlcnNpb24gb3ZlcnJ1biBmbGFncy4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dmFsIDAgTm9uZSBvZiBzYW1wbGUgbW9kdWxlIGV2ZW50IG92ZXJydW4gZmxhZyBpcyBzZXQgdG8gMS4KKyAgKiBAcmV0dmFsIDEgQW55IG9uZSBvZiBzYW1wbGUgbW9kdWxlIGV2ZW50IG92ZXJydW4gZmxhZyBpcyBzZXQgdG8gMS4KKyAgKiBAZGV0YWlscyBUaGUgU1RPVkYgYml0IChFQURDX1NUQVRVUzJbMjVdKSB3aWxsIGtlZXAgMSB3aGVuIGFueSBvbmUgb2Ygc2FtcGxlIG1vZHVsZSBldmVudCBvdmVycnVuIGZsYWcgU1BPVkZuIChFQURDX09WU1RTW25dKSBpcyBzZXQgdG8gMS4KKyAgKi8KKyNkZWZpbmUgRUFEQ19JU19TQU1QTEVfTU9EVUxFX09WKGVhZGMpICgoKGVhZGMpLT5TVEFUVVMyICYgRUFEQ19TVEFUVVMyX1NUT1ZGX01zaykgPj4gRUFEQ19TVEFUVVMyX1NUT1ZGX1BvcykKKworLyoqCisgICogQGJyaWVmIENoZWNrIGFsbCBBL0QgaW50ZXJydXB0IGZsYWcgb3ZlcnJ1biBiaXRzLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEByZXR2YWwgMCBOb25lIG9mIEFESU5UIGludGVycnVwdCBmbGFnIGlzIG92ZXJ3cml0dGVuIHRvIDEuCisgICogQHJldHZhbCAxIEFueSBvbmUgb2YgQURJTlQgaW50ZXJydXB0IGZsYWcgaXMgb3ZlcndyaXR0ZW4gdG8gMS4KKyAgKiBAZGV0YWlscyBUaGUgQURPVklGIGJpdCAoRUFEQ19TVEFUVVMyWzI0XSkgd2lsbCBrZWVwIDEgd2hlbiBhbnkgb25lIG9mIEFESU5UIGludGVycnVwdCBmbGFnIEFET1ZJRm4gKEVBRENfU1RBVFVTMlsxMTo4XSkgaXMgb3ZlcndyaXR0ZW4gdG8gMS4KKyAgKi8KKyNkZWZpbmUgRUFEQ19JU19JTlRfRkxBR19PVihlYWRjKSAoKChlYWRjKS0+U1RBVFVTMiAmIEVBRENfU1RBVFVTMl9BRE9WSUZfTXNrKSA+PiBFQURDX1NUQVRVUzJfQURPVklGX1BvcykKKworLyoqCisgICogQGJyaWVmIEdldCB0aGUgYnVzeSBzdGF0ZSBvZiBFQURDLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEByZXR2YWwgMCBJZGxlIHN0YXRlLgorICAqIEByZXR2YWwgMSBCdXN5IHN0YXRlLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIEJVU1kgYml0IChFQURDX1NUQVRVUzJbMjNdKSB0byBnZXQgYnVzeSBzdGF0ZS4KKyAgKi8KKyNkZWZpbmUgRUFEQ19JU19CVVNZKGVhZGMpICgoKGVhZGMpLT5TVEFUVVMyICYgRUFEQ19TVEFUVVMyX0JVU1lfTXNrKSA+PiBFQURDX1NUQVRVUzJfQlVTWV9Qb3MpCisKKy8qKgorICAqIEBicmllZiBDb25maWd1cmUgdGhlIGNvbXBhcmF0b3IgMCBhbmQgZW5hYmxlIGl0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIHNwZWNpZmllcyB0aGUgY29tcGFyZSBzYW1wbGUgbW9kdWxlLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE4LgorICAqIEBwYXJhbVtpbl0gdTMyQ29uZGl0aW9uIHNwZWNpZmllcyB0aGUgY29tcGFyZSBjb25kaXRpb24uIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DTVBfQ01QQ09ORF9MRVNTX1RIQU4gICAgICAgICAgICA6VGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJsZXNzIHRoYW4gdGhlIGNvbXBhcmUgdmFsdWUiCisgICogICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DTVBfQ01QQ09ORF9HUkVBVEVSX09SX0VRVUFMICAgICA6VGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNvbXBhcmUgdmFsdWUKKyAgKiBAcGFyYW1baW5dIHUxNkNNUERhdGEgc3BlY2lmaWVzIHRoZSBjb21wYXJlIHZhbHVlLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAwfjB4RkZGLgorICAqIEBwYXJhbVtpbl0gdTMyTWF0Y2hDb3VudCBzcGVjaWZpZXMgdGhlIG1hdGNoIGNvdW50IHNldHRpbmcsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDB+MHhGLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIEZvciBleGFtcGxlLCBBRENfRU5BQkxFX0NNUDAoRUFEQywgNSwgQURDX0FEQ01QUl9DTVBDT05EX0dSRUFURVJfT1JfRVFVQUwsIDB4ODAwLCAxMCwgRUFEQ19DTVBfQ01QV0VOX0RJU0FCTEUsIEVBRENfQ01QX0FEQ01QSUVfRU5BQkxFKTsKKyAgKiAgICAgICAgIE1lYW5zIEVBREMgd2lsbCBhc3NlcnQgY29tcGFyYXRvciAwIGZsYWcgaWYgc2FtcGxlIG1vZHVsZSA1IGNvbnZlcnNpb24gcmVzdWx0IGlzIGdyZWF0ZXIgb3IKKyAgKiAgICAgICAgIGVxdWFsIHRvIDB4ODAwIGZvciAxMCB0aW1lcyBjb250aW51b3VzbHksIGFuZCBhIGNvbXBhcmUgaW50ZXJydXB0IHJlcXVlc3QgaXMgZ2VuZXJhdGVkLgorICAqLworI2RlZmluZSBFQURDX0VOQUJMRV9DTVAwKGVhZGMsXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMk1vZHVsZU51bSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyQ29uZGl0aW9uLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MTZDTVBEYXRhLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzJNYXRjaENvdW50KSAoKGVhZGMpLT5DTVBbMF0gfD0oKCh1MzJNb2R1bGVOdW0pIDw8IEVBRENfQ01QX0NNUFNQTF9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJDb25kaXRpb24pIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUxNkNNUERhdGEpIDw8IEVBRENfQ01QX0NNUERBVF9Qb3MpfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1MzJNYXRjaENvdW50KSAtIDFVTCkgPDwgRUFEQ19DTVBfQ01QTUNOVF9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBRENfQ01QX0FEQ01QRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIENvbmZpZ3VyZSB0aGUgY29tcGFyYXRvciAxIGFuZCBlbmFibGUgaXQuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVOdW0gc3BlY2lmaWVzIHRoZSBjb21wYXJlIHNhbXBsZSBtb2R1bGUsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMTguCisgICogQHBhcmFtW2luXSB1MzJDb25kaXRpb24gc3BlY2lmaWVzIHRoZSBjb21wYXJlIGNvbmRpdGlvbi4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX0NNUF9DTVBDT05EX0xFU1NfVEhBTiAgICAgICAgICAgIDpUaGUgY29tcGFyZSBjb25kaXRpb24gaXMgImxlc3MgdGhhbiB0aGUgY29tcGFyZSB2YWx1ZSIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX0NNUF9DTVBDT05EX0dSRUFURVJfT1JfRVFVQUwgICAgIDpUaGUgY29tcGFyZSBjb25kaXRpb24gaXMgImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgY29tcGFyZSB2YWx1ZQorICAqIEBwYXJhbVtpbl0gdTE2Q01QRGF0YSBzcGVjaWZpZXMgdGhlIGNvbXBhcmUgdmFsdWUsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDB+MHhGRkYuCisgICogQHBhcmFtW2luXSB1MzJNYXRjaENvdW50IHNwZWNpZmllcyB0aGUgbWF0Y2ggY291bnQgc2V0dGluZywgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMH4weEYuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgRm9yIGV4YW1wbGUsIEFEQ19FTkFCTEVfQ01QMShFQURDLCA1LCBBRENfQURDTVBSX0NNUENPTkRfR1JFQVRFUl9PUl9FUVVBTCwgMHg4MDAsIDEwLCBFQURDX0NNUF9BRENNUElFX0VOQUJMRSk7CisgICogICAgICAgICBNZWFucyBFQURDIHdpbGwgYXNzZXJ0IGNvbXBhcmF0b3IgMSBmbGFnIGlmIHNhbXBsZSBtb2R1bGUgNSBjb252ZXJzaW9uIHJlc3VsdCBpcyBncmVhdGVyIG9yCisgICogICAgICAgICBlcXVhbCB0byAweDgwMCBmb3IgMTAgdGltZXMgY29udGludW91c2x5LCBhbmQgYSBjb21wYXJlIGludGVycnVwdCByZXF1ZXN0IGlzIGdlbmVyYXRlZC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfQ01QMShlYWRjLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzJNb2R1bGVOdW0sXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMkNvbmRpdGlvbixcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTE2Q01QRGF0YSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyTWF0Y2hDb3VudCkgKChlYWRjKS0+Q01QWzFdIHw9KCgodTMyTW9kdWxlTnVtKSA8PCBFQURDX0NNUF9DTVBTUExfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyQ29uZGl0aW9uKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1MTZDTVBEYXRhKSA8PCBFQURDX0NNUF9DTVBEQVRfUG9zKXwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodTMyTWF0Y2hDb3VudCkgLSAxVUwpIDw8IEVBRENfQ01QX0NNUE1DTlRfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQURDX0NNUF9BRENNUEVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBDb25maWd1cmUgdGhlIGNvbXBhcmF0b3IgMiBhbmQgZW5hYmxlIGl0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIHNwZWNpZmllcyB0aGUgY29tcGFyZSBzYW1wbGUgbW9kdWxlLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE4LgorICAqIEBwYXJhbVtpbl0gdTMyQ29uZGl0aW9uIHNwZWNpZmllcyB0aGUgY29tcGFyZSBjb25kaXRpb24uIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DTVBfQ01QQ09ORF9MRVNTX1RIQU4gICAgICAgICAgICA6VGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJsZXNzIHRoYW4gdGhlIGNvbXBhcmUgdmFsdWUiCisgICogICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19DTVBfQ01QQ09ORF9HUkVBVEVSX09SX0VRVUFMICAgICA6VGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzICJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNvbXBhcmUgdmFsdWUKKyAgKiBAcGFyYW1baW5dIHUxNkNNUERhdGEgc3BlY2lmaWVzIHRoZSBjb21wYXJlIHZhbHVlLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAwfjB4RkZGLgorICAqIEBwYXJhbVtpbl0gdTMyTWF0Y2hDb3VudCBzcGVjaWZpZXMgdGhlIG1hdGNoIGNvdW50IHNldHRpbmcsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDB+MHhGLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIEZvciBleGFtcGxlLCBBRENfRU5BQkxFX0NNUDIoRUFEQywgNSwgQURDX0FEQ01QUl9DTVBDT05EX0dSRUFURVJfT1JfRVFVQUwsIDB4ODAwLCAxMCwgRUFEQ19DTVBfQ01QV0VOX0RJU0FCTEUsIEVBRENfQ01QX0FEQ01QSUVfRU5BQkxFKTsKKyAgKiAgICAgICAgIE1lYW5zIEVBREMgd2lsbCBhc3NlcnQgY29tcGFyYXRvciAyIGZsYWcgaWYgc2FtcGxlIG1vZHVsZSA1IGNvbnZlcnNpb24gcmVzdWx0IGlzIGdyZWF0ZXIgb3IKKyAgKiAgICAgICAgIGVxdWFsIHRvIDB4ODAwIGZvciAxMCB0aW1lcyBjb250aW51b3VzbHksIGFuZCBhIGNvbXBhcmUgaW50ZXJydXB0IHJlcXVlc3QgaXMgZ2VuZXJhdGVkLgorICAqLworI2RlZmluZSBFQURDX0VOQUJMRV9DTVAyKGVhZGMsXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMk1vZHVsZU51bSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyQ29uZGl0aW9uLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MTZDTVBEYXRhLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzJNYXRjaENvdW50KSAoKGVhZGMpLT5DTVBbMl0gfD0oKCh1MzJNb2R1bGVOdW0pIDw8IEVBRENfQ01QX0NNUFNQTF9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJDb25kaXRpb24pIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUxNkNNUERhdGEpIDw8IEVBRENfQ01QX0NNUERBVF9Qb3MpfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1MzJNYXRjaENvdW50KSAtIDFVTCkgPDwgRUFEQ19DTVBfQ01QTUNOVF9Qb3MpfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBRENfQ01QX0FEQ01QRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIENvbmZpZ3VyZSB0aGUgY29tcGFyYXRvciAzIGFuZCBlbmFibGUgaXQuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVOdW0gc3BlY2lmaWVzIHRoZSBjb21wYXJlIHNhbXBsZSBtb2R1bGUsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMTguCisgICogQHBhcmFtW2luXSB1MzJDb25kaXRpb24gc3BlY2lmaWVzIHRoZSBjb21wYXJlIGNvbmRpdGlvbi4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX0NNUF9DTVBDT05EX0xFU1NfVEhBTiAgICAgICAgICAgIDpUaGUgY29tcGFyZSBjb25kaXRpb24gaXMgImxlc3MgdGhhbiB0aGUgY29tcGFyZSB2YWx1ZSIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX0NNUF9DTVBDT05EX0dSRUFURVJfT1JfRVFVQUwgICAgIDpUaGUgY29tcGFyZSBjb25kaXRpb24gaXMgImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgY29tcGFyZSB2YWx1ZQorICAqIEBwYXJhbVtpbl0gdTE2Q01QRGF0YSBzcGVjaWZpZXMgdGhlIGNvbXBhcmUgdmFsdWUsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDB+MHhGRkYuCisgICogQHBhcmFtW2luXSB1MzJNYXRjaENvdW50IHNwZWNpZmllcyB0aGUgbWF0Y2ggY291bnQgc2V0dGluZywgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMX4weEYuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgRm9yIGV4YW1wbGUsIEFEQ19FTkFCTEVfQ01QMyhFQURDLCA1LCBBRENfQURDTVBSX0NNUENPTkRfR1JFQVRFUl9PUl9FUVVBTCwgMHg4MDAsIDEwLCBFQURDX0NNUF9BRENNUElFX0VOQUJMRSk7CisgICogICAgICAgICBNZWFucyBFQURDIHdpbGwgYXNzZXJ0IGNvbXBhcmF0b3IgMyBmbGFnIGlmIHNhbXBsZSBtb2R1bGUgNSBjb252ZXJzaW9uIHJlc3VsdCBpcyBncmVhdGVyIG9yCisgICogICAgICAgICBlcXVhbCB0byAweDgwMCBmb3IgMTAgdGltZXMgY29udGludW91c2x5LCBhbmQgYSBjb21wYXJlIGludGVycnVwdCByZXF1ZXN0IGlzIGdlbmVyYXRlZC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfQ01QMyhlYWRjLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzJNb2R1bGVOdW0sXAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMkNvbmRpdGlvbixcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTE2Q01QRGF0YSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyTWF0Y2hDb3VudCkgKChlYWRjKS0+Q01QWzNdIHw9KCgodTMyTW9kdWxlTnVtKSA8PCBFQURDX0NNUF9DTVBTUExfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyQ29uZGl0aW9uKSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1MTZDTVBEYXRhKSA8PCBFQURDX0NNUF9DTVBEQVRfUG9zKXwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodTMyTWF0Y2hDb3VudCkgLSAxVUwpIDw8IEVBRENfQ01QX0NNUE1DTlRfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQURDX0NNUF9BRENNUEVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgdGhlIGNvbXBhcmUgd2luZG93IG1vZGUuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDTVAgU3BlY2lmaWVzIHRoZSBjb21wYXJlIHJlZ2lzdGVyLCB2YWxpZCB2YWx1ZSBhcmUgMCBhbmQgMi4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBBRENNUEYwIChFQURDX1NUQVRVUzJbNF0pIHdpbGwgYmUgc2V0IHdoZW4gYm90aCBFQURDX0NNUDAgYW5kIEVBRENfQ01QMSBjb21wYXJlZCBjb25kaXRpb24gbWF0Y2hlZC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfQ01QX1dJTkRPV19NT0RFKGVhZGMsIHUzMkNNUCkgKChlYWRjKS0+Q01QWyh1MzJDTVApXSB8PSBFQURDX0NNUF9DTVBXRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSB0aGUgY29tcGFyZSB3aW5kb3cgbW9kZS4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNNUCBTcGVjaWZpZXMgdGhlIGNvbXBhcmUgcmVnaXN0ZXIsIHZhbGlkIHZhbHVlIGFyZSAwIGFuZCAyLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIEFEQ01QRjIgKEVBRENfU1RBVFVTMls2XSkgd2lsbCBiZSBzZXQgd2hlbiBib3RoIEVBRENfQ01QMiBhbmQgRUFEQ19DTVAzIGNvbXBhcmVkIGNvbmRpdGlvbiBtYXRjaGVkLgorICAqLworI2RlZmluZSBFQURDX0RJU0FCTEVfQ01QX1dJTkRPV19NT0RFKGVhZGMsIHUzMkNNUCkgKChlYWRjKS0+Q01QWyh1MzJDTVApXSAmPSB+RUFEQ19DTVBfQ01QV0VOX01zaykKKworLyoqCisgICogQGJyaWVmIEVuYWJsZSB0aGUgY29tcGFyZSBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDTVAgU3BlY2lmaWVzIHRoZSBjb21wYXJlIHJlZ2lzdGVyLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDMuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gaXMgZW5hYmxlZCBhbmQgdGhlIGNvbXBhcmUgY29uZGl0aW9uIG1hdGNoZXMgdGhlIHNldHRpbmcgb2YgQ01QQ09ORCAoRUFEQ19DTVBuWzJdLCBuPTB+MykKKyAgKiAgICAgICAgIGFuZCBDTVBNQ05UIChFQURDX0NNUG5bMTE6OF0sIG49MH4zKSwgQURDTVBGbiAoRUFEQ19TVEFUVVMyWzc6NF0sIG49MH4zKSB3aWxsIGJlIGFzc2VydGVkLCBpbiB0aGUgbWVhbndoaWxlLAorICAqICAgICAgICAgaWYgQURDTVBJRSBpcyBzZXQgdG8gMSwgYSBjb21wYXJlIGludGVycnVwdCByZXF1ZXN0IGlzIGdlbmVyYXRlZC4KKyAgKi8KKyNkZWZpbmUgRUFEQ19FTkFCTEVfQ01QX0lOVChlYWRjLCB1MzJDTVApICgoZWFkYyktPkNNUFsodTMyQ01QKV0gfD0gRUFEQ19DTVBfQURDTVBJRV9Nc2spCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIHRoZSBjb21wYXJlIGludGVycnVwdC4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNNUCBTcGVjaWZpZXMgdGhlIGNvbXBhcmUgcmVnaXN0ZXIsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgY29tcGFyZSBpbnRlcnJ1cHQuCisgICovCisjZGVmaW5lIEVBRENfRElTQUJMRV9DTVBfSU5UKGVhZGMsIHUzMkNNUCkgKChlYWRjKS0+Q01QWyh1MzJDTVApXSAmPSB+RUFEQ19DTVBfQURDTVBJRV9Nc2spCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIGNvbXBhcmF0b3IgMC4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBjb21wYXJhdG9yIDAuCisgICovCisjZGVmaW5lIEVBRENfRElTQUJMRV9DTVAwKGVhZGMpICgoZWFkYyktPkNNUFswXSA9IDBVTCkKKworLyoqCisgICogQGJyaWVmIERpc2FibGUgY29tcGFyYXRvciAxLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIGNvbXBhcmF0b3IgMS4KKyAgKi8KKyNkZWZpbmUgRUFEQ19ESVNBQkxFX0NNUDEoZWFkYykgKChlYWRjKS0+Q01QWzFdID0gMFVMKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBjb21wYXJhdG9yIDIuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgY29tcGFyYXRvciAyLgorICAqLworI2RlZmluZSBFQURDX0RJU0FCTEVfQ01QMihlYWRjKSAoKGVhZGMpLT5DTVBbMl0gPSAwVUwpCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIGNvbXBhcmF0b3IgMy4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBjb21wYXJhdG9yIDMuCisgICovCisjZGVmaW5lIEVBRENfRElTQUJMRV9DTVAzKGVhZGMpICgoZWFkYyktPkNNUFszXSA9IDBVTCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVmaW5lIEVBREMgZnVuY3Rpb25zIHByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBFQURDX09wZW4oRUFEQ19UICplYWRjLCB1aW50MzJfdCB1MzJJbnB1dE1vZGUpOwordm9pZCBFQURDX0Nsb3NlKEVBRENfVCAqZWFkYyk7Cit2b2lkIEVBRENfQ29uZmlnU2FtcGxlTW9kdWxlKEVBRENfVCAqZWFkYywgdWludDMyX3QgdTMyTW9kdWxlTnVtLCB1aW50MzJfdCB1MzJUcmlnZ2VyU3JjLCB1aW50MzJfdCB1MzJDaGFubmVsKTsKK3ZvaWQgRUFEQ19TZXRUcmlnZ2VyRGVsYXlUaW1lKEVBRENfVCAqZWFkYywgdWludDMyX3QgdTMyTW9kdWxlTnVtLCB1aW50MzJfdCB1MzJUcmlnZ2VyRGVsYXlUaW1lLCB1aW50MzJfdCB1MzJEZWxheUNsb2NrRGl2aWRlcik7Cit2b2lkIEVBRENfU2V0RXh0ZW5kU2FtcGxlVGltZShFQURDX1QgKmVhZGMsIHVpbnQzMl90IHUzMk1vZHVsZU51bSwgdWludDMyX3QgdTMyRXh0ZW5kU2FtcGxlVGltZSk7CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUFEQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQURDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19FQURDX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9lYmkuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2ViaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMzQ4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9lYmkuaApAQCAtMCwwICsxLDM3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGViaS5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlKEVCSSkgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19FQklfSF9fCisjZGVmaW5lIF9fRUJJX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUJJX0RyaXZlciBFQkkgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUJJX0VYUE9SVEVEX0NPTlNUQU5UUyBFQkkgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE1pc2NlbGxhbmVvdXMgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFQklfQkFOSzBfQkFTRV9BRERSICAgICAweDYwMDAwMDAwVUwgLyohPCBFQkkgYmFuazAgYmFzZSBhZGRyZXNzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX0JBTksxX0JBU0VfQUREUiAgICAgMHg2MDEwMDAwMFVMIC8qITwgRUJJIGJhbmsxIGJhc2UgYWRkcmVzcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9CQU5LMl9CQVNFX0FERFIgICAgIDB4NjAyMDAwMDBVTCAvKiE8IEVCSSBiYW5rMiBiYXNlIGFkZHJlc3MgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfQkFOSzBfQkFTRV9BRERSX05TICAweDcwMDAwMDAwVUwgLyohPCBFQkkgYmFuazAgYmFzZSBhZGRyZXNzIGZvciBOb24tU2VjdXJlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX0JBTksxX0JBU0VfQUREUl9OUyAgMHg3MDEwMDAwMFVMIC8qITwgRUJJIGJhbmsxIGJhc2UgYWRkcmVzcyBmb3IgTm9uLVNlY3VyZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9CQU5LMl9CQVNFX0FERFJfTlMgIDB4NzAyMDAwMDBVTCAvKiE8IEVCSSBiYW5rMiBiYXNlIGFkZHJlc3MgZm9yIE5vbi1TZWN1cmUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfTUFYX1NJWkUgICAgICAgICAgICAweDAwMTAwMDAwVUwgLyohPCBNYXhpbXVtIEVCSSBzaXplIGZvciBlYWNoIGJhbmsgaXMgMSBNQiBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDb25zdGFudHMgZm9yIEVCSSBiYW5rIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRUJJX0JBTkswICAgICAgICAgICAgICAgMFVMICAgIC8qITwgRUJJIGJhbmsgMCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9CQU5LMSAgICAgICAgICAgICAgIDFVTCAgICAvKiE8IEVCSSBiYW5rIDEgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfQkFOSzIgICAgICAgICAgICAgICAyVUwgICAgLyohPCBFQkkgYmFuayAyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENvbnN0YW50cyBmb3IgRUJJIGRhdGEgYnVzIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFQklfQlVTV0lEVEhfOEJJVCAgICAgICA4VUwgICAvKiE8IEVCSSBidXMgd2lkdGggaXMgOC1iaXQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfQlVTV0lEVEhfMTZCSVQgICAgICAxNlVMICAvKiE8IEVCSSBidXMgd2lkdGggaXMgMTYtYml0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENvbnN0YW50cyBmb3IgRUJJIENTIEFjdGl2ZSBMZXZlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFQklfQ1NfQUNUSVZFX0xPVyAgICAgICAwVUwgICAgLyohPCBFQkkgQ1MgYWN0aXZlIGxldmVsIGlzIGxvdyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9DU19BQ1RJVkVfSElHSCAgICAgIDFVTCAgICAvKiE8IEVCSSBDUyBhY3RpdmUgbGV2ZWwgaXMgaGlnaCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBDb25zdGFudHMgZm9yIEVCSSBNQ0xLIGRpdmlkZXIgYW5kIFRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRUJJX01DTEtESVZfMSAgICAgICAgICAgMHgwVUwgLyohPCBFQkkgb3V0cHV0IGNsb2NrKE1DTEspIGlzIEhDTEsvMSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9NQ0xLRElWXzIgICAgICAgICAgIDB4MVVMIC8qITwgRUJJIG91dHB1dCBjbG9jayhNQ0xLKSBpcyBIQ0xLLzIgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfTUNMS0RJVl80ICAgICAgICAgICAweDJVTCAvKiE8IEVCSSBvdXRwdXQgY2xvY2soTUNMSykgaXMgSENMSy80IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX01DTEtESVZfOCAgICAgICAgICAgMHgzVUwgLyohPCBFQkkgb3V0cHV0IGNsb2NrKE1DTEspIGlzIEhDTEsvOCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9NQ0xLRElWXzE2ICAgICAgICAgIDB4NFVMIC8qITwgRUJJIG91dHB1dCBjbG9jayhNQ0xLKSBpcyBIQ0xLLzE2IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX01DTEtESVZfMzIgICAgICAgICAgMHg1VUwgLyohPCBFQkkgb3V0cHV0IGNsb2NrKE1DTEspIGlzIEhDTEsvMzIgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQklfTUNMS0RJVl82NCAgICAgICAgICAweDZVTCAvKiE8IEVCSSBvdXRwdXQgY2xvY2soTUNMSykgaXMgSENMSy82NCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9NQ0xLRElWXzEyOCAgICAgICAgIDB4N1VMIC8qITwgRUJJIG91dHB1dCBjbG9jayhNQ0xLKSBpcyBIQ0xLLzEyOCBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgRUJJX1RJTUlOR19GQVNURVNUICAgICAgMHgwVUwgLyohPCBFQkkgdGltaW5nIGlzIHRoZSBmYXN0ZXN0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX1RJTUlOR19WRVJZRkFTVCAgICAgMHgxVUwgLyohPCBFQkkgdGltaW5nIGlzIHZlcnkgZmFzdCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9USU1JTkdfRkFTVCAgICAgICAgIDB4MlVMIC8qITwgRUJJIHRpbWluZyBpcyBmYXN0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX1RJTUlOR19OT1JNQUwgICAgICAgMHgzVUwgLyohPCBFQkkgdGltaW5nIGlzIG5vcm1hbCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9USU1JTkdfU0xPVyAgICAgICAgIDB4NFVMIC8qITwgRUJJIHRpbWluZyBpcyBzbG93IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX1RJTUlOR19WRVJZU0xPVyAgICAgMHg1VUwgLyohPCBFQkkgdGltaW5nIGlzIHZlcnkgc2xvdyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9USU1JTkdfU0xPV0VTVCAgICAgIDB4NlVMIC8qITwgRUJJIHRpbWluZyBpcyB0aGUgc2xvd2VzdCBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgRUJJX09QTU9ERV9OT1JNQUwgICAgICAgMHgwVUwgICAgICAgICAgICAgICAgIC8qITwgRUJJIGJ1cyBvcGVyYXRlIGluIG5vcm1hbCBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUJJX09QTU9ERV9DQUNDRVNTICAgICAgKEVCSV9DVExfQ0FDQ0VTU19Nc2spIC8qITwgRUJJIGJ1cyBvcGVyYXRlIGluIENvbnRpbnVvdXMgRGF0YSBBY2Nlc3MgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVCSV9PUE1PREVfQURTRVBBUkFURSAgIChFQklfQ1RMX0FEU0VQRU5fTXNrKSAvKiE8IEVCSSBidXMgb3BlcmF0ZSBpbiBBRCBTZXBhcmF0ZSBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQklfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIEVCSV9FWFBPUlRFRF9GVU5DVElPTlMgRUJJIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCA4LWJpdCBkYXRhIG9uIEVCSSBiYW5rMAorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMC4KKyAgKgorICAqIEByZXR1cm4gICAgIDgtYml0IERhdGEKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIDgtYml0IGRhdGEgZnJvbSBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmswLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMF9SRUFEX0RBVEE4KGViaSwgdTMyQWRkcikgICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMF9CQVNFX0FERFI6RUJJX0JBTkswX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIDgtYml0IGRhdGEgdG8gRUJJIGJhbmswCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmswLgorICAqIEBwYXJhbVtpbl0gIHUzMkRhdGEgICAgIFNwZWNpZnkgZGF0YSB0byBiZSB3cml0dGVuLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHdyaXRlIDgtYml0IGRhdGEgdG8gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTBfV1JJVEVfREFUQTgoZWJpLCB1MzJBZGRyLCB1MzJEYXRhKSAgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzBfQkFTRV9BRERSOkVCSV9CQU5LMF9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpID0gKHUzMkRhdGEpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIDE2LWJpdCBkYXRhIG9uIEVCSSBiYW5rMAorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMC4KKyAgKgorICAqIEByZXR1cm4gICAgIDE2LWJpdCBEYXRhCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCAxNi1iaXQgZGF0YSBmcm9tIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazAuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkwX1JFQURfREFUQTE2KGViaSwgdTMyQWRkcikgICAgICAgICAgICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMF9CQVNFX0FERFI6RUJJX0JBTkswX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIDE2LWJpdCBkYXRhIHRvIEVCSSBiYW5rMAorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMC4KKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhICAgICBTcGVjaWZ5IGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB3cml0ZSAxNi1iaXQgZGF0YSB0byBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmswLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMF9XUklURV9EQVRBMTYoZWJpLCB1MzJBZGRyLCB1MzJEYXRhKSAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzBfQkFTRV9BRERSOkVCSV9CQU5LMF9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpID0gKHUzMkRhdGEpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIDMyLWJpdCBkYXRhIG9uIEVCSSBiYW5rMAorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMC4KKyAgKgorICAqIEByZXR1cm4gICAgIDMyLWJpdCBEYXRhCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCAzMi1iaXQgZGF0YSBmcm9tIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazAuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkwX1JFQURfREFUQTMyKGViaSwgdTMyQWRkcikgICAgICAgICAgICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzBfQkFTRV9BRERSOkVCSV9CQU5LMF9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSAzMi1iaXQgZGF0YSB0byBFQkkgYmFuazAKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazAuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YSAgICAgU3BlY2lmeSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gd3JpdGUgMzItYml0IGRhdGEgdG8gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTBfV1JJVEVfREFUQTMyKGViaSwgdTMyQWRkciwgdTMyRGF0YSkgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMF9CQVNFX0FERFI6RUJJX0JBTkswX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkgPSAodTMyRGF0YSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgOC1iaXQgZGF0YSBvbiBFQkkgYmFuazEKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazEuCisgICoKKyAgKiBAcmV0dXJuICAgICA4LWJpdCBEYXRhCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCA4LWJpdCBkYXRhIGZyb20gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTFfUkVBRF9EQVRBOChlYmksIHUzMkFkZHIpICAgICAgICAgICAgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzFfQkFTRV9BRERSOkVCSV9CQU5LMV9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSA4LWJpdCBkYXRhIHRvIEVCSSBiYW5rMQorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMS4KKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhICAgICBTcGVjaWZ5IGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB3cml0ZSA4LWJpdCBkYXRhIHRvIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazEuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkxX1dSSVRFX0RBVEE4KGViaSwgdTMyQWRkciwgdTMyRGF0YSkgICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksxX0JBU0VfQUREUjpFQklfQkFOSzFfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSA9ICh1MzJEYXRhKSkKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCAxNi1iaXQgZGF0YSBvbiBFQkkgYmFuazEKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazEuCisgICoKKyAgKiBAcmV0dXJuICAgICAxNi1iaXQgRGF0YQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgMTYtYml0IGRhdGEgZnJvbSBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmsxLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMV9SRUFEX0RBVEExNihlYmksIHUzMkFkZHIpICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzFfQkFTRV9BRERSOkVCSV9CQU5LMV9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSAxNi1iaXQgZGF0YSB0byBFQkkgYmFuazEKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazEuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YSAgICAgU3BlY2lmeSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gd3JpdGUgMTYtYml0IGRhdGEgdG8gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTFfV1JJVEVfREFUQTE2KGViaSwgdTMyQWRkciwgdTMyRGF0YSkgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksxX0JBU0VfQUREUjpFQklfQkFOSzFfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSA9ICh1MzJEYXRhKSkKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCAzMi1iaXQgZGF0YSBvbiBFQkkgYmFuazEKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazEuCisgICoKKyAgKiBAcmV0dXJuICAgICAzMi1iaXQgRGF0YQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgMzItYml0IGRhdGEgZnJvbSBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmsxLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMV9SRUFEX0RBVEEzMihlYmksIHUzMkFkZHIpICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksxX0JBU0VfQUREUjpFQklfQkFOSzFfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgMzItYml0IGRhdGEgdG8gRUJJIGJhbmsxCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsxLgorICAqIEBwYXJhbVtpbl0gIHUzMkRhdGEgICAgIFNwZWNpZnkgZGF0YSB0byBiZSB3cml0dGVuLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHdyaXRlIDMyLWJpdCBkYXRhIHRvIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazEuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkxX1dSSVRFX0RBVEEzMihlYmksIHUzMkFkZHIsIHUzMkRhdGEpICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzFfQkFTRV9BRERSOkVCSV9CQU5LMV9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpID0gKHUzMkRhdGEpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIDgtYml0IGRhdGEgb24gRUJJIGJhbmsyCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsyLgorICAqCisgICogQHJldHVybiAgICAgOC1iaXQgRGF0YQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgOC1iaXQgZGF0YSBmcm9tIHNwZWNpZnkgYWRkcmVzcyBvbiBFQkkgYmFuazIuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQkkyX1JFQURfREFUQTgoZWJpLCB1MzJBZGRyKSAgICAgICAgICAgICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksyX0JBU0VfQUREUjpFQklfQkFOSzJfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgOC1iaXQgZGF0YSB0byBFQkkgYmFuazIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazIuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YSAgICAgU3BlY2lmeSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gd3JpdGUgOC1iaXQgZGF0YSB0byBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmsyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMl9XUklURV9EQVRBOChlYmksIHUzMkFkZHIsIHUzMkRhdGEpICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgoKChlYmkpPT1FQklfUyk/IEVCSV9CQU5LMl9CQVNFX0FERFI6RUJJX0JBTksyX0JBU0VfQUREUl9OUykrKHUzMkFkZHIpKSkgPSAodTMyRGF0YSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgMTYtYml0IGRhdGEgb24gRUJJIGJhbmsyCisgICoKKyAgKiBAcGFyYW1baW5dICBlYmkgICAgICAgICBUaGUgcG9pbnRlciBvZiBFQkkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgIFRoZSBkYXRhIGFkZHJlc3Mgb24gRUJJIGJhbmsyLgorICAqCisgICogQHJldHVybiAgICAgMTYtYml0IERhdGEKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWFkIDE2LWJpdCBkYXRhIGZyb20gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMi4KKyAgKi8KKyNkZWZpbmUgRUJJMl9SRUFEX0RBVEExNihlYmksIHUzMkFkZHIpICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoKCgoZWJpKT09RUJJX1MpPyBFQklfQkFOSzJfQkFTRV9BRERSOkVCSV9CQU5LMl9CQVNFX0FERFJfTlMpKyh1MzJBZGRyKSkpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSAxNi1iaXQgZGF0YSB0byBFQkkgYmFuazIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazIuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YSAgICAgU3BlY2lmeSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gd3JpdGUgMTYtYml0IGRhdGEgdG8gc3BlY2lmeSBhZGRyZXNzIG9uIEVCSSBiYW5rMi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVCSTJfV1JJVEVfREFUQTE2KGViaSwgdTMyQWRkciwgdTMyRGF0YSkgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksyX0JBU0VfQUREUjpFQklfQkFOSzJfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSA9ICh1MzJEYXRhKSkKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCAzMi1iaXQgZGF0YSBvbiBFQkkgYmFuazIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQWRkciAgICAgVGhlIGRhdGEgYWRkcmVzcyBvbiBFQkkgYmFuazIuCisgICoKKyAgKiBAcmV0dXJuICAgICAzMi1iaXQgRGF0YQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHJlYWQgMzItYml0IGRhdGEgZnJvbSBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmsyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMl9SRUFEX0RBVEEzMihlYmksIHUzMkFkZHIpICAgICAgICAgICAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksyX0JBU0VfQUREUjpFQklfQkFOSzJfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSkKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIDMyLWJpdCBkYXRhIHRvIEVCSSBiYW5rMgorICAqCisgICogQHBhcmFtW2luXSAgZWJpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgRUJJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyICAgICBUaGUgZGF0YSBhZGRyZXNzIG9uIEVCSSBiYW5rMi4KKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhICAgICBTcGVjaWZ5IGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB3cml0ZSAzMi1iaXQgZGF0YSB0byBzcGVjaWZ5IGFkZHJlc3Mgb24gRUJJIGJhbmsyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJMl9XUklURV9EQVRBMzIoZWJpLCB1MzJBZGRyLCB1MzJEYXRhKSAgICAoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKCgoKGViaSk9PUVCSV9TKT8gRUJJX0JBTksyX0JBU0VfQUREUjpFQklfQkFOSzJfQkFTRV9BRERSX05TKSsodTMyQWRkcikpKSA9ICh1MzJEYXRhKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEVCSSBXcml0ZSBCdWZmZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gaW1wcm92ZSBFQkkgd3JpdGUgb3BlcmF0aW9uIGZvciBhbGwgRUJJIGJhbmtzLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJX0VOQUJMRV9XUklURV9CVUZGRVIoZWJpKSAgICAgICAgICAgICAgICAoKGViaSktPkNUTDAgfD0gRUJJX0NUTF9XQlVGRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIEVCSSBXcml0ZSBCdWZmZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGViaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIEVCSSBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBFQkkgd3JpdGUgYnVmZmVyIGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUJJX0RJU0FCTEVfV1JJVEVfQlVGRkVSKGViaSkgICAgICAgICAgICAgICAoKGViaSktPkNUTDAgJj0gfkVCSV9DVExfV0JVRkVOX01zaykKKwordm9pZCBFQklfT3Blbih1aW50MzJfdCB1MzJCYW5rLCB1aW50MzJfdCB1MzJEYXRhV2lkdGgsIHVpbnQzMl90IHUzMlRpbWluZ0NsYXNzLCB1aW50MzJfdCB1MzJCdXNNb2RlLCB1aW50MzJfdCB1MzJDU0FjdGl2ZUxldmVsKTsKK3ZvaWQgRUJJX0Nsb3NlKHVpbnQzMl90IHUzMkJhbmspOwordm9pZCBFQklfU2V0QnVzVGltaW5nKHVpbnQzMl90IHUzMkJhbmssIHVpbnQzMl90IHUzMlRpbWluZ0NvbmZpZywgdWludDMyX3QgdTMyTWNsa0Rpdik7CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUJJX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVCSV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fRUJJX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9lY2FwLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9lY2FwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1ZGFmZgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2VjYXAuaApAQCAtMCwwICsxLDQ1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGVjYXAuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgRW5IYW5jZWQgSW5wdXQgQ2FwdHVyZSBUaW1lcihFQ0FQKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0VDQVBfSF9fCisjZGVmaW5lIF9fRUNBUF9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUNBUF9Ecml2ZXIgRUNBUCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBFQ0FQX0VYUE9SVEVEX0NPTlNUQU5UUyBFQ0FQIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKworI2RlZmluZSBFQ0FQX0lDMCAgICAoMFVMKSAgICAvKiE8IEVDQVAgSUMwIFVuaXQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX0lDMSAgICAoMVVMKSAgICAvKiE8IEVDQVAgSUMxIFVuaXQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX0lDMiAgICAoMlVMKSAgICAvKiE8IEVDQVAgSUMyIFVuaXQgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFQ0FQIENUTDAgY29uc3RhbnQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8xICAgICAgICAgICAgKDBVTDw8RUNBUF9DVEwwX05GQ0xLU0VMX1BvcykgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgZGl2aWRlIGJ5IDEgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzIgICAgICAgICAgICAoMVVMPDxFQ0FQX0NUTDBfTkZDTEtTRUxfUG9zKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBkaXZpZGUgYnkgMiAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX05PSVNFX0ZJTFRFUl9DTEtESVZfNCAgICAgICAgICAgICgyVUw8PEVDQVBfQ1RMMF9ORkNMS1NFTF9Qb3MpICAgIC8qITwgTm9pc2UgZmlsdGVyIGNsb2NrIGRpdmlkZSBieSA0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl8xNiAgICAgICAgICAgKDNVTDw8RUNBUF9DVEwwX05GQ0xLU0VMX1BvcykgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgZGl2aWRlIGJ5IDE2IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzMyICAgICAgICAgICAoNFVMPDxFQ0FQX0NUTDBfTkZDTEtTRUxfUG9zKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBkaXZpZGUgYnkgMzIgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzY0ICAgICAgICAgICAoNVVMPDxFQ0FQX0NUTDBfTkZDTEtTRUxfUG9zKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBkaXZpZGUgYnkgNjQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworCisjZGVmaW5lIEVDQVBfQ0FQX0lOUFVUX1NSQ19GUk9NX0lDICAgICAgICAgICAgKDBVTCkgIC8qITwgQ0FQIGlucHV0IHNvdXJjZSBmcm9tIElDICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9DQVBfSU5QVVRfU1JDX0ZST01fQ0ggICAgICAgICAgICAoMlVMKSAgLyohPCBDQVAgaW5wdXQgc291cmNlIGZyb20gQ0ggb2YgUUVJICAgICAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIEVDQVBfRElTQUJMRV9DT01QQVJFICAgICAgICAgICAgICAgICAgKDBVTDw8RUNBUF9DVEwwX0NNUEVOX1BvcykgICAgLyohPCBJbnB1dCBjYXB0dXJlIGNvbXBhcmUgYW5kIHJlbG9hZCBmdW5jdGlvbiBkaXNhYmxlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9DT01QQVJFX0ZVTkNUSU9OICAgICAgICAgICAgICAgICAoMVVMPDxFQ0FQX0NUTDBfQ01QRU5fUG9zKSAgICAvKiE8IElucHV0IGNhcHR1cmUgY29tcGFyZSBmdW5jdGlvbiAgXGhpZGVpbml0aWFsaXplciAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRUNBUCBDVEwxIGNvbnN0YW50IGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFQ0FQX1JJU0lOR19FREdFICAgICAgICAgICAgICAgICAgICAgICAoMFVMPDxFQ0FQX0NUTDFfRURHRVNFTDBfUG9zKSAgIC8qITwgRUNBUCBjYXB0dXJlIHJpc2luZyBlZGdlIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfRkFMTElOR19FREdFICAgICAgICAgICAgICAgICAgICAgICgxVUw8PEVDQVBfQ1RMMV9FREdFU0VMMF9Qb3MpICAgLyohPCBFQ0FQIGNhcHR1cmUgZmFsbGluZyBlZGdlIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9SSVNJTkdfRkFMTElOR19FREdFICAgICAgICAgICAgICAgKDJVTDw8RUNBUF9DVEwxX0VER0VTRUwwX1BvcykgICAvKiE8IEVDQVAgY2FwdHVyZSBlaXRoZXIgcmlzaW5nIG9yIGZhbGxpbmcgZWRnZSBzZWxlY3Rpb24gICAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfMSAgICAgICAgICAgICgwVUw8PEVDQVBfQ1RMMV9DTEtTRUxfUG9zKSAgICAvKiE8IEVDQVAgY2FwdHVyZSB0aW1lciBjbG9jayBkaXZpZGUgYnkgMSAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl80ICAgICAgICAgICAgKDFVTDw8RUNBUF9DVEwxX0NMS1NFTF9Qb3MpICAgIC8qITwgRUNBUCBjYXB0dXJlIHRpbWVyIGNsb2NrIGRpdmlkZSBieSA0ICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLRElWXzE2ICAgICAgICAgICAoMlVMPDxFQ0FQX0NUTDFfQ0xLU0VMX1BvcykgICAgLyohPCBFQ0FQIGNhcHR1cmUgdGltZXIgY2xvY2sgZGl2aWRlIGJ5IDE2ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfMzIgICAgICAgICAgICgzVUw8PEVDQVBfQ1RMMV9DTEtTRUxfUG9zKSAgICAvKiE8IEVDQVAgY2FwdHVyZSB0aW1lciBjbG9jayBkaXZpZGUgYnkgMzIgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl82NCAgICAgICAgICAgKDRVTDw8RUNBUF9DVEwxX0NMS1NFTF9Qb3MpICAgIC8qITwgRUNBUCBjYXB0dXJlIHRpbWVyIGNsb2NrIGRpdmlkZSBieSA2NCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLRElWXzk2ICAgICAgICAgICAoNVVMPDxFQ0FQX0NUTDFfQ0xLU0VMX1BvcykgICAgLyohPCBFQ0FQIGNhcHR1cmUgdGltZXIgY2xvY2sgZGl2aWRlIGJ5IDk2ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfMTEyICAgICAgICAgICg2VUw8PEVDQVBfQ1RMMV9DTEtTRUxfUG9zKSAgICAvKiE8IEVDQVAgY2FwdHVyZSB0aW1lciBjbG9jayBkaXZpZGUgYnkgMTEyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl8xMjggICAgICAgICAgKDdVTDw8RUNBUF9DVEwxX0NMS1NFTF9Qb3MpICAgIC8qITwgRUNBUCBjYXB0dXJlIHRpbWVyIGNsb2NrIGRpdmlkZSBieSAxMjggXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtfU1JDX0NBUF9DTEsgICAgICgwVUw8PEVDQVBfQ1RMMV9DTlRTUkNTRUxfUG9zKSAgICAvKiE8IEVDQVAgY2FwdHVyZSB0aW1lci9jbG9jayBzb3VyY2UgZnJvbSBDQVBfQ0xLIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS19TUkNfQ0FQMCAgICAgICAgKDFVTDw8RUNBUF9DVEwxX0NOVFNSQ1NFTF9Qb3MpICAgIC8qITwgRUNBUCBjYXB0dXJlIHRpbWVyL2Nsb2NrIHNvdXJjZSBmcm9tIENBUDAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLX1NSQ19DQVAxICAgICAgICAoMlVMPDxFQ0FQX0NUTDFfQ05UU1JDU0VMX1BvcykgICAgLyohPCBFQ0FQIGNhcHR1cmUgdGltZXIvY2xvY2sgc291cmNlIGZyb20gQ0FQMSAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtfU1JDX0NBUDIgICAgICAgICgzVUw8PEVDQVBfQ1RMMV9DTlRTUkNTRUxfUG9zKSAgICAvKiE8IEVDQVAgY2FwdHVyZSB0aW1lci9jbG9jayBzb3VyY2UgZnJvbSBDQVAyICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQ0FQX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisvKiogQGFkZHRvZ3JvdXAgRUNBUF9FWFBPUlRFRF9GVU5DVElPTlMgRUNBUCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VsZWN0IG5vaXNlIGZpbHRlciBjbG9jayBwcmUtZGl2aWRlIG51bWJlcgorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJDbGtTZWwgVGhlIG5vaXNlIGZpbHRlciBjbG9jayBkaXZpZGUgbnVtYmVyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzEKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX05PSVNFX0ZJTFRFUl9DTEtESVZfMgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl80CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzE2CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzMyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzY0CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBub2lzZSBmaWx0ZXIgY29jay4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfU0VUX05PSVNFX0ZJTFRFUl9DTEtESVYoZWNhcCwgdTMyQ2xrU2VsKSAoKGVjYXApLT5DVEwwID0gKChlY2FwKS0+Q1RMMCAmIH5FQ0FQX0NUTDBfTkZDTEtTRUxfTXNrKXwodTMyQ2xrU2VsKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIG5vaXNlIGZpbHRlcgorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGRpc2FibGUgdGhlIG5vaXNlIGZpbHRlciBvZiBpbnB1dCBjYXB0dXJlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9OT0lTRV9GSUxURVJfRElTQUJMRShlY2FwKSAoKGVjYXApLT5DVEwwIHw9IEVDQVBfQ1RMMF9DQVBORkRJU19Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIG5vaXNlIGZpbHRlcgorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJDbGtTZWwgU2VsZWN0IG5vaXNlIGZpbHRlciBjbG9jayBkaXZpZGUgbnVtYmVyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzEKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX05PSVNFX0ZJTFRFUl9DTEtESVZfMgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfTk9JU0VfRklMVEVSX0NMS0RJVl80CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzE2CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzMyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9OT0lTRV9GSUxURVJfQ0xLRElWXzY0CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGVuYWJsZSB0aGUgbm9pc2UgZmlsdGVyIG9mIGlucHV0IGNhcHR1cmUgYW5kIHNldCBub2lzZSBmaWx0ZXIgY2xvY2sgZGl2aWRlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9OT0lTRV9GSUxURVJfRU5BQkxFKGVjYXAsIHUzMkNsa1NlbCkgKChlY2FwKS0+Q1RMMCA9ICgoZWNhcCktPkNUTDAgJiB+KEVDQVBfQ1RMMF9DQVBORkRJU19Nc2t8RUNBUF9DVEwwX05GQ0xLU0VMX01zaykpfCh1MzJDbGtTZWwpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBpbnB1dCBjaGFubmVsIHVuaXQKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyTWFzayAgIFRoZSBpbnB1dCBjaGFubmVsIG1hc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfSUMwRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX0lDMUVOX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9JQzJFTl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZW5hYmxlIHRoZSBpbnB1dCBjaGFubmVsX24gdG8gaW5wdXQgY2FwdHVyZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfRU5BQkxFX0lOUFVUX0NIQU5ORUwoZWNhcCwgdTMyTWFzaykgKChlY2FwKS0+Q1RMMCB8PSAodTMyTWFzaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBpbnB1dCBjaGFubmVsIHVuaXQKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyTWFzayAgVGhlIGlucHV0IGNoYW5uZWwgbWFzaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9JQzBFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfSUMxRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX0lDMkVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBkaXNhYmxlIHRoZSBpbnB1dCBjaGFubmVsX24gdG8gaW5wdXQgY2FwdHVyZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfRElTQUJMRV9JTlBVVF9DSEFOTkVMKGVjYXAsIHUzMk1hc2spICgoZWNhcCktPkNUTDAgJj0gfih1MzJNYXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZWxlY3QgaW5wdXQgY2hhbm5lbCBzb3VyY2UKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMySW5kZXggIFRoZSBpbnB1dCBjaGFubmVsIG51bWJlcgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfSUMwCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9JQzEKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0lDMgorICAqIEBwYXJhbVtpbl0gdTMyU3JjICAgIFRoZSBpbnB1dCBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NBUF9JTlBVVF9TUkNfRlJPTV9JQworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQX0lOUFVUX1NSQ19GUk9NX0NICisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNlbGVjdCB0aGUgaW5wdXQgc291cmNlIGZyb20gSUN4LCBDSHguCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX1NFTF9JTlBVVF9TUkMoZWNhcCwgdTMySW5kZXgsIHUzMlNyYykgKChlY2FwKS0+Q1RMMCA9ICgoZWNhcCktPkNUTDAgJiB+KEVDQVBfQ1RMMF9DQVBTRUwwX01zazw8KCh1MzJJbmRleCk8PDEpKSl8KCgodTMyU3JjKTw8RUNBUF9DVEwwX0NBUFNFTDBfUG9zKTw8KCh1MzJJbmRleCk8PDEpKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgaW5wdXQgY2hhbm5lbCBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyTWFzayAgVGhlIGlucHV0IGNoYW5uZWwgbWFzaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DQVBJRU4wX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DQVBJRU4xX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DQVBJRU4yX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBlbmFibGUgdGhlIGlucHV0IGNoYW5uZWxfbiBpbnRlcnJ1cHQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0VOQUJMRV9JTlQoZWNhcCwgdTMyTWFzaykgKChlY2FwKS0+Q1RMMCB8PSAodTMyTWFzaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBpbnB1dCBjaGFubmVsIGludGVycnVwdAorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJNYXNrICAgVGhlIGlucHV0IGNoYW5uZWwgbWFzaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfSUMwCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9JQzEKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0lDMgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBkaXNhYmxlIHRoZSBpbnB1dCBjaGFubmVsX24gaW50ZXJydXB0LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9ESVNBQkxFX0lOVChlY2FwLCB1MzJNYXNrKSAoKGVjYXApLT5DVEwwICY9IH4odTMyTWFzaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIGlucHV0IGNoYW5uZWwgb3ZlcmZsb3cgaW50ZXJydXB0CisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZW5hYmxlIHRoZSBpbnB1dCBjaGFubmVsIG92ZXJmbG93IGludGVycnVwdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfRU5BQkxFX09WRl9JTlQoZWNhcCkgKChlY2FwKS0+Q1RMMCB8PSBFQ0FQX0NUTDBfT1ZJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgaW5wdXQgY2hhbm5lbCBvdmVyZmxvdyBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBkaXNhYmxlIHRoZSBpbnB1dCBjaGFubmVsIG92ZXJmbG93IGludGVycnVwdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfRElTQUJMRV9PVkZfSU5UKGVjYXApICgoZWNhcCktPkNUTDAgJj0gfkVDQVBfQ1RMMF9PVklFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIGlucHV0IGNoYW5uZWwgY29tcGFyZS1tYXRjaCBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBlbmFibGUgdGhlIGlucHV0IGNoYW5uZWwgY29tcGFyZS1tYXRjaCBpbnRlcnJ1cHQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0VOQUJMRV9DTVBfTUFUQ0hfSU5UKGVjYXApICgoZWNhcCktPkNUTDAgfD0gRUNBUF9DVEwwX0NNUElFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBpbnB1dCBjaGFubmVsIGNvbXBhcmUtbWF0Y2ggaW50ZXJydXB0CisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZGlzYWJsZSB0aGUgaW5wdXQgY2hhbm5lbCBjb21wYXJlLW1hdGNoIGludGVycnVwdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfRElTQUJMRV9DTVBfTUFUQ0hfSU5UKGVjYXApICgoZWNhcCktPkNUTDAgJj0gfkVDQVBfQ1RMMF9DTVBJRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHN0YXJ0IGNhcHR1cmUgY291bnRlcgorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHN0YXJ0IGNhcHR1cmUgY291bnRlciB1cC1jb3VudGluZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfQ05UX1NUQVJUKGVjYXApICgoZWNhcCktPkNUTDAgfD0gRUNBUF9DVEwwX0NOVEVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzdG9wIGNhcHR1cmUgY291bnRlcgorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHN0b3AgY2FwdHVyZSBjb3VudGVyIHVwLWNvdW50aW5nLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9DTlRfU1RPUChlY2FwKSAoKGVjYXApLT5DVEwwICY9IH5FQ0FQX0NUTDBfQ05URU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBldmVudCB0byBjbGVhciBjYXB0dXJlIGNvdW50ZXIKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyRXZlbnQgVGhlIGlucHV0IGNoYW5uZWwgbnVtYmVyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX0NNUENMUkVOX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMV9DQVAwUkxERU5fTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwxX0NBUDFSTERFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDFfQ0FQMlJMREVOX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMV9PVlJMREVOX01zaworCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGVuYWJsZSBhbmQgc2VsZWN0IGNvbXBhcmUgb3IgY2FwdHVyZSBldmVudCB0aGF0IGNhbiBjbGVhciBjYXB0dXJlIGNvdW50ZXIuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX1NFVF9DTlRfQ0xFQVJfRVZFTlQoZWNhcCwgdTMyRXZlbnQpIGRveyBcCisgIGlmKCh1MzJFdmVudCkgJiBFQ0FQX0NUTDBfQ01QQ0xSRU5fTXNrKSBcCisgICAgKGVjYXApLT5DVEwwIHw9IEVDQVBfQ1RMMF9DTVBDTFJFTl9Nc2s7IFwKKyAgZWxzZSBcCisgICAgKGVjYXApLT5DVEwwICY9IH5FQ0FQX0NUTDBfQ01QQ0xSRU5fTXNrOyBcCisgIChlY2FwKS0+Q1RMMSA9ICgoZWNhcCktPkNUTDEgJn4weEYwMHVsKSB8ICgodTMyRXZlbnQpICYgMHhGMDApOyBcCisgIH13aGlsZSgwKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBjb21wYXJlIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgZW5hYmxlIHRoZSBjb21wYXJlIGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9FTkFCTEVfQ01QKGVjYXApICgoZWNhcCktPkNUTDAgfD0gRUNBUF9DVEwwX0NNUEVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIGNvbXBhcmUgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBkaXNhYmxlIHRoZSBjb21wYXJlIGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9ESVNBQkxFX0NNUChlY2FwKSAoKGVjYXApLT5DVEwwICY9IH5FQ0FQX0NUTDBfQ01QRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBpbnB1dCBjYXB0dXJlIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGVuYWJsZSBpbnB1dCBjYXB0dXJlIHRpbWVyL2NvdW50ZXIuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0VOQUJMRV9DTlQoZWNhcCkgKChlY2FwKS0+Q1RMMCB8PSBFQ0FQX0NUTDBfQ0FQRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgaW5wdXQgY2FwdHVyZSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBkaXNhYmxlIGlucHV0IGNhcHR1cmUgdGltZXIvY291bnRlci4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfRElTQUJMRV9DTlQoZWNhcCkgKChlY2FwKS0+Q1RMMCAmPSB+RUNBUF9DVEwwX0NBUEVOX01zaykKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZWxlY3QgaW5wdXQgY2hhbm5lbCBlZGdlIGRldGVjdGlvbgorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJJbmRleCAgVGhlIGlucHV0IGNoYW5uZWwgbnVtYmVyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9JQzAKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0lDMQorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfSUMyCisgICogQHBhcmFtW2luXSB1MzJFZGdlICAgVGhlIGlucHV0IHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfUklTSU5HX0VER0UKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0ZBTExJTkdfRURHRQorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfUklTSU5HX0ZBTExJTkdfRURHRQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZWxlY3QgaW5wdXQgY2FwdHVyZSBjYW4gZGV0ZWN0IGZhbGxpbmcgZWRnZSwgcmlzaW5nIGVkZ2Ugb3IgZWl0aGVyIHJpc2luZyBvciBmYWxsaW5nIGVkZ2UgY2hhbmdlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9TRUxfQ0FQVFVSRV9FREdFKGVjYXAsIHUzMkluZGV4LCB1MzJFZGdlKSAoKGVjYXApLT5DVEwxID0gKChlY2FwKS0+Q1RMMSAmIH4oRUNBUF9DVEwxX0VER0VTRUwwX01zazw8KCh1MzJJbmRleCk8PDEpKSl8KCh1MzJFZGdlKTw8KCh1MzJJbmRleCk8PDEpKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZWxlY3QgRUNBUCBjb3VudGVyIHJlbG9hZCB0cmlnZ2VyIHNvdXJjZQorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJUcmlnU3JjIFRoZSBpbnB1dCBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDFfQ0FQMFJMREVOX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMV9DQVAxUkxERU5fTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwxX0NBUDJSTERFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDFfT1ZSTERFTl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2VsZWN0IGNhcHR1cmUgY291bnRlciByZWxvYWQgdHJpZ2dlciBzb3VyY2UuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX1NFTF9SRUxPQURfVFJJR19TUkMoZWNhcCwgdTMyVHJpZ1NyYykgKChlY2FwKS0+Q1RMMSA9ICgoZWNhcCktPkNUTDEgJiB+MHhGMDApfCh1MzJUcmlnU3JjKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZWxlY3QgY2FwdHVyZSB0aW1lciBjbG9jayBkaXZpZGUuCisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcGFyYW1baW5dIHUzMkNsa2RpdiBUaGUgaW5wdXQgc291cmNlCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl8xCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl80CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl8xNgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfMzIKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLRElWXzY0CisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl85NgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtESVZfMTEyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS0RJVl8xMjgKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2VsZWN0IGNhcHR1cmUgdGltZXIgY2xvY2sgaGFzIGEgcHJlLWRpdmlkZXIgd2l0aCBlaWdodCBkaXZpZGVkIG9wdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfU0VMX1RJTUVSX0NMS19ESVYoZWNhcCwgdTMyQ2xrZGl2KSAoKGVjYXApLT5DVEwxID0gKChlY2FwKS0+Q1RMMSAmIH5FQ0FQX0NUTDFfQ0xLU0VMX01zayl8KHUzMkNsa2RpdikpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VsZWN0IGNhcHR1cmUgdGltZXIvY291bnRlciBjbG9jayBzb3VyY2UKKyAgKiBAcGFyYW1baW5dIGVjYXAgICAgICBTcGVjaWZ5IEVDQVAgcG9ydAorICAqIEBwYXJhbVtpbl0gdTMyQ2xrU3JjIFRoZSBpbnB1dCBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLX1NSQ19DQVBfQ0xLCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DQVBUVVJFX1RJTUVSX0NMS19TUkNfQ0FQMAorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ0FQVFVSRV9USU1FUl9DTEtfU1JDX0NBUDEKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NBUFRVUkVfVElNRVJfQ0xLX1NSQ19DQVAyCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNlbGVjdCBjYXB0dXJlIHRpbWVyL2Nsb2NrIGNsb2NrIHNvdXJjZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfU0VMX1RJTUVSX0NMS19TUkMoZWNhcCwgdTMyQ2xrU3JjKSAoKGVjYXApLT5DVEwxID0gKChlY2FwKS0+Q1RMMSAmIH5FQ0FQX0NUTDFfQ05UU1JDU0VMX01zayl8KHUzMkNsa1NyYykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gcmVhZCBpbnB1dCBjYXB0dXJlIHN0YXR1cworICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHJldHVybiBJbnB1dCBjYXB0dXJlIHN0YXR1cyBmbGFncworICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBnZXQgdGhlIGlucHV0IGNhcHR1cmUgaW50ZXJydXB0IHN0YXR1cy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfR0VUX0lOVF9TVEFUVVMoZWNhcCkgKChlY2FwKS0+U1RBVFVTKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCBpbnB1dCBjaGFubmVsIGludGVycnVwdCBmbGFnCisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgIFRoZSBpbnB1dCBjaGFubmVsIG1hc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX1NUQVRVU19DQVBURjBfTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9TVEFUVVNfQ0FQVEYxX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfU1RBVFVTX0NBUFRGMl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX1NUQVRVU19DQVBPVkZfTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9TVEFUVVNfQ0FQQ01QRl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgd3JpdGUgMSB0byBnZXQgdGhlIGlucHV0IGNoYW5uZWxfbiBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfR0VUX0NBUFRVUkVfRkxBRyhlY2FwLCB1MzJNYXNrKSAoKChlY2FwKS0+U1RBVFVTICYgKHUzMk1hc2spKT8xOjApCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgaW5wdXQgY2hhbm5lbCBpbnRlcnJ1cHQgZmxhZworICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJNYXNrICBUaGUgaW5wdXQgY2hhbm5lbCBtYXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9TVEFUVVNfQ0FQVEYwX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfU1RBVFVTX0NBUFRGMV9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX1NUQVRVU19DQVBURjJfTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9TVEFUVVNfQ0FQT1ZGX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfU1RBVFVTX0NBUENNUEZfTXNrCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHdyaXRlIDEgdG8gY2xlYXIgdGhlIGlucHV0IGNoYW5uZWxfbiBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEVDQVBfQ0xSX0NBUFRVUkVfRkxBRyhlY2FwLCB1MzJNYXNrKSAoKGVjYXApLT5TVEFUVVMgPSAodTMyTWFzaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IGlucHV0IGNhcHR1cmUgY291bnRlciB2YWx1ZQorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJWYWwgICAgQ291bnRlciB2YWx1ZQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgYSBjb3VudGVyIHZhbHVlIG9mIGlucHV0IGNhcHR1cmUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX1NFVF9DTlRfVkFMVUUoZWNhcCwgdTMyVmFsKSAoKGVjYXApLT5DTlQgPSAodTMyVmFsKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgaW5wdXQgY2FwdHVyZSBjb3VudGVyIHZhbHVlCisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcmV0dXJuIENhcHR1cmUgY291bnRlciB2YWx1ZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBnZXQgYSBjb3VudGVyIHZhbHVlIG9mIGlucHV0IGNhcHR1cmUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBFQ0FQX0dFVF9DTlRfVkFMVUUoZWNhcCkgKChlY2FwKS0+Q05UKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCBpbnB1dCBjYXB0dXJlIGNvdW50ZXIgaG9sZCB2YWx1ZQorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJJbmRleCAgVGhlIGlucHV0IGNoYW5uZWwgbnVtYmVyCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9JQzAKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0lDMQorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfSUMyCisgICogQHJldHVybiBDYXB0dXJlIGNvdW50ZXIgaG9sZCB2YWx1ZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBnZXQgYSBob2xkIHZhbHVlIG9mIGlucHV0IGNhcHR1cmUgY2hhbm5lbF9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9HRVRfQ05UX0hPTERfVkFMVUUoZWNhcCwgdTMySW5kZXgpICgqKF9fSU8gdWludDMyX3QgKikgKCYoKGVjYXApLT5ITEQwKSArICh1MzJJbmRleCkpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBpbnB1dCBjYXB0dXJlIGNvdW50ZXIgY29tcGFyZSB2YWx1ZQorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJWYWwgICAgSW5wdXQgY2FwdHVyZSBjb21wYXJlIHZhbHVlCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBhIGNvbXBhcmUgdmFsdWUgb2YgaW5wdXQgY2FwdHVyZSBjb3VudGVyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgRUNBUF9TRVRfQ05UX0NNUChlY2FwLCB1MzJWYWwpICgoZWNhcCktPkNOVENNUCA9ICh1MzJWYWwpKQorCit2b2lkIEVDQVBfT3BlbihFQ0FQX1QqIGVjYXAsIHVpbnQzMl90IHUzMkZ1bmNNYXNrKTsKK3ZvaWQgRUNBUF9DbG9zZShFQ0FQX1QqIGVjYXApOwordm9pZCBFQ0FQX0VuYWJsZUlOVChFQ0FQX1QqIGVjYXAsIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBFQ0FQX0Rpc2FibGVJTlQoRUNBUF9UKiBlY2FwLCB1aW50MzJfdCB1MzJNYXNrKTsKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUNBUF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQ0FQX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLypfX0VDQVBfSF9fKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZXB3bS5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZXB3bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZGFiNjkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9lcHdtLmgKQEAgLTAsMCArMSw2MjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBlcHdtLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBFUFdNIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRVBXTV9IX18KKyNkZWZpbmUgX19FUFdNX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRVBXTV9Ecml2ZXIgRVBXTSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBFUFdNX0VYUE9SVEVEX0NPTlNUQU5UUyBFUFdNIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKyNkZWZpbmUgRVBXTV9DSEFOTkVMX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgKDZVTCkgICAgICAvKiE8IEVQV00gY2hhbm5lbCBudW1iZXIgKi8KKyNkZWZpbmUgRVBXTV9DSF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVVMKSAgICAvKiE8IEVQV00gY2hhbm5lbCAwIG1hc2sgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0NIXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVUwpICAgIC8qITwgRVBXTSBjaGFubmVsIDEgbWFzayBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fQ0hfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVTCkgICAgLyohPCBFUFdNIGNoYW5uZWwgMiBtYXNrIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9DSF8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFVMKSAgICAvKiE8IEVQV00gY2hhbm5lbCAzIG1hc2sgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0NIXzRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFVMKSAgIC8qITwgRVBXTSBjaGFubmVsIDQgbWFzayBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fQ0hfNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVUwpICAgLyohPCBFUFdNIGNoYW5uZWwgNSBtYXNrIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENvdW50ZXIgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX1VQX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAoMFVMKSAgICAgIC8qITwgVXAgY291bnRlciB0eXBlICovCisjZGVmaW5lIEVQV01fRE9XTl9DT1VOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwpICAgICAgLyohPCBEb3duIGNvdW50ZXIgdHlwZSAqLworI2RlZmluZSBFUFdNX1VQX0RPV05fQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAoMlVMKSAgICAgIC8qITwgVXAtRG93biBjb3VudGVyIHR5cGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEFsaWduZWQgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX0VER0VfQUxJR05FRCAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAgIC8qITwgRVBXTSB3b3JraW5nIGluIGVkZ2UgYWxpZ25lZCB0eXBlKGRvd24gY291bnQpICovCisjZGVmaW5lIEVQV01fQ0VOVEVSX0FMSUdORUQgICAgICAgICAgICAgICAgICAgICAgICgyVUwpICAgICAgLyohPCBFUFdNIHdvcmtpbmcgaW4gY2VudGVyIGFsaWduZWQgdHlwZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgT3V0cHV0IExldmVsIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVQV01fT1VUUFVUX05PVEhJTkcgICAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgICAgLyohPCBFUFdNIG91dHB1dCBub3RoaW5nICovCisjZGVmaW5lIEVQV01fT1VUUFVUX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwpICAgICAgLyohPCBFUFdNIG91dHB1dCBsb3cgKi8KKyNkZWZpbmUgRVBXTV9PVVRQVVRfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVTCkgICAgICAvKiE8IEVQV00gb3V0cHV0IGhpZ2ggKi8KKyNkZWZpbmUgRVBXTV9PVVRQVVRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICAgKDNVTCkgICAgICAvKiE8IEVQV00gb3V0cHV0IHRvZ2dsZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgU3luY2hyb25vdXMgU3RhcnQgRnVuY3Rpb24gQ29udHJvbCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVQV01fU1NDVExfU1NSQ19FUFdNMCAgICAgICAgICAgICAgICAgICAgICgwVUw8PEVQV01fU1NDVExfU1NSQ19Qb3MpICAgIC8qITwgU3luY2hyb25vdXMgc3RhcnQgc291cmNlIGNvbWVzIGZyb20gRVBXTTAgKi8KKyNkZWZpbmUgRVBXTV9TU0NUTF9TU1JDX0VQV00xICAgICAgICAgICAgICAgICAgICAgKDFVTDw8RVBXTV9TU0NUTF9TU1JDX1BvcykgICAgLyohPCBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZXMgZnJvbSBFUFdNMSAgKi8KKyNkZWZpbmUgRVBXTV9TU0NUTF9TU1JDX0JQV00wICAgICAgICAgICAgICAgICAgICAgKDJVTDw8RVBXTV9TU0NUTF9TU1JDX1BvcykgICAgLyohPCBTeW5jaHJvbm91cyBzdGFydCBzb3VyY2UgY29tZXMgZnJvbSBCUFdNMCAqLworI2RlZmluZSBFUFdNX1NTQ1RMX1NTUkNfQlBXTTEgICAgICAgICAgICAgICAgICAgICAoM1VMPDxFUFdNX1NTQ1RMX1NTUkNfUG9zKSAgICAvKiE8IFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBjb21lcyBmcm9tIEJQV00xICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBUcmlnZ2VyIFNvdXJjZSBTZWxlY3QgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX0VWRU5fWkVSTyAgICAgICAgICAgICAgICAgICAgKDBVTCkgICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGV2ZW4gY2hhbm5lbCBtYXRjaGVzIHplcm8gcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX0VWRU5fUEVSSU9EICAgICAgICAgICAgICAgICAgKDFVTCkgICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGV2ZW4gY2hhbm5lbCBtYXRjaGVzIHBlcmlvZCBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfRVZFTl9aRVJPX1BFUklPRCAgICAgICAgICAgICAoMlVMKSAgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgZXZlbiBjaGFubmVsIG1hdGNoZXMgemVybyBvciBwZXJpb2QgcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX0VWRU5fQ09NUEFSRV9VUCAgICAgICAgICAgICAgKDNVTCkgICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGV2ZW4gY2hhbm5lbCBtYXRjaGVzIHVwIGNvdW50IHRvIGNvbXBhcmF0b3IgcG9pbnQgKi8KKyNkZWZpbmUgRVBXTV9UUkdfQURDX0VWRU5fQ09NUEFSRV9ET1dOICAgICAgICAgICAgKDRVTCkgICAgIC8qITwgRVBXTSB0cmlnZ2VyIEFEQyB3aGlsZSBjb3VudGVyIG9mIGV2ZW4gY2hhbm5lbCBtYXRjaGVzIGRvd24gY291bnQgdG8gY29tcGFyYXRvciBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfT0REX1pFUk8gICAgICAgICAgICAgICAgICAgICAoNVVMKSAgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2Ygb2RkIGNoYW5uZWwgbWF0Y2hlcyB6ZXJvIHBvaW50ICovCisjZGVmaW5lIEVQV01fVFJHX0FEQ19PRERfUEVSSU9EICAgICAgICAgICAgICAgICAgICg2VUwpICAgICAvKiE8IEVQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBvZGQgY2hhbm5lbCBtYXRjaGVzIHBlcmlvZCBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfT0REX1pFUk9fUEVSSU9EICAgICAgICAgICAgICAoN1VMKSAgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2Ygb2RkIGNoYW5uZWwgbWF0Y2hlcyB6ZXJvIG9yIHBlcmlvZCBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfT0REX0NPTVBBUkVfVVAgICAgICAgICAgICAgICAoOFVMKSAgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2Ygb2RkIGNoYW5uZWwgbWF0Y2hlcyB1cCBjb3VudCB0byBjb21wYXJhdG9yIHBvaW50ICovCisjZGVmaW5lIEVQV01fVFJHX0FEQ19PRERfQ09NUEFSRV9ET1dOICAgICAgICAgICAgICg5VUwpICAgICAvKiE8IEVQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBvZGQgY2hhbm5lbCBtYXRjaGVzIGRvd24gY291bnQgdG8gY29tcGFyYXRvciBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfQ0hfMF9GUkVFX0NNUF9VUCAgICAgICAgICAgICAoMTBVTCkgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgY2hhbm5lbCAwIG1hdGNoZXMgdXAgY291bnQgdG8gZnJlZSBjb21wYXJhdG9yIHBvaW50ICovCisjZGVmaW5lIEVQV01fVFJHX0FEQ19DSF8wX0ZSRUVfQ01QX0RPV04gICAgICAgICAgICgxMVVMKSAgICAvKiE8IEVQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBjaGFubmVsIDAgbWF0Y2hlcyBkb3duIGNvdW50IHRvIGZyZWUgY29tcGFyYXRvciBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfQ0hfMl9GUkVFX0NNUF9VUCAgICAgICAgICAgICAoMTJVTCkgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgY2hhbm5lbCAyIG1hdGNoZXMgdXAgY291bnQgdG8gZnJlZSBjb21wYXJhdG9yIHBvaW50ICovCisjZGVmaW5lIEVQV01fVFJHX0FEQ19DSF8yX0ZSRUVfQ01QX0RPV04gICAgICAgICAgICgxM1VMKSAgICAvKiE8IEVQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBjaGFubmVsIDIgbWF0Y2hlcyBkb3duIGNvdW50IHRvIGZyZWUgY29tcGFyYXRvciBwb2ludCAqLworI2RlZmluZSBFUFdNX1RSR19BRENfQ0hfNF9GUkVFX0NNUF9VUCAgICAgICAgICAgICAoMTRVTCkgICAgLyohPCBFUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgb2YgY2hhbm5lbCA0IG1hdGNoZXMgdXAgY291bnQgdG8gZnJlZSBjb21wYXJhdG9yIHBvaW50ICovCisjZGVmaW5lIEVQV01fVFJHX0FEQ19DSF80X0ZSRUVfQ01QX0RPV04gICAgICAgICAgICgxNVVMKSAgICAvKiE8IEVQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBvZiBjaGFubmVsIDQgbWF0Y2hlcyBkb3duIGNvdW50IHRvIGZyZWUgY29tcGFyYXRvciBwb2ludCAqLworCisjZGVmaW5lIEVQV01fVFJJR0dFUl9EQUNfWkVSTyAgICAgICAgICAgICAgICAgICAgICgweDFVTCkgICAgICAgICAgIC8qITwgRVBXTSB0cmlnZ2VyIERBQyB3aGlsZSBjb3VudGVyIGRvd24gY291bnQgdG8gMCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX1RSSUdHRVJfREFDX1BFUklPRCAgICAgICAgICAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAvKiE8IEVQV00gdHJpZ2dlciBEQUMgd2hpbGUgY291bnRlciBtYXRjaGVzIChQRVJJT0QgKyAxKSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fVFJJR0dFUl9EQUNfQ09NUEFSRV9VUCAgICAgICAgICAgICAgICgweDEwMDAwVUwpICAgICAgIC8qITwgRVBXTSB0cmlnZ2VyIERBQyB3aGlsZSBjb3VudGVyIHVwIGNvdW50IHRvIENNUERBVCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fVFJJR0dFUl9EQUNfQ09NUEFSRV9ET1dOICAgICAgICAgICAgICgweDEwMDAwMDBVTCkgICAgIC8qITwgRVBXTSB0cmlnZ2VyIERBQyB3aGlsZSBjb3VudGVyIGRvd24gY291bnQgdG8gQ01QREFUIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEZhaWwgYnJha2UgQ29udHJvbCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX0ZCX0VER0VfQUNNUDAgICAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfQ1BPMEVCRU5fTXNrKSAgICAvKiE8IENvbXBhcmF0b3IgMCBhcyBlZGdlLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgKi8KKyNkZWZpbmUgRVBXTV9GQl9FREdFX0FDTVAxICAgICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX0NQTzFFQkVOX01zaykgICAgLyohPCBDb21wYXJhdG9yIDEgYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfRURHRV9CS1AwICAgICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9CUktQMEVFTl9Nc2spICAgIC8qITwgQktQMCBwaW4gYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfRURHRV9CS1AxICAgICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9CUktQMUVFTl9Nc2spICAgIC8qITwgQktQMSBwaW4gYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfRURHRV9BRENSTSAgICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9FQURDRUJFTl9Nc2spICAgICAvKiE8IEFEQyBSZXN1bHQgTW9uaXRvciAoQURDUk0pIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0VER0VfU1lTX0NTUyAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfU1lTRUJFTl9Nc2sgfCBFUFdNX0ZBSUxCUktfQ1NTQlJLRU5fTXNrKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogY2xvY2sgc2VjdXJpdHkgc3lzdGVtIGRldGVjdGlvbiBhcyBlZGdlLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgKi8KKyNkZWZpbmUgRVBXTV9GQl9FREdFX1NZU19CT0QgICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX1NZU0VCRU5fTXNrIHwgRVBXTV9GQUlMQlJLX0JPREJSS0VOX01zaykgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IGJyb3duLW91dCBkZXRlY3Rpb24gYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfRURHRV9TWVNfUkFNICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9TWVNFQkVOX01zayB8IEVQV01fRkFJTEJSS19SQU1CUktFTl9Nc2spICAgIC8qITwgU3lzdGVtIGZhaWwgY29uZGl0aW9uOiBTUkFNIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfRURHRV9TWVNfQ09SICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9TWVNFQkVOX01zayB8IEVQV01fRkFJTEJSS19DT1JCUktFTl9Nc2spICAgIC8qITwgU3lzdGVtIGZhaWwgY29uZGl0aW9uOiBjb3JlIGxvY2t1cCBkZXRlY3Rpb24gYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisKKyNkZWZpbmUgRVBXTV9GQl9MRVZFTF9BQ01QMCAgICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX0NQTzBMQkVOX01zaykgICAgLyohPCBDb21wYXJhdG9yIDAgYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0xFVkVMX0FDTVAxICAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfQ1BPMUxCRU5fTXNrKSAgICAvKiE8IENvbXBhcmF0b3IgMSBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfTEVWRUxfQktQMCAgICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9CUktQMExFTl9Nc2spICAgIC8qITwgQktQMCBwaW4gYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0xFVkVMX0JLUDEgICAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfQlJLUDFMRU5fTXNrKSAgICAvKiE8IEJLUDEgcGluIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgKi8KKyNkZWZpbmUgRVBXTV9GQl9MRVZFTF9BRENSTSAgICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX0VBRENMQkVOX01zaykgICAgIC8qITwgQURDIFJlc3VsdCBNb25pdG9yIChBRENSTSkgYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworI2RlZmluZSBFUFdNX0ZCX0xFVkVMX1NZU19DU1MgICAgICAgICAgICAgICAgICAgICAoRVBXTV9CUktDVEwwXzFfU1lTTEJFTl9Nc2sgfCBFUFdNX0ZBSUxCUktfQ1NTQlJLRU5fTXNrKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogY2xvY2sgc2VjdXJpdHkgc3lzdGVtIGRldGVjdGlvbiBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfTEVWRUxfU1lTX0JPRCAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9TWVNMQkVOX01zayB8IEVQV01fRkFJTEJSS19CT0RCUktFTl9Nc2spICAgIC8qITwgU3lzdGVtIGZhaWwgY29uZGl0aW9uOiBicm93bi1vdXQgZGV0ZWN0aW9uIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgKi8KKyNkZWZpbmUgRVBXTV9GQl9MRVZFTF9TWVNfUkFNICAgICAgICAgICAgICAgICAgICAgKEVQV01fQlJLQ1RMMF8xX1NZU0xCRU5fTXNrIHwgRVBXTV9GQUlMQlJLX1JBTUJSS0VOX01zaykgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IFNSQU0gcGFyaXR5IGVycm9yIGRldGVjdGlvbiBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlICovCisjZGVmaW5lIEVQV01fRkJfTEVWRUxfU1lTX0NPUiAgICAgICAgICAgICAgICAgICAgIChFUFdNX0JSS0NUTDBfMV9TWVNMQkVOX01zayB8IEVQV01fRkFJTEJSS19DT1JCUktFTl9Nc2spICAgIC8qITwgU3lzdGVtIGZhaWwgY29uZGl0aW9uOiBjb3JlIGxvY2t1cCBkZXRlY3Rpb24gYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSAqLworCisjZGVmaW5lIEVQV01fRkJfRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgIC8qITwgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2UgKi8KKyNkZWZpbmUgRVBXTV9GQl9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDhVTCkgICAgLyohPCBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2UgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIExlYWRpbmcgRWRnZSBCbGFua2luZyBDb250cm9sIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX0xFQkNUTF9UUkdUWVBFX1JJU0lORyAgICAgICAgICAgICAgKDBVTDw8RVBXTV9MRUJDVExfVFJHVFlQRV9Qb3MpICAgIC8qITwgRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgVHJpZ2dlciBUeXBlIElzIFJpc2luZyBFZGdlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9MRUJDVExfVFJHVFlQRV9GQUxMSU5HICAgICAgICAgICAgICgxVUw8PEVQV01fTEVCQ1RMX1RSR1RZUEVfUG9zKSAgICAvKiE8IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFRyaWdnZXIgVHlwZSBJcyBGYWxsaW5nIEVkZ2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9UUkdUWVBFX1JJU0lOR19PUl9GQUxMSU5HICAgKDJVTDw8RVBXTV9MRUJDVExfVFJHVFlQRV9Qb3MpICAgIC8qITwgRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgVHJpZ2dlciBUeXBlIElzIFJpc2luZyBvciBGYWxsaW5nIEVkZ2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjAgICAgICAgICAgICAgICAgICAgICAgKEVQV01fTEVCQ1RMX1NSQ0VOMF9Nc2spICAgIC8qITwgRVBXTSBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgU291cmNlIEZyb20gRVBXTXhfQ0gwIEVuYWJsZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fTEVCQ1RMX1NSQ0VOMiAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9MRUJDVExfU1JDRU4yX01zaykgICAgLyohPCBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgRnJvbSBFUFdNeF9DSDIgRW5hYmxlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9MRUJDVExfU1JDRU40ICAgICAgICAgICAgICAgICAgICAgIChFUFdNX0xFQkNUTF9TUkNFTjRfTXNrKSAgICAvKiE8IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFNvdXJjZSBGcm9tIEVQV014X0NINCBFbmFibGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjBfMiAgICAgICAgICAgICAgICAgICAgKEVQV01fTEVCQ1RMX1NSQ0VOMF9Nc2t8RVBXTV9MRUJDVExfU1JDRU4yX01zaykgICAgLyohPCBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgRnJvbSBFUFdNeF9DSDAgYW5kIEVQV014X0NIMiBFbmFibGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjBfNCAgICAgICAgICAgICAgICAgICAgKEVQV01fTEVCQ1RMX1NSQ0VOMF9Nc2t8RVBXTV9MRUJDVExfU1JDRU40X01zaykgICAgLyohPCBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgRnJvbSBFUFdNeF9DSDAgYW5kIEVQV014X0NINCBFbmFibGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjJfNCAgICAgICAgICAgICAgICAgICAgKEVQV01fTEVCQ1RMX1NSQ0VOMl9Nc2t8RVBXTV9MRUJDVExfU1JDRU40X01zaykgICAgLyohPCBFUFdNIExlYWRpbmcgRWRnZSBCbGFua2luZyBTb3VyY2UgRnJvbSBFUFdNeF9DSDIgYW5kIEVQV014X0NINCBFbmFibGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0xFQkNUTF9TUkNFTjBfMl80ICAgICAgICAgICAgICAgICAgKEVQV01fTEVCQ1RMX1NSQ0VOMF9Nc2t8RVBXTV9MRUJDVExfU1JDRU4yX01za3xFUFdNX0xFQkNUTF9TUkNFTjRfTXNrKSAgICAvKiE8IEVQV00gTGVhZGluZyBFZGdlIEJsYW5raW5nIFNvdXJjZSBGcm9tIEVQV014X0NIMCwgRVBXTXhfQ0gyIGFuZCBFUFdNeF9DSDQgRW5hYmxlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENhcHR1cmUgQ29udHJvbCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX0NBUFRVUkVfSU5UX1JJU0lOR19MQVRDSCAgICAgICAgICAgICAoMVVMKSAgICAgICAgLyohPCBFUFdNIGNhcHR1cmUgaW50ZXJydXB0IGlmIGNoYW5uZWwgaGFzIHJpc2luZyB0cmFuc2l0aW9uICovCisjZGVmaW5lIEVQV01fQ0FQVFVSRV9JTlRfRkFMTElOR19MQVRDSCAgICAgICAgICAgICgweDEwMFVMKSAgICAvKiE8IEVQV00gY2FwdHVyZSBpbnRlcnJ1cHQgaWYgY2hhbm5lbCBoYXMgZmFsbGluZyB0cmFuc2l0aW9uICovCisKKyNkZWZpbmUgRVBXTV9DQVBUVVJFX1BETUFfUklTSU5HX0xBVENIICAgICAgICAgICAgKDB4MlVMKSAgICAgIC8qITwgRVBXTSBjYXB0dXJlIHJpc2luZyBsYXRjaGVkIGRhdGEgdHJhbnNmZXIgYnkgUERNQSAqLworI2RlZmluZSBFUFdNX0NBUFRVUkVfUERNQV9GQUxMSU5HX0xBVENIICAgICAgICAgICAoMHg0VUwpICAgICAgLyohPCBFUFdNIGNhcHR1cmUgZmFsbGluZyBsYXRjaGVkIGRhdGEgdHJhbnNmZXIgYnkgUERNQSAqLworI2RlZmluZSBFUFdNX0NBUFRVUkVfUERNQV9SSVNJTkdfRkFMTElOR19MQVRDSCAgICAoMHg2VUwpICAgICAgLyohPCBFUFdNIGNhcHR1cmUgcmlzaW5nIGFuZCBmYWxsaW5nIGxhdGNoZWQgZGF0YSB0cmFuc2ZlciBieSBQRE1BICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBEdXR5IEludGVycnVwdCBUeXBlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9EVVRZX0lOVF9ET1dOX0NPVU5UX01BVENIX0NNUCAgICAgICAgKEVQV01fSU5URU4wX0NNUERJRU4wX01zaykgICAvKiE8IEVQV00gZHV0eSBpbnRlcnJ1cHQgdHJpZ2dlcmVkIGlmIGRvd24gY291bnQgbWF0Y2ggY29tcGFyYXRvciAqLworI2RlZmluZSBFUFdNX0RVVFlfSU5UX1VQX0NPVU5UX01BVENIX0NNUCAgICAgICAgICAoRVBXTV9JTlRFTjBfQ01QVUlFTjBfTXNrKSAgIC8qITwgRVBXTSBkdXR5IGludGVycnVwdCB0cmlnZ2VyZWQgaWYgdXAgZG93biBtYXRjaCBjb21wYXJhdG9yICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBJbnRlcnJ1cHQgRmxhZyBBY2N1bXVsYXRvciBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9JRkFfWkVST19QT0lOVCAgICAgICAgICAgICAgICAgICgwVUwpICAgICAgICAgLyohPCBFUFdNIGNvdW50ZXIgZXF1YWwgdG8gemVybyAqLworI2RlZmluZSBFUFdNX0lGQV9QRVJJT0RfUE9JTlQgICAgICAgICAgICAgICAgKDFVTCkgICAgICAgICAvKiE8IEVQV00gY291bnRlciBlcXVhbCB0byBwZXJpb2QgKi8KKyNkZWZpbmUgRVBXTV9JRkFfQ09NUEFSRV9VUF9DT1VOVF9QT0lOVCAgICAgICgyVUwpICAgICAgICAgLyohPCBFUFdNIGNvdW50ZXIgdXAgY291bnQgdG8gY29tcGFyYXRvciB2YWx1ZSAqLworI2RlZmluZSBFUFdNX0lGQV9DT01QQVJFX0RPV05fQ09VTlRfUE9JTlQgICAgKDNVTCkgICAgICAgICAvKiE8IEVQV00gY291bnRlciBkb3duIGNvdW50IHRvIGNvbXBhcmF0b3IgdmFsdWUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIExvYWQgTW9kZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBFUFdNX0xPQURfTU9ERV9JTU1FRElBVEUgICAgICAgICAgICAgICAgICAoRVBXTV9DVEwwX0lNTUxERU4wX01zaykgICAgLyohPCBFUFdNIGltbWVkaWF0ZWx5IGxvYWQgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fTE9BRF9NT0RFX1dJTkRPVyAgICAgICAgICAgICAgICAgICAgIChFUFdNX0NUTDBfV0lOTERFTjBfTXNrKSAgICAvKiE8IEVQV00gd2luZG93IGxvYWQgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fTE9BRF9NT0RFX0NFTlRFUiAgICAgICAgICAgICAgICAgICAgIChFUFdNX0NUTDBfQ1RSTEQwX01zaykgICAgICAvKiE8IEVQV00gY2VudGVyIGxvYWQgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBTeW5jaHJvbml6ZSBDb250cm9sIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRVBXTV9TWU5DX09VVF9GUk9NX1NZTkNJTl9TV1NZTkMgICAgICAgICAgKDBVTCkgICAgLyohPCBTeW5jaHJvbml6ZSBzb3VyY2UgZnJvbSBTWU5DX0lOIG9yIFNXU1lOQyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX1NZTkNfT1VUX0ZST01fQ09VTlRfVE9fWkVSTyAgICAgICAgICAoMVVMKSAgICAvKiE8IFN5bmNocm9uaXplIHNvdXJjZSBmcm9tIGNvdW50ZXIgZXF1YWwgdG8gMCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX1NZTkNfT1VUX0ZST01fQ09VTlRfVE9fQ09NUEFSQVRPUiAgICAoMlVMKSAgICAvKiE8IFN5bmNocm9uaXplIHNvdXJjZSBmcm9tIGNvdW50ZXIgZXF1YWwgdG8gQ01QREFUMSwgQ01QREFUMywgQ01QREFUNSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fU1lOQ19PVVRfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICgzVUwpICAgIC8qITwgU1lOQ19PVVQgd2lsbCBub3QgYmUgZ2VuZXJhdGVkIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9QSFNfRElSX0RFQ1JFTUVOVCAgICAgICAgICAgICAgICAgICAgKDBVTCkgICAgLyohPCBFUFdNIGNvdW50ZXIgY291bnQgZGVjcmVtZW50ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fUEhTX0RJUl9JTkNSRU1FTlQgICAgICAgICAgICAgICAgICAgICgxVUwpICAgIC8qITwgRVBXTSBjb3VudGVyIGNvdW50IGluY3JlbWVudCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgTm9pc2UgRmlsdGVyIENsb2NrIERpdmlkZSBTZWxlY3QgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVQV01fTkZfQ0xLX0RJVl8xICAgICAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgIC8qITwgTm9pc2UgZmlsdGVyIGNsb2NrIGlzIEhDTEsgZGl2aWRlIGJ5IDEgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX05GX0NMS19ESVZfMiAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBpcyBIQ0xLIGRpdmlkZSBieSAyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9ORl9DTEtfRElWXzQgICAgICAgICAgICAgICAgICAgICAgICAgKDJVTCkgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgaXMgSENMSyBkaXZpZGUgYnkgNCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fTkZfQ0xLX0RJVl84ICAgICAgICAgICAgICAgICAgICAgICAgICgzVUwpICAgIC8qITwgTm9pc2UgZmlsdGVyIGNsb2NrIGlzIEhDTEsgZGl2aWRlIGJ5IDggXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX05GX0NMS19ESVZfMTYgICAgICAgICAgICAgICAgICAgICAgICAoNFVMKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBpcyBIQ0xLIGRpdmlkZSBieSAxNiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fTkZfQ0xLX0RJVl8zMiAgICAgICAgICAgICAgICAgICAgICAgICg1VUwpICAgIC8qITwgTm9pc2UgZmlsdGVyIGNsb2NrIGlzIEhDTEsgZGl2aWRlIGJ5IDMyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9ORl9DTEtfRElWXzY0ICAgICAgICAgICAgICAgICAgICAgICAgKDZVTCkgICAgLyohPCBOb2lzZSBmaWx0ZXIgY2xvY2sgaXMgSENMSyBkaXZpZGUgYnkgNjQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX05GX0NMS19ESVZfMTI4ICAgICAgICAgICAgICAgICAgICAgICAoN1VMKSAgICAvKiE8IE5vaXNlIGZpbHRlciBjbG9jayBpcyBIQ0xLIGRpdmlkZSBieSAxMjggXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQ2xvY2sgU291cmNlIFNlbGVjdCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEVQV01fQ0xLU1JDX0VQV01fQ0xLICAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgIC8qITwgRVBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBFUFdNMF9DTEsgb3IgRVBXTTFfQ0xLIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9DTEtTUkNfVElNRVIwICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCkgICAgLyohPCBFUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIFRJTUVSMCBvdmVyZmxvdyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEVQV01fQ0xLU1JDX1RJTUVSMSAgICAgICAgICAgICAgICAgICAgICAgICgyVUwpICAgIC8qITwgRVBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBUSU1FUjEgb3ZlcmZsb3cgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBFUFdNX0NMS1NSQ19USU1FUjIgICAgICAgICAgICAgICAgICAgICAgICAoM1VMKSAgICAvKiE8IEVQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gVElNRVIyIG92ZXJmbG93IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgRVBXTV9DTEtTUkNfVElNRVIzICAgICAgICAgICAgICAgICAgICAgICAgKDRVTCkgICAgLyohPCBFUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIFRJTUVSMyBvdmVyZmxvdyBcaGlkZWluaXRpYWxpemVyICovCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFUFdNX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBFUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyBFUFdNIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGUgY29tcGxlbWVudGFyeSBtb2RlCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIGNvbXBsZW1lbnRhcnkgbW9kZSBvZiBFUFdNIG1vZHVsZS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0VOQUJMRV9DT01QTEVNRU5UQVJZX01PREUoZXB3bSkgKChlcHdtKS0+Q1RMMSA9IChlcHdtKS0+Q1RMMSB8ICgweDd1bDw8RVBXTV9DVEwxX09VVE1PREUwX1BvcykpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZGlzYWJsZSBjb21wbGVtZW50YXJ5IG1vZGUsIGFuZCBlbmFibGUgaW5kZXBlbmRlbnQgbW9kZS4KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIGNvbXBsZW1lbnRhcnkgbW9kZSBvZiBFUFdNIG1vZHVsZS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0RJU0FCTEVfQ09NUExFTUVOVEFSWV9NT0RFKGVwd20pICgoZXB3bSktPkNUTDEgPSAoZXB3bSktPkNUTDEgJiB+KDB4N3VsPDxFUFdNX0NUTDFfT1VUTU9ERTBfUG9zKSkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBlbmFibGUgZ3JvdXAgbW9kZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBncm91cCBtb2RlIG9mIEVQV00gbW9kdWxlLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fRU5BQkxFX0dST1VQX01PREUoZXB3bSkgKChlcHdtKS0+Q1RMMCA9IChlcHdtKS0+Q1RMMCB8IEVQV01fQ1RMMF9HUk9VUEVOX01zaykKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBkaXNhYmxlIGdyb3VwIG1vZGUKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIGdyb3VwIG1vZGUgb2YgRVBXTSBtb2R1bGUuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9ESVNBQkxFX0dST1VQX01PREUoZXB3bSkgKChlcHdtKS0+Q1RMMCA9IChlcHdtKS0+Q1RMMCAmIH5FUFdNX0NUTDBfR1JPVVBFTl9Nc2spCisKKy8qKgorICogQGJyaWVmIEVuYWJsZSB0aW1lciBzeW5jaHJvbm91cyBzdGFydCBjb3VudGluZyBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMS4uLgorICogQHBhcmFtW2luXSB1MzJTeW5jU3JjIFN5bmNocm9ub3VzIHN0YXJ0IHNvdXJjZSBzZWxlY3Rpb24sIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fU1NDVExfU1NSQ19FUFdNMAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1NTQ1RMX1NTUkNfRVBXTTEKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9TU0NUTF9TU1JDX0JQV00wCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fU1NDVExfU1NSQ19CUFdNMQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIHRpbWVyIHN5bmNocm9ub3VzIHN0YXJ0IGNvdW50aW5nIGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fRU5BQkxFX1RJTUVSX1NZTkMoZXB3bSwgdTMyQ2hhbm5lbE1hc2ssIHUzMlN5bmNTcmMpICgoZXB3bSktPlNTQ1RMID0gKChlcHdtKS0+U1NDVEwgJiB+RVBXTV9TU0NUTF9TU1JDX01zaykgfCAodTMyU3luY1NyYykgfCAodTMyQ2hhbm5lbE1hc2spKQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIHRpbWVyIHN5bmNocm9ub3VzIHN0YXJ0IGNvdW50aW5nIGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgcmVwcmVzZW50cyBjaGFubmVsIDAsIGJpdCAxIHJlcHJlc2VudHMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIHRpbWVyIHN5bmNocm9ub3VzIHN0YXJ0IGNvdW50aW5nIGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBjaGFubmVsKHMpLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fRElTQUJMRV9USU1FUl9TWU5DKGVwd20sIHUzMkNoYW5uZWxNYXNrKSBcCisgICAgZG97IFwKKyAgICAgICAgaW50IGk7XAorICAgICAgICBmb3IoaSA9IDA7IGkgPCA2OyBpKyspIHsgXAorICAgICAgICAgICAgaWYoKHUzMkNoYW5uZWxNYXNrKSAmICgxVUwgPDwgaSkpIFwKKyAgICAgICAgICAgICAgeyBcCisgICAgICAgICAgICAgICAgKGVwd20pLT5TU0NUTCAmPSB+KDFVTCA8PCBpKTsgXAorICAgICAgICAgICAgICB9IFwKKyAgICAgICAgfSBcCisgICAgfXdoaWxlKDApCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlIEVQV00gY291bnRlciBzeW5jaHJvbm91cyBzdGFydCBjb3VudGluZyBmdW5jdGlvbi4KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBtYWtlIHNlbGVjdGVkIEVQV00wIGFuZCBFUFdNMSBjaGFubmVsKHMpIHN0YXJ0IGNvdW50aW5nIGF0IHRoZSBzYW1lIHRpbWUuCisgKiAgICAgICAgICBUbyBjb25maWd1cmUgc3luY2hyb25vdXMgc3RhcnQgY291bnRpbmcgY2hhbm5lbChzKSBieSBFUFdNX0VOQUJMRV9USU1FUl9TWU5DKCkgYW5kIEVQV01fRElTQUJMRV9USU1FUl9TWU5DKCkuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9UUklHR0VSX1NZTkNfU1RBUlQoZXB3bSkgKChlcHdtKS0+U1NUUkcgPSBFUFdNX1NTVFJHX0NOVFNFTl9Nc2spCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZW5hYmxlIG91dHB1dCBpbnZlcnRlciBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMS4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIG91dHB1dCBpbnZlcnRlciBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0VOQUJMRV9PVVRQVVRfSU5WRVJURVIoZXB3bSwgdTMyQ2hhbm5lbE1hc2spICgoZXB3bSktPlBPTENUTCA9ICh1MzJDaGFubmVsTWFzaykpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0IGNhcHR1cmVkIHJpc2luZyBkYXRhCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCBjYXB0dXJlZCByaXNpbmcgZGF0YSBvZiBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0dFVF9DQVBUVVJFX1JJU0lOR19EQVRBKGVwd20sIHUzMkNoYW5uZWxOdW0pICgoZXB3bSktPkNBUERBVFsodTMyQ2hhbm5lbE51bSldLlJDQVBEQVQpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gZ2V0IGNhcHR1cmVkIGZhbGxpbmcgZGF0YQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgY2FwdHVyZWQgZmFsbGluZyBkYXRhIG9mIHNwZWNpZmllZCBjaGFubmVsLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fR0VUX0NBUFRVUkVfRkFMTElOR19EQVRBKGVwd20sIHUzMkNoYW5uZWxOdW0pICgoZXB3bSktPkNBUERBVFsodTMyQ2hhbm5lbE51bSldLkZDQVBEQVQpCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gbWFzayBvdXRwdXQgbG9naWMgdG8gaGlnaCBvciBsb3cKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCByZXByZXNlbnRzIGNoYW5uZWwgMCwgYml0IDEgcmVwcmVzZW50cyBjaGFubmVsIDEuLi4KKyAqIEBwYXJhbVtpbl0gdTMyTGV2ZWxNYXNrIE91dHB1dCBsb2dpYyB0byBoaWdoIG9yIGxvdworICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbWFzayBvdXRwdXQgbG9naWMgdG8gaGlnaCBvciBsb3cgb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykuCisgSWYgdTMyQ2hhbm5lbE1hc2sgcGFyYW1ldGVyIGlzIDAsIHRoZW4gbWFzayBmdW5jdGlvbiB3aWxsIGJlIGRpc2FibGVkLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fTUFTS19PVVRQVVQoZXB3bSwgdTMyQ2hhbm5lbE1hc2ssIHUzMkxldmVsTWFzaykgXAorICAgIGRveyBcCisgICAgICAgIChlcHdtKS0+TVNLRU4gPSAodTMyQ2hhbm5lbE1hc2spOyBcCisgICAgICAgIChlcHdtKS0+TVNLID0gKHUzMkxldmVsTWFzayk7IFwKKyAgICB9d2hpbGUoMCkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBzZXQgdGhlIHByZXNjYWxlciBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMlByZXNjYWxlciBDbG9jayBwcmVzY2FsZXIgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwIH4gMHhGRkYKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgcHJlc2NhbGVyIG9mIHNwZWNpZmllZCBjaGFubmVsLgorIEV2ZXJ5IGV2ZW4gY2hhbm5lbCBOLCBhbmQgY2hhbm5lbCAoTiArIDEpIHNoYXJlIGEgcHJlc2NhbGVyLiBTbyBpZiBjaGFubmVsIDAgcHJlc2NhbGVyIGNoYW5nZWQsIGNoYW5uZWwgMSB3aWxsIGFsc28gYmUgYWZmZWN0ZWQuCisgKiAgICAgICBUaGUgY2xvY2sgb2YgRVBXTSBjb3VudGVyIGlzIGRpdmlkZWQgYnkgKHUzMlByZXNjYWxlciArIDEpLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fU0VUX1BSRVNDQUxFUihlcHdtLCB1MzJDaGFubmVsTnVtLCB1MzJQcmVzY2FsZXIpICgoZXB3bSktPkNMS1BTQ1sodTMyQ2hhbm5lbE51bSkgPj4gMV0gPSAodTMyUHJlc2NhbGVyKSkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXQgdGhlIHByZXNjYWxlciBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIFJldHVybiBDbG9jayBwcmVzY2FsZXIgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwIH4gMHhGRkYKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgdGhlIHByZXNjYWxlciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4KKyBFdmVyeSBldmVuIGNoYW5uZWwgTiwgYW5kIGNoYW5uZWwgKE4gKyAxKSBzaGFyZSBhIHByZXNjYWxlci4gU28gaWYgY2hhbm5lbCAwIHByZXNjYWxlciBjaGFuZ2VkLCBjaGFubmVsIDEgd2lsbCBhbHNvIGJlIGFmZmVjdGVkLgorICogICAgICAgVGhlIGNsb2NrIG9mIEVQV00gY291bnRlciBpcyBkaXZpZGVkIGJ5ICh1MzJQcmVzY2FsZXIgKyAxKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0dFVF9QUkVTQ0FMRVIoZXB3bSwgdTMyQ2hhbm5lbE51bSkgKChlcHdtKS0+Q0xLUFNDWyh1MzJDaGFubmVsTnVtKSA+PiAxVV0pCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gc2V0IHRoZSBjb21wYXJhdG9yIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyQ01SIENvbXBhcmF0b3Igb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjB4RkZGRgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IHRoZSBjb21wYXJhdG9yIG9mIHNwZWNpZmllZCBjaGFubmVsLgorIFRoaXMgbmV3IHNldHRpbmcgd2lsbCB0YWtlIGVmZmVjdCBvbiBuZXh0IEVQV00gcGVyaW9kLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fU0VUX0NNUihlcHdtLCB1MzJDaGFubmVsTnVtLCB1MzJDTVIpICgoZXB3bSktPkNNUERBVFsodTMyQ2hhbm5lbE51bSldPSAodTMyQ01SKSkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBnZXQgdGhlIGNvbXBhcmF0b3Igb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBSZXR1cm4gdGhlIGNvbXBhcmF0b3Igb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjB4RkZGRgorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCB0aGUgY29tcGFyYXRvciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX0dFVF9DTVIoZXB3bSwgdTMyQ2hhbm5lbE51bSkgKChlcHdtKS0+Q01QREFUWyh1MzJDaGFubmVsTnVtKV0pCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gc2V0IHRoZSBmcmVlIHRyaWdnZXIgY29tcGFyYXRvciBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkZUQ01SIEZyZWUgdHJpZ2dlciBjb21wYXJhdG9yIG9mIHNwZWNpZmllZCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH4weEZGRkYKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgZnJlZSB0cmlnZ2VyIGNvbXBhcmF0b3Igb2Ygc3BlY2lmaWVkIGNoYW5uZWwuCisgVGhpcyBuZXcgc2V0dGluZyB3aWxsIHRha2UgZWZmZWN0IG9uIG5leHQgRVBXTSBwZXJpb2QuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9TRVRfRlRDTVIoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyRlRDTVIpICgoKGVwd20pLT5GVENNUERBVFsoKHUzMkNoYW5uZWxOdW0pID4+IDFVKV0pID0gKHUzMkZUQ01SKSkKKworLyoqCisgKiBAYnJpZWYgVGhpcyBtYWNybyBzZXQgdGhlIHBlcmlvZCBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkNOUiBQZXJpb2Qgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjB4RkZGRgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IHRoZSBwZXJpb2Qgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuCisgVGhpcyBuZXcgc2V0dGluZyB3aWxsIHRha2UgZWZmZWN0IG9uIG5leHQgRVBXTSBwZXJpb2QuCisgRVBXTSBjb3VudGVyIHdpbGwgc3RvcCBpZiBwZXJpb2QgbGVuZ3RoIHNldCB0byAwLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fU0VUX0NOUihlcHdtLCB1MzJDaGFubmVsTnVtLCB1MzJDTlIpICAoKGVwd20pLT5QRVJJT0RbKHUzMkNoYW5uZWxOdW0pXSA9ICh1MzJDTlIpKQorCisvKioKKyAqIEBicmllZiBUaGlzIG1hY3JvIGdldCB0aGUgcGVyaW9kIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gUmV0dXJuIHRoZSBwZXJpb2Qgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjB4RkZGRgorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCB0aGUgcGVyaW9kIG9mIHNwZWNpZmllZCBjaGFubmVsLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fR0VUX0NOUihlcHdtLCB1MzJDaGFubmVsTnVtKSAgKChlcHdtKS0+UEVSSU9EWyh1MzJDaGFubmVsTnVtKV0pCisKKy8qKgorICogQGJyaWVmIFRoaXMgbWFjcm8gc2V0IHRoZSBFUFdNIGFsaWduZWQgdHlwZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMS4uLgorICogQHBhcmFtW2luXSB1MzJBbGlnbmVkVHlwZSBFUFdNIGFsaWduZWQgdHlwZSwgdmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9FREdFX0FMSUdORUQKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9DRU5URVJfQUxJR05FRAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IHRoZSBFUFdNIGFsaWduZWQgdHlwZSBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKS4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBFUFdNX1NFVF9BTElHTkVEX1RZUEUoZXB3bSwgdTMyQ2hhbm5lbE1hc2ssIHUzMkFsaWduZWRUeXBlKSBcCisgICBkb3sgXAorICAgICAgICB1aW50MzJfdCBpOyBcCisgICAgICAgIGZvcihpID0gMFVMOyBpIDwgNlVMOyBpKyspIHsgXAorICAgICAgICAgICAgaWYoKHUzMkNoYW5uZWxNYXNrKSAmICgxVUwgPDwgaSkpIFwKKyAgICAgICAgICAgICAgeyBcCisgICAgICAgICAgICAgICAgKGVwd20pLT5DVEwxID0gKCgoZXB3bSktPkNUTDEgJiB+KDNVTCA8PCAoaSA8PCAxKSkpIHwgKCh1MzJBbGlnbmVkVHlwZSkgPDwgKGkgPDwgMSkpKTsgXAorICAgICAgICAgICAgICB9IFwKKyAgICAgICAgfSBcCisgICAgfXdoaWxlKDApCisKKy8qKgorICogQGJyaWVmIFNldCBsb2FkIHdpbmRvdyBvZiB3aW5kb3cgbG9hZGluZyBtb2RlIGZvciBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMS4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IGxvYWQgd2luZG93IG9mIHdpbmRvdyBsb2FkaW5nIG1vZGUgZm9yIHNwZWNpZmllZCBjaGFubmVsKHMpLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fU0VUX0xPQURfV0lORE9XKGVwd20sIHUzMkNoYW5uZWxNYXNrKSAoKGVwd20pLT5MT0FEIHw9ICh1MzJDaGFubmVsTWFzaykpCisKKy8qKgorICogQGJyaWVmIFRyaWdnZXIgc3luY2hyb25vdXMgZXZlbnQgZnJvbSBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIDAsIDIsIDQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgcmVwcmVzZW50cyBjaGFubmVsIDAsIGJpdCAxIHJlcHJlc2VudHMgY2hhbm5lbCAyIGFuZCBiaXQgMiByZXByZXNlbnRzIGNoYW5uZWwgNAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdHJpZ2dlciBzeW5jaHJvbm91cyBldmVudCBmcm9tIHNwZWNpZmllZCBjaGFubmVsKHMpLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fVFJJR0dFUl9TWU5DKGVwd20sIHUzMkNoYW5uZWxOdW0pICgoZXB3bSktPlNXU1lOQyB8PSAoMVUgPDwgKCh1MzJDaGFubmVsTnVtKSA+PiAxKSkpCisKKy8qKgorICogQGJyaWVmIENsZWFyIGNvdW50ZXIgb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCByZXByZXNlbnRzIGNoYW5uZWwgMCwgYml0IDEgcmVwcmVzZW50cyBjaGFubmVsIDEuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIGNvdW50ZXIgb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9DTFJfQ09VTlRFUihlcHdtLCB1MzJDaGFubmVsTWFzaykgKChlcHdtKS0+Q05UQ0xSIHw9ICh1MzJDaGFubmVsTWFzaykpCisKKy8qKgorICogQGJyaWVmIFNldCBvdXRwdXQgbGV2ZWwgYXQgemVybywgY29tcGFyZSB1cCwgcGVyaW9kKGNlbnRlcikgYW5kIGNvbXBhcmUgZG93biBvZiBzcGVjaWZpZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIHJlcHJlc2VudHMgY2hhbm5lbCAwLCBiaXQgMSByZXByZXNlbnRzIGNoYW5uZWwgMS4uLgorICogQHBhcmFtW2luXSB1MzJaZXJvTGV2ZWwgb3V0cHV0IGxldmVsIGF0IHplcm8gcG9pbnQsIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX05PVEhJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfTE9XCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX0hJR0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfVE9HR0xFCisgKiBAcGFyYW1baW5dIHUzMkNtcFVwTGV2ZWwgb3V0cHV0IGxldmVsIGF0IGNvbXBhcmUgdXAgcG9pbnQsIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX05PVEhJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfTE9XCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX0hJR0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfVE9HR0xFCisgKiBAcGFyYW1baW5dIHUzMlBlcmlvZExldmVsIG91dHB1dCBsZXZlbCBhdCBwZXJpb2QoY2VudGVyKSBwb2ludCwgdmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfTk9USElORworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX09VVFBVVF9MT1cKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfSElHSAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX09VVFBVVF9UT0dHTEUKKyAqIEBwYXJhbVtpbl0gdTMyQ21wRG93bkxldmVsIG91dHB1dCBsZXZlbCBhdCBjb21wYXJlIGRvd24gcG9pbnQsIHZhbGlkIHZhbHVlcyBhcmU6CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX05PVEhJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfTE9XCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fT1VUUFVUX0hJR0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9PVVRQVVRfVE9HR0xFCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBTZXQgb3V0cHV0IGxldmVsIGF0IHplcm8sIGNvbXBhcmUgdXAsIHBlcmlvZChjZW50ZXIpIGFuZCBjb21wYXJlIGRvd24gb2Ygc3BlY2lmaWVkIGNoYW5uZWwocykuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgRVBXTV9TRVRfT1VUUFVUX0xFVkVMKGVwd20sIHUzMkNoYW5uZWxNYXNrLCB1MzJaZXJvTGV2ZWwsIHUzMkNtcFVwTGV2ZWwsIHUzMlBlcmlvZExldmVsLCB1MzJDbXBEb3duTGV2ZWwpIFwKKyAgIGRveyBcCisgICAgICAgIHVpbnQzMl90IGk7IFwKKyAgICAgICAgZm9yKGkgPSAwVUw7IGkgPCA2VUw7IGkrKykgeyBcCisgICAgICAgICAgICBpZigodTMyQ2hhbm5lbE1hc2spICYgKDFVTCA8PCBpKSkgeyBcCisgICAgICAgICAgICAgICAgKGVwd20pLT5XR0NUTDAgPSAoKChlcHdtKS0+V0dDVEwwICYgfigzVUwgPDwgKGkgPDwgMSkpKSB8ICgodTMyWmVyb0xldmVsKSA8PCAoaSA8PCAxKSkpOyBcCisgICAgICAgICAgICAgICAgKGVwd20pLT5XR0NUTDAgPSAoKChlcHdtKS0+V0dDVEwwICYgfigzVUwgPDwgKEVQV01fV0dDVEwwX1BSRFBDVEwwX1BvcyArIChpIDw8IDEpKSkpIHwgKCh1MzJQZXJpb2RMZXZlbCkgPDwgKEVQV01fV0dDVEwwX1BSRFBDVEwwX1BvcyArIChpIDw8IDEpKSkpOyBcCisgICAgICAgICAgICAgICAgKGVwd20pLT5XR0NUTDEgPSAoKChlcHdtKS0+V0dDVEwxICYgfigzVUwgPDwgKGkgPDwgMSkpKSB8ICgodTMyQ21wVXBMZXZlbCkgPDwgKGkgPDwgMSkpKTsgXAorICAgICAgICAgICAgICAgIChlcHdtKS0+V0dDVEwxID0gKCgoZXB3bSktPldHQ1RMMSAmIH4oM1VMIDw8IChFUFdNX1dHQ1RMMV9DTVBEQ1RMMF9Qb3MgKyAoaSA8PCAxKSkpKSB8ICgodTMyQ21wRG93bkxldmVsKSA8PCAoRVBXTV9XR0NUTDFfQ01QRENUTDBfUG9zICsgKGkgPDwgMSkpKSk7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9IFwKKyAgICB9d2hpbGUoMCkKKworLyoqCisgKiBAYnJpZWYgVHJpZ2dlciBicmFrZSBldmVudCBmcm9tIHNwZWNpZmllZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgcmVwcmVzZW50cyBjaGFubmVsIDAsIGJpdCAxIHJlcHJlc2VudHMgY2hhbm5lbCAyIGFuZCBiaXQgMiByZXByZXNlbnRzIGNoYW5uZWwgNAorICogQHBhcmFtW2luXSB1MzJCcmFrZVR5cGUgVHlwZSBvZiBicmFrZSB0cmlnZ2VyLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0VER0UKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9MRVZFTAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdHJpZ2dlciBicmFrZSBldmVudCBmcm9tIHNwZWNpZmllZCBjaGFubmVsKHMpLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fVFJJR0dFUl9CUkFLRShlcHdtLCB1MzJDaGFubmVsTWFzaywgdTMyQnJha2VUeXBlKSAoKGVwd20pLT5TV0JSSyB8PSAoKHUzMkNoYW5uZWxNYXNrKSA8PCAodTMyQnJha2VUeXBlKSkpCisKKy8qKgorICogQGJyaWVmIFNldCBEZWFkIHpvbmUgY2xvY2sgc291cmNlCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyQWZ0ZXJQcmVzY2FsZXIgRGVhZCB6b25lIGNsb2NrIHNvdXJjZSBpcyBmcm9tIHByZXNjYWxlciBvdXRwdXQuIFZhbGlkIHZhbHVlcyBhcmUgVFJVRSAoYWZ0ZXIgcHJlc2NhbGVyKSBvciBGQUxTRSAoYmVmb3JlIHByZXNjYWxlcikuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgRGVhZCB6b25lIGNsb2NrIHNvdXJjZS4gRXZlcnkgdHdvIGNoYW5uZWxzIHNoYXJlIHRoZSBzYW1lIHNldHRpbmcuCisgVGhlIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEVQV01fU0VUX0RFQURaT05FX0NMS19TUkMoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyQWZ0ZXJQcmVzY2FsZXIpIFwKKyAgICAoKChlcHdtKS0+RFRDVExbKHUzMkNoYW5uZWxOdW0pID4+IDFdKSA9ICgoZXB3bSktPkRUQ1RMWyh1MzJDaGFubmVsTnVtKSA+PiAxXSAmIH5FUFdNX0RUQ1RMMF8xX0RUQ0tTRUxfTXNrKSB8IFwKKyAgICAoKHUzMkFmdGVyUHJlc2NhbGVyKSA8PCBFUFdNX0RUQ1RMMF8xX0RUQ0tTRUxfUG9zKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVmaW5lIEVQV00gZnVuY3Rpb25zIHByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3VpbnQzMl90IEVQV01fQ29uZmlnQ2FwdHVyZUNoYW5uZWwoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJVbml0VGltZU5zZWMsIHVpbnQzMl90IHUzMkNhcHR1cmVFZGdlKTsKK3VpbnQzMl90IEVQV01fQ29uZmlnT3V0cHV0Q2hhbm5lbChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkZyZXF1ZW5jeSwgdWludDMyX3QgdTMyRHV0eUN5Y2xlKTsKK3ZvaWQgRVBXTV9TdGFydChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgRVBXTV9TdG9wKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBFUFdNX0ZvcmNlU3RvcChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgRVBXTV9FbmFibGVBRENUcmlnZ2VyKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ29uZGl0aW9uKTsKK3ZvaWQgRVBXTV9EaXNhYmxlQURDVHJpZ2dlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0NsZWFyQURDVHJpZ2dlckZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJDb25kaXRpb24pOwordWludDMyX3QgRVBXTV9HZXRBRENUcmlnZ2VyRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0VuYWJsZURBQ1RyaWdnZXIoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJDb25kaXRpb24pOwordm9pZCBFUFdNX0Rpc2FibGVEQUNUcmlnZ2VyKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fQ2xlYXJEQUNUcmlnZ2VyRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNvbmRpdGlvbik7Cit1aW50MzJfdCBFUFdNX0dldERBQ1RyaWdnZXJGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRW5hYmxlRmF1bHRCcmFrZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrLCB1aW50MzJfdCB1MzJMZXZlbE1hc2ssIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKTsKK3ZvaWQgRVBXTV9FbmFibGVDYXB0dXJlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBFUFdNX0Rpc2FibGVDYXB0dXJlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBFUFdNX0VuYWJsZU91dHB1dChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKTsKK3ZvaWQgRVBXTV9EaXNhYmxlT3V0cHV0KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBFUFdNX0VuYWJsZVBETUEoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJSaXNpbmdGaXJzdCwgdWludDMyX3QgdTMyTW9kZSk7Cit2b2lkIEVQV01fRGlzYWJsZVBETUEoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9FbmFibGVEZWFkWm9uZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkR1cmF0aW9uKTsKK3ZvaWQgRVBXTV9EaXNhYmxlRGVhZFpvbmUoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9FbmFibGVDYXB0dXJlSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyRWRnZSk7Cit2b2lkIEVQV01fRGlzYWJsZUNhcHR1cmVJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJFZGdlKTsKK3ZvaWQgRVBXTV9DbGVhckNhcHR1cmVJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyRWRnZSk7Cit1aW50MzJfdCBFUFdNX0dldENhcHR1cmVJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRW5hYmxlRHV0eUludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkludER1dHlUeXBlKTsKK3ZvaWQgRVBXTV9EaXNhYmxlRHV0eUludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0NsZWFyRHV0eUludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3VpbnQzMl90IEVQV01fR2V0RHV0eUludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9FbmFibGVGYXVsdEJyYWtlSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VTb3VyY2UpOwordm9pZCBFUFdNX0Rpc2FibGVGYXVsdEJyYWtlSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VTb3VyY2UpOwordm9pZCBFUFdNX0NsZWFyRmF1bHRCcmFrZUludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVNvdXJjZSk7Cit1aW50MzJfdCBFUFdNX0dldEZhdWx0QnJha2VJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VTb3VyY2UpOwordm9pZCBFUFdNX0VuYWJsZVBlcmlvZEludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sICB1aW50MzJfdCB1MzJJbnRQZXJpb2RUeXBlKTsKK3ZvaWQgRVBXTV9EaXNhYmxlUGVyaW9kSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fQ2xlYXJQZXJpb2RJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit1aW50MzJfdCBFUFdNX0dldFBlcmlvZEludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9FbmFibGVaZXJvSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRGlzYWJsZVplcm9JbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9DbGVhclplcm9JbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit1aW50MzJfdCBFUFdNX0dldFplcm9JbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRW5hYmxlQWNjKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMySW50RmxhZ0NudCwgdWludDMyX3QgdTMySW50QWNjU3JjKTsKK3ZvaWQgRVBXTV9EaXNhYmxlQWNjKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRW5hYmxlQWNjSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRGlzYWJsZUFjY0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0NsZWFyQWNjSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit1aW50MzJfdCBFUFdNX0dldEFjY0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0VuYWJsZUFjY1BETUEoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKTsKK3ZvaWQgRVBXTV9EaXNhYmxlQWNjUERNQShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordm9pZCBFUFdNX0NsZWFyRlREdXR5SW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOwordWludDMyX3QgRVBXTV9HZXRGVER1dHlJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fRW5hYmxlTG9hZE1vZGUoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJMb2FkTW9kZSk7Cit2b2lkIEVQV01fRGlzYWJsZUxvYWRNb2RlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyTG9hZE1vZGUpOwordm9pZCBFUFdNX0NvbmZpZ1N5bmNQaGFzZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMlN5bmNTcmMsIHVpbnQzMl90IHUzMkRpcmVjdGlvbiwgdWludDMyX3QgdTMyU3RhcnRQaGFzZSk7Cit2b2lkIEVQV01fRW5hYmxlU3luY1BoYXNlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spOwordm9pZCBFUFdNX0Rpc2FibGVTeW5jUGhhc2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzayk7Cit2b2lkIEVQV01fRW5hYmxlU3luY05vaXNlRmlsdGVyKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2xrQ250LCB1aW50MzJfdCB1MzJDbGtEaXZTZWwpOwordm9pZCBFUFdNX0Rpc2FibGVTeW5jTm9pc2VGaWx0ZXIoRVBXTV9UICplcHdtKTsKK3ZvaWQgRVBXTV9FbmFibGVTeW5jUGluSW52ZXJzZShFUFdNX1QgKmVwd20pOwordm9pZCBFUFdNX0Rpc2FibGVTeW5jUGluSW52ZXJzZShFUFdNX1QgKmVwd20pOwordm9pZCBFUFdNX1NldENsb2NrU291cmNlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ2xrU3JjU2VsKTsKK3ZvaWQgRVBXTV9FbmFibGVCcmFrZU5vaXNlRmlsdGVyKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VQaW5OdW0sIHVpbnQzMl90IHUzMkNsa0NudCwgdWludDMyX3QgdTMyQ2xrRGl2U2VsKTsKK3ZvaWQgRVBXTV9EaXNhYmxlQnJha2VOb2lzZUZpbHRlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlUGluTnVtKTsKK3ZvaWQgRVBXTV9FbmFibGVCcmFrZVBpbkludmVyc2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSk7Cit2b2lkIEVQV01fRGlzYWJsZUJyYWtlUGluSW52ZXJzZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlUGluTnVtKTsKK3ZvaWQgRVBXTV9TZXRCcmFrZVBpblNvdXJjZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlUGluTnVtLCB1aW50MzJfdCB1MzJTZWxBbm90aGVyTW9kdWxlKTsKK3ZvaWQgRVBXTV9TZXRMZWFkaW5nRWRnZUJsYW5raW5nKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyVHJpZ1NyY1NlbCwgdWludDMyX3QgdTMyVHJpZ1R5cGUsIHVpbnQzMl90IHUzMkJsYW5raW5nQ250LCB1aW50MzJfdCB1MzJCbGFua2luZ0VuYWJsZSk7Cit1aW50MzJfdCBFUFdNX0dldFdyYXBBcm91bmRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSk7Cit2b2lkIEVQV01fQ2xlYXJXcmFwQXJvdW5kRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVQV01fRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRVBXTV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fRVBXTV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZm1jLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9mbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWVlZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZm1jLmgKQEAgLTAsMCArMSw0OTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBmbWMuaAorICogQHZlcnNpb24gIFYzLjAKKyAqICRSZXZpc2lvbjogMiAkCisgKiAkRGF0ZTogMTYvMDcvMjkgMzoxMXAgJAorICogQGJyaWVmICAgIE0yMzUxIFNlcmllcyBGbGFzaCBNZW1vcnkgQ29udHJvbGxlcihGTUMpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0ZNQ19IX18KKyNkZWZpbmUgX19GTUNfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBGTUNfRHJpdmVyIEZNQyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBGTUNfRVhQT1JURURfQ09OU1RBTlRTIEZNQyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEdsb2JhbCBjb25zdGFudCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBJU0JFTiAgIDBVTAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBEZWZpbmUgQmFzZSBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEZNQ19BUFJPTV9CQVNFICAgICAgICAgIDB4MDAwMDAwMDBVTCAgICAvKiE8IEFQUk9NICBCYXNlIEFkZHJlc3MgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0FQUk9NX0VORCAgICAgICAgICAgMHgwMDA4MDAwMFVMICAgIC8qITwgQVBST00gZW5kIGFkZHJlc3MgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfQVBST01fQkFOSzBfRU5EICAgICAoRk1DX0FQUk9NX0VORC8yVUwpICAvKiE8IEFQUk9NIGJhbmswIGVuZCBhZGRyZXNzICovCisjZGVmaW5lIEZNQ19MRFJPTV9CQVNFICAgICAgICAgIDB4MDAxMDAwMDBVTCAgICAvKiE8IExEUk9NICBCYXNlIEFkZHJlc3MgICAgICAgICAgKi8KKyNkZWZpbmUgRk1DX0xEUk9NX0VORCAgICAgICAgICAgMHgwMDEwMTAwMFVMICAgIC8qITwgTERST00gZW5kIGFkZHJlc3MgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfWE9NX0JBU0UgICAgICAgICAgICAweDAwMjAwMDAwVUwgICAgLyohPCBYT00gIEJhc2UgQWRkcmVzcyAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19YT01SMF9CQVNFICAgICAgICAgIDB4MDAyMDAwMDBVTCAgICAvKiE8IFhPTVIgMCBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgRk1DX1hPTVIxX0JBU0UgICAgICAgICAgMHgwMDIwMDAxMFVMICAgIC8qITwgWE9NUiAxIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBGTUNfWE9NUjJfQkFTRSAgICAgICAgICAweDAwMjAwMDIwVUwgICAgLyohPCBYT01SIDIgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIEZNQ19YT01SM19CQVNFICAgICAgICAgIDB4MDAyMDAwMzBVTCAgICAvKiE8IFhPTVIgMyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgRk1DX05TQ0JBX0JBU0UgICAgICAgICAgMHgwMDIwMDgwMFVMICAgIC8qITwgTm9uLVNlY3VyZSBiYXNlIGFkZHJlc3MgICAgICAqLworI2RlZmluZSBGTUNfU0NSTE9DS19CQVNFICAgICAgICAweDAwMjAwODA0VUwgICAgLyohPCBTZWN1cmUgUmVnaW9uIExvY2sgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEZNQ19BUkxPQ0tfQkFTRSAgICAgICAgIDB4MDAyMTA4MDRVTCAgICAvKiE8IEFsbCBSZWdpb24gTG9jayBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRk1DX0NPTkZJR19CQVNFICAgICAgICAgMHgwMDMwMDAwMFVMICAgIC8qITwgQ09ORklHIEJhc2UgQWRkcmVzcyAgICAgICAgICAqLworI2RlZmluZSBGTUNfVVNFUl9DT05GSUdfMCAgICAgICAweDAwMzAwMDAwVUwgICAgLyohPCBDT05GSUcgMCBBZGRyZXNzICovCisjZGVmaW5lIEZNQ19VU0VSX0NPTkZJR18xICAgICAgIDB4MDAzMDAwMDRVTCAgICAvKiE8IENPTkZJRyAxIEFkZHJlc3MgKi8KKyNkZWZpbmUgRk1DX1VTRVJfQ09ORklHXzIgICAgICAgMHgwMDMwMDAwOFVMICAgIC8qITwgQ09ORklHIDIgQWRkcmVzcyAqLworI2RlZmluZSBGTUNfVVNFUl9DT05GSUdfMyAgICAgICAweDAwMzAwMDBDVUwgICAgLyohPCBDT05GSUcgMyBBZGRyZXNzICovCisjZGVmaW5lIEZNQ19PVFBfQkFTRSAgICAgICAgICAgIDB4MDAzMTAwMDBVTCAgICAvKiE8IE9UUCBmbGFzaCBiYXNlIGFkZHJlc3MgICAgICAgKi8KKyNkZWZpbmUgRk1DX0tQUk9NX0JBU0UgICAgICAgICAgMHgwMDMxMTAwMFVMICAgIC8qITwgU2VjdXJpdHkgUk9NIGJhc2UgYWRkcmVzcyAgICAqLworCisjZGVmaW5lIEZNQ19GTEFTSF9QQUdFX1NJWkUgICAgIDB4ODAwVUwgICAgICAgICAvKiE8IEZsYXNoIFBhZ2UgU2l6ZSAoMjA0OCBCeXRlcykgKi8KKyNkZWZpbmUgRk1DX1BBR0VfQUREUl9NQVNLICAgICAgMHhGRkZGRjgwMFVMICAgIC8qITwgRmxhc2ggcGFnZSBhZGRyZXNzIG1hc2sgICAgICAqLworI2RlZmluZSBGTUNfTVVMVElfV09SRF9QUk9HX0xFTiA1MTJVTCAgICAgICAgICAgLyohPCBUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBtdWx0aS13b3JkIHByb2dyYW0uICAqLworCisjZGVmaW5lIEZNQ19BUFJPTV9TSVpFICAgICAgICAgIEZNQ19BUFJPTV9FTkQgICAvKiE8IEFQUk9NIFNpemUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfQkFOS19TSVpFICAgICAgICAgICAoRk1DX0FQUk9NX1NJWkUvMlVMKSAvKiE8IEFQUk9NIEJhbmsgU2l6ZSAgICAgICAgICAgICAqLworI2RlZmluZSBGTUNfTERST01fU0laRSAgICAgICAgICAweDEwMDBVTCAgICAgICAgLyohPCBMRFJPTSBTaXplICg0IEtieXRlcykgICAgICAgKi8KKyNkZWZpbmUgRk1DX09UUF9FTlRSWV9DTlQgICAgICAgMjU2VUwgICAgICAgICAgIC8qITwgT1RQIGVudHJ5IG51bWJlciAgICAgICAgICAgICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBYT00gcmVnaW9uIG51bWJlciBjb25zdGFudCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgWE9NUjAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWE9NIHJlZ2lvbiAwICAgICAqLworI2RlZmluZSBYT01SMSAgIDFVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBYT00gcmVnaW9uIDEgICAgICovCisjZGVmaW5lIFhPTVIyICAgMlVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFhPTSByZWdpb24gMiAgICAgKi8KKyNkZWZpbmUgWE9NUjMgICAzVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWE9NIHJlZ2lvbiAzICAgICAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgSVNQQ1RMIGNvbnN0YW50IGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIElTX0JPT1RfRlJPTV9MRFJPTSAgICAgIDB4MVVMICAgICAvKiE8IElTUENUTCBzZXR0aW5nIHRvIHNlbGVjdCB0byBib290IGZyb20gTERST00gKi8KKyNkZWZpbmUgSVNfQk9PVF9GUk9NX0FQUk9NICAgICAgMHgwVUwgICAgIC8qITwgSVNQQ1RMIHNldHRpbmcgdG8gc2VsZWN0IHRvIGJvb3QgZnJvbSBBUFJPTSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgSVNQQ01EIGNvbnN0YW50IGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEZNQ19JU1BDTURfUkVBRCAgICAgICAgIDB4MDBVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogUmVhZCBGbGFzaCAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDTURfUkVBRF9VSUQgICAgIDB4MDRVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogUmVhZCBVbmlxdWUgSUQgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDTURfUkVBRF9BTEwxICAgIDB4MDhVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogUmVhZCBhbGwtb25lIHJlc3VsdCAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDTURfUkVBRF9DSUQgICAgIDB4MEJVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogUmVhZCBDb21wYW55IElEICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDTURfUkVBRF9ESUQgICAgIDB4MENVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogUmVhZCBEZXZpY2UgSUQgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDTURfUkVBRF9DS1MgICAgIDB4MERVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogUmVhZCBDaGVja3N1bSAgICAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDTURfUFJPR1JBTSAgICAgIDB4MjFVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogMzItYml0IFByb2dyYW0gRmxhc2ggICAgICovCisjZGVmaW5lIEZNQ19JU1BDTURfUEFHRV9FUkFTRSAgIDB4MjJVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogUGFnZSBFcmFzZSBGbGFzaCAgICAgICAgICovCisjZGVmaW5lIEZNQ19JU1BDTURfQkFOS19FUkFTRSAgIDB4MjNVTCAgICAgLyohPCBJU1AgQ29tbWFuZDogRXJhc2UgRmxhc2ggYmFuayAwIG9yIDEgKi8KKyNkZWZpbmUgRk1DX0lTUENNRF9CTE9DS19FUkFTRSAgMHgyNVVMICAgICAvKiE8IElTUCBDb21tYW5kOiBFcmFzZSA0IHBhZ2VzIGFsaWdubWVudCBvZiBBUFJPTSBpbiBiYW5rIDAgb3IgMSAgKi8KKyNkZWZpbmUgRk1DX0lTUENNRF9QUk9HUkFNX01VTCAgMHgyN1VMICAgICAvKiE8IElTUCBDb21tYW5kOiBGbGFzaCBNdWx0aS1Xb3JkIFByb2dyYW0gKi8KKyNkZWZpbmUgRk1DX0lTUENNRF9SVU5fQUxMMSAgICAgMHgyOFVMICAgICAvKiE8IElTUCBDb21tYW5kOiBSdW4gYWxsLW9uZSB2ZXJpZmljYXRpb24qLworI2RlZmluZSBGTUNfSVNQQ01EX1JVTl9DS1MgICAgICAweDJEVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IFJ1biBDaGVjayBDYWxjdWxhdGlvbiAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1ZFQ01BUCAgICAgICAweDJFVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IFNldCB2ZWN0b3IgbWFwcGluZyAgICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1JFQURfNjQgICAgICAweDQwVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IDY0LWJpdCByZWFkIEZsYXNoICAgICAqLworI2RlZmluZSBGTUNfSVNQQ01EX1BST0dSQU1fNjQgICAweDYxVUwgICAgIC8qITwgSVNQIENvbW1hbmQ6IDY0LWJpdCBwcm9ncmFtIEZsYXNoICAgICAqLworCisjZGVmaW5lIFJFQURfQUxMT05FX1lFUyAgICAgICAgIDB4QTExRkZGRkZVTCAgICAvKiE8IENoZWNrLWFsbC1vbmUgcmVzdWx0IGlzIGFsbCBvbmUuICAgICAqLworI2RlZmluZSBSRUFEX0FMTE9ORV9OT1QgICAgICAgICAweEExMTAwMDAwVUwgICAgLyohPCBDaGVjay1hbGwtb25lIHJlc3VsdCBpcyBub3QgYWxsIG9uZS4gKi8KKyNkZWZpbmUgUkVBRF9BTExPTkVfQ01EX0ZBSUwgICAgMHhGRkZGRkZGRlVMICAgIC8qITwgQ2hlY2stYWxsLW9uZSBjb21tYW5kIGZhaWxlZC4gICAgICAgICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRk1DX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisvKiogQGFkZHRvZ3JvdXAgRk1DX0VYUE9SVEVEX0ZVTkNUSU9OUyBGTUMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgRk1DIE1hY3JvIERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAqIEBicmllZiAgICAgIEVuYWJsZSBJU1AgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgSVNQRU4gYml0IG9mIElTUENUTCBjb250cm9sIHJlZ2lzdGVyIHRvIGVuYWJsZSBJU1AgZnVuY3Rpb24uCisgKgorICovCisjZGVmaW5lIEZNQ19FTkFCTEVfSVNQKCkgICAgICAgICAgKEZNQy0+SVNQQ1RMIHw9ICBGTUNfSVNQQ1RMX0lTUEVOX01zaykgIC8qITwgRW5hYmxlIElTUCBGdW5jdGlvbiAgKi8KKworLyoqCisgKiBAYnJpZWYgICAgICBEaXNhYmxlIElTUCBGdW5jdGlvbgorICoKKyAqIEBwYXJhbSAgICAgIE5vbmUKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIElTUEVOIGJpdCBvZiBJU1BDVEwgY29udHJvbCByZWdpc3RlciB0byBkaXNhYmxlIElTUCBmdW5jdGlvbi4KKyAqCisgKi8KKyNkZWZpbmUgRk1DX0RJU0FCTEVfSVNQKCkgICAgICAgICAoRk1DLT5JU1BDVEwgJj0gfkZNQ19JU1BDVExfSVNQRU5fTXNrKSAgLyohPCBEaXNhYmxlIElTUCBGdW5jdGlvbiAqLworCisvKioKKyAqIEBicmllZiAgICAgIEVuYWJsZSBMRFJPTSBVcGRhdGUgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgTERVRU4gYml0IG9mIElTUENUTCBjb250cm9sIHJlZ2lzdGVyIHRvIGVuYWJsZSBMRFJPTSB1cGRhdGUgZnVuY3Rpb24uCisgKiAgICAgICAgICAgICBVc2VyIG5lZWRzIHRvIHNldCBMRFVFTiBiaXQgYmVmb3JlIHRoZXkgY2FuIHVwZGF0ZSBMRFJPTS4KKyAqCisgKi8KKyNkZWZpbmUgRk1DX0VOQUJMRV9MRF9VUERBVEUoKSAgICAoRk1DLT5JU1BDVEwgfD0gIEZNQ19JU1BDVExfTERVRU5fTXNrKSAgLyohPCBFbmFibGUgTERST00gVXBkYXRlIEZ1bmN0aW9uICAgKi8KKworLyoqCisgKiBAYnJpZWYgICAgICBEaXNhYmxlIExEUk9NIFVwZGF0ZSBGdW5jdGlvbgorICoKKyAqIEBwYXJhbSAgICAgIE5vbmUKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCBJU1BFTiBiaXQgb2YgSVNQQ1RMIGNvbnRyb2wgcmVnaXN0ZXIgdG8gZGlzYWJsZSBMRFJPTSB1cGRhdGUgZnVuY3Rpb24uCisgKgorICovCisjZGVmaW5lIEZNQ19ESVNBQkxFX0xEX1VQREFURSgpICAgKEZNQy0+SVNQQ1RMICY9IH5GTUNfSVNQQ1RMX0xEVUVOX01zaykgIC8qITwgRGlzYWJsZSBMRFJPTSBVcGRhdGUgRnVuY3Rpb24gICovCisKKy8qKgorICogQGJyaWVmICAgICAgRW5hYmxlIFVzZXIgQ29uZmlndXJhdGlvbiBVcGRhdGUgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgQ0ZHVUVOIGJpdCBvZiBJU1BDVEwgY29udHJvbCByZWdpc3RlciB0byBlbmFibGUgVXNlciBDb25maWd1cmF0aW9uIHVwZGF0ZSBmdW5jdGlvbi4KKyAqICAgICAgICAgICAgIFVzZXIgbmVlZHMgdG8gc2V0IENGR1VFTiBiaXQgYmVmb3JlIHRoZXkgY2FuIHVwZGF0ZSBVc2VyIENvbmZpZ3VyYXRpb24gYXJlYS4KKyAqCisgKi8KKyNkZWZpbmUgRk1DX0VOQUJMRV9DRkdfVVBEQVRFKCkgICAoRk1DLT5JU1BDVEwgfD0gIEZNQ19JU1BDVExfQ0ZHVUVOX01zaykgLyohPCBFbmFibGUgQ09ORklHIFVwZGF0ZSBGdW5jdGlvbiAgKi8KKworLyoqCisgKiBAYnJpZWYgICAgICBEaXNhYmxlIFVzZXIgQ29uZmlndXJhdGlvbiBVcGRhdGUgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBDRkdVRU4gYml0IG9mIElTUENUTCBjb250cm9sIHJlZ2lzdGVyIHRvIGRpc2FibGUgVXNlciBDb25maWd1cmF0aW9uIHVwZGF0ZSBmdW5jdGlvbi4KKyAqCisgKi8KKyNkZWZpbmUgRk1DX0RJU0FCTEVfQ0ZHX1VQREFURSgpICAoRk1DLT5JU1BDVEwgJj0gfkZNQ19JU1BDVExfQ0ZHVUVOX01zaykgLyohPCBEaXNhYmxlIENPTkZJRyBVcGRhdGUgRnVuY3Rpb24gKi8KKworCisvKioKKyAqIEBicmllZiAgICAgIEVuYWJsZSBBUFJPTSBVcGRhdGUgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgQVBVRU4gYml0IG9mIElTUENUTCBjb250cm9sIHJlZ2lzdGVyIHRvIGVuYWJsZSBBUFJPTSB1cGRhdGUgZnVuY3Rpb24uCisgKiAgICAgICAgICAgICBVc2VyIG5lZWRzIHRvIHNldCBBUFVFTiBiaXQgYmVmb3JlIHRoZXkgY2FuIHVwZGF0ZSBBUFJPTSBpbiBBUFJPTSBib290IG1vZGUuCisgKgorICovCisjZGVmaW5lIEZNQ19FTkFCTEVfQVBfVVBEQVRFKCkgICAgKEZNQy0+SVNQQ1RMIHw9ICBGTUNfSVNQQ1RMX0FQVUVOX01zaykgIC8qITwgRW5hYmxlIEFQUk9NIFVwZGF0ZSBGdW5jdGlvbiAgICovCisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBBUFJPTSBVcGRhdGUgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBBUFVFTiBiaXQgb2YgSVNQQ1RMIGNvbnRyb2wgcmVnaXN0ZXIgdG8gZGlzYWJsZSBBUFJPTSB1cGRhdGUgZnVuY3Rpb24uCisgKgorICovCisjZGVmaW5lIEZNQ19ESVNBQkxFX0FQX1VQREFURSgpICAgKEZNQy0+SVNQQ1RMICY9IH5GTUNfSVNQQ1RMX0FQVUVOX01zaykgIC8qITwgRGlzYWJsZSBBUFJPTSBVcGRhdGUgRnVuY3Rpb24gICovCisKKy8qKgorICogQGJyaWVmICAgICAgU2V0IEJvb3QgZnJvbSBBUFJPTQorICoKKyAqIEBwYXJhbSAgICAgIE5vbmUKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyBzZWxlY3QgYm9vdGluZyBmcm9tIEFQUk9NLgorICoKKyAqLworI2RlZmluZSBGTUNfU0VUX0FQUk9NX0JPT1QoKSAgICAgICAgKEZNQy0+SVNQQ1RMICY9IH5GTUNfSVNQQ1RMX0JTX01zaykgICAgICAgICAvKiE8IFNlbGVjdCBib290aW5nIGZyb20gQVBST00gICovCisKKy8qKgorICogQGJyaWVmICAgICAgU2V0IEJvb3QgZnJvbSBMRFJPTQorICoKKyAqIEBwYXJhbSAgICAgIE5vbmUKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyBzZWxlY3QgYm9vdGluZyBmcm9tIExEUk9NLgorICoKKyAqLworI2RlZmluZSBGTUNfU0VUX0xEUk9NX0JPT1QoKSAgICAgICAgKEZNQy0+SVNQQ1RMIHw9IEZNQ19JU1BDVExfQlNfTXNrKSAgICAgICAgICAvKiE8IFNlbGVjdCBib290aW5nIGZyb20gTERST00gICovCisKKy8qKgorICogQGJyaWVmICAgICAgR2V0IElTUCBGYWlsIEZsYWcKKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgSVNQIGZhaWwgZmxhZyB3aGVuIGRvIElTUCBhY3RvaW4uCisgKgorICovCisjZGVmaW5lIEZNQ19HRVRfRkFJTF9GTEFHKCkgICAgICAgICAoKEZNQy0+SVNQQ1RMICYgRk1DX0lTUENUTF9JU1BGRl9Nc2spID8gMVVMIDogMFVMKSAgLyohPCBHZXQgSVNQIGZhaWwgZmxhZyAqLworCisvKioKKyAqIEBicmllZiAgICAgIENsZWFyIElTUCBGYWlsIEZsYWcKKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBJU1AgZmFpbCBmbGFnIHdoZW4gSVNQIGZhaWwgZmxhZyBzZXQuCisgKgorICovCisjZGVmaW5lIEZNQ19DTFJfRkFJTF9GTEFHKCkgICAgICAgICAoRk1DLT5JU1BDVEwgfD0gRk1DX0lTUENUTF9JU1BGRl9Nc2spICAgICAgIC8qITwgQ2xlYXIgSVNQIGZhaWwgZmxhZyAqLworCisvKioKKyAqIEBicmllZiAgICAgIEVuYWJsZSBJU1AgSW50ZXJydXB0CisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlIElTUCBhY3Rpb24gaW50ZXJydXB0LgorICoKKyAqLworI2RlZmluZSBGTUNfRU5BQkxFX0lTUF9JTlQoKSAgICAgKEZNQy0+SVNQQ1RMIHw9ICBGTUNfSVNQQ1RMX0lOVEVOX01zaykgLyohPCBFbmFibGUgSVNQIGludGVycnVwdCAqLworCisvKioKKyAqIEBicmllZiAgICAgIERpc2FibGUgSVNQIEludGVycnVwdAorICoKKyAqIEBwYXJhbSAgICAgIE5vbmUKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FibGUgSVNQIGFjdGlvbiBpbnRlcnJ1cHQuCisgKgorICovCisjZGVmaW5lIEZNQ19ESVNBQkxFX0lTUF9JTlQoKSAgICAgKEZNQy0+SVNQQ1RMICY9IH5GTUNfSVNQQ1RMX0lOVEVOX01zaykgLyohPCBEaXNhYmxlIElTUCBpbnRlcnJ1cHQgKi8KKworCisvKioKKyAqIEBicmllZiAgICAgIEdldCBJU1AgSW50ZXJydXB0IEZsYWcKKyAqCisgKiBAcGFyYW0gICAgICBOb25lCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgSVNQIGFjdGlvbiBpbnRlcnJ1cHQgc3RhdHVzCisgKgorICovCisjZGVmaW5lIEZNQ19HRVRfSVNQX0lOVF9GTEFHKCkgICAgICgoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lOVEZMQUdfTXNrKSA/IDFVTCA6IDBVTCkgLyohPCBHZXQgSVNQIGludGVycnVwdCBmbGFnIFN0YXR1cyAqLworCisKKy8qKgorICogQGJyaWVmICAgICAgQ2xlYXIgSVNQIEludGVycnVwdCBGbGFnCisgKgorICogQHBhcmFtICAgICAgTm9uZQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgSVNQIGludGVycnVwdCBmbGFnCisgKgorICovCisjZGVmaW5lIEZNQ19DTEVBUl9JU1BfSU5UX0ZMQUcoKSAgICAgKEZNQy0+SVNQU1RTID0gRk1DX0lTUFNUU19JTlRGTEFHX01zaykgLyohPCBDbGVhciBJU1AgaW50ZXJydXB0IGZsYWcqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBpbmxpbmUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgRk1DX1JlYWRDSUQodm9pZCk7CitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgRk1DX1JlYWRQSUQodm9pZCk7CitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgRk1DX1JlYWRVSUQodWludDhfdCB1OEluZGV4KTsKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBGTUNfUmVhZFVDSUQodWludDMyX3QgdTMySW5kZXgpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgRk1DX1NldFZlY3RvclBhZ2VBZGRyKHVpbnQzMl90IHUzMlBhZ2VBZGRyKTsKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBGTUNfR2V0VkVDTUFQKHZvaWQpOworCisKKy8qKgorICogQGJyaWVmICAgICAgIEdldCBjdXJyZW50IHZlY3RvciBtYXBwaW5nIGFkZHJlc3MuCisgKgorICogQHBhcmFtICAgICAgIE5vbmUKKyAqCisgKiBAcmV0dXJuICAgICAgVGhlIGN1cnJlbnQgdmVjdG9yIG1hcHBpbmcgYWRkcmVzcy4KKyAqCisgKiBAZGV0YWlscyAgICAgVG8gZ2V0IFZFQ01BUCB2YWx1ZSB3aGljaCBpcyB0aGUgcGFnZSBhZGRyZXNzIGZvciByZW1hcHBpbmcgdG8gdmVjdG9yIHBhZ2UgKDB4MCkuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgRk1DX0dldFZFQ01BUCh2b2lkKQoreworICAgIHJldHVybiAoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX1ZFQ01BUF9Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgUmVhZCBjb21wYW55IElECisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIFRoZSBjb21wYW55IElEICgzMi1iaXQpCisgICoKKyAgKiBAZGV0YWlscyAgVGhlIGNvbXBhbnkgSUQgb2YgTnV2b3RvbiBpcyBmaXhlZCB0byBiZSAweERBCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgRk1DX1JlYWRDSUQodm9pZCkKK3sKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUkVBRF9DSUQ7ICAgICAgICAgICAvKiBTZXQgSVNQIENvbW1hbmQgQ29kZSAqLworICAgIEZNQy0+SVNQQUREUiA9IDB4MHU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE11c3Qga2VlcCAweDAgd2hlbiByZWFkIENJRCAqLworICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7ICAgICAgICAgIC8qIFRyaWdnZXIgdG8gc3RhcnQgSVNQIHByb2NlZHVyZSAqLworI2lmIElTQkVOCisgICAgX19JU0IoKTsKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUbyBtYWtlIHN1cmUgSVNQL0NQVSBiZSBTeW5jaHJvbml6ZWQgKi8KKyAgICB3aGlsZShGTUMtPklTUFRSRyAmIEZNQ19JU1BUUkdfSVNQR09fTXNrKSB7fSAvKiBXYWl0aW5nIGZvciBJU1AgRG9uZSAqLworCisgICAgcmV0dXJuIEZNQy0+SVNQREFUOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgUmVhZCBwcm9kdWN0IElECisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIFRoZSBwcm9kdWN0IElEICgzMi1iaXQpCisgICoKKyAgKiBAZGV0YWlscyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgcHJvZHVjdCBJRC4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBGTUNfUmVhZFBJRCh2b2lkKQoreworICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9SRUFEX0RJRDsgICAgICAgICAgLyogU2V0IElTUCBDb21tYW5kIENvZGUgKi8KKyAgICBGTUMtPklTUEFERFIgPSAweDA0dTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE11c3Qga2VlcCAweDQgd2hlbiByZWFkIFBJRCAqLworICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7ICAgICAgICAgLyogVHJpZ2dlciB0byBzdGFydCBJU1AgcHJvY2VkdXJlICovCisjaWYgSVNCRU4KKyAgICBfX0lTQigpOworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG8gbWFrZSBzdXJlIElTUC9DUFUgYmUgU3luY2hyb25pemVkICovCisgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykge30gLyogV2FpdGluZyBmb3IgSVNQIERvbmUgKi8KKworICAgIHJldHVybiBGTUMtPklTUERBVDsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgUmVhZCBVbmlxdWUgSUQKKyAqCisgKiBAcGFyYW1baW5dICAgdThJbmRleCAgVUlEIGluZGV4LiAwID0gVUlEWzMxOjBdLCAxID0gVUlEWzYzOjMyXSwgMiA9IFVJRFs5NTo2NF0KKyAqCisgKiBAcmV0dXJuICAgICAgVGhlIDMyLWJpdCB1bmlxdWUgSUQgZGF0YSBvZiBzcGVjaWZpZWQgVUlEIGluZGV4LgorICoKKyAqIEBkZXRhaWxzICAgICBUbyByZWFkIG91dCA5Ni1iaXQgVW5pcXVlIElELgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgRk1DX1JlYWRVSUQodWludDhfdCB1OEluZGV4KQoreworICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9SRUFEX1VJRDsKKyAgICBGTUMtPklTUEFERFIgPSAoKHVpbnQzMl90KXU4SW5kZXggPDwgMnUpOworICAgIEZNQy0+SVNQREFUID0gMHU7CisgICAgRk1DLT5JU1BUUkcgPSAweDF1OworI2lmIElTQkVOCisgICAgX19JU0IoKTsKKyNlbmRpZgorICAgIHdoaWxlKEZNQy0+SVNQVFJHKSB7fQorCisgICAgcmV0dXJuIEZNQy0+SVNQREFUOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUbyByZWFkIFVDSUQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkluZGV4ICAgIEluZGV4IG9mIHRoZSBVQ0lEIHRvIHJlYWQuIHUzMkluZGV4IG11c3QgYmUgMCwgMSwgMiwgb3IgMy4KKyAgKgorICAqIEByZXR1cm4gICAgIFRoZSBVQ0lEIG9mIHNwZWNpZmllZCBpbmRleAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgdW5pcXVlIGNoaXAgSUQgKFVDSUQpLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IEZNQ19SZWFkVUNJRCh1aW50MzJfdCB1MzJJbmRleCkKK3sKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUkVBRF9VSUQ7ICAgICAgICAgICAgLyogU2V0IElTUCBDb21tYW5kIENvZGUgKi8KKyAgICBGTUMtPklTUEFERFIgPSAoMHgwNHUgKiB1MzJJbmRleCkgKyAweDEwdTsgICAgLyogVGhlIFVDSUQgaXMgYXQgb2Zmc2V0IDB4MTAgd2l0aCB3b3JkIGFsaWdubWVudC4gKi8KKyAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOyAgICAgICAgICAgLyogVHJpZ2dlciB0byBzdGFydCBJU1AgcHJvY2VkdXJlICovCisjaWYgSVNCRU4KKyAgICBfX0lTQigpOworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUbyBtYWtlIHN1cmUgSVNQL0NQVSBiZSBTeW5jaHJvbml6ZWQgKi8KKyAgICB3aGlsZShGTUMtPklTUFRSRyAmIEZNQ19JU1BUUkdfSVNQR09fTXNrKSB7fSAgLyogV2FpdGluZyBmb3IgSVNQIERvbmUgKi8KKworICAgIHJldHVybiBGTUMtPklTUERBVDsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IHZlY3RvciBtYXBwaW5nIGFkZHJlc3MKKyAqCisgKiBAcGFyYW1baW5dICAgdTMyUGFnZUFkZHIgIFRoZSBwYWdlIGFkZHJlc3MgdG8gcmVtYXAgdG8gYWRkcmVzcyAweDAuIFRoZSBhZGRyZXNzIG11c3QgYmUgcGFnZSBhbGlnbm1lbnQuCisgKgorICogQHJldHVybiAgICAgIFRvIHNldCBWRUNNQVAgdG8gcmVtYXAgc3BlY2lmaWVkIHBhZ2UgYWRkcmVzcyB0byAweDAuCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgVkVDTUFQIHRvIG1hcCBzcGVjaWZpZWQgcGFnZSB0byB2ZWN0b3IgcGFnZSAoMHgwKS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgRk1DX1NldFZlY3RvclBhZ2VBZGRyKHVpbnQzMl90IHUzMlBhZ2VBZGRyKQoreworICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9WRUNNQVA7ICAvKiBTZXQgSVNQIENvbW1hbmQgQ29kZSAqLworICAgIEZNQy0+SVNQQUREUiA9IHUzMlBhZ2VBZGRyOyAgICAgICAvKiBUaGUgYWRkcmVzcyBvZiBzcGVjaWZpZWQgcGFnZSB3aGljaCB3aWxsIGJlIG1hcCB0byBhZGRyZXNzIDB4MC4gSXQgbXVzdCBiZSBwYWdlIGFsaWdubWVudC4gKi8KKyAgICBGTUMtPklTUFRSRyA9IDB4MXU7ICAgICAgICAgICAgICAgLyogVHJpZ2dlciB0byBzdGFydCBJU1AgcHJvY2VkdXJlICovCisjaWYgSVNCRU4KKyAgICBfX0lTQigpOworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUbyBtYWtlIHN1cmUgSVNQL0NQVSBiZSBTeW5jaHJvbml6ZWQgKi8KKyAgICB3aGlsZShGTUMtPklTUFRSRykge30gICAgICAgICAgICAgLyogV2FpdGluZyBmb3IgSVNQIERvbmUgKi8KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitleHRlcm4gdWludDMyX3QgIEZNQ19DaGVja0FsbE9uZSh1aW50MzJfdCB1MzJhZGRyLCB1aW50MzJfdCB1MzJjb3VudCk7CitleHRlcm4gdm9pZCBGTUNfQ2xvc2Uodm9pZCk7CitleHRlcm4gaW50MzJfdCBGTUNfQ29uZmlnWE9NKHVpbnQzMl90IHhvbV9udW0sIHVpbnQzMl90IHhvbV9iYXNlLCB1aW50OF90IHhvbV9wYWdlKTsKK2V4dGVybiBpbnQzMl90IEZNQ19FcmFzZSh1aW50MzJfdCB1MzJQYWdlQWRkcik7CitleHRlcm4gaW50MzJfdCBGTUNfRXJhc2VfQmFuayh1aW50MzJfdCB1MzJCYW5rQWRkcik7CitleHRlcm4gaW50MzJfdCBGTUNfRXJhc2VfQmxvY2sodWludDMyX3QgdTMyQmxvY2tBZGRyKTsKK2V4dGVybiBpbnQzMl90IEZNQ19FcmFzZVhPTSh1aW50MzJfdCB4b21fbnVtKTsKK2V4dGVybiBpbnQzMl90IEZNQ19HZXRCb290U291cmNlKHZvaWQpOworZXh0ZXJuIHVpbnQzMl90ICBGTUNfR2V0Q2hrU3VtKHVpbnQzMl90IHUzMmFkZHIsIHVpbnQzMl90IHUzMmNvdW50KTsKK2V4dGVybiBpbnQzMl90IEZNQ19Jc19PVFBfTG9ja2VkKHVpbnQzMl90IG90cF9udW0pOworZXh0ZXJuIGludDMyX3QgRk1DX0dldFhPTVN0YXRlKHVpbnQzMl90IHhvbV9udW0pOworZXh0ZXJuIGludDMyX3QgRk1DX0xvY2tfT1RQKHVpbnQzMl90IG90cF9udW0pOworZXh0ZXJuIHZvaWQgRk1DX09wZW4odm9pZCk7CitleHRlcm4gdWludDMyX3QgRk1DX1JlYWQodWludDMyX3QgdTMyQWRkcik7CitleHRlcm4gaW50MzJfdCBGTUNfUmVhZF82NCh1aW50MzJfdCB1MzJhZGRyLCB1aW50MzJfdCAqIHUzMmRhdGEwLCB1aW50MzJfdCAqIHUzMmRhdGExKTsKK2V4dGVybiBpbnQzMl90IEZNQ19SZWFkX09UUCh1aW50MzJfdCBvdHBfbnVtLCB1aW50MzJfdCAqbG93X3dvcmQsIHVpbnQzMl90ICpoaWdoX3dvcmQpOworZXh0ZXJuIGludDMyX3QgRk1DX1JlYWRDb25maWcodWludDMyX3QgdTMyQ29uZmlnW10sIHVpbnQzMl90IHUzMkNvdW50KTsKK2V4dGVybiB2b2lkIEZNQ19TZXRCb290U291cmNlKGludDMyX3QgaTMyQm9vdFNyYyk7CitleHRlcm4gaW50MzJfdCAgRk1DX0NvbXBhcmVTUEtleSh1aW50MzJfdCBrZXlbM10pOworZXh0ZXJuIGludDMyX3QgIEZNQ19TZXRTUEtleSh1aW50MzJfdCBrZXlbM10sIHVpbnQzMl90IGtwbWF4LCB1aW50MzJfdCBrZW1heCwgY29uc3QgaW50MzJfdCBsb2NrX0NPTkZJRywgY29uc3QgaW50MzJfdCBsb2NrX1NQUk9NKTsKK2V4dGVybiB2b2lkIEZNQ19Xcml0ZSh1aW50MzJfdCB1MzJBZGRyLCB1aW50MzJfdCB1MzJEYXRhKTsKK2V4dGVybiBpbnQzMl90IEZNQ19Xcml0ZThCeXRlcyh1aW50MzJfdCB1MzJhZGRyLCB1aW50MzJfdCB1MzJkYXRhMCwgdWludDMyX3QgdTMyZGF0YTEpOworZXh0ZXJuIGludDMyX3QgRk1DX1dyaXRlQ29uZmlnKHVpbnQzMl90IGF1MzJDb25maWdbXSwgdWludDMyX3QgdTMyQ291bnQpOworZXh0ZXJuIGludDMyX3QgRk1DX1dyaXRlTXVsdGlwbGUodWludDMyX3QgdTMyQWRkciwgdWludDMyX3QgcHUzMkJ1ZltdLCB1aW50MzJfdCB1MzJMZW4pOworZXh0ZXJuIGludDMyX3QgRk1DX1dyaXRlX09UUCh1aW50MzJfdCBvdHBfbnVtLCB1aW50MzJfdCBsb3dfd29yZCwgdWludDMyX3QgaGlnaF93b3JkKTsKK2V4dGVybiBpbnQzMl90IEZNQ19Xcml0ZU11bHRpcGxlQSh1aW50MzJfdCB1MzJBZGRyLCB1aW50MzJfdCBwdTMyQnVmW10sIHVpbnQzMl90IHUzMkxlbik7CisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEZNQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBGTUNfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0ZNQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZ3Bpby5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2M2YTEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9ncGlvLmgKQEAgLTAsMCArMSw3NjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBHUElPLmgKKyAqIEB2ZXJzaW9uICBWMy4wCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIEdlbmVyYWwgUHVycG9zZSBJL08gKEdQSU8pIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0dQSU9fSF9fCisjZGVmaW5lIF9fR1BJT19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEdQSU9fRHJpdmVyIEdQSU8gRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgR1BJT19FWFBPUlRFRF9DT05TVEFOVFMgR1BJTyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKyNkZWZpbmUgR1BJT19QSU5fTUFYICAgICAgICAgICAgMTZVTCAvKiE8IFNwZWNpZnkgTWF4aW11bSBQaW5zIG9mIEVhY2ggR1BJTyBQb3J0ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEdQSU9fTU9ERSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBHUElPX01PREVfSU5QVVQgICAgICAgICAgMHgwVUwgLyohPCBJbnB1dCBNb2RlICovCisjZGVmaW5lIEdQSU9fTU9ERV9PVVRQVVQgICAgICAgICAweDFVTCAvKiE8IE91dHB1dCBNb2RlICovCisjZGVmaW5lIEdQSU9fTU9ERV9PUEVOX0RSQUlOICAgICAweDJVTCAvKiE8IE9wZW4tRHJhaW4gTW9kZSAqLworI2RlZmluZSBHUElPX01PREVfUVVBU0kgICAgICAgICAgMHgzVUwgLyohPCBRdWFzaS1iaWRpcmVjdGlvbmFsIE1vZGUgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgR1BJTyBJbnRlcnJ1cHQgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEdQSU9fSU5UX1JJU0lORyAgICAgICAgIDB4MDAwMTAwMDBVTCAvKiE8IEludGVycnVwdCBlbmFibGUgYnkgSW5wdXQgUmlzaW5nIEVkZ2UgKi8KKyNkZWZpbmUgR1BJT19JTlRfRkFMTElORyAgICAgICAgMHgwMDAwMDAwMVVMIC8qITwgSW50ZXJydXB0IGVuYWJsZSBieSBJbnB1dCBGYWxsaW5nIEVkZ2UgKi8KKyNkZWZpbmUgR1BJT19JTlRfQk9USF9FREdFICAgICAgMHgwMDAxMDAwMVVMIC8qITwgSW50ZXJydXB0IGVuYWJsZSBieSBib3RoIFJpc2luZyBFZGdlIGFuZCBGYWxsaW5nIEVkZ2UgKi8KKyNkZWZpbmUgR1BJT19JTlRfSElHSCAgICAgICAgICAgMHgwMTAxMDAwMFVMIC8qITwgSW50ZXJydXB0IGVuYWJsZSBieSBMZXZlbC1IaWdoICovCisjZGVmaW5lIEdQSU9fSU5UX0xPVyAgICAgICAgICAgIDB4MDEwMDAwMDFVTCAvKiE8IEludGVycnVwdCBlbmFibGUgYnkgTGV2ZWwtTGV2ZWwgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgR1BJT19JTlRUWVBFIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEdQSU9fSU5UVFlQRV9FREdFICAgICAgICAgICAwVUwgLyohPCBHUElPX0lOVFRZUEUgU2V0dGluZyBmb3IgRWRnZSBUcmlnZ2VyIE1vZGUgKi8KKyNkZWZpbmUgR1BJT19JTlRUWVBFX0xFVkVMICAgICAgICAgIDFVTCAvKiE8IEdQSU9fSU5UVFlQRSBTZXR0aW5nIGZvciBFZGdlIExldmVsIE1vZGUgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgR1BJTyBTbGV3IFJhdGUgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEdQSU9fU0xFV0NUTF9OT1JNQUwgICAgICAgICAweDBVTCAgICAgICAgICAgLyohPCBHUElPIHNsZXcgc2V0dGluZyBmb3Igbm9ybWFsIE1vZGUgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0hJR0ggICAgICAgICAgIDB4MVVMICAgICAgICAgICAvKiE8IEdQSU8gc2xldyBzZXR0aW5nIGZvciBoaWdoIE1vZGUgKi8KKyNkZWZpbmUgR1BJT19TTEVXQ1RMX0ZBU1QgICAgICAgICAgIDB4MlVMICAgICAgICAgICAvKiE8IEdQSU8gc2xldyBzZXR0aW5nIGZvciBmYXN0IE1vZGUgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgR1BJTyBQdWxsLXVwIEFuZCBQdWxsLWRvd24gVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEdQSU9fUFVTRUxfRElTQUJMRSAgICAgICAgICAweDBVTCAgICAgICAgICAgLyohPCBHUElPIFBVU0VMIHNldHRpbmcgZm9yIERpc2FibGUgTW9kZSAqLworI2RlZmluZSBHUElPX1BVU0VMX1BVTExfVVAgICAgICAgICAgMHgxVUwgICAgICAgICAgIC8qITwgR1BJTyBQVVNFTCBzZXR0aW5nIGZvciBQdWxsLXVwIE1vZGUgKi8KKyNkZWZpbmUgR1BJT19QVVNFTF9QVUxMX0RPV04gICAgICAgIDB4MlVMICAgICAgICAgICAvKiE8IEdQSU8gUFVTRUwgc2V0dGluZyBmb3IgUHVsbC1kb3duIE1vZGUgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgR1BJT19EQkNUTCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEdQSU9fREJDVExfSUNMS19PTiAgICAgICAgICAgIDB4MDAwMDAwMjBVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3IgYWxsIElPIHBpbnMgZWRnZSBkZXRlY3Rpb24gY2lyY3VpdCBpcyBhbHdheXMgYWN0aXZlIGFmdGVyIHJlc2V0ICovCisjZGVmaW5lIEdQSU9fREJDVExfSUNMS19PRkYgICAgICAgICAgIDB4MDAwMDAwMDBVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3IgZWRnZSBkZXRlY3Rpb24gY2lyY3VpdCBpcyBhY3RpdmUgb25seSBpZiBJTyBwaW4gY29ycmVzcG9uZGluZyBHUElPeF9JRU4gYml0IGlzIHNldCB0byAxICovCisKKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NSQ19MSVJDICAgICAgMHgwMDAwMDAxMFVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBkZS1ib3VuY2UgY291bnRlciBjbG9jayBzb3VyY2UgaXMgdGhlIGludGVybmFsIDEwIGtIeiAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU1JDX0hDTEsgICAgICAweDAwMDAwMDAwVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIGRlLWJvdW5jZSBjb3VudGVyIGNsb2NrIHNvdXJjZSBpcyB0aGUgSENMSyAqLworCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTRUxfMSAgICAgICAgIDB4MDAwMDAwMDBVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3Igc2FtcGxpbmcgY3ljbGUgPSAxIGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzIgICAgICAgICAweDAwMDAwMDAxVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gMiBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF80ICAgICAgICAgMHgwMDAwMDAwMlVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDQgY2xvY2tzICovCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTRUxfOCAgICAgICAgIDB4MDAwMDAwMDNVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3Igc2FtcGxpbmcgY3ljbGUgPSA4IGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzE2ICAgICAgICAweDAwMDAwMDA0VUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gMTYgY2xvY2tzICovCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTRUxfMzIgICAgICAgIDB4MDAwMDAwMDVVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3Igc2FtcGxpbmcgY3ljbGUgPSAzMiBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF82NCAgICAgICAgMHgwMDAwMDAwNlVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDY0IGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzEyOCAgICAgICAweDAwMDAwMDA3VUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gMTI4IGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzI1NiAgICAgICAweDAwMDAwMDA4VUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gMjU2IGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzUxMiAgICAgICAweDAwMDAwMDA5VUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gNTEyIGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzEwMjQgICAgICAweDAwMDAwMDBBVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gMTAyNCBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF8yMDQ4ICAgICAgMHgwMDAwMDAwQlVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDIwNDggY2xvY2tzICovCisjZGVmaW5lIEdQSU9fREJDVExfREJDTEtTRUxfNDA5NiAgICAgIDB4MDAwMDAwMENVTCAvKiE8IEdQSU9fREJDVEwgc2V0dGluZyBmb3Igc2FtcGxpbmcgY3ljbGUgPSA0MDk2IGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzgxOTIgICAgICAweDAwMDAwMDBEVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gODE5MiBjbG9ja3MgKi8KKyNkZWZpbmUgR1BJT19EQkNUTF9EQkNMS1NFTF8xNjM4NCAgICAgMHgwMDAwMDAwRVVMIC8qITwgR1BJT19EQkNUTCBzZXR0aW5nIGZvciBzYW1wbGluZyBjeWNsZSA9IDE2Mzg0IGNsb2NrcyAqLworI2RlZmluZSBHUElPX0RCQ1RMX0RCQ0xLU0VMXzMyNzY4ICAgICAweDAwMDAwMDBGVUwgLyohPCBHUElPX0RCQ1RMIHNldHRpbmcgZm9yIHNhbXBsaW5nIGN5Y2xlID0gMzI3NjggY2xvY2tzICovCisKKworLyoqIERlZmluZSBHUElPIFBpbiBEYXRhIElucHV0L091dHB1dC4gSXQgY291bGQgYmUgdXNlZCB0byBjb250cm9sIGVhY2ggSS9PIHBpbiBieSBwaW4gYWRkcmVzcyBtYXBwaW5nLgorICogIEV4YW1wbGUgMToKKyAqCisgKiAgICAgIFBBMCA9IDE7CisgKgorICogIEl0IGlzIHVzZWQgdG8gc2V0IFBBLjAgdG8gaGlnaDsKKyAqCisgKiAgRXhhbXBsZSAyOgorICoKKyAqICAgICAgaWYgKFBBMCkKKyAqICAgICAgICAgIFBBMCA9IDA7CisgKgorICogIElmIFBBLjAgcGluIHN0YXR1cyBpcyBoaWdoLCB0aGVuIHNldCBQQS4wIGRhdGEgb3V0cHV0IHRvIGxvdy4KKyAqLworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQwICkKKyMgZGVmaW5lIFBBX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrTlNfT0ZGU0VUKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2Vsc2UKKyMgZGVmaW5lIFBBX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZW5kaWYKKyNkZWZpbmUgUEEwICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDAgKSAvKiE8IFNwZWNpZnkgUEEuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDEgKSAvKiE8IFNwZWNpZnkgUEEuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEEyICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDIgKSAvKiE8IFNwZWNpZnkgUEEuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEEzICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDMgKSAvKiE8IFNwZWNpZnkgUEEuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE0ICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDQgKSAvKiE8IFNwZWNpZnkgUEEuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE1ICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDUgKSAvKiE8IFNwZWNpZnkgUEEuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE2ICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDYgKSAvKiE8IFNwZWNpZnkgUEEuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE3ICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDcgKSAvKiE8IFNwZWNpZnkgUEEuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE4ICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDggKSAvKiE8IFNwZWNpZnkgUEEuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE5ICAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDkgKSAvKiE8IFNwZWNpZnkgUEEuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExMCAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDEwKSAvKiE8IFNwZWNpZnkgUEEuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTEgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCAxMSkgLyohPCBTcGVjaWZ5IFBBLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTEyICAgICAgICAgICAgUEFfUElOX0RBVEEoMCwgMTIpIC8qITwgU3BlY2lmeSBQQS4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExMyAgICAgICAgICAgIFBBX1BJTl9EQVRBKDAsIDEzKSAvKiE8IFNwZWNpZnkgUEEuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTQgICAgICAgICAgICBQQV9QSU5fREFUQSgwLCAxNCkgLyohPCBTcGVjaWZ5IFBBLjE0IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTE1ICAgICAgICAgICAgUEFfUElOX0RBVEEoMCwgMTUpIC8qITwgU3BlY2lmeSBQQS4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQxICkKKyMgZGVmaW5lIFBCX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrTlNfT0ZGU0VUKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2Vsc2UKKyMgZGVmaW5lIFBCX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZW5kaWYKKyNkZWZpbmUgUEIwICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDAgKSAvKiE8IFNwZWNpZnkgUEIuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDEgKSAvKiE8IFNwZWNpZnkgUEIuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIyICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDIgKSAvKiE8IFNwZWNpZnkgUEIuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIzICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDMgKSAvKiE8IFNwZWNpZnkgUEIuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI0ICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDQgKSAvKiE8IFNwZWNpZnkgUEIuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI1ICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDUgKSAvKiE8IFNwZWNpZnkgUEIuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI2ICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDYgKSAvKiE8IFNwZWNpZnkgUEIuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI3ICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDcgKSAvKiE8IFNwZWNpZnkgUEIuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI4ICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDggKSAvKiE8IFNwZWNpZnkgUEIuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI5ICAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDkgKSAvKiE8IFNwZWNpZnkgUEIuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxMCAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDEwKSAvKiE8IFNwZWNpZnkgUEIuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMTEgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCAxMSkgLyohPCBTcGVjaWZ5IFBCLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjEyICAgICAgICAgICAgUEJfUElOX0RBVEEoMSwgMTIpIC8qITwgU3BlY2lmeSBQQi4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxMyAgICAgICAgICAgIFBCX1BJTl9EQVRBKDEsIDEzKSAvKiE8IFNwZWNpZnkgUEIuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMTQgICAgICAgICAgICBQQl9QSU5fREFUQSgxLCAxNCkgLyohPCBTcGVjaWZ5IFBCLjE0IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjE1ICAgICAgICAgICAgUEJfUElOX0RBVEEoMSwgMTUpIC8qITwgU3BlY2lmeSBQQi4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQyICkKKyMgZGVmaW5lIFBDX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrTlNfT0ZGU0VUKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2Vsc2UKKyMgZGVmaW5lIFBDX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZW5kaWYKKyNkZWZpbmUgUEMwICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDAgKSAvKiE8IFNwZWNpZnkgUEMuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMxICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDEgKSAvKiE8IFNwZWNpZnkgUEMuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMyICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDIgKSAvKiE8IFNwZWNpZnkgUEMuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMzICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDMgKSAvKiE8IFNwZWNpZnkgUEMuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM0ICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDQgKSAvKiE8IFNwZWNpZnkgUEMuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM1ICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDUgKSAvKiE8IFNwZWNpZnkgUEMuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM2ICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDYgKSAvKiE8IFNwZWNpZnkgUEMuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM3ICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDcgKSAvKiE8IFNwZWNpZnkgUEMuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM4ICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDggKSAvKiE8IFNwZWNpZnkgUEMuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM5ICAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDkgKSAvKiE8IFNwZWNpZnkgUEMuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMxMCAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDEwKSAvKiE8IFNwZWNpZnkgUEMuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTEgICAgICAgICAgICBQQ19QSU5fREFUQSgyLCAxMSkgLyohPCBTcGVjaWZ5IFBDLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzEyICAgICAgICAgICAgUENfUElOX0RBVEEoMiwgMTIpIC8qITwgU3BlY2lmeSBQQy4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMxMyAgICAgICAgICAgIFBDX1BJTl9EQVRBKDIsIDEzKSAvKiE8IFNwZWNpZnkgUEMuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisKKyNpZiBkZWZpbmVkIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCkgJiYgKFNDVV9JTklUX0lPTlNTRVRfVkFMICYgQklUMyApCisjIGRlZmluZSBQRF9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFK05TX09GRlNFVCsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNlbHNlCisjIGRlZmluZSBQRF9QSU5fREFUQShwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2VuZGlmCisjZGVmaW5lIFBEMCAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCAwICkgLyohPCBTcGVjaWZ5IFBELjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMSAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCAxICkgLyohPCBTcGVjaWZ5IFBELjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMiAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCAyICkgLyohPCBTcGVjaWZ5IFBELjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMyAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCAzICkgLyohPCBTcGVjaWZ5IFBELjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBENCAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCA0ICkgLyohPCBTcGVjaWZ5IFBELjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBENSAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCA1ICkgLyohPCBTcGVjaWZ5IFBELjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBENiAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCA2ICkgLyohPCBTcGVjaWZ5IFBELjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBENyAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCA3ICkgLyohPCBTcGVjaWZ5IFBELjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEOCAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCA4ICkgLyohPCBTcGVjaWZ5IFBELjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEOSAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCA5ICkgLyohPCBTcGVjaWZ5IFBELjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTAgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCAxMCkgLyohPCBTcGVjaWZ5IFBELjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDExICAgICAgICAgICAgUERfUElOX0RBVEEoMywgMTEpIC8qITwgU3BlY2lmeSBQRC4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxMiAgICAgICAgICAgIFBEX1BJTl9EQVRBKDMsIDEyKSAvKiE8IFNwZWNpZnkgUEQuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTMgICAgICAgICAgICBQRF9QSU5fREFUQSgzLCAxMykgLyohPCBTcGVjaWZ5IFBELjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDE0ICAgICAgICAgICAgUERfUElOX0RBVEEoMywgMTQpIC8qITwgU3BlY2lmeSBQRC4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQ0ICkKKyMgZGVmaW5lIFBFX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrTlNfT0ZGU0VUKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2Vsc2UKKyMgZGVmaW5lIFBFX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZW5kaWYKKyNkZWZpbmUgUEUwICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDAgKSAvKiE8IFNwZWNpZnkgUEUuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDEgKSAvKiE8IFNwZWNpZnkgUEUuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUyICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDIgKSAvKiE8IFNwZWNpZnkgUEUuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUzICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDMgKSAvKiE8IFNwZWNpZnkgUEUuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU0ICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDQgKSAvKiE8IFNwZWNpZnkgUEUuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU1ICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDUgKSAvKiE8IFNwZWNpZnkgUEUuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU2ICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDYgKSAvKiE8IFNwZWNpZnkgUEUuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU3ICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDcgKSAvKiE8IFNwZWNpZnkgUEUuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU4ICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDggKSAvKiE8IFNwZWNpZnkgUEUuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU5ICAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDkgKSAvKiE8IFNwZWNpZnkgUEUuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxMCAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDEwKSAvKiE8IFNwZWNpZnkgUEUuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMTEgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCAxMSkgLyohPCBTcGVjaWZ5IFBFLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTEyICAgICAgICAgICAgUEVfUElOX0RBVEEoNCwgMTIpIC8qITwgU3BlY2lmeSBQRS4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxMyAgICAgICAgICAgIFBFX1BJTl9EQVRBKDQsIDEzKSAvKiE8IFNwZWNpZnkgUEUuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMTQgICAgICAgICAgICBQRV9QSU5fREFUQSg0LCAxNCkgLyohPCBTcGVjaWZ5IFBFLjE0IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTE1ICAgICAgICAgICAgUEVfUElOX0RBVEEoNCwgMTUpIC8qITwgU3BlY2lmeSBQRS4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKworI2lmIGRlZmluZWQgKFNDVV9JTklUX0lPTlNTRVRfVkFMKSAmJiAoU0NVX0lOSVRfSU9OU1NFVF9WQUwgJiBCSVQ1ICkKKyMgZGVmaW5lIFBGX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrTlNfT0ZGU0VUKygweDQwKihwb3J0KSkpICsgKChwaW4pPDwyKSkpKQorI2Vsc2UKKyMgZGVmaW5lIFBGX1BJTl9EQVRBKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZW5kaWYKKyNkZWZpbmUgUEYwICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDAgKSAvKiE8IFNwZWNpZnkgUEYuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYxICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDEgKSAvKiE8IFNwZWNpZnkgUEYuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYyICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDIgKSAvKiE8IFNwZWNpZnkgUEYuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYzICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDMgKSAvKiE8IFNwZWNpZnkgUEYuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY0ICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDQgKSAvKiE8IFNwZWNpZnkgUEYuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY1ICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDUgKSAvKiE8IFNwZWNpZnkgUEYuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY2ICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDYgKSAvKiE8IFNwZWNpZnkgUEYuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY3ICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDcgKSAvKiE8IFNwZWNpZnkgUEYuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY4ICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDggKSAvKiE8IFNwZWNpZnkgUEYuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY5ICAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDkgKSAvKiE8IFNwZWNpZnkgUEYuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYxMCAgICAgICAgICAgIFBGX1BJTl9EQVRBKDUsIDEwKSAvKiE8IFNwZWNpZnkgUEYuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMTEgICAgICAgICAgICBQRl9QSU5fREFUQSg1LCAxMSkgLyohPCBTcGVjaWZ5IFBGLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfSU9OU1NFVF9WQUwpICYmIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCAmIEJJVDYgKQorIyBkZWZpbmUgUEdfUElOX0RBVEEocG9ydCwgcGluKSAgICAoKigodm9sYXRpbGUgdWludDMyX3QgKikoKEdQSU9fUElOX0RBVEFfQkFTRStOU19PRkZTRVQrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZWxzZQorIyBkZWZpbmUgUEdfUElOX0RBVEEocG9ydCwgcGluKSAgICAoKigodm9sYXRpbGUgdWludDMyX3QgKikoKEdQSU9fUElOX0RBVEFfQkFTRSsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNlbmRpZgorI2RlZmluZSBQRzIgICAgICAgICAgICAgUEdfUElOX0RBVEEoNiwgMiApIC8qITwgU3BlY2lmeSBQRy4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzMgICAgICAgICAgICAgUEdfUElOX0RBVEEoNiwgMyApIC8qITwgU3BlY2lmeSBQRy4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzQgICAgICAgICAgICAgUEdfUElOX0RBVEEoNiwgNCApIC8qITwgU3BlY2lmeSBQRy40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzkgICAgICAgICAgICAgUEdfUElOX0RBVEEoNiwgOSApIC8qITwgU3BlY2lmeSBQRy45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzEwICAgICAgICAgICAgUEdfUElOX0RBVEEoNiwgMTApIC8qITwgU3BlY2lmeSBQRy4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxMSAgICAgICAgICAgIFBHX1BJTl9EQVRBKDYsIDExKSAvKiE8IFNwZWNpZnkgUEcuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTIgICAgICAgICAgICBQR19QSU5fREFUQSg2LCAxMikgLyohPCBTcGVjaWZ5IFBHLjEyIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzEzICAgICAgICAgICAgUEdfUElOX0RBVEEoNiwgMTMpIC8qITwgU3BlY2lmeSBQRy4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxNCAgICAgICAgICAgIFBHX1BJTl9EQVRBKDYsIDE0KSAvKiE8IFNwZWNpZnkgUEcuMTQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTUgICAgICAgICAgICBQR19QSU5fREFUQSg2LCAxNSkgLyohPCBTcGVjaWZ5IFBHLjE1IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworCisjaWYgZGVmaW5lZCAoU0NVX0lOSVRfSU9OU1NFVF9WQUwpICYmIChTQ1VfSU5JVF9JT05TU0VUX1ZBTCAmIEJJVDcgKQorIyBkZWZpbmUgUEhfUElOX0RBVEEocG9ydCwgcGluKSAgICAoKigodm9sYXRpbGUgdWludDMyX3QgKikoKEdQSU9fUElOX0RBVEFfQkFTRStOU19PRkZTRVQrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZWxzZQorIyBkZWZpbmUgUEhfUElOX0RBVEEocG9ydCwgcGluKSAgICAoKigodm9sYXRpbGUgdWludDMyX3QgKikoKEdQSU9fUElOX0RBVEFfQkFTRSsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNlbmRpZgorI2RlZmluZSBQSDQgICAgICAgICAgICAgUEhfUElOX0RBVEEoNywgNCApIC8qITwgU3BlY2lmeSBQSC40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDUgICAgICAgICAgICAgUEhfUElOX0RBVEEoNywgNSApIC8qITwgU3BlY2lmeSBQSC41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDYgICAgICAgICAgICAgUEhfUElOX0RBVEEoNywgNiApIC8qITwgU3BlY2lmeSBQSC42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDcgICAgICAgICAgICAgUEhfUElOX0RBVEEoNywgNyApIC8qITwgU3BlY2lmeSBQSC43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDggICAgICAgICAgICAgUEhfUElOX0RBVEEoNywgOCApIC8qITwgU3BlY2lmeSBQSC44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDkgICAgICAgICAgICAgUEhfUElOX0RBVEEoNywgOSApIC8qITwgU3BlY2lmeSBQSC45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDEwICAgICAgICAgICAgUEhfUElOX0RBVEEoNywgMTApIC8qITwgU3BlY2lmeSBQSC4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEgxMSAgICAgICAgICAgIFBIX1BJTl9EQVRBKDcsIDExKSAvKiE8IFNwZWNpZnkgUEguMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisKKy8qIEdQSU8gYml0IGRlZmluaXRpb25zIGZvciBzZWN1cmUgKi8KKyNkZWZpbmUgR1BJT19QSU5fREFUQV9TKHBvcnQsIHBpbikgICAgKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKChHUElPX1BJTl9EQVRBX0JBU0UrKDB4NDAqKHBvcnQpKSkgKyAoKHBpbik8PDIpKSkpCisjZGVmaW5lIFBBMF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDAgKSAvKiE8IFNwZWNpZnkgUEEuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgMSApIC8qITwgU3BlY2lmeSBQQS4xIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTJfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygwLCAyICkgLyohPCBTcGVjaWZ5IFBBLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBM19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDMgKSAvKiE8IFNwZWNpZnkgUEEuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE0X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgNCApIC8qITwgU3BlY2lmeSBQQS40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTVfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygwLCA1ICkgLyohPCBTcGVjaWZ5IFBBLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBNl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDYgKSAvKiE8IFNwZWNpZnkgUEEuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE3X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgNyApIC8qITwgU3BlY2lmeSBQQS43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQThfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygwLCA4ICkgLyohPCBTcGVjaWZ5IFBBLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBOV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDAsIDkgKSAvKiE8IFNwZWNpZnkgUEEuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExMF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgMTApIC8qITwgU3BlY2lmeSBQQS4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExMV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgMTEpIC8qITwgU3BlY2lmeSBQQS4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExMl9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgMTIpIC8qITwgU3BlY2lmeSBQQS4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExM19TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgMTMpIC8qITwgU3BlY2lmeSBQQS4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExNF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgMTQpIC8qITwgU3BlY2lmeSBQQS4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExNV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMCwgMTUpIC8qITwgU3BlY2lmeSBQQS4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIwX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgMCApIC8qITwgU3BlY2lmeSBQQi4wIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjFfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCAxICkgLyohPCBTcGVjaWZ5IFBCLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDEsIDIgKSAvKiE8IFNwZWNpZnkgUEIuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIzX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgMyApIC8qITwgU3BlY2lmeSBQQi4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjRfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCA0ICkgLyohPCBTcGVjaWZ5IFBCLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCNV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDEsIDUgKSAvKiE8IFNwZWNpZnkgUEIuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI2X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgNiApIC8qITwgU3BlY2lmeSBQQi42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjdfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCA3ICkgLyohPCBTcGVjaWZ5IFBCLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCOF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDEsIDggKSAvKiE8IFNwZWNpZnkgUEIuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI5X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMSwgOSApIC8qITwgU3BlY2lmeSBQQi45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjEwX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCAxMCkgLyohPCBTcGVjaWZ5IFBCLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjExX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCAxMSkgLyohPCBTcGVjaWZ5IFBCLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjEyX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCAxMikgLyohPCBTcGVjaWZ5IFBCLjEyIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjEzX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCAxMykgLyohPCBTcGVjaWZ5IFBCLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjE0X1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCAxNCkgLyohPCBTcGVjaWZ5IFBCLjE0IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjE1X1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygxLCAxNSkgLyohPCBTcGVjaWZ5IFBCLjE1IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzBfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCAwICkgLyohPCBTcGVjaWZ5IFBDLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDEgKSAvKiE8IFNwZWNpZnkgUEMuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMyX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMiwgMiApIC8qITwgU3BlY2lmeSBQQy4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzNfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCAzICkgLyohPCBTcGVjaWZ5IFBDLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDNF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDQgKSAvKiE8IFNwZWNpZnkgUEMuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM1X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMiwgNSApIC8qITwgU3BlY2lmeSBQQy41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzZfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCA2ICkgLyohPCBTcGVjaWZ5IFBDLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDN19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDcgKSAvKiE8IFNwZWNpZnkgUEMuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM4X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMiwgOCApIC8qITwgU3BlY2lmeSBQQy44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzlfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygyLCA5ICkgLyohPCBTcGVjaWZ5IFBDLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTBfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDEwKSAvKiE8IFNwZWNpZnkgUEMuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTFfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDExKSAvKiE8IFNwZWNpZnkgUEMuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTJfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDEyKSAvKiE8IFNwZWNpZnkgUEMuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTNfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDIsIDEzKSAvKiE8IFNwZWNpZnkgUEMuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDAgKSAvKiE8IFNwZWNpZnkgUEQuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgMSApIC8qITwgU3BlY2lmeSBQRC4xIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDJfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygzLCAyICkgLyohPCBTcGVjaWZ5IFBELjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEM19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDMgKSAvKiE8IFNwZWNpZnkgUEQuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQ0X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgNCApIC8qITwgU3BlY2lmeSBQRC40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDVfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygzLCA1ICkgLyohPCBTcGVjaWZ5IFBELjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBENl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDYgKSAvKiE8IFNwZWNpZnkgUEQuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQ3X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgNyApIC8qITwgU3BlY2lmeSBQRC43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDhfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUygzLCA4ICkgLyohPCBTcGVjaWZ5IFBELjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEOV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDMsIDkgKSAvKiE8IFNwZWNpZnkgUEQuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxMF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgMTApIC8qITwgU3BlY2lmeSBQRC4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxMV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgMTEpIC8qITwgU3BlY2lmeSBQRC4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxMl9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgMTIpIC8qITwgU3BlY2lmeSBQRC4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxM19TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgMTMpIC8qITwgU3BlY2lmeSBQRC4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxNF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoMywgMTQpIC8qITwgU3BlY2lmeSBQRC4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUwX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgMCApIC8qITwgU3BlY2lmeSBQRS4wIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTFfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCAxICkgLyohPCBTcGVjaWZ5IFBFLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDQsIDIgKSAvKiE8IFNwZWNpZnkgUEUuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUzX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgMyApIC8qITwgU3BlY2lmeSBQRS4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTRfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCA0ICkgLyohPCBTcGVjaWZ5IFBFLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFNV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDQsIDUgKSAvKiE8IFNwZWNpZnkgUEUuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU2X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgNiApIC8qITwgU3BlY2lmeSBQRS42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTdfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCA3ICkgLyohPCBTcGVjaWZ5IFBFLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFOF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDQsIDggKSAvKiE8IFNwZWNpZnkgUEUuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU5X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNCwgOSApIC8qITwgU3BlY2lmeSBQRS45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTEwX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCAxMCkgLyohPCBTcGVjaWZ5IFBFLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTExX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCAxMSkgLyohPCBTcGVjaWZ5IFBFLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTEyX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCAxMikgLyohPCBTcGVjaWZ5IFBFLjEyIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTEzX1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCAxMykgLyohPCBTcGVjaWZ5IFBFLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTE0X1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCAxNCkgLyohPCBTcGVjaWZ5IFBFLjE0IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTE1X1MgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg0LCAxNSkgLyohPCBTcGVjaWZ5IFBFLjE1IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjBfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg1LCAwICkgLyohPCBTcGVjaWZ5IFBGLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDUsIDEgKSAvKiE8IFNwZWNpZnkgUEYuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYyX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNSwgMiApIC8qITwgU3BlY2lmeSBQRi4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjNfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg1LCAzICkgLyohPCBTcGVjaWZ5IFBGLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGNF9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDUsIDQgKSAvKiE8IFNwZWNpZnkgUEYuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY1X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNSwgNSApIC8qITwgU3BlY2lmeSBQRi41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjZfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg1LCA2ICkgLyohPCBTcGVjaWZ5IFBGLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGN19TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDUsIDcgKSAvKiE8IFNwZWNpZnkgUEYuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY4X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNSwgOCApIC8qITwgU3BlY2lmeSBQRi44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjlfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg1LCA5ICkgLyohPCBTcGVjaWZ5IFBGLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMTBfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDUsIDEwKSAvKiE8IFNwZWNpZnkgUEYuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMTFfUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDUsIDExKSAvKiE8IFNwZWNpZnkgUEYuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDYsIDIgKSAvKiE8IFNwZWNpZnkgUEcuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEczX1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNiwgMyApIC8qITwgU3BlY2lmeSBQRy4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzRfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg2LCA0ICkgLyohPCBTcGVjaWZ5IFBHLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHOV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDYsIDkgKSAvKiE8IFNwZWNpZnkgUEcuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxMF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNiwgMTApIC8qITwgU3BlY2lmeSBQRy4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxMV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNiwgMTEpIC8qITwgU3BlY2lmeSBQRy4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxMl9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNiwgMTIpIC8qITwgU3BlY2lmeSBQRy4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxM19TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNiwgMTMpIC8qITwgU3BlY2lmeSBQRy4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxNF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNiwgMTQpIC8qITwgU3BlY2lmeSBQRy4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxNV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNiwgMTUpIC8qITwgU3BlY2lmeSBQRy4xNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg0X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNywgNCApIC8qITwgU3BlY2lmeSBQSC40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDVfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg3LCA1ICkgLyohPCBTcGVjaWZ5IFBILjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBINl9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDcsIDYgKSAvKiE8IFNwZWNpZnkgUEguNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg3X1MgICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNywgNyApIC8qITwgU3BlY2lmeSBQSC43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDhfUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfUyg3LCA4ICkgLyohPCBTcGVjaWZ5IFBILjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBIOV9TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9TKDcsIDkgKSAvKiE8IFNwZWNpZnkgUEguOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEgxMF9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNywgMTApIC8qITwgU3BlY2lmeSBQSC4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEgxMV9TICAgICAgICAgICBHUElPX1BJTl9EQVRBX1MoNywgMTEpIC8qITwgU3BlY2lmeSBQSC4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKworLyogR1BJTyBiaXQgZGVmaW5pdGlvbnMgZm9yIG5vbi1zZWN1cmUgKi8KKyNkZWZpbmUgR1BJT19QSU5fREFUQV9OUyhwb3J0LCBwaW4pICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgoR1BJT19QSU5fREFUQV9CQVNFK05TX09GRlNFVCsoMHg0MCoocG9ydCkpKSArICgocGluKTw8MikpKSkKKyNkZWZpbmUgUEEwX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCAwICkgLyohPCBTcGVjaWZ5IFBBLjAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgMSApIC8qITwgU3BlY2lmeSBQQS4xIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTJfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDIgKSAvKiE8IFNwZWNpZnkgUEEuMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEEzX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCAzICkgLyohPCBTcGVjaWZ5IFBBLjMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBNF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgNCApIC8qITwgU3BlY2lmeSBQQS40IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTVfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDUgKSAvKiE8IFNwZWNpZnkgUEEuNSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE2X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCA2ICkgLyohPCBTcGVjaWZ5IFBBLjYgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBN19OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgNyApIC8qITwgU3BlY2lmeSBQQS43IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQThfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDggKSAvKiE8IFNwZWNpZnkgUEEuOCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEE5X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCA5ICkgLyohPCBTcGVjaWZ5IFBBLjkgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTBfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgMTApIC8qITwgU3BlY2lmeSBQQS4xMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExMV9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCAxMSkgLyohPCBTcGVjaWZ5IFBBLjExIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTEyX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDEyKSAvKiE8IFNwZWNpZnkgUEEuMTIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBBMTNfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMCwgMTMpIC8qITwgU3BlY2lmeSBQQS4xMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEExNF9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygwLCAxNCkgLyohPCBTcGVjaWZ5IFBBLjE0IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQTE1X05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDAsIDE1KSAvKiE8IFNwZWNpZnkgUEEuMTUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgMCApIC8qITwgU3BlY2lmeSBQQi4wIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjFfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDEgKSAvKiE8IFNwZWNpZnkgUEIuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIyX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCAyICkgLyohPCBTcGVjaWZ5IFBCLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCM19OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgMyApIC8qITwgU3BlY2lmeSBQQi4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjRfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDQgKSAvKiE8IFNwZWNpZnkgUEIuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI1X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCA1ICkgLyohPCBTcGVjaWZ5IFBCLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCNl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgNiApIC8qITwgU3BlY2lmeSBQQi42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjdfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDcgKSAvKiE8IFNwZWNpZnkgUEIuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEI4X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCA4ICkgLyohPCBTcGVjaWZ5IFBCLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCOV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgOSApIC8qITwgU3BlY2lmeSBQQi45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjEwX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDEwKSAvKiE8IFNwZWNpZnkgUEIuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMTFfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgMTEpIC8qITwgU3BlY2lmeSBQQi4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxMl9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCAxMikgLyohPCBTcGVjaWZ5IFBCLjEyIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQjEzX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDEsIDEzKSAvKiE8IFNwZWNpZnkgUEIuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBCMTRfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMSwgMTQpIC8qITwgU3BlY2lmeSBQQi4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEIxNV9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygxLCAxNSkgLyohPCBTcGVjaWZ5IFBCLjE1IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzBfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDIsIDAgKSAvKiE8IFNwZWNpZnkgUEMuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMxX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCAxICkgLyohPCBTcGVjaWZ5IFBDLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMiwgMiApIC8qITwgU3BlY2lmeSBQQy4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzNfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDIsIDMgKSAvKiE8IFNwZWNpZnkgUEMuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM0X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCA0ICkgLyohPCBTcGVjaWZ5IFBDLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDNV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMiwgNSApIC8qITwgU3BlY2lmeSBQQy41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzZfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDIsIDYgKSAvKiE8IFNwZWNpZnkgUEMuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEM3X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCA3ICkgLyohPCBTcGVjaWZ5IFBDLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDOF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMiwgOCApIC8qITwgU3BlY2lmeSBQQy44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzlfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDIsIDkgKSAvKiE8IFNwZWNpZnkgUEMuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMxMF9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCAxMCkgLyohPCBTcGVjaWZ5IFBDLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQQzExX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDIsIDExKSAvKiE8IFNwZWNpZnkgUEMuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBDMTJfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMiwgMTIpIC8qITwgU3BlY2lmeSBQQy4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEMxM19OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygyLCAxMykgLyohPCBTcGVjaWZ5IFBDLjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDBfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDAgKSAvKiE8IFNwZWNpZnkgUEQuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCAxICkgLyohPCBTcGVjaWZ5IFBELjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMywgMiApIC8qITwgU3BlY2lmeSBQRC4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDNfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDMgKSAvKiE8IFNwZWNpZnkgUEQuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQ0X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCA0ICkgLyohPCBTcGVjaWZ5IFBELjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBENV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMywgNSApIC8qITwgU3BlY2lmeSBQRC41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDZfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDYgKSAvKiE8IFNwZWNpZnkgUEQuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQ3X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCA3ICkgLyohPCBTcGVjaWZ5IFBELjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEOF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMywgOCApIC8qITwgU3BlY2lmeSBQRC44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDlfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDkgKSAvKiE8IFNwZWNpZnkgUEQuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxMF9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCAxMCkgLyohPCBTcGVjaWZ5IFBELjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDExX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDExKSAvKiE8IFNwZWNpZnkgUEQuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBEMTJfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoMywgMTIpIC8qITwgU3BlY2lmeSBQRC4xMiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEQxM19OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUygzLCAxMykgLyohPCBTcGVjaWZ5IFBELjEzIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRDE0X05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDMsIDE0KSAvKiE8IFNwZWNpZnkgUEQuMTQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgMCApIC8qITwgU3BlY2lmeSBQRS4wIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTFfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDEgKSAvKiE8IFNwZWNpZnkgUEUuMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUyX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCAyICkgLyohPCBTcGVjaWZ5IFBFLjIgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFM19OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgMyApIC8qITwgU3BlY2lmeSBQRS4zIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTRfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDQgKSAvKiE8IFNwZWNpZnkgUEUuNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU1X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCA1ICkgLyohPCBTcGVjaWZ5IFBFLjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFNl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgNiApIC8qITwgU3BlY2lmeSBQRS42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTdfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDcgKSAvKiE8IFNwZWNpZnkgUEUuNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEU4X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCA4ICkgLyohPCBTcGVjaWZ5IFBFLjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFOV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgOSApIC8qITwgU3BlY2lmeSBQRS45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTEwX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDEwKSAvKiE8IFNwZWNpZnkgUEUuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMTFfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgMTEpIC8qITwgU3BlY2lmeSBQRS4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxMl9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCAxMikgLyohPCBTcGVjaWZ5IFBFLjEyIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRTEzX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDQsIDEzKSAvKiE8IFNwZWNpZnkgUEUuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBFMTRfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNCwgMTQpIC8qITwgU3BlY2lmeSBQRS4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEUxNV9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg0LCAxNSkgLyohPCBTcGVjaWZ5IFBFLjE1IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjBfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDUsIDAgKSAvKiE8IFNwZWNpZnkgUEYuMCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYxX05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg1LCAxICkgLyohPCBTcGVjaWZ5IFBGLjEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGMl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNSwgMiApIC8qITwgU3BlY2lmeSBQRi4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjNfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDUsIDMgKSAvKiE8IFNwZWNpZnkgUEYuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY0X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg1LCA0ICkgLyohPCBTcGVjaWZ5IFBGLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGNV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNSwgNSApIC8qITwgU3BlY2lmeSBQRi41IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjZfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDUsIDYgKSAvKiE8IFNwZWNpZnkgUEYuNiBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEY3X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg1LCA3ICkgLyohPCBTcGVjaWZ5IFBGLjcgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBGOF9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNSwgOCApIC8qITwgU3BlY2lmeSBQRi44IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjlfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDUsIDkgKSAvKiE8IFNwZWNpZnkgUEYuOSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEYxMF9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg1LCAxMCkgLyohPCBTcGVjaWZ5IFBGLjEwIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRjExX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDUsIDExKSAvKiE8IFNwZWNpZnkgUEYuMTEgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNiwgMiApIC8qITwgU3BlY2lmeSBQRy4yIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzNfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDYsIDMgKSAvKiE8IFNwZWNpZnkgUEcuMyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEc0X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg2LCA0ICkgLyohPCBTcGVjaWZ5IFBHLjQgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHOV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNiwgOSApIC8qITwgU3BlY2lmeSBQRy45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzEwX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDYsIDEwKSAvKiE8IFNwZWNpZnkgUEcuMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTFfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNiwgMTEpIC8qITwgU3BlY2lmeSBQRy4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxMl9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg2LCAxMikgLyohPCBTcGVjaWZ5IFBHLjEyIFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQRzEzX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDYsIDEzKSAvKiE8IFNwZWNpZnkgUEcuMTMgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBHMTRfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNiwgMTQpIC8qITwgU3BlY2lmeSBQRy4xNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEcxNV9OUyAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg2LCAxNSkgLyohPCBTcGVjaWZ5IFBHLjE1IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDRfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDcsIDQgKSAvKiE8IFNwZWNpZnkgUEguNCBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg1X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg3LCA1ICkgLyohPCBTcGVjaWZ5IFBILjUgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBINl9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNywgNiApIC8qITwgU3BlY2lmeSBQSC42IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDdfTlMgICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDcsIDcgKSAvKiE8IFNwZWNpZnkgUEguNyBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKyNkZWZpbmUgUEg4X05TICAgICAgICAgICAgR1BJT19QSU5fREFUQV9OUyg3LCA4ICkgLyohPCBTcGVjaWZ5IFBILjggUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBIOV9OUyAgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNywgOSApIC8qITwgU3BlY2lmeSBQSC45IFBpbiBEYXRhIElucHV0L091dHB1dCAqLworI2RlZmluZSBQSDEwX05TICAgICAgICAgICBHUElPX1BJTl9EQVRBX05TKDcsIDEwKSAvKiE8IFNwZWNpZnkgUEguMTAgUGluIERhdGEgSW5wdXQvT3V0cHV0ICovCisjZGVmaW5lIFBIMTFfTlMgICAgICAgICAgIEdQSU9fUElOX0RBVEFfTlMoNywgMTEpIC8qITwgU3BlY2lmeSBQSC4xMSBQaW4gRGF0YSBJbnB1dC9PdXRwdXQgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBHUElPX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBHUElPX0VYUE9SVEVEX0ZVTkNUSU9OUyBHUElPIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiBAYnJpZWYgICAgICAgQ2xlYXIgR1BJTyBQaW4gSW50ZXJydXB0IEZsYWcKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJQaW5NYXNrICBUaGUgc2luZ2xlIG9yIG11bHRpcGxlIHBpbnMgb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTUgZm9yIFBBLCBQQiwgUEMsIFBEIGFuZCBQRi4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTMgZm9yIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDEgfiBCSVQ1LCBCSVQ3IH4gQklUMTIgZm9yIFBHLgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIENsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIG9mIHNwZWNpZmllZCBHUElPIHBpbi4KKyAqLworI2RlZmluZSBHUElPX0NMUl9JTlRfRkxBRyhwb3J0LCB1MzJQaW5NYXNrKSAgICAgICAgICgocG9ydCktPklOVFNSQyA9ICh1MzJQaW5NYXNrKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgRGlzYWJsZSBQaW4gRGUtYm91bmNlIEZ1bmN0aW9uCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluTWFzayAgVGhlIHNpbmdsZSBvciBtdWx0aXBsZSBwaW5zIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMyBmb3IgUEMuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE0IGZvciBQRC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTEgZm9yIFBGLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDIgfiBCSVQzLCBCSVQ5IH4gQklUMTUgZm9yIFBHLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDQgfiBCSVQxMSBmb3IgUEguCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgRGlzYWJsZSB0aGUgaW50ZXJydXB0IGRlLWJvdW5jZSBmdW5jdGlvbiBvZiBzcGVjaWZpZWQgR1BJTyBwaW4uCisgKi8KKyNkZWZpbmUgR1BJT19ESVNBQkxFX0RFQk9VTkNFKHBvcnQsIHUzMlBpbk1hc2spICAgICAoKHBvcnQpLT5EQkVOICY9IH4odTMyUGluTWFzaykpCisKKy8qKgorICogQGJyaWVmICAgICAgIEVuYWJsZSBQaW4gRGUtYm91bmNlIEZ1bmN0aW9uCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluTWFzayAgVGhlIHNpbmdsZSBvciBtdWx0aXBsZSBwaW5zIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMyBmb3IgUEMuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE0IGZvciBQRC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTEgZm9yIFBGLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDIgfiBCSVQzLCBCSVQ5IH4gQklUMTUgZm9yIFBHLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDQgfiBCSVQxMSBmb3IgUEguCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBFbmFibGUgdGhlIGludGVycnVwdCBkZS1ib3VuY2UgZnVuY3Rpb24gb2Ygc3BlY2lmaWVkIEdQSU8gcGluLgorICovCisjZGVmaW5lIEdQSU9fRU5BQkxFX0RFQk9VTkNFKHBvcnQsIHUzMlBpbk1hc2spICAgICAgKChwb3J0KS0+REJFTiB8PSAodTMyUGluTWFzaykpCisKKy8qKgorICogQGJyaWVmICAgICAgIERpc2FibGUgSS9PIERpZ2l0YWwgSW5wdXQgUGF0aAorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbk1hc2sgIFRoZSBzaW5nbGUgb3IgbXVsdGlwbGUgcGlucyBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTMgZm9yIFBDLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNCBmb3IgUEQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDExIGZvciBQRi4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQyIH4gQklUMywgQklUOSB+IEJJVDE1IGZvciBQRy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQ0IH4gQklUMTEgZm9yIFBILgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIERpc2FibGUgSS9PIGRpZ2l0YWwgaW5wdXQgcGF0aCBvZiBzcGVjaWZpZWQgR1BJTyBwaW4uCisgKi8KKyNkZWZpbmUgR1BJT19ESVNBQkxFX0RJR0lUQUxfUEFUSChwb3J0LCB1MzJQaW5NYXNrKSAoKHBvcnQpLT5ESU5PRkYgfD0gKCh1MzJQaW5NYXNrKTw8MTYpKQorCisvKioKKyAqIEBicmllZiAgICAgICBFbmFibGUgSS9PIERpZ2l0YWwgSW5wdXQgUGF0aAorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbk1hc2sgIFRoZSBzaW5nbGUgb3IgbXVsdGlwbGUgcGlucyBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTMgZm9yIFBDLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxNCBmb3IgUEQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDExIGZvciBQRi4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQyIH4gQklUMywgQklUOSB+IEJJVDE1IGZvciBQRy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQ0IH4gQklUMTEgZm9yIFBILgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIEVuYWJsZSBJL08gZGlnaXRhbCBpbnB1dCBwYXRoIG9mIHNwZWNpZmllZCBHUElPIHBpbi4KKyAqLworI2RlZmluZSBHUElPX0VOQUJMRV9ESUdJVEFMX1BBVEgocG9ydCwgdTMyUGluTWFzaykgICgocG9ydCktPkRJTk9GRiAmPSB+KCh1MzJQaW5NYXNrKTw8MTYpKQorCisvKioKKyAqIEBicmllZiAgICAgICBEaXNhYmxlIEkvTyBET1VUIG1hc2sKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJQaW5NYXNrICBUaGUgc2luZ2xlIG9yIG11bHRpcGxlIHBpbnMgb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTUgZm9yIFBBLCBQQiBhbmQgUEUuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDEzIGZvciBQQy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTQgZm9yIFBELiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMSBmb3IgUEYuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMiB+IEJJVDMsIEJJVDkgfiBCSVQxNSBmb3IgUEcuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUNCB+IEJJVDExIGZvciBQSC4KKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBEaXNhYmxlIEkvTyBET1VUIG1hc2sgb2Ygc3BlY2lmaWVkIEdQSU8gcGluLgorICovCisjZGVmaW5lIEdQSU9fRElTQUJMRV9ET1VUX01BU0socG9ydCwgdTMyUGluTWFzaykgICAgKChwb3J0KS0+REFUTVNLICY9IH4odTMyUGluTWFzaykpCisKKy8qKgorICogQGJyaWVmICAgICAgIEVuYWJsZSBJL08gRE9VVCBtYXNrCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluTWFzayAgVGhlIHNpbmdsZSBvciBtdWx0aXBsZSBwaW5zIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMyBmb3IgUEMuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE0IGZvciBQRC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTEgZm9yIFBGLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDIgfiBCSVQzLCBCSVQ5IH4gQklUMTUgZm9yIFBHLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDQgfiBCSVQxMSBmb3IgUEguCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgRW5hYmxlIEkvTyBET1VUIG1hc2sgb2Ygc3BlY2lmaWVkIEdQSU8gcGluLgorICovCisjZGVmaW5lIEdQSU9fRU5BQkxFX0RPVVRfTUFTSyhwb3J0LCB1MzJQaW5NYXNrKSAoKHBvcnQpLT5EQVRNU0sgfD0gKHUzMlBpbk1hc2spKQorCisvKioKKyAqIEBicmllZiAgICAgICBHZXQgR1BJTyBQaW4gSW50ZXJydXB0IEZsYWcKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJQaW5NYXNrICBUaGUgc2luZ2xlIG9yIG11bHRpcGxlIHBpbnMgb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTUgZm9yIFBBLCBQQiBhbmQgUEUuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDEzIGZvciBQQy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTQgZm9yIFBELiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMSBmb3IgUEYuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMiB+IEJJVDMsIEJJVDkgfiBCSVQxNSBmb3IgUEcuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUNCB+IEJJVDExIGZvciBQSC4KKyAqCisgKiBAcmV0dmFsICAgICAgMCAgICAgICAgICAgTm8gaW50ZXJydXB0IGF0IHNwZWNpZmllZCBHUElPIHBpbgorICogQHJldHZhbCAgICAgIDEgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgR1BJTyBwaW4gZ2VuZXJhdGUgYW4gaW50ZXJydXB0CisgKgorICogQGRldGFpbHMgICAgIEdldCB0aGUgaW50ZXJydXB0IHN0YXR1cyBvZiBzcGVjaWZpZWQgR1BJTyBwaW4uCisgKi8KKyNkZWZpbmUgR1BJT19HRVRfSU5UX0ZMQUcocG9ydCwgdTMyUGluTWFzaykgICAgICgocG9ydCktPklOVFNSQyAmICh1MzJQaW5NYXNrKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IERlLWJvdW5jZSBTYW1wbGluZyBDeWNsZSBUaW1lCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyQ2xrU3JjICAgVGhlIGRlLWJvdW5jZSBjb3VudGVyIGNsb2NrIHNvdXJjZS4gSXQgY291bGQgYmUgR1BJT19EQkNUTF9EQkNMS1NSQ19IQ0xLIG9yIEdQSU9fREJDVExfREJDTEtTUkNfTElSQy4KKyAqIEBwYXJhbVtpbl0gICB1MzJDbGtTZWwgICBUaGUgZGUtYm91bmNlIHNhbXBsaW5nIGN5Y2xlIHNlbGVjdGlvbi4gSXQgY291bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzE2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF8zMgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fREJDVExfREJDTEtTRUxfNjQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzEyOAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fREJDVExfREJDTEtTRUxfMjU2CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF81MTIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzEwMjQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzIwNDgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzQwOTYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzgxOTIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0RCQ1RMX0RCQ0xLU0VMXzE2Mzg0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19EQkNUTF9EQkNMS1NFTF8zMjc2OAorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFNldCB0aGUgaW50ZXJydXB0IGRlLWJvdW5jZSBzYW1wbGluZyBjeWNsZSB0aW1lIGJhc2VkIG9uIHRoZSBkZWJvdW5jZSBjb3VudGVyIGNsb2NrIHNvdXJjZS4gXG4KKyAqICAgICAgICAgICAgICBFeGFtcGxlOiBfR1BJT19TRVRfREVCT1VOQ0VfVElNRShQQSwgR1BJT19EQkNUTF9EQkNMS1NSQ19MSVJDLCBHUElPX0RCQ1RMX0RCQ0xLU0VMXzQpLiBcbgorICogICAgICAgICAgICAgIEl0J3MgbWVhbmluZyB0aGUgRGUtZGVib3VuY2UgY291bnRlciBjbG9jayBzb3VyY2UgaXMgaW50ZXJuYWwgMTAgS0h6IGFuZCBzYW1wbGluZyBjeWNsZSBzZWxlY3Rpb24gaXMgNC4gXG4KKyAqICAgICAgICAgICAgICBUaGVuIHRoZSB0YXJnZXQgZGUtYm91bmNlIHNhbXBsaW5nIGN5Y2xlIHRpbWUgaXMgKDQpKigxLygxMCoxMDAwKSkgcyA9IDQqMC4wMDAxIHMgPSA0MDAgdXMsCisgKiAgICAgICAgICAgICAgYW5kIHN5c3RlbSB3aWxsIHNhbXBsaW5nIGludGVycnVwdCBpbnB1dCBvbmNlIHBlciA0MDAgdXMuCisgKi8KKyNkZWZpbmUgR1BJT19TRVRfREVCT1VOQ0VfVElNRShwb3J0LCB1MzJDbGtTcmMsIHUzMkNsa1NlbCkgICAgKChwb3J0KS0+REJDVEwgPSAoR1BJT19EQkNUTF9JQ0xLT05fTXNrIHwgKHUzMkNsa1NyYykgfCAodTMyQ2xrU2VsKSkpCisKKy8qKgorICogQGJyaWVmICAgICAgIEdldCBHUElPIFBvcnQgSU4gRGF0YQorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICoKKyAqIEByZXR1cm4gICAgICBUaGUgc3BlY2lmaWVkIHBvcnQgZGF0YQorICoKKyAqIEBkZXRhaWxzICAgICBHZXQgdGhlIFBJTiByZWdpc3RlciBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LgorICovCisjZGVmaW5lIEdQSU9fR0VUX0lOX0RBVEEocG9ydCkgICgocG9ydCktPlBJTikKKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IEdQSU8gUG9ydCBPVVQgRGF0YQorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMkRhdGEgICAgIEdQSU8gcG9ydCBkYXRhLgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFNldCB0aGUgRGF0YSBpbnRvIHNwZWNpZmllZCBHUElPIHBvcnQuCisgKi8KKyNkZWZpbmUgR1BJT19TRVRfT1VUX0RBVEEocG9ydCwgdTMyRGF0YSkgICAgKChwb3J0KS0+RE9VVCA9ICh1MzJEYXRhKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgVG9nZ2xlIFNwZWNpZmllZCBHUElPIHBpbgorICoKKyAqIEBwYXJhbVtpbl0gICB1MzJQaW4gICAgICBQeHkKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUb2dnbGUgdGhlIHNwZWNpZmllZCBHUElPIHBpbnQuCisgKi8KKyNkZWZpbmUgR1BJT19UT0dHTEUodTMyUGluKSAoKHUzMlBpbikgXj0gMSkKKworCisvKioKKyAqIEBicmllZiAgICAgICBFbmFibGUgRXh0ZXJuYWwgR1BJTyBpbnRlcnJ1cHQKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluICAgICAgICAgIFRoZSBwaW4gb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTMgZm9yIFBDIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDE0IGZvciBQRCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxMSBmb3IgUEYgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAyIH4gNCwgOSB+IDE1IGZvciBQRyBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDQgfiAxMSBmb3IgUEggR1BJTyBwb3J0LgorICogQHBhcmFtW2luXSAgIHUzMkludEF0dHJpYnMgICBUaGUgaW50ZXJydXB0IGF0dHJpYnV0ZSBvZiBzcGVjaWZpZWQgR1BJTyBwaW4uIEl0IGNvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0lOVF9SSVNJTkcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fSU5UX0ZBTExJTkcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fSU5UX0JPVEhfRURHRQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19JTlRfSElHSAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19JTlRfTE9XCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBzcGVjaWZpZWQgR1BJTyBwaW4gaW50ZXJydXB0LgorICovCisjZGVmaW5lIEdQSU9fRW5hYmxlRUlOVCAgICAgR1BJT19FbmFibGVJbnQKKworLyoqCisgKiBAYnJpZWYgICAgICAgRGlzYWJsZSBFeHRlcm5hbCBHUElPIGludGVycnVwdAorICoKKyAqIEBwYXJhbVtpbl0gICBwb3J0ICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbiAgICAgIFRoZSBwaW4gb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTUgZm9yIFBBLCBQQiBhbmQgUEUuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDEzIGZvciBQQyBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDE0IGZvciBQRCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDExIGZvciBQRiBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMiB+IDQsIDkgfiAxNSBmb3IgUEcgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDQgfiAxMSBmb3IgUEggR1BJTyBwb3J0LgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgc3BlY2lmaWVkIEdQSU8gcGluIGludGVycnVwdC4KKyAqLworI2RlZmluZSBHUElPX0Rpc2FibGVFSU5UICAgIEdQSU9fRGlzYWJsZUludAorCisKK3ZvaWQgR1BJT19TZXRNb2RlKEdQSU9fVCAqcG9ydCwgdWludDMyX3QgdTMyUGluTWFzaywgdWludDMyX3QgdTMyTW9kZSk7Cit2b2lkIEdQSU9fRW5hYmxlSW50KEdQSU9fVCAqcG9ydCwgdWludDMyX3QgdTMyUGluLCB1aW50MzJfdCB1MzJJbnRBdHRyaWJzKTsKK3ZvaWQgR1BJT19EaXNhYmxlSW50KEdQSU9fVCAqcG9ydCwgdWludDMyX3QgdTMyUGluKTsKK3ZvaWQgR1BJT19TZXRTbGV3Q3RsKEdQSU9fVCAqcG9ydCwgdWludDMyX3QgdTMyUGluTWFzaywgdWludDMyX3QgdTMyTW9kZSk7Cit2b2lkIEdQSU9fU2V0UHVsbEN0bChHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbk1hc2ssIHVpbnQzMl90IHUzMk1vZGUpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgR1BJT19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBHUElPX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19HUElPX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9oZGl2LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9oZGl2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2M2NhYwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL2hkaXYuaApAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgaGRpdi5oCisgKiBAdmVyc2lvbiAgVjMuMAorICogJFJldmlzaW9uOiAxICQKKyAqICREYXRlOiAxNi8wNy8wNyA3OjUwcCAkCisgKiBAYnJpZWYgICAgTTA1NjQgc2VyaWVzIEhhcmR3YXJlIERpdmlkZXIoSERJVikgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSERJVl9IX18KKyNkZWZpbmUgX19IRElWX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgSERJVl9Ecml2ZXIgSERJViBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBIRElWX0VYUE9SVEVEX0ZVTkNUSU9OUyBIRElWIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiBAYnJpZWYgICAgICBEaXZpc2lvbiBmdW5jdGlvbiB0byBjYWxjdWxhdGUgKHgveSkKKyAqCisgKiBAcGFyYW1baW5dICB4IHRoZSBkaXZpZGVuZCBvZiB0aGUgZGl2aXNpb24KKyAqIEBwYXJhbVtpbl0gIHkgdGhlIGRpdmlzb3Igb2YgdGhlIGRpdmlzaW9uCisgKgorICogQHJldHVybiAgICAgVGhlIHJlc3VsdCBvZiAoeC95KQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgaXMgYSBkaXZpc2lvbiBmdW5jdGlvbiB0byBjYWxjdWxhdGUgeC95CisgKgorICovCitzdGF0aWMgX19JTkxJTkUgaW50MzJfdCBIRElWX0RpdihpbnQzMl90IHgsIGludDE2X3QgeSkKK3sKKyAgICB1aW50MzJfdCAqcDMyOworCisgICAgcDMyID0gKHVpbnQzMl90ICopSERJVl9CQVNFOworICAgICpwMzIrKyA9ICh1aW50MzJfdCl4OworICAgICpwMzIrKyA9ICh1aW50MzJfdCl5OworICAgIHJldHVybiAoaW50MzJfdCkgKiBwMzI7Cit9CisKKworLyoqCisgKiBAYnJpZWYgICAgICBUbyBjYWxjdWxhdGUgdGhlIHJlbWFpbmRlciBvZiB4L3ksIGkuZS4sIHRoZSByZXN1bHQgb2YgeCBtb2QgeS4KKyAqCisgKiBAcGFyYW1baW5dICB4IHRoZSBkaXZpZGVuZCBvZiB0aGUgZGl2aXNpb24KKyAqIEBwYXJhbVtpbl0gIHkgdGhlIGRpdmlzb3Igb2YgdGhlIGRpdmlzaW9uCisgKgorICogQHJldHVybiAgICAgVGhlIHJlbWFpbmRlciBvZiAoeC95KQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHJlbWFpbmRlciBvZiB4L3kuCisgKi8KK3N0YXRpYyBfX0lOTElORSBpbnQxNl90IEhESVZfTW9kKGludDMyX3QgeCwgaW50MTZfdCB5KQoreworICAgIHVpbnQzMl90ICpwMzI7CisKKyAgICBwMzIgPSAodWludDMyX3QgKilIRElWX0JBU0U7CisgICAgKnAzMisrID0gKHVpbnQzMl90KXg7CisgICAgKnAzMisrID0gKHVpbnQzMl90KXk7CisgICAgcmV0dXJuIChpbnQxNl90KXAzMlsxXTsKK30KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBIRElWX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEhESVZfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvL19fSERJVl9IX18KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvaTJjLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDRmMzNhCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvaTJjLmgKQEAgLTAsMCArMSw1MjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBpMmMuaAorICogQHZlcnNpb24gIFYzLjAKKyAqICRSZXZpc2lvbjogMSAkCisgKiAkRGF0ZTogMTYvMDcvMDcgNzo1MHAgJAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBJMkMgU2VyaWFsIEludGVyZmFjZSBDb250cm9sbGVyKEkyQykgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSTJDX0hfXworI2RlZmluZSBfX0kyQ19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEkyQ19Ecml2ZXIgSTJDIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEkyQ19FWFBPUlRFRF9DT05TVEFOVFMgSTJDIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEkyQ19DVEwgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBJMkNfQ1RMX1NUQV9TSSAgICAgICAgICAgICgweDI4VSkgLyohPCBJMkNfQ1RMIHNldHRpbmcgZm9yIEkyQyBjb250cm9sIGJpdHMuIEl0IHdvdWxkIHNldCBTVEEgYW5kIFNJIGJpdHMgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTF9TVEFfU0lfQUEgICAgICAgICAoMHgyQ1UpIC8qITwgSTJDX0NUTCBzZXR0aW5nIGZvciBJMkMgY29udHJvbCBiaXRzLiBJdCB3b3VsZCBzZXQgU1RBLCBTSSBhbmQgQUEgYml0cyAgICAgICovCisjZGVmaW5lIEkyQ19DVExfU1RPX1NJICAgICAgICAgICAgKDB4MThVKSAvKiE8IEkyQ19DVEwgc2V0dGluZyBmb3IgSTJDIGNvbnRyb2wgYml0cy4gSXQgd291bGQgc2V0IFNUTyBhbmQgU0kgYml0cyAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMX1NUT19TSV9BQSAgICAgICAgICgweDFDVSkgLyohPCBJMkNfQ1RMIHNldHRpbmcgZm9yIEkyQyBjb250cm9sIGJpdHMuIEl0IHdvdWxkIHNldCBTVE8sIFNJIGFuZCBBQSBiaXRzICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTF9TSSAgICAgICAgICAgICAgICAoMHgwOFUpIC8qITwgSTJDX0NUTCBzZXR0aW5nIGZvciBJMkMgY29udHJvbCBiaXRzLiBJdCB3b3VsZCBzZXQgU0kgYml0ICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVExfU0lfQUEgICAgICAgICAgICAgKDB4MENVKSAvKiE8IEkyQ19DVEwgc2V0dGluZyBmb3IgSTJDIGNvbnRyb2wgYml0cy4gSXQgd291bGQgc2V0IFNJIGFuZCBBQSBiaXRzICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1RMX1NUQSAgICAgICAgICAgICAgICgweDIwVSkgLyohPCBJMkNfQ1RMIHNldHRpbmcgZm9yIEkyQyBjb250cm9sIGJpdHMuIEl0IHdvdWxkIHNldCBTVEEgYml0ICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0NUTF9TVE8gICAgICAgICAgICAgICAoMHgxMFUpIC8qITwgSTJDX0NUTCBzZXR0aW5nIGZvciBJMkMgY29udHJvbCBiaXRzLiBJdCB3b3VsZCBzZXQgU1RPIGJpdCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19DVExfQUEgICAgICAgICAgICAgICAgKDB4MDRVKSAvKiE8IEkyQ19DVEwgc2V0dGluZyBmb3IgSTJDIGNvbnRyb2wgYml0cy4gSXQgd291bGQgc2V0IEFBIGJpdCAgICAgICAgICAgICAgICAgICAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgSTJDIEdDTW9kZSBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEkyQ19HQ01PREVfRU5BQkxFICAgICAgICAgICAoMVUpICAgIC8qITwgRW5hYmxlICBJMkMgR0MgTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19HQ01PREVfRElTQUJMRSAgICAgICAgICAoMFUpICAgIC8qITwgRGlzYWJsZSBJMkMgR0MgTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBJMkMgU01CVVMgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgSTJDX1NNQkhfRU5BQkxFICAgICAgICAgICAgICgxVSkgICAgLyohPCBFbmFibGUgIFNNQnVzIEhvc3QgTW9kZSBlbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1NNQkRfRU5BQkxFICAgICAgICAgICAgICgwVSkgICAgLyohPCBFbmFibGUgIFNNQnVzIERldmljZSBNb2RlIGVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1BFQ1RYX0VOQUJMRSAgICAgICAgICAgICgxVSkgICAgLyohPCBFbmFibGUgIFNNQnVzIFBhY2tldCBFcnJvciBDaGVjayBUcmFuc21pdCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1BFQ1RYX0RJU0FCTEUgICAgICAgICAgICgwVSkgICAgLyohPCBEaXNhYmxlIFNNQnVzIFBhY2tldCBFcnJvciBDaGVjayBUcmFuc21pdCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBJMkNfRVhQT1JURURfQ09OU1RBTlRTICovCisKKy8qKiBAYWRkdG9ncm91cCBJMkNfRVhQT1JURURfRlVOQ1RJT05TIEkyQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gc2V0IEkyQyBidXMgY29uZGl0aW9uIGF0IE9uZSBUaW1lCisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqICAgIEBwYXJhbVtpbl0gICAgdThDdHJsICAgICBBIGJ5dGUgd3JpdGVzIHRvIEkyQyBjb250cm9sIHJlZ2lzdGVyCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBTZXQgSTJDX0NUTCByZWdpc3RlciB0byBjb250cm9sIEkyQyBidXMgY29uZGl0aW9ucyBvZiBTVEFSVCwgU1RPUCwgU0ksIEFDSy4KKyAqLworI2RlZmluZSBJMkNfU0VUX0NPTlRST0xfUkVHKGkyYywgdThDdHJsKSAoKGkyYyktPkNUTDAgPSAoKGkyYyktPkNUTDAgJiB+MHgzQ3UpIHwgKHU4Q3RybCkpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGUgbWFjcm8gaXMgdXNlZCB0byBzZXQgU1RBUlQgY29uZGl0aW9uIG9mIEkyQyBCdXMKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgU2V0IHRoZSBJMkMgYnVzIFNUQVJUIGNvbmRpdGlvbiBpbiBJMkNfQ1RMIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEkyQ19TVEFSVChpMmMpICAoKGkyYyktPkNUTDAgPSAoKGkyYyktPkNUTDAgfCBJMkNfQ1RMMF9TSV9Nc2spIHwgSTJDX0NUTDBfU1RBX01zaykKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIHdhaXQgSTJDIGJ1cyBzdGF0dXMgZ2V0IHJlYWR5CisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFdoZW4gYSBuZXcgc3RhdHVzIGlzIHByZXNlbnRlZCBvZiBJMkMgYnVzLCB0aGUgU0kgZmxhZyB3aWxsIGJlIHNldCBpbiBJMkNfQ1RMIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEkyQ19XQUlUX1JFQURZKGkyYykgICAgIHdoaWxlKCEoKGkyYyktPkNUTDAgJiBJMkNfQ1RMMF9TSV9Nc2spKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gUmVhZCBJMkMgQnVzIERhdGEgUmVnaXN0ZXIKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqICAgIEByZXR1cm4gICAgICAgQSBieXRlIG9mIEkyQyBkYXRhIHJlZ2lzdGVyCisgKgorICogICAgQGRldGFpbHMgICAgICBJMkMgY29udHJvbGxlciByZWFkIGRhdGEgZnJvbSBidXMgYW5kIHNhdmUgaXQgaW4gSTJDREFUIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEkyQ19HRVRfREFUQShpMmMpICAgKChpMmMpLT5EQVQpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBXcml0ZSBhIERhdGEgdG8gSTJDIERhdGEgUmVnaXN0ZXIKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqICAgIEBwYXJhbVtpbl0gICAgdThEYXRhICAgICAgQSBieXRlIHRoYXQgd3JpdGVzIHRvIGRhdGEgcmVnaXN0ZXIKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFdoZW4gd3JpdGUgYSBkYXRhIHRvIEkyQ19EQVQgcmVnaXN0ZXIsIHRoZSBJMkMgY29udHJvbGxlciB3aWxsIHNoaWZ0IGl0IHRvIEkyQyBidXMuCisgKi8KKyNkZWZpbmUgSTJDX1NFVF9EQVRBKGkyYywgdThEYXRhKSAoKGkyYyktPkRBVCA9ICh1OERhdGEpKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IEkyQyBCdXMgc3RhdHVzIGNvZGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqICAgIEByZXR1cm4gICAgICAgSTJDIHN0YXR1cyBjb2RlCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyBnZXQgdGhpcyBzdGF0dXMgY29kZSB0byBtb25pdG9yIEkyQyBidXMgZXZlbnQuCisgKi8KKyNkZWZpbmUgSTJDX0dFVF9TVEFUVVMoaTJjKSAoKGkyYyktPlNUQVRVUzApCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBHZXQgVGltZS1vdXQgZmxhZyBmcm9tIEkyQyBCdXMKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCAgICAgICBJMkMgQnVzIHRpbWUtb3V0IGlzIG5vdCBoYXBwZW5lZAorICogICAgQHJldHZhbCAgICAgICAxICAgICAgIEkyQyBCdXMgdGltZS1vdXQgaXMgaGFwcGVuZWQKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFdoZW4gSTJDIGJ1cyBvY2N1cnMgdGltZS1vdXQgZXZlbnQsIHRoZSB0aW1lLW91dCBmbGFnIHdpbGwgYmUgc2V0LgorICovCisjZGVmaW5lIEkyQ19HRVRfVElNRU9VVF9GTEFHKGkyYykgICAoICgoaTJjKS0+VE9DVEwgJiBJMkNfVE9DVExfVE9JRl9Nc2spID09IEkyQ19UT0NUTF9UT0lGX01zayA/IDF1IDogMHUpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUbyBnZXQgd2FrZS11cCBmbGFnIGZyb20gSTJDIEJ1cworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgaTJjICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgICAgIENoaXAgaXMgbm90IHdva2VuLXVwIGZyb20gcG93ZXItZG93biBtb2RlCisgKiAgICBAcmV0dmFsICAgICAgIDEgICAgICAgQ2hpcCBpcyB3b2tlbi11cCBmcm9tIHBvd2VyLWRvd24gbW9kZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgSTJDIGJ1cyBvY2N1cnMgd2FrZS11cCBldmVudCwgd2FrZS11cCBmbGFnIHdpbGwgYmUgc2V0LgorICovCisjZGVmaW5lIEkyQ19HRVRfV0FLRVVQX0ZMQUcoaTJjKSAoICgoaTJjKS0+V0tTVFMgJiBJMkNfV0tTVFNfV0tJRl9Nc2spID09IEkyQ19XS1NUU19XS0lGX01zayA/IDF1IDogMHUpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUbyBjbGVhciB3YWtlLXVwIGZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgSWYgd2FrZS11cCBmbGFnIGlzIHNldCwgdXNlIHRoaXMgbWFjcm8gdG8gY2xlYXIgaXQuCisgKi8KKyNkZWZpbmUgSTJDX0NMRUFSX1dBS0VVUF9GTEFHKGkyYykgICgoaTJjKS0+V0tTVFMgPSBJMkNfV0tTVFNfV0tJRl9Nc2spCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUbyBnZXQgd2FrZS11cCBhZGRyZXNzIGZyYW1lIEFDSyBkb25lIGZsYWcgZnJvbSBJMkMgQnVzCisgKgorICogICAgQHBhcmFtW2luXSAgICBpMmMgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICAgICAgVGhlIEFDSyBiaXQgY3ljbGUgb2YgYWRkcmVzcyBtYXRjaCBmcmFtZSBpcyBub3QgZG9uZQorICogICAgQHJldHZhbCAgICAgICAxICAgICAgIFRoZSBBQ0sgYml0IGN5Y2xlIG9mIGFkZHJlc3MgbWF0Y2ggZnJhbWUgaXMgZG9uZSBpbiBwb3dlci1kb3duCisgKgorICogICAgQGRldGFpbHMgICAgICBJMkMgYnVzIG9jY3VycyB3YWtlLXVwIGV2ZW50IGFuZCBhZGRyZXNzIGZyYW1lIEFDSyBpcyBkb25lLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQuCisgKgorICogICAgXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIEkyQ19HRVRfV0FLRVVQX0RPTkUoaTJjKSAoICgoaTJjKS0+V0tTVFMgJiBJMkNfV0tTVFNfV0tBS0RPTkVfTXNrKSA9PSBJMkNfV0tTVFNfV0tBS0RPTkVfTXNrID8gMXUgOiAwdSkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRvIGNsZWFyIGFkZHJlc3MgZnJhbWUgQUNLIGRvbmUgZmxhZworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgaTJjICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBJZiB3YWtlLXVwIGRvbmUgaXMgc2V0LCB1c2UgdGhpcyBtYWNybyB0byBjbGVhciBpdC4KKyAqCisgKiAgICBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgSTJDX0NMRUFSX1dBS0VVUF9ET05FKGkyYykgICgoaTJjKS0+V0tTVFMgPSBJMkNfV0tTVFNfV0tBS0RPTkVfTXNrKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVG8gZ2V0IHJlYWQvd3JpdGUgc3RhdHVzIGJpdCBpbiBhZGRyZXNzIHdha2V1cCBmcmFtZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgaTJjICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgICAgIFdyaXRlIGNvbW1hbmQgYmUgcmVjb3JkIG9uIHRoZSBhZGRyZXNzIG1hdGNoIHdha2V1cCBmcmFtZQorICogICAgQHJldHZhbCAgICAgICAxICAgICAgIFJlYWQgY29tbWFuZCBiZSByZWNvcmQgb24gdGhlIGFkZHJlc3MgbWF0Y2ggd2FrZXVwIGZyYW1lLgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgSTJDIGJ1cyBvY2N1cnMgd2FrZS11cCBldmVudCBhbmQgYWRkcmVzcyBmcmFtZSBpcyByZWNlaXZlZCwgdGhpcyBiaXQgd2lsbCByZWNvcmQgcmVhZC93cml0ZSBzdGF0dXMuCisgKgorICogICAgXGhpZGVpbml0aWFsaXplcgorKi8KKyNkZWZpbmUgSTJDX0dFVF9XQUtFVVBfV1JfU1RBVFVTKGkyYykgKCAoKGkyYyktPldLU1RTICYgSTJDX1dLU1RTX1dSU1RTV0tfTXNrKSA9PSBJMkNfV0tTVFNfV1JTVFNXS19Nc2sgPyAxdSA6IDB1KQorCisvKioKKyAqIEBicmllZiAgICAgIFRvIGdldCBTTUJ1cyBTdGF0dXMKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIFNNQnVzIHN0YXR1cworICoKKyAqIEBkZXRhaWxzICAgIFRvIGdldCB0aGUgQnVzIE1hbmFnZW1lbnQgc3RhdHVzIG9mIEkyQ19CVVNTVFMgcmVnaXN0ZXIKKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX0dFVF9TVEFUVVMoaTJjKSAoKGkyYyktPkJVU1NUUykKKworLyoqCisgKiBAYnJpZWYgICAgICBHZXQgU01CdXMgQ1JDIHZhbHVlCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBQYWNrZXQgZXJyb3IgY2hlY2sgYnl0ZSB2YWx1ZQorICoKKyAqIEBkZXRhaWxzICAgIFRoZSBDUkMgY2hlY2sgdmFsdWUgYWZ0ZXIgYSB0cmFuc21pc3Npb24gb3IgYSByZWNlcHRpb24gYnkgY291bnQgYnkgdXNpbmcgQ1JDOAorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfR0VUX1BFQ19WQUxVRShpMmMpICgoaTJjKS0+UEtUQ1JDKQorCisvKioKKyAqIEBicmllZiAgICAgIFNldCBTTUJ1cyBCeXRlcyBudW1iZXIgb2YgVHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICogQHBhcmFtW2luXSAgdTMyUGt0U2l6ZSAgICAgICBUcmFuc21pdCAvIFJlY2VpdmUgYnl0ZXMKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhlIHRyYW5zbWlzc2lvbiBvciByZWNlaXZlIGJ5dGUgbnVtYmVyIGluIG9uZSB0cmFuc2FjdGlvbiB3aGVuIFBFQ0VOIGlzIHNldC4gVGhlIG1heGltdW0gaXMgMjU1IGJ5dGVzLgorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfU0VUX1BBQ0tFVF9CWVRFX0NPVU5UKGkyYywgdTMyUGt0U2l6ZSkgKChpMmMpLT5QS1RTSVpFID0gKHUzMlBrdFNpemUpKQorCisvKioKKyAqIEBicmllZiAgICAgIEVuYWJsZSBTTUJ1cyBBbGVydCBmdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBEZXZpY2UgTW9kZShCTUhFTj0wKTogSWYgQUxFUlRFTihJMkNfQlVTQ1RMWzRdKSBpcyBzZXQsIHRoZSBBbGVydCBwaW4gd2lsbCBwdWxsIGxvLCBhbmQgcmVwbHkgQUNLIHdoZW4gZ2V0IEFSUCBmcm9tIGhvc3QKKyAqICAgICAgICAgICAgIEhvc3QgICBNb2RlKEJNSEVOPTEpOiBJZiBBTEVSVEVOKEkyQ19CVVNDVExbNF0pIGlzIHNldCwgdGhlIEFsZXJ0IHBpbiBpcyBzdXBwb3J0ZWQgdG8gcmVjZWl2ZSBhbGVydCBzdGF0ZShMbyB0cmlnZ2VyKQorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfRU5BQkxFX0FMRVJUKGkyYykgKChpMmMpLT5CVVNDVEwgfD0gSTJDX0JVU0NUTF9BTEVSVEVOX01zaykKKworLyoqCisgKiBAYnJpZWYgICAgICBEaXNhYmxlIFNNQnVzIEFsZXJ0IHBpbiBmdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBEZXZpY2UgTW9kZShCTUhFTj0wKTogSWYgQUxFUlRFTihJMkNfQlVTQ1RMWzRdKSBpcyBjbGVhciwgdGhlIEFsZXJ0IHBpbiB3aWxsIHB1bGwgaGksIGFuZCByZXBseSBOQUNLIHdoZW4gZ2V0IEFSUCBmcm9tIGhvc3QKKyAqICAgICAgICAgICAgIEhvc3QgICBNb2RlKEJNSEVOPTEpOiBJZiBBTEVSVEVOKEkyQ19CVVNDVExbNF0pIGlzIGNsZWFyLCB0aGUgQWxlcnQgcGluIGlzIG5vdCBzdXBwb3J0ZWQgdG8gcmVjZWl2ZSBhbGVydCBzdGF0ZShMbyB0cmlnZ2VyKQorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfRElTQUJMRV9BTEVSVChpMmMpICgoaTJjKS0+QlVTQ1RMICY9IH5JMkNfQlVTQ1RMX0FMRVJURU5fTXNrKQorCisvKioKKyAqIEBicmllZiAgICAgIFNldCBTTUJ1cyBTVVNDT04gcGluIGlzIG91dHB1dCBtb2RlCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gdG8gc2V0IFNVU0NPTihJMkNfQlVTQ1RMWzZdKSBwaW4gaXMgb3V0cHV0IG1vZGUuCisgKgorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfU0VUX1NVU0NPTl9PVVQoaTJjKSAgICgoaTJjKS0+QlVTQ1RMIHw9IEkyQ19CVVNDVExfU0NUTE9FTl9Nc2spCisKKy8qKgorICogQGJyaWVmICAgICAgU2V0IFNNQnVzIFNVU0NPTiBwaW4gaXMgaW5wdXQgbW9kZQorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHRvIHNldCBTVVNDT04oSTJDX0JVU0NUTFs2XSkgcGluIGlzIGlucHV0IG1vZGUuCisgKgorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfU0VUX1NVU0NPTl9JTihpMmMpICAgKChpMmMpLT5CVVNDVEwgJj0gfkkyQ19CVVNDVExfU0NUTE9FTl9Nc2spCisKKy8qKgorICogQGJyaWVmICAgICAgU2V0IFNNQnVzIFNVU0NPTiBwaW4gb3V0cHV0IGhpZ2ggc3RhdGUKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB0byBzZXQgU1VTQ09OKEkyQ19CVVNDVExbNl0pIHBpbiBpcyBvdXRwdXQgaGkgc3RhdGUuCisgKgorICovCisjZGVmaW5lIEkyQ19TTUJVU19TRVRfU1VTQ09OX0hJR0goaTJjKSAgICgoaTJjKS0+QlVTQ1RMIHw9IEkyQ19CVVNDVExfU0NUTE9TVFNfTXNrKQorCisKKy8qKgorICogQGJyaWVmICAgICAgU2V0IFNNQnVzIFNVU0NPTiBwaW4gb3V0cHV0IGxvdyBzdGF0ZQorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHRvIHNldCBTVVNDT04oSTJDX0JVU0NUTFs2XSkgcGluIGlzIG91dHB1dCBsbyBzdGF0ZS4KKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1NFVF9TVVNDT05fTE9XKGkyYykgICAoKGkyYyktPkJVU0NUTCAmPSB+STJDX0JVU0NUTF9TQ1RMT1NUU19Nc2spCisKKy8qKgorICogQGJyaWVmICAgICAgRW5hYmxlIFNNQnVzIEFja25vd2xlZGdlIGNvbnRyb2wgYnkgbWFudWFsCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoZSA5dGggYml0IGNhbiByZXNwb25zZSB0aGUgQUNLIG9yIE5BQ0sgYWNjb3JkaW5nIHRoZSByZWNlaXZlZCBkYXRhIGJ5IHVzZXIuIFdoZW4gdGhlIGJ5dGUgaXMgcmVjZWl2ZWQsIFNDTEsgbGluZSBzdHJldGNoaW5nIHRvIGxvdyBiZXR3ZWVuIHRoZSA4dGggYW5kIDl0aCBTQ0xLIHB1bHNlLgorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfQUNLX01BTlVBTChpMmMpICAgKChpMmMpLT5CVVNDVEwgfD0gSTJDX0JVU0NUTF9BQ0tNRU5fTXNrKQorCisvKioKKyAqIEBicmllZiAgICAgIERpc2FibGUgU01CdXMgQWNrbm93bGVkZ2UgY29udHJvbCBieSBtYW51YWwKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgRGlzYWJsZSBhY2tub3dsZWRnZSByZXNwb25zZSBjb250cm9sIGJ5IHVzZXIuCisgKgorICovCisjZGVmaW5lIEkyQ19TTUJVU19BQ0tfQVVUTyhpMmMpICAgKChpMmMpLT5CVVNDVEwgJj0gfkkyQ19CVVNDVExfQUNLTUVOX01zaykKKworLyoqCisgKiBAYnJpZWYgICAgICBFbmFibGUgU01CdXMgQWNrbm93bGVkZ2UgbWFudWFsIGludGVycnVwdAorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIFNNQlVTIGFja25vd2xlZGdlIG1hbnVhbCBpbnRlcnJ1cHQgb24gdGhlIDl0aCBjbG9jayBjeWNsZSB3aGVuIFNNQlVTPTEgYW5kIEFDS01FTj0xCisgKgorICovCisjZGVmaW5lIEkyQ19TTUJVU185VEhCSVRfSU5UX0VOQUJMRShpMmMpICAgKChpMmMpLT5CVVNDVEwgfD0gSTJDX0JVU0NUTF9BQ0tNOVNJX01zaykKKworLyoqCisgKiBAYnJpZWYgICAgICBEaXNhYmxlIFNNQnVzIEFja25vd2xlZGdlIG1hbnVhbCBpbnRlcnJ1cHQKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgU01CVVMgYWNrbm93bGVkZ2UgbWFudWFsIGludGVycnVwdCBvbiB0aGUgOXRoIGNsb2NrIGN5Y2xlIHdoZW4gU01CVVM9MSBhbmQgQUNLTUVOPTEKKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTXzlUSEJJVF9JTlRfRElTQUJMRShpMmMpICAgKChpMmMpLT5CVVNDVEwgJj0gfkkyQ19CVVNDVExfQUNLTTlTSV9Nc2spCisKKy8qKgorICogQGJyaWVmICAgICAgRW5hYmxlIFNNQnVzIFBFQyBjbGVhciBhdCBSRVBFQVQgU1RBUlQKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgY29uZGl0aW9uIG9mIFJFQUVBVCBTVEFSVCBjYW4gY2xlYXIgdGhlIFBFQyBjYWxjdWxhdGlvbi4KKyAqCisgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1JTVF9QRUNfQVRfU1RBUlRfRU5BQkxFKGkyYykgICAoKGkyYyktPkJVU0NUTCB8PSBJMkNfQlVTQ1RMX1BFQ0NMUl9Nc2spCisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBTTUJ1cyBQRUMgY2xlYXIgYXQgUmVwZWF0IFNUQVJUCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHRoZSBjb25kaXRpb24gb2YgUmVwZWF0IFNUQVJUIGNhbiBjbGVhciB0aGUgUEVDIGNhbGN1bGF0aW9uLgorICoKKyAqLworI2RlZmluZSBJMkNfU01CVVNfUlNUX1BFQ19BVF9TVEFSVF9ESVNBQkxFKGkyYykgICAoKGkyYyktPkJVU0NUTCAmPSB+STJDX0JVU0NUTF9QRUNDTFJfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUlggUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBpMmMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMkMgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IFJYUERNQUVOIGJpdCBvZiBJMkNfQ1RMMSByZWdpc3RlciB0byBlbmFibGUgUlggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgSTJDX0VOQUJMRV9SWF9QRE1BKGkyYykgICAoKGkyYyktPkNUTDEgfD0gSTJDX0NUTDFfUlhQRE1BRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgVFggUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBpMmMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMkMgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IFRYUERNQUVOIGJpdCBvZiBJMkNfQ1RMMSByZWdpc3RlciB0byBlbmFibGUgVFggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgSTJDX0VOQUJMRV9UWF9QRE1BKGkyYykgICAoKGkyYyktPkNUTDEgfD0gSTJDX0NUTDFfVFhQRE1BRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFJYIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgaTJjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJDIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFJYUERNQUVOIGJpdCBvZiBJMkNfQ1RMMSByZWdpc3RlciB0byBkaXNhYmxlIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEkyQ19ESVNBQkxFX1JYX1BETUEoaTJjKSAgICgoaTJjKS0+Q1RMMSAmPSB+STJDX0NUTDFfUlhQRE1BRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFRYIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgaTJjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJDIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFRYUERNQUVOIGJpdCBvZiBJMkNfQ1RMMSByZWdpc3RlciB0byBkaXNhYmxlIFRYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIEkyQ19ESVNBQkxFX1RYX1BETUEoaTJjKSAgICgoaTJjKS0+Q1RMMSAmPSB+STJDX0NUTDFfVFhQRE1BRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUERNQSBzdHJldGNoIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIGkyYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyQyBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBFbmFibGUgdGhpcyBmdW5jdGlvbiBpcyB0byBzdHJldGNoIGJ1cyBieSBoYXJkd2FyZSBhZnRlciBQRE1BIHRyYW5zZmVyIGlzIGRvbmUgaWYgU0kgaXMgbm90IGNsZWFyZWQuCisgICovCisjZGVmaW5lIEkyQ19FTkFCTEVfUERNQV9TVFJFVENIKGkyYykgICAoKGkyYyktPkNUTDEgfD0gSTJDX0NUTDFfUERNQVNUUl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUERNQSBzdHJldGNoIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIGkyYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyQyBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBJMkMgd2lsIHNlbmQgU1RPUCBhZnRlciBQRE1BIHRyYW5zZmVycyBkb25lIGF1dG9tYXRpY2FsbHkuCisgICovCisjZGVmaW5lIEkyQ19ESVNBQkxFX1BETUFfU1RSRVRDSChpMmMpICAgKChpMmMpLT5DVEwxICY9IH5JMkNfQ1RMMV9QRE1BU1RSX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgUmVzZXQgUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBpMmMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMkMgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgSTJDIFBETUEgZW5naW5lIHdpbGwgYmUgcmVzZXQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgICovCisjZGVmaW5lIEkyQ19ESVNBQkxFX1JTVF9QRE1BKGkyYykgICAoKGkyYyktPkNUTDEgfD0gSTJDX0NUTDFfUERNQVJTVF9Nc2spCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIGlubGluZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBfX0lOTElORSB2b2lkIEkyQ19TVE9QKEkyQ19UICppMmMpOworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gc2V0IFNUT1AgY29uZGl0aW9uIG9mIEkyQyBCdXMKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIGkyYyAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgU2V0IHRoZSBJMkMgYnVzIFNUT1AgY29uZGl0aW9uIGluIEkyQ19DVEwgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBfX0lOTElORSB2b2lkIEkyQ19TVE9QKEkyQ19UICppMmMpCit7CisKKyAgICAoaTJjKS0+Q1RMMCB8PSAoSTJDX0NUTDBfU0lfTXNrIHwgSTJDX0NUTDBfU1RPX01zayk7CisgICAgd2hpbGUoaTJjLT5DVEwwICYgSTJDX0NUTDBfU1RPX01zaykge30KK30KKworCit2b2lkIEkyQ19DbGVhclRpbWVvdXRGbGFnKEkyQ19UICppMmMpOwordm9pZCBJMkNfQ2xvc2UoSTJDX1QgKmkyYyk7Cit2b2lkIEkyQ19UcmlnZ2VyKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTdGFydCwgdWludDhfdCB1OFN0b3AsIHVpbnQ4X3QgdThTaSwgdWludDhfdCB1OEFjayk7Cit2b2lkIEkyQ19EaXNhYmxlSW50KEkyQ19UICppMmMpOwordm9pZCBJMkNfRW5hYmxlSW50KEkyQ19UICppMmMpOwordWludDMyX3QgSTJDX0dldEJ1c0Nsb2NrRnJlcShJMkNfVCAqaTJjKTsKK3VpbnQzMl90IEkyQ19HZXRJbnRGbGFnKEkyQ19UICppMmMpOwordWludDMyX3QgSTJDX0dldFN0YXR1cyhJMkNfVCAqaTJjKTsKK3VpbnQzMl90IEkyQ19PcGVuKEkyQ19UICppMmMsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKTsKK3VpbnQ4X3QgSTJDX0dldERhdGEoSTJDX1QgKmkyYyk7Cit2b2lkIEkyQ19TZXRTbGF2ZUFkZHIoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlTm8sIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThHQ01vZGUpOwordm9pZCBJMkNfU2V0U2xhdmVBZGRyTWFzayhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVObywgdWludDhfdCB1OFNsYXZlQWRkck1hc2spOwordWludDMyX3QgSTJDX1NldEJ1c0Nsb2NrRnJlcShJMkNfVCAqaTJjLCB1aW50MzJfdCB1MzJCdXNDbG9jayk7Cit2b2lkIEkyQ19FbmFibGVUaW1lb3V0KEkyQ19UICppMmMsIHVpbnQ4X3QgdThMb25nVGltZW91dCk7Cit2b2lkIEkyQ19EaXNhYmxlVGltZW91dChJMkNfVCAqaTJjKTsKK3ZvaWQgSTJDX0VuYWJsZVdha2V1cChJMkNfVCAqaTJjKTsKK3ZvaWQgSTJDX0Rpc2FibGVXYWtldXAoSTJDX1QgKmkyYyk7Cit2b2lkIEkyQ19TZXREYXRhKEkyQ19UICppMmMsIHVpbnQ4X3QgdThEYXRhKTsKK3VpbnQ4X3QgSTJDX1dyaXRlQnl0ZShJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YSk7Cit1aW50MzJfdCBJMkNfV3JpdGVNdWx0aUJ5dGVzKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgYXU4RGF0YVtdLCB1aW50MzJfdCB1MzJ3TGVuKTsKK3VpbnQ4X3QgSTJDX1dyaXRlQnl0ZU9uZVJlZyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YUFkZHIsIHVpbnQ4X3QgdThEYXRhKTsKK3VpbnQzMl90IEkyQ19Xcml0ZU11bHRpQnl0ZXNPbmVSZWcoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90IGF1OERhdGFbXSwgdWludDMyX3QgdTMyd0xlbik7Cit1aW50OF90IEkyQ19Xcml0ZUJ5dGVUd29SZWdzKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQxNl90IHUxNkRhdGFBZGRyLCB1aW50OF90IHU4RGF0YSk7Cit1aW50MzJfdCBJMkNfV3JpdGVNdWx0aUJ5dGVzVHdvUmVncyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkciwgdWludDhfdCBhdThEYXRhW10sIHVpbnQzMl90IHUzMndMZW4pOwordWludDhfdCBJMkNfUmVhZEJ5dGUoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkcik7Cit1aW50MzJfdCBJMkNfUmVhZE11bHRpQnl0ZXMoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCBhdThSZGF0YVtdLCB1aW50MzJfdCB1MzJyTGVuKTsKK3VpbnQ4X3QgSTJDX1JlYWRCeXRlT25lUmVnKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkcik7Cit1aW50MzJfdCBJMkNfUmVhZE11bHRpQnl0ZXNPbmVSZWcoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90IGF1OFJkYXRhW10sIHVpbnQzMl90IHUzMnJMZW4pOwordWludDhfdCBJMkNfUmVhZEJ5dGVUd29SZWdzKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQxNl90IHUxNkRhdGFBZGRyKTsKK3VpbnQzMl90IEkyQ19SZWFkTXVsdGlCeXRlc1R3b1JlZ3MoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIsIHVpbnQ4X3QgYXU4UmRhdGFbXSwgdWludDMyX3QgdTMyckxlbik7Cit1aW50MzJfdCBJMkNfU01CdXNHZXRTdGF0dXMoSTJDX1QgKmkyYyk7Cit2b2lkIEkyQ19TTUJ1c0NsZWFySW50ZXJydXB0RmxhZyhJMkNfVCAqaTJjLCB1aW50OF90IHU4Q2xyU01CdXNJbnRGbGFnKTsKK3ZvaWQgSTJDX1NNQnVzU2V0UGFja2V0Qnl0ZUNvdW50KEkyQ19UICppMmMsIHVpbnQzMl90IHUzMlBrdFNpemUpOwordm9pZCBJMkNfU01CdXNPcGVuKEkyQ19UICppMmMsIHVpbnQ4X3QgdThIb3N0RGV2aWNlKTsKK3ZvaWQgSTJDX1NNQnVzQ2xvc2UoSTJDX1QgKmkyYyk7Cit2b2lkIEkyQ19TTUJ1c1BFQ1R4RW5hYmxlKEkyQ19UICppMmMsIHVpbnQ4X3QgdThQRUNUeEVuKTsKK3VpbnQ4X3QgSTJDX1NNQnVzR2V0UEVDVmFsdWUoSTJDX1QgKmkyYyk7Cit2b2lkIEkyQ19TTUJ1c0lkbGVUaW1lb3V0KEkyQ19UICppMmMsIHVpbnQzMl90IHUzMlVzLCB1aW50MzJfdCB1MzJIY2xrKTsKK3ZvaWQgSTJDX1NNQnVzVGltZW91dChJMkNfVCAqaTJjLCB1aW50MzJfdCBtcywgdWludDMyX3QgdTMyUGNsayk7Cit2b2lkIEkyQ19TTUJ1c0Nsb2NrTG9UaW1lb3V0KEkyQ19UICppMmMsIHVpbnQzMl90IG1zLCB1aW50MzJfdCB1MzJQY2xrKTsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBJMkNfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgSTJDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvaTJzLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWU4ZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvaTJzLmgKQEAgLTAsMCArMSwzNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGkycy5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgSTJTIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSTJTX0hfXworI2RlZmluZSBfX0kyU19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEkyU19Ecml2ZXIgSTJTIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEkyU19FWFBPUlRFRF9DT05TVEFOVFMgSTJTIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKworI2RlZmluZSBJMlNfREFUQUJJVF84ICAgICAgICAgICAoMFVMIDw8IEkyU19DVEwwX0RBVFdJRFRIX1BvcykgICAgICAgLyohPCBJMlMgZGF0YSB3aWR0aCBpcyA4LWJpdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfREFUQUJJVF8xNiAgICAgICAgICAoMVVMIDw8IEkyU19DVEwwX0RBVFdJRFRIX1BvcykgICAgICAgLyohPCBJMlMgZGF0YSB3aWR0aCBpcyAxNi1iaXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0RBVEFCSVRfMjQgICAgICAgICAgKDJVTCA8PCBJMlNfQ1RMMF9EQVRXSURUSF9Qb3MpICAgICAgIC8qITwgSTJTIGRhdGEgd2lkdGggaXMgMjQtYml0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19EQVRBQklUXzMyICAgICAgICAgICgzVUwgPDwgSTJTX0NUTDBfREFUV0lEVEhfUG9zKSAgICAgICAvKiE8IEkyUyBkYXRhIHdpZHRoIGlzIDMyLWJpdCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiBBdWRpbyBGb3JtYXQgKi8KKyNkZWZpbmUgSTJTX0VOQUJMRV9NT05PICAgICAgICAgSTJTX0NUTDBfTU9OT19Nc2sgICAgICAgICAgICAgICAgICAgIC8qITwgTW9ubyBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19ESVNBQkxFX01PTk8gICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0ZXJlbyBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qIEkyUyBEYXRhIEZvcm1hdCAqLworI2RlZmluZSBJMlNfRk9STUFUX0kyUyAgICAgICAgICAoMFVMIDw8IEkyU19DVEwwX0ZPUk1BVF9Qb3MpICAgICAgICAgLyohPCBJMlMgZGF0YSBmb3JtYXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZPUk1BVF9JMlNfTVNCICAgICAgKDFVTCA8PCBJMlNfQ1RMMF9GT1JNQVRfUG9zKSAgICAgICAgIC8qITwgSTJTIE1TQiBkYXRhIGZvcm1hdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRk9STUFUX0kyU19MU0IgICAgICAoMlVMIDw8IEkyU19DVEwwX0ZPUk1BVF9Qb3MpICAgICAgICAgLyohPCBJMlMgTFNCIGRhdGEgZm9ybWF0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GT1JNQVRfUENNICAgICAgICAgICg0VUwgPDwgSTJTX0NUTDBfRk9STUFUX1BvcykgICAgICAgICAvKiE8IFBDTSBkYXRhIGZvcm1hdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRk9STUFUX1BDTV9NU0IgICAgICAoNVVMIDw8IEkyU19DVEwwX0ZPUk1BVF9Qb3MpICAgICAgICAgLyohPCBQQ00gTVNCIGRhdGEgZm9ybWF0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GT1JNQVRfUENNX0xTQiAgICAgICg2VUwgPDwgSTJTX0NUTDBfRk9STUFUX1BvcykgICAgICAgICAvKiE8IFBDTSBMU0IgZGF0YSBmb3JtYXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyogSTJTIERhdGEgRm9ybWF0ICovCisjZGVmaW5lIEkyU19PUkRFUl9BVF9NU0IgICAgICAgIDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENoYW5uZWwgZGF0YSBpcyBhdCBNU0IgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX09SREVSX0FUX0xTQiAgICAgICAgSTJTX0NUTDBfT1JERVJfTXNrICAgICAgICAgICAgICAgICAgIC8qITwgQ2hhbm5lbCBkYXRhIGlzIGF0IExTQiAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiBJMlMgVERNIENoYW5uZWwgTnVtYmVyICovCisjZGVmaW5lIEkyU19URE1fMkNIICAgICAgICAgICAgIDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVzZSBURE0gMiBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19URE1fNENIICAgICAgICAgICAgIDFVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVzZSBURE0gNCBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19URE1fNkNIICAgICAgICAgICAgIDJVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVzZSBURE0gNiBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19URE1fOENIICAgICAgICAgICAgIDNVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVzZSBURE0gOCBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qIEkyUyBURE0gQ2hhbm5lbCBXaWR0aCAqLworI2RlZmluZSBJMlNfVERNX1dJRFRIXzhCSVQgICAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBURE0gY2hhbm5lbCB3aXRjaCBpcyA4LWJpdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfVERNX1dJRFRIXzE2QklUICAgICAxVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBURE0gY2hhbm5lbCB3aXRjaCBpcyAxNi1iaXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX1RETV9XSURUSF8yNEJJVCAgICAgMlVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVERNIGNoYW5uZWwgd2l0Y2ggaXMgMjQtYml0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19URE1fV0lEVEhfMzJCSVQgICAgIDNVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRETSBjaGFubmVsIHdpdGNoIGlzIDMyLWJpdCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiBJMlMgVERNIFN5bmMgV2lkdGggKi8KKyNkZWZpbmUgSTJTX1RETV9TWU5DX09ORV9CQ0xLICAgICAgIDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVERNIHN5bmMgd2lkaHQgaXMgb25lIEJMQ0sgcGVyaW9kICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19URE1fU1lOQ19PTkVfQ0hBTk5FTCAgICAxVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRETSBzeW5jIHdpZGh0IGlzIG9uZSBjaGFubmVsIHBlcmlvZCAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiBJMlMgT3BlcmF0aW9uIG1vZGUgKi8KKyNkZWZpbmUgSTJTX01PREVfU0xBVkUgICAgICAgICAgSTJTX0NUTDBfU0xBVkVfTXNrICAgICAgICAgICAgICAgICAgIC8qITwgQXMgc2xhdmUgbW9kZSAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfTU9ERV9NQVNURVIgICAgICAgICAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBcyBtYXN0ZXIgbW9kZSAgXGhpZGVpbml0aWFsaXplciAqLworCisvKiBJMlMgRklGTyBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8wICAgIDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFggdGhyZXNob2xkIGlzIDAgd29yZCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzEgICAgKDFVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMSB3b3JkICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMiAgICAoMlVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAyIHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMyAgICAoM1VMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAzIHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfNCAgICAoNFVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyA0IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfNSAgICAoNVVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyA1IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfNiAgICAoNlVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyA2IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfNyAgICAoN1VMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyA3IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfOCAgICAoOFVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyA4IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfOSAgICAoOVVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyA5IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMTAgICAoMTBVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAxMCB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzExICAgKDExVUwgPDwgSTJTX0NUTDFfVFhUSF9Qb3MpICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMTEgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8xMiAgICgxMlVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgIC8qITwgVFggdGhyZXNob2xkIGlzIDEyIHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMTMgICAoMTNVTCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAxMyB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19UWF9MRVZFTF9XT1JEXzE0ICAgKDE0VUwgPDwgSTJTX0NUTDFfVFhUSF9Qb3MpICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMTQgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8xNSAgICgxNVVMIDw8IEkyU19DVEwxX1RYVEhfUG9zKSAgICAgIC8qITwgVFggdGhyZXNob2xkIGlzIDE1IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8xICAgIDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDEgd29yZCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzIgICAgKDFVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgMiB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzMgICAgKDJVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgMyB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzQgICAgKDNVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgNCB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzUgICAgKDRVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgNSB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzYgICAgKDVVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgNiB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzcgICAgKDZVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgNyB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzggICAgKDdVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgOCB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzkgICAgKDhVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgOSB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzEwICAgKDlVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgMTAgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8xMSAgICgxMFVMIDw8IEkyU19DVEwxX1JYVEhfUG9zKSAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDExIHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1JYX0xFVkVMX1dPUkRfMTIgICAoMTFVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAvKiE8IFJYIHRocmVzaG9sZCBpcyAxMiB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzEzICAgKDEyVUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgMTMgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8xNCAgICgxM1VMIDw8IEkyU19DVEwxX1JYVEhfUG9zKSAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDE0IHdvcmRzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19GSUZPX1JYX0xFVkVMX1dPUkRfMTUgICAoMTRVTCA8PCBJMlNfQ1RMMV9SWFRIX1BvcykgICAgICAvKiE8IFJYIHRocmVzaG9sZCBpcyAxNSB3b3JkcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBJMlNfRklGT19SWF9MRVZFTF9XT1JEXzE2ICAgKDE1VUwgPDwgSTJTX0NUTDFfUlhUSF9Qb3MpICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgMTYgd29yZHMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyogSTJTIFJlY29yZCBDaGFubmVsICovCisjZGVmaW5lIEkyU19NT05PX1JJR0hUICAgICAgICAgIDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlY29yZCBtb25vIHJpZ2h0IGNoYW5uZWwgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgSTJTX01PTk9fTEVGVCAgICAgICAgICAgSTJTX0NUTDBfUlhMQ0hfTXNrICAgICAgICAgICAgICAgICAgIC8qITwgUmVjb3JkIG1vbm8gbGVmdCBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qIEkyUyBDaGFubmVsICovCisjZGVmaW5lIEkyU19SSUdIVCAgICAgICAgICAgICAgIDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCByaWdodCBjaGFubmVsICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIEkyU19MRUZUICAgICAgICAgICAgICAgIDFVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCBsZWZ0IGNoYW5uZWwgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBJMlNfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIEkyU19FWFBPUlRFRF9GVU5DVElPTlMgSTJTIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSB6ZXJvIGNyb3NzIGRldGVjdCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDaE1hc2sgaXMgdGhlIG1hc2sgZm9yIGNoYW5uZWwgbnVtYmVyICh2YWxpZCB2YWx1ZSBpcyBmcm9tICgxfjgpLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIEkyU19FTkFCTEVfVFhfWkNEKEkyU19UICppMnMsIHVpbnQzMl90IHUzMkNoTWFzaykKK3sKKyAgICBpZigodTMyQ2hNYXNrID4gMFVMKSAmJiAodTMyQ2hNYXNrIDwgOVVMKSkKKyAgICB7CisgICAgICAgIGkycy0+Q1RMMSB8PSAoMVVMIDw8ICh1MzJDaE1hc2sgLSAxVUwpKTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSB6ZXJvIGNyb3NzIGRldGVjdCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDaE1hc2sgaXMgdGhlIG1hc2sgZm9yIGNoYW5uZWwgbnVtYmVyICh2YWxpZCB2YWx1ZSBpcyBmcm9tICgxfjgpLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIEkyU19ESVNBQkxFX1RYX1pDRChJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJDaE1hc2spCit7CisgICAgaWYoKHUzMkNoTWFzayA+IDBVTCkgJiYgKHUzMkNoTWFzayA8IDlVTCkpCisgICAgeworICAgICAgICBpMnMtPkNUTDEgJj0gfigxVUwgPDwgKHUzMkNoTWFzayAtIDFVTCkpOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgSTJTIFR4IERNQSBmdW5jdGlvbi4gSTJTIHJlcXVlc3RzIERNQSB0byB0cmFuc2ZlciBkYXRhIHRvIFR4IEZJRk8uCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0VOQUJMRV9UWERNQShpMnMpICAoIChpMnMpLT5DVEwwIHw9IEkyU19DVEwwX1RYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBJMlMgVHggRE1BIGZ1bmN0aW9uLiBJMlMgcmVxdWVzdHMgRE1BIHRvIHRyYW5zZmVyIGRhdGEgdG8gVHggRklGTy4KKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBub25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfRElTQUJMRV9UWERNQShpMnMpICggKGkycyktPkNUTDAgJj0gfkkyU19DVEwwX1RYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEkyUyBSeCBETUEgZnVuY3Rpb24uIEkyUyByZXF1ZXN0cyBETUEgdG8gdHJhbnNmZXIgZGF0YSBmcm9tIFJ4IEZJRk8uCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0VOQUJMRV9SWERNQShpMnMpICggKGkycyktPkNUTDAgfD0gSTJTX0NUTDBfUlhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIEkyUyBSeCBETUEgZnVuY3Rpb24uIEkyUyByZXF1ZXN0cyBETUEgdG8gdHJhbnNmZXIgZGF0YSBmcm9tIFJ4IEZJRk8uCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0RJU0FCTEVfUlhETUEoaTJzKSAoIChpMnMpLT5DVEwwICY9IH5JMlNfQ1RMMF9SWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBJMlMgVHggZnVuY3Rpb24gLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19FTkFCTEVfVFgoaTJzKSAoIChpMnMpLT5DVEwwIHw9IEkyU19DVEwwX1RYRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIEkyUyBUeCBmdW5jdGlvbiAuCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0RJU0FCTEVfVFgoaTJzKSAoIChpMnMpLT5DVEwwICY9IH5JMlNfQ1RMMF9UWEVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEkyUyBSeCBmdW5jdGlvbiAuCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0VOQUJMRV9SWChpMnMpICggKGkycyktPkNUTDAgfD0gSTJTX0NUTDBfUlhFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgSTJTIFJ4IGZ1bmN0aW9uIC4KKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBub25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfRElTQUJMRV9SWChpMnMpICggKGkycyktPkNUTDAgJj0gfkkyU19DVEwwX1JYRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBFbmFibGUgVHggTXV0ZSBmdW5jdGlvbiAuCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0VOQUJMRV9UWF9NVVRFKGkycykgICggKGkycyktPkNUTDAgfD0gSTJTX0NUTDBfTVVURV9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgVHggTXV0ZSBmdW5jdGlvbiAuCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0RJU0FCTEVfVFhfTVVURShpMnMpICggKGkycyktPkNUTDAgJj0gfkkyU19DVEwwX01VVEVfTXNrICkKKworLyoqCisgICogQGJyaWVmICBDbGVhciBUeCBGSUZPLiBJbnRlcm5hbCBwb2ludGVyIGlzIHJlc2V0IHRvIEZJRk8gc3RhcnQgcG9pbnQuCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX0NMUl9UWF9GSUZPKGkycykgKCAoaTJzKS0+Q1RMMCB8PSBJMlNfQ1RMMF9UWEZCQ0xSX01zayApCisKKy8qKgorICAqIEBicmllZiAgQ2xlYXIgUnggRklGTy4gSW50ZXJuYWwgcG9pbnRlciBpcyByZXNldCB0byBGSUZPIHN0YXJ0IHBvaW50LgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19DTFJfUlhfRklGTyhpMnMpICggKGkycyktPkNUTDAgfD0gSTJTX0NUTDBfUlhGQkNMUl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcmVjb3JkaW5nIHNvdXJjZSBjaGFubmVsIHdoZW4gbW9ubyBtb2RlIGlzIHVzZWQuCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2ggbGVmdCBvciByaWdodCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfTU9OT19MRUZUCisgICogICAgICAgICAgICAgICAgLSBccmVmIEkyU19NT05PX1JJR0hUCisgICogQHJldHVybiBub25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgSTJTX1NFVF9NT05PX1JYX0NIQU5ORUwoSTJTX1QgKmkycywgdWludDMyX3QgdTMyQ2gpCit7CisgICAgdTMyQ2ggPT0gSTJTX01PTk9fTEVGVCA/CisgICAgKGkycy0+Q1RMMCB8PSBJMlNfQ1RMMF9SWExDSF9Nc2spIDoKKyAgICAoaTJzLT5DVEwwICY9IH5JMlNfQ1RMMF9SWExDSF9Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgIFdyaXRlIGRhdGEgdG8gSTJTIFR4IEZJRk8uCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyRGF0YTogVGhlIGRhdGEgd3JpdHRlbiB0byBGSUZPLgorICAqIEByZXR1cm4gbm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX1dSSVRFX1RYX0ZJRk8oaTJzLCB1MzJEYXRhKSAgKCAoaTJzKS0+VFhGSUZPID0gKHUzMkRhdGEpICkKKworLyoqCisgICogQGJyaWVmICBSZWFkIFJ4IEZJRk8uCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gRGF0YSBpbiBSeCBGSUZPLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgSTJTX1JFQURfUlhfRklGTyhpMnMpICggKGkycyktPlJYRklGTyApCisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBpbnRlcnJ1cHQgZmxhZyBhY2NvcmRpbmcgdG8gdGhlIG1hc2sgcGFyYW1ldGVyLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgaXMgdGhlIG1hc2sgZm9yIHRoZSBhbGwgaW50ZXJydXB0IGZsYWdzLgorICAqIEByZXR1cm4gVGhlIG1hc2tlZCBiaXQgdmFsdWUgb2YgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfR0VUX0lOVF9GTEFHKGkycywgdTMyTWFzaykgKCAoaTJzKS0+U1RBVFVTMCAmICh1MzJNYXNrKSApCisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGludGVycnVwdCBmbGFnIGFjY29yZGluZyB0byB0aGUgbWFzayBwYXJhbWV0ZXIuCisgICogQHBhcmFtW2luXSBpMnMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBpcyB0aGUgbWFzayBmb3IgdGhlIGFsbCBpbnRlcnJ1cHQgZmxhZ3MuCisgICogQHJldHVybiBub25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfQ0xSX0lOVF9GTEFHKGkycywgdTMyTWFzaykgKCAoaTJzKS0+U1RBVFVTMCB8PSAodTMyTWFzaykgKQorCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgemVybyBjcm9zc2luZyBpbnRlcnJ1cHQgZmxhZyBhY2NvcmRpbmcgdG8gdGhlIG1hc2sgcGFyYW1ldGVyLgorICAqIEBwYXJhbVtpbl0gaTJzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgaXMgdGhlIG1hc2sgZm9yIHRoZSBhbGwgaW50ZXJydXB0IGZsYWdzLgorICAqIEByZXR1cm4gVGhlIG1hc2tlZCBiaXQgdmFsdWUgb2YgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfR0VUX1pDX0lOVF9GTEFHKGkycywgdTMyTWFzaykgKCAoaTJzKS0+U1RBVFVTMSAmICh1MzJNYXNrKSApCisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIHplcm8gY3Jvc3NpbmcgaW50ZXJydXB0IGZsYWcgYWNjb3JkaW5nIHRvIHRoZSBtYXNrIHBhcmFtZXRlci4KKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIGlzIHRoZSBtYXNrIGZvciB0aGUgYWxsIGludGVycnVwdCBmbGFncy4KKyAgKiBAcmV0dXJuIG5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIEkyU19DTFJfWkNfSU5UX0ZMQUcoaTJzLCB1MzJNYXNrKSAoIChpMnMpLT5TVEFUVVMxIHw9ICh1MzJNYXNrKSApCisKKy8qKgorICAqIEBicmllZiAgR2V0IHRyYW5zbWl0IEZJRk8gbGV2ZWwKKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBGSUZPIGxldmVsCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfR0VUX1RYX0ZJRk9fTEVWRUwoaTJzKSAoICgoKGkycyktPlNUQVRVUzEgJiBJMlNfU1RBVFVTMV9UWENOVF9Nc2spID4+IEkyU19TVEFUVVMxX1RYQ05UX1BvcykgJiAweEYgKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCByZWNlaXZlIEZJRk8gbGV2ZWwKKyAgKiBAcGFyYW1baW5dIGkycyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBGSUZPIGxldmVsCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBJMlNfR0VUX1JYX0ZJRk9fTEVWRUwoaTJzKSAoICgoKGkycyktPlNUQVRVUzEgJiBJMlNfU1RBVFVTMV9SWENOVF9Nc2spID4+IEkyU19TVEFUVVMxX1JYQ05UX1BvcykgJiAweEYgKQorCit1aW50MzJfdCBJMlNfT3BlbihJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJNYXN0ZXJTbGF2ZSwgdWludDMyX3QgdTMyU2FtcGxlUmF0ZSwgdWludDMyX3QgdTMyV29yZFdpZHRoLCB1aW50MzJfdCB1MzJNb25vRGF0YSwgdWludDMyX3QgdTMyRGF0YUZvcm1hdCk7Cit2b2lkIEkyU19DbG9zZShJMlNfVCAqaTJzKTsKK3ZvaWQgSTJTX0VuYWJsZUludChJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgSTJTX0Rpc2FibGVJbnQoSTJTX1QgKmkycywgdWludDMyX3QgdTMyTWFzayk7Cit1aW50MzJfdCBJMlNfRW5hYmxlTUNMSyhJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJCdXNDbG9jayk7Cit2b2lkIEkyU19EaXNhYmxlTUNMSyhJMlNfVCAqaTJzKTsKK3ZvaWQgSTJTX1NldEZJRk8oSTJTX1QgKmkycywgdWludDMyX3QgdTMyVHhUaHJlc2hvbGQsIHVpbnQzMl90IHUzMlJ4VGhyZXNob2xkKTsKK3ZvaWQgSTJTX0NvbmZpZ3VyZVRETShJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJDaGFubmVsV2lkdGgsIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMlN5bmNXaWR0aCk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBJMlNfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgSTJTX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19JMlNfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL21rcm9tbGliLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9ta3JvbWxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZjg0MDgKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9ta3JvbWxpYi5oCkBAIC0wLDAgKzEsMTEzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIE1LUk9NTGliLmgKKyAqIEB2ZXJzaW9uICBWMi4wMAorICogQGJyaWVmICAgIE1hc2tST00gbGlicmFyeSBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTUtST01fTElCX0hfXworI2RlZmluZSBfX01LUk9NX0xJQl9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIE1LUk9NX0RyaXZlciBNS1JPTSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBNS1JPTV9FWFBPUlRFRF9DT05TVEFOVFMgTUtST00gRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgU3RhdHVzIGFuZCBFcnJvciBDb2RlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBCTF9FUlJfVFRfQ0hFQ0sgICAgICAgICAweEYwRjAwMDAwVUwgICAgLyohPCBOb3QgYSBOb24tc2VjdXJlIHBhcmFtZXRlciAgICAgICAgICovCisjZGVmaW5lIEJMX0VSUl9QQVJBTUVURVIgICAgICAgIDB4RjBGMDAwMDFVTCAgICAvKiE8IEludmFsaWQgcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxfUEFSQU1fQUxJR04gICAgICAgICAgMHhGMEYwMDAwMlVMICAgIC8qITwgUGFyYW1ldGVyIGFsaWdubWVudCBlcnJvciAgICAgICAgICAqLworI2RlZmluZSBCTF9OT1RfRkxBU0hfQUREUiAgICAgICAweEYwRjAwMDAzVUwgICAgLyohPCBJbnZhbGlkIGZsYXNoIGFkZHJlc3MgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMX05PVF9TUkFNX0FERFIgICAgICAgIDB4RjBGMDAwMDRVTCAgICAvKiE8IEludmFsaWQgc3JhbSBhZGRyZXNzICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxfWE9NX05PVF9DT05GSUcgICAgICAgMHhGMEYwMDAwNVVMICAgIC8qITwgWE9NIGlzIG5vdCBjb25maWd1cmUgeWV0ICAgICAgICAgICAqLworI2RlZmluZSBCTF9YT01fSEFTX0NPTkZJRyAgICAgICAweEYwRjAwMDA2VUwgICAgLyohPCBYT00gaGFzIGJlZWVuIGNvbmZpZ3VyZWQgICAgICAgICAgICovCisjZGVmaW5lIEJMX1hPTV9IQVNfQUNUSVZFICAgICAgIDB4RjBGMDAwMDdVTCAgICAvKiE8IFhPTSBpcyBhY3RpdmVkICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxfWE9NX0JBU0VfRVJST1IgICAgICAgMHhGMEYwMDAwOFVMICAgIC8qITwgSW52YWxpZCBYT00gYmFzZSBhZGRyZXNzICAgICAgICAgICAqLworI2RlZmluZSBCTF9LUFJPTV9OT1RfRU5BQkxFICAgICAweEYwRjAwMDA5VUwgICAgLyohPCBLUFJPTSBpcyBub3QgZW5hYmxlZCB5ZXQgICAgICAgICAgICovCisjZGVmaW5lIEJMX0tQUk9NX0tFWV9GT1JCSUQgICAgIDB4RjBGMDAwMEFVTCAgICAvKiE8IEtQUk9NIGNvbXBhcmlzb24gaXMgZm9yYmlkZGVuICAgICAgKi8KKyNkZWZpbmUgQkxfS1BST01fS0VZX1VOTUFUQ0ggICAgMHhGMEYwMDAwQlVMICAgIC8qITwgS1BST00gY29tcGFyaXNvbiBpcyB1bm1hdGNoZWQgICAgICAqLworI2RlZmluZSBCTF9LUFJPTV9LRVlfTE9DS0VEICAgICAweEYwRjAwMDBDVUwgICAgLyohPCBLUFJPTSB3cml0ZS1wcm90ZWN0IGlzIGVuYWJsZWQgICAgICovCisjZGVmaW5lIEJMX0tQUk9NX1NFVF9GQUlMICAgICAgIDB4RjBGMDAwMEVVTCAgICAvKiE8IFNldCBLUFJPTSBrZXkgZmFpbCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxfSVNQX0NNRF9GQUlMICAgICAgICAgKC0xKSAgICAgICAgICAgIC8qITwgRk1DIGNvbW1hbmQgZmFpbCAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTF9GTEFTSF9BTExPTkUgICAgICAgICAweEExMUZGRkZGVUwgICAgLyohPCBDaGVjay1hbGwtb25lIHJlc3VsdCBpcyBhbGwgb25lICAgICovCisjZGVmaW5lIEJMX0ZMQVNIX05PVF9BTExPTkUgICAgIDB4QTExMDAwMDBVTCAgICAvKiE8IENoZWNrLWFsbC1vbmUgcmVzdWx0IGlzIG5vdCBhbGwgb25lKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBCTF9STkdfUFJORyAgICAgICAgICAgICAoMFVMKSAgIC8qITxVc2UgSC9XIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisjZGVmaW5lIEJMX1JOR19TV1JORyAgICAgICAgICAgICgxVUwpICAgLyohPFVzZSBTL1cgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyNkZWZpbmUgQkxfUk5HX0xJUkMzMksgICAgICAgICAgKDBVTCkgICAvKiE8VXNlIExJUkMzMiBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyNkZWZpbmUgQkxfUk5HX0xYVCAgICAgICAgICAgICAgKDJVTCkgICAvKiE8VXNlIExYVCBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyNkZWZpbmUgWFRSTkdfUFJORyAgICAgICAgICAgICAgKDBVTCkgICAvKiE8VXNlIEgvVyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworI2RlZmluZSBYVFJOR19TV1JORyAgICAgICAgICAgICAoMVVMKSAgIC8qITxVc2UgUy9XIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisjZGVmaW5lIFhUUk5HX0xJUkMzMksgICAgICAgICAgICgwVUwpICAgLyohPFVzZSBMSVJDMzIgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisjZGVmaW5lIFhUUk5HX0xYVCAgICAgICAgICAgICAgICgyVUwpICAgLyohPFVzZSBMWFQgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE1heGltdW0gU2VjdXJlSVNQIE1vZGUgVHJhbnNtaXQvUmVjZWl2ZSBQYWNrZXQgU2l6ZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgTUFYX1BLVF9TSVpFICAgICAgICAgICAgNjQKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBNS1JPTV9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgTUtST01fRVhQT1JURURfU1RSVUNUUyBNS1JPTSBFeHBvcnRlZCBTdHJ1Y3RzCisgIEB7CisqLworLyoqCisgICogQGRldGFpbHMgICAgUmFuZG9tIG51bWJlciBnZW5lcmF0b3Igc3RydWN0dXJlCisgICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90IG9wdDsgICAgICAgLyohPCBPcGVyYXRpb24gbW9kZSAqLworICAgIGludDMyX3QgZGF0YV9sZW47ICAgLyohPCBJbnRlcm5hbCB1c2UgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisgICAgdWludDhfdCBidWZbMzJdOyAgICAvKiE8IEludGVybmFsIHVzZSBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyAgICB1aW50OF90IGJ1ZjJbMjBdOyAgIC8qITwgSW50ZXJuYWwgdXNlIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworfSBCTF9STkdfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCBvcHQ7ICAgICAgIC8qITwgT3BlcmF0aW9uIG1vZGUgKi8KKyAgICBpbnQzMl90IGRhdGFfbGVuOyAgIC8qITwgSW50ZXJuYWwgdXNlIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworICAgIHVpbnQ4X3QgYnVmWzMyXTsgICAgLyohPCBJbnRlcm5hbCB1c2UgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisgICAgdWludDhfdCBidWYyWzIwXTsgICAvKiE8IEludGVybmFsIHVzZSBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KK30gWFRSTkdfVDsKKworCisvKioKKyAgKiBAZGV0YWlscyAgICBYQ1JQVF9UIGlzIHN0cnVjdHVyZSBmb3IgYWNjZXNzIE1LUk9NIENyeXB0byBsaWJyYXJ5CisgICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIENSUFRfVCAgICAgICpjcnB0OyAgICAgICAvKiE8IFRoZSBwb2ludGVyIG9mIHRoZSBDUllQVE8gbW9kdWxlICovCisgICAgRUNDX0NVUlZFICAgKnBDdXJ2ZTsgICAgIC8qITwgSW50ZXJuYWwgdXNlIGZvciBFQ0MgKi8KKyAgICBFQ0NfQ1VSVkUgICBDdXJ2ZV9Db3B5OyAgLyohPCBJbnRlcm5hbCB1c2UgZm9yIEVDQyAqLworICAgIHVpbnQzMl90ICAgIEFFU19DVExbNF07ICAvKiE8IEFFUyBjaGFubmVsIHNlbGVjdGlvbiAqLworICAgIHVpbnQzMl90ICAgIFRERVNfQ1RMWzRdOyAvKiE8IFRERVMgY2hhbm5lbCBzZWxlY3Rpb24gKi8KK30gWENSUFRfVDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIERlZmluZSBhIGdsb2JhbCBjb25zdGFudCBYQ1JQVCBhcyB0aGUgYWNjZXNzIGFkZHJlc3Mgb2YgZ194Y3JwdGEgZm9yIHVzaW5nIE1LUk9NIENyeXB0byBsaWJyYXJ5LiAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZXh0ZXJuIFhDUlBUX1QgZ194Y3JwdDsKKyNkZWZpbmUgWENSUFQgKCZnX3hjcnB0KQorCisKKy8qKgorICAqIEBkZXRhaWxzICAgIENvbW1hbmQgcGFja2V0IHN0cnVjdHVyZSBmb3IgdHJhbnNtaXQvcmVjZWl2ZSBkYXRhIGluIFNlY3VyZUlTUCBmdW5jdGlvbgorICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBXb3JkLTAgKi8KKyAgICB1aW50MTZfdCAgICAgICAgdTE2Q1JDMTY7ICAgICAgIC8qIENSQzE2IGNoZWNrc3VtIG9mIGZyb20gdThDbWRJRCB0byBXb3JkLTEzICovCisgICAgdWludDE2X3QgICAgICAgIHUxNkNtZElEOyAgICAgICAvKiBDb21tYW5kIElEICovCisKKyAgICAvKiBXb3JkLTEgKi8KKyAgICB1aW50MTZfdCAgICAgICAgdTE2UGFja2V0SUQ7ICAgIC8qIFBhY2tldCBJRCAqLworICAgIHVpbnQxNl90ICAgICAgICB1MTZMZW47ICAgICAgICAgLyogVmFsaWQgZGF0YSBsZW5ndGggaW4gY29tbWFuZCBkYXRhIGZpZWxkICovCisKKyAgICAvKiBXb3JkLTIgfiAxMyAqLworICAgIHVpbnQzMl90ICAgICAgICBhdTMyRGF0YVsxMl07ICAgLyogRGF0YSBmaWVsZHMgKi8KKworICAgIC8qIFdvcmQtMTQgKi8KKyAgICB1aW50MzJfdCAgICAgICAgdTMyQ1JDMzI7ICAgICAgIC8qIENSQzMyIGZyb20gV29yZC0wIHRvIFdvcmQtMTMgZm9yIGNoZWNrIGNtZCBpbnRlZ3JpdHkgKi8KKworICAgIC8qIFdvcmQtMTUgKi8KKyAgICB1aW50MzJfdCAgICAgICAgUlNWRDsgICAgICAgICAgIC8qIFJlc2VydmVkICovCisKK30gQ01EX1BBQ0tFVF9UOworCisKKy8qKgorICAqIEBkZXRhaWxzICAgIEVDQyBwdWJsaWMga2V5IHN0cnVjdHVyZQorICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCAgICAgICAgYXUzMktleTBbOF07ICAgIC8qIDI1Ni1iaXRzICovCisgICAgdWludDMyX3QgICAgICAgIGF1MzJLZXkxWzhdOyAgICAvKiAyNTYtYml0cyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBFQ0NfUFVCS0VZX1Q7CisKKworLyoqCisgICogQGRldGFpbHMgICAgRUNDIEVDRFNBIHNpZ25hdHVyZSBzdHJ1Y3R1cmUKKyAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgICAgICAgIGF1MzJSWzhdOyAgIC8qIDI1Ni1iaXRzICovCisgICAgdWludDMyX3QgICAgICAgIGF1MzJTWzhdOyAgIC8qIDI1Ni1iaXRzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIEVDRFNBX1NJR05fVDsKKworCisvKioKKyAgKiBAZGV0YWlscyAgICBTZWN1cmVJU1Agb3BlcmF0aW9uIG1vZGUgZW51bWVyYXRlCisgICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBVU0JfTU9ERSAgICAgICAgPSAweDEsCisgICAgVUFSVF9NT0RFICAgICAgID0gMHgyLAorICAgIFVTQl9VQVJUX01PREUgICA9IDB4MywKKyAgICBSRVNZTkNfSVNQICAgICAgPSAweDgwLCAvKiBUbyBzZXQgU2VjdXJlSVNQIGluIHdhaXRpbmcgY29ubmVjdGlvbiBzdGF0ZSAqLworfSBFX0lTUF9NT0RFOworCisKKy8qKgorICAqIEBkZXRhaWxzICAgIEdsb2JhbCBJU1AgaW5mb3JtYXRpb24gZGF0YSBmb3IgcGVyZm9ybSBTZWN1cmVJU1AgZnVuY3Rpb24KKyAgKi8KK3R5cGVkZWYgdm9pZCAoKklTUENhbGxiYWNrKSh1aW50MzJfdCAqcHUzMkJ1ZiwgdWludDMyX3QgdTMyRGF0YSk7Cit0eXBlZGVmIHZvaWQgKCpVU0JERVBGdW5jKSh2b2lkKTsKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgICAgICAgIHUzMkNtZE1hc2s7ICAgICAgICAgLyogRGlzYWJsZSB0aGUgc3BlY2lmeSBjb21tYW5kIGluIFNlY3VyZUlTUCAqLworCisgICAgdWludDMyX3QgICAgICAgIGF1MzJBRVNLZXlbOF07ICAgICAgLyogQUVTLTI1NiBrZXlzICovCisgICAgdWludDMyX3QgICAgICAgIGF1MzJBRVNJVls0XTsgICAgICAgLyogQUVTIElWLCAxMjgtYml0cyAqLworCisgICAgRUNDX1BVQktFWV9UICAgIENsaWVudFB1YktleTsgICAgICAgLyogQ2xpZW50J3MgRUNDIHB1YmxpYyBrZXksIDY0LWJ5dGVzICgyNTYtYml0cyArIDI1Ni1iaXRzKSAqLworICAgIEVDQ19QVUJLRVlfVCAgICBTZXJ2ZXJQdWJLZXk7ICAgICAgIC8qIFNlcnZlcidzIEVDQyBwdWJsaWMga2V5LCA2NC1ieXRlcyAoMjU2LWJpdHMgKyAyNTYtYml0cykgKi8KKworICAgIEVDRFNBX1NJR05fVCAgICBzaWduOyAgICAgICAgICAgICAgIC8qIDY0LWJ5dGVzICgyNTYtYml0cyBSICsgMjU2LWJpdHMgUykgKi8KKworICAgIHVpbnQzMl90ICAgICAgICBJc0Nvbm5lY3RPSzsgICAgICAgIC8qIEludGVybmFsIHVzZSBpbiBTZWN1cmVJU1AgKi8KKyAgICB1aW50MzJfdCAgICAgICAgdGltZW91dDsgICAgICAgICAgICAvKiBUaW1lb3V0IHBlcmlvZCBmb3IgY29ubmVjdGluZyB0byBTZWN1cmVJU1AgVG9vbCAqLworCisgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg0KSkpIHVpbnQ4X3QgcmN2YnVmW01BWF9QS1RfU0laRV07IC8qIEludGVybmFsIHVzZSBpbiBTZWN1cmVJU1AgKi8KKyAgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSkgdWludDhfdCByc3BidWZbTUFYX1BLVF9TSVpFXTsgLyogSW50ZXJuYWwgdXNlIGluIFNlY3VyZUlTUCAqLworCisgICAgVVNCREVQRnVuYyAgICAgIHBmblVTQkRFUFtVU0JEX01BWF9FUF07IC8qIEludGVybmFsIHVzZSBpbiBTZWN1cmVJU1AgKi8KKyAgICB1aW50MzJfdCAgICAgICAgSXNVU0JEYXRhUmVhZHk7ICAgICAvKiBJbnRlcm5hbCB1c2UgaW4gU2VjdXJlSVNQICovCisKKyAgICB1aW50MzJfdCAgICAgICAgVUFSVENsb2NrRnJlcTsgICAgICAvKiBVQVJUIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIHVpbnQzMl90ICAgICAgICBVQVJURGF0YUlkeDsgICAgICAgIC8qIEludGVybmFsIHVzZSBpbiBTZWN1cmVJU1AgKi8KKyAgICB1aW50MzJfdCAgICAgICAgSXNVQVJURGF0YVJlYWR5OyAgICAvKiBJbnRlcm5hbCB1c2UgaW4gU2VjdXJlSVNQICovCisKKyAgICBJU1BDYWxsYmFjayAgICAgcGZuVmVuZG9yRnVuYzsgICAgICAvKiBWZW5kb3IgZnVuY3Rpb24gYWRkcmVzcyAqLworCisgICAgdWludDMyX3QgICAgICAgIHRtcDBbOF07ICAgICAgICAgICAgLyogSW50ZXJuYWwgdXNlIGluIFNlY3VyZUlTUCAqLworICAgIHVpbnQzMl90ICAgICAgICB0bXAxWzhdOyAgICAgICAgICAgIC8qIEludGVybmFsIHVzZSBpbiBTZWN1cmVJU1AgKi8KKworfSBJU1BfSU5GT19UOworCisKKy8qKgorICAqIEBkZXRhaWxzICAgIEdsb2JhbCBVU0JEIGRhdGEgZm9yIFNlY3VyZUlTUCBVU0IKKyAgICAgICAgVGhpcyBkYXRhIGlzIGludGVybmFsIHVzZSBpbiBTZWN1cmVJU1Agb3BlcmF0aW9uCisgICovCisjcHJhZ21hIHBhY2socHVzaCkKKyNwcmFnbWEgcGFjaygxKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90ICAgICAgICAgICAgIGdfdXNiZF9TZXR1cFBhY2tldFs4XTsKKyAgICB2b2xhdGlsZSB1aW50OF90ICAgIGdfdXNiZF9SZW1vdGVXYWtldXBFbjsKKyAgICB2b2xhdGlsZSB1aW50OF90ICAgIGdfdXNiZF91OFplcm9GbGFnOworCisgICAgdm9sYXRpbGUgdWludDhfdCAgICAqZ191c2JkX0N0cmxJblBvaW50ZXI7CisgICAgdm9sYXRpbGUgdWludDhfdCAgICAqZ191c2JkX0N0cmxPdXRQb2ludGVyOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICAgZ191c2JkX0N0cmxJblNpemU7CisgICAgdm9sYXRpbGUgdWludDMyX3QgICBnX3VzYmRfQ3RybE91dFNpemU7CisgICAgdm9sYXRpbGUgdWludDMyX3QgICBnX3VzYmRfQ3RybE91dFNpemVMaW1pdDsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAgIGdfdXNiZF9Vc2JBZGRyOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICAgZ191c2JkX1VzYkNvbmZpZzsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAgIGdfdXNiZF9DdHJsTWF4UGt0U2l6ZTsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAgIGdfdXNiZF9Vc2JBbHRJbnRlcmZhY2U7CisKKyAgICBTX1VTQkRfSU5GT19UICAgICAgICpnX3VzYmRfc0luZm87CisKKyAgICBWRU5ET1JfUkVRICAgICAgICAgIGdfdXNiZF9wZm5WZW5kb3JSZXF1ZXN0OworICAgIENMQVNTX1JFUSAgICAgICAgICAgZ191c2JkX3BmbkNsYXNzUmVxdWVzdDsKKyAgICBTRVRfSU5URVJGQUNFX1JFUSAgIGdfdXNiZF9wZm5TZXRJbnRlcmZhY2U7CisgICAgU0VUX0NPTkZJR19DQiAgICAgICBnX3VzYmRfcGZuU2V0Q29uZmlnQ2FsbGJhY2s7CisgICAgdWludDMyX3QgICAgICAgICAgICBnX3UzMkVwU3RhbGxMb2NrOworCit9IEJMX1VTQkRfSU5GT19UOworI3ByYWdtYSBwYWNrKHBvcCkKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBNS1JPTV9FWFBPUlRFRF9TVFJVQ1RTICovCisKKworLyoqIEBhZGR0b2dyb3VwIE1LUk9NX0VYUE9SVEVEX0ZVTkNUSU9OUyBCb290bG9hZGVyIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKy8qKgorICAqIEBicmllZiAgICAgIEdldCBNS1JPTSBWZXJzaW9uIE51bWJlcgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBWZXJzaW9uIG51bWJlciBvZiBNS1JPTQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIHdpbGwgcmV0dXJuIHRoZSBNS1JPTSB2ZXJzaW9uIG51bWJlci4KKyAgKi8KK3VpbnQzMl90IEJMX0dldFZlcnNpb24odm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEZNQyBJU1AgRnVuY3Rpb24gYW5kIHJldHVybiBtYXhpbXVtIEFQUk9NIHNpemUKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTWF4aW11bSBBUFJPTSBzaXplCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCB1bmxvY2sgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdCwgZW5hYmxlIHJlbGF0aXZlIHNldHRpbmdzIGZvciBhY2Nlc3MgRk1DIElTUCBjb21tYW5kcworICAqICAgICAgICAgICAgIGFuZCByZXR1cm4gbWF4aW11bSBBUFJPTSBieSBjaGlwIHBhY2thZ2UuCisgICovCit1aW50MzJfdCBCTF9FbmFibGVGTUModm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBGTUMgSVNQIEZ1bmN0aW9uCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIGRpc2FibGUgcmVsYXRpdmUgc2V0dGluZ3MgZm9yIGRpc2FibGUgRk1DIElTUCBmdW5jdGlvbiBhbmQgbG9jayByZWdpc3RlciB3cml0ZS1wcm90ZWN0CisgICogICAgICAgICAgICAgdW50aWwgbGFzdCBJU1Agb3BlcmF0aW9uIGlzIGZpbmlzaGVkLgorICAqLwordm9pZCBCTF9EaXNhYmxlRk1DKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBGTUMgSVNQIEJ1c3kgU3RhdHVzCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgICBJU1Agb3BlcmF0aW9uIGlzIGZpbmlzaGVkCisgICogQHJldHZhbCAgICAgMSAgIElTUCBvcGVyYXRpb24gaXMgaW4gcHJvY2Vzc2luZworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGluZGljYXRlcyBJU1Agb3BlcmF0aW9uIGluIGluIHByb2Nlc3Npbmcgb3IgZmluaXNoZWQuCisgICovCit1aW50MzJfdCBCTF9HZXRJU1BTdGF0dXModm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IE5vbi1zZWN1cmUgQm91bmRhcnkKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgQ3VycmVudCBOb24tc2VjdXJlIGJvdW5kYXJ5CisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgY2FuIGdldCBjdXJyZW50IE5vbi1zZWN1cmUgYm91bmRhcnkgYWRkcmVzcy4KKyAgKi8KK3VpbnQzMl90IEJMX0dldE5TQm91bmRhcnkodm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEFsbCBGbGFzaCBSZWdpb24gTG9jaworICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgIFNldCBmbGFzaCBhbGwgbG9jayBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFNldCBmbGFzaCBhbGwgbG9jayBvcGVyYXRpb24gaXMgc3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIHdpbGwgcHJvdGVjdCBhbGwgZmxhc2ggcmVnaW9uIHJlYWQvd3JpdGUgb3BlcmF0ZSBieSBJQ0UgaW50ZXJmYWNlLgorICAqLworaW50MzJfdCBCTF9TZXRGbGFzaEFsbExvY2sodm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBOb24tc2VjdXJlIEZsYXNoIEFkZHJlc3MgRGF0YSAoZm9yIE5vbi1zZWN1cmUgcmVnaW9uKQorICAqIEBwYXJhbVtpbl0gIHUzMk5TQWRkciAgIE5vbi1zZWN1cmUgZmxhc2ggYWRkcmVzcworICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDAgIHUzMk5TQWRkciBpc24ndCBpbiBOb24tc2VjdXJlIGFyZWEKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICB1MzJOU0FkZHIgaXNuJ3Qgd29yZCBhbGlnbmVkCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMyAgdTMyTlNBZGRyIGlzbid0IHZhbGlkIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICBGbGFzaCByZWFkIGZhaWxlZAorICAqIEByZXR2YWwgICAgIFRoZSBkYXRhIG9mIHNwZWNpZmllZCBOb24tc2VjdXJlIGFkZHJlc3MKKyAgKiBAZGV0YWlscyAgICBUbyByZWFkIHdvcmQgZGF0YSBmcm9tIHNwZWNpZmllZCBOb24tc2VjdXJlIGZsYXNoIGFkZHJlc3MuCisgICovCit1aW50MzJfdCBCTF9GbGFzaFJlYWQodWludDMyX3QgdTMyTlNBZGRyKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIE11bHRpLVdvcmQgRGF0YSBmcm9tIE5vbi1zZWN1cmUgRmxhc2ggQWRkcmVzcyAoZm9yIE5vbi1zZWN1cmUgcmVnaW9uKQorICAqIEBwYXJhbVtpbl0gIHUzMk5TQWRkciAgICAgICBTdGFydGluZyBOb24tc2VjdXJlIGZsYXNoIGFkZHJlc3MKKyAgKiBAcGFyYW1bb3V0XSBwdTMyTlNSYW1CdWYgICAgTm9uLXNlY3VyZSBzcmFtIGFkZHJlc3MgdG8gc3RvcmUgcmVhZGluZyBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyU2l6ZSAgICAgICAgIFRvdGFsIHJlYWQgYnl0ZSBjb3VudHMsIGl0IHNob3VsZCBiZSB3b3JkIGFsaWduZWQgYW5kIG1heGltdW0gc2l6ZSBpcyBvbmUgcGFnZSBzaXplLgorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDAgICAgICB1MzJOU0FkZHIgb3IgcHUzMk5TUmFtQnVmIHJlZ2lvbiBpc24ndCBpbiBOb24tc2VjdXJlIGFyZWEKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICAgICAgV3JvbmcgdTMyTlNBZGRyLCBwdTMyTlNSYW1CdWYgb3IgdTMyU2l6ZSBwYXJhbWV0ZXIKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAzICAgICAgdTMyTlNBZGRyIGlzbid0IHZhbGlkIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDA0ICAgICAgcHUzMk5TUmFtQnVmIGlzbid0IHZhbGlkIHNyYW0gYWRkcmVzcworICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgICAgICBNdWx0aS13b3JkcyByZWFkIGZhaWxlZAorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICBSZWFkIG9wZXJhdGlvbiBpcyBzdWNjZXNzCisgICogQGRldGFpbHMgICAgVG8gcmVhZCBtdWx0aS13b3JkcyBkYXRhIHN0YXJ0IGZyb20gc3BlY2lmaWVkIE5vbi1zZWN1cmUgZmxhc2ggYWRkcmVzcy4KKyAgKiAgICAgICAgICAgICBBbmQgbWF4aW11bSByZWFkIHNpemUgaXMgb25lIHBhZ2Ugc2l6ZSwgMjA0OCBieXRlcy4KKyAgKi8KK2ludDMyX3QgQkxfRmxhc2hNdWx0aVJlYWQodWludDMyX3QgdTMyTlNBZGRyLCB1aW50MzJfdCAqcHUzMk5TUmFtQnVmLCB1aW50MzJfdCB1MzJTaXplKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBQcm9ncmFtIERhdGEgaW50byBOb24tc2VjdXJlIEZsYXNoIEFkZHJlc3MgKGZvciBOb24tc2VjdXJlIHJlZ2lvbikKKyAgKiBAcGFyYW1baW5dICB1MzJOU0FkZHIgICBOb24tc2VjdXJlIGZsYXNoIGFkZHJlc3MKKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhICAgICAzMi1iaXQgRGF0YSB0byBwcm9ncmFtCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMCAgdTMyTlNBZGRyIGlzbid0IGluIE5vbi1zZWN1cmUgYXJlYQorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDEgIHUzMk5TQWRkciBpc24ndCB3b3JkIGFsaWduZWQKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAzICB1MzJOU0FkZHIgaXNuJ3QgdmFsaWQgZmxhc2ggYWRkcmVzcworICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgIEZsYXNoIHdyaXRlIGZhaWxlZAorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgIFByb2dyYW0gY29tbWFuZCBpcyBmaW5pc2hlZAorICAqIEBkZXRhaWxzICAgIFRvIHByb2dyYW0gd29yZCBkYXRhIGludG8gc3BlY2lmaWVkIE5vbi1zZWN1cmUgZmxhc2ggYWRkcmVzcy4KKyAgKi8KK2ludDMyX3QgQkxfRmxhc2hXcml0ZSh1aW50MzJfdCB1MzJOU0FkZHIsIHVpbnQzMl90IHUzMkRhdGEpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFByb2dyYW0gTXVsdGktV29yZCBEYXRhIGludG8gTm9uLXNlY3VyZSBGbGFzaCBBZGRyZXNzIChmb3IgTm9uLXNlY3VyZSByZWdpb24pCisgICogQHBhcmFtW2luXSAgdTMyTlNBZGRyICAgICAgIFN0YXJ0aW5nIE5vbi1zZWN1cmUgZmxhc2ggYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHB1MzJOU1JhbUJ1ZiAgICBOb24tc2VjdXJlIHNyYW0gYnVmZmVyIGFkZHJlc3MgdG8gc3RvcmUgcHJvZ3JhbSBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyU2l6ZSAgICAgICAgIFRvdGFsIHByb2dyYW0gYnl0ZSBjb3VudHMsIGl0IHNob3VsZCBiZSB3b3JkIGFsaWduZWQgYW5kIG1heGltdW0gc2l6ZSBpcyBvbmUgcGFnZSBzaXplLgorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDAgICAgICB1MzJOU0FkZHIgb3IgcHUzMk5TUmFtQnVmIHJlZ2lvbiBpc24ndCBpbiBOb24tc2VjdXJlIGFyZWEKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICAgICAgV3JvbmcgdTMyTlNBZGRyLCBwdTMyTlNSYW1CdWYgb3IgdTMyU2l6ZSBwYXJhbWV0ZXIKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAzICAgICAgdTMyTlNBZGRyIGlzbid0IHZhbGlkIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDA0ICAgICAgcHUzMk5TUmFtQnVmIGlzbid0IHZhbGlkIHNyYW0gYWRkcmVzcworICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgICAgICBNdWx0aS13b3JkcyB3cml0ZSBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgUHJvZ3JhbSBvcGVyYXRpb24gaXMgZmluaXNoZWQKKyAgKiBAZGV0YWlscyAgICBUbyBwcm9ncmFtIG11bHRpLXdvcmRzIGRhdGEgc3RhcnQgZnJvbSBzcGVjaWZpZWQgTm9uLXNlY3VyZSBmbGFzaCBhZGRyZXNzLgorICAqICAgICAgICAgICAgIEFuZCBtYXhpbXVtIHByb2dyYW0gc2l6ZSBpcyBvbmUgcGFnZSBzaXplLCAyMDQ4IGJ5dGVzLgorICAqLworaW50MzJfdCBCTF9GbGFzaE11bHRpV3JpdGUodWludDMyX3QgdTMyTlNBZGRyLCB1aW50MzJfdCAqcHUzMk5TUmFtQnVmLCB1aW50MzJfdCB1MzJTaXplKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBOb24tc2VjdXJlIEZsYXNoIFBhZ2UgRXJhc2UgKGZvciBOb24tc2VjdXJlIHJlZ2lvbikKKyAgKiBAcGFyYW1baW5dICB1MzJOU0FkZHIgICBOb24tc2VjdXJlIGZsYXNoIHJlZ2lvbiB0byBiZSBlcmFzZWQgYW5kIG11c3QgYmUgYSBwYWdlIHNpemUgYWxpZ25lZCBhZGRyZXNzLgorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDAgIHUzMk5TQWRkciByZWdpb24gaXNuJ3QgaW4gTm9uLXNlY3VyZSBhcmVhCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMSAgdTMyTlNBZGRyIGlzbid0IHBhZ2Ugc2l6ZSBhbGlnbmVkCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMyAgdTMyTlNBZGRyIGlzbid0IHZhbGlkIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICBQYWdlIGVyYXNlIGZhaWxlZAorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgIFBhZ2UgZXJhc2Ugc3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gcGVyZm9ybSBwYWdlIGVyYXNlIGNvbW1hbmQgb24gc3BlY2lmaWVkIE5vbi1zZWN1cmUgZmxhc2ggYWRkcmVzcy4KKyAgKiAgICAgICAgICAgICBBbmQgdGhpcyBhZGRyZXNzIG11c3QgYmUgYSBwYWdlIHNpemUgYWxpZ25lZCBhZGRyZXNzLgorICAqLworaW50MzJfdCBCTF9GbGFzaFBhZ2VFcmFzZSh1aW50MzJfdCB1MzJOU0FkZHIpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBOb24tc2VjdXJlIEZsYXNoIEFyZWEgQ1JDMzIgQ2hlY2tzdW0gKGZvciBOb24tc2VjdXJlIHJlZ2lvbikKKyAgKiBAcGFyYW1baW5dICB1MzJOU0FkZHIgICAgICAgTm9uLXNlY3VyZSBmbGFzaCByZWdpb24gdG8gYmUgY2FsY3VsYXRlZC4gdTMyTlNBZGRyIG11c3QgYmUgYSBwYWdlIHNpemUgYWxpZ25lZCBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gIHUzMkJ5dGVDb3VudCAgICBCeXRlIGNvdW50cyBvZiBOb24tc2VjdXJlIGZsYXNoIGFyZWEgdG8gYmUgY2FsY3VsYXRlZC4gSXQgbXVzdCBiZSBtdWx0aXBsZSBvZiAyMDQ4IGJ5dGVzLgorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDAgICAgICB1MzJOU0FkZHIgcmVnaW9uIGlzbid0IGluIE5vbi1zZWN1cmUgYXJlYQorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDEgICAgICBXcm9uZyB1MzJOU0FkZHIgb3IgdTMyQnl0ZUNvdW50IHBhcmFtZXRlcgorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDMgICAgICB1MzJOU0FkZHIgaXNuJ3QgdmFsaWQgZmxhc2ggYWRkcmVzcworICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgICAgICBFeGVjdXRlIENSQzMyIG9wZXJhdGlvbiBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICBSZXN1bHQgb2YgQ1JDMzIgY2hlY2tzdW0KKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIGNhbGN1bGF0ZSB0aGUgQ1JDMzIgY2hlY2tzdW0gcmVzdWx0IG9mIHNwZWNpZmllZCBub24tc2VjdXJlIGZsYXNoIGFyZWEuCisgICogICAgICAgICAgICAgVGhlIHN0YXJ0aW5nIGFkZHJlc3MgYW5kIGNhbGN1bGF0ZWQgc2l6ZSBtdXN0IGJlIGFsbCAyMDQ4IGJ5dGVzIHBhZ2Ugc2l6ZSBhbGlnbmVkLgorICAqLwordWludDMyX3QgQkxfRmxhc2hDaGVja3N1bSh1aW50MzJfdCB1MzJOU0FkZHIsIHVpbnQzMl90IHUzMkJ5dGVDb3VudCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgQ2hlY2sgTm9uLXNlY3VyZSBGbGFzaCBBcmVhIERhdGEgYXJlIGFsbCBPTkUgb3Igbm90IChmb3IgTm9uLXNlY3VyZSByZWdpb24pCisgICogQHBhcmFtW2luXSAgdTMyTlNBZGRyICAgICAgIE5vbi1zZWN1cmUgZmxhc2ggcmVnaW9uIHRvIGJlIGNhbGN1bGF0ZWQuIHUzMk5TQWRkciBtdXN0IGJlIGEgcGFnZSBzaXplIGFsaWduZWQgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dICB1MzJCeXRlQ291bnQgICAgQnl0ZSBjb3VudHMgb2YgTm9uLXNlY3VyZSBmbGFzaCBhcmVhIHRvIGJlIGNhbGN1bGF0ZWQuIEl0IG11c3QgYmUgbXVsdGlwbGUgb2YgMjA0OCBieXRlcy4KKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAwICAgICAgdTMyTlNBZGRyIHJlZ2lvbiBpc24ndCBpbiBOb24tc2VjdXJlIGFyZWEKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICAgICAgV3JvbmcgdTMyTlNBZGRyIG9yIHUzMkJ5dGVDb3VudCBwYXJhbWV0ZXIKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAzICAgICAgdTMyTlNBZGRyIGlzbid0IHZhbGlkIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgICAgICAgICAgRXhlY3V0ZSBDaGVjayBGbGFzaCBBbGwgT25lIG9wZXJhdGlvbiBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICAweEExMUZGRkZGICAgICAgVGhlIGNvbnRlbnRzIG9mIHZlcmlmaWVkIE5vbi1zZWN1cmUgZmxhc2ggYXJlYSBhcmUgMHhGRkZGRkZGRgorICAqIEByZXR2YWwgICAgIDB4QTExMDAwMDAgICAgICBTb21lIGNvbnRlbnRzIG9mIHZlcmlmaWVkIE5vbi1zZWN1cmUgZmxhc2ggYXJlYSBhcmUgbm90IDB4RkZGRkZGRkYKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGNoZWNrIHNwZWNpZmllZCBOb24tc2VjdXJlIGZsYXNoIGFyZWEgYXJlIGFsbCAweEZGRkZGRkZGIG9yIG5vdC4KKyAgKi8KK3VpbnQzMl90IEJMX0NoZWNrRmxhc2hBbGxPbmUodWludDMyX3QgdTMyTlNBZGRyLCB1aW50MzJfdCB1MzJCeXRlQ291bnQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgQ29tcGFueSBJRAorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBUaGUgY29tcGFueSBJRCAoMzItYml0KQorICAqIEBkZXRhaWxzICAgIFRoZSBjb21wYW55IElEIG9mIE51dm90b24gaXMgZml4ZWQgdG8gYmUgMHhEQS4KKyAgKi8KK3VpbnQzMl90IEJMX1JlYWRDSUQodm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBEZXZpY2UgSUQKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgVGhlIGRldmljZSBJRCAoMzItYml0KQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIGRldmljZSBJRC4KKyAgKi8KK3VpbnQzMl90IEJMX1JlYWRESUQodm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBQcm9kdWN0IElECisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIFRoZSBwcm9kdWN0IElEICgzMi1iaXQpCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgcHJvZHVjdCBJRC4KKyAgKi8KK3VpbnQzMl90IEJMX1JlYWRQSUQodm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBVQ0lECisgICogQHBhcmFtW2luXSAgdTMySW5kZXggICAgSW5kZXggb2YgdGhlIFVDSUQgdG8gcmVhZCBhbmQgdTMySW5kZXggbXVzdCBiZSAwLCAxLCAyLCBvciAzLgorICAqIEByZXR1cm4gICAgIFRoZSBVQ0lEIG9mIHNwZWNpZmllZCBpbmRleAorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIHVuaXF1ZSBjaGlwIElEIChVQ0lEKS4KKyAgKi8KK3VpbnQzMl90IEJMX1JlYWRVQ0lEKHVpbnQzMl90IHUzMkluZGV4KTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIFVJRAorICAqIEBwYXJhbVtpbl0gIHUzMkluZGV4ICAgIFVJRCBpbmRleC4gMCA9IFVJRFszMTowXSwgMSA9IFVJRFs2MzozMl0sIDIgPSBVSURbOTU6NjRdCisgICogQHJldHVybiAgICAgVGhlIDMyLWJpdCB1bmlxdWUgSUQgZGF0YSBvZiBzcGVjaWZpZWQgVUlEIGluZGV4CisgICogQGRldGFpbHMgICAgVG8gcmVhZCBvdXQgc3BlY2lmaWVkIDMyLWJpdCB1bmlxdWUgSUQuCisgICovCit1aW50MzJfdCBCTF9SZWFkVUlEKHVpbnQzMl90IHUzMkluZGV4KTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgWE9NIEFjdGl2ZSBTdGF0dXMKKyAgKiBAcGFyYW1baW5dICB1MzJYT00gICAgICBTcGVjaWZpZWQgWE9NIHJlZ2lvbiwgaXQgbXVzdCBiZSBiZXR3ZWVuIDB+My4KKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICBJbnZhbGlkIHUzMlhPTSBudW1iZXIKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBDdXJyZW50IFhPTSByZWdpb24gaXNuJ3QgYWN0aXZlIHlldAorICAqIEByZXR2YWwgICAgIDEgICAgICAgICAgIEN1cnJlbnQgWE9NIHJlZ2lvbiBpcyBhY3RpdmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIHJldHVybiBzcGVjaWZpZWQgWE9NIHJlZ2lvbiBhY3RpdmUgc3RhdHVzLgorICAqLwordWludDMyX3QgQkxfR2V0WE9NQWN0aXZlU3RhdHVzKHVpbnQzMl90IHUzMlhPTSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBYT00gU2V0dGluZyAoZm9yIE5vbi1zZWN1cmUgcmVnaW9uKQorICAqIEBwYXJhbVtpbl0gIHUzMlhPTSAgICAgICAgICBTcGVjaWZpZWQgWE9NIHJlZ2lvbiwgaXQgbXVzdCBiZSBiZXR3ZWVuIDB+MworICAqIEBwYXJhbVtvdXRdIHB1MzJCYXNlICAgICAgICBSZXR1cm4gc3BlY2lmaWVkIFhPTSBiYXNlIGFkZHJlc3MKKyAgKiBAcGFyYW1bb3V0XSBwdTMyUGFnZUNudCAgICAgUmV0dXJuIHNwZWNpZmllZCBYT00gcGFnZSBjb3VudAorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDAgICAgICBwdTMyQmFzZSwgcHUzMlBhZ2VDbnQgb3IgWE9NIGJhc2UgYWRkcmVzcyBpc24ndCBpbiBOb24tc2VjdXJlIGFyZWEKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICAgICAgV3JvbmcgdTMyWE9NLCBwdTMyQmFzZSBvciBwdTMyUGFnZUNudCBwYXJhbWV0ZXIKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAzICAgICAgWE9NIGJhc2UgYWRkcmVzcyBpc24ndCB2YWxpZCBmbGFzaCBhZGRyZXNzCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwNCAgICAgIHB1MzJCYXNlIG9yIHB1MzJQYWdlQ250IGlzbid0IHZhbGlkIHNyYW0gYWRkcmVzcworICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDUgICAgICBYT00gcmVnaW9uIGlzbid0IGNvbmZpZ3VyZWQKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgUmVhZCBzcGVjaWZpZWQgWE9NIHNldHRpbmcgc3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIHdpbGwgcmVhZCBzcGVjaWZpZWQgWE9NIHJlbGF0aXZlIHNldHRpbmdzLgorICAqLworaW50MzJfdCBCTF9SZWFkWE9NUmVnaW9uKHVpbnQzMl90IHUzMlhPTSwgdWludDMyX3QgKnB1MzJCYXNlLCB1aW50MzJfdCAqcHUzMlBhZ2VDbnQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBYT00gUmVnaW9uIGFuZCBBY3RpdmUgKGZvciBOb24tc2VjdXJlIHJlZ2lvbikKKyAgKiBAcGFyYW1baW5dICB1MzJYT00gICAgICAgICAgU3BlY2lmaWVkIFhPTSByZWdpb24sIGl0IG11c3QgYmUgYmV0d2VlbiAwfjMKKyAgKiBAcGFyYW1baW5dICB1MzJCYXNlICAgICAgICAgQmFzZSBhZGRyZXNzIG9mIFhPTSByZWdpb24KKyAgKiBAcGFyYW1baW5dICB1MzJQYWdlQ250ICAgICAgUGFnZSBjb3VudCBvZiBYT00gcmVnaW9uCisgICogQHBhcmFtW2luXSAgdTMySXNEZWJ1Z01vZGUgIDE6IEVuYWJsZSBYT00gZGVidWcgbW9kZTsgb3RoZXJzIHdpbGwgZGlzYWJsZSBYT00gZGVidWcgbW9kZS4KKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAwICAgICAgWE9NIHJlZ2lvbiBpc24ndCBpbiBOb24tc2VjdXJlIGFyZWEKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAxICAgICAgV3JvbmcgdTMyWE9NLCB1MzJCYXNlIG9yIHUzMlBhZ2VDbnQgcGFyYW1ldGVyCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMyAgICAgIHUzMkJhc2UgaXNuJ3QgdmFsaWQgZmxhc2ggYWRkcmVzcworICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDYgICAgICBYT00gcmVnaW9uIGhhcyBjb25maWd1cmVkCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwNyAgICAgIFhPTSByZWdpb24gaGFzIGFjdGl2ZQorICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgICAgICBTZXQgWE9NIGZhaWxlZAorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICBTZXQgc3BlY2lmaWVkIFhPTSBzdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCBzZXQgc3BlY2lmaWVkIFhPTSBhY3RpdmUuCisgICovCitpbnQzMl90IEJMX1NldFhPTVJlZ2lvbih1aW50MzJfdCB1MzJYT00sIHVpbnQzMl90IHUzMkJhc2UsIHVpbnQzMl90IHUzMlBhZ2VDbnQsIHVpbnQzMl90IHUzMklzRGVidWdNb2RlKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBFcmFzZSBYT00gU2V0dGluZyAoZm9yIE5vbi1zZWN1cmUgcmVnaW9uKQorICAqIEBwYXJhbVtpbl0gIHUzMlhPTUJhc2UgIFNwZWNpZmllZCBYT00gcmVnaW9uIHRvIGJlIGVyYXNlCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwMCAgdTMyWE9NQmFzZSBvciBlcmFzZSBYT00gcmVnaW9uIGlzbid0IGluIE5vbi1zZWN1cmUgYXJlYQorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMDEgIHUzMlhPTUJhc2UgaXNuJ3QgcGFnZSBzaXplIGFsaWduZWQKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDAzICB1MzJYT01CYXNlIGlzbid0IHZhbGlkIGZsYXNoIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAweEYwRjAwMDA4ICBJbnZhbGlkIHUzMlhPTUJhc2UgYWRkcmVzcworICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgIEVyYXNlIFhPTSByZWdpb24gZmFpbGVkCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgRXJhc2UgWE9NIHJlZ2lvbiBzdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCBlcmFzZSBzcGVjaWZpZWQgWE9NIHJlZ2lvbiBkYXRhIGFuZCByZWxhdGl2ZSBYT00gc2V0dGluZy4KKyAgKi8KK2ludDMyX3QgQkxfRXJhc2VYT01SZWdpb24odWludDMyX3QgdTMyWE9NQmFzZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFhPTSBFcmFzZWQgU3RhdHVzCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIC0xICAgICAgRXJhc2UgWE9NIG9wZXJhdGlvbiBmYWlsZWQKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIEVyYXNlIFhPTSBvcGVyYXRpb24gc3VjY2VzcworICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIHdpbGwgcmV0dXJuIHRoZSBYT00gZXJhc2Ugb3BlcmF0aW9uIGlzIHN1Y2Nlc3Mgb3Igbm90LgorICAqLworaW50MzJfdCBCTF9HZXRYT01FcmFzZVN0YXR1cyh2b2lkKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIEtQS0VZU1RTIFN0YXR1cworICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBLUEtFWVNUUyByZWdpc3RlciBzdGF0dXMKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBjYW4gcmVhZCBLUFJPTSBLUEtFWVNUUyByZWdpc3RlciBzdGF0dXMuCisgICovCit1aW50MzJfdCBCTF9HZXRLUFJPTVN0YXR1cyh2b2lkKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIEtQS0VZQ05UIFN0YXR1cworICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBLUEtFWUNOVCByZWdpc3RlciBzdGF0dXMKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBjYW4gcmVhZCBLUFJPTSBLUEtFWUNOVCByZWdpc3RlciBzdGF0dXMuCisgICovCit1aW50MzJfdCBCTF9HZXRLUFJPTUNvdW50ZXIodm9pZCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBLUENOVCBTdGF0dXMKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgS1BDTlQgcmVnaXN0ZXIgc3RhdHVzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgY2FuIHJlYWQgS1BST00gS1BDTlQgcmVnaXN0ZXIgc3RhdHVzLgorICAqLwordWludDMyX3QgQkxfR2V0S1BST01Qb3dlck9uQ291bnRlcih2b2lkKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBFeGVjdXRlIEtQUk9NIEtleSBDb21wYXJpc29uCisgICogQHBhcmFtW2luXSAga2V5MCAgICAgICAgS1BST00ga2V5MAorICAqIEBwYXJhbVtpbl0gIGtleTEgICAgICAgIEtQUk9NIGtleTEKKyAgKiBAcGFyYW1baW5dICBrZXkyICAgICAgICBLUFJPTSBrZXkyCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwOSAgS1BST00gZnVuY3Rpb24gaXNuJ3QgZW5hYmxlZAorICAqIEByZXR2YWwgICAgIDB4RjBGMDAwMEEgIFRyaWdnZXIgS1BST00ga2V5IGNvbXBhcmlzb24gaXMgRk9SQklECisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwQiAgS1BST00gS2V5IGlzIG1pc21hdGNoCisgICogQHJldHZhbCAgICAgMHhGMEYwMDAwQyAgS1BST00ga2V5IHN0aWxsIGxvY2tlZAorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgIEtQUk9NIEtleSBhcmUgbWF0Y2hlZAorICAqIEBkZXRhaWxzICAgIFdpdGggdGhpcyBBUEksIHVzZXIgY2FuIHVubG9jayBLUFJPTSB3cml0ZS1wcm90ZWN0aW9uIGFuZCB0aGVuIGV4ZWN1dGUgRk1DIHByb2dyYW0gY29tbWFuZCB3ZWxsLgorICAqLworaW50MzJfdCBCTF9UcmdLUFJPTUNvbXBhcmUodWludDMyX3Qga2V5MCwgdWludDMyX3Qga2V5MSwgdWludDMyX3Qga2V5Mik7CisKKworLyoqCisgICogQGJyaWVmICAgICAgRXhlY3V0ZSBDSElQIFJlc2V0CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIHBlcmZvcm0gcmVzZXQgQ0hJUCBjb21tYW5kIHRvIHJlc2V0IGNoaXAuCisgICovCit2b2lkIEJMX1Jlc2V0Q2hpcCh2b2lkKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZm9yIFNlY3VyZSBjb2RlIG9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAgKiBAYnJpZWYgICAgICBDaGVjayBpZiBFQ0MgUHJpdmF0ZSBLZXkgVmFsaWQKKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICBlY2NfY3VydmUgICBUaGUgcHJlLWRlZmluZWQgRUNDIGN1cnZlLgorICAqIEBwYXJhbVtpbl0gIHByaXZhdGVfayAgIFRoZSBpbnB1dCBwcml2YXRlIGtleS4KKyAgKiBAcmV0dXJuICAgICAxICAgSXMgdmFsaWQuCisgICogQHJldHVybiAgICAgMCAgIElzIG5vdCB2YWxpZC4KKyAgKiBAcmV0dXJuICAgICAtMSAgSW52YWxpZCBjdXJ2ZS4KKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBwcml2YXRlIGtleSBpcyBwbGFjZWQgaW4gdmFsaWQgcmFuZ2Ugb2YgY3VydmUuCisgICovCitpbnQzMl90IFhFQ0NfSXNQcml2YXRlS2V5VmFsaWQoWENSUFRfVCAqeGNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciBwcml2YXRlX2tbXSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2VuZXJhdGUgRUNDIFB1YmxpYyBLZXkKKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICBlY2NfY3VydmUgICBUaGUgcHJlLWRlZmluZWQgRUNDIGN1cnZlLgorICAqIEBwYXJhbVtpbl0gIHByaXZhdGVfayAgIFRoZSBpbnB1dCBwcml2YXRlIGtleS4KKyAgKiBAcGFyYW1bb3V0XSBwdWJsaWNfazEgICBUaGUgb3V0cHV0IHB1YmxpYyBrZXkgMS4KKyAgKiBAcGFyYW1bb3V0XSBwdWJsaWNfazIgICBUaGUgb3V0cHV0IHB1YmxpYyBrZXkgMi4KKyAgKiBAcmV0dXJuICAgICAwICAgU3VjY2Vzcy4KKyAgKiBAcmV0dXJuICAgICAtMSAgImVjY19jdXJ2ZSIgdmFsdWUgaXMgaW52YWxpZC4KKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgcHVibGljIGtleSBwYWlyIGJ5IGEgc3BlY2lmaWVkIEVDQyBwcml2YXRlIGtleSBhbmQgRUNDIGN1cnZlLgorICAqLworaW50MzJfdCBYRUNDX0dlbmVyYXRlUHVibGljS2V5KFhDUlBUX1QgKnhjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKnByaXZhdGVfaywgY2hhciBwdWJsaWNfazFbXSwgY2hhciBwdWJsaWNfazJbXSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2VuZXJhdGUgRUNEU0EgU2lnbmF0dXJlCisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgZWNjX2N1cnZlICAgVGhlIHByZS1kZWZpbmVkIEVDQyBjdXJ2ZS4KKyAgKiBAcGFyYW1baW5dICBtZXNzYWdlICAgICBUaGUgaGFzaCB2YWx1ZSBvZiBzb3VyY2UgY29udGV4dC4KKyAgKiBAcGFyYW1baW5dICBkICAgICAgICAgICBUaGUgcHJpdmF0ZSBrZXkuCisgICogQHBhcmFtW2luXSAgayAgICAgICAgICAgVGhlIHNlbGVjdGVkIHJhbmRvbSBpbnRlZ2VyLgorICAqIEBwYXJhbVtvdXRdIFIgICAgICAgICAgIFIgb2YgdGhlIChSLFMpIHBhaXIgZGlnaXRhbCBzaWduYXR1cmUKKyAgKiBAcGFyYW1bb3V0XSBTICAgICAgICAgICBTIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlCisgICogQHJldHVybiAgICAgMCAgIFN1Y2Nlc3MuCisgICogQHJldHVybiAgICAgLTEgICJlY2NfY3VydmUiIHZhbHVlIGlzIGludmFsaWQuCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBnZW5lcmF0ZSBhbiBFQ0RTQSBkaWdpdGFsIHNpZ25hdHVyZS4KKyAgKi8KK2ludDMyX3QgWEVDQ19HZW5lcmF0ZVNpZ25hdHVyZShYQ1JQVF9UICp4Y3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlLCBjaGFyICptZXNzYWdlLCBjaGFyICpkLCBjaGFyICprLCBjaGFyICpSLCBjaGFyICpTKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBWZXJpZnkgRUNEU0EgU2lnbmF0dXJlCisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgZWNjX2N1cnZlICAgVGhlIHByZS1kZWZpbmVkIEVDQyBjdXJ2ZS4KKyAgKiBAcGFyYW1baW5dICBtZXNzYWdlICAgICBUaGUgaGFzaCB2YWx1ZSBvZiBzb3VyY2UgY29udGV4dC4KKyAgKiBAcGFyYW1baW5dICBwdWJsaWNfazEgICBUaGUgcHVibGljIGtleSAxLgorICAqIEBwYXJhbVtpbl0gIHB1YmxpY19rMiAgIFRoZSBwdWJsaWMga2V5IDIuCisgICogQHBhcmFtW2luXSAgUiAgICAgICAgICAgUiBvZiB0aGUgKFIsUykgcGFpciBkaWdpdGFsIHNpZ25hdHVyZQorICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgIFMgb2YgdGhlIChSLFMpIHBhaXIgZGlnaXRhbCBzaWduYXR1cmUKKyAgKiBAcmV0dXJuICAgICAwICAgU3VjY2Vzcy4KKyAgKiBAcmV0dXJuICAgICAtMSAgImVjY19jdXJ2ZSIgdmFsdWUgaXMgaW52YWxpZC4KKyAgKiBAcmV0dXJuICAgICAtMiAgVmVyaWZpY2F0aW9uIGZhaWxlZC4KKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHBlcmZvcm0gdGhlIEVDRFNBIGRpZ2l0YWwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi4KKyAgKi8KK2ludDMyX3QgWEVDQ19WZXJpZnlTaWduYXR1cmUoWENSUFRfVCAqeGNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqbWVzc2FnZSwgY2hhciAqcHVibGljX2sxLCBjaGFyICpwdWJsaWNfazIsIGNoYXIgKlIsIGNoYXIgKlMpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEdlbmVyYXRlIEVDREggU2VjcmV0IFNoYXJlZCBLZXkKKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICBlY2NfY3VydmUgICBUaGUgcHJlLWRlZmluZWQgRUNDIGN1cnZlLgorICAqIEBwYXJhbVtpbl0gIHByaXZhdGVfayAgIE9uZSdzIG93biBwcml2YXRlIGtleS4KKyAgKiBAcGFyYW1baW5dICBwdWJsaWNfazEgICBUaGUgb3RoZXIgcGFydHkncyBwdWJsaWMga2V5IDEuCisgICogQHBhcmFtW2luXSAgcHVibGljX2syICAgVGhlIG90aGVyIHBhcnR5J3MgcHVibGljIGtleSAyLgorICAqIEBwYXJhbVtvdXRdIHNlY3JldF96ICAgIFRoZSBFQ0MgQ0RIIHNlY3JldCBaLgorICAqIEByZXR1cm4gICAgIDAgICBTdWNjZXNzLgorICAqIEByZXR1cm4gICAgIC0xICAiZWNjX2N1cnZlIiB2YWx1ZSBpcyBpbnZhbGlkLgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gRUNESCBzaGFyZWQga2V5LgorICAqLworaW50MzJfdCBYRUNDX0dlbmVyYXRlU2VjcmV0WihYQ1JQVF9UICp4Y3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlLCBjaGFyICpwcml2YXRlX2ssIGNoYXIgcHVibGljX2sxW10sIGNoYXIgcHVibGljX2syW10sIGNoYXIgc2VjcmV0X3pbXSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgQ29udmVydCBEYXRhIHRvIEhleCBGb3JtYXQKKyAgKiBAcGFyYW1baW5dICBjb3VudCAgIEJ5dGUgY291bnRzIGZvciBjb252ZXJ0LgorICAqIEBwYXJhbVtpbl0gIHJlZyAgICAgVGhlIGlucHV0IGRhdGEgYnVmZmVyLgorICAqIEBwYXJhbVtvdXRdIG91dHB1dCAgVGhlIG91dHB1dCBkYXRhIGJ1ZmZlci4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBkYXRhIHRvIGhleCBmb3JtYXQuCisgICovCit2b2lkIFhFQ0NfUmVnMkhleChpbnQzMl90IGNvdW50LCB1aW50MzJfdCB2b2xhdGlsZSByZWdbXSwgY2hhciBvdXRwdXRbXSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgQ29udmVydCBEYXRhIHRvIFJlZ2lzdGVyIEZvcm1hdAorICAqIEBwYXJhbVtpbl0gIGlucHV0ICAgVGhlIGlucHV0IGRhdGEgYnVmZmVyLgorICAqIEBwYXJhbVtvdXRdIHJlZyAgICAgVGhlIG91dHB1dCBkYXRhIGJ1ZmZlci4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBkYXRhIGluIGEgcmVnaXN0ZXIgZGF0YSBmb3JtYXQuCisgICovCit2b2lkIFhFQ0NfSGV4MlJlZyhjaGFyIGlucHV0W10sIHVpbnQzMl90IHZvbGF0aWxlIHJlZ1tdKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgSUQgRUNDIFIsIFMgZGlnaXRhbCBzaWduYXR1cmUgKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW1bb3V0XSBSICAgICAgICAgICBSIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlCisgICogQHBhcmFtW291dF0gUyAgICAgICAgICAgUyBvZiB0aGUgKFIsUykgcGFpciBkaWdpdGFsIHNpZ25hdHVyZQorICAqIEByZXR2YWwgICAgIC0xICAgICAgICAgIEdldCBSLCBTIGRpZ2l0YWwgc2lnbmF0dXJlIGZhaWwKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBTdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgd2lsbCByZXR1cm4gRUNDIFIsIFMgZGlnaXRhbCBzaWduYXR1cmUgb2YgY2hpcCBJRCwgaW5jbHVkZSBQRElELCBVSUQwfjIgYW5kIFVDSUQwfjMuCisgICovCitpbnQzMl90IFhFQ0NfR2V0SURFQ0NTaWduYXR1cmUodWludDMyX3QgKlIsIHVpbnQzMl90ICpTKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBPcGVuIFRERVMgRW5jcnlwdC9EZWNyeXB0CisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJFbmNEZWMgICAxOiBUREVTIGVuY29kZTsgMDogVERFUyBkZWNvZGUKKyAgKiBAcGFyYW1baW5dICBJczNERVMgICAgICAxOiBUREVTOyAwOiBERVMKKyAgKiBAcGFyYW1baW5dICBJczNLZXkgICAgICAxOiBUREVTIDMga2V5IG1vZGU7IDA6IFRERVMgMiBrZXkgbW9kZQorICAqIEBwYXJhbVtpbl0gIHUzMk9wTW9kZSAgIFRERVMgb3BlcmF0aW9uIG1vZGUsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9FQ0IKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9DQkMKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9DRkIKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9PRkIKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9DVFIKKyAgKiBAcGFyYW1baW5dICB1MzJTd2FwVHlwZSBpcyBUREVTIGlucHV0L291dHB1dCBkYXRhIHN3YXAgY29udHJvbCBhbmQgd29yZCBzd2FwIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfTk9fU1dBUAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgVERFU19XSExfU1dBUAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgVERFU19PVVRfU1dBUAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgVERFU19PVVRfV0hMX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFRERVNfSU5fU1dBUAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgVERFU19JTl9XSExfU1dBUAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgVERFU19JTl9PVVRfU1dBUAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgVERFU19JTl9PVVRfV0hMX1NXQVAKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBlbmFibGUgVERFUyBlbmNyeXB0L2RlY3J5cHQgZnVuY3Rpb24uCisgICovCit2b2lkIFhUREVTX09wZW4oWENSUFRfVCAqeGNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkVuY0RlYywgaW50MzJfdCBJczNERVMsIGludDMyX3QgSXMzS2V5LCB1aW50MzJfdCB1MzJPcE1vZGUsIHVpbnQzMl90IHUzMlN3YXBUeXBlKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTdGFydCBUREVTIEVuY3J5cHQvRGVjcnlwdAorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIFRERVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgdTMyRE1BTW9kZSAgVERFUyBETUEgY29udHJvbCwgaW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9PTkVfU0hPVCAgT25lIHNob3QgVERFUyBlbmNyeXB0L2RlY3J5cHQuCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX0NPTlRJTlVFICBDb250aW51b3VzIFRERVMgZW5jcnlwdC9kZWNyeXB0LgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9MQVNUICAgICAgTGFzdCBUREVTIGVuY3J5cHQvZGVjcnlwdCBvZiBhIHNlcmllcyBvZiBYVERFU19TdGFydC4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBzdGFydCBUREVTIGVuY3J5cHQvZGVjcnlwdC4KKyAgKi8KK3ZvaWQgWFRERVNfU3RhcnQoWENSUFRfVCAqeGNycHQsIGludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyRE1BTW9kZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFRERVMgS2V5cworICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICAgICAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICBhdTMyS2V5cyAgICAgICAgVGhlIFRERVMga2V5cy4gYXUzMktleXNbMF1bMF0gaXMgS2V5MCBoaWdoIHdvcmQgYW5kIGF1MzJLZXlzWzBdWzFdIGlzIGtleTAgbG93IHdvcmQuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gc2V0IFRERVMga2V5cy4KKyAgKi8KK3ZvaWQgWFRERVNfU2V0S2V5KFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCBhdTMyS2V5c1szXVsyXSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFRERVMgSW5pdGlhbCBWZWN0b3JzCisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJJVkggICAgICBUREVTIGluaXRpYWwgdmVjdG9yIGhpZ2ggd29yZC4KKyAgKiBAcGFyYW1baW5dICB1MzJJVkwgICAgICBUREVTIGluaXRpYWwgdmVjdG9yIGxvdyB3b3JkLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHNldCBUREVTIGluaXRpYWwgdmVjdG9ycy4KKyAgKi8KK3ZvaWQgWFRERVNfU2V0SW5pdFZlY3QoWENSUFRfVCAqeGNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMklWSCwgdWludDMyX3QgdTMySVZMKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgVERFUyBETUEgVHJhbnNmZXIgQ29uZmlndXJhdGlvbgorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIFRERVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgdTMyU3JjQWRkciAgVERFUyBETUEgc291cmNlIGFkZHJlc3MKKyAgKiBAcGFyYW1baW5dICB1MzJEc3RBZGRyICBUREVTIERNQSBkZXN0aW5hdGlvbiBhZGRyZXNzCisgICogQHBhcmFtW2luXSAgdTMyVHJhbnNDbnQgVERFUyBETUEgdHJhbnNmZXIgYnl0ZSBjb3VudAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgVERFUyBETUEgdHJhbnNmZXIuCisgICovCit2b2lkIFhUREVTX1NldERNQVRyYW5zZmVyKFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJTcmNBZGRyLCB1aW50MzJfdCB1MzJEc3RBZGRyLCB1aW50MzJfdCB1MzJUcmFuc0NudCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgT3BlbiBTSEEgRW5jcnlwdAorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMk9wTW9kZSAgIFNIQSBvcGVyYXRpb24gbW9kZSwgaW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgU0hBX01PREVfU0hBMQorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgU0hBX01PREVfU0hBMjI0CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBTSEFfTU9ERV9TSEEyNTYKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFNIQV9NT0RFX1NIQTM4NAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgU0hBX01PREVfU0hBNTEyCisgICogQHBhcmFtW2luXSAgdTMyU3dhcFR5cGUgaXMgdGhlIFNIQSBpbnB1dC9vdXRwdXQgZGF0YSBzd2FwIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFNIQV9OT19TV0FQCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBTSEFfT1VUX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIFNIQV9JTl9TV0FQCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBTSEFfSU5fT1VUX1NXQVAKKyAgKiBAcGFyYW1baW5dICBobWFjX2tleV9sZW4gICAgSE1BQyBrZXkgYnl0ZSBjb3VudAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGVuYWJsZSBTSEEgZW5jcnlwdCBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgWFNIQV9PcGVuKFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJPcE1vZGUsIHVpbnQzMl90IHUzMlN3YXBUeXBlLCB1aW50MzJfdCBobWFjX2tleV9sZW4pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFN0YXJ0IFNIQSBFbmNyeXB0CisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyRE1BTW9kZSAgU0hBIERNQSBjb250cm9sLCBpbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX09ORV9TSE9UICBPbmUgc2hvdCBTSEEgZW5jcnlwdC4KKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfQ09OVElOVUUgIENvbnRpbnVvdXMgU0hBIGVuY3J5cHQuCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX0xBU1QgICAgICBMYXN0IFNIQSBlbmNyeXB0IG9mIGEgc2VyaWVzIG9mIFhTSEFfU3RhcnQuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gc3RhcnQgU0hBIGVuY3J5cHQuCisgICovCit2b2lkIFhTSEFfU3RhcnQoWENSUFRfVCAqeGNycHQsIHVpbnQzMl90IHUzMkRNQU1vZGUpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBTSEEgRE1BIFRyYW5zZmVyIENvbmZpZ3VyYXRpb24KKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJTcmNBZGRyICBTSEEgRE1BIHNvdXJjZSBhZGRyZXNzCisgICogQHBhcmFtW2luXSAgdTMyVHJhbnNDbnQgU0hBIERNQSB0cmFuc2ZlciBieXRlIGNvdW50CisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBTSEEgRE1BIHRyYW5zZmVyLgorICAqLwordm9pZCBYU0hBX1NldERNQVRyYW5zZmVyKFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJTcmNBZGRyLCB1aW50MzJfdCB1MzJUcmFuc0NudCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBTSEEgRGlnZXN0CisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW291dF0gdTMyRGlnZXN0ICAgVGhlIFNIQSBlbmNyeXB0IG91dHB1dCBkaWdlc3QuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gcmVhZCB0aGUgU0hBIGRpZ2VzdC4KKyAgKi8KK3ZvaWQgWFNIQV9SZWFkKFhDUlBUX1QgKnhjcnB0LCB1aW50MzJfdCB1MzJEaWdlc3RbXSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgT3BlbiBBRVMgRW5jcnlwdC9EZWNyeXB0CisgICogQHBhcmFtW2luXSAgeGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIGdsb2JhbCBYQ1JQVCBkYXRhCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMkVuY0RlYyAgIDE6IEFFUyBlbmNvZGU7ICAwOiBBRVMgZGVjb2RlCisgICogQHBhcmFtW2luXSAgdTMyT3BNb2RlICAgQUVTIG9wZXJhdGlvbiBtb2RlLCBpbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9FQ0IKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19NT0RFX0NCQworICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX01PREVfQ0ZCCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9PRkIKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19NT0RFX0NUUgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX01PREVfQ0JDX0NTMQorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX01PREVfQ0JDX0NTMgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX01PREVfQ0JDX0NTMworICAqIEBwYXJhbVtpbl0gIHUzMktleVNpemUgaXMgQUVTIGtleSBzaXplLCBpbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMTI4CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMTkyCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMjU2CisgICogQHBhcmFtW2luXSAgdTMyU3dhcFR5cGUgaXMgQUVTIGlucHV0L291dHB1dCBkYXRhIHN3YXAgY29udHJvbCwgaW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX05PX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19PVVRfU1dBUAorICAqICAgICAgICAgICAgICAgICAtIFxyZWYgQUVTX0lOX1NXQVAKKyAgKiAgICAgICAgICAgICAgICAgLSBccmVmIEFFU19JTl9PVVRfU1dBUAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGVuYWJsZSBBRVMgZW5jcnlwdC9kZWNyeXB0IGZ1bmN0aW9uLgorICAqLwordm9pZCBYQUVTX09wZW4oWENSUFRfVCAqeGNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkVuY0RlYywgdWludDMyX3QgdTMyT3BNb2RlLCB1aW50MzJfdCB1MzJLZXlTaXplLCB1aW50MzJfdCB1MzJTd2FwVHlwZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgU3RhcnQgQUVTIEVuY3J5cHQvRGVjcnlwdAorICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIEFFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJETUFNb2RlICBBRVMgRE1BIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX09ORV9TSE9UICBPbmUgc2hvdCBBRVMgZW5jcnlwdC9kZWNyeXB0LgorICAqICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfQ09OVElOVUUgIENvbnRpbnVvdXMgQUVTIGVuY3J5cHQvZGVjcnlwdC4KKyAgKiAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX0xBU1QgICAgICBMYXN0IEFFUyBlbmNyeXB0L2RlY3J5cHQgb2YgYSBzZXJpZXMgb2YgWEFFU19TdGFydC4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBzdGFydCBBRVMgZW5jcnlwdC9kZWNyeXB0LgorICAqLwordm9pZCBYQUVTX1N0YXJ0KFhDUlBUX1QgKnhjcnB0LCBpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkRNQU1vZGUpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBBRVMgS2V5cworICAqIEBwYXJhbVtpbl0gIHhjcnB0ICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBnbG9iYWwgWENSUFQgZGF0YQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIEFFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICBhdTMyS2V5cyAgICBBbiB3b3JkIGFycmF5IGNvbnRhaW5zIEFFUyBrZXlzLgorICAqIEBwYXJhbVtpbl0gIHUzMktleVNpemUgaXMgQUVTIGtleSBzaXplLCBpbmNsdWRpbmc6CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMTI4CisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMTkyCisgICogICAgICAgICAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMjU2CisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gc2V0IEFFUyBrZXlzLgorICAqLwordm9pZCBYQUVTX1NldEtleShYQ1JQVF9UICp4Y3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgYXUzMktleXNbXSwgdWludDMyX3QgdTMyS2V5U2l6ZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEFFUyBJbml0aWFsIFZlY3RvcnMKKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBBRVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgYXUzMklWICAgICAgQSBmb3VyIGVudHJ5IHdvcmQgYXJyYXkgY29udGFpbnMgQUVTIGluaXRpYWwgdmVjdG9ycy4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBzZXQgQUVTIGluaXRpYWwgdmVjdG9ycy4KKyAgKi8KK3ZvaWQgWEFFU19TZXRJbml0VmVjdChYQ1JQVF9UICp4Y3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgYXUzMklWW10pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBBRVMgRE1BIFRyYW5zZmVyIENvbmZpZ3VyYXRpb24KKyAgKiBAcGFyYW1baW5dICB4Y3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZ2xvYmFsIFhDUlBUIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMlNyY0FkZHIgICBBRVMgRE1BIHNvdXJjZSBhZGRyZXNzCisgICogQHBhcmFtW2luXSAgdTMyRHN0QWRkciAgIEFFUyBETUEgZGVzdGluYXRpb24gYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHUzMlRyYW5zQ250ICBBRVMgRE1BIHRyYW5zZmVyIGJ5dGUgY291bnQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIEFFUyBETUEgdHJhbnNmZXIuCisgICovCit2b2lkIFhBRVNfU2V0RE1BVHJhbnNmZXIoWENSUFRfVCAqeGNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMlNyY0FkZHIsIHVpbnQzMl90IHUzMkRzdEFkZHIsIHVpbnQzMl90IHUzMlRyYW5zQ250KTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBJbml0aWFsIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChmb3IgU2VjdXJlIGNvZGUpCisgICoKKyAgKiBAcGFyYW1baW5dICBybmcgICAgIFRoZSBzdHJ1Y3R1cmUgb2YgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgKiBAcGFyYW1baW5dICBvcHQgICAgIE9wZXJhdGlvbiBtb2Rlcy4gUG9zc2libGUgb3B0aW9ucyBhcmUsCisgICogICAgICAgICAgICAgICAgICAgICAgICAgKFhUUk5HX1BSTkcgfCBYVFJOR19MSVJDMzJLKSwKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAoWFRSTkdfUFJORyB8IFhUUk5HX0xYVCksCisgICogICAgICAgICAgICAgICAgICAgICAgICAgKFhUUk5HX1NXUk5HIHwgWFRSTkdfTElSQzMySyksCisgICogICAgICAgICAgICAgICAgICAgICAgICAgKFhUUk5HX1NXUk5HIHwgWFRSTkdfTFhUKQorICAqIEByZXR2YWwgICAgIC0xICAgICAgRmFpbAorICAqIEByZXR2YWwgICAgIDAgICAgICAgU3VjY2VzcworICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBpbml0aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAqICAgICAgICAgICAgIEFmdGVyIGluaXRpYWwgdGhpcyBBUEkgc3VjY2VzcywgdXNlciBjYW4gY2FsbCBYVFJOR19SYW5kb20gQVBJIHRvIGdlbmVyYXRlIHRoZSByYW5kb20gbnVtYmVyLgorICAqLworaW50MzJfdCBYVFJOR19SYW5kb21Jbml0KFhUUk5HX1QgKnJuZywgdWludDMyX3Qgb3B0KTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBHZW5lcmF0ZSBSYW5kb20gTnVtYmVyIChmb3IgU2VjdXJlIGNvZGUpCisgICoKKyAgKiBAcGFyYW1baW5dICBybmcgICAgIFRoZSBzdHJ1Y3R1cmUgb2YgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgKiBAcGFyYW1bb3V0XSBwICAgICAgIFN0YXJ0aW5nIGJ1ZmZlciBhZGRyZXNzIHRvIHN0b3JlIHJhbmRvbSBudW1iZXIKKyAgKiBAcGFyYW1baW5dICBzaXplICAgIFRvdGFsIGJ5dGUgY291bnRzIG9mIHJhbmRvbSBudW1iZXIKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgIEZhaWwKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFN1Y2Nlc3MKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXIuCisgICovCitpbnQzMl90IFhUUk5HX1JhbmRvbShYVFJOR19UICpybmcsIHVpbnQ4X3QgKnAsIHVpbnQzMl90IHNpemUpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBJRCBFQ0MgUiwgUyBEaWdpdGFsIFNpZ25hdHVyZSAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtvdXRdIFIgICAgICAgICAgIFIgb2YgdGhlIChSLFMpIHBhaXIgZGlnaXRhbCBzaWduYXR1cmUKKyAgKiBAcGFyYW1bb3V0XSBTICAgICAgICAgICBTIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlCisgICogQHJldHZhbCAgICAgLTEgICAgICAgICAgR2V0IFIsIFMgZGlnaXRhbCBzaWduYXR1cmUgZmFpbAorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgIFN1Y2Nlc3MKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIHJldHVybiBFQ0MgUiwgUyBkaWdpdGFsIHNpZ25hdHVyZSBvZiBjaGlwIElELCBpbmNsdWRlIFBESUQsIFVJRDB+MiBhbmQgVUNJRDB+My4KKyAgKi8KK2ludDMyX3QgQkxfR2V0SURFQ0NTaWduYXR1cmUodWludDMyX3QgKlIsIHVpbnQzMl90ICpTKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBJbml0aWFsIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChmb3IgU2VjdXJlIGNvZGUpCisgICoKKyAgKiBAcGFyYW1baW5dICBybmcgICAgIFRoZSBzdHJ1Y3R1cmUgb2YgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgKiBAcGFyYW1baW5dICBvcHQgICAgIE9wZXJhdGlvbiBtb2Rlcy4gUG9zc2libGUgb3B0aW9ucyBhcmUsCisgICogICAgICAgICAgICAgICAgICAgICAgICAgKEJMX1JOR19QUk5HIHwgQkxfUk5HX0xJUkMzMkspLAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIChCTF9STkdfUFJORyB8IEJMX1JOR19MWFQpLAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIChCTF9STkdfU1dSTkcgfCBCTF9STkdfTElSQzMySyksCisgICogICAgICAgICAgICAgICAgICAgICAgICAgKEJMX1JOR19TV1JORyB8IEJMX1JOR19MWFQpCisgICogQHJldHZhbCAgICAgLTEgICAgICBGYWlsCisgICogQHJldHZhbCAgICAgMCAgICAgICBTdWNjZXNzCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGluaXRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICogICAgICAgICAgICAgQWZ0ZXIgaW5pdGlhbCB0aGlzIEFQSSBzdWNjZXNzLCB1c2VyIGNhbiBwZXJmb3JtIEJMX1JhbmRvbSBBUEkgdG8gZ2VuZXJhdGUgdGhlIHJhbmRvbSBudW1iZXIuCisgICovCitpbnQzMl90IEJMX1JhbmRvbUluaXQoQkxfUk5HX1QgKnJuZywgdWludDMyX3Qgb3B0KTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBHZW5lcmF0ZSBSYW5kb20gTnVtYmVyIChmb3IgU2VjdXJlIGNvZGUpCisgICoKKyAgKiBAcGFyYW1baW5dICBybmcgICAgIFRoZSBzdHJ1Y3R1cmUgb2YgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgKiBAcGFyYW1bb3V0XSBwICAgICAgIFN0YXJ0aW5nIGJ1ZmZlciBhZGRyZXNzIHRvIHN0b3JlIHJhbmRvbSBudW1iZXIKKyAgKiBAcGFyYW1baW5dICBzaXplICAgIFRvdGFsIGJ5dGUgY291bnRzIG9mIHJhbmRvbSBudW1iZXIKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgIEZhaWwKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFN1Y2Nlc3MKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXIuCisgICovCitpbnQzMl90IEJMX1JhbmRvbShCTF9STkdfVCAqcm5nLCB1aW50OF90ICpwLCB1aW50MzJfdCBzaXplKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBJbml0aWFsaXplIFNlY3VyZUlTUCBGdW5jdGlvbiAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtpbl0gIHBJU1BJbmZvICAgIFRoZSBJU1AgaW5mb3JtYXRpb24gZGF0YSBidWZmZXIgYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHBVU0JESW5mbyAgIFVTQiBkYXRhIGJ1ZmZlciBmb3IgU2VjdXJlSVNQIFVTQgorICAqIEBwYXJhbVtpbl0gIG1vZGUgICAgICAgIE9wZXJhdGlvbiBtb2RlLiBQb3NzaWJsZSBvcHRpb25zIGFyZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNCX01PREUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfTU9ERQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNCX1VBUlRfTU9ERQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUkVTWU5DX0lTUAorICAqIEByZXR1cm4gICAgIFJldHVybiBwcm9jZXNzIHN0YXR1cyBhbmQgZXhpdCBTZWN1cmVJU1AgbW9kZS4KKyAgKiBAZGV0YWlscyAgICBFeGVjdXRpbmcgdGhpcyBBUEkgd2lsbCBpbml0aWFsaXplIFVTQiBvciBVQVJUMSBTZWN1cmVJU1AgZnVuY3Rpb24uCisgICogICAgICAgICAgICAgVXNlciBjYW4gdXNlIFNlY3VyZUlTUCBUb29sIHRvIGNvbW11bmljYXRlIHdpdGggdGFyZ2V0IGNoaXAuCisgICAgICAgIENvbmZpZ3VyZSByZWxhdGUgVVNCIGFuZCBVQVJUMSBzZXR0aW5ncyBhcmUgbmVjZXNzYXJ5IGJlZm9yZSBleGVjdXRpbmcgdGhpcyBBUEkuCisgICovCitpbnQzMl90IEJMX1NlY3VyZUlTUEluaXQoSVNQX0lORk9fVCAqcElTUEluZm8sIEJMX1VTQkRfSU5GT19UICpwVVNCREluZm8sIEVfSVNQX01PREUgbW9kZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUHJvY2VzcyBVU0JEIEludGVycnVwdCAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtpbl0gIHBmbkVQVGFibGUgICAgICBTdGFydGluZyBhZGRyZXNzIHRvIHN0b3JlIEVQIGNhbGxiYWNrIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgcEluZm8gICAgICAgICAgIFRoZSBJU1AgaW5mb3JtYXRpb24gZGF0YSBidWZmZXIgYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHBVU0JESW5mbyAgICAgICBVU0IgZGF0YSBidWZmZXIgZm9yIFNlY3VyZUlTUCBVU0IKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgIEV4ZWN1dGUgQVBJIGluIE5vbi1zZWN1cmUgY29kZQorICAqIEByZXR2YWwgICAgIDAgICAgICAgUHJvY2VzcyBVU0JEIGludGVycnVwdCBldmVudCBzdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBwcm9jZXNzIFVTQkQgY29tbWFuZCBhbmQgc2hvdWxkIGJlIGNhbGxlZCBpbiBVU0JEX0lSUUhhbmRsZXIoKS4KKyAgKi8KK2ludDMyX3QgQkxfUHJvY2Vzc1VTQkRJbnRlcnJ1cHQodWludDMyX3QgKnBmbkVQVGFibGUsIHVpbnQzMl90ICpwSW5mbywgdWludDMyX3QgKnBVU0JESW5mbyk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgUHJvY2VzcyBVQVJUMSBJbnRlcnJ1cHQgKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW1baW5dICBwSW5mbyAgIFRoZSBJU1AgaW5mb3JtYXRpb24gZGF0YSBidWZmZXIgYWRkcmVzcworICAqIEByZXR2YWwgICAgIC0xICAgICAgRXhlY3V0ZSBBUEkgaW4gTm9uLXNlY3VyZSBjb2RlCisgICogQHJldHZhbCAgICAgMCAgICAgICBQcm9jZXNzIFVBUlQxIGludGVycnVwdCBldmVudCBzdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBwcm9jZXNzIFVBUlQxIGNvbW1hbmQgYW5kIHNob3VsZCBiZSBjYWxsZWQgaW4gVUFSVDFfSVJRSGFuZGxlcigpLgorICAqLworaW50MzJfdCBCTF9Qcm9jZXNzVUFSVDFJbnRlcnJ1cHQodWludDMyX3QgKnBJbmZvKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgVmVuZG9yIERhdGEgKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW1baW5dICBwSW5mbyAgICAgICBUaGUgSVNQIGluZm9ybWF0aW9uIGRhdGEgYnVmZmVyIGFkZHJlc3MKKyAgKiBAcGFyYW1bb3V0XSBwdTMyRGF0YSAgICBEYXRhIGJ1ZmZlciB0byBzdG9yZSB2ZW5kb3IgZGF0YS4gTWF4aW11bSBidWZmZXIgc2l6ZSBpcyA0NCBieXRlcy4KKyAgKiBAcGFyYW1baW5dICBwdTMyQnVmICAgICBJbnRlcm5hbCB1c2VkIGRhdGEgYnVmZmVyIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBTdWNjZXNzCisgICogQHJldHZhbCAgICAgLTEgICAgICAgICAgSW52YWxpZCBjb21tYW5kIHBhY2tldAorICAqIEByZXR2YWwgICAgIC0yICAgICAgICAgIE5vdCBpbiB2ZW5kb3IgZnVuY3Rpb24KKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGdldCB0aGUgdmVuZG9yIGRhdGEgYW5kIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIHZlbmRvciBmdW5jdGlvbi4KKyAgKi8KK2ludDMyX3QgQkxfR2V0VmVuZG9yRGF0YSh1aW50MzJfdCAqcEluZm8sIHVpbnQzMl90ICpwdTMyRGF0YSwgdWludDMyX3QgKnB1MzJCdWYpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFJldHVybiBWZW5kb3IgRGF0YSAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtpbl0gIHB1MzJEYXRhICAgIERhdGEgYnVmZmVyIHRvIHN0b3JlIHJlc3BvbnNlIGRhdGEKKyAgKiBAcGFyYW1baW5dICB1MzJMZW4gICAgICBEYXRhIGJ1ZmZlciBsZW5ndGgsIG1heGltdW0gc2l6ZSBpcyA0MCBieXRlcy4KKyAgKiBAcGFyYW1baW5dICBwdTMyQnVmICAgICBJbnRlcm5hbCB1c2VkIGRhdGEgYnVmZmVyIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBTdWNjZXNzCisgICogQHJldHZhbCAgICAgLTEgICAgICAgICAgSW52YWxpZCBidWZmZXIgbGVuZ3RoCisgICogQHJldHZhbCAgICAgLTIgICAgICAgICAgTm90IGluIHZlbmRvciBmdW5jdGlvbgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gcmV0dXJuIHZlbmRvciBkYXRhIHRvIHNlcnZlciBhbmQgc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgdmVuZG9yIGZ1bmN0aW9uLgorICAqLworaW50MzJfdCBCTF9SZXR1cm5WZW5kb3JEYXRhKHVpbnQzMl90ICpwdTMyRGF0YSwgdWludDMyX3QgdTMyTGVuLCB1aW50MzJfdCAqcHUzMkJ1Zik7CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2VuZXJhdGUgQ29tbWFuZCBSZXNwb25zZSBEYXRhIChmb3IgU2VjdXJlIGNvZGUpCisgICogQHBhcmFtW2luXSAgcENNRCAgICAgICAgQnVmZmVyIGFkZHJlc3MgdG8gc3RvcmUgY29tbWFuZCBkYXRhCisgICogQHBhcmFtW2luXSAgcElTUEluZm8gICAgVGhlIElTUCBpbmZvcm1hdGlvbiBkYXRhIGJ1ZmZlciBhZGRyZXNzCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgQ29tbWFuZCBzdWNjZXNzCisgICogQHJldHZhbCAgICAgT3RoZXIgICAgICAgQ29tbWFuZCBmYWlsCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBnZW5lcmF0ZSByZXNwb25zZSBkYXRhIHRvIHNlcnZlci4KKyAgKi8KK2ludDMyX3QgQ21kX0dlblJzcFBhY2tldChDTURfUEFDS0VUX1QgKnBDTUQsIElTUF9JTkZPX1QgKnBJU1BJbmZvKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBQYXJzZSBDb21tYW5kIChmb3IgU2VjdXJlIGNvZGUpCisgICogQHBhcmFtW2luXSAgcENNRCAgICAgICAgQnVmZmVyIGFkZHJlc3MgdG8gc3RvcmUgY29tbWFuZAorICAqIEBwYXJhbVtpbl0gIHBJU1BJbmZvICAgIFRoZSBJU1AgaW5mb3JtYXRpb24gZGF0YSBidWZmZXIgYWRkcmVzcworICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgIENvbW1hbmQgc3VjY2VzcworICAqIEByZXR2YWwgICAgIE90aGVyICAgICAgIENvbW1hbmQgZmFpbAorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gcGFyc2UgZGF0YSBmcm9tIHNlcnZlci4KKyAgKi8KK2ludDMyX3QgQ21kX1BhcnNlUmVxUGFja2V0KENNRF9QQUNLRVRfVCAqcENNRCwgSVNQX0lORk9fVCAqcElTUEluZm8pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFBhcnNlIENPTk5FQ1QgQ29tbWFuZCAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbVtpbl0gIHBJU1BJbmZvICAgIFRoZSBJU1AgaW5mb3JtYXRpb24gZGF0YSBidWZmZXIgYWRkcmVzcworICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICBPdGhlciAgICAgICBDb21tYW5kIGZhaWwKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIGZvciBwYXJzZSBDT05ORUNUIGNvbW1hbmQgb25seS4KKyAgKi8KK2ludDMyX3QgUGFyc2VDT05ORUNUKElTUF9JTkZPX1QgKnBJU1BJbmZvKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBQYXJzZSByZWxhdGVkIEVDREggQ29tbWFuZHMgKGZvciBTZWN1cmUgY29kZSkKKyAgKiBAcGFyYW1baW5dICBwSVNQSW5mbyAgICBUaGUgSVNQIGluZm9ybWF0aW9uIGRhdGEgYnVmZmVyIGFkZHJlc3MKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBTdWNjZXNzCisgICogQHJldHZhbCAgICAgT3RoZXIgICAgICAgQ29tbWFuZCBmYWlsCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCBmb3IgcGFyc2UgcmVsYXRlZCBFQ0RIIGNvbW1hbmRzLgorICAqLworaW50MzJfdCBQYXJzZUVDREgoSVNQX0lORk9fVCAqcElTUEluZm8pOworCisKKy8qKgorICAqIEBicmllZiAgICAgIFBhcnNlIENvbW1hbmRzIChmb3IgU2VjdXJlIGNvZGUpCisgICogQHBhcmFtW2luXSAgcElTUEluZm8gICAgVGhlIElTUCBpbmZvcm1hdGlvbiBkYXRhIGJ1ZmZlciBhZGRyZXNzCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgU3VjY2VzcworICAqIEByZXR2YWwgICAgIE90aGVyICAgICAgIENvbW1hbmQgZmFpbAorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgZm9yIHBhcnNlIGFsbCBjb21tYW5kcyBleGNlcHQgQ09OTkVDVCBhbmQgcmVsYXRlZCBFQ0RIIGNvbW1hbmRzLgorICAqLworaW50MzJfdCBQYXJzZUNvbW1hbmRzKElTUF9JTkZPX1QgKnBJU1BJbmZvKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBJbml0aWFsaXplIFVTQkQgTW9kdWxlIChmb3IgU2VjdXJlIGNvZGUpCisgICogQHBhcmFtW2luXSAgcGFyYW0gICAgICAgICAgIFRoZSBzdHJ1Y3R1cmUgb2YgVVNCRCBpbmZvcm1hdGlvbgorICAqIEBwYXJhbVtpbl0gIHBmbkNsYXNzUmVxICAgICBVU0IgQ2xhc3MgcmVxdWVzdCBjYWxsYmFjayBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gIHBmblNldEludGVyZmFjZSBVU0IgU2V0IEludGVyZmFjZSByZXF1ZXN0IGNhbGxiYWNrIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgcFVTQkRJbmZvICAgICAgIFVTQiBkYXRhIGJ1ZmZlciBmb3IgU2VjdXJlSVNQIFVTQiBtb2RlCisgICogQHJldHZhbCAgICAgLTEgICAgICAgICAgICAgIEV4ZWN1dGUgQVBJIGluIE5vbi1zZWN1cmUgY29kZQorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICBTdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSBVU0IgY29udHJvbGxlciwgVVNCIFBIWSB0cmFuc2NlaXZlciBhbmQgcHVsbC11cCByZXNpc3RvciBvZiBVU0JfRCsgcGluLiBVU0IgUEhZIHdpbGwgZHJpdmUgU0UwIHRvIGJ1cy4KKyAgKi8KK2ludDMyX3QgQkxfVVNCRE9wZW4oY29uc3QgU19VU0JEX0lORk9fVCAqcGFyYW0sIENMQVNTX1JFUSBwZm5DbGFzc1JlcSwgU0VUX0lOVEVSRkFDRV9SRVEgcGZuU2V0SW50ZXJmYWNlLCB1aW50MzJfdCAqcFVTQkRJbmZvKTsKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBJbnN0YWxsIEVQIENhbGxiYWNrIEZ1bmN0aW9uIChmb3IgU2VjdXJlIGNvZGUpCisgICogQHBhcmFtW2luXSAgZXAgICAgICAgICAgICAgIEVQIG51bWJlcgorICAqIEBwYXJhbVtpbl0gIHBmbkVQSGFuZGxlciAgICBFUCBjYWxsYmFjayBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gIHBmbkVQVGFibGUgICAgICBTdGFydGluZyBhZGRyZXNzIHRvIHN0b3JlIEVQIGNhbGxiYWNrIGZ1bmN0aW9uCisgICogQHJldHZhbCAgICAgLTEgICAgICBGYWlsCisgICogQHJldHZhbCAgICAgMCAgICAgICBTdWNjZXNzCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBzcGVjaWZpYyBFUCBjYWxsYmFjayBmdW5jdGlvbgorICAqLworaW50MzJfdCBCTF9VU0JESW5zdGFsbEVQSGFuZGxlcih1aW50MzJfdCBlcCwgdm9pZCAqcGZuRVBIYW5kbGVyLCB1aW50MzJfdCAqcGZuRVBUYWJsZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgU3RhcnQgVVNCRCBGdW5jdGlvbiAoZm9yIFNlY3VyZSBjb2RlKQorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dmFsICAgICAtMSAgICAgIEV4ZWN1dGUgQVBJIGluIE5vbi1zZWN1cmUgY29kZQorICAqIEByZXR2YWwgICAgIDAgICAgICAgU3VjY2VzcworICAqIEBkZXRhaWxzICAgIEVuYWJsZSBXQUtFVVAsIEZMREVULCBVU0IgYW5kIEJVUyBpbnRlcnJ1cHRzLiBEaXNhYmxlIHNvZnR3YXJlLWRpc2Nvbm5lY3QgZnVuY3Rpb24gYWZ0ZXIgMTAwbXMgZGVsYXkgd2l0aCBTeXNUaWNrIHRpbWVyLgorICAqLworaW50MzJfdCBCTF9VU0JEU3RhcnQodm9pZCk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBNS1JPTV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBNS1JPTV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgIC8qIF9fTUtST01fTElCX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9vdGcuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL290Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNmRjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9vdGcuaApAQCAtMCwwICsxLDI1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIG90Zy5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgT1RHIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX09UR19IX18KKyNkZWZpbmUgX19PVEdfSF9fCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEluY2x1ZGUgcmVsYXRlZCBoZWFkZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpbmNsdWRlICJNMjM1MS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgT1RHX0RyaXZlciBPVEcgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBPVEdfRVhQT1JURURfQ09OU1RBTlRTIE9URyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBPVEcgY29uc3RhbnQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIE9UR19WQlVTX0VOX0FDVElWRV9ISUdIICAgICAgKDBVTCkgLyohPCBVU0IgVkJVUyBwb3dlciBzd2l0Y2ggZW5hYmxlIHNpZ25hbCBpcyBhY3RpdmUgaGlnaC4gKi8KKyNkZWZpbmUgT1RHX1ZCVVNfRU5fQUNUSVZFX0xPVyAgICAgICAoMVVMKSAvKiE8IFVTQiBWQlVTIHBvd2VyIHN3aXRjaCBlbmFibGUgc2lnbmFsIGlzIGFjdGl2ZSBsb3cuICovCisjZGVmaW5lIE9UR19WQlVTX1NUX1ZBTElEX0hJR0ggICAgICAgKDBVTCkgLyohPCBVU0IgVkJVUyBwb3dlciBzd2l0Y2ggdmFsaWQgc3RhdHVzIGlzIGhpZ2guICovCisjZGVmaW5lIE9UR19WQlVTX1NUX1ZBTElEX0xPVyAgICAgICAgKDFVTCkgLyohPCBVU0IgVkJVUyBwb3dlciBzd2l0Y2ggdmFsaWQgc3RhdHVzIGlzIGxvdy4gKi8KKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIE9UR19FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgT1RHX0VYUE9SVEVEX0ZVTkNUSU9OUyBPVEcgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgRGVmaW5lIE1hY3JvcyBhbmQgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgT1RHIGZ1bmN0aW9uCisgICogQHBhcmFtIE5vbmUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IE9UR0VOIGJpdCBvZiBPVEdfQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBPVEcgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIE9UR19FTkFCTEUoKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPkNUTCB8PSBPVEdfQ1RMX09UR0VOX01zayk6KE9URy0+Q1RMIHw9IE9UR19DVExfT1RHRU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIE9URyBmdW5jdGlvbgorICAqIEBwYXJhbSBOb25lCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIE9UR0VOIGJpdCBvZiBPVEdfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgT1RHIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBPVEdfRElTQUJMRSgpICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKE9UR19OUy0+Q1RMICY9IH5PVEdfQ1RMX09UR0VOX01zayk6KE9URy0+Q1RMICY9IH5PVEdfQ1RMX09UR0VOX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIFVTQiBQSFkKKyAgKiBAcGFyYW0gTm9uZQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFdoZW4gdGhlIFVTQiByb2xlIGlzIHNlbGVjdGVkIGFzIE9URyBkZXZpY2UsIHVzZSB0aGlzIG1hY3JvIHRvIGVuYWJsZSBVU0IgUEhZLgorICAqICAgICAgICAgIFRoaXMgbWFjcm8gd2lsbCBzZXQgT1RHUEhZRU4gYml0IG9mIE9UR19QSFlDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFVTQiBQSFkuCisgICovCisjZGVmaW5lIE9UR19FTkFCTEVfUEhZKCkgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5QSFlDVEwgfD0gT1RHX1BIWUNUTF9PVEdQSFlFTl9Nc2spOihPVEctPlBIWUNUTCB8PSBPVEdfUEhZQ1RMX09UR1BIWUVOX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBVU0IgUEhZCisgICogQHBhcmFtIE5vbmUKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgT1RHUEhZRU4gYml0IG9mIE9UR19QSFlDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBVU0IgUEhZLgorICAqLworI2RlZmluZSBPVEdfRElTQUJMRV9QSFkoKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPlBIWUNUTCAmPSB+T1RHX1BIWUNUTF9PVEdQSFlFTl9Nc2spOihPVEctPlBIWUNUTCAmPSB+T1RHX1BIWUNUTF9PVEdQSFlFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBJRCBkZXRlY3Rpb24gZnVuY3Rpb24KKyAgKiBAcGFyYW0gTm9uZQorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgSURERVRFTiBiaXQgb2YgT1RHX1BIWUNUTCByZWdpc3RlciB0byBlbmFibGUgSUQgZGV0ZWN0aW9uIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBPVEdfRU5BQkxFX0lEX0RFVEVDVCgpICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKE9UR19OUy0+UEhZQ1RMIHw9IE9UR19QSFlDVExfSURERVRFTl9Nc2spOihPVEctPlBIWUNUTCB8PSBPVEdfUEhZQ1RMX0lEREVURU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIElEIGRldGVjdGlvbiBmdW5jdGlvbgorICAqIEBwYXJhbSBOb25lCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIElEREVURU4gYml0IG9mIE9UR19QSFlDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBJRCBkZXRlY3Rpb24gZnVuY3Rpb24uCisgICovCisjZGVmaW5lIE9UR19ESVNBQkxFX0lEX0RFVEVDVCgpICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKE9UR19OUy0+UEhZQ1RMICY9IH5PVEdfUEhZQ1RMX0lEREVURU5fTXNrKTooT1RHLT5QSFlDVEwgJj0gfk9UR19QSFlDVExfSURERVRFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBPVEcgd2FrZS11cCBmdW5jdGlvbgorICAqIEBwYXJhbSBOb25lCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBXS0VOIGJpdCBvZiBPVEdfQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBPVEcgd2FrZS11cCBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgT1RHX0VOQUJMRV9XQUtFVVAoKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPkNUTCB8PSBPVEdfQ1RMX1dLRU5fTXNrKTooT1RHLT5DVEwgfD0gT1RHX0NUTF9XS0VOX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBPVEcgd2FrZS11cCBmdW5jdGlvbgorICAqIEBwYXJhbSBOb25lCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIFdLRU4gYml0IG9mIE9UR19DVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBPVEcgd2FrZS11cCBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgT1RHX0RJU0FCTEVfV0FLRVVQKCkgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5DVEwgJj0gfk9UR19DVExfV0tFTl9Nc2spOihPVEctPkNUTCAmPSB+T1RHX0NUTF9XS0VOX01zaykpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IHRoZSBwb2xhcml0eSBvZiBVU0JfVkJVU19FTiBwaW4KKyAgKiBAcGFyYW1baW5dIHUzMlBvbCBUaGUgcG9sYXJpdHkgc2VsZWN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19WQlVTX0VOX0FDVElWRV9ISUdICisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfVkJVU19FTl9BQ1RJVkVfTE9XCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgcG9sYXJpdHkgb2YgZXh0ZXJuYWwgVVNCIFZCVVMgcG93ZXIgc3dpdGNoIGVuYWJsZSBzaWduYWwuCisgICovCisjZGVmaW5lIE9UR19TRVRfVkJVU19FTl9QT0wodTMyUG9sKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPlBIWUNUTCA9IChPVEdfTlMtPlBIWUNUTCAmICh+T1RHX1BIWUNUTF9WQkVOUE9MX01zaykpIHwgKCh1MzJQb2wpPDxPVEdfUEhZQ1RMX1ZCRU5QT0xfUG9zKSk6KE9URy0+UEhZQ1RMID0gKE9URy0+UEhZQ1RMICYgKH5PVEdfUEhZQ1RMX1ZCRU5QT0xfTXNrKSkgfCAoKHUzMlBvbCk8PE9UR19QSFlDVExfVkJFTlBPTF9Qb3MpKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgdGhlIHBvbGFyaXR5IG9mIFVTQl9WQlVTX1NUIHBpbgorICAqIEBwYXJhbVtpbl0gdTMyUG9sIFRoZSBwb2xhcml0eSBzZWxlY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX1ZCVVNfU1RfVkFMSURfSElHSAorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX1ZCVVNfU1RfVkFMSURfTE9XCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgcG9sYXJpdHkgb2YgZXh0ZXJuYWwgVVNCIFZCVVMgcG93ZXIgc3dpdGNoIHN0YXR1cyBzaWduYWwuCisgICovCisjZGVmaW5lIE9UR19TRVRfVkJVU19TVFNfUE9MKHUzMlBvbCkgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5QSFlDVEwgPSAoT1RHX05TLT5QSFlDVEwgJiAofk9UR19QSFlDVExfVkJTVFNQT0xfTXNrKSkgfCAoKHUzMlBvbCk8PE9UR19QSFlDVExfVkJTVFNQT0xfUG9zKSk6KE9URy0+UEhZQ1RMID0gKE9URy0+UEhZQ1RMICYgKH5PVEdfUEhZQ1RMX1ZCU1RTUE9MX01zaykpIHwgKCh1MzJQb2wpPDxPVEdfUEhZQ1RMX1ZCU1RTUE9MX1BvcykpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBPVEcgcmVsYXRlZCBpbnRlcnJ1cHRzCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBpbnRlcnJ1cHQgc291cmNlLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX1JPTEVDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fVkJFSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX1NSUEZJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fSE5QRklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9HT0lETEVJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fSURDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fUERFVklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9IT1NUSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX0JWTERDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fQVZMRENIR0lFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9WQkNIR0lFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9TRUNIR0lFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9TUlBERVRJRU5fTXNrCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGVuYWJsZSBPVEcgcmVsYXRlZCBpbnRlcnJ1cHRzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KKyNkZWZpbmUgT1RHX0VOQUJMRV9JTlQodTMyTWFzaykgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoT1RHX05TLT5JTlRFTiB8PSAodTMyTWFzaykpOihPVEctPklOVEVOIHw9ICh1MzJNYXNrKSkpCisKKy8qKgorICAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBPVEcgcmVsYXRlZCBpbnRlcnJ1cHRzCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBpbnRlcnJ1cHQgc291cmNlLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX1JPTEVDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fVkJFSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX1NSUEZJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fSE5QRklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9HT0lETEVJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fSURDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fUERFVklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9IT1NUSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVEVOX0JWTERDSEdJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5URU5fQVZMRENIR0lFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9WQkNIR0lFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9TRUNIR0lFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRFTl9TUlBERVRJRU5fTXNrCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGRpc2FibGUgT1RHIHJlbGF0ZWQgaW50ZXJydXB0cyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCisjZGVmaW5lIE9UR19ESVNBQkxFX0lOVCh1MzJNYXNrKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPklOVEVOICY9IH4odTMyTWFzaykpOihPVEctPklOVEVOICY9IH4odTMyTWFzaykpKQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCBPVEcgcmVsYXRlZCBpbnRlcnJ1cHQgZmxhZ3MKKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGludGVycnVwdCBzb3VyY2UuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4gVmFsaWQgdmFsdWVzIGFyZSBsaXN0ZWQgYmVsb3cuCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX1JPTEVDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfVkJFSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX1NSUEZJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfSE5QRklGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19HT0lETEVJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfSURDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfUERFVklGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19IT1NUSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX0JWTERDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfQVZMRENIR0lGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19WQkNIR0lGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19TRUNIR0lGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19TUlBERVRJRl9Nc2sKKyAgKiBAcmV0dXJuIEludGVycnVwdCBmbGFncyBvZiBzZWxlY3RlZCBzb3VyY2VzLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCByZXR1cm4gT1RHIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KKyNkZWZpbmUgT1RHX0dFVF9JTlRfRkxBRyh1MzJNYXNrKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPklOVFNUUyAmICh1MzJNYXNrKSk6KE9URy0+SU5UU1RTICYgKHUzMk1hc2spKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBPVEcgcmVsYXRlZCBpbnRlcnJ1cHQgZmxhZ3MKKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGludGVycnVwdCBzb3VyY2UuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4gVmFsaWQgdmFsdWVzIGFyZSBsaXN0ZWQgYmVsb3cuCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX1JPTEVDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfVkJFSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX1NSUEZJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfSE5QRklGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19HT0lETEVJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfSURDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfUERFVklGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19IT1NUSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBPVEdfSU5UU1RTX0JWTERDSEdJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19JTlRTVFNfQVZMRENIR0lGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19WQkNIR0lGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19TRUNIR0lGX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX0lOVFNUU19TUlBERVRJRl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgY2xlYXIgT1RHIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KKyNkZWZpbmUgT1RHX0NMUl9JTlRfRkxBRyh1MzJNYXNrKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPklOVFNUUyA9ICh1MzJNYXNrKSk6KE9URy0+SU5UU1RTID0gKHUzMk1hc2spKSkKKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBnZXQgT1RHIHJlbGF0ZWQgc3RhdHVzCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiB1c2VyIHNwZWNpZmllZCBzb3VyY2UuIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX1NUQVRVU19PVkVSQ1VSX01zaworICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgT1RHX1NUQVRVU19JRFNUU19Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19TVEFUVVNfU0VTU0VORF9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19TVEFUVVNfQlZMRF9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19TVEFUVVNfQVZMRF9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIE9UR19TVEFUVVNfVkJVU1ZMRF9Nc2sKKyAgKiBAcmV0dXJuIFRoZSB1c2VyIHNwZWNpZmllZCBzdGF0dXMuCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHJldHVybiBPVEcgcmVsYXRlZCBzdGF0dXMgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICAqLworI2RlZmluZSBPVEdfR0VUX1NUQVRVUyh1MzJNYXNrKSAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChPVEdfTlMtPlNUQVRVUyAmICh1MzJNYXNrKSk6KE9URy0+U1RBVFVTICYgKHUzMk1hc2spKSkKKworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgT1RHX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIE9UR19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogX19PVEdfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3BhcnRpdGlvbl9NMjM1MS5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcGFydGl0aW9uX00yMzUxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkZTg1OAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3BhcnRpdGlvbl9NMjM1MS5oCkBAIC0wLDAgKzEsNTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcGFydGl0aW9uX00yMzUxLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFNBVSBjb25maWd1cmF0aW9uIGZvciBzZWN1cmUvbm9uc2VjdXJlIHJlZ2lvbiBzZXR0aW5ncy4KKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBQQVJUSVRJT05fTTIzNTEKKyNkZWZpbmUgUEFSVElUSU9OX00yMzUxCisKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorCisvKgorICAgRGVmYXVsdCBNMjM1MSBwcml0aXRpb24gY29uZmlndXJhdGlvbiBmaWxlIGlzIGZvciBub24tVHJ1c3Rab25lIHNhbXBsZSBjb2RlIG9ubHkuCisgICBJZiB1c2VyIHdhbnRzIHRvIHVzZSBUcnVyc3Rab25lLCB0aGV5IHNob3VsZCBoYXZlIHRoZWlyIHBhcnRpdGlvbl9tMjM1MS5oLgorICAgRm9yIFRydXN0Wm9uZSBwcm9qZWN0cywgcGF0aCBvZiBsb2NhbCBwYXJ0aXRpb25fbTIzNTEuaCBzaG91bGQgYmUgaW4gdGhlCisgICBmcm9udCBvZiB0aGUgaW5jbHVkZSBwYXRoIGxpc3QgdG8gbWFrZSBzdXJlIGxvY2FsIHBhcnRpdGlvbl9tMjM1MS5oIGlzIHVzZWQuCisKKyAgIEl0IGFsc28gYXBwbHkgdG8gbm9uLXNlY3VyZSBwcm9qZWN0IG9mIHRoZSBUcnVzdFpvbmUgcHJvamVjdHMuCisKKyovCisjIGVycm9yICJMaW5rIHRvIGRlZmF1bHQgcGFydGl0aW9uX20yMzUxLmggaW4gc2VjdXJlIG1vZGUuIFBsZWFzZSBjaGVjayB5b3VyIGluY2x1ZGUgcGF0aC4iCisKKyNlbmRpZgorCisKKworLyoKKy8vLS0tLS0tLS0gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+IC0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKy8qCisgICAgU1JBTU5TU0VUCisqLworLyoKKy8vIEJpdCAwLi4xNgorLy8gPG8uMC4uMTY+IFNlY3VyZSBTUkFNIFNpemUgICAgICAgICAgICAgIDwwPT4gMCBLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweDIwMDA9PiA4S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHg0MDAwPT4gMTZLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweDYwMDA9PiAyNEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4ODAwMD0+IDMyS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHhhMDAwPT4gNDBLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweGMwMDA9PiA0OEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4ZTAwMD0+IDU2S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxMDAwMD0+IDY0S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxMjAwMD0+IDcyS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxNDAwMD0+IDgwS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxNjAwMD0+IDg4S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxODAwMD0+IDk2S0IKKyovCisjZGVmaW5lIFNDVV9TRUNVUkVfU1JBTV9TSVpFICAgICAgMHgxODAwMAorI2RlZmluZSBOT05fU0VDVVJFX1NSQU1fQkFTRSAgICAoMHgzMDAwMDAwMCArIFNDVV9TRUNVUkVfU1JBTV9TSVpFKQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgICAgTlNCQQorKi8KKyNkZWZpbmUgRk1DX0lOSVRfTlNCQSAgICAgICAgICAxCisvKgorLy8gICAgIDxvPlNlY3VyZSBGbGFzaCBST00gU2l6ZSA8MHg4MDAtMHg4MDAwMDoweDgwMD4KKyovCisKKyNkZWZpbmUgRk1DX1NFQ1VSRV9ST01fU0laRSAgICAgIDB4ODAwMDAKKworI2RlZmluZSBGTUNfTk9OX1NFQ1VSRV9CQVNFICAgICAoMHgxMDAwMDAwMCArIEZNQ19TRUNVUkVfUk9NX1NJWkUpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qCisvLyA8aD4gUGVyaXBoZXJhbCBTZWN1cmUgQXR0cmlidXRpb24gQ29uZmlndXJhdGlvbgorKi8KKworLyoKKyAgICBQTlNTRVQwCisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8by45PiAgVVNCSCAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTM+ICBTRDAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTY+ICBFQkkgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI0PiAgUERNQTEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDBfVkFMICAgICAgMHgwCisvKgorICAgIFBOU1NFVDEKKyovCisvKgorLy8gTW9kdWxlIDAuLjMxCisvLyAgIDxvLjE3PiAgQ1JDICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xOD4gIENSUFQgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDFfVkFMICAgICAgMHgwMDAwMAorLyoKKyAgICBQTlNTRVQyCisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8by4xPiAgUlRDICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4zPiAgRUFEQyAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by41PiAgQUNNUDAxICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vCisvLyAgIDxvLjc+ICBEQUMgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uOD4gIEkyUzAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTM+ICBPVEcgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTc+ICBUTVIyMyAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8aD4gRVBXTQorLy8gICA8by4yND4gIEVQV00wICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI1PiAgRVBXTTEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjY+ICBCUFdNMCAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yNz4gIEJQV00xICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDJfVkFMICAgICAgMHgwCisvKgorICAgIFBOU1NFVDMKKyovCisvKgorLy8gTW9kdWxlIDAuLjMxCisvLyAgIDxoPiAgU1BJCisvLyAgIDxvLjA+ICBRU1BJMCAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMT4gIFNQSTAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMj4gIFNQSTEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMz4gIFNQSTIgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjQ+ICBTUEkzICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKy8vICAgPGg+IFVBUlQKKy8vICAgPG8uMTY+ICBVQVJUMCAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNz4gIFVBUlQxICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE4PiAgVUFSVDIgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTk+ICBVQVJUMyAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMD4gIFVBUlQ0ICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjIxPiAgVUFSVDUgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorKi8KKyNkZWZpbmUgU0NVX0lOSVRfUE5TU0VUM19WQUwgICAgICAweDAwMDAwCisvKgorICAgIFBOU1NFVDQKKyovCisvKgorLy8gTW9kdWxlIDAuLjMxCisvLyAgIDxoPiBJMkMKKy8vICAgPG8uMD4gIEkyQzAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE+ICBJMkMxICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI+ICBJMkMyICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKy8vICAgPGg+IFNtYXJ0IENhcmQKKy8vICAgPG8uMTY+ICBTQzAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTc+ICBTQzEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTg+ICBTQzIgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorKi8KKyNkZWZpbmUgU0NVX0lOSVRfUE5TU0VUNF9WQUwgICAgICAweDAKKy8qCisgICAgUE5TU0VUNQorKi8KKy8qCisvLyBNb2R1bGUgMC4uMzEKKy8vICAgPG8uMD4gIENBTjAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxoPiBRRUkKKy8vICAgPG8uMTY+ICBRRUkwICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE3PiAgUUVJMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisvLyAgIDxoPiBFQ0FQCisvLyAgIDxvLjIwPiAgRUNBUDAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjIxPiAgRUNBUDEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorLy8gICA8by4yNT4gIFRSTkcgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisqLworI2RlZmluZSBTQ1VfSU5JVF9QTlNTRVQ1X1ZBTCAgICAgIDB4MAorLyoKKyAgICBQTlNTRVQ2CisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8by4wPiAgVVNCRCAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPGg+IFVTQ0kKKy8vICAgPG8uMTY+ICBVU0NJMCAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNz4gIFVTQ0kxICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDZfVkFMICAgICAgMHgwCisvKgorLy8gPC9oPgorKi8KKworCisKKy8qCisvLyA8aD4gR1BJTyBTZWN1cmUgQXR0cmlidXRpb24gQ29uZmlndXJhdGlvbgorKi8KKworLyoKKyAgICBJT05TU0VUCisqLworLyoKKy8vIEJpdCAwLi4zMQorLy8gICA8by4wPiAgUEEgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE+ICBQQiAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yPiAgUEMgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMz4gIFBEICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by40PiAgUEUgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uNT4gIFBGICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjY+ICBQRyAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by43PiAgUEggICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKyovCisjZGVmaW5lIFNDVV9JTklUX0lPTlNTRVRfVkFMICAgICAgMHgwCisvKgorLy8gPC9oPgorKi8KKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKy8vIDxlPlNlY3VyZSBBdHRyaWJ1dGUgVW5pdCAoU0FVKSBDb250cm9sCisqLworI2RlZmluZSBTQVVfSU5JVF9DVFJMIDAKKworLyoKKy8vICAgPHE+IEVuYWJsZSBTQVUKKy8vICAgPGk+IFRvIGVuYWJsZSBTZWN1cmUgQXR0cmlidXRlIFVuaXQgKFNBVSkuCisqLworI2RlZmluZSBTQVVfSU5JVF9DVFJMX0VOQUJMRSAxCisKKy8qCisvLyAgIDxvPiBBbGwgTWVtb3J5IEF0dHJpYnV0ZSBXaGVuIFNBVSBpcyBkaXNhYmxlZAorLy8gICAgIDwwPT4gQWxsIE1lbW9yeSBpcyBTZWN1cmUKKy8vICAgICA8MT0+IEFsbCBNZW1vcnkgaXMgTm9uLVNlY3VyZQorLy8gICA8aT4gVG8gc2V0IHRoZSBBTExOUyBiaXQgaW4gU0FVIENUUkwuCisvLyAgIDxpPiBXaGVuIGFsbCBNZW1vcnkgaXMgTm9uLVNlY3VyZSAoQUxMTlMgaXMgMSksIElEQVUgY2FuIG92ZXJyaWRlIG1lbW9yeSBtYXAgY29uZmlndXJhdGlvbi4KKyovCisjZGVmaW5lIFNBVV9JTklUX0NUUkxfQUxMTlMgIDAKKworLyoKKy8vIDwvZT4KKyovCisKKworLyoKKy8vIDxoPkVuYWJsZSBhbmQgU2V0IFNlY3VyZS9Ob24tU2VjdXJlIHJlZ2lvbgorKi8KKyNkZWZpbmUgU0FVX1JFR0lPTlNfTUFYICAgOCAgICAgICAgICAgICAgICAgLyogTWF4LiBudW1iZXIgb2YgU0FVIHJlZ2lvbnMgKi8KKworLyoKKy8vICAgPGU+U0FVIFJlZ2lvbiAwCisvLyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDAKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjAgICAgMAorLyoKKy8vICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDAgICAgIDB4MDAwM0YwMDAgICAgICAvKiBzdGFydCBhZGRyZXNzIG9mIFNBVSByZWdpb24gMCAqLworLyoKKy8vICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5EMCAgICAgICAweDAwMDNGRkZGICAgICAgLyogZW5kIGFkZHJlc3Mgb2YgU0FVIHJlZ2lvbiAwICovCisvKgorLy8gICAgIDxvPlJlZ2lvbiBpcworLy8gICAgICAgICA8MD0+Tm9uLVNlY3VyZQorLy8gICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0MwICAgICAgIDEKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPlNBVSBSZWdpb24gMQorLy8gICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiAxCisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT04xICAgIDAKKy8qCisvLyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQxICAgICAweDEwMDQwMDAwCisvKgorLy8gICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQxICAgICAgIDB4MTAwN0ZGRkYKKy8qCisvLyAgICAgPG8+UmVnaW9uIGlzCisvLyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisvLyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzEgICAgICAgMAorLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+U0FVIFJlZ2lvbiAyCisvLyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDIKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjIgICAgMAorLyoKKy8vICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDIgICAgIDB4MjAwMEYwMDAKKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDIgICAgICAgMHgyMDAwRkZGRgorLyoKKy8vICAgICA8bz5SZWdpb24gaXMKKy8vICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKy8vICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDMiAgICAgICAxCisvKgorLy8gICA8L2U+CisqLworCisvKgorLy8gICA8ZT5TQVUgUmVnaW9uIDMKKy8vICAgPGk+IFNldHVwIFNBVSBSZWdpb24gMworKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9OMyAgICAwCisvKgorLy8gICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUMyAgICAgMHgzZjAwMAorLyoKKy8vICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5EMyAgICAgICAweDNmN2ZmCisvKgorLy8gICAgIDxvPlJlZ2lvbiBpcworLy8gICAgICAgICA8MD0+Tm9uLVNlY3VyZQorLy8gICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0MzICAgICAgIDEKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisgICA8ZT5TQVUgUmVnaW9uIDQKKyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDQKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjQgICAgMQorLyoKKyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQ0ICAgICBGTUNfTk9OX1NFQ1VSRV9CQVNFICAgICAgLyogc3RhcnQgYWRkcmVzcyBvZiBTQVUgcmVnaW9uIDQgKi8KKworLyoKKyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDQgICAgICAgMHgxMDA3RkZGRiAgICAgIC8qIGVuZCBhZGRyZXNzIG9mIFNBVSByZWdpb24gNCAqLworCisvKgorICAgICA8bz5SZWdpb24gaXMKKyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisgICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0M0ICAgICAgIDAKKy8qCisgICA8L2U+CisqLworCisvKgorICAgPGU+U0FVIFJlZ2lvbiA1CisgICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiA1CisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT041ICAgIDEKKworLyoKKyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQ1ICAgICAweDAwODA3RTAwCisKKy8qCisgICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQ1ICAgICAgIDB4MDA4MDdGRkYKKworLyoKKyAgICAgPG8+UmVnaW9uIGlzCisgICAgICAgICA8MD0+Tm9uLVNlY3VyZQorICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDNSAgICAgICAxCisvKgorICAgPC9lPgorKi8KKworLyoKKyAgIDxlPlNBVSBSZWdpb24gNgorICAgPGk+IFNldHVwIFNBVSBSZWdpb24gNgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9ONiAgICAxCisKKy8qCisgICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUNiAgICAgTk9OX1NFQ1VSRV9TUkFNX0JBU0UKKworLyoKKyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDYgICAgICAgMHgzMDAxN0ZGRgorCisvKgorICAgICA8bz5SZWdpb24gaXMKKyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisgICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0M2ICAgICAgIDAKKy8qCisgICA8L2U+CisqLworCisvKgorICAgPGU+U0FVIFJlZ2lvbiA3CisgICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiA3CisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT043ICAgIDEKKworLyoKKyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQ3ICAgICAweDUwMDAwMDAwCisKKy8qCisgICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQ3ICAgICAgIDB4NUZGRkZGRkYKKworLyoKKyAgICAgPG8+UmVnaW9uIGlzCisgICAgICAgICA8MD0+Tm9uLVNlY3VyZQorICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDNyAgICAgICAwCisvKgorICAgPC9lPgorKi8KKworLyoKKy8vIDwvaD4KKyovCisKKy8qCisvLyA8ZT5TZXR1cCBiZWhhdmlvciBvZiBTbGVlcCBhbmQgRXhjZXB0aW9uIEhhbmRsaW5nCisqLworI2RlZmluZSBTQ0JfQ1NSX0FJUkNSX0lOSVQgIDEKKworLyoKKy8vICAgPG8+IERlZXAgU2xlZXAgY2FuIGJlIGVuYWJsZWQgYnkKKy8vICAgICA8MD0+U2VjdXJlIGFuZCBOb24tU2VjdXJlIHN0YXRlCisvLyAgICAgPDE9PlNlY3VyZSBzdGF0ZSBvbmx5CisvLyAgIDxpPiBWYWx1ZSBmb3IgU0NCLT5DU1IgcmVnaXN0ZXIgYml0IERFRVBTTEVFUFMKKyovCisjZGVmaW5lIFNDQl9DU1JfREVFUFNMRUVQU19WQUwgIDAKKworLyoKKy8vICAgPG8+U3lzdGVtIHJlc2V0IHJlcXVlc3QgYWNjZXNzaWJsZSBmcm9tCisvLyAgICAgPDA9PiBTZWN1cmUgYW5kIE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgICA8MT0+IFNlY3VyZSBzdGF0ZSBvbmx5CisvLyAgIDxpPiBWYWx1ZSBmb3IgU0NCLT5BSVJDUiByZWdpc3RlciBiaXQgU1lTUkVTRVRSRVFTCisqLworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFTX1ZBTCAgMAorCisvKgorLy8gICA8bz5Qcmlvcml0eSBvZiBOb24tU2VjdXJlIGV4Y2VwdGlvbnMgaXMKKy8vICAgICA8MD0+IE5vdCBhbHRlcmVkCisvLyAgICAgPDE9PiBMb3dlcmVkIHRvIDB4ODAtMHhGRgorLy8gICA8aT4gVmFsdWUgZm9yIFNDQi0+QUlSQ1IgcmVnaXN0ZXIgYml0IFBSSVMKKyovCisjZGVmaW5lIFNDQl9BSVJDUl9QUklTX1ZBTCAgICAgIDAKKworLyogQXNzaWduIEhhcmRGYXVsdCB0byBiZSBhbHdheXMgc2VjdXJlIGZvciBzYWZlICovCisjZGVmaW5lIFNDQl9BSVJDUl9CRkhGTk1JTlNfVkFMIDAKKworLyoKKy8vIDwvZT4KKyovCisKKy8qCisgICAgbWF4IDEyOCBTQVUgcmVnaW9ucy4KKyAgICBTQVUgcmVnaW9ucyBhcmUgZGVmaW5lZCBpbiBwYXJ0aXRpb24uaAorICovCisKKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9OKG4pIFwKKyAgICBTQVUtPlJOUiAgPSAgKG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBTQVVfUk5SX1JFR0lPTl9Nc2spOyBcCisgICAgU0FVLT5SQkFSID0gIChTQVVfSU5JVF9TVEFSVCMjbiAgICAgICAgICAgICAgICAgICAgICYgU0FVX1JCQVJfQkFERFJfTXNrKTsgXAorICAgIFNBVS0+UkxBUiA9ICAoU0FVX0lOSVRfRU5EIyNuICAgICAgICAgICAgICAgICAgICAgICAmIFNBVV9STEFSX0xBRERSX01zaykgfCBcCisgICAgICAgICAgICAgICAgKChTQVVfSU5JVF9OU0MjI24gPDwgU0FVX1JMQVJfTlNDX1BvcykgICYgU0FVX1JMQVJfTlNDX01zaykgICB8IDFVCisKKworI2VuZGlmICAvKiBQQVJUSVRJT05fTTIzNTEgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcGRtYS5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcGRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDBkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9wZG1hLmgKQEAgLTAsMCArMSwzNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBwZG1hLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBQRE1BIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fUERNQV9IX18KKyNkZWZpbmUgX19QRE1BX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUERNQV9Ecml2ZXIgUERNQSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBQRE1BX0VYUE9SVEVEX0NPTlNUQU5UUyBQRE1BIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKyNkZWZpbmUgUERNQV9DSF9NQVggICAgOFVMICAgLyohPCBTcGVjaWZ5IE1heGltdW0gQ2hhbm5lbHMgb2YgUERNQSAgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgT3BlcmF0aW9uIE1vZGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFBETUFfT1BfU1RPUCAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgLyohPERNQSBTdG9wIE1vZGUgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9PUF9CQVNJQyAgICAgICAweDAwMDAwMDAxVUwgICAgICAgICAgICAvKiE8RE1BIEJhc2ljIE1vZGUgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9PUF9TQ0FUVEVSICAgICAweDAwMDAwMDAyVUwgICAgICAgICAgICAvKiE8RE1BIFNjYXR0ZXItZ2F0aGVyIE1vZGUgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIERhdGEgV2lkdGggQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQRE1BX1dJRFRIXzggICAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgIC8qITxETUEgVHJhbnNmZXIgV2lkdGggOC1iaXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9XSURUSF8xNiAgICAgICAweDAwMDAxMDAwVUwgICAgICAgICAgICAvKiE8RE1BIFRyYW5zZmVyIFdpZHRoIDE2LWJpdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1dJRFRIXzMyICAgICAgIDB4MDAwMDIwMDBVTCAgICAgICAgICAgIC8qITxETUEgVHJhbnNmZXIgV2lkdGggMzItYml0ICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBBZGRyZXNzIEF0dHJpYnV0ZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUERNQV9TQVJfSU5DICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiE8RE1BIFNBUiBpbmNyZW1lbnQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9TQVJfRklYICAgICAgICAweDAwMDAwMzAwVUwgICAgICAgICAgICAvKiE8RE1BIFNBUiBmaXggYWRkcmVzcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0RBUl9JTkMgICAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgIC8qITxETUEgREFSIGluY3JlbWVudCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0RBUl9GSVggICAgICAgIDB4MDAwMDBDMDBVTCAgICAgICAgICAgIC8qITxETUEgREFSIGZpeCBhZGRyZXNzICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBCdXJzdCBNb2RlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUERNQV9SRVFfU0lOR0xFICAgICAweDAwMDAwMDA0VUwgICAgICAgICAgICAvKiE8RE1BIFNpbmdsZSBSZXF1ZXN0ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfUkVRX0JVUlNUICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgLyohPERNQSBCdXJzdCBSZXF1ZXN0ICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgUERNQV9CVVJTVF8xMjggICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiE8RE1BIEJ1cnN0IDEyOCBUcmFuc2ZlcnMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9CVVJTVF82NCAgICAgICAweDAwMDAwMDEwVUwgICAgICAgICAgICAvKiE8RE1BIEJ1cnN0IDY0IFRyYW5zZmVycyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0JVUlNUXzMyICAgICAgIDB4MDAwMDAwMjBVTCAgICAgICAgICAgIC8qITxETUEgQnVyc3QgMzIgVHJhbnNmZXJzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfQlVSU1RfMTYgICAgICAgMHgwMDAwMDAzMFVMICAgICAgICAgICAgLyohPERNQSBCdXJzdCAxNiBUcmFuc2ZlcnMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9CVVJTVF84ICAgICAgICAweDAwMDAwMDQwVUwgICAgICAgICAgICAvKiE8RE1BIEJ1cnN0IDggVHJhbnNmZXJzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfQlVSU1RfNCAgICAgICAgMHgwMDAwMDA1MFVMICAgICAgICAgICAgLyohPERNQSBCdXJzdCA0IFRyYW5zZmVycyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0JVUlNUXzIgICAgICAgIDB4MDAwMDAwNjBVTCAgICAgICAgICAgIC8qITxETUEgQnVyc3QgMiBUcmFuc2ZlcnMgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9CVVJTVF8xICAgICAgICAweDAwMDAwMDcwVUwgICAgICAgICAgICAvKiE8RE1BIEJ1cnN0IDEgVHJhbnNmZXJzICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBUYWJsZSBJbnRlcnJ1cHQgRGlzYWJsZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUERNQV9UQklOVERJU19FTkFCTEUgICgweDBVTDw8UERNQV9EU0NUX0NUTF9UQklOVERJU19Qb3MpICAvKiE8RE1BIFRhYmxlIEludGVycnVwdCBFbmFibGVkICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1RCSU5URElTX0RJU0FCTEUgKDB4MVVMPDxQRE1BX0RTQ1RfQ1RMX1RCSU5URElTX1BvcykgIC8qITxETUEgVGFibGUgSW50ZXJydXB0IERpc2FibGVkICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBQZXJpcGhlcmFsIFRyYW5zZmVyIE1vZGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUERNQV9NRU0gICAgICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gTWVtb3J5ICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVVNCX1RYICAgICAgICAgMHgwMDAwMDAwMlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFVTQiBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1VTQl9SWCAgICAgICAgIDB4MDAwMDAwMDNVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBVU0IgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUMF9UWCAgICAgICAweDAwMDAwMDA0VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDAgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUMF9SWCAgICAgICAweDAwMDAwMDA1VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDAgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUMV9UWCAgICAgICAweDAwMDAwMDA2VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDEgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUMV9SWCAgICAgICAweDAwMDAwMDA3VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDEgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUMl9UWCAgICAgICAweDAwMDAwMDA4VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDIgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUMl9SWCAgICAgICAweDAwMDAwMDA5VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDIgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUM19UWCAgICAgICAweDAwMDAwMDBBVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDMgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUM19SWCAgICAgICAweDAwMDAwMDBCVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDMgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUNF9UWCAgICAgICAweDAwMDAwMDBDVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDQgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUNF9SWCAgICAgICAweDAwMDAwMDBEVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDQgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUNV9UWCAgICAgICAweDAwMDAwMDBFVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDUgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VQVJUNV9SWCAgICAgICAweDAwMDAwMDBGVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVUFSVDUgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VU0NJMF9UWCAgICAgICAweDAwMDAwMDEwVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVVNDSTAgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VU0NJMF9SWCAgICAgICAweDAwMDAwMDExVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVVNDSTAgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VU0NJMV9UWCAgICAgICAweDAwMDAwMDEyVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVVNDSTEgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9VU0NJMV9SWCAgICAgICAweDAwMDAwMDEzVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVVNDSTEgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9RU1BJMF9UWCAgICAgICAweDAwMDAwMDE0VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gUVNQSTAgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9RU1BJMF9SWCAgICAgICAweDAwMDAwMDE1VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gUVNQSTAgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9TUEkwX1RYICAgICAgICAweDAwMDAwMDE2VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gU1BJMCBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1NQSTBfUlggICAgICAgIDB4MDAwMDAwMTdVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBTUEkwIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfU1BJMV9UWCAgICAgICAgMHgwMDAwMDAxOFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFNQSTEgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9TUEkxX1JYICAgICAgICAweDAwMDAwMDE5VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gU1BJMSBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1NQSTJfVFggICAgICAgIDB4MDAwMDAwMUFVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBTUEkyIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfU1BJMl9SWCAgICAgICAgMHgwMDAwMDAxQlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFNQSTIgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9TUEkzX1RYICAgICAgICAweDAwMDAwMDFDVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gU1BJMyBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1NQSTNfUlggICAgICAgIDB4MDAwMDAwMURVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBTUEkzIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTBfUDFfUlggICAgIDB4MDAwMDAwMjBVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMCBQMSBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00wX1AyX1JYICAgICAweDAwMDAwMDIxVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTAgUDIgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMF9QM19SWCAgICAgMHgwMDAwMDAyMlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00wIFAzIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTFfUDFfUlggICAgIDB4MDAwMDAwMjNVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMSBQMSBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00xX1AyX1JYICAgICAweDAwMDAwMDI0VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTEgUDIgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMV9QM19SWCAgICAgMHgwMDAwMDAyNVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00xIFAzIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfSTJDMF9UWCAgICAgICAgMHgwMDAwMDAyNlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEkyQzAgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9JMkMwX1JYICAgICAgICAweDAwMDAwMDI3VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gSTJDMCBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0kyQzFfVFggICAgICAgIDB4MDAwMDAwMjhVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBJMkMxIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfSTJDMV9SWCAgICAgICAgMHgwMDAwMDAyOVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEkyQzEgUlggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9JMkMyX1RYICAgICAgICAweDAwMDAwMDJBVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gSTJDMiBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0kyQzJfUlggICAgICAgIDB4MDAwMDAwMkJVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBJMkMyIFJYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfSTJTMF9UWCAgICAgICAgMHgwMDAwMDAyQ1VMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEkyUzAgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9JMlMwX1JYICAgICAgICAweDAwMDAwMDJEVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gSTJTMCBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1RNUjAgICAgICAgICAgIDB4MDAwMDAwMkVVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBUTVIwICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfVE1SMSAgICAgICAgICAgMHgwMDAwMDAyRlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIFRNUjEgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9UTVIyICAgICAgICAgICAweDAwMDAwMDMwVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gVE1SMiAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX1RNUjMgICAgICAgICAgIDB4MDAwMDAwMzFVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBUTVIzICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfQURDX1JYICAgICAgICAgMHgwMDAwMDAzMlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEFEQyBSWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0RBQzBfVFggICAgICAgIDB4MDAwMDAwMzNVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBEQUMwIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfREFDMV9UWCAgICAgICAgMHgwMDAwMDAzNFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIERBQzEgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMF9DSDBfVFggICAgMHgwMDAwMDAzNVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00wIENIMCBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00wX0NIMV9UWCAgICAweDAwMDAwMDM2VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTAgQ0gxIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTBfQ0gyX1RYICAgIDB4MDAwMDAwMzdVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMCBDSDIgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMF9DSDNfVFggICAgMHgwMDAwMDAzOFVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00wIENIMyBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00wX0NINF9UWCAgICAweDAwMDAwMDM5VUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTAgQ0g0IFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTBfQ0g1X1RYICAgIDB4MDAwMDAwM0FVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMCBDSDUgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMV9DSDBfVFggICAgMHgwMDAwMDAzQlVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00xIENIMCBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00xX0NIMV9UWCAgICAweDAwMDAwMDNDVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTEgQ0gxIFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTFfQ0gyX1RYICAgIDB4MDAwMDAwM0RVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMSBDSDIgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9FUFdNMV9DSDNfVFggICAgMHgwMDAwMDAzRVVMICAgICAgICAgICAgLyohPERNQSBDb25uZWN0IHRvIEVQV00xIENIMyBUWCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0VQV00xX0NINF9UWCAgICAweDAwMDAwMDNGVUwgICAgICAgICAgICAvKiE8RE1BIENvbm5lY3QgdG8gRVBXTTEgQ0g0IFRYICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFBETUFfRVBXTTFfQ0g1X1RYICAgIDB4MDAwMDAwNDBVTCAgICAgICAgICAgIC8qITxETUEgQ29ubmVjdCB0byBFUFdNMSBDSDUgVFggIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEludGVycnVwdCBUeXBlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQRE1BX0lOVF9UUkFOU19ET05FIDB4MDAwMDAwMDBVTCAgICAgICAgICAgIC8qITxUcmFuc2ZlciBEb25lIEludGVycnVwdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBQRE1BX0lOVF9UQUJMRSAgICAgIDB4MDAwMDAwMDFVTCAgICAgICAgICAgIC8qITxUYWJsZSBJbnRlcnJ1cHQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9JTlRfVElNRU9VVCAgICAweDAwMDAwMDAyVUwgICAgICAgICAgICAvKiE8VGltZW91dCBJbnRlcnJ1cHQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUERNQV9JTlRfQUxJR04gICAgICAweDAwMDAwMDAzVUwgICAgICAgICAgICAvKiE8VHJhbnNmZXIgQWxpZ25tZW50IEludGVycnVwdCAgXGhpZGVpbml0aWFsaXplciAqLworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUERNQV9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworLyoqIEBhZGR0b2dyb3VwIFBETUFfRVhQT1JURURfRlVOQ1RJT05TIFBETUEgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAqIEBicmllZiAgICAgICBHZXQgUERNQSBJbnRlcnJ1cHQgU3RhdHVzCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIGdldHMgdGhlIGludGVycnVwdCBzdGF0dXMuCisgKi8KKyNkZWZpbmUgUERNQV9HRVRfSU5UX1NUQVRVUyhwZG1hKSAoKHVpbnQzMl90KSgocGRtYSktPklOVFNUUykpCisKKy8qKgorICogQGJyaWVmICAgICAgIEdldCBUcmFuc2ZlciBEb25lIEludGVycnVwdCBTdGF0dXMKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIEdldCB0aGUgdHJhbnNmZXIgZG9uZSBJbnRlcnJ1cHQgc3RhdHVzLgorICovCisjZGVmaW5lIFBETUFfR0VUX1REX1NUUyhwZG1hKSAoKHVpbnQzMl90KSgocGRtYSktPlREU1RTKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgQ2xlYXIgVHJhbnNmZXIgRG9uZSBJbnRlcnJ1cHQgU3RhdHVzCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJNYXNrICAgICBUaGUgY2hhbm5lbCBtYXNrCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgQ2xlYXIgdGhlIHRyYW5zZmVyIGRvbmUgSW50ZXJydXB0IHN0YXR1cy4KKyAqLworI2RlZmluZSBQRE1BX0NMUl9URF9GTEFHKHBkbWEsIHUzMk1hc2spICgodWludDMyX3QpKChwZG1hKS0+VERTVFMgPSAodTMyTWFzaykpKQorCisvKioKKyAqIEBicmllZiAgICAgICBHZXQgVGFyZ2V0IEFib3J0IEludGVycnVwdCBTdGF0dXMKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIEdldCB0aGUgdGFyZ2V0IGFib3J0IEludGVycnVwdCBzdGF0dXMuCisgKi8KKyNkZWZpbmUgUERNQV9HRVRfQUJPUlRfU1RTKHBkbWEpICgodWludDMyX3QpKChwZG1hKS0+QUJUU1RTKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgQ2xlYXIgVGFyZ2V0IEFib3J0IEludGVycnVwdCBTdGF0dXMKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMk1hc2sgICAgIFRoZSBjaGFubmVsIG1hc2sKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBDbGVhciB0aGUgdGFyZ2V0IGFib3J0IEludGVycnVwdCBzdGF0dXMuCisgKi8KKyNkZWZpbmUgUERNQV9DTFJfQUJPUlRfRkxBRyhwZG1hLCB1MzJNYXNrKSAoKHVpbnQzMl90KSgocGRtYSktPkFCVFNUUyA9ICh1MzJNYXNrKSkpCisKKy8qKgorICogQGJyaWVmICAgICAgIEdldCBQRE1BIFRyYW5zZmVyIEFsaWdubWVudCBTdGF0dXMKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIEdldCB0aGUgUERNQSB0cmFuc2ZlciBhbGlnbm1lbnQgc3RhdHVzLgorICovCisjZGVmaW5lIFBETUFfR0VUX0FMSUdOX1NUUyhwZG1hKSAoKHVpbnQzMl90KSgocGRtYSktPkFMSUdOKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgQ2xlYXIgUERNQSBUcmFuc2ZlciBBbGlnbm1lbnQgSW50ZXJydXB0IFN0YXR1cworICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyTWFzayAgICAgVGhlIGNoYW5uZWwgbWFzaworICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIENsZWFyIHRoZSBQRE1BIHRyYW5zZmVyIGFsaWdubWVudCBJbnRlcnJ1cHQgc3RhdHVzLgorICovCisjZGVmaW5lIFBETUFfQ0xSX0FMSUdOX0ZMQUcocGRtYSwgdTMyTWFzaykgKCh1aW50MzJfdCkoKHBkbWEpLT5BTElHTiA9ICh1MzJNYXNrKSkpCisKKy8qKgorICogQGJyaWVmICAgICAgIENsZWFyIFRpbWVvdXQgSW50ZXJydXB0IFN0YXR1cworICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBDbGVhciB0aGUgc2VsZWN0ZWQgY2hhbm5lbCB0aW1lb3V0IGludGVycnVwdCBzdGF0dXMuCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSBzdXBwb3J0ZWQgaW4gY2hhbm5lbCAwIGFuZCBjaGFubmVsIDEuCisgKi8KKyNkZWZpbmUgUERNQV9DTFJfVE1PVVRfRkxBRyhwZG1hLCB1MzJDaCkgKCh1aW50MzJfdCkoKHBkbWEpLT5JTlRTVFMgPSAoMVVMIDw8ICgodTMyQ2gpICsgOFVMKSkpKQorCisvKioKKyAqIEBicmllZiAgICAgICBDaGVjayBDaGFubmVsIFN0YXR1cworICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqCisgKiBAcmV0dmFsICAgICAgMCBJZGxlIHN0YXRlCisgKiBAcmV0dmFsICAgICAgMSBCdXN5IHN0YXRlCisgKgorICogQGRldGFpbHMgICAgIENoZWNrIHRoZSBzZWxlY3RlZCBjaGFubmVsIGlzIGJ1c3kgb3Igbm90LgorICovCisjZGVmaW5lIFBETUFfSVNfQ0hfQlVTWShwZG1hLCB1MzJDaCkgKCh1aW50MzJfdCkoKHBkbWEpLT5UUkdTVFMgJiAoMVVMIDw8ICh1MzJDaCkpKT8gMSA6IDApCisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBTb3VyY2UgQWRkcmVzcworICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJBZGRyICAgICBUaGUgc2VsZWN0ZWQgYWRkcmVzcworICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgbWFjcm8gc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsIHNvdXJjZSBhZGRyZXNzLgorICovCisjZGVmaW5lIFBETUFfU0VUX1NSQ19BRERSKHBkbWEsIHUzMkNoLCB1MzJBZGRyKSAoKHVpbnQzMl90KSgocGRtYSktPkRTQ1RbKHUzMkNoKV0uU0EgPSAodTMyQWRkcikpKQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgRGVzdGluYXRpb24gQWRkcmVzcworICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJBZGRyICAgICBUaGUgc2VsZWN0ZWQgYWRkcmVzcworICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgbWFjcm8gc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgUERNQV9TRVRfRFNUX0FERFIocGRtYSwgdTMyQ2gsIHUzMkFkZHIpICgodWludDMyX3QpKChwZG1hKS0+RFNDVFsodTMyQ2gpXS5EQSA9ICh1MzJBZGRyKSkpCisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBUcmFuc2ZlciBDb3VudAorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJUcmFuc0NvdW50ICBUcmFuc2ZlciBDb3VudAorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgbWFjcm8gc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsIHRyYW5zZmVyIGNvdW50LgorICovCisjZGVmaW5lIFBETUFfU0VUX1RSQU5TX0NOVChwZG1hLCB1MzJDaCwgdTMyVHJhbnNDb3VudCkgKCh1aW50MzJfdCkoKHBkbWEpLT5EU0NUWyh1MzJDaCldLkNUTD0oKHBkbWEpLT5EU0NUWyh1MzJDaCldLkNUTCZ+UERNQV9EU0NUX0NUTF9UWENOVF9Nc2spfCgoKHUzMlRyYW5zQ291bnQpLTFVTCkgPDwgUERNQV9EU0NUX0NUTF9UWENOVF9Qb3MpKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IFNjYXR0ZXItZ2F0aGVyIGRlc2NyaXB0b3IgQWRkcmVzcworICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJBZGRyICAgICBUaGUgZGVzY3JpcHRvciBhZGRyZXNzCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBtYWNybyBzZXQgdGhlIHNlbGVjdGVkIGNoYW5uZWwgc2NhdHRlci1nYXRoZXIgZGVzY3JpcHRvciBhZGRyZXNzLgorICovCisjZGVmaW5lIFBETUFfU0VUX1NDQVRURVJfREVTQyhwZG1hLCB1MzJDaCwgdTMyQWRkcikgKCh1aW50MzJfdCkoKHBkbWEpLT5EU0NUWyh1MzJDaCldLk5FWFQgPSAodTMyQWRkcikgLSAoKHBkbWEpLT5TQ0FUQkEpKSkKKworLyoqCisgKiBAYnJpZWYgICAgICAgU3RvcCB0aGUgY2hhbm5lbAorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIHN0b3AgdGhlIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KKyNkZWZpbmUgUERNQV9TVE9QKHBkbWEsIHUzMkNoKSAoKHVpbnQzMl90KSgocGRtYSktPlBBVVNFID0gKDFVTCA8PCAodTMyQ2gpKSkpCisKKy8qKgorICogQGJyaWVmICAgICAgIFBhdXNlIHRoZSBjaGFubmVsCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJDaCAgICAgICBUaGUgc2VsZWN0ZWQgY2hhbm5lbAorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgbWFjcm8gcGF1c2UgdGhlIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KKyNkZWZpbmUgUERNQV9QQVVTRShwZG1hLCB1MzJDaCkgKCh1aW50MzJfdCkoKHBkbWEpLT5QQVVTRSA9ICgxVUwgPDwgKHUzMkNoKSkpKQorCisvKioKKyAqIEBicmllZiAgICAgICBSZXNldCB0aGUgY2hhbm5lbAorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIHJlc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsLgorICovCisjZGVmaW5lIFBETUFfUkVTRVQocGRtYSwgdTMyQ2gpICgodWludDMyX3QpKChwZG1hKS0+Q0hSU1QgPSAoMVVMIDw8ICh1MzJDaCkpKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVmaW5lIFBXTSBmdW5jdGlvbnMgcHJvdG90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBQRE1BX09wZW4oUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgUERNQV9DbG9zZShQRE1BX1QgKnBkbWEpOwordm9pZCBQRE1BX1NldFRyYW5zZmVyQ250KFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMldpZHRoLCB1aW50MzJfdCB1MzJUcmFuc0NvdW50KTsKK3ZvaWQgUERNQV9TZXRTdHJpZGUoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCwgdWludDMyX3QgdTMyRGVzdExlbiwgdWludDMyX3QgdTMyU3JjTGVuLCB1aW50MzJfdCB1MzJUcmFuc0NvdW50KTsKK3ZvaWQgUERNQV9TZXRUcmFuc2ZlckFkZHIoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCwgdWludDMyX3QgdTMyU3JjQWRkciwgdWludDMyX3QgdTMyU3JjQ3RybCwgdWludDMyX3QgdTMyRHN0QWRkciwgdWludDMyX3QgdTMyRHN0Q3RybCk7Cit2b2lkIFBETUFfU2V0VHJhbnNmZXJNb2RlKFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMlBlcmlwaGVyYWwsIHVpbnQzMl90IHUzMlNjYXR0ZXJFbiwgdWludDMyX3QgdTMyRGVzY0FkZHIpOwordm9pZCBQRE1BX1NldEJ1cnN0VHlwZShQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJCdXJzdFR5cGUsIHVpbnQzMl90IHUzMkJ1cnN0U2l6ZSk7Cit2b2lkIFBETUFfRW5hYmxlVGltZW91dChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBQRE1BX0Rpc2FibGVUaW1lb3V0KFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFBETUFfU2V0VGltZU91dChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJPbk9mZiwgdWludDMyX3QgdTMyVGltZU91dENudCk7Cit2b2lkIFBETUFfVHJpZ2dlcihQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoKTsKK3ZvaWQgUERNQV9FbmFibGVJbnQoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCwgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFBETUFfRGlzYWJsZUludChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJNYXNrKTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFBETUFfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUERNQV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fUERNQV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcWVpLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9xZWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjEwMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcWVpLmgKQEAgLTAsMCArMSwzODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBxZWkuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgUXVhZHJhdHVyZSBFbmNvZGVyIEludGVyZmFjZSAoUUVJKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1FFSV9IX18KKyNkZWZpbmUgX19RRUlfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBRRUlfRHJpdmVyIFFFSSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBRRUlfRVhQT1JURURfQ09OU1RBTlRTIFFFSSBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFFFSSBjb3VudGluZyBtb2RlIHNlbGVjdGlvbiBjb25zdGFudHMgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUUVJX0NUTF9YNF9GUkVFX0NPVU5USU5HX01PREUgICAgICAgKDB4MDw8UUVJX0NUTF9NT0RFX1BvcykgLyohPCBRRUkgb3BlcmF0ZSBpbiBYNCBmcmVlLWNvdW50aW5nIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBRRUlfQ1RMX1gyX0ZSRUVfQ09VTlRJTkdfTU9ERSAgICAgICAoMHgxPDxRRUlfQ1RMX01PREVfUG9zKSAvKiE8IFFFSSBvcGVyYXRlIGluIFgyIGZyZWUtY291bnRpbmcgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFFFSV9DVExfWDRfQ09NUEFSRV9DT1VOVElOR19NT0RFICAgICgweDI8PFFFSV9DVExfTU9ERV9Qb3MpIC8qITwgUUVJIG9wZXJhdGUgaW4gWDQgY29tcGFyZS1jb3VudGluZyBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUUVJX0NUTF9YMl9DT01QQVJFX0NPVU5USU5HX01PREUgICAgKDB4Mzw8UUVJX0NUTF9NT0RFX1BvcykgLyohPCBRRUkgb3BlcmF0ZSBpbiBYMiBjb21wYXJlLWNvdW50aW5nIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBRRUkgbm9pc2UgZmlsdGVyIGNsb2NrIHByZS1kaXZpZGUgc2VsZWN0aW9uIGNvbnN0YW50cyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFFFSV9DVExfTkZDTEtTRUxfRElWMSAgICgweDA8PFFFSV9DVExfTkZDTEtTRUxfUG9zKSAvKiE8IFRoZSBzYW1wbGluZyBmcmVxdWVuY3kgb2YgdGhlIG5vaXNlIGZpbHRlciBpcyBRRUlfQ0xLIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUUVJX0NUTF9ORkNMS1NFTF9ESVYyICAgKDB4MTw8UUVJX0NUTF9ORkNMS1NFTF9Qb3MpIC8qITwgVGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBvZiB0aGUgbm9pc2UgZmlsdGVyIGlzIFFFSV9DTEsvMiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFFFSV9DVExfTkZDTEtTRUxfRElWNCAgICgweDI8PFFFSV9DVExfTkZDTEtTRUxfUG9zKSAvKiE8IFRoZSBzYW1wbGluZyBmcmVxdWVuY3kgb2YgdGhlIG5vaXNlIGZpbHRlciBpcyBRRUlfQ0xLLzQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBRRUlfQ1RMX05GQ0xLU0VMX0RJVjE2ICAoMHgzPDxRRUlfQ1RMX05GQ0xLU0VMX1BvcykgLyohPCBUaGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBub2lzZSBmaWx0ZXIgaXMgUUVJX0NMSy8xNiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFFFSV9DVExfTkZDTEtTRUxfRElWMzIgICgweDQ8PFFFSV9DVExfTkZDTEtTRUxfUG9zKSAvKiE8IFRoZSBzYW1wbGluZyBmcmVxdWVuY3kgb2YgdGhlIG5vaXNlIGZpbHRlciBpcyBRRUlfQ0xLLzMyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUUVJX0NUTF9ORkNMS1NFTF9ESVY2NCAgKDB4NTw8UUVJX0NUTF9ORkNMS1NFTF9Qb3MpIC8qITwgVGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBvZiB0aGUgbm9pc2UgZmlsdGVyIGlzIFFFSV9DTEsvNjQgXGhpZGVpbml0aWFsaXplciAqLworCisKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFFFSV9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgUUVJX0VYUE9SVEVEX0ZVTkNUSU9OUyBRRUkgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFFFSSBjb21wYXJlIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgcWVpICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBRRUkgY291bnRlciBjb21wYXJlIGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0RJU0FCTEVfQ05UX0NNUChxZWkpICAgICgocWVpKS0+Q1RMICY9ICh+UUVJX0NUTF9DTVBFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUUVJIGNvbXBhcmUgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBlbmFibGUgUUVJIGNvdW50ZXIgY29tcGFyZSBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9FTkFCTEVfQ05UX0NNUChxZWkpICAgICAoKHFlaSktPkNUTCB8PSBRRUlfQ1RMX0NNUEVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBRRUkgaW5kZXggbGF0Y2ggZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBkaXNhYmxlIFFFSSBpbmRleCB0cmlnZ2VyIGNvdW50ZXIgbGF0Y2ggZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRElTQUJMRV9JTkRFWF9MQVRDSChxZWkpICAgICAoKHFlaSktPkNUTCAmPSAoflFFSV9DVExfSURYTEFURU5fTXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFFFSSBpbmRleCBsYXRjaCBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGVuYWJsZSBRRUkgaW5kZXggdHJpZ2dlciBjb3VudGVyIGxhdGNoIGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0VOQUJMRV9JTkRFWF9MQVRDSChxZWkpICAgICAoKHFlaSktPkNUTCB8PSBRRUlfQ1RMX0lEWExBVEVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBRRUkgaW5kZXggcmVsb2FkIGZ1bmN0aW9uCisgICogQHBhcmFtW2luXSAgcWVpICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBRRUkgaW5kZXggdHJpZ2dlciBjb3VudGVyIHJlbG9hZCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9ESVNBQkxFX0lOREVYX1JFTE9BRChxZWkpICAgICgocWVpKS0+Q1RMICY9ICh+UUVJX0NUTF9JRFhSTERFTl9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUUVJIGluZGV4IHJlbG9hZCBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGVuYWJsZSBRRUkgaW5kZXggdHJpZ2dlciBjb3VudGVyIHJlbG9hZCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9FTkFCTEVfSU5ERVhfUkVMT0FEKHFlaSkgICAgKChxZWkpLT5DVEwgfD0gUUVJX0NUTF9JRFhSTERFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUUVJIGlucHV0CisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJJbnB1dFR5cGUgICAgSW5wdXQgc2lnbmFsIHR5cGUuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0NIQUVOX01zayAgICA6IFFFQSBpbnB1dAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9DSEFFTl9Nc2sgICAgOiBRRUIgaW5wdXQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSURYRU5fTXNrICAgIDogSURYIGlucHV0CisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBzcGVjaWZpZWQgUUVJIHNpZ25hbCBpbnB1dC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9ESVNBQkxFX0lOUFVUKHFlaSwgdTMySW5wdXRUeXBlKSAgICAgKChxZWkpLT5DVEwgJj0gfih1MzJJbnB1dFR5cGUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUUVJIGlucHV0CisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJJbnB1dFR5cGUgICAgSW5wdXQgc2lnbmFsIHR5cGUgLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9DSEFFTl9Nc2sgICAgOiBRRUEgaW5wdXQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfQ0hCRU5fTXNrICAgIDogUUVCIGlucHV0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0lEWEVOX01zayAgICA6IElEWCBpbnB1dAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGVuYWJsZSBzcGVjaWZpZWQgUUVJIHNpZ25hbCBpbnB1dC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9FTkFCTEVfSU5QVVQocWVpLCB1MzJJbnB1dFR5cGUpICAgICAoKHFlaSktPkNUTCB8PSAodTMySW5wdXRUeXBlKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBpbnZlcnRlZCBpbnB1dCBwb2xhcml0eQorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMySW5wdXRUeXBlICAgIElucHV0IHNpZ25hbCB0eXBlIC4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfQ0hBSU5WX01zayAgIDogUUVBIElucHV0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0NIQklOVl9Nc2sgICA6IFFFQiBJbnB1dAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9JRFhJTlZfTXNrICAgOiBJRFggSW5wdXQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBkaXNhYmxlIHNwZWNpZmllZCBRRUkgc2lnbmFsIGludmVydGVkIGlucHV0IHBvbGFyaXR5LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0RJU0FCTEVfSU5QVVRfSU5WKHFlaSwgdTMySW5wdXRUeXBlKSAgICAoKHFlaSktPkNUTCAmPSB+KHUzMklucHV0VHlwZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBpbnZlcnRlZCBpbnB1dCBwb2xhcml0eQorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMySW5wdXRUeXBlICAgIElucHV0IHNpZ25hbCB0eXBlLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9DSEFJTlZfTXNrICAgOiBRRUEgSW5wdXQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfQ0hCSU5WX01zayAgIDogUUVCIElucHV0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0lEWElOVl9Nc2sgICA6IElEWCBJbnB1dAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGludmVyc2Ugc3BlY2lmaWVkIFFFSSBzaWduYWwgaW5wdXQgcG9sYXJpdHkuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfRU5BQkxFX0lOUFVUX0lOVihxZWksIHUzMklucHV0VHlwZSkgICAgICgocWVpKS0+Q1RMIHw9ICh1MzJJbnB1dFR5cGUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFFFSSBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMySW50U2VsICAgSW50ZXJydXB0IHR5cGUgc2VsZWN0aW9uLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0RJUklFTl9Nc2sgICA6IERpcmVjdGlvbiBjaGFuZ2UgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfT1ZVTklFTl9Nc2sgIDogQ291bnRlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfQ01QSUVOX01zayAgIDogQ29tcGFyZS1tYXRjaCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9JRFhJRU5fTXNrICAgOiBJbmRleCBkZXRlY3RlZCBpbnRlcnJ1cHQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBkaXNhYmxlIHNwZWNpZmllZCBRRUkgaW50ZXJydXB0LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0RJU0FCTEVfSU5UKHFlaSwgdTMySW50U2VsKSAgICAgKChxZWkpLT5DVEwgJj0gfih1MzJJbnRTZWwpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUUVJIGludGVycnVwdAorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJJbnRTZWwgICBJbnRlcnJ1cHQgdHlwZSBzZWxlY3Rpb24uCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfRElSSUVOX01zayAgIDogRGlyZWN0aW9uIGNoYW5nZSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9PVlVOSUVOX01zayAgOiBDb3VudGVyIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9DTVBJRU5fTXNrICAgOiBDb21wYXJlLW1hdGNoIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0lEWElFTl9Nc2sgICA6IEluZGV4IGRldGVjdGVkIGludGVycnVwdAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGVuYWJsZSBzcGVjaWZpZWQgUUVJIGludGVycnVwdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9FTkFCTEVfSU5UKHFlaSwgdTMySW50U2VsKSAgICAgICgocWVpKS0+Q1RMIHw9ICh1MzJJbnRTZWwpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFFFSSBub2lzZSBmaWx0ZXIKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBRRUkgbm9pc2UgZmlsdGVyIGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0RJU0FCTEVfTk9JU0VfRklMVEVSKHFlaSkgICAgICAgKChxZWkpLT5DVEwgfD0gUUVJX0NUTF9ORkRJU19Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBRRUkgbm9pc2UgZmlsdGVyCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkNsa1NlbCAgIFRoZSBzYW1wbGluZyBmcmVxdWVuY3kgb2YgdGhlIG5vaXNlIGZpbHRlciBjbG9jay4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9ORkNMS1NFTF9ESVYxCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfTkZDTEtTRUxfRElWMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX05GQ0xLU0VMX0RJVjQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9ORkNMS1NFTF9ESVYxNgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX05GQ0xLU0VMX0RJVjMyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfTkZDTEtTRUxfRElWNjQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBlbmFibGUgUUVJIG5vaXNlIGZpbHRlciBmdW5jdGlvbiBhbmQgc2VsZWN0IG5vaXNlIGZpbHRlciBjbG9jay4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9FTkFCTEVfTk9JU0VfRklMVEVSKHFlaSwgdTMyQ2xrU2VsKSAgICAgKChxZWkpLT5DVEwgPSAoKHFlaSktPkNUTCAmICh+KFFFSV9DVExfTkZESVNfTXNrfFFFSV9DVExfTkZDTEtTRUxfTXNrKSkpIHwgKHUzMkNsa1NlbCkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBRRUkgY291bnRlciB2YWx1ZQorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIFFFSSBwdWxzZSBjb3VudGVyIHJlZ2lzdGVyIHZhbHVlLgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IFFFSSBwdWxzZSBjb3VudGVyIHZhbHVlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0dFVF9DTlRfVkFMVUUocWVpKSAgICAgICgocWVpKS0+Q05UKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUUVJIGNvdW50aW5nIGRpcmVjdGlvbgorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR2YWwgICAgIDAgICAgICAgUUVJIGNvdW50ZXIgaXMgaW4gZG93bi1jb3VudGluZy4KKyAgKiBAcmV0dmFsICAgICAxICAgICAgIFFFSSBjb3VudGVyIGlzIGluIHVwLWNvdW50aW5nLgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IFFFSSBjb3VudGluZyBkaXJlY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfR0VUX0RJUihxZWkpICAgICgoKHFlaSktPlNUQVRVUyAmIChRRUlfU1RBVFVTX0RJUkZfTXNrKSk/MTowKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUUVJIGNvdW50ZXIgaG9sZCB2YWx1ZQorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIFFFSSBwdWxzZSBjb3VudGVyIGhvbGQgcmVnaXN0ZXIgdmFsdWUuCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXQgUUVJIHB1bHNlIGNvdW50ZXIgaG9sZCB2YWx1ZSwgd2hpY2ggaXMgdXBkYXRlZCB3aXRoIGNvdW50ZXIgdmFsdWUgaW4gaG9sZCBjb3VudGVyIHZhbHVlIGNvbnRyb2wuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfR0VUX0hPTERfVkFMVUUocWVpKSAgICAgKChxZWkpLT5DTlRIT0xEKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUUVJIGNvdW50ZXIgaW5kZXggbGF0Y2ggdmFsdWUKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBRRUkgcHVsc2UgY291bnRlciBpbmRleCBsYXRjaCB2YWx1ZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IFFFSSBwdWxzZSBjb3VudGVyIGluZGV4IGxhdGNoIHZhbHVlLCB3aGljaCBpcyB1cGRhdGVkIHdpdGggY291bnRlciB2YWx1ZSB3aGVuIHRoZSBpbmRleCBpcyBkZXRlY3RlZC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9HRVRfSU5ERVhfTEFUQ0hfVkFMVUUocWVpKSAgICAgKChxZWkpLT5DTlRMQVRDSCkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFFFSSBjb3VudGVyIGluZGV4IGxhdGNoIHZhbHVlCisgICogQHBhcmFtW2luXSAgcWVpICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVmFsICBUaGUgbGF0Y2ggdmFsdWUuCisgICogQHJldHVybiAgICAgUUVJIHB1bHNlIGNvdW50ZXIgaW5kZXggbGF0Y2ggdmFsdWUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHNldCBRRUkgcHVsc2UgY291bnRlciBpbmRleCBsYXRjaCB2YWx1ZSwgd2hpY2ggaXMgdXBkYXRlZCB3aXRoIGNvdW50ZXIgdmFsdWUgd2hlbiB0aGUgaW5kZXggaXMgZGV0ZWN0ZWQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfU0VUX0lOREVYX0xBVENIX1ZBTFVFKHFlaSx1MzJWYWwpICAgICAoKHFlaSktPkNOVExBVENIID0gKHUzMlZhbCkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBRRUkgaW50ZXJydXB0IGZsYWcgc3RhdHVzCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkludFNlbCAgIEludGVycnVwdCB0eXBlIHNlbGVjdGlvbi4KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX1NUQVRVU19ESVJGX01zayAgICAgIDogQ291bnRpbmcgZGlyZWN0aW9uIGZsYWcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX1NUQVRVU19ESVJDSEdGX01zayAgIDogRGlyZWN0aW9uIGNoYW5nZSBmbGFnCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9TVEFUVVNfT1ZVTkZfTXNrICAgICA6IENvdW50ZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGZsYWcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX1NUQVRVU19DTVBGX01zayAgICAgIDogQ29tcGFyZS1tYXRjaCBmbGFnCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9TVEFUVVNfSURYRl9Nc2sgICAgICA6IEluZGV4IGRldGVjdGVkIGZsYWcKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICBRRUkgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnIGlzIG5vdCBzZXQuCisgICogQHJldHZhbCAgICAgMSAgICAgICAgICAgUUVJIHNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZyBpcyBzZXQuCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXQgUUVJIHNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZyBzdGF0dXMuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfR0VUX0lOVF9GTEFHKHFlaSwgdTMySW50U2VsKSAgICAgICAgKCgocWVpKS0+U1RBVFVTICYgKHUzMkludFNlbCkpPzE6MCkKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBRRUkgaW50ZXJydXB0IGZsYWcKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMySW50U2VsICAgSW50ZXJydXB0IHR5cGUgc2VsZWN0aW9uLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfU1RBVFVTX0RJUkNIR0ZfTXNrICAgOiBEaXJlY3Rpb24gY2hhbmdlIGZsYWcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX1NUQVRVU19PVlVORl9Nc2sgICAgIDogQ291bnRlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cgZmxhZworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfU1RBVFVTX0NNUEZfTXNrICAgICAgOiBDb21wYXJlLW1hdGNoIGZsYWcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX1NUQVRVU19JRFhGX01zayAgICAgIDogSW5kZXggZGV0ZWN0ZWQgZmxhZworICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGNsZWFyIFFFSSBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBRRUlfQ0xSX0lOVF9GTEFHKHFlaSwgdTMySW50U2VsKSAgICAgKChxZWkpLT5TVEFUVVMgPSAodTMySW50U2VsKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFFFSSBjb3VudGVyIGNvbXBhcmUgdmFsdWUKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVmFsdWUgICAgVGhlIGNvdW50ZXIgY29tcGFyZSB2YWx1ZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBzZXQgUUVJIHB1bHNlIGNvdW50ZXIgY29tcGFyZSB2YWx1ZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9TRVRfQ05UX0NNUChxZWksIHUzMlZhbHVlKSAgICAgICgocWVpKS0+Q05UQ01QID0gKHUzMlZhbHVlKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFFFSSBjb3VudGVyIHZhbHVlCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlZhbHVlICAgIFRoZSBjb3VudGVyIGNvbXBhcmUgdmFsdWUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gc2V0IFFFSSBwdWxzZSBjb3VudGVyIHZhbHVlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX1NFVF9DTlRfVkFMVUUocWVpLCB1MzJWYWx1ZSkgICAgICAoKHFlaSktPkNOVCA9ICh1MzJWYWx1ZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBRRUkgY291bnRlciBob2xkIG1vZGUKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVHlwZSAgICAgVGhlIHRyaWdnZXJlZCB0eXBlLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0hPTERDTlRfTXNrICAgICAgOiBIb2xkIFFFSV9DTlQgY29udHJvbAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0hPTERUTVIwX01zayAgICAgOiBIb2xkIFFFSV9DTlQgYnkgVGltZXIwCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSE9MRFRNUjFfTXNrICAgICA6IEhvbGQgUUVJX0NOVCBieSBUaW1lcjEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9IT0xEVE1SMl9Nc2sgICAgIDogSG9sZCBRRUlfQ05UIGJ5IFRpbWVyMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0hPTERUTVIzX01zayAgICAgOiBIb2xkIFFFSV9DTlQgYnkgVGltZXIzCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZW5hYmxlIFFFSSBjb3VudGVyIGhvbGQgbW9kZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFFFSV9FTkFCTEVfSE9MRF9UUkdfU1JDKHFlaSwgdTMyVHlwZSkgICAgICAoKHFlaSktPkNUTCB8PSAodTMyVHlwZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUUVJIGNvdW50ZXIgaG9sZCBtb2RlCisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlR5cGUgICAgIFRoZSB0cmlnZ2VyZWQgdHlwZS4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9IT0xEQ05UX01zayAgICAgIDogSG9sZCBRRUlfQ05UIGNvbnRyb2wKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9IT0xEVE1SMF9Nc2sgICAgIDogSG9sZCBRRUlfQ05UIGJ5IFRpbWVyMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0hPTERUTVIxX01zayAgICAgOiBIb2xkIFFFSV9DTlQgYnkgVGltZXIxCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSE9MRFRNUjJfTXNrICAgICA6IEhvbGQgUUVJX0NOVCBieSBUaW1lcjIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9IT0xEVE1SM19Nc2sgICAgIDogSG9sZCBRRUlfQ05UIGJ5IFRpbWVyMworICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGRpc2FibGUgUUVJIGNvdW50ZXIgaG9sZCBtb2RlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX0RJU0FCTEVfSE9MRF9UUkdfU1JDKHFlaSwgdTMyVHlwZSkgICAgICAoKHFlaSktPkNUTCAmPSB+KHUzMlR5cGUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgUUVJIG1heGltdW0gY291bnQgdmFsdWUKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVmFsdWUgICAgVGhlIGNvdW50ZXIgbWF4aW11bSB2YWx1ZS4KKyAgKiBAcmV0dXJuICAgICBRRUkgbWF4aW11bSBjb3VudCB2YWx1ZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gc2V0IFFFSSBtYXhpbXVtIGNvdW50IHZhbHVlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX1NFVF9DTlRfTUFYKHFlaSwgdTMyVmFsdWUpICAgICAgKChxZWkpLT5DTlRNQVggPSAodTMyVmFsdWUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgUUVJIGNvdW50aW5nIG1vZGUKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTW9kZSAgICAgUUVJIGNvdW50aW5nIG1vZGUuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfWDRfRlJFRV9DT1VOVElOR19NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfWDJfRlJFRV9DT1VOVElOR19NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfWDRfQ09NUEFSRV9DT1VOVElOR19NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfWDJfQ09NUEFSRV9DT1VOVElOR19NT0RFCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gc2V0IFFFSSBjb3VudGluZyBtb2RlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUUVJX1NFVF9DTlRfTU9ERShxZWksIHUzMk1vZGUpICAgICAgICgocWVpKS0+Q1RMID0gKChxZWkpLT5DVEwgJiAoflFFSV9DVExfTU9ERV9Nc2spKSB8ICh1MzJNb2RlKSkKKworCit2b2lkIFFFSV9DbG9zZShRRUlfVCogcWVpKTsKK3ZvaWQgUUVJX0Rpc2FibGVJbnQoUUVJX1QqIHFlaSwgdWludDMyX3QgdTMySW50U2VsKTsKK3ZvaWQgUUVJX0VuYWJsZUludChRRUlfVCogcWVpLCB1aW50MzJfdCB1MzJJbnRTZWwpOwordm9pZCBRRUlfT3BlbihRRUlfVCogcWVpLCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJWYWx1ZSk7Cit2b2lkIFFFSV9TdGFydChRRUlfVCogcWVpKTsKK3ZvaWQgUUVJX1N0b3AoUUVJX1QqIHFlaSk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBRRUlfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUUVJX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLypfX1FFSV9IX18qLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9xc3BpLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9xc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiMjk0MQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3FzcGkuaApAQCAtMCwwICsxLDM4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHFzcGkuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFFTUEkgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19RU1BJX0hfXworI2RlZmluZSBfX1FTUElfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBRU1BJX0RyaXZlciBRU1BJIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFFTUElfRVhQT1JURURfQ09OU1RBTlRTIFFTUEkgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworCisjZGVmaW5lIFFTUElfTU9ERV8wICAgICAgICAoUVNQSV9DVExfVFhORUdfTXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDTEtQT0w9MDsgUlhORUc9MDsgVFhORUc9MSAqLworI2RlZmluZSBRU1BJX01PREVfMSAgICAgICAgKFFTUElfQ1RMX1JYTkVHX01zaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLUE9MPTA7IFJYTkVHPTE7IFRYTkVHPTAgKi8KKyNkZWZpbmUgUVNQSV9NT0RFXzIgICAgICAgIChRU1BJX0NUTF9DTEtQT0xfTXNrIHwgUVNQSV9DVExfUlhORUdfTXNrKSAgICAgICAvKiE8IENMS1BPTD0xOyBSWE5FRz0xOyBUWE5FRz0wICovCisjZGVmaW5lIFFTUElfTU9ERV8zICAgICAgICAoUVNQSV9DVExfQ0xLUE9MX01zayB8IFFTUElfQ1RMX1RYTkVHX01zaykgICAgICAgLyohPCBDTEtQT0w9MTsgUlhORUc9MDsgVFhORUc9MSAqLworCisjZGVmaW5lIFFTUElfU0xBVkUgICAgICAgICAoUVNQSV9DVExfU0xBVkVfTXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZXQgYXMgc2xhdmUgKi8KKyNkZWZpbmUgUVNQSV9NQVNURVIgICAgICAgICgweDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNldCBhcyBtYXN0ZXIgKi8KKworI2RlZmluZSBRU1BJX1NTICAgICAgICAgICAgICAgIChRU1BJX1NTQ1RMX1NTX01zaykgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IFNTICovCisjZGVmaW5lIFFTUElfU1NfQUNUSVZFX0hJR0ggICAgKFFTUElfU1NDVExfU1NBQ1RQT0xfTXNrKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUyBhY3RpdmUgaGlnaCAqLworI2RlZmluZSBRU1BJX1NTX0FDVElWRV9MT1cgICAgICgweDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1MgYWN0aXZlIGxvdyAqLworCisvKiBRU1BJIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIFFTUElfVU5JVF9JTlRfTUFTSyAgICAgICAgICAgICAgICAoMHgwMDFVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9TU0FDVF9JTlRfTUFTSyAgICAgICAgICAgICAgICgweDAwMlVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9TU0lOQUNUX0lOVF9NQVNLICAgICAgICAgICAgICgweDAwNFVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBRU1BJX1NMVlVSX0lOVF9NQVNLICAgICAgICAgICAgICAgKDB4MDA4VUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSB1bmRlciBydW4gaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9TTFZCRV9JTlRfTUFTSyAgICAgICAgICAgICAgICgweDAxMFVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgYml0IGNvdW50IGVycm9yIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFFTUElfU0xWVE9fSU5UX01BU0sgICAgICAgICAgICAgICAoMHgwMjBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIE1vZGUgVGltZS1vdXQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9UWFVGX0lOVF9NQVNLICAgICAgICAgICAgICAgICgweDA0MFVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgVFggdW5kZXJmbG93IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFFTUElfRklGT19UWFRIX0lOVF9NQVNLICAgICAgICAgICAoMHgwODBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZJRk8gVFggdGhyZXNob2xkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFFTUElfRklGT19SWFRIX0lOVF9NQVNLICAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZJRk8gUlggdGhyZXNob2xkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFFTUElfRklGT19SWE9WX0lOVF9NQVNLICAgICAgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZJRk8gUlggb3ZlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSyAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGSUZPIFJYIHRpbWUtb3V0IGludGVycnVwdCBtYXNrICovCisKKy8qIFFTUEkgU3RhdHVzIE1hc2sgKi8KKyNkZWZpbmUgUVNQSV9CVVNZX01BU0sgICAgICAgICAgICAgICAgICAgICgweDAxVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQnVzeSBzdGF0dXMgbWFzayAqLworI2RlZmluZSBRU1BJX1JYX0VNUFRZX01BU0sgICAgICAgICAgICAgICAgKDB4MDJVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCBlbXB0eSBzdGF0dXMgbWFzayAqLworI2RlZmluZSBRU1BJX1JYX0ZVTExfTUFTSyAgICAgICAgICAgICAgICAgKDB4MDRVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCBmdWxsIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFFTUElfVFhfRU1QVFlfTUFTSyAgICAgICAgICAgICAgICAoMHgwOFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYIGVtcHR5IHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFFTUElfVFhfRlVMTF9NQVNLICAgICAgICAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYIGZ1bGwgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9UWFJYX1JFU0VUX01BU0sgICAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFggb3IgUlggcmVzZXQgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9TUElFTl9TVFNfTUFTSyAgICAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJRU4gc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgUVNQSV9TU0xJTkVfU1RTX01BU0sgICAgICAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSXhfU1MgbGluZSBzdGF0dXMgbWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFFTUElfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFFTUElfRVhQT1JURURfRlVOQ1RJT05TIFFTUEkgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciB0aGUgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBXcml0ZSAxIHRvIFVOSVRJRiBiaXQgb2YgUVNQSV9TVEFUVVMgcmVnaXN0ZXIgdG8gY2xlYXIgdGhlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IGZsYWcuCisgICovCisjZGVmaW5lIFFTUElfQ0xSX1VOSVRfVFJBTlNfSU5UX0ZMQUcocXNwaSkgICAoIChxc3BpKS0+U1RBVFVTID0gUVNQSV9TVEFUVVNfVU5JVElGX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgMi1iaXQgVHJhbnNmZXIgbW9kZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBUV09CSVQgYml0IG9mIFFTUElfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgMi1iaXQgVHJhbnNmZXIgbW9kZS4KKyAgKi8KKyNkZWZpbmUgUVNQSV9ESVNBQkxFXzJCSVRfTU9ERShxc3BpKSAgICggKHFzcGkpLT5DVEwgJj0gflFTUElfQ1RMX1RXT0JJVF9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFNsYXZlIDMtd2lyZSBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFNMVjNXSVJFIGJpdCBvZiBRU1BJX1NTQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgU2xhdmUgMy13aXJlIG1vZGUuCisgICovCisjZGVmaW5lIFFTUElfRElTQUJMRV8zV0lSRV9NT0RFKHFzcGkpICAgKCAocXNwaSktPlNTQ1RMICY9IH5RU1BJX1NTQ1RMX1NMVjNXSVJFX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgRHVhbCBJL08gbW9kZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBEVUFMSU9FTiBiaXQgb2YgUVNQSV9DVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBEdWFsIEkvTyBtb2RlLgorICAqLworI2RlZmluZSBRU1BJX0RJU0FCTEVfRFVBTF9NT0RFKHFzcGkpICAgKCAocXNwaSktPkNUTCAmPSB+UVNQSV9DVExfRFVBTElPRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBRdWFkIEkvTyBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFFVQURJT0VOIGJpdCBvZiBRU1BJX0NUTCByZWdpc3RlciB0byBkaXNhYmxlIFF1YWQgSS9PIG1vZGUuCisgICovCisjZGVmaW5lIFFTUElfRElTQUJMRV9RVUFEX01PREUocXNwaSkgICAoIChxc3BpKS0+Q1RMICY9IH5RU1BJX0NUTF9RVUFESU9FTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgMi1iaXQgVHJhbnNmZXIgbW9kZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgVFdPQklUIGJpdCBvZiBRU1BJX0NUTCByZWdpc3RlciB0byBlbmFibGUgMi1iaXQgVHJhbnNmZXIgbW9kZS4KKyAgKi8KKyNkZWZpbmUgUVNQSV9FTkFCTEVfMkJJVF9NT0RFKHFzcGkpICAgKCAocXNwaSktPkNUTCB8PSBRU1BJX0NUTF9UV09CSVRfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFNsYXZlIDMtd2lyZSBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBTTFYzV0lSRSBiaXQgb2YgUVNQSV9TU0NUTCByZWdpc3RlciB0byBlbmFibGUgU2xhdmUgMy13aXJlIG1vZGUuCisgICovCisjZGVmaW5lIFFTUElfRU5BQkxFXzNXSVJFX01PREUocXNwaSkgICAoIChxc3BpKS0+U1NDVEwgfD0gUVNQSV9TU0NUTF9TTFYzV0lSRV9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgRHVhbCBpbnB1dCBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIERBVERJUiBiaXQgYW5kIHNldCBEVUFMSU9FTiBiaXQgb2YgUVNQSV9DVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIER1YWwgaW5wdXQgbW9kZS4KKyAgKi8KKyNkZWZpbmUgUVNQSV9FTkFCTEVfRFVBTF9JTlBVVF9NT0RFKHFzcGkpICAgKCAocXNwaSktPkNUTCA9ICgocXNwaSktPkNUTCAmICh+UVNQSV9DVExfREFURElSX01zaykpIHwgUVNQSV9DVExfRFVBTElPRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIER1YWwgb3V0cHV0IG1vZGUuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IERBVERJUiBiaXQgYW5kIERVQUxJT0VOIGJpdCBvZiBRU1BJX0NUTCByZWdpc3RlciB0byBlbmFibGUgRHVhbCBvdXRwdXQgbW9kZS4KKyAgKi8KKyNkZWZpbmUgUVNQSV9FTkFCTEVfRFVBTF9PVVRQVVRfTU9ERShxc3BpKSAgICggKHFzcGkpLT5DVEwgfD0gKFFTUElfQ1RMX0RBVERJUl9Nc2sgfCBRU1BJX0NUTF9EVUFMSU9FTl9Nc2spICkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFF1YWQgaW5wdXQgbW9kZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBEQVRESVIgYml0IGFuZCBzZXQgUVVBRElPRU4gYml0IG9mIFFTUElfQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBRdWFkIGlucHV0IG1vZGUuCisgICovCisjZGVmaW5lIFFTUElfRU5BQkxFX1FVQURfSU5QVVRfTU9ERShxc3BpKSAgICggKHFzcGkpLT5DVEwgPSAoKHFzcGkpLT5DVEwgJiAoflFTUElfQ1RMX0RBVERJUl9Nc2spKSB8IFFTUElfQ1RMX1FVQURJT0VOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBRdWFkIG91dHB1dCBtb2RlLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBEQVRESVIgYml0IGFuZCBRVUFESU9FTiBiaXQgb2YgUVNQSV9DVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFF1YWQgb3V0cHV0IG1vZGUuCisgICovCisjZGVmaW5lIFFTUElfRU5BQkxFX1FVQURfT1VUUFVUX01PREUocXNwaSkgICAoIChxc3BpKS0+Q1RMIHw9IChRU1BJX0NUTF9EQVRESVJfTXNrIHwgUVNQSV9DVExfUVVBRElPRU5fTXNrKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIFRyaWdnZXIgUlggUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgUlhQRE1BRU4gYml0IG9mIFFTUElfUERNQUNUTCByZWdpc3RlciB0byBlbmFibGUgUlggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgUVNQSV9UUklHR0VSX1JYX1BETUEocXNwaSkgICAoIChxc3BpKS0+UERNQUNUTCB8PSBRU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgVHJpZ2dlciBUWCBQRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBUWFBETUFFTiBiaXQgb2YgUVNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBUWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBRU1BJX1RSSUdHRVJfVFhfUERNQShxc3BpKSAgICggKHFzcGkpLT5QRE1BQ1RMIHw9IFFTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUcmlnZ2VyIFRYIGFuZCBSWCBQRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBUWFBETUFFTiBiaXQgYW5kIFJYUERNQUVOIGJpdCBvZiBRU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFRYIGFuZCBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBRU1BJX1RSSUdHRVJfVFhfUlhfUERNQShxc3BpKSAgICggKHFzcGkpLT5QRE1BQ1RMIHw9IChRU1BJX1BETUFDVExfVFhQRE1BRU5fTXNrIHwgUVNQSV9QRE1BQ1RMX1JYUERNQUVOX01zaykgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFJYIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgUlhQRE1BRU4gYml0IG9mIFFTUElfUERNQUNUTCByZWdpc3RlciB0byBkaXNhYmxlIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFFTUElfRElTQUJMRV9SWF9QRE1BKHFzcGkpICAgKCAocXNwaSktPlBETUFDVEwgJj0gflFTUElfUERNQUNUTF9SWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFRYIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgVFhQRE1BRU4gYml0IG9mIFFTUElfUERNQUNUTCByZWdpc3RlciB0byBkaXNhYmxlIFRYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFFTUElfRElTQUJMRV9UWF9QRE1BKHFzcGkpICAgKCAocXNwaSktPlBETUFDVEwgJj0gflFTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFRYIGFuZCBSWCBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFRYUERNQUVOIGJpdCBhbmQgUlhQRE1BRU4gYml0IG9mIFFTUElfUERNQUNUTCByZWdpc3RlciB0byBkaXNhYmxlIFRYIGFuZCBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBRU1BJX0RJU0FCTEVfVFhfUlhfUERNQShxc3BpKSAgICggKHFzcGkpLT5QRE1BQ1RMICY9IH4oUVNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayB8IFFTUElfUERNQUNUTF9SWFBETUFFTl9Nc2spICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBjb3VudCBvZiBhdmFpbGFibGUgZGF0YSBpbiBSWCBGSUZPLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBUaGUgY291bnQgb2YgYXZhaWxhYmxlIGRhdGEgaW4gUlggRklGTy4KKyAgKiBAZGV0YWlscyAgICBSZWFkIFJYQ05UIChRU1BJX1NUQVRVU1syNzoyNF0pIHRvIGdldCB0aGUgY291bnQgb2YgYXZhaWxhYmxlIGRhdGEgaW4gUlggRklGTy4KKyAgKi8KKyNkZWZpbmUgUVNQSV9HRVRfUlhfRklGT19DT1VOVChxc3BpKSAgICggKChxc3BpKS0+U1RBVFVTICYgUVNQSV9TVEFUVVNfUlhDTlRfTXNrKSA+PiBRU1BJX1NUQVRVU19SWENOVF9Qb3MgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgdGhlIFJYIEZJRk8gZW1wdHkgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHZhbCAgICAgMCBSWCBGSUZPIGlzIG5vdCBlbXB0eS4KKyAgKiBAcmV0dmFsICAgICAxIFJYIEZJRk8gaXMgZW1wdHkuCisgICogQGRldGFpbHMgICAgUmVhZCBSWEVNUFRZIGJpdCBvZiBRU1BJX1NUQVRVUyByZWdpc3RlciB0byBnZXQgdGhlIFJYIEZJRk8gZW1wdHkgZmxhZy4KKyAgKi8KKyNkZWZpbmUgUVNQSV9HRVRfUlhfRklGT19FTVBUWV9GTEFHKHFzcGkpICAgKCAoKHFzcGkpLT5TVEFUVVMgJiBRU1BJX1NUQVRVU19SWEVNUFRZX01zaykgPj4gUVNQSV9TVEFUVVNfUlhFTVBUWV9Qb3MgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgdGhlIFRYIEZJRk8gZW1wdHkgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHZhbCAgICAgMCBUWCBGSUZPIGlzIG5vdCBlbXB0eS4KKyAgKiBAcmV0dmFsICAgICAxIFRYIEZJRk8gaXMgZW1wdHkuCisgICogQGRldGFpbHMgICAgUmVhZCBUWEVNUFRZIGJpdCBvZiBRU1BJX1NUQVRVUyByZWdpc3RlciB0byBnZXQgdGhlIFRYIEZJRk8gZW1wdHkgZmxhZy4KKyAgKi8KKyNkZWZpbmUgUVNQSV9HRVRfVFhfRklGT19FTVBUWV9GTEFHKHFzcGkpICAgKCAoKHFzcGkpLT5TVEFUVVMgJiBRU1BJX1NUQVRVU19UWEVNUFRZX01zaykgPj4gUVNQSV9TVEFUVVNfVFhFTVBUWV9Qb3MgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgdGhlIFRYIEZJRk8gZnVsbCBmbGFnLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dmFsICAgICAwIFRYIEZJRk8gaXMgbm90IGZ1bGwuCisgICogQHJldHZhbCAgICAgMSBUWCBGSUZPIGlzIGZ1bGwuCisgICogQGRldGFpbHMgICAgUmVhZCBUWEZVTEwgYml0IG9mIFFTUElfU1RBVFVTIHJlZ2lzdGVyIHRvIGdldCB0aGUgVFggRklGTyBmdWxsIGZsYWcuCisgICovCisjZGVmaW5lIFFTUElfR0VUX1RYX0ZJRk9fRlVMTF9GTEFHKHFzcGkpICAgKCAoKHFzcGkpLT5TVEFUVVMgJiBRU1BJX1NUQVRVU19UWEZVTExfTXNrKSA+PiBRU1BJX1NUQVRVU19UWEZVTExfUG9zICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBkYXR1bSByZWFkIGZyb20gUlggcmVnaXN0ZXIuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIERhdGEgaW4gUlggcmVnaXN0ZXIuCisgICogQGRldGFpbHMgICAgUmVhZCBRU1BJX1JYIHJlZ2lzdGVyIHRvIGdldCB0aGUgcmVjZWl2ZWQgZGF0dW0uCisgICovCisjZGVmaW5lIFFTUElfUkVBRF9SWChxc3BpKSAgICggKHFzcGkpLT5SWCApCisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIGRhdHVtIHRvIFRYIHJlZ2lzdGVyLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJUeERhdGEgVGhlIGRhdHVtIHdoaWNoIHVzZXIgYXR0ZW1wdCB0byB0cmFuc2ZlciB0aHJvdWdoIFFTUEkgYnVzLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgV3JpdGUgdTMyVHhEYXRhIHRvIFFTUElfVFggcmVnaXN0ZXIuCisgICovCisjZGVmaW5lIFFTUElfV1JJVEVfVFgocXNwaSwgdTMyVHhEYXRhKSAgICggKHFzcGkpLT5UWCA9ICh1MzJUeERhdGEpICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFFTUEl4X1NTIHBpbiB0byBoaWdoIHN0YXRlLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIERpc2FibGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbiBhbmQgc2V0IFFTUEl4X1NTIHBpbiB0byBoaWdoIHN0YXRlLgorICAqLworI2RlZmluZSBRU1BJX1NFVF9TU19ISUdIKHFzcGkpICAgKCAocXNwaSktPlNTQ1RMID0gKChxc3BpKS0+U1NDVEwgJiAoflFTUElfU1NDVExfQVVUT1NTX01zaykpIHwgKFFTUElfU1NDVExfU1NBQ1RQT0xfTXNrIHwgUVNQSV9TU0NUTF9TU19Nc2spICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFFTUEl4X1NTIHBpbiB0byBsb3cgc3RhdGUuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgRGlzYWJsZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uIGFuZCBzZXQgUVNQSXhfU1MgcGluIHRvIGxvdyBzdGF0ZS4KKyAgKi8KKyNkZWZpbmUgUVNQSV9TRVRfU1NfTE9XKHFzcGkpICAgKCAocXNwaSktPlNTQ1RMID0gKChxc3BpKS0+U1NDVEwgJiAofihRU1BJX1NTQ1RMX0FVVE9TU19Nc2sgfCBRU1BJX1NTQ1RMX1NTQUNUUE9MX01zaykpKSB8IFFTUElfU1NDVExfU1NfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEJ5dGUgUmVvcmRlciBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBFbmFibGUgQnl0ZSBSZW9yZGVyIGZ1bmN0aW9uLiBUaGUgc3VzcGVuZCBpbnRlcnZhbCBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIFNVU1BJVFYgKFFTUElfQ1RMWzc6NF0pLgorICAqLworI2RlZmluZSBRU1BJX0VOQUJMRV9CWVRFX1JFT1JERVIocXNwaSkgICAoIChxc3BpKS0+Q1RMIHw9ICBRU1BJX0NUTF9SRU9SREVSX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgQnl0ZSBSZW9yZGVyIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFJFT1JERVIgYml0IGZpZWxkIG9mIFFTUElfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgQnl0ZSBSZW9yZGVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBRU1BJX0RJU0FCTEVfQllURV9SRU9SREVSKHFzcGkpICAgKCAocXNwaSktPkNUTCAmPSB+UVNQSV9DVExfUkVPUkRFUl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgdGhlIGxlbmd0aCBvZiBzdXNwZW5kIGludGVydmFsLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJTdXNwQ3ljbGUgRGVjaWRlcyB0aGUgbGVuZ3RoIG9mIHN1c3BlbmQgaW50ZXJ2YWwuIEl0IGNvdWxkIGJlIDAgfiAxNS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCB0aGUgbGVuZ3RoIG9mIHN1c3BlbmQgaW50ZXJ2YWwgYWNjb3JkaW5nIHRvIHUzMlN1c3BDeWNsZS4KKyAgKiAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHN1c3BlbmQgaW50ZXJ2YWwgaXMgKCh1MzJTdXNwQ3ljbGUgKyAwLjUpICogdGhlIGxlbmd0aCBvZiBvbmUgUVNQSSBidXMgY2xvY2sgY3ljbGUpLgorICAqLworI2RlZmluZSBRU1BJX1NFVF9TVVNQRU5EX0NZQ0xFKHFzcGksIHUzMlN1c3BDeWNsZSkgICAoIChxc3BpKS0+Q1RMID0gKChxc3BpKS0+Q1RMICYgflFTUElfQ1RMX1NVU1BJVFZfTXNrKSB8ICgodTMyU3VzcEN5Y2xlKSA8PCBRU1BJX0NUTF9TVVNQSVRWX1BvcykgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgdGhlIFFTUEkgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aCBMU0IgZmlyc3QuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IExTQiBiaXQgb2YgUVNQSV9DVEwgcmVnaXN0ZXIgdG8gc2V0IHRoZSBRU1BJIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGggTFNCIGZpcnN0LgorICAqLworI2RlZmluZSBRU1BJX1NFVF9MU0JfRklSU1QocXNwaSkgICAoIChxc3BpKS0+Q1RMIHw9IFFTUElfQ1RMX0xTQl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgdGhlIFFTUEkgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aCBNU0IgZmlyc3QuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgTFNCIGJpdCBvZiBRU1BJX0NUTCByZWdpc3RlciB0byBzZXQgdGhlIFFTUEkgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aCBNU0IgZmlyc3QuCisgICovCisjZGVmaW5lIFFTUElfU0VUX01TQl9GSVJTVChxc3BpKSAgICggKHFzcGkpLT5DVEwgJj0gflFTUElfQ1RMX0xTQl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgdGhlIGRhdGEgd2lkdGggb2YgYSBRU1BJIHRyYW5zYWN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJXaWR0aCBUaGUgYml0IHdpZHRoIG9mIG9uZSB0cmFuc2FjdGlvbi4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFRoZSBkYXRhIHdpZHRoIGNhbiBiZSA4IH4gMzIgYml0cy4KKyAgKi8KKyNkZWZpbmUgUVNQSV9TRVRfREFUQV9XSURUSChxc3BpLCB1MzJXaWR0aCkgICAoIChxc3BpKS0+Q1RMID0gKChxc3BpKS0+Q1RMICYgflFTUElfQ1RMX0RXSURUSF9Nc2spIHwgKCgodTMyV2lkdGgpICYgMHgxRikgPDwgUVNQSV9DVExfRFdJRFRIX1BvcykgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgdGhlIFFTUEkgYnVzeSBzdGF0ZS4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHZhbCAgICAgMCBRU1BJIGNvbnRyb2xsZXIgaXMgbm90IGJ1c3kuCisgICogQHJldHZhbCAgICAgMSBRU1BJIGNvbnRyb2xsZXIgaXMgYnVzeS4KKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIHRoZSBidXN5IHN0YXRlIG9mIFFTUEkgY29udHJvbGxlci4KKyAgKi8KKyNkZWZpbmUgUVNQSV9JU19CVVNZKHFzcGkpICAgKCAoKHFzcGkpLT5TVEFUVVMgJiBRU1BJX1NUQVRVU19CVVNZX01zaykgPj4gUVNQSV9TVEFUVVNfQlVTWV9Qb3MgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUVNQSSBjb250cm9sbGVyLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBTUElFTiAoUVNQSV9DVExbMF0pIHRvIGVuYWJsZSBRU1BJIGNvbnRyb2xsZXIuCisgICovCisjZGVmaW5lIFFTUElfRU5BQkxFKHFzcGkpICAgKCAocXNwaSktPkNUTCB8PSBRU1BJX0NUTF9TUElFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFFTUEkgY29udHJvbGxlci4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBTUElFTiAoUVNQSV9DVExbMF0pIHRvIGRpc2FibGUgUVNQSSBjb250cm9sbGVyLgorICAqLworI2RlZmluZSBRU1BJX0RJU0FCTEUocXNwaSkgICAoIChxc3BpKS0+Q1RMICY9IH5RU1BJX0NUTF9TUElFTl9Nc2sgKQorCisvKiBGdW5jdGlvbiBwcm90b3R5cGUgZGVjbGFyYXRpb24gKi8KK3VpbnQzMl90IFFTUElfT3BlbihRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMk1hc3RlclNsYXZlLCB1aW50MzJfdCB1MzJRU1BJTW9kZSwgdWludDMyX3QgdTMyRGF0YVdpZHRoLCB1aW50MzJfdCB1MzJCdXNDbG9jayk7Cit2b2lkIFFTUElfQ2xvc2UoUVNQSV9UICpxc3BpKTsKK3ZvaWQgUVNQSV9DbGVhclJ4RklGTyhRU1BJX1QgKnFzcGkpOwordm9pZCBRU1BJX0NsZWFyVHhGSUZPKFFTUElfVCAqcXNwaSk7Cit2b2lkIFFTUElfRGlzYWJsZUF1dG9TUyhRU1BJX1QgKnFzcGkpOwordm9pZCBRU1BJX0VuYWJsZUF1dG9TUyhRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMlNTUGluTWFzaywgdWludDMyX3QgdTMyQWN0aXZlTGV2ZWwpOwordWludDMyX3QgUVNQSV9TZXRCdXNDbG9jayhRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKTsKK3ZvaWQgUVNQSV9TZXRGSUZPKFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyVHhUaHJlc2hvbGQsIHVpbnQzMl90IHUzMlJ4VGhyZXNob2xkKTsKK3VpbnQzMl90IFFTUElfR2V0QnVzQ2xvY2soUVNQSV9UICpxc3BpKTsKK3ZvaWQgUVNQSV9FbmFibGVJbnQoUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgUVNQSV9EaXNhYmxlSW50KFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit1aW50MzJfdCBRU1BJX0dldEludEZsYWcoUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgUVNQSV9DbGVhckludEZsYWcoUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3VpbnQzMl90IFFTUElfR2V0U3RhdHVzKFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyTWFzayk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBRU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFFTUElfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1FTUElfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3J0Yy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyZTJlYwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3J0Yy5oCkBAIC0wLDAgKzEsMzU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcnRjLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFJlYWwgVGltZSBDbG9jayhSVEMpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fUlRDX0hfXworI2RlZmluZSBfX1JUQ19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFJUQ19Ecml2ZXIgUlRDIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFJUQ19FWFBPUlRFRF9DT05TVEFOVFMgUlRDIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBSVEMgSW5pdGlhbCBLZXl3b3JkIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUlRDX0lOSVRfS0VZICAgICAgICAgICAgMHhBNUVCMTM1N1VMICAgIC8qITwgUlRDIEluaXRpYXRpb24gS2V5IHRvIG1ha2UgUlRDIGxlYXZpbmcgcmVzZXQgc3RhdGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfV1JJVEVfS0VZICAgICAgICAgICAweDAwMDBBOTY1VUwgICAgLyohPCBSVEMgUmVnaXN0ZXIgQWNjZXNzIEVuYWJsZSBLZXkgdG8gZW5hYmxlIFJUQyByZWFkL3dyaXRlIGFjY2Vzc2libGUgYW5kIGtlcHQgMTAyNCBSVEMgY2xvY2sgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgUlRDIFRpbWUgQXR0cmlidXRlIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFJUQ19DTE9DS18xMiAgICAgICAgICAgIDBVTCAgICAgICAgICAgICAvKiE8IFJUQyBhcyAxMi1ob3VyIHRpbWUgc2NhbGUgd2l0aCBBTSBhbmQgUE0gaW5kaWNhdGlvbiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19DTE9DS18yNCAgICAgICAgICAgIDFVTCAgICAgICAgICAgICAvKiE8IFJUQyBhcyAyNC1ob3VyIHRpbWUgc2NhbGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfQU0gICAgICAgICAgICAgICAgICAxVUwgICAgICAgICAgICAgLyohPCBSVEMgYXMgQU0gaW5kaWNhdGlvbiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19QTSAgICAgICAgICAgICAgICAgIDJVTCAgICAgICAgICAgICAvKiE8IFJUQyBhcyBQTSBpbmRpY2F0aW9uIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFJUQyBUaWNrIFBlcmlvZCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBSVENfVElDS18xX1NFQyAgICAgICAgICAweDBVTCAgICAgICAgICAgLyohPCBSVEMgdGltZSB0aWNrIHBlcmlvZCBpcyAxIHNlY29uZCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19USUNLXzFfMl9TRUMgICAgICAgIDB4MVVMICAgICAgICAgICAvKiE8IFJUQyB0aW1lIHRpY2sgcGVyaW9kIGlzIDEvMiBzZWNvbmQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVElDS18xXzRfU0VDICAgICAgICAweDJVTCAgICAgICAgICAgLyohPCBSVEMgdGltZSB0aWNrIHBlcmlvZCBpcyAxLzQgc2Vjb25kIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RJQ0tfMV84X1NFQyAgICAgICAgMHgzVUwgICAgICAgICAgIC8qITwgUlRDIHRpbWUgdGljayBwZXJpb2QgaXMgMS84IHNlY29uZCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19USUNLXzFfMTZfU0VDICAgICAgIDB4NFVMICAgICAgICAgICAvKiE8IFJUQyB0aW1lIHRpY2sgcGVyaW9kIGlzIDEvMTYgc2Vjb25kIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RJQ0tfMV8zMl9TRUMgICAgICAgMHg1VUwgICAgICAgICAgIC8qITwgUlRDIHRpbWUgdGljayBwZXJpb2QgaXMgMS8zMiBzZWNvbmQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVElDS18xXzY0X1NFQyAgICAgICAweDZVTCAgICAgICAgICAgLyohPCBSVEMgdGltZSB0aWNrIHBlcmlvZCBpcyAxLzY0IHNlY29uZCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19USUNLXzFfMTI4X1NFQyAgICAgIDB4N1VMICAgICAgICAgICAvKiE8IFJUQyB0aW1lIHRpY2sgcGVyaW9kIGlzIDEvMTI4IHNlY29uZCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBSVEMgRGF5IG9mIFdlZWsgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUlRDX1NVTkRBWSAgICAgICAgICAgICAgMHgwVUwgICAgICAgICAgIC8qITwgRGF5IG9mIHRoZSBXZWVrIGlzIFN1bmRheSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19NT05EQVkgICAgICAgICAgICAgIDB4MVVMICAgICAgICAgICAvKiE8IERheSBvZiB0aGUgV2VlayBpcyBNb25kYXkgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVFVFU0RBWSAgICAgICAgICAgICAweDJVTCAgICAgICAgICAgLyohPCBEYXkgb2YgdGhlIFdlZWsgaXMgVHVlc2RheSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ19XRURORVNEQVkgICAgICAgICAgIDB4M1VMICAgICAgICAgICAvKiE8IERheSBvZiB0aGUgV2VlayBpcyBXZWRuZXNkYXkgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVEhVUlNEQVkgICAgICAgICAgICAweDRVTCAgICAgICAgICAgLyohPCBEYXkgb2YgdGhlIFdlZWsgaXMgVGh1cnNkYXkgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfRlJJREFZICAgICAgICAgICAgICAweDVVTCAgICAgICAgICAgLyohPCBEYXkgb2YgdGhlIFdlZWsgaXMgRnJpZGF5IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1NBVFVSREFZICAgICAgICAgICAgMHg2VUwgICAgICAgICAgIC8qITwgRGF5IG9mIHRoZSBXZWVrIGlzIFNhdHVyZGF5IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFJUQyBNaXNjZWxsYW5lb3VzIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFJUQ19ZRUFSMjAwMCAgICAgICAgICAgIDIwMDBVTCAgICAgICAgICAvKiE8IFJUQyBSZWZlcmVuY2UgZm9yIGNvbXB1dGUgeWVhciBkYXRhIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBSVENfVEFNUEVSMF9TRUxFQ1QgICAgICAoMHgxdWwgPDwgMCkgICAgLyohPCBTZWxlY3QgVGFtcGVyIDAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVEFNUEVSMV9TRUxFQ1QgICAgICAoMHgxdWwgPDwgMSkgICAgLyohPCBTZWxlY3QgVGFtcGVyIDEgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVEFNUEVSMl9TRUxFQ1QgICAgICAoMHgxdWwgPDwgMikgICAgLyohPCBTZWxlY3QgVGFtcGVyIDIgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVEFNUEVSM19TRUxFQ1QgICAgICAoMHgxdWwgPDwgMykgICAgLyohPCBTZWxlY3QgVGFtcGVyIDMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVEFNUEVSNF9TRUxFQ1QgICAgICAoMHgxdWwgPDwgNCkgICAgLyohPCBTZWxlY3QgVGFtcGVyIDQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfVEFNUEVSNV9TRUxFQ1QgICAgICAoMHgxdWwgPDwgNSkgICAgLyohPCBTZWxlY3QgVGFtcGVyIDUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBNQVhfVEFNUEVSX1BJTl9OVU0gICAgICA2dWwgICAgICAgICAgICAgLyohPCBUYW1wZXIgUGluIG51bWJlciBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgUlRDX1RBTVBFUl9ISUdIX0xFVkVMX0RFVEVDVCAgICAxdWwgICAgIC8qITwgVGFtcGVyIHBpbiBkZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBoaWdoIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUl9MT1dfTEVWRUxfREVURUNUICAgICAwdWwgICAgIC8qITwgVGFtcGVyIHBpbiBkZXRlY3Qgdm9sdGFnZSBsZXZlbCBpcyBsb3cgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBSVENfVEFNUEVSX0RFQk9VTkNFX0VOQUJMRSAgICAgIDF1bCAgICAgLyohPCBFbmFibGUgUlRDIHRhbXBlciBwaW4gZGUtYm91bmNlIGZ1bmN0aW9uIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1RBTVBFUl9ERUJPVU5DRV9ESVNBQkxFICAgICAwdWwgICAgIC8qITwgRGlzYWJsZSBSVEMgdGFtcGVyIHBpbiBkZS1ib3VuY2UgZnVuY3Rpb24gXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFJUQ19QQUlSMF9TRUxFQ1QgICAgICAgICgweDF1bCA8PCAwKSAgICAvKiE8IFNlbGVjdCBQYWlyIDAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfUEFJUjFfU0VMRUNUICAgICAgICAoMHgxdWwgPDwgMSkgICAgLyohPCBTZWxlY3QgUGFpciAxIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDX1BBSVIyX1NFTEVDVCAgICAgICAgKDB4MXVsIDw8IDIpICAgIC8qITwgU2VsZWN0IFBhaXIgMiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIE1BWF9QQUlSX05VTSAgICAgICAgICAgIDN1bCAgICAgICAgICAgICAvKiE8IFBhaXIgbnVtYmVyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBSVENfMlBPVzEwX0NMSyAgICAgICAgICAoMHgwdWwgPDwgUlRDX1RBTVBDVExfRFlOUkFURV9Qb3MpIC8qITwgMTAyNCBSVEMgY2xvY2sgY3ljbGVzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDXzJQT1cxMV9DTEsgICAgICAgICAgKDB4MXVsIDw8IFJUQ19UQU1QQ1RMX0RZTlJBVEVfUG9zKSAvKiE8IDEwMjQgeCAyIFJUQyBjbG9jayBjeWNsZXMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfMlBPVzEyX0NMSyAgICAgICAgICAoMHgydWwgPDwgUlRDX1RBTVBDVExfRFlOUkFURV9Qb3MpIC8qITwgMTAyNCB4IDQgUlRDIGNsb2NrIGN5Y2xlcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFJUQ18yUE9XMTNfQ0xLICAgICAgICAgICgweDN1bCA8PCBSVENfVEFNUENUTF9EWU5SQVRFX1BvcykgLyohPCAxMDI0IHggNiBSVEMgY2xvY2sgY3ljbGVzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUlRDXzJQT1cxNF9DTEsgICAgICAgICAgKDB4NHVsIDw8IFJUQ19UQU1QQ1RMX0RZTlJBVEVfUG9zKSAvKiE8IDEwMjQgeCA4IFJUQyBjbG9jayBjeWNsZXMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfMlBPVzE1X0NMSyAgICAgICAgICAoMHg1dWwgPDwgUlRDX1RBTVBDVExfRFlOUkFURV9Qb3MpIC8qITwgMTAyNCB4IDE2IFJUQyBjbG9jayBjeWNsZXMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfMlBPVzE2X0NMSyAgICAgICAgICAoMHg2dWwgPDwgUlRDX1RBTVBDVExfRFlOUkFURV9Qb3MpIC8qITwgMTAyNCB4IDMyIFJUQyBjbG9jayBjeWNsZXMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSVENfMlBPVzE3X0NMSyAgICAgICAgICAoMHg3dWwgPDwgUlRDX1RBTVBDVExfRFlOUkFURV9Qb3MpIC8qITwgMTAyNCB4IDY0IFJUQyBjbG9jayBjeWNsZXMgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFJFRl9SQU5ET01fUEFUVEVSTiAgICAgIDB4MHVsICAgLyohPCBUaGUgbmV3IHJlZmVyZW5jZSBwYXR0ZXJuIGlzIGdlbmVyYXRlZCBieSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aGVuIHRoZSByZWZlcmVuY2UgcGF0dGVybiBydW4gb3V0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgUkVGX1BSRVZJT1VTX1BBVFRFUk4gICAgMHgxdWwgICAvKiE8IFRoZSBuZXcgcmVmZXJlbmNlIHBhdHRlcm4gaXMgcmVwZWF0ZWQgcHJldmlvdXMgcmFuZG9tIHZhbHVlIHdoZW4gdGhlIHJlZmVyZW5jZSBwYXR0ZXJuIHJ1biBvdXQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBSRUZfU0VFRCAgICAgICAgICAgICAgICAweDN1bCAgIC8qITwgVGhlIG5ldyByZWZlcmVuY2UgcGF0dGVybiBpcyByZXBlYXRlZCBmcm9tIFNFRUQgKFJUQ19UQU1QU0VFRFszMTowXSkgd2hlbiB0aGUgcmVmZXJlbmNlIHBhdHRlcm4gcnVuIG91dCBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUlRDX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBSVENfRVhQT1JURURfU1RSVUNUUyBSVEMgRXhwb3J0ZWQgU3RydWN0cworICBAeworKi8KKy8qKgorICAqIEBkZXRhaWxzICAgIFJUQyBkZWZpbmUgVGltZSBEYXRhIFN0cnVjdAorICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCB1MzJZZWFyOyAgICAgICAgICAgLyohPCBZZWFyIHZhbHVlICovCisgICAgdWludDMyX3QgdTMyTW9udGg7ICAgICAgICAgIC8qITwgTW9udGggdmFsdWUgKi8KKyAgICB1aW50MzJfdCB1MzJEYXk7ICAgICAgICAgICAgLyohPCBEYXkgdmFsdWUgKi8KKyAgICB1aW50MzJfdCB1MzJEYXlPZldlZWs7ICAgICAgLyohPCBEYXkgb2Ygd2VlayB2YWx1ZSAqLworICAgIHVpbnQzMl90IHUzMkhvdXI7ICAgICAgICAgICAvKiE8IEhvdXIgdmFsdWUgKi8KKyAgICB1aW50MzJfdCB1MzJNaW51dGU7ICAgICAgICAgLyohPCBNaW51dGUgdmFsdWUgKi8KKyAgICB1aW50MzJfdCB1MzJTZWNvbmQ7ICAgICAgICAgLyohPCBTZWNvbmQgdmFsdWUgKi8KKyAgICB1aW50MzJfdCB1MzJUaW1lU2NhbGU7ICAgICAgLyohPCAxMi1Ib3VyLCAyNC1Ib3VyICovCisgICAgdWludDMyX3QgdTMyQW1QbTsgICAgICAgICAgIC8qITwgT25seSBUaW1lIFNjYWxlIHNlbGVjdCAxMi1ociB1c2VkICovCit9IFNfUlRDX1RJTUVfREFUQV9UOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFJUQ19FWFBPUlRFRF9TVFJVQ1RTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFJUQ19FWFBPUlRFRF9GVU5DVElPTlMgUlRDIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgSW5kaWNhdGUgaXMgTGVhcCBZZWFyIG9yIG5vdAorICAqCisgICogQHBhcmFtW2luXSAgcnRjICAgICAgICAgVGhlIHBvaW50ZXIgb2YgUlRDIG1vZHVsZS4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBUaGlzIHllYXIgaXMgbm90IGEgbGVhcCB5ZWFyCisgICogQHJldHZhbCAgICAgMSAgIFRoaXMgeWVhciBpcyBhIGxlYXAgeWVhcgorICAqCisgICogQGRldGFpbHMgICAgQWNjb3JkaW5nIHRvIGN1cnJlbnQgZGF0ZSwgcmV0dXJuIHRoaXMgeWVhciBpcyBsZWFwIHllYXIgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUlRDX0lTX0xFQVBfWUVBUihydGMpICAgICAgICAgICAoKHJ0YyktPkxFQVBZRUFSICYgUlRDX0xFQVBZRUFSX0xFQVBZRUFSX01zayA/IDE6MCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgUlRDIEFsYXJtIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICBUaGUgcG9pbnRlciBvZiBSVEMgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIFJUQyBhbGFybSBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19DTEVBUl9BTEFSTV9JTlRfRkxBRyhydGMpICAgKChydGMpLT5JTlRTVFMgPSBSVENfSU5UU1RTX0FMTUlGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgUlRDIFRpY2sgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHJ0YyAgICAgICAgIFRoZSBwb2ludGVyIG9mIFJUQyBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgUlRDIHRpY2sgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBSVENfQ0xFQVJfVElDS19JTlRfRkxBRyhydGMpICAgICgocnRjKS0+SU5UU1RTID0gUlRDX0lOVFNUU19USUNLSUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBSVEMgVGFtcGVyIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgUlRDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJUYW1wZXJGbGFnICAgVGFtcGVyIGludGVycnVwdCBmbGFnLiBJdCBjb25zaXN0cyBvZjogICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRTVFNfVEFNUDBJRl9Nc2sgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRTVFNfVEFNUDFJRl9Nc2sgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRTVFNfVEFNUDJJRl9Nc2sgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRTVFNfVEFNUDNJRl9Nc2sgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRTVFNfVEFNUDRJRl9Nc2sgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRTVFNfVEFNUDVJRl9Nc2sKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBSVEMgdGFtcGVyIHBpbiBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19DTEVBUl9UQU1QRVJfSU5UX0ZMQUcocnRjLCB1MzJUYW1wZXJGbGFnKSAgICgocnRjKS0+SU5UU1RTID0gKHUzMlRhbXBlckZsYWcpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUlRDIEFsYXJtIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICBUaGUgcG9pbnRlciBvZiBSVEMgbW9kdWxlLgorICAqCisgICogQHJldHZhbCAgICAgMCAgIFJUQyBhbGFybSBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBSVEMgYWxhcm0gaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGluZGljYXRlcyBSVEMgYWxhcm0gaW50ZXJydXB0IG9jY3VycmVkIG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19HRVRfQUxBUk1fSU5UX0ZMQUcocnRjKSAgICAgICAgICgoKHJ0YyktPklOVFNUUyAmIFJUQ19JTlRTVFNfQUxNSUZfTXNrKT8gMTowKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUlRDIFRpbWUgVGljayBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgcnRjICAgICAgICAgVGhlIHBvaW50ZXIgb2YgUlRDIG1vZHVsZS4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBSVEMgdGltZSB0aWNrIGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgICogQHJldHZhbCAgICAgMSAgIFJUQyB0aW1lIHRpY2sgaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGluZGljYXRlcyBSVEMgdGltZSB0aWNrIGludGVycnVwdCBvY2N1cnJlZCBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBSVENfR0VUX1RJQ0tfSU5UX0ZMQUcocnRjKSAgICAgICAgICAoKChydGMpLT5JTlRTVFMgJiBSVENfSU5UU1RTX1RJQ0tJRl9Nc2spPyAxOjApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBSVEMgVGFtcGVyIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICBUaGUgcG9pbnRlciBvZiBSVEMgbW9kdWxlLgorICAqCisgICogQHJldHZhbCAgICAgMCAgIFJUQyB0YW1wZXIgZXZlbnQgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAgKiBAcmV0dmFsICAgICAxICAgUlRDIHRhbXBlciBldmVudCBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaW5kaWNhdGVzIFJUQyB0YW1wZXIgZXZlbnQgb2NjdXJyZWQgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUlRDX0dFVF9UQU1QRVJfSU5UX0ZMQUcocnRjKSAgICAgICAgKCgocnRjKS0+SU5UU1RTICYgKDB4M0YwMCkpPyAxOjApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBSVEMgVGFtcGVyIEludGVycnVwdCBTdGF0dXMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHJ0YyAgICAgICAgIFRoZSBwb2ludGVyIG9mIFJUQyBtb2R1bGUuCisgICoKKyAgKiBAcmV0dmFsICAgICBSVENfSU5UU1RTX1RBTVAwSUZfTXNrICAgIFRhbXBlciAwIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZAorICAqIEByZXR2YWwgICAgIFJUQ19JTlRTVFNfVEFNUDFJRl9Nc2sgICAgVGFtcGVyIDEgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkCisgICogQHJldHZhbCAgICAgUlRDX0lOVFNUU19UQU1QMklGX01zayAgICBUYW1wZXIgMiBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQKKyAgKiBAcmV0dmFsICAgICBSVENfSU5UU1RTX1RBTVAzSUZfTXNrICAgIFRhbXBlciAzIGludGVycnVwdCBmbGFnIGlzIGdlbmVyYXRlZAorICAqIEByZXR2YWwgICAgIFJUQ19JTlRTVFNfVEFNUDRJRl9Nc2sgICAgVGFtcGVyIDQgaW50ZXJydXB0IGZsYWcgaXMgZ2VuZXJhdGVkCisgICogQHJldHZhbCAgICAgUlRDX0lOVFNUU19UQU1QNUlGX01zayAgICBUYW1wZXIgNSBpbnRlcnJ1cHQgZmxhZyBpcyBnZW5lcmF0ZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaW5kaWNhdGVzIFJUQyB0YW1wZXIgaW50ZXJydXB0IHN0YXR1cy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19HRVRfVEFNUEVSX0lOVF9TVEFUVVMocnRjKSAgICAgICgoKHJ0YyktPklOVFNUUyAmICgweDNGMDApKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFJUQyBUaWNrIFdha2UtdXAgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHJ0YyAgICAgICAgIFRoZSBwb2ludGVyIG9mIFJUQyBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIFJUQyB0aWNrIGludGVycnVwdCB3YWtlLXVwIGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUlRDX0VOQUJMRV9USUNLX1dBS0VVUChydGMpICAgICAgICAgKChydGMpLT5JTlRFTiB8PSBSVENfSU5URU5fVElDS0lFTl9Nc2spOworCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFJUQyBUaWNrIFdha2UtdXAgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHJ0YyAgICAgICAgIFRoZSBwb2ludGVyIG9mIFJUQyBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBSVEMgdGljayBpbnRlcnJ1cHQgd2FrZS11cCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19ESVNBQkxFX1RJQ0tfV0FLRVVQKHJ0YykgICAgICAgICgocnRjKS0+SU5URU4gJj0gflJUQ19JTlRFTl9USUNLSUVOX01zayk7CisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgU3BhcmUgUmVnaXN0ZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHJ0YyAgICAgICAgIFRoZSBwb2ludGVyIG9mIFJUQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyUmVnTnVtICAgVGhlIHNwYXJlIHJlZ2lzdGVyIG51bWJlciwgMH4xOS4KKyAgKgorICAqIEByZXR1cm4gICAgIFNwYXJlIHJlZ2lzdGVyIGNvbnRlbnQKKyAgKgorICAqIEBkZXRhaWxzICAgIFJlYWQgdGhlIHNwZWNpZnkgc3BhcmUgcmVnaXN0ZXIgY29udGVudC4KKyAgICAgICAgVGhlIHJldHVybmVkIHZhbHVlIGlzIHZhbGlkIG9ubHkgd2hlbiBSV0VORiAoUlRDX1JXRU5bMTZdKSBiaXQgaXMgc2V0LiBcbgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgUlRDX1JFQURfU1BBUkVfUkVHSVNURVIocnRjLCB1MzJSZWdOdW0pICAgICAoKHJ0YyktPlNQUlsodTMyUmVnTnVtKV0pCisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIFNwYXJlIFJlZ2lzdGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBydGMgICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgUlRDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJSZWdOdW0gICAgICAgVGhlIHNwYXJlIHJlZ2lzdGVyIG51bWJlciwgMH4xOS4KKyAgKiBAcGFyYW1baW5dICB1MzJSZWdWYWx1ZSAgICAgVGhlIHNwYXJlIHJlZ2lzdGVyIHZhbHVlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgV3JpdGUgc3BlY2lmeSBkYXRhIHRvIHNwYXJlIHJlZ2lzdGVyLgorICAgICAgICBUaGlzIG1hY3JvIGlzIGVmZmVjdCBvbmx5IHdoZW4gUldFTkYgKFJUQ19SV0VOWzE2XSkgYml0IGlzIHNldC4gXG4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFJUQ19XUklURV9TUEFSRV9SRUdJU1RFUihydGMsIHUzMlJlZ051bSwgdTMyUmVnVmFsdWUpICAgKChydGMpLT5TUFJbKHUzMlJlZ051bSldID0gKHUzMlJlZ1ZhbHVlKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBEZWNsYXJlIHRoZXNlIGlubGluZSBmdW5jdGlvbnMgaGVyZSB0byBhdm9pZCBNSVNSQSBDIDIwMDQgcnVsZSA4LjEgZXJyb3IgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFJUQ19XYWl0QWNjZXNzRW5hYmxlKHZvaWQpOworCisvKioKKyAgKiBAYnJpZWYgICAgICBXYWl0IFJUQyBBY2Nlc3MgRW5hYmxlCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBtYXhpbXVtIFJUQyByZWFkL3dyaXRlIGFjY2Vzc2libGUgdGltZS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFJUQ19XYWl0QWNjZXNzRW5hYmxlKHZvaWQpCit7CisgICAgd2hpbGUoKFJUQy0+UldFTiAmIFJUQ19SV0VOX1JXRU5GX01zaykgPT0gMHgwVUwpIHt9Cit9CisKK3ZvaWQgUlRDX09wZW4oU19SVENfVElNRV9EQVRBX1QgKnNQdCk7Cit2b2lkIFJUQ19DbG9zZSh2b2lkKTsKK3ZvaWQgUlRDXzMyS0NhbGlicmF0aW9uKGludDMyX3QgaTMyRnJlcXVlbmN5WDEwMDAwKTsKK3ZvaWQgUlRDX0dldERhdGVBbmRUaW1lKFNfUlRDX1RJTUVfREFUQV9UICpzUHQpOwordm9pZCBSVENfR2V0QWxhcm1EYXRlQW5kVGltZShTX1JUQ19USU1FX0RBVEFfVCAqc1B0KTsKK3ZvaWQgUlRDX1NldERhdGVBbmRUaW1lKFNfUlRDX1RJTUVfREFUQV9UICpzUHQpOwordm9pZCBSVENfU2V0QWxhcm1EYXRlQW5kVGltZShTX1JUQ19USU1FX0RBVEFfVCAqc1B0KTsKK3ZvaWQgUlRDX1NldERhdGUodWludDMyX3QgdTMyWWVhciwgdWludDMyX3QgdTMyTW9udGgsIHVpbnQzMl90IHUzMkRheSwgdWludDMyX3QgdTMyRGF5T2ZXZWVrKTsKK3ZvaWQgUlRDX1NldFRpbWUodWludDMyX3QgdTMySG91ciwgdWludDMyX3QgdTMyTWludXRlLCB1aW50MzJfdCB1MzJTZWNvbmQsIHVpbnQzMl90IHUzMlRpbWVNb2RlLCB1aW50MzJfdCB1MzJBbVBtKTsKK3ZvaWQgUlRDX1NldEFsYXJtRGF0ZSh1aW50MzJfdCB1MzJZZWFyLCB1aW50MzJfdCB1MzJNb250aCwgdWludDMyX3QgdTMyRGF5KTsKK3ZvaWQgUlRDX1NldEFsYXJtVGltZSh1aW50MzJfdCB1MzJIb3VyLCB1aW50MzJfdCB1MzJNaW51dGUsIHVpbnQzMl90IHUzMlNlY29uZCwgdWludDMyX3QgdTMyVGltZU1vZGUsIHVpbnQzMl90IHUzMkFtUG0pOwordm9pZCBSVENfU2V0QWxhcm1EYXRlTWFzayh1aW50OF90IHU4SXNUZW5ZTXNrLCB1aW50OF90IHU4SXNZTXNrLCB1aW50OF90IHU4SXNUZW5NTXNrLCB1aW50OF90IHU4SXNNTXNrLCB1aW50OF90IHU4SXNUZW5ETXNrLCB1aW50OF90IHU4SXNETXNrKTsKK3ZvaWQgUlRDX1NldEFsYXJtVGltZU1hc2sodWludDhfdCB1OElzVGVuSE1zaywgdWludDhfdCB1OElzSE1zaywgdWludDhfdCB1OElzVGVuTU1zaywgdWludDhfdCB1OElzTU1zaywgdWludDhfdCB1OElzVGVuU01zaywgdWludDhfdCB1OElzU01zayk7Cit1aW50MzJfdCBSVENfR2V0RGF5T2ZXZWVrKHZvaWQpOwordm9pZCBSVENfU2V0VGlja1BlcmlvZCh1aW50MzJfdCB1MzJUaWNrU2VsZWN0aW9uKTsKK3ZvaWQgUlRDX0VuYWJsZUludCh1aW50MzJfdCB1MzJJbnRGbGFnTWFzayk7Cit2b2lkIFJUQ19EaXNhYmxlSW50KHVpbnQzMl90IHUzMkludEZsYWdNYXNrKTsKK3ZvaWQgUlRDX0VuYWJsZVNwYXJlQWNjZXNzKHZvaWQpOwordm9pZCBSVENfRGlzYWJsZVNwYXJlUmVnaXN0ZXIodm9pZCk7Cit2b2lkIFJUQ19TdGF0aWNUYW1wZXJFbmFibGUodWludDMyX3QgdTMyVGFtcGVyU2VsZWN0LCB1aW50MzJfdCB1MzJEZXRlY0xldmVsLCB1aW50MzJfdCB1MzJEZWJvdW5jZUVuKTsKK3ZvaWQgUlRDX1N0YXRpY1RhbXBlckRpc2FibGUodWludDMyX3QgdTMyVGFtcGVyU2VsZWN0KTsKK3ZvaWQgUlRDX0R5bmFtaWNUYW1wZXJFbmFibGUodWludDMyX3QgdTMyUGFpclNlbCwgdWludDMyX3QgdTMyRGVib3VuY2VFbiwgdWludDMyX3QgdTMyUGFpcjFTb3VyY2UsIHVpbnQzMl90IHUzMlBhaXIyU291cmNlKTsKK3ZvaWQgUlRDX0R5bmFtaWNUYW1wZXJEaXNhYmxlKHVpbnQzMl90IHUzMlBhaXJTZWwpOwordm9pZCBSVENfRHluYW1pY1RhbXBlckNvbmZpZyh1aW50MzJfdCB1MzJDaGFuZ2VSYXRlLCB1aW50MzJfdCB1MzJTZWVkUmVsb2FkLCB1aW50MzJfdCB1MzJSZWZQYXR0ZXJuLCB1aW50MzJfdCB1MzJTZWVkKTsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBSVENfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUlRDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19SVENfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3NjLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NWUxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zYy5oCkBAIC0wLDAgKzEsMzA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc2MuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgU21hcnRjYXJkKFNDKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1NDX0hfXworI2RlZmluZSBfX1NDX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0NfRHJpdmVyIFNDIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFNDX0VYUE9SVEVEX0NPTlNUQU5UUyBTQyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisjZGVmaW5lIFNDX0lOVEVSRkFDRV9OVU0gICAgICAgICAgICAgICAgKDN1bCkgICAgICAgICAgICAgICAgLyohPCBTbWFydGNhcmQgaW50ZXJmYWNlIG51bWJlcnMgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ19QSU5fU1RBVEVfSElHSCAgICAgICAgICAgICAgICgxdWwpICAgICAgICAgICAgICAgIC8qITwgU21hcnRjYXJkIHBpbiBzdGF0dXMgaGlnaCAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfUElOX1NUQVRFX0xPVyAgICAgICAgICAgICAgICAoMHVsKSAgICAgICAgICAgICAgICAvKiE8IFNtYXJ0Y2FyZCBwaW4gc3RhdHVzIGxvdyAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDX1BJTl9TVEFURV9JR05PUkUgICAgICAgICAgICAgKDB4RkZGRkZGRkZ1bCkgICAgICAgLyohPCBJZ25vcmUgcGluIHN0YXR1cyAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ19DTEtfT04gICAgICAgICAgICAgICAgICAgICAgICgxdWwpICAgICAgICAgICAgICAgIC8qITwgU21hcnRjYXJkIGNsb2NrIG9uICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfQ0xLX09GRiAgICAgICAgICAgICAgICAgICAgICAoMHVsKSAgICAgICAgICAgICAgICAvKiE8IFNtYXJ0Y2FyZCBjbG9jayBvZmYgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgU0NfVE1SX01PREVfMCAgICAgICAgICAgICAgICAgICAoMHVsIDw8IFNDX1RNUkNUTDBfT1BNT0RFX1BvcykgICAgIC8qITxUaW1lciBPcGVyYXRpb24gTW9kZSAwLCBkb3duIGNvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ19UTVJfTU9ERV8xICAgICAgICAgICAgICAgICAgICgxdWwgPDwgU0NfVE1SQ1RMMF9PUE1PREVfUG9zKSAgICAgLyohPFRpbWVyIE9wZXJhdGlvbiBNb2RlIDEsIGRvd24gY291bnQsIHN0YXJ0IGFmdGVyIGRldGVjdCBzdGFydCBiaXQgICAgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDX1RNUl9NT0RFXzIgICAgICAgICAgICAgICAgICAgKDJ1bCA8PCBTQ19UTVJDVEwwX09QTU9ERV9Qb3MpICAgICAvKiE8VGltZXIgT3BlcmF0aW9uIE1vZGUgMiwgZG93biBjb3VudCwgc3RhcnQgYWZ0ZXIgcmVjZWl2ZSBzdGFydCBiaXQgICAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfVE1SX01PREVfMyAgICAgICAgICAgICAgICAgICAoM3VsIDw8IFNDX1RNUkNUTDBfT1BNT0RFX1BvcykgICAgIC8qITxUaW1lciBPcGVyYXRpb24gTW9kZSAzLCBkb3duIGNvdW50LCB1c2UgZm9yIGFjdGl2YXRpb24sIG9ubHkgdGltZXIgMCBzdXBwb3J0IHRoaXMgbW9kZSAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ19UTVJfTU9ERV80ICAgICAgICAgICAgICAgICAgICg0dWwgPDwgU0NfVE1SQ1RMMF9PUE1PREVfUG9zKSAgICAgLyohPFRpbWVyIE9wZXJhdGlvbiBNb2RlIDQsIGRvd24gY291bnQgd2l0aCByZWxvYWQgYWZ0ZXIgdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDX1RNUl9NT0RFXzUgICAgICAgICAgICAgICAgICAgKDV1bCA8PCBTQ19UTVJDVEwwX09QTU9ERV9Qb3MpICAgICAvKiE8VGltZXIgT3BlcmF0aW9uIE1vZGUgNSwgZG93biBjb3VudCwgc3RhcnQgYWZ0ZXIgZGV0ZWN0IHN0YXJ0IGJpdCwgcmVsb2FkIGFmdGVyIHRpbWVvdXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfVE1SX01PREVfNiAgICAgICAgICAgICAgICAgICAoNnVsIDw8IFNDX1RNUkNUTDBfT1BNT0RFX1BvcykgICAgIC8qITxUaW1lciBPcGVyYXRpb24gTW9kZSA2LCBkb3duIGNvdW50LCBzdGFydCBhZnRlciByZWNlaXZlIHN0YXJ0IGJpdCwgcmVsb2FkIGFmdGVyIHRpbWVvdXQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ19UTVJfTU9ERV83ICAgICAgICAgICAgICAgICAgICg3dWwgPDwgU0NfVE1SQ1RMMF9PUE1PREVfUG9zKSAgICAgLyohPFRpbWVyIE9wZXJhdGlvbiBNb2RlIDcsIGRvd24gY291bnQsIHN0YXJ0IGFuZCByZWxvYWQgYWZ0ZXIgZGV0ZWN0IHN0YXJ0IGJpdCAgICAgICAgICAgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDX1RNUl9NT0RFXzggICAgICAgICAgICAgICAgICAgKDh1bCA8PCBTQ19UTVJDVEwwX09QTU9ERV9Qb3MpICAgICAvKiE8VGltZXIgT3BlcmF0aW9uIE1vZGUgOCwgdXAgY291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0NfVE1SX01PREVfRiAgICAgICAgICAgICAgICAgICAoMHhGIDw8IFNDX1RNUkNUTDBfT1BNT0RFX1BvcykgICAgIC8qITxUaW1lciBPcGVyYXRpb24gTW9kZSAxNSwgZG93biBjb3VudCwgcmVsb2FkIGFmdGVyIGRldGVjdCBzdGFydCBiaXQgICAgICAgICAgICAgICAgICAgICAgXGhpZGVpbml0aWFsaXplciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNDX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBTQ19FWFBPUlRFRF9GVU5DVElPTlMgU0MgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIG1hY3JvIGVuYWJsZSBzbWFydGNhcmQgaW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBJbnRlcnJ1cHQgbWFzayB0byBiZSBlbmFibGVkLiBBIGNvbWJpbmF0aW9uIG9mCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX0FDRVJSSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9SWFRPSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9JTklUSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9DRElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fQkdUSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UTVIySUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UTVIxSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UTVIwSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9URVJSSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9UQkVJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1JEQUlFTl9Nc2sKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBBdXRvLWNvbnZlbnRpb24gZXJyb3IgaW50ZXJydXB0LCBSZWNlaXZlciBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0LCBJbml0aWFsIGVuZCBpbnRlcnJ1cHQsCisgICogICAgICAgICAgICAgQ2FyZCBkZXRlY3QgaW50ZXJydXB0LCBCbG9jayBndWFyZCB0aW1lIGludGVycnVwdCwgVGltZXIyIGludGVycnVwdCwgVGltZXIxIGludGVycnVwdCwgVGltZXIwIGludGVycnVwdCwKKyAgKiAgICAgICAgICAgICBUcmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQsIFRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgb3IgUmVjZWl2ZSBkYXRhIHJlYWNoIHRyaWdnZXIgbGV2ZWwgaW50ZXJydXB0LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NfRU5BQkxFX0lOVChzYywgdTMyTWFzaykgICAgICAoKHNjKS0+SU5URU4gfD0gKHUzMk1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIG1hY3JvIGRpc2FibGUgc21hcnRjYXJkIGludGVycnVwdAorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgSW50ZXJydXB0IG1hc2sgdG8gYmUgZGlzYWJsZWQuIEEgY29tYmluYXRpb24gb2YKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fQUNFUlJJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1JYVE9JRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX0lOSVRJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX0NESUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ19JTlRFTl9CR1RJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1RNUjJJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1RNUjFJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1RNUjBJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1RFUlJJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1RCRUlFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fUkRBSUVOX01zaworICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBBdXRvLWNvbnZlbnRpb24gZXJyb3IgaW50ZXJydXB0LCBSZWNlaXZlciBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0LCBJbml0aWFsIGVuZCBpbnRlcnJ1cHQsCisgICogICAgICAgICAgICAgQ2FyZCBkZXRlY3QgaW50ZXJydXB0LCBCbG9jayBndWFyZCB0aW1lIGludGVycnVwdCwgVGltZXIyIGludGVycnVwdCwgVGltZXIxIGludGVycnVwdCwgVGltZXIwIGludGVycnVwdCwKKyAgKiAgICAgICAgICAgICBUcmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQsIFRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgb3IgUmVjZWl2ZSBkYXRhIHJlYWNoIHRyaWdnZXIgbGV2ZWwgaW50ZXJydXB0LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NfRElTQUJMRV9JTlQoc2MsIHUzMk1hc2spICAgICAoKHNjKS0+SU5URU4gJj0gfih1MzJNYXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBtYWNybyBzZXQgVkNDIHBpbiBzdGF0ZSBvZiBzbWFydGNhcmQgaW50ZXJmYWNlCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlN0YXRlICAgIFBpbiBzdGF0ZSBvZiBWQ0MgcGluLCB2YWxpZCBwYXJhbWV0ZXJzIGFyZSBccmVmIFNDX1BJTl9TVEFURV9ISUdIIGFuZCBccmVmIFNDX1BJTl9TVEFURV9MT1cuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBVc2VyIGNhbiBzZXQgUFdSRU4gKFNDX1BJTkNUTFswXSkgYW5kIFBXUklOViAoU0NfUElOQ1RMWzExXSkgdG8gZGVjaWRlIFNDX1BXUiBwaW4gaXMgaW4gaGlnaCBvciBsb3cgbGV2ZWwuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ19TRVRfVkNDX1BJTihzYywgdTMyU3RhdGUpIFwKKyAgICBkbyB7XAorICAgICAgICAgICAgd2hpbGUoKHNjKS0+UElOQ1RMICYgU0NfUElOQ1RMX1NZTkNfTXNrKTtcCisgICAgICAgICAgICBpZih1MzJTdGF0ZSlcCisgICAgICAgICAgICAgICAgKHNjKS0+UElOQ1RMIHw9IFNDX1BJTkNUTF9QV1JFTl9Nc2s7XAorICAgICAgICAgICAgZWxzZVwKKyAgICAgICAgICAgICAgICAoc2MpLT5QSU5DVEwgJj0gflNDX1BJTkNUTF9QV1JFTl9Nc2s7XAorICAgIH13aGlsZSgwKQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgbWFjcm8gdHVybnMgQ0xLIG91dHB1dCBvbiBvciBvZmYKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJPbk9mZiAgICAgQ2xvY2sgb24gb3Igb2ZmIGZvciBzZWxlY3RlZCBzbWFydGNhcmQgbW9kdWxlLCB2YWxpZCB2YWx1ZXMgYXJlIFxyZWYgU0NfQ0xLX09OIGFuZCBccmVmIFNDX0NMS19PRkYuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBVc2VyIGNhbiBzZXQgQ0xLS0VFUCAoU0NfUElOQ1RMWzZdKSB0byBkZWNpZGUgU0NfQ0xLIHBpbiBhbHdheXMga2VlcHMgZnJlZSBydW5uaW5nIG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDX1NFVF9DTEtfUElOKHNjLCB1MzJPbk9mZilcCisgICAgZG8ge1wKKyAgICAgICAgICAgIHdoaWxlKChzYyktPlBJTkNUTCAmIFNDX1BJTkNUTF9TWU5DX01zayk7XAorICAgICAgICAgICAgaWYodTMyT25PZmYpXAorICAgICAgICAgICAgICAgIChzYyktPlBJTkNUTCB8PSBTQ19QSU5DVExfQ0xLS0VFUF9Nc2s7XAorICAgICAgICAgICAgZWxzZVwKKyAgICAgICAgICAgICAgICAoc2MpLT5QSU5DVEwgJj0gfihTQ19QSU5DVExfQ0xLS0VFUF9Nc2spO1wKKyAgICB9d2hpbGUoMCkKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBtYWNybyBzZXQgSS9PIHBpbiBzdGF0ZSBvZiBzbWFydGNhcmQgaW50ZXJmYWNlCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyU3RhdGUgICAgIFBpbiBzdGF0ZSBvZiBJL08gcGluLCB2YWxpZCBwYXJhbWV0ZXJzIGFyZSBccmVmIFNDX1BJTl9TVEFURV9ISUdIIGFuZCBccmVmIFNDX1BJTl9TVEFURV9MT1cuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBVc2VyIGNhbiBzZXQgU0NEQVRBIChTQ19QSU5DVExbOV0pIHRvIGRlY2lkZSBTQ19EQVRBIHBpbiB0byBoaWdoIG9yIGxvdy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDX1NFVF9JT19QSU4oc2MsIHUzMlN0YXRlKVwKKyAgICBkbyB7XAorICAgICAgICAgICAgd2hpbGUoKHNjKS0+UElOQ1RMICYgU0NfUElOQ1RMX1NZTkNfTXNrKTtcCisgICAgICAgICAgICBpZih1MzJTdGF0ZSlcCisgICAgICAgICAgICAgICAgKHNjKS0+UElOQ1RMIHw9IFNDX1BJTkNUTF9TQ0RBVEFfTXNrO1wKKyAgICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICAgICAgKHNjKS0+UElOQ1RMICY9IH5TQ19QSU5DVExfU0NEQVRBX01zaztcCisgICAgfXdoaWxlKDApCisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgbWFjcm8gc2V0IFJTVCBwaW4gc3RhdGUgb2Ygc21hcnRjYXJkIGludGVyZmFjZQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMlN0YXRlICAgICBQaW4gc3RhdGUgb2YgUlNUIHBpbiwgdmFsaWQgcGFyYW1ldGVycyBhcmUgXHJlZiBTQ19QSU5fU1RBVEVfSElHSCBhbmQgXHJlZiBTQ19QSU5fU1RBVEVfTE9XLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVXNlciBjYW4gc2V0IFNDUlNUIChTQ19QSU5DVExbMV0pIHRvIGRlY2lkZSBTQ19SU1QgcGluIHRvIGhpZ2ggb3IgbG93LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NfU0VUX1JTVF9QSU4oc2MsIHUzMlN0YXRlKVwKKyAgICBkbyB7XAorICAgICAgICAgICAgd2hpbGUoKHNjKS0+UElOQ1RMICYgU0NfUElOQ1RMX1NZTkNfTXNrKTtcCisgICAgICAgICAgICBpZih1MzJTdGF0ZSlcCisgICAgICAgICAgICAgICAgKHNjKS0+UElOQ1RMIHw9IFNDX1BJTkNUTF9SU1RFTl9Nc2s7XAorICAgICAgICAgICAgZWxzZVwKKyAgICAgICAgICAgICAgICAoc2MpLT5QSU5DVEwgJj0gflNDX1BJTkNUTF9SU1RFTl9Nc2s7XAorICAgIH13aGlsZSgwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIG1hY3JvIHJlYWQgb25lIGJ5dGUgZnJvbSBzbWFydGNhcmQgbW9kdWxlIHJlY2VpdmUgRklGTworICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgT25lIGJ5dGUgcmVhZCBmcm9tIHJlY2VpdmUgRklGTworICAqCisgICogQGRldGFpbHMgICAgQnkgcmVhZGluZyBEQVQgcmVnaXN0ZXIsIHRoZSBTQyB3aWxsIHJldHVybiBhbiA4LWJpdCByZWNlaXZlZCBkYXRhLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NfUkVBRChzYykgICAgICAgICAgICAgKChjaGFyKSgoc2MpLT5EQVQpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIG1hY3JvIHdyaXRlIG9uZSBieXRlIHRvIHNtYXJ0Y2FyZCBtb2R1bGUgdHJhbnNtaXQgRklGTworICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4RGF0YSAgRGF0YSB0byB3cml0ZSB0byB0cmFuc21pdCBGSUZPLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgQnkgd3JpdGluZyBkYXRhIHRvIERBVCByZWdpc3RlciwgdGhlIFNDIHdpbGwgc2VuZCBvdXQgYW4gOC1iaXQgZGF0YS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDX1dSSVRFKHNjLCB1OERhdGEpICAgICgoc2MpLT5EQVQgPSAodThEYXRhKSkKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBtYWNybyBzZXQgc21hcnRjYXJkIHN0b3AgYml0IGxlbmd0aAorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkxlbiAgU3RvcCBiaXQgbGVuZ3RoLCBldGhlciAxIG9yIDIuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBTdG9wIGJpdCBsZW5ndGggbXVzdCBiZSAxIGZvciBUID0gMSBwcm90b2NvbCBhbmQgMiBmb3IgVCA9IDAgcHJvdG9jb2wuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ19TRVRfU1RPUF9CSVRfTEVOKHNjLCB1MzJMZW4pICgoc2MpLT5DVEwgPSAoKHNjKS0+Q1RMICYgflNDX0NUTF9OU0JfTXNrKSB8ICgoKHUzMkxlbikgPT0gMSk/IFNDX0NUTF9OU0JfTXNrIDogMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogc3RhdGljIGlubGluZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVjbGFyZSB0aGVzZSBpbmxpbmUgZnVuY3Rpb25zIGhlcmUgdG8gYXZvaWQgTUlTUkEgQyAyMDA0IHJ1bGUgOC4xIGVycm9yICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ19TZXRUeFJldHJ5KFNDX1QgKnNjLCB1aW50MzJfdCB1MzJDb3VudCk7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ19TZXRSeFJldHJ5KFNDX1QgKnNjLCB1aW50MzJfdCB1MzJDb3VudCk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlL0Rpc2FibGUgVHggZXJyb3IgcmV0cnksIGFuZCBzZXQgVHggZXJyb3IgcmV0cnkgY291bnQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQ291bnQgICAgVGhlIG51bWJlciBvZiB0aW1lcyBvZiBUeCBlcnJvciByZXRyeSBjb3VudCwgYmV0d2VlbiAwfjguIDAgbWVhbnMgZGlzYWJsZSBUeCBlcnJvciByZXRyeS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSB0cmFuc21pdHRlciByZXRyeSBmdW5jdGlvbiB3aGVuIHBhcml0eSBlcnJvciBoYXMgb2NjdXJyZWQsIGFuZCBzZXQgZXJyb3IgcmV0cnkgY291bnQuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ19TZXRUeFJldHJ5KFNDX1QgKnNjLCB1aW50MzJfdCB1MzJDb3VudCkKK3sKKyAgICB3aGlsZSgoc2MpLT5DVEwgJiBTQ19DVExfU1lOQ19Nc2spIHt9CisKKyAgICAvKiBSZXRyeSBjb3VudCBtdXN0IHNldCB3aGlsZSBlbmFibGUgYml0IGRpc2FibGVkLCBzbyBkaXNhYmxlIGl0IGZpcnN0ICovCisgICAgKHNjKS0+Q1RMICY9IH4oU0NfQ1RMX1RYUlRZX01zayB8IFNDX0NUTF9UWFJUWUVOX01zayk7CisKKyAgICBpZigodTMyQ291bnQpICE9IDBVTCkKKyAgICB7CisgICAgICAgIHdoaWxlKChzYyktPkNUTCAmIFNDX0NUTF9TWU5DX01zaykge30KKyAgICAgICAgKHNjKS0+Q1RMIHw9ICgoKHUzMkNvdW50KSAtIDFVTCkgPDwgU0NfQ1RMX1RYUlRZX1BvcykgfCBTQ19DVExfVFhSVFlFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUvRGlzYWJsZSBSeCBlcnJvciByZXRyeSwgYW5kIHNldCBSeCBlcnJvciByZXRyeSBjb3VudAorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJDb3VudCAgICBUaGUgbnVtYmVyIG9mIHRpbWVzIG9mIFJ4IGVycm9yIHJldHJ5IGNvdW50LCBiZXR3ZWVuIDB+OC4gMCBtZWFucyBkaXNhYmxlIFJ4IGVycm9yIHJldHJ5LgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHJlY2VpdmVyIHJldHJ5IGZ1bmN0aW9uIHdoZW4gcGFyaXR5IGVycm9yIGhhcyBvY2N1cnJlZCwgYW5kIHNldCBlcnJvciByZXRyeSBjb3VudC4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDX1NldFJ4UmV0cnkoU0NfVCAqc2MsIHVpbnQzMl90IHUzMkNvdW50KQoreworICAgIHdoaWxlKChzYyktPkNUTCAmIFNDX0NUTF9TWU5DX01zaykge30KKworICAgIC8qIFJldHJ5IGNvdW50IG11c3Qgc2V0IHdoaWxlIGVuYWJsZSBiaXQgZGlzYWJsZWQsIHNvIGRpc2FibGUgaXQgZmlyc3QgKi8KKyAgICAoc2MpLT5DVEwgJj0gfihTQ19DVExfUlhSVFlfTXNrIHwgU0NfQ1RMX1JYUlRZRU5fTXNrKTsKKworICAgIGlmKCh1MzJDb3VudCkgIT0gMFVMKQorICAgIHsKKyAgICAgICAgd2hpbGUoKHNjKS0+Q1RMICYgU0NfQ1RMX1NZTkNfTXNrKSB7fQorICAgICAgICAoc2MpLT5DVEwgfD0gKCgodTMyQ291bnQpIC0gMVVMKSA8PCBTQ19DVExfUlhSVFlfUG9zKSB8IFNDX0NUTF9SWFJUWUVOX01zazsKKyAgICB9Cit9CisKKwordWludDMyX3QgU0NfSXNDYXJkSW5zZXJ0ZWQoU0NfVCAqc2MpOwordm9pZCBTQ19DbGVhckZJRk8oU0NfVCAqc2MpOwordm9pZCBTQ19DbG9zZShTQ19UICpzYyk7Cit2b2lkIFNDX09wZW4oU0NfVCAqc2MsIHVpbnQzMl90IHUzMkNhcmREZXQsIHVpbnQzMl90IHUzMlBXUik7Cit2b2lkIFNDX1Jlc2V0UmVhZGVyKFNDX1QgKnNjKTsKK3ZvaWQgU0NfU2V0QmxvY2tHdWFyZFRpbWUoU0NfVCAqc2MsIHVpbnQzMl90IHUzMkJHVCk7Cit2b2lkIFNDX1NldENoYXJHdWFyZFRpbWUoU0NfVCAqc2MsIHVpbnQzMl90IHUzMkNHVCk7Cit2b2lkIFNDX1N0b3BBbGxUaW1lcihTQ19UICpzYyk7Cit2b2lkIFNDX1N0YXJ0VGltZXIoU0NfVCAqc2MsIHVpbnQzMl90IHUzMlRpbWVyTnVtLCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJFVFVDb3VudCk7Cit2b2lkIFNDX1N0b3BUaW1lcihTQ19UICpzYywgdWludDMyX3QgdTMyVGltZXJOdW0pOwordWludDMyX3QgU0NfR2V0SW50ZXJmYWNlQ2xvY2soU0NfVCAqc2MpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0NfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0NfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NDX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zY3UuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3NjdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjcxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zY3UuaApAQCAtMCwwICsxLDM2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHNjdS5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBTZWN1cmUgQ29uZmlndXJhdGlvbiBVbml0IERyaXZlciBIZWFkZXIKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1NDVV9IX18KKyNkZWZpbmUgX19TQ1VfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTQ1VfRHJpdmVyIFNDVSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTQ1VfRVhQT1JURURfQ09OU1RBTlRTIFNDVSBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKworCisKKy8qKgorICogQGRldGFpbHMgIE5vbi1zZWN1cmUgQXR0cmlidXRpb24gRGVmaW5pdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIE5TQVRUUgoreworICAgIC8qKioqKiogIFBOTlNFVDAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBVU0JIX0F0dHIgICA9ICAgICA5LAorICAgIFNESDBfQXR0ciAgID0gICAgMTMsCisgICAgRUJJX0F0dHIgICAgPSAgICAxNiwKKyAgICBQRE1BMV9BdHRyICA9ICAgIDI0LAorCisgICAgLyoqKioqKiAgUE5OU0VUMSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIENSQ19BdHRyICAgID0gMzIgKyAxNywKKyAgICBDUlBUX0F0dHIgICA9IDMyICsgMTgsCisKKyAgICAvKioqKioqICBQTk5TRVQyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgUlRDX0F0dHIgICAgPSA2NCArIDEsCisgICAgRUFEQ19BdHRyICAgPSA2NCArIDMsCisgICAgQUNNUDAxX0F0dHIgPSA2NCArIDUsCisgICAgREFDX0F0dHIgICAgPSA2NCArIDcsCisgICAgSTJTMF9BdHRyICAgPSA2NCArIDgsCisgICAgT1RHX0F0dHIgICAgPSA2NCArIDEzLAorICAgIFRNUjIzX0F0dHIgID0gNjQgKyAxNywKKyAgICBFUFdNMF9BdHRyICA9IDY0ICsgMjQsCisgICAgRVBXTTFfQXR0ciAgPSA2NCArIDI1LAorICAgIEJQV00wX0F0dHIgID0gNjQgKyAyNiwKKyAgICBCUFdNMV9BdHRyICA9IDY0ICsgMjcsCisgICAgLyoqKioqKiAgUE5OU0VUMyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIFFTUEkwX0F0dHIgID0gOTYgKyAwLAorICAgIFNQSTBfQXR0ciAgID0gOTYgKyAxLAorICAgIFNQSTFfQXR0ciAgID0gOTYgKyAyLAorICAgIFNQSTJfQXR0ciAgID0gOTYgKyAzLAorICAgIFNQSTNfQXR0ciAgID0gOTYgKyA0LAorICAgIFVBUlQwX0F0dHIgID0gOTYgKyAxNiwKKyAgICBVQVJUMV9BdHRyICA9IDk2ICsgMTcsCisgICAgVUFSVDJfQXR0ciAgPSA5NiArIDE4LAorICAgIFVBUlQzX0F0dHIgID0gOTYgKyAxOSwKKyAgICBVQVJUNF9BdHRyICA9IDk2ICsgMjAsCisgICAgVUFSVDVfQXR0ciAgPSA5NiArIDIxLAorICAgIC8qKioqKiogIFBOTlNFVDQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBJMkMwX0F0dHIgICA9IDEyOCArIDAsCisgICAgSTJDMV9BdHRyICAgPSAxMjggKyAxLAorICAgIEkyQzJfQXR0ciAgID0gMTI4ICsgMiwKKyAgICBTQzBfQXR0ciAgICA9IDEyOCArIDE2LAorICAgIFNDMV9BdHRyICAgID0gMTI4ICsgMTcsCisgICAgU0MyX0F0dHIgICAgPSAxMjggKyAxOCwKKworCisgICAgLyoqKioqKiAgUE5OU0VUNSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIENBTjBfQXR0ciAgID0gMTYwICsgMCwKKyAgICBRRUkwX0F0dHIgICA9IDE2MCArIDE2LAorICAgIFFFSTFfQXR0ciAgID0gMTYwICsgMTcsCisgICAgRUNBUDBfQXR0ciAgPSAxNjAgKyAyMCwKKyAgICBFQ0FQMV9BdHRyICA9IDE2MCArIDIxLAorICAgIFRSTkdfQXR0ciAgID0gMTYwICsgMjUsCisKKyAgICAvKioqKioqICBQTk5TRVQ2ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgVVNCRF9BdHRyICAgPSAxOTIgKyAwLAorICAgIFVTQ0kwX0F0dHIgID0gMTkyICsgMTYsCisgICAgVVNDSTFfQXR0ciAgPSAxOTIgKyAxNworCisKK30gTlNBVFRSX1Q7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ1VfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFNDVV9FWFBPUlRFRF9GVU5DVElPTlMgU0NVIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IHBlcmlwaGVyYWwgbm9uLXNlY3VyZSBhdHRyaWJ1dGlvbgorICAqCisgICogQHBhcmFtW2luXSAgbnNhdHRyICAgICBUaGUgc2VjdXJlL25vbi1zZWN1cmUgYXR0cmlidXRpb24gb2Ygc3BlY2lmaWVkIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb3NzaWJsZSB2YWx1ZSBjb3VsZCBiZSByZWZlciB0byBccmVmIE5TQVRUUi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgYSBwZXJpcGhlcmFsIHRvIGJlIG5vbi1zZWN1cmUgcGVyaXBoZXJhbC4KKyAgKgorICAqLworI2RlZmluZSBTQ1VfU0VUX1BOU1NFVChuc2F0dHIpICAgeyBTQ1UtPlBOU1NFVFsobnNhdHRyKS8zMl0gfD0gKDEgPDwgKChuc2F0dHIpICYgMHgxZnVsKSk7IH0KKworLyoqCisgKiBAYnJpZWYgICAgICAgR2V0IHBlcmlwaGVyYWwgc2VjdXJlL25vbi1zZWN1cmUgYXR0cmlidXRpb24KKyAqCisgICogQHBhcmFtW2luXSAgbnNhdHRyICAgICBUaGUgc2VjdXJlL25vbi1zZWN1cmUgYXR0cmlidXRpb24gb2Ygc3BlY2lmaWVkIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb3NzaWJsZSB2YWx1ZSBjb3VsZCBiZSByZWZlciB0byBccmVmIE5TQVRUUi4KKyAqCisgKiBAcmV0dXJuICAgICAgVGhlIHNlY3VyZS9ub24tc2VjdXJlIGF0dHJpYnV0aW9uIG9mIHNwZWNpZmllZCBwZXJpcGhlcmFsLgorICogQHJldHZhbCAgICAgIDAgVGhlIHBlcmlwaGVyYWwgaXMgc2VjdXJlCisgKiBAcmV0dmFsICAgICAgMSBUaGUgcGVyaXBoZXJhbCBpcyBub24tc2VjdXJlCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgbWFjcm8gZ2V0cyB0aGUgcGVyaXBoZXJhbCBzZWN1cmUvbm9uLXNlY3VyZSBhdHRyaWJ1dGlvbi4KKyAqLworI2RlZmluZSBTQ1VfR0VUX1BOU1NFVChuc2F0dHIpICAgKChTQ1UtPlBOU1NFVFsobnNhdHRyKS8zMl0gPj4gKChuc2F0dHIpICYgMHgxZnVsKSkgJiAxdWwpCisKKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IHNlY3VyZS9ub24tc2VjdXJlIGF0dHJpYnV0aW9uIG9mIHNwZWNpZmllZCBHUElPIHBvcnRzCisgKgorICogQHBhcmFtW2luXSAgIG1hc2sgICAgVGhlIHBvcnQgbWFzayBvZiBlYWNoIEdQSU8gcG9ydAorICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QQV9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUEJfTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9JT05TU0VUX1BDX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QRF9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUEVfTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9JT05TU0VUX1BGX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QR19Nc2sKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIGdldHMgdGhlIHBlcmlwaGVyYWwgc2VjdXJlL25vbi1zZWN1cmUgYXR0cmlidXRpb24uCisgKi8KKyNkZWZpbmUgU0NVX1NFVF9JT05TU0VUKG1hc2spICAgKFNDVS0+SU9OU1NFVCB8PSAobWFzaykpCisKKworLyoqCisgKiBAYnJpZWYgICAgICAgR2V0IHNlY3VyZS9ub24tc2VjdXJlIGF0dHJpYnV0aW9uIG9mIHNwZWNpZmllZCBHUElPIHBvcnRzCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgVGhlIHBvcnQgbWFzayBvZiBlYWNoIEdQSU8gcG9ydAorICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QQV9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUEJfTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9JT05TU0VUX1BDX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QRF9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX0lPTlNTRVRfUEVfTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9JT05TU0VUX1BGX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfSU9OU1NFVF9QR19Nc2sKKyAqCisgKiBAcmV0dXJuICAgICAgVGhlIHNlY3VyZS9ub24tc2VjdXJlIGF0dHJpYnV0aW9uIG9mIHNwZWNpZmllZCBwZXJpcGhlcmFsLgorICogQHJldHZhbCAgICAgIDAgVGhlIHNwZWNpZmllZCBJTyBwb3J0IGlzIHNlY3VyZQorICogQHJldHZhbCAgICAgIDEgVGhlIHNwZWNpZmllZCBJTyBwb3J0IGlzIG5vbi1zZWN1cmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBtYWNybyBnZXRzIEdQSU8gcG9ydCBzZWN1cmUvbm9uLXNlY3VyZSBhdHRyaWJ1dGlvbi4KKyAqLworI2RlZmluZSBTQ1VfR0VUX0lPTlNTRVQocG9ydCkgICAoKFNDVS0+SU9OU1NFVCYocG9ydCkpPzE6MCkKKworCisvKioKKyAqIEBicmllZiAgICAgICBFbmFibGUgc2VyY3VyZSB2aW9sYXRpb24gaW50ZXJydXB0cworICoKKyAqIEBwYXJhbVtpbl0gICBtYXNrICAgIFRoZSBtYXNrIG9mIGVhY2ggc2VjdXJlIHZpb2xhdGlvbiBpbnRlcnJ1cHQgc291cmNlCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0FQQjBJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0FQQjFJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0dQSU9JRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0VCSUlFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fVVNCSElFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fQ1JDSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9TREgwSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9QRE1BMElFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fUERNQTFJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX1NSQU0wSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9TUkFNMUlFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fRk1DSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9GTEFTSElFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fU0NVSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9TWVNJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0NSUFRJRU5fTXNrCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBzZWN1cmUgdmlvbGF0aW9uIGludGVycnVwdCBvZiBTQ1UuCisgKiAgICAgICAgICAgICAgVGhlIHNlY3VyZSB2aW9sYXRpb24gaW50ZXJydXB0IGNvdWxkIGJlIHVzZWQgdG8gZGV0ZWN0IGF0dGFjayBvZiBzZWN1cmUgZWxlbWVudHMuCisgKi8KKyNkZWZpbmUgU0NVX0VOQUJMRV9JTlQobWFzaykgICAgKFNDVS0+U1ZJT0lFTiB8PSAobWFzaykpCisKKworLyoqCisgKiBAYnJpZWYgICAgICAgRGlzYWJsZSBzZXJjdXJlIHZpb2xhdGlvbiBpbnRlcnJ1cHRzCisgKgorICogQHBhcmFtW2luXSAgIG1hc2sgICAgVGhlIG1hc2sgb2YgZWFjaCBzZWN1cmUgdmlvbGF0aW9uIGludGVycnVwdCBzb3VyY2UKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fQVBCMElFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fQVBCMUlFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fR1BJT0lFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fRUJJSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9VU0JISUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9DUkNJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX1NESDBJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX1BETUEwSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9QRE1BMUlFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fU1JBTTBJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX1NSQU0xSUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9GTUNJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX0ZMQVNISUVOX01zaworICogICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJT0lFTl9TQ1VJRU5fTXNrCisgKiAgICAgICAgICAgICAgLSBccmVmIFNDVV9TVklPSUVOX1NZU0lFTl9Nc2sKKyAqICAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU9JRU5fQ1JQVElFTl9Nc2sKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSBzZWN1cmUgdmlvbGF0aW9uIGludGVycnVwdCBvZiBTQ1UuCisgKgorICovCisjZGVmaW5lIFNDVV9ESVNBQkxFX0lOVChtYXNrKSAgICAoU0NVLT5TVklPSUVOICY9ICh+KG1hc2spKSkKKworCisvKioKKyAgKiBAYnJpZWYgICAgR2V0IHNlY3VyZSB2aW9sYXRpb24gaW50ZXJydXB0IHN0YXR1cworICAqCisgICogQHBhcmFtICAgIG1hc2sgIFRoZSBpbnRlcnJ1cHQgZmxhZyBtYXNrIGJpdAorICAqCisgICogQHJldHVybiAgIFRoZSB2YWx1ZSBvZiBTQ1VfU1ZJTlRTVFMgcmVnaXN0ZXIKKyAgKgorICAqIEBkZXRhaWxzICBSZXR1cm4gaW50ZXJydXB0IGZsYWcgb2YgU0NVX1NWSU5UU1RTIHJlZ2lzdGVyLgorICAqCisgICovCisjZGVmaW5lIFNDVV9HRVRfSU5UX0ZMQUcobWFzaykgICAgICAgICAoU0NVLT5TVklOVFNUUyYobWFzaykpCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIHNlY3VyZSB2aW9sYXRpb24gaW50ZXJydXB0IGZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIGZsYWcgVGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWdzLgorICAqICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4KKyAgKiAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdCBmbGFncyB3aWxsIGJlIGNsZWFyZWQuCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19BUEIwSUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19BUEIxSUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19HUElPSUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19FQklJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX1VTQkhJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX0NSQ0lGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfU0RIMElGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfUERNQTBJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX1BETUExSUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19TUkFNMElGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfU1JBTTFJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX0ZNQ0lGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfRkxBU0hJRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0NVX1NWSU5UU1RTX1NDVUlGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTQ1VfU1ZJTlRTVFNfU1lTSUZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNDVV9TVklOVFNUU19DUlBUSUZfTXNrCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBDbGVhciBTQ1UgcmVsYXRlZCBpbnRlcnJ1cHQgZmxhZ3Mgc3BlY2lmaWVkIGJ5IGZsYWcgcGFyYW1ldGVyLgorICAqCisgICovCisjZGVmaW5lIFNDVV9DTFJfSU5UX0ZMQUcoZmxhZykgICAgIChTQ1UtPlNWSU5UU1RTID0gKGZsYWcpKQorCisKKworLyoqCisgICogQGJyaWVmICAgICAgQ29udHJvbCB0aGUgYmVoYXZpb3Igb2Ygbm9uLXNlY3VyZSBtb25pdG9yIHdoZW4gQ1BVIGlzIGluIGlkbGUgc3RhdGUuCisgICoKKyAgKiBAcGFyYW1baW5dICBvcHQgT3B0aW9uIGZvciBiZWhhdmlvciBjb250cm9sIG9mIG5vbi1zZWN1cmUgbW9uaXRvciB3aGVuIENQVSBpbiBpZGxlLgorICAqICAgICAgICAgICAgICAtIHRydWUgICAgIFRoZSBjb3VudGVyIGtlZXBzIGNvdW50aW5nIHdoZW4gQ1BVIGlzIGluIGlkbGUuCisgICAgICAgICAgICAgICAgIC0gZmFsc2UgICAgVGhlIGNvdW50ZXIgd2lsbCBzdG9wIHdoZW4gQ1BVIGlzIGluIGlkbGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUbyBjb250cm9sIG5vbi1zZWN1cmUgbW9uaXRvciBjb3VudGVyIHdoZW4gQ1BVIGlzIGluIGlkbGUuCisgICoKKyAgKi8KKyNkZWZpbmUgU0NVX05TTV9JRExFX09OKG9wdCkgICAgKChvcHQpPyhTQ1UtPk5TTUNUTCB8PSBTQ1VfTlNNQ1RMX0lETEVPTl9Nc2spOihTQ1UtPk5TTUNUTCAmPSB+U0NVX05TTUNUTF9JRExFT05fTXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgQ29udHJvbCB0aGUgYmVoYXZpb3Igb2Ygbm9uLXNlY3VyZSBtb25pdG9yIHdoZW4gQ1BVIGlzIGluIGRlYnVnIHN0YXRlLgorICAqCisgICogQHBhcmFtW2luXSAgb3B0IE9wdGlvbiBmb3IgYmVoYXZpb3IgY29udHJvbCBvZiBub24tc2VjdXJlIG1vbml0b3Igd2hlbiBDUFUgaW4gZGVidWcuCisgICogICAgICAgICAgICAgIC0gdHJ1ZSAgICAgVGhlIGNvdW50ZXIga2VlcHMgY291bnRpbmcgd2hlbiBDUFUgaXMgaW4gZGVidWcuCisgICAgICAgICAgICAgICAgIC0gZmFsc2UgICAgVGhlIGNvdW50ZXIgd2lsbCBzdG9wIHdoZW4gQ1BVIGlzIGluIGRlYnVnLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVG8gY29udHJvbCBub24tc2VjdXJlIG1vbml0b3IgY291bnRlciB3aGVuIENQVSBpcyBpbiBkZWJ1Zy4KKyAgKgorICAqLworI2RlZmluZSBTQ1VfTlNNX0RCR19PTihvcHQpICAgICgob3B0KT8oU0NVLT5OU01DVEwgfD0gU0NVX05TTUNUTF9EQkdPTl9Nc2spOihTQ1UtPk5TTUNUTCAmPSB+U0NVX05TTUNUTF9EQkdPTl9Nc2spKQorCisKKy8qIERlY2xhcmUgdGhlc2UgaW5saW5lIGZ1bmN0aW9ucyBoZXJlIHRvIGF2b2lkIE1JU1JBIEMgMjAwNCBydWxlIDguMSBlcnJvciAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NVX05TTUNvbmZpZyh1aW50MzJfdCB1MzJUaWNrcywgdWludDMyX3QgdTMyUHJlc2NhbGUpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NVX1RpbWVyQ29uZmlnKHVpbnQzMl90IHUzMlRpY2tzLCB1aW50MzJfdCB1MzJQcmVzY2FsZSk7CisKKworLyoqCisgICogQGJyaWVmICAgICAgQ29uZmlnIG5vbi1zZWN1cmUgbW9uaXRvciB0byBkZXRlY3QgdGltZW91dCBpbiBub24tc2VjdXJlIHN0YXRlLgorICAqCisgICogQHBhcmFtW2luXSAgdTMyVGlja3MgICAgICAgQSBzcGVjaWZpZWQgcGVyaW9kIGZvciB0aW1lb3V0IGluIG5vbi1zZWN1cmUgc3RhdGUKKyAgKiBAcGFyYW1baW5dICB1MzJQcmVzY2FsZSAgICBBIHByZS1zY2FsZSBkaXZpZGVyIHRvIG5vbi1zZWN1cmUgbW9uaXRvciBjbG9jaworCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIG5vbi1zZWN1cmUgbW9uaXRvci4gSWYgdGhlIENQVSBzdGF0ZSBzdGF5IGluIG5vbi1zZWN1cmUgc3RhdGUgZm9yCisgICogICAgICAgICAgICAgYSBzcGVjaWZpZWQgcGVyaW9kLiBUaGUgbm9uLXNlY3VyZSBtb25pdG9yIHdpbGwgdGltZW91dCBhbmQgYXNzZXJ0IGFuIGludGVycnVwdC4gT3RoZXJ3aXNlLCB0aGUKKyAgKiAgICAgICAgICAgICBub24tc2VjdXJlIG1vbml0b3Igd2lsbCBhdXRvIGNsZWFyIHdoZW5ldmVyIHJldHVybmluZyB0byBzZWN1cmUgc3RhdGUuIFRoaXMgY291bGQgYmUgdXNlZCB0byBhdm9pZAorICAqICAgICAgICAgICAgIENQVSBzdGF0ZSBpbiBub24tc2VjdXJlIHN0YXRlIHRvbyBsb25nIHRpbWUgZm9yIHNlY3VyaXR5IHB1cnBvc2UuIFVzZXIgbXVzdCBlbmFibGUgU0NVX0lSUW4gaWYgaW50ZXJydXB0CisgICogICAgICAgICAgICAgaXMgbmVjZXNzYXJ5LgorICAqCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ1VfTlNNQ29uZmlnKHVpbnQzMl90IHUzMlRpY2tzLCB1aW50MzJfdCB1MzJQcmVzY2FsZSkKK3sKKworICAgIFNDVS0+TlNNTE9BRCA9IHUzMlRpY2tzOworICAgIFNDVS0+TlNNVkFMICA9IDB1bDsKKyAgICBTQ1UtPk5TTUNUTCAgPSBTQ1VfTlNNQ1RMX0FVVE9STERfTXNrIHwgU0NVX05TTUNUTF9OU01JRU5fTXNrIHwgKHUzMlByZXNjYWxlICYgMHhmZnVsKTsKK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBDb25maWcgbm9uLXNlY3VyZSBtb25pdG9yIHRvIGJlIGEgdGltZXIuCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJUaWNrcyAgICAgICBBIHNwZWNpZmllZCBwZXJpb2QgZm9yIHRpbWVyIGludGVycnVwdC4KKyAgKiBAcGFyYW1baW5dICB1MzJQcmVzY2FsZSAgICBBIHByZS1zY2FsZSBkaXZpZGVyIHRvIHRpbWVyIGNsb2NrIHNvdXJjZS4KKworICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBub24tc2VjdXJlIG1vbml0b3IgYXMgYSB0aW1lci4gSW4gb3RoZXIgd29yZHMsIHRoZSB0aW1lciBjb3VudGVyCisgICogICAgICAgICAgICAga2VlcHMgY291bnRpbmcgZXZlbiBDUFUgaXMgaW4gc2VjdXJlIHN0YXRlLgorICAqCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ1VfVGltZXJDb25maWcodWludDMyX3QgdTMyVGlja3MsIHVpbnQzMl90IHUzMlByZXNjYWxlKQoreworCisgICAgU0NVLT5OU01MT0FEID0gdTMyVGlja3M7CisgICAgU0NVLT5OU01WQUwgID0gMHVsOworICAgIFNDVS0+TlNNQ1RMICA9IFNDVV9OU01DVExfQVVUT1JMRF9Nc2sgfCBTQ1VfTlNNQ1RMX05TTUlFTl9Nc2sgfCBTQ1VfTlNNQ1RMX1RNUk1PRF9Nc2sgfCAodTMyUHJlc2NhbGUgJiAweGZmdWwpOworfQorCisKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNDVV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ1VfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NDVV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc2N1YXJ0LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zY3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDkxMWU2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc2N1YXJ0LmgKQEAgLTAsMCArMSwzNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzY3VhcnQuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgU21hcnRjYXJkIFVBUlQgbW9kZSAoU0NVQVJUKSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1NDVUFSVF9IX18KKyNkZWZpbmUgX19TQ1VBUlRfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTQ1VBUlRfRHJpdmVyIFNDVUFSVCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTQ1VBUlRfRVhQT1JURURfQ09OU1RBTlRTIFNDVUFSVCBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisjZGVmaW5lIFNDVUFSVF9DSEFSX0xFTl81ICAgICAoMHgzVUwgPDwgU0NfVUFSVENUTF9XTFNfUG9zKSAgICAgLyohPCBTZXQgU0NVQVJUIHdvcmQgbGVuZ3RoIHRvIDUgYml0cyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDVUFSVF9DSEFSX0xFTl82ICAgICAoMHgyVUwgPDwgU0NfVUFSVENUTF9XTFNfUG9zKSAgICAgLyohPCBTZXQgU0NVQVJUIHdvcmQgbGVuZ3RoIHRvIDYgYml0cyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDVUFSVF9DSEFSX0xFTl83ICAgICAoMHgxVUwgPDwgU0NfVUFSVENUTF9XTFNfUG9zKSAgICAgLyohPCBTZXQgU0NVQVJUIHdvcmQgbGVuZ3RoIHRvIDcgYml0cyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDVUFSVF9DSEFSX0xFTl84ICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZXQgU0NVQVJUIHdvcmQgbGVuZ3RoIHRvIDggYml0cyBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgU0NVQVJUX1BBUklUWV9OT05FICAgIChTQ19VQVJUQ1RMX1BCT0ZGX01zaykgICAgICAgICAgICAvKiE8IFNldCBTQ1VBUlQgdHJhbnNmZXIgd2l0aCBubyBwYXJpdHkgICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNDVUFSVF9QQVJJVFlfT0REICAgICAoU0NfVUFSVENUTF9PUEVfTXNrKSAgICAgICAgICAgICAgLyohPCBTZXQgU0NVQVJUIHRyYW5zZmVyIHdpdGggb2RkIHBhcml0eSAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ1VBUlRfUEFSSVRZX0VWRU4gICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IFNDVUFSVCB0cmFuc2ZlciB3aXRoIGV2ZW4gcGFyaXR5IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBTQ1VBUlRfU1RPUF9CSVRfMSAgICAgKFNDX0NUTF9OU0JfTXNrKSAgICAgICAgICAgICAgICAgIC8qITwgU2V0IFNDVUFSVCB0cmFuc2ZlciB3aXRoIG9uZSBzdG9wIGJpdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTQ1VBUlRfU1RPUF9CSVRfMiAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IFNDVUFSVCB0cmFuc2ZlciB3aXRoIHR3byBzdG9wIGJpdHMgXGhpZGVpbml0aWFsaXplciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNDVUFSVF9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgU0NVQVJUX0VYUE9SVEVEX0ZVTkNUSU9OUyBTQ1VBUlQgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKiBUWCBNYWNyb3MgKi8KKy8qKgorICAqIEBicmllZiBXcml0ZSBEYXRhIHRvIFR4IGRhdGEgcmVnaXN0ZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1OERhdGEgIERhdGEgYnl0ZSB0byB0cmFuc21pdC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIEJ5IHdyaXRpbmcgZGF0YSB0byBEQVQgcmVnaXN0ZXIsIHRoZSBTQyB3aWxsIHNlbmQgb3V0IGFuIDgtYml0IGRhdGEuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfV1JJVEUoc2MsIHU4RGF0YSkgICAgKChzYyktPkRBVCA9ICh1OERhdGEpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgVHggRklGTyBlbXB0eSBmbGFnIHN0YXR1cyBmcm9tIHJlZ2lzdGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBUcmFuc21pdCBGSUZPIGVtcHR5IHN0YXR1cworICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0IEZJRk8gaXMgbm90IGVtcHR5CisgICogQHJldHZhbCAgICAgU0NfU1RBVFVTX1RYRU1QVFlfTXNrICAgVHJhbnNtaXQgRklGTyBpcyBlbXB0eQorICAqCisgICogQGRldGFpbHMgICAgV2hlbiB0aGUgbGFzdCBieXRlIG9mIFR4IGJ1ZmZlciBoYXMgYmVlbiB0cmFuc2ZlcnJlZCB0byBUcmFuc21pdHRlciBTaGlmdCBSZWdpc3RlciwgaGFyZHdhcmUgc2V0cyBUWEVNUFRZIChTQ19TVEFUVVNbOV0pIGhpZ2guCisgICogICAgICAgICAgICAgSXQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gd3JpdGluZyBkYXRhIGludG8gREFUIChTQ19EQVRbNzowXSkuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfR0VUX1RYX0VNUFRZKHNjKSAgICAgKChzYyktPlNUQVRVUyAmIFNDX1NUQVRVU19UWEVNUFRZX01zaykKKworLyoqCisgICogQGJyaWVmIEdldCBUeCBGSUZPIGZ1bGwgZmxhZyBzdGF0dXMgZnJvbSByZWdpc3RlcgorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgVHJhbnNtaXQgRklGTyBmdWxsIHN0YXR1cworICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0IEZJRk8gaXMgbm90IGZ1bGwKKyAgKiBAcmV0dmFsICAgICBTQ19TVEFUVVNfVFhGVUxMX01zayAgICBUcmFuc21pdCBGSUZPIGlzIGZ1bGwKKyAgKgorICAqIEBkZXRhaWxzICAgIFRYRlVMTCAoU0NfU1RBVFVTWzEwXSkgaXMgc2V0IHdoZW4gVHggYnVmZmVyIGNvdW50cyBlcXVhbHMgdG8gNCwgb3RoZXJ3aXNlIGlzIGNsZWFyZWQgYnkgaGFyZHdhcmUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfR0VUX1RYX0ZVTEwoc2MpICAgICAgKChzYyktPlNUQVRVUyAmIFNDX1NUQVRVU19UWEZVTExfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXYWl0IHNwZWNpZmllZCBzbWFydGNhcmQgcG9ydCB0cmFuc21pc3Npb24gY29tcGxldGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRYQUNUIChTQ19TVEFUVVNbMzFdKSBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBUeCB0cmFuc2ZlciBpcyBmaW5pc2hlZCBvciB0aGUgbGFzdCBieXRlIHRyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkLgorICAqCisgICAgICAgIFRoaXMgbWFjcm8gYmxvY2tzIHVudGlsIHRyYW5zbWl0IGNvbXBsZXRlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX1dBSVRfVFhfRU1QVFkoc2MpICAgIHdoaWxlKChzYyktPlNUQVRVUyAmIFNDX1NUQVRVU19UWEFDVF9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIENoZWNrIHNwZWNpZmllZCBzbWFydGNhcmQgcG9ydCB0cmFuc21pdCBGSUZPIGlzIGZ1bGwgb3Igbm90CisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBUcmFuc21pdCBGSUZPIGZ1bGwgc3RhdHVzCisgICogQHJldHZhbCAgICAgMCAgICAgICBUcmFuc21pdCBGSUZPIGlzIG5vdCBmdWxsCisgICogQHJldHZhbCAgICAgMSAgICAgICBUcmFuc21pdCBGSUZPIGlzIGZ1bGwKKyAgKgorICAqIEBkZXRhaWxzICAgIFRYRlVMTCAoU0NfU1RBVFVTWzEwXSkgaW5kaWNhdGVzIFR4IGJ1ZmZlciBmdWxsIG9yIG5vdC4KKyAgKiAgICAgICAgICAgICBUaGlzIGJpdCBpcyBzZXQgd2hlbiBUeCBidWZmZXIgY291bnRzIGVxdWFscyB0byA0LCBvdGhlcndpc2UgaXMgY2xlYXJlZCBieSBoYXJkd2FyZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9JU19UWF9GVUxMKHNjKSAgICAgICAoKChzYyktPlNUQVRVUyAmIFNDX1NUQVRVU19UWEZVTExfTXNrKT8gMSA6IDApCisKKy8qKgorICAqIEBicmllZiAgICAgIENoZWNrIHNwZWNpZmllZCBzbWFydGNhcmQgcG9ydCB0cmFuc21pc3Npb24gaXMgb3ZlcgorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgVHJhbnNtaXQgY29tcGxldGUgc3RhdHVzCisgICogQHJldHZhbCAgICAgMCAgICAgICBUcmFuc21pdCBpcyBub3QgY29tcGxldGUKKyAgKiBAcmV0dmFsICAgICAxICAgICAgIFRyYW5zbWl0IGNvbXBsZXRlCisgICoKKyAgKiBAZGV0YWlscyAgICBUWEFDVCAoU0NfU1RBVFVTWzMxXSkgaW5kaWNhdGVzIFR4IFRyYW5zbWl0IGlzIGNvbXBsZXRlIG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9JU19UWF9FTVBUWShzYykgICAgICAoKChzYyktPlNUQVRVUyAmIFNDX1NUQVRVU19UWEFDVF9Nc2spPyAwIDogMSkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2hlY2sgc3BlY2lmaWVkIHNtYXJ0Y2FyZCBwb3J0IHRyYW5zbWl0IEZJRk8gZW1wdHkgc3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBUcmFuc21pdCBGSUZPIGVtcHR5IHN0YXR1cworICAqIEByZXR2YWwgICAgIDAgICAgICAgVHJhbnNtaXQgRklGTyBpcyBub3QgZW1wdHkKKyAgKiBAcmV0dmFsICAgICAxICAgICAgIFRyYW5zbWl0IEZJRk8gaXMgZW1wdHkKKyAgKgorICAqIEBkZXRhaWxzICAgIFRYRU1QVFkgKFNDX1NUQVRVU1s5XSkgaXMgc2V0IGJ5IGhhcmR3YXJlIHdoZW4gdGhlIGxhc3QgYnl0ZSBvZiBUeCBidWZmZXIgaGFzIGJlZW4gdHJhbnNmZXJyZWQgdG8gVHJhbnNtaXR0ZXIgU2hpZnQgUmVnaXN0ZXIuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfSVNfVFhfRklGT19FTVBUWShzYykgKCgoc2MpLT5TVEFUVVMgJiBTQ19TVEFUVVNfVFhFTVBUWV9Nc2spPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2hlY2sgc3BlY2lmaWVkIFNtYXJ0Y2FyZCBwb3J0IFRyYW5zbWlzc2lvbiBTdGF0dXMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICAgICAgVHJhbnNtaXQgaXMgY29tcGxldGVkCisgICogQHJldHZhbCAgICAgMSAgICAgICBUcmFuc21pdCBpcyBhY3RpdmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRYQUNUIChTQ19TVEFUVVNbMzFdKSBpcyBzZXQgYnkgaGFyZHdhcmUgd2hlbiBUeCB0cmFuc2ZlciBpcyBpbiBhY3RpdmUgYW5kIHRoZSBTVE9QIGJpdCBvZiB0aGUgbGFzdCBieXRlIGhhcyBiZWVuIHRyYW5zbWl0dGVkLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0lTX1RYX0FDVElWRShzYykgICAgICgoKHNjKS0+U1RBVFVTICYgU0NfU1RBVFVTX1RYQUNUX01zayk/IDEgOiAwKQorCisKKy8qIFJYIE1hY3JvcyAqLworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBSeCBkYXRhIHJlZ2lzdGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBUaGUgb2xkZXN0IGRhdGEgYnl0ZSBpbiBSWCBGSUZPCisgICoKKyAgKiBAZGV0YWlscyAgICBCeSByZWFkaW5nIERBVCByZWdpc3RlciwgdGhlIFNDIHdpbGwgcmV0dXJuIGFuIDgtYml0IHJlY2VpdmVkIGRhdGEuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfUkVBRChzYykgICAgICAgICAoKHNjKS0+REFUKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUnggRklGTyBlbXB0eSBmbGFnIHN0YXR1cyBmcm9tIHJlZ2lzdGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBSZWNlaXZlIEZJRk8gZW1wdHkgc3RhdHVzCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBGSUZPIGlzIG5vdCBlbXB0eQorICAqIEByZXR2YWwgICAgIFNDX1NUQVRVU19SWEVNUFRZX01zayAgIFJlY2VpdmUgRklGTyBpcyBlbXB0eQorICAqCisgICogQGRldGFpbHMgICAgV2hlbiB0aGUgbGFzdCBieXRlIG9mIFJ4IGJ1ZmZlciBoYXMgYmVlbiByZWFkIGJ5IENQVSwgaGFyZHdhcmUgc2V0cyBSWEVNUFRZIChTQ19TVEFUVVNbMV0pIGhpZ2guCisgICogICAgICAgICAgICAgSXQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gU0MgcmVjZWl2ZXMgYW55IG5ldyBkYXRhLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0dFVF9SWF9FTVBUWShzYykgKChzYyktPlNUQVRVUyAmIFNDX1NUQVRVU19SWEVNUFRZX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFJ4IEZJRk8gZnVsbCBmbGFnIHN0YXR1cyBmcm9tIHJlZ2lzdGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBSZWNlaXZlIEZJRk8gZnVsbCBzdGF0dXMKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlIEZJRk8gaXMgbm90IGZ1bGwKKyAgKiBAcmV0dmFsICAgICBTQ19TVEFUVVNfVFhGVUxMX01zayAgICBSZWNlaXZlIEZJRk8gaXMgZnVsbAorICAqCisgICogQGRldGFpbHMgICAgUlhGVUxMIChTQ19TVEFUVVNbMl0pIGlzIHNldCB3aGVuIFJ4IGJ1ZmZlciBjb3VudHMgZXF1YWxzIHRvIDQsIG90aGVyd2lzZSBpdCBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0dFVF9SWF9GVUxMKHNjKSAgKChzYyktPlNUQVRVUyAmIFNDX1NUQVRVU19SWEZVTExfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDaGVjayBpZiByZWNlaXZlIGRhdGEgbnVtYmVyIGluIEZJRk8gcmVhY2ggRklGTyB0cmlnZ2VyIGxldmVsIG9yIG5vdAorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgUmVjZWl2ZSBGSUZPIGRhdGEgc3RhdHVzCisgICogQHJldHZhbCAgICAgMCAgICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIHJlY2VpdmUgRklGTyBpcyBsZXNzIHRoYW4gdHJpZ2dlciBsZXZlbAorICAqIEByZXR2YWwgICAgIDEgICAgICAgVGhlIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIEZJRk8gZXF1YWxzIG9yIGxhcmdlciB0aGFuIHRyaWdnZXIgbGV2ZWwKKyAgKgorICAqIEBkZXRhaWxzICAgIFJEQUlGIChTQ19JTlRTVFNbMF0pIGlzIHVzZWQgZm9yIHJlY2VpdmVkIGRhdGEgcmVhY2hpbmcgdHJpZ2dlciBsZXZlbCBSWFRSR0xWIChTQ19DVExbNzo2XSkgaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICAqCisgICAgICAgIElmIHJlY2VpdmUgdHJpZ2dlciBsZXZlbCBpcyBcYiBub3QgMSBieXRlLCB0aGlzIG1hY3JvIHJldHVybiAwIGRvZXMgbm90IG5lY2Vzc2FyeSBpbmRpY2F0ZXMgdGhlcmUgaXMgbm8gZGF0YSBpbiBGSUZPLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0lTX1JYX1JFQURZKHNjKSAgKCgoc2MpLT5JTlRTVFMgJiBTQ19JTlRTVFNfUkRBSUZfTXNrKT8gMSA6IDApCisKKy8qKgorICAqIEBicmllZiAgICAgIENoZWNrIHNwZWNpZmllZCBzbWFydGNhcmQgcG9ydCByZWNlaXZlIEZJRk8gaXMgZnVsbCBvciBub3QKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIFJlY2VpdmUgRklGTyBmdWxsIHN0YXR1cworICAqIEByZXR2YWwgICAgIDAgICAgICAgUmVjZWl2ZSBGSUZPIGlzIG5vdCBmdWxsCisgICogQHJldHZhbCAgICAgMSAgICAgICBSZWNlaXZlIEZJRk8gaXMgZnVsbAorICAqCisgICogQGRldGFpbHMgICAgUlhGVUxMRiggU0NfU1RBVFVTWzJdKSBpcyBzZXQgd2hlbiBSeCBidWZmZXIgY291bnRzIGVxdWFscyB0byA0LCBvdGhlcndpc2UgaXQgaXMgY2xlYXJlZCBieSBoYXJkd2FyZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9JU19SWF9GVUxMKHNjKSAgICgoKHNjKS0+U1RBVFVTICYgU0NfU1RBVFVTX1JYRlVMTF9Nc2spPyAxIDogMCkKKworCisvKiBJbnRlcnJ1cHQgTWFjcm9zICovCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgc3BlY2lmaWVkIGludGVycnVwdHMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIEludGVycnVwdCBtYXNrcyB0byBlbmFibGUsIGEgY29tYmluYXRpb24gb2YgZm9sbG93aW5nIGJpdHMsCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1JYVE9JRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1RFUlJJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1RCRUlFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fUkRBSUVOX01zaworICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIHJlY2VpdmVyIGJ1ZmZlciB0aW1lLW91dCBpbnRlcnJ1cHQsIHRyYW5zZmVyIGVycm9yIGludGVycnVwdCwKKyAgKiAgICAgICAgICAgICB0cmFuc21pdCBidWZmZXIgZW1wdHkgaW50ZXJydXB0IG9yIHJlY2VpdmUgZGF0YSByZWFjaCB0cmlnZ2VyIGxldmVsIGludGVycnVwdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFNDVUFSVF9FTkFCTEVfSU5UKHNjLCB1MzJNYXNrKSAgKChzYyktPklOVEVOIHw9ICh1MzJNYXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBzcGVjaWZpZWQgaW50ZXJydXB0cworICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgSW50ZXJydXB0IG1hc2tzIHRvIGRpc2FibGUsIGEgY29tYmluYXRpb24gb2YgZm9sbG93aW5nIGJpdHMsCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1JYVE9JRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1RFUlJJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVEVOX1RCRUlFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5URU5fUkRBSUVOX01zaworICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSByZWNlaXZlciBidWZmZXIgdGltZS1vdXQgaW50ZXJydXB0LCB0cmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQsCisgICogICAgICAgICAgICAgdHJhbnNtaXQgYnVmZmVyIGVtcHR5IGludGVycnVwdCBvciByZWNlaXZlIGRhdGEgcmVhY2ggdHJpZ2dlciBsZXZlbCBpbnRlcnJ1cHQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfRElTQUJMRV9JTlQoc2MsIHUzMk1hc2spICgoc2MpLT5JTlRFTiAmPSB+KHUzMk1hc2spKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnL3N0YXR1cworICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyVHlwZSAgSW50ZXJydXB0IGZsYWcvc3RhdHVzIHRvIGNoZWNrLCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHZhbHVlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVFNUU19SWFRPSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVFNUU19URVJSSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX0lOVFNUU19UQkVJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NfSU5UU1RTX1JEQUlGX01zaworICAqCisgICogQHJldHVybiAgICAgVGhlIHN0YXR1cyBvZiBzcGVjaWZpZWQgaW50ZXJydXB0CisgICogQHJldHZhbCAgICAgMCAgICAgICBTcGVjaWZpZWQgaW50ZXJydXB0IGRvZXMgbm90IGhhcHBlbmVkCisgICogQHJldHZhbCAgICAgMSAgICAgICBTcGVjaWZpZWQgaW50ZXJydXB0IGhhcHBlbmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgbWFjcm8gaXMgdXNlZCB0byBnZXQgcmVjZWl2ZXIgYnVmZmVyIHRpbWUtb3V0IGludGVycnVwdCBzdGF0dXMsIHRyYW5zZmVyIGVycm9yIGludGVycnVwdCBzdGF0dXMsCisgICogICAgICAgICAgICAgdHJhbnNtaXQgYnVmZmVyIGVtcHR5IGludGVycnVwdCBzdGF0dXMgb3IgcmVjZWl2ZSBkYXRhIHJlYWNoIGludGVycnVwdCBzdGF0dXMuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfR0VUX0lOVF9GTEFHKHNjLCB1MzJUeXBlKSAgICAoKChzYyktPklOVFNUUyAmICh1MzJUeXBlKSk/IDEgOiAwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWcvc3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJUeXBlICBJbnRlcnJ1cHQgZmxhZy9zdGF0dXMgdG8gY2xlYXIsIG9ubHkgXHJlZiBTQ19JTlRTVFNfVEVSUklGX01zayB2YWxpZCBmb3IgdGhpcyBtYWNyby4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIHRyYW5zZmVyIGVycm9yIGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0NMUl9JTlRfRkxBRyhzYywgdTMyVHlwZSkgICAgKChzYyktPklOVFNUUyA9ICh1MzJUeXBlKSkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHJlY2VpdmUgZXJyb3IgZmxhZy9zdGF0dXMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgQ3VycmVudCByZWNlaXZlIGVycm9yIHN0YXR1cywgY291bGQgb25lIG9mIGZvbGxvd2luZyBlcnJvcnM6CisgICogQHJldHZhbCAgICAgU0NfU1RBVFVTX1BFRl9Nc2sgICBQYXJpdHkgZXJyb3IKKyAgKiBAcmV0dmFsICAgICBTQ19TVEFUVVNfRkVGX01zayAgIEZyYW1lIGVycm9yCisgICogQHJldHZhbCAgICAgU0NfU1RBVFVTX0JFRl9Nc2sgICBCcmVhayBlcnJvcgorICAqCisgICogQGRldGFpbHMgICAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gZ2V0IHJlY2VpdmVyIHBhcml0eSBlcnJvciBzdGF0dXMsIGZyYW1lIGVycm9yIHN0YXR1cyBvciBicmVhayBlcnJvciBzdGF0dXMuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBTQ1VBUlRfR0VUX0VSUl9GTEFHKHNjKSAgICAgICAgICAgICAoKHNjKS0+U1RBVFVTICYgKFNDX1NUQVRVU19QRUZfTXNrIHwgU0NfU1RBVFVTX0ZFRl9Nc2sgfCBTQ19TVEFUVVNfQkVGX01zaykpCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIHNwZWNpZmllZCByZWNlaXZlIGVycm9yIGZsYWcvc3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBSZWNlaXZlIGVycm9yIGZsYWcvc3RhdHVzIHRvIGNsZWFyLCBjb21iaW5hdGlvbiBmb2xsb3dpbmcgdmFsdWVzCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1NUQVRVU19QRUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1NUQVRVU19GRUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1NUQVRVU19CRUZfTXNrCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgbWFjcm8gaXMgdXNlZCB0byBjbGVhciByZWNlaXZlciBwYXJpdHkgZXJyb3IgZmxhZywgZnJhbWUgZXJyb3IgZmxhZyBvciBicmVhayBlcnJvciBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgU0NVQVJUX0NMUl9FUlJfRkxBRyhzYywgdTMyTWFzaykgICAgKChzYyktPlNUQVRVUyA9ICh1MzJNYXNrKSkKKwordm9pZCBTQ1VBUlRfQ2xvc2UoU0NfVCogc2MpOwordWludDMyX3QgU0NVQVJUX09wZW4oU0NfVCogc2MsIHVpbnQzMl90IHUzMkJhdWRyYXRlKTsKK3VpbnQzMl90IFNDVUFSVF9SZWFkKFNDX1QqIHNjLCB1aW50OF90IHB1OFJ4QnVmW10sIHVpbnQzMl90IHUzMlJlYWRCeXRlcyk7Cit1aW50MzJfdCBTQ1VBUlRfU2V0TGluZUNvbmZpZyhTQ19UKiBzYywgdWludDMyX3QgdTMyQmF1ZHJhdGUsIHVpbnQzMl90IHUzMkRhdGFXaWR0aCwgdWludDMyX3QgdTMyUGFyaXR5LCB1aW50MzJfdCB1MzJTdG9wQml0cyk7Cit2b2lkIFNDVUFSVF9TZXRUaW1lb3V0Q250KFNDX1QqIHNjLCB1aW50MzJfdCB1MzJUT0MpOwordm9pZCBTQ1VBUlRfV3JpdGUoU0NfVCogc2MsIHVpbnQ4X3QgcHU4VHhCdWZbXSwgdWludDMyX3QgdTMyV3JpdGVCeXRlcyk7CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0NVQVJUX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNDVUFSVF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fU0NVQVJUX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zZGguaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3NkaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTk4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zZGguaApAQCAtMCwwICsxLDIwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHNkaC5oCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBNMjM1MSBTREggZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TREhfSF9fCisjZGVmaW5lIF9fU0RIX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTREhfRHJpdmVyIFNESCBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIFNESF9FWFBPUlRFRF9DT05TVEFOVFMgU0RIIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKworI2RlZmluZSBTREhfRVJSX0lEICAgICAgIDB4RkZGRjAxMDBVTCAvKiE8IFNESCBlcnJvciBJRCAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFNESF9USU1FT1VUICAgICAgKFNESF9FUlJfSUR8MHgwMVVMKSAvKiE8IFRpbWVvdXQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX05PX01FTU9SWSAgICAoU0RIX0VSUl9JRHwweDAyVUwpIC8qITwgT09NICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qIC0tIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSAqLworI2RlZmluZSAgICBTdWNjZXNzZnVsICAwVSAgIC8qITwgU3VjY2VzcyAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSAgICBGYWlsICAgICAgICAxVSAgIC8qITwgRmFpbGVkICBcaGlkZWluaXRpYWxpemVyICovCisKKy8qIC0tLSBkZWZpbmUgdHlwZSBvZiBTRCBjYXJkIG9yIE1NQyAqLworI2RlZmluZSBTREhfVFlQRV9VTktOT1dOICAgICAwVUwgLyohPCBVbmtub3duIGNhcmQgdHlwZSAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfVFlQRV9TRF9ISUdIICAgICAxVUwgLyohPCBTREhDIGNhcmQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX1RZUEVfU0RfTE9XICAgICAgMlVMIC8qITwgU0QgY2FyZCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfVFlQRV9NTUMgICAgICAgICAzVUwgLyohPCBNTUMgY2FyZCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfVFlQRV9FTU1DICAgICAgICA0VUwgLyohPCBlTU1DIGNhcmQgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyogU0QgZXJyb3IgKi8KKyNkZWZpbmUgU0RIX05PX1NEX0NBUkQgICAgICAgKFNESF9FUlJfSUR8MHgxMFVMKSAvKiE8IENhcmQgcmVtb3ZlZCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfRVJSX0RFVklDRSAgICAgICAoU0RIX0VSUl9JRHwweDExVUwpIC8qITwgRGV2aWNlIGVycm9yICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNESF9JTklUX1RJTUVPVVQgICAgIChTREhfRVJSX0lEfDB4MTJVTCkgLyohPCBDYXJkIGluaXQgdGltZW91dCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfU0VMRUNUX0VSUk9SICAgICAoU0RIX0VSUl9JRHwweDEzVUwpIC8qITwgQ2FyZCBzZWxlY3QgZXJyb3IgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX1dSSVRFX1BST1RFQ1QgICAgKFNESF9FUlJfSUR8MHgxNFVMKSAvKiE8IENhcmQgd3JpdGUgcHJvdGVjdCAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfSU5JVF9FUlJPUiAgICAgICAoU0RIX0VSUl9JRHwweDE1VUwpIC8qITwgQ2FyZCBpbml0IGVycm9yICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNESF9DUkM3X0VSUk9SICAgICAgIChTREhfRVJSX0lEfDB4MTZVTCkgLyohPCBDUkMgNyBlcnJvciAgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBTREhfQ1JDMTZfRVJST1IgICAgICAoU0RIX0VSUl9JRHwweDE3VUwpIC8qITwgQ1JDIDE2IGVycm9yICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNESF9DUkNfRVJST1IgICAgICAgIChTREhfRVJSX0lEfDB4MThVTCkgLyohPCBDUkMgZXJyb3IgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIX0NNRDhfRVJST1IgICAgICAgKFNESF9FUlJfSUR8MHgxOVVMKSAvKiE8IENvbW1hbmQgOCBlcnJvciAgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIE1NQ19GUkVRICAgICAgICAyMDAwMFVMICAgLyohPCBvdXRwdXQgMjBNSHogdG8gTU1DICBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFNEX0ZSRVEgICAgICAgICAyNTAwMFVMICAgLyohPCBvdXRwdXQgMjVNSHogdG8gU0QgIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgU0RIQ19GUkVRICAgICAgIDUwMDAwVUwgICAvKiE8IG91dHB1dCA1ME1IeiB0byBTREggXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lICAgIENhcmREZXRlY3RfRnJvbV9HUElPICAoMVVMIDw8IDgpICAgLyohPCBDYXJkIGRldGVjdGlvbiBwaW4gaXMgR1BJTyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lICAgIENhcmREZXRlY3RfRnJvbV9EQVQzICAoMVVMIDw8IDkpICAgLyohPCBDYXJkIGRldGVjdGlvbiBwaW4gaXMgREFUMyBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0RIX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisvKiogQGFkZHRvZ3JvdXAgU0RIX0VYUE9SVEVEX1RZUEVERUYgU0RIIEV4cG9ydGVkIFR5cGUgRGVmaW5lcworICBAeworKi8KKyNwcmFnbWEgcGFjayhwdXNoKQorI3ByYWdtYSBwYWNrKDEpCit0eXBlZGVmIHN0cnVjdCBTREhfaW5mb190Cit7CisgICAgdW5zaWduZWQgaW50ICAgIENhcmRUeXBlOyAgICAgICAvKiE8IFNESEMsIFNELCBvciBNTUMgKi8KKyAgICB1bnNpZ25lZCBpbnQgICAgUkNBOyAgICAgICAgICAgIC8qITwgUmVsYXRpdmUgY2FyZCBhZGRyZXNzICovCisgICAgdW5zaWduZWQgY2hhciAgIElzQ2FyZEluc2VydDsgICAvKiE8IENhcmQgaW5zZXJ0IHN0YXRlICovCisgICAgdW5zaWduZWQgaW50ICAgIHRvdGFsU2VjdG9yTjsgICAvKiE8IFRvdGFsIHNlY3RvciBudW1iZXIgKi8KKyAgICB1bnNpZ25lZCBpbnQgICAgZGlza1NpemU7ICAgICAgIC8qITwgRGlzayBzaXplIGluIEsgYnl0ZXMgKi8KKyAgICBpbnQgICAgICAgICAgICAgc2VjdG9yU2l6ZTsgICAgIC8qITwgU2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KK30gU0RIX0lORk9fVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIGhvbGRzIFNEIGNhcmQgaW5mbyAqLworI3ByYWdtYSBwYWNrKHBvcCkKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTREhfRVhQT1JURURfVFlQRURFRiAqLworCisvKiogQGNvbmQgSElEREVOX1NZTUJPTFMgKi8KK2V4dGVybiBTREhfSU5GT19UIFNEMDsKKy8qKiBAZW5kY29uZCBISURERU5fU1lNQk9MUyAqLworCisvKiogQGFkZHRvZ3JvdXAgU0RIX0VYUE9SVEVEX0ZVTkNUSU9OUyBTREggRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAqICBAYnJpZWYgICAgRW5hYmxlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisgKgorICogIEBwYXJhbVtpbl0gICAgc2RoICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU0RIIG1vZHVsZS4KKyAqICBAcGFyYW1baW5dICAgIHUzMkludE1hc2sgICAgSW50ZXJydXB0IHR5cGUgbWFzazoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBTREhfSU5URU5fQkxLRElFTl9Nc2sgLyBccmVmIFNESF9JTlRFTl9DUkNJRU5fTXNrIC8gXHJlZiBTREhfSU5URU5fQ0RJRU5fTXNrIC8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBTREhfSU5URU5fQ0RTUkNfTXNrIC8gXHJlZiBTREhfSU5URU5fUlRPSUVOX01zayAvIFxyZWYgU0RIX0lOVEVOX0RJVE9JRU5fTXNrIC8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBTREhfSU5URU5fV0tJRU5fTXNrCisgKgorICogIEByZXR1cm4gICBOb25lLgorICogXGhpZGVpbml0aWFsaXplcgorICovCisjZGVmaW5lIFNESF9FTkFCTEVfSU5UKHNkaCwgdTMySW50TWFzaykgICAgKChzZGgpLT5JTlRFTiB8PSAodTMySW50TWFzaykpCisKKy8qKgorICogIEBicmllZiAgICBEaXNhYmxlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisgKgorICogIEBwYXJhbVtpbl0gICAgc2RoICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU0RIIG1vZHVsZS4KKyAqICBAcGFyYW1baW5dICAgIHUzMkludE1hc2sgICAgSW50ZXJydXB0IHR5cGUgbWFzazoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBTREhfSU5URU5fQkxLRElFTl9Nc2sgLyBccmVmIFNESF9JTlRFTl9DUkNJRU5fTXNrIC8gXHJlZiBTREhfSU5URU5fQ0RJRU5fTXNrIC8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBTREhfSU5URU5fUlRPSUVOX01zayAvIFxyZWYgU0RIX0lOVEVOX0RJVE9JRU5fTXNrIC8gXHJlZiBTREhfSU5URU5fV0tJRU5fTXNrIC8gXHJlZiBTREhfSU5URU5fQ0RTUkNfTXNrIC8KKyAqCisgKiAgQHJldHVybiAgIE5vbmUuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgU0RIX0RJU0FCTEVfSU5UKHNkaCwgdTMySW50TWFzaykgICAgKChzZGgpLT5JTlRFTiAmPSB+KHUzMkludE1hc2spKQorCisvKioKKyAqICBAYnJpZWYgICAgR2V0IHNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMuCisgKgorICogIEBwYXJhbVtpbl0gICAgc2RoICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU0RIIG1vZHVsZS4KKyAqICBAcGFyYW1baW5dICAgIHUzMkludE1hc2sgICAgSW50ZXJydXB0IHR5cGUgbWFzazoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBTREhfSU5UU1RTX0JMS0RJRl9Nc2sgLyBccmVmIFNESF9JTlRTVFNfQ1JDSUZfTXNrIC8gXHJlZiBTREhfSU5UU1RTX0NSQzdfTXNrIC8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBTREhfSU5UU1RTX0NSQzE2X01zayAvIFxyZWYgU0RIX0lOVFNUU19DUkNTVFNfTXNrIC8gXHJlZiBTREhfSU5UU1RTX0RBVDBTVFNfTXNrIC8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJlZiBTREhfSU5UU1RTX0NESUZfTXNrIC8gXHJlZiBTREhfSU5UU1RTX1JUT0lGX01zayAvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVFNUU19ESVRPSUZfTXNrIC8gXHJlZiBTREhfSU5UU1RTX0NEU1RTX01zayAvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVFNUU19EQVQxU1RTX01zaworICoKKyAqCisgKiAgQHJldHVybiAgMCA9IFRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IGlzIG5vdCBoYXBwZW5lZC4KKyAqICAgICAgICAgICAxID0gVGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgaXMgaGFwcGVuZWQuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgU0RIX0dFVF9JTlRfRkxBRyhzZGgsIHUzMkludE1hc2spICgoKHNkaCktPklOVFNUUyAmICh1MzJJbnRNYXNrKSk/MTowKQorCisKKy8qKgorICogIEBicmllZiAgICBDbGVhciBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWcvc3RhdHVzLgorICoKKyAqICBAcGFyYW1baW5dICAgIHNkaCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNESCBtb2R1bGUuCisgKiAgQHBhcmFtW2luXSAgICB1MzJJbnRNYXNrICAgIEludGVycnVwdCB0eXBlIG1hc2s6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVFNUU19CTEtESUZfTXNrIC8gXHJlZiBTREhfSU5UU1RTX0NSQ0lGX01zayAvIFxyZWYgU0RIX0lOVFNUU19DRElGX01zayAvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyZWYgU0RIX0lOVFNUU19SVE9JRl9Nc2sgLyBccmVmIFNESF9JTlRTVFNfRElUT0lGX01zaworICoKKyAqCisgKiAgQHJldHVybiAgIE5vbmUuCisgKiBcaGlkZWluaXRpYWxpemVyCisgKi8KKyNkZWZpbmUgU0RIX0NMUl9JTlRfRkxBRyhzZGgsIHUzMkludE1hc2spICgoc2RoKS0+SU5UU1RTID0gKHUzMkludE1hc2spKQorCisKKy8qKgorICogIEBicmllZiAgICBDaGVjayBTRCBDYXJkIGluc2VydGVkIG9yIHJlbW92ZWQuCisgKgorICogIEBwYXJhbVtpbl0gICAgc2RoICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU0RIIG1vZHVsZS4KKyAqCisgKiAgQHJldHVybiAgIDE6IENhcmQgaW5zZXJ0ZWQuCisgKiAgICAgICAgICAgIDA6IENhcmQgcmVtb3ZlZC4KKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBTREhfSVNfQ0FSRF9QUkVTRU5UKHNkaCkgKCgoKHNkaCkgPT0gU0RIMCl8fCgoc2RoKSA9PSBTREgwX05TKSk/IFNEMC5Jc0NhcmRJbnNlcnQgOiAwKQorCisvKioKKyAqICBAYnJpZWYgICAgR2V0IFNEIENhcmQgY2FwYWNpdHkuCisgKgorICogIEBwYXJhbVtpbl0gICAgc2RoICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU0RIIG1vZHVsZS4KKyAqCisgKiAgQHJldHVybiAgIFNEIENhcmQgY2FwYWNpdHkuICh1bml0OiBLQnl0ZSkKKyAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBTREhfR0VUX0NBUkRfQ0FQQUNJVFkoc2RoKSAgKCgoKHNkaCkgPT0gU0RIMCl8fCgoc2RoKSA9PSBTREgwX05TKSk/IFNEMC5kaXNrU2l6ZSA6IDApCisKK2V4dGVybiB1aW50OF90IGdfdThSM0ZsYWc7CitleHRlcm4gdWludDhfdCB2b2xhdGlsZSBnX3U4U0REYXRhUmVhZHlGbGFnOworZXh0ZXJuIGludCAgICAgU0RIX29rOworCit2b2lkIFNESF9PcGVuKFNESF9UICpzZGgsIHVpbnQzMl90IHUzMkNhcmREZXRTcmMpOwordWludDMyX3QgU0RIX1Byb2JlKFNESF9UICpzZGgpOwordWludDMyX3QgU0RIX1JlYWQoU0RIX1QgKnNkaCwgdWludDhfdCAqcHU4QnVmQWRkciwgdWludDMyX3QgdTMyU3RhcnRTZWMsIHVpbnQzMl90IHUzMlNlY0NvdW50KTsKK3VpbnQzMl90IFNESF9Xcml0ZShTREhfVCAqc2RoLCB1aW50OF90ICpwdThCdWZBZGRyLCB1aW50MzJfdCB1MzJTdGFydFNlYywgdWludDMyX3QgdTMyU2VjQ291bnQpOworCit1aW50MzJfdCBTREhfQ2FyZERldGVjdGlvbihTREhfVCAqc2RoKTsKK3ZvaWQgU0RIX09wZW5fRGlzayhTREhfVCAqc2RoLCB1aW50MzJfdCB1MzJDYXJkRGV0U3JjKTsKK3ZvaWQgU0RIX0Nsb3NlX0Rpc2soU0RIX1QgKnNkaCk7CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0RIX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNESF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvKiBlbmQgb2YgX19TREhfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zcGkuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NGE3ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy9zcGkuaApAQCAtMCwwICsxLDU2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHNwaS5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgU1BJIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fU1BJX0hfXworI2RlZmluZSBfX1NQSV9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFNQSV9Ecml2ZXIgU1BJIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFNQSV9FWFBPUlRFRF9DT05TVEFOVFMgU1BJIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKworI2RlZmluZSBTUElfTU9ERV8wICAgICAgICAoU1BJX0NUTF9UWE5FR19Nc2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMS1BPTD0wOyBSWE5FRz0wOyBUWE5FRz0xICovCisjZGVmaW5lIFNQSV9NT0RFXzEgICAgICAgIChTUElfQ1RMX1JYTkVHX01zaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0xLUE9MPTA7IFJYTkVHPTE7IFRYTkVHPTAgKi8KKyNkZWZpbmUgU1BJX01PREVfMiAgICAgICAgKFNQSV9DVExfQ0xLUE9MX01zayB8IFNQSV9DVExfUlhORUdfTXNrKSAgICAgICAgLyohPCBDTEtQT0w9MTsgUlhORUc9MTsgVFhORUc9MCAqLworI2RlZmluZSBTUElfTU9ERV8zICAgICAgICAoU1BJX0NUTF9DTEtQT0xfTXNrIHwgU1BJX0NUTF9UWE5FR19Nc2spICAgICAgICAvKiE8IENMS1BPTD0xOyBSWE5FRz0wOyBUWE5FRz0xICovCisKKyNkZWZpbmUgU1BJX1NMQVZFICAgICAgICAgKFNQSV9DVExfU0xBVkVfTXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZXQgYXMgc2xhdmUgKi8KKyNkZWZpbmUgU1BJX01BU1RFUiAgICAgICAgKDB4MFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZXQgYXMgbWFzdGVyICovCisKKyNkZWZpbmUgU1BJX1NTICAgICAgICAgICAgICAgIChTUElfU1NDVExfU1NfTXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZXQgU1MgKi8KKyNkZWZpbmUgU1BJX1NTX0FDVElWRV9ISUdIICAgIChTUElfU1NDVExfU1NBQ1RQT0xfTXNrKSAgICAgICAgICAgICAgICAgICAgLyohPCBTUyBhY3RpdmUgaGlnaCAqLworI2RlZmluZSBTUElfU1NfQUNUSVZFX0xPVyAgICAgKDB4MFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNTIGFjdGl2ZSBsb3cgKi8KKworLyogU1BJIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIFNQSV9VTklUX0lOVF9NQVNLICAgICAgICAgICAgICAgICgweDAwMVVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElfU1NBQ1RfSU5UX01BU0sgICAgICAgICAgICAgICAoMHgwMDJVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFNQSV9TU0lOQUNUX0lOVF9NQVNLICAgICAgICAgICAgICgweDAwNFVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElfU0xWVVJfSU5UX01BU0sgICAgICAgICAgICAgICAoMHgwMDhVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIHVuZGVyIHJ1biBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElfU0xWQkVfSU5UX01BU0sgICAgICAgICAgICAgICAoMHgwMTBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElfVFhVRl9JTlRfTUFTSyAgICAgICAgICAgICAgICAoMHgwNDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElfRklGT19UWFRIX0lOVF9NQVNLICAgICAgICAgICAoMHgwODBVTCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZJRk8gVFggdGhyZXNob2xkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFNQSV9GSUZPX1JYVEhfSU5UX01BU0sgICAgICAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRklGTyBSWCB0aHJlc2hvbGQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSyAgICAgICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGSUZPIFJYIG92ZXJydW4gaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJX0ZJRk9fUlhUT19JTlRfTUFTSyAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGSUZPIFJYIHRpbWUtb3V0IGludGVycnVwdCBtYXNrICovCisKKy8qIFNQSSBTdGF0dXMgTWFzayAqLworI2RlZmluZSBTUElfQlVTWV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwMVVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJ1c3kgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU1BJX1JYX0VNUFRZX01BU0sgICAgICAgICAgICAgICAgKDB4MDJVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCBlbXB0eSBzdGF0dXMgbWFzayAqLworI2RlZmluZSBTUElfUlhfRlVMTF9NQVNLICAgICAgICAgICAgICAgICAoMHgwNFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYIGZ1bGwgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU1BJX1RYX0VNUFRZX01BU0sgICAgICAgICAgICAgICAgKDB4MDhVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWCBlbXB0eSBzdGF0dXMgbWFzayAqLworI2RlZmluZSBTUElfVFhfRlVMTF9NQVNLICAgICAgICAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRYIGZ1bGwgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU1BJX1RYUlhfUkVTRVRfTUFTSyAgICAgICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWCBvciBSWCByZXNldCBzdGF0dXMgbWFzayAqLworI2RlZmluZSBTUElfU1BJRU5fU1RTX01BU0sgICAgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSUVOIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFNQSV9TU0xJTkVfU1RTX01BU0sgICAgICAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJeF9TUyBsaW5lIHN0YXR1cyBtYXNrICovCisKKworLyogSTJTIERhdGEgV2lkdGggKi8KKyNkZWZpbmUgU1BJSTJTX0RBVEFCSVRfOCAgICAgICAgICAgKDBVTCA8PCBTUElfSTJTQ1RMX1dEV0lEVEhfUG9zKSAgICAgICAgLyohPCBJMlMgZGF0YSB3aWR0aCBpcyA4LWJpdCAqLworI2RlZmluZSBTUElJMlNfREFUQUJJVF8xNiAgICAgICAgICAoMVVMIDw8IFNQSV9JMlNDVExfV0RXSURUSF9Qb3MpICAgICAgICAvKiE8IEkyUyBkYXRhIHdpZHRoIGlzIDE2LWJpdCAqLworI2RlZmluZSBTUElJMlNfREFUQUJJVF8yNCAgICAgICAgICAoMlVMIDw8IFNQSV9JMlNDVExfV0RXSURUSF9Qb3MpICAgICAgICAvKiE8IEkyUyBkYXRhIHdpZHRoIGlzIDI0LWJpdCAqLworI2RlZmluZSBTUElJMlNfREFUQUJJVF8zMiAgICAgICAgICAoM1VMIDw8IFNQSV9JMlNDVExfV0RXSURUSF9Qb3MpICAgICAgICAvKiE8IEkyUyBkYXRhIHdpZHRoIGlzIDMyLWJpdCAqLworCisvKiBJMlMgQXVkaW8gRm9ybWF0ICovCisjZGVmaW5lIFNQSUkyU19NT05PICAgICAgICAgICAgICAgIFNQSV9JMlNDVExfTU9OT19Nc2sgICAgICAgICAgICAgICAgICAgIC8qITwgTW9uYXVyYWwgY2hhbm5lbCAqLworI2RlZmluZSBTUElJMlNfU1RFUkVPICAgICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0ZXJlbyBjaGFubmVsICovCisKKy8qIEkyUyBEYXRhIEZvcm1hdCAqLworI2RlZmluZSBTUElJMlNfRk9STUFUX0kyUyAgICAgICAgICAoMFVMIDw8IFNQSV9JMlNDVExfRk9STUFUX1BvcykgICAgICAgICAvKiE8IEkyUyBkYXRhIGZvcm1hdCAqLworI2RlZmluZSBTUElJMlNfRk9STUFUX01TQiAgICAgICAgICAoMVVMIDw8IFNQSV9JMlNDVExfRk9STUFUX1BvcykgICAgICAgICAvKiE8IE1TQiBqdXN0aWZpZWQgZGF0YSBmb3JtYXQgKi8KKyNkZWZpbmUgU1BJSTJTX0ZPUk1BVF9QQ01BICAgICAgICAgKDJVTCA8PCBTUElfSTJTQ1RMX0ZPUk1BVF9Qb3MpICAgICAgICAgLyohPCBQQ00gbW9kZSBBIGRhdGEgZm9ybWF0ICovCisjZGVmaW5lIFNQSUkyU19GT1JNQVRfUENNQiAgICAgICAgICgzVUwgPDwgU1BJX0kyU0NUTF9GT1JNQVRfUG9zKSAgICAgICAgIC8qITwgUENNIG1vZGUgQiBkYXRhIGZvcm1hdCAqLworCisvKiBJMlMgT3BlcmF0aW9uIG1vZGUgKi8KKyNkZWZpbmUgU1BJSTJTX01PREVfU0xBVkUgICAgICAgICAgU1BJX0kyU0NUTF9TTEFWRV9Nc2sgICAgICAgICAgICAgICAgICAgLyohPCBBcyBzbGF2ZSBtb2RlICovCisjZGVmaW5lIFNQSUkyU19NT0RFX01BU1RFUiAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQXMgbWFzdGVyIG1vZGUgKi8KKworLyogSTJTIFRYIEZJRk8gVGhyZXNob2xkICovCisjZGVmaW5lIFNQSUkyU19GSUZPX1RYX0xFVkVMX1dPUkRfMCAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFggdGhyZXNob2xkIGlzIDAgd29yZCAqLworI2RlZmluZSBTUElJMlNfRklGT19UWF9MRVZFTF9XT1JEXzEgICAgKDFVTCA8PCBTUElfRklGT0NUTF9UWFRIX1BvcykgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAxIHdvcmQgKi8KKyNkZWZpbmUgU1BJSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8yICAgICgyVUwgPDwgU1BJX0ZJRk9DVExfVFhUSF9Qb3MpICAgICAgLyohPCBUWCB0aHJlc2hvbGQgaXMgMiB3b3JkcyAqLworI2RlZmluZSBTUElJMlNfRklGT19UWF9MRVZFTF9XT1JEXzMgICAgKDNVTCA8PCBTUElfRklGT0NUTF9UWFRIX1BvcykgICAgICAvKiE8IFRYIHRocmVzaG9sZCBpcyAzIHdvcmRzICovCisvKiBJMlMgUlggRklGTyBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgU1BJSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8xICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgMSB3b3JkICovCisjZGVmaW5lIFNQSUkyU19GSUZPX1JYX0xFVkVMX1dPUkRfMiAgICAoMVVMIDw8IFNQSV9GSUZPQ1RMX1JYVEhfUG9zKSAgICAgIC8qITwgUlggdGhyZXNob2xkIGlzIDIgd29yZHMgKi8KKyNkZWZpbmUgU1BJSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8zICAgICgyVUwgPDwgU1BJX0ZJRk9DVExfUlhUSF9Qb3MpICAgICAgLyohPCBSWCB0aHJlc2hvbGQgaXMgMyB3b3JkcyAqLworI2RlZmluZSBTUElJMlNfRklGT19SWF9MRVZFTF9XT1JEXzQgICAgKDNVTCA8PCBTUElfRklGT0NUTF9SWFRIX1BvcykgICAgICAvKiE8IFJYIHRocmVzaG9sZCBpcyA0IHdvcmRzICovCisKKy8qIEkyUyBSZWNvcmQgQ2hhbm5lbCAqLworI2RlZmluZSBTUElJMlNfTU9OT19SSUdIVCAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlY29yZCBtb25vIHJpZ2h0IGNoYW5uZWwgKi8KKyNkZWZpbmUgU1BJSTJTX01PTk9fTEVGVCAgICAgICAgICAgU1BJX0kyU0NUTF9SWExDSF9Nc2sgICAgICAgICAgICAgICAgICAgLyohPCBSZWNvcmQgbW9ubyBsZWZ0IGNoYW5uZWwgKi8KKworLyogSTJTIENoYW5uZWwgKi8KKyNkZWZpbmUgU1BJSTJTX1JJR0hUICAgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgcmlnaHQgY2hhbm5lbCAqLworI2RlZmluZSBTUElJMlNfTEVGVCAgICAgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCBsZWZ0IGNoYW5uZWwgKi8KKworLyogSTJTIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIFNQSUkyU19GSUZPX1RYVEhfSU5UX01BU0sgICAgICAgICAgICgweDAxVUwpICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFggRklGTyB0aHJlc2hvbGQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJSTJTX0ZJRk9fUlhUSF9JTlRfTUFTSyAgICAgICAgICAgKDB4MDJVTCkgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCBGSUZPIHRocmVzaG9sZCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElJMlNfRklGT19SWE9WX0lOVF9NQVNLICAgICAgICAgICAoMHgwNFVMKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYIEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElJMlNfRklGT19SWFRPX0lOVF9NQVNLICAgICAgICAgICAoMHgwOFVMKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYIEZJRk8gdGltZS1vdXQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgU1BJSTJTX1RYVUZfSU5UX01BU0sgICAgICAgICAgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWCBGSUZPIHVuZGVyZmxvdyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElJMlNfUklHSFRfWkNfSU5UX01BU0sgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJpZ2h0IGNoYW5uZWwgemVybyBjcm9zcyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTUElJMlNfTEVGVF9aQ19JTlRfTUFTSyAgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IExlZnQgY2hhbm5lbCB6ZXJvIGNyb3NzIGludGVycnVwdCBtYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU1BJX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBTUElfRVhQT1JURURfRlVOQ1RJT05TIFNQSSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIHRoZSB1bml0IHRyYW5zZmVyIGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBXcml0ZSAxIHRvIFVOSVRJRiBiaXQgb2YgU1BJX1NUQVRVUyByZWdpc3RlciB0byBjbGVhciB0aGUgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgZmxhZy4KKyAgKi8KKyNkZWZpbmUgU1BJX0NMUl9VTklUX1RSQU5TX0lOVF9GTEFHKHNwaSkgICAoIChzcGkpLT5TVEFUVVMgPSBTUElfU1RBVFVTX1VOSVRJRl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUcmlnZ2VyIFJYIFBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBSWFBETUFFTiBiaXQgb2YgU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSV9UUklHR0VSX1JYX1BETUEoc3BpKSAgICggKHNwaSktPlBETUFDVEwgfD0gU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgVHJpZ2dlciBUWCBQRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgVFhQRE1BRU4gYml0IG9mIFNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBUWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElfVFJJR0dFUl9UWF9QRE1BKHNwaSkgICAoIChzcGkpLT5QRE1BQ1RMIHw9IFNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIFRyaWdnZXIgVFggYW5kIFJYIFBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBUWFBETUFFTiBiaXQgYW5kIFJYUERNQUVOIGJpdCBvZiBTUElfUERNQUNUTCByZWdpc3RlciB0byBlbmFibGUgVFggYW5kIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSV9UUklHR0VSX1RYX1JYX1BETUEoc3BpKSAgICggKHNwaSktPlBETUFDVEwgfD0gKFNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayB8IFNQSV9QRE1BQ1RMX1JYUERNQUVOX01zaykgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFJYIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFJYUERNQUVOIGJpdCBvZiBTUElfUERNQUNUTCByZWdpc3RlciB0byBkaXNhYmxlIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSV9ESVNBQkxFX1JYX1BETUEoc3BpKSAoIChzcGkpLT5QRE1BQ1RMICY9IH5TUElfUERNQUNUTF9SWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFRYIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFRYUERNQUVOIGJpdCBvZiBTUElfUERNQUNUTCByZWdpc3RlciB0byBkaXNhYmxlIFRYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSV9ESVNBQkxFX1RYX1BETUEoc3BpKSAoIChzcGkpLT5QRE1BQ1RMICY9IH5TUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFRYIGFuZCBSWCBQRE1BIHRyYW5zZmVyLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBDbGVhciBUWFBETUFFTiBiaXQgYW5kIFJYUERNQUVOIGJpdCBvZiBTUElfUERNQUNUTCByZWdpc3RlciB0byBkaXNhYmxlIFRYIGFuZCBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBTUElfRElTQUJMRV9UWF9SWF9QRE1BKHNwaSkgICAoIChzcGkpLT5QRE1BQ1RMICY9IH4oU1BJX1BETUFDVExfVFhQRE1BRU5fTXNrIHwgU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCB0aGUgY291bnQgb2YgYXZhaWxhYmxlIGRhdGEgaW4gUlggRklGTy4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIFRoZSBjb3VudCBvZiBhdmFpbGFibGUgZGF0YSBpbiBSWCBGSUZPLgorICAqIEBkZXRhaWxzICAgIFJlYWQgUlhDTlQgKFNQSV9TVEFUVVNbMjc6MjRdKSB0byBnZXQgdGhlIGNvdW50IG9mIGF2YWlsYWJsZSBkYXRhIGluIFJYIEZJRk8uCisgICovCisjZGVmaW5lIFNQSV9HRVRfUlhfRklGT19DT1VOVChzcGkpICAgKCAoKHNwaSktPlNUQVRVUyAmIFNQSV9TVEFUVVNfUlhDTlRfTXNrKSA+PiBTUElfU1RBVFVTX1JYQ05UX1BvcyApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCB0aGUgUlggRklGTyBlbXB0eSBmbGFnLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHZhbCAgICAgMCBSWCBGSUZPIGlzIG5vdCBlbXB0eS4KKyAgKiBAcmV0dmFsICAgICAxIFJYIEZJRk8gaXMgZW1wdHkuCisgICogQGRldGFpbHMgICAgUmVhZCBSWEVNUFRZIGJpdCBvZiBTUElfU1RBVFVTIHJlZ2lzdGVyIHRvIGdldCB0aGUgUlggRklGTyBlbXB0eSBmbGFnLgorICAqLworI2RlZmluZSBTUElfR0VUX1JYX0ZJRk9fRU1QVFlfRkxBRyhzcGkpICAgKCAoKHNwaSktPlNUQVRVUyAmIFNQSV9TVEFUVVNfUlhFTVBUWV9Nc2spID4+IFNQSV9TVEFUVVNfUlhFTVBUWV9Qb3MgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgdGhlIFRYIEZJRk8gZW1wdHkgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR2YWwgICAgIDAgVFggRklGTyBpcyBub3QgZW1wdHkuCisgICogQHJldHZhbCAgICAgMSBUWCBGSUZPIGlzIGVtcHR5LgorICAqIEBkZXRhaWxzICAgIFJlYWQgVFhFTVBUWSBiaXQgb2YgU1BJX1NUQVRVUyByZWdpc3RlciB0byBnZXQgdGhlIFRYIEZJRk8gZW1wdHkgZmxhZy4KKyAgKi8KKyNkZWZpbmUgU1BJX0dFVF9UWF9GSUZPX0VNUFRZX0ZMQUcoc3BpKSAgICggKChzcGkpLT5TVEFUVVMgJiBTUElfU1RBVFVTX1RYRU1QVFlfTXNrKSA+PiBTUElfU1RBVFVTX1RYRU1QVFlfUG9zICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBUWCBGSUZPIGZ1bGwgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR2YWwgICAgIDAgVFggRklGTyBpcyBub3QgZnVsbC4KKyAgKiBAcmV0dmFsICAgICAxIFRYIEZJRk8gaXMgZnVsbC4KKyAgKiBAZGV0YWlscyAgICBSZWFkIFRYRlVMTCBiaXQgb2YgU1BJX1NUQVRVUyByZWdpc3RlciB0byBnZXQgdGhlIFRYIEZJRk8gZnVsbCBmbGFnLgorICAqLworI2RlZmluZSBTUElfR0VUX1RYX0ZJRk9fRlVMTF9GTEFHKHNwaSkgICAoICgoc3BpKS0+U1RBVFVTICYgU1BJX1NUQVRVU19UWEZVTExfTXNrKSA+PiBTUElfU1RBVFVTX1RYRlVMTF9Qb3MgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgdGhlIGRhdHVtIHJlYWQgZnJvbSBSWCByZWdpc3Rlci4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIERhdGEgaW4gUlggcmVnaXN0ZXIuCisgICogQGRldGFpbHMgICAgUmVhZCBTUElfUlggcmVnaXN0ZXIgdG8gZ2V0IHRoZSByZWNlaXZlZCBkYXR1bS4KKyAgKi8KKyNkZWZpbmUgU1BJX1JFQURfUlgoc3BpKSAgICggKHNwaSktPlJYICkKKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgZGF0dW0gdG8gVFggcmVnaXN0ZXIuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJUeERhdGEgVGhlIGRhdHVtIHdoaWNoIHVzZXIgYXR0ZW1wdCB0byB0cmFuc2ZlciB0aHJvdWdoIFNQSSBidXMuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBXcml0ZSB1MzJUeERhdGEgdG8gU1BJX1RYIHJlZ2lzdGVyLgorICAqLworI2RlZmluZSBTUElfV1JJVEVfVFgoc3BpLCB1MzJUeERhdGEpICAgKCAoc3BpKS0+VFggPSAodTMyVHhEYXRhKSApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBTUEl4X1NTIHBpbiB0byBoaWdoIHN0YXRlLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBEaXNhYmxlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gYW5kIHNldCBTUEl4X1NTIHBpbiB0byBoaWdoIHN0YXRlLgorICAqLworI2RlZmluZSBTUElfU0VUX1NTX0hJR0goc3BpKSAgICggKHNwaSktPlNTQ1RMID0gKChzcGkpLT5TU0NUTCAmICh+U1BJX1NTQ1RMX0FVVE9TU19Nc2spKSB8IChTUElfU1NDVExfU1NBQ1RQT0xfTXNrIHwgU1BJX1NTQ1RMX1NTX01zaykgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgU1BJeF9TUyBwaW4gdG8gbG93IHN0YXRlLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBEaXNhYmxlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gYW5kIHNldCBTUEl4X1NTIHBpbiB0byBsb3cgc3RhdGUuCisgICovCisjZGVmaW5lIFNQSV9TRVRfU1NfTE9XKHNwaSkgICAoIChzcGkpLT5TU0NUTCA9ICgoc3BpKS0+U1NDVEwgJiAofihTUElfU1NDVExfQVVUT1NTX01zayB8IFNQSV9TU0NUTF9TU0FDVFBPTF9Nc2spKSkgfCBTUElfU1NDVExfU1NfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEJ5dGUgUmVvcmRlciBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgRW5hYmxlIEJ5dGUgUmVvcmRlciBmdW5jdGlvbi4gVGhlIHN1c3BlbmQgaW50ZXJ2YWwgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBTVVNQSVRWIChTUElfQ1RMWzc6NF0pLgorICAqLworI2RlZmluZSBTUElfRU5BQkxFX0JZVEVfUkVPUkRFUihzcGkpICAgKCAoc3BpKS0+Q1RMIHw9ICBTUElfQ1RMX1JFT1JERVJfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBCeXRlIFJlb3JkZXIgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFJFT1JERVIgYml0IGZpZWxkIG9mIFNQSV9DVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBCeXRlIFJlb3JkZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSV9ESVNBQkxFX0JZVEVfUkVPUkRFUihzcGkpICAgKCAoc3BpKS0+Q1RMICY9IH5TUElfQ1RMX1JFT1JERVJfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IHRoZSBsZW5ndGggb2Ygc3VzcGVuZCBpbnRlcnZhbC4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlN1c3BDeWNsZSBEZWNpZGVzIHRoZSBsZW5ndGggb2Ygc3VzcGVuZCBpbnRlcnZhbC4gSXQgY291bGQgYmUgMCB+IDE1LgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IHRoZSBsZW5ndGggb2Ygc3VzcGVuZCBpbnRlcnZhbCBhY2NvcmRpbmcgdG8gdTMyU3VzcEN5Y2xlLgorICAqICAgICAgICAgICAgIFRoZSBsZW5ndGggb2Ygc3VzcGVuZCBpbnRlcnZhbCBpcyAoKHUzMlN1c3BDeWNsZSArIDAuNSkgKiB0aGUgbGVuZ3RoIG9mIG9uZSBTUEkgYnVzIGNsb2NrIGN5Y2xlKS4KKyAgKi8KKyNkZWZpbmUgU1BJX1NFVF9TVVNQRU5EX0NZQ0xFKHNwaSwgdTMyU3VzcEN5Y2xlKSAgICggKHNwaSktPkNUTCA9ICgoc3BpKS0+Q1RMICYgflNQSV9DVExfU1VTUElUVl9Nc2spIHwgKCh1MzJTdXNwQ3ljbGUpIDw8IFNQSV9DVExfU1VTUElUVl9Qb3MpICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IHRoZSBTUEkgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aCBMU0IgZmlyc3QuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIFNldCBMU0IgYml0IG9mIFNQSV9DVEwgcmVnaXN0ZXIgdG8gc2V0IHRoZSBTUEkgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aCBMU0IgZmlyc3QuCisgICovCisjZGVmaW5lIFNQSV9TRVRfTFNCX0ZJUlNUKHNwaSkgICAoIChzcGkpLT5DVEwgfD0gU1BJX0NUTF9MU0JfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IHRoZSBTUEkgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aCBNU0IgZmlyc3QuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIExTQiBiaXQgb2YgU1BJX0NUTCByZWdpc3RlciB0byBzZXQgdGhlIFNQSSB0cmFuc2ZlciBzZXF1ZW5jZSB3aXRoIE1TQiBmaXJzdC4KKyAgKi8KKyNkZWZpbmUgU1BJX1NFVF9NU0JfRklSU1Qoc3BpKSAgICggKHNwaSktPkNUTCAmPSB+U1BJX0NUTF9MU0JfTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IHRoZSBkYXRhIHdpZHRoIG9mIGEgU1BJIHRyYW5zYWN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyV2lkdGggVGhlIGJpdCB3aWR0aCBvZiBvbmUgdHJhbnNhY3Rpb24uCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBUaGUgZGF0YSB3aWR0aCBjYW4gYmUgOCB+IDMyIGJpdHMuCisgICovCisjZGVmaW5lIFNQSV9TRVRfREFUQV9XSURUSChzcGksIHUzMldpZHRoKSAgICggKHNwaSktPkNUTCA9ICgoc3BpKS0+Q1RMICYgflNQSV9DVExfRFdJRFRIX01zaykgfCAoKCh1MzJXaWR0aCkgJiAweDFGKSA8PCBTUElfQ1RMX0RXSURUSF9Qb3MpICkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBTUEkgYnVzeSBzdGF0ZS4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR2YWwgICAgIDAgU1BJIGNvbnRyb2xsZXIgaXMgbm90IGJ1c3kuCisgICogQHJldHZhbCAgICAgMSBTUEkgY29udHJvbGxlciBpcyBidXN5LgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gd2lsbCByZXR1cm4gdGhlIGJ1c3kgc3RhdGUgb2YgU1BJIGNvbnRyb2xsZXIuCisgICovCisjZGVmaW5lIFNQSV9JU19CVVNZKHNwaSkgICAoICgoc3BpKS0+U1RBVFVTICYgU1BJX1NUQVRVU19CVVNZX01zaykgPj4gU1BJX1NUQVRVU19CVVNZX1BvcyApCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBTUEkgY29udHJvbGxlci4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IFNQSUVOIChTUElfQ1RMWzBdKSB0byBlbmFibGUgU1BJIGNvbnRyb2xsZXIuCisgICovCisjZGVmaW5lIFNQSV9FTkFCTEUoc3BpKSAgICggKHNwaSktPkNUTCB8PSBTUElfQ1RMX1NQSUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgU1BJIGNvbnRyb2xsZXIuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFNQSUVOIChTUElfQ1RMWzBdKSB0byBkaXNhYmxlIFNQSSBjb250cm9sbGVyLgorICAqLworI2RlZmluZSBTUElfRElTQUJMRShzcGkpICAgKCAoc3BpKS0+Q1RMICY9IH5TUElfQ1RMX1NQSUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIHplcm8gY3Jvc3MgZGV0ZWN0aW9uIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoTWFzayBUaGUgbWFzayBmb3IgbGVmdCBvciByaWdodCBjaGFubmVsLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX1JJR0hUCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfTEVGVAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgUlpDRU4gb3IgTFpDRU4gYml0IG9mIFNQSV9JMlNDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIHplcm8gY3Jvc3MgZGV0ZWN0aW9uIGZ1bmN0aW9uLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU1BJSTJTX0VOQUJMRV9UWF9aQ0QoU1BJX1QgKmkycywgdWludDMyX3QgdTMyQ2hNYXNrKQoreworICAgIGlmKHUzMkNoTWFzayA9PSBTUElJMlNfUklHSFQpCisgICAgeworICAgICAgICBpMnMtPkkyU0NUTCB8PSBTUElfSTJTQ1RMX1JaQ0VOX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaTJzLT5JMlNDVEwgfD0gU1BJX0kyU0NUTF9MWkNFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgemVybyBjcm9zcyBkZXRlY3Rpb24gZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2hNYXNrIFRoZSBtYXNrIGZvciBsZWZ0IG9yIHJpZ2h0IGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfUklHSFQKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19MRUZUCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIFJaQ0VOIG9yIExaQ0VOIGJpdCBvZiBTUElfSTJTQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgemVybyBjcm9zcyBkZXRlY3Rpb24gZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTUElJMlNfRElTQUJMRV9UWF9aQ0QoU1BJX1QgKmkycywgdWludDMyX3QgdTMyQ2hNYXNrKQoreworICAgIGlmKHUzMkNoTWFzayA9PSBTUElJMlNfUklHSFQpCisgICAgeworICAgICAgICBpMnMtPkkyU0NUTCAmPSB+U1BJX0kyU0NUTF9SWkNFTl9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGkycy0+STJTQ1RMICY9IH5TUElfSTJTQ1RMX0xaQ0VOX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEkyUyBUWCBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBzZXQgVFhQRE1BRU4gYml0IG9mIFNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIHRyYW5zbWl0IGRhdGEgd2l0aCBQRE1BLgorICAqLworI2RlZmluZSBTUElJMlNfRU5BQkxFX1RYRE1BKGkycykgICggKGkycyktPlBETUFDVEwgfD0gU1BJX1BETUFDVExfVFhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIEkyUyBUWCBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBUWFBETUFFTiBiaXQgb2YgU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBUWCBETUEgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSUkyU19ESVNBQkxFX1RYRE1BKGkycykgKCAoaTJzKS0+UERNQUNUTCAmPSB+U1BJX1BETUFDVExfVFhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBFbmFibGUgSTJTIFJYIERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBSWFBETUFFTiBiaXQgb2YgU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gcmVjZWl2ZSBkYXRhIHdpdGggUERNQS4KKyAgKi8KKyNkZWZpbmUgU1BJSTJTX0VOQUJMRV9SWERNQShpMnMpICggKGkycyktPlBETUFDVEwgfD0gU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIEkyUyBSWCBETUEgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBSWFBETUFFTiBiaXQgb2YgU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBSWCBETUEgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSUkyU19ESVNBQkxFX1JYRE1BKGkycykgKCAoaTJzKS0+UERNQUNUTCAmPSB+U1BJX1BETUFDVExfUlhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBFbmFibGUgSTJTIFRYIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IFRYRU4gYml0IG9mIFNQSV9JMlNDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIEkyUyBUWCBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgU1BJSTJTX0VOQUJMRV9UWChpMnMpICggKGkycyktPkkyU0NUTCB8PSBTUElfSTJTQ1RMX1RYRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIEkyUyBUWCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIFRYRU4gYml0IG9mIFNQSV9JMlNDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBJMlMgVFggZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSUkyU19ESVNBQkxFX1RYKGkycykgKCAoaTJzKS0+STJTQ1RMICY9IH5TUElfSTJTQ1RMX1RYRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBFbmFibGUgSTJTIFJYIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgc2V0IFJYRU4gYml0IG9mIFNQSV9JMlNDVEwgcmVnaXN0ZXIgdG8gZW5hYmxlIEkyUyBSWCBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgU1BJSTJTX0VOQUJMRV9SWChpMnMpICggKGkycyktPkkyU0NUTCB8PSBTUElfSTJTQ1RMX1JYRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIEkyUyBSWCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIFJYRU4gYml0IG9mIFNQSV9JMlNDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBJMlMgUlggZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSUkyU19ESVNBQkxFX1JYKGkycykgKCAoaTJzKS0+STJTQ1RMICY9IH5TUElfSTJTQ1RMX1JYRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICBFbmFibGUgVFggTXV0ZSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIHNldCBNVVRFIGJpdCBvZiBTUElfSTJTQ1RMIHJlZ2lzdGVyIHRvIGVuYWJsZSBJMlMgVFggbXV0ZSBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgU1BJSTJTX0VOQUJMRV9UWF9NVVRFKGkycykgICggKGkycyktPkkyU0NUTCB8PSBTUElfSTJTQ1RMX01VVEVfTXNrICkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIFRYIE11dGUgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBNVVRFIGJpdCBvZiBTUElfSTJTQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgSTJTIFRYIG11dGUgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFNQSUkyU19ESVNBQkxFX1RYX01VVEUoaTJzKSAoIChpMnMpLT5JMlNDVEwgJj0gflNQSV9JMlNDVExfTVVURV9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIFRYIEZJRk8uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciBUWCBGSUZPLiBUaGUgaW50ZXJuYWwgVFggRklGTyBwb2ludGVyIHdpbGwgYmUgcmVzZXQgdG8gRklGTyBzdGFydCBwb2ludC4KKyAgKi8KKyNkZWZpbmUgU1BJSTJTX0NMUl9UWF9GSUZPKGkycykgKCAoaTJzKS0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9UWEZCQ0xSX01zayApCisKKy8qKgorICAqIEBicmllZiAgQ2xlYXIgUlggRklGTy4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGNsZWFyIFJYIEZJRk8uIFRoZSBpbnRlcm5hbCBSWCBGSUZPIHBvaW50ZXIgd2lsbCBiZSByZXNldCB0byBGSUZPIHN0YXJ0IHBvaW50LgorICAqLworI2RlZmluZSBTUElJMlNfQ0xSX1JYX0ZJRk8oaTJzKSAoIChpMnMpLT5GSUZPQ1RMIHw9IFNQSV9GSUZPQ1RMX1JYRkJDTFJfTXNrICkKKworLyoqCisgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHJlY29yZGluZyBzb3VyY2UgY2hhbm5lbCB3aGVuIG1vbm8gbW9kZSBpcyB1c2VkLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkNoIGxlZnQgb3IgcmlnaHQgY2hhbm5lbC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX01PTk9fTEVGVAorICAqICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfTU9OT19SSUdIVAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gc2VsZWN0cyB0aGUgcmVjb3JkaW5nIHNvdXJjZSBjaGFubmVsIG9mIG1vbmF1cmFsIG1vZGUuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTUElJMlNfU0VUX01PTk9fUlhfQ0hBTk5FTChTUElfVCAqaTJzLCB1aW50MzJfdCB1MzJDaCkKK3sKKyAgICB1MzJDaCA9PSBTUElJMlNfTU9OT19MRUZUID8KKyAgICAoaTJzLT5JMlNDVEwgfD0gU1BJX0kyU0NUTF9SWExDSF9Nc2spIDoKKyAgICAoaTJzLT5JMlNDVEwgJj0gflNQSV9JMlNDVExfUlhMQ0hfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICBXcml0ZSBkYXRhIHRvIEkyUyBUWCBGSUZPLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkRhdGEgVGhlIHZhbHVlIHdyaXR0ZW4gdG8gVFggRklGTy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgd3JpdGUgYSB2YWx1ZSB0byBUWCBGSUZPLgorICAqLworI2RlZmluZSBTUElJMlNfV1JJVEVfVFhfRklGTyhpMnMsIHUzMkRhdGEpICAoIChpMnMpLT5UWCA9ICh1MzJEYXRhKSApCisKKy8qKgorICAqIEBicmllZiAgUmVhZCBSWCBGSUZPLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkIGZyb20gUlggRklGTy4KKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgdmFsdWUgcmVhZCBmcm9tIFJYIEZJRk8uCisgICovCisjZGVmaW5lIFNQSUkyU19SRUFEX1JYX0ZJRk8oaTJzKSAoIChpMnMpLT5SWCApCisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBtYXNrIHZhbHVlIGZvciBhbGwgaW50ZXJydXB0IGZsYWdzLgorICAqIEByZXR1cm4gVGhlIGludGVycnVwdCBmbGFncyBzcGVjaWZpZWQgYnkgdGhlIHUzMm1hc2sgcGFyYW1ldGVyLgorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCByZXR1cm4gdGhlIGNvbWJpbmF0aW9uIGludGVycnVwdCBmbGFncyBvZiBTUElfSTJTU1RTIHJlZ2lzdGVyLiBUaGUgZmxhZ3MgYXJlIHNwZWNpZmllZCBieSB0aGUgdTMybWFzayBwYXJhbWV0ZXIuCisgICovCisjZGVmaW5lIFNQSUkyU19HRVRfSU5UX0ZMQUcoaTJzLCB1MzJNYXNrKSAoIChpMnMpLT5JMlNTVFMgJiAodTMyTWFzaykgKQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBtYXNrIHZhbHVlIGZvciBhbGwgaW50ZXJydXB0IGZsYWdzLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBjbGVhciB0aGUgaW50ZXJydXB0IGZsYWdzIHNwZWNpZmllZCBieSB0aGUgdTMybWFzayBwYXJhbWV0ZXIuCisgIEV4Y2VwdCBUWCBhbmQgUlggRklGTyB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWdzLCB0aGUgb3RoZXIgaW50ZXJydXB0IGZsYWdzIGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSB0byBpdHNlbGYuCisgICovCisjZGVmaW5lIFNQSUkyU19DTFJfSU5UX0ZMQUcoaTJzLCB1MzJNYXNrKSAoIChpMnMpLT5JMlNTVFMgPSAodTMyTWFzaykgKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0cmFuc21pdCBGSUZPIGxldmVsCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gVFggRklGTyBsZXZlbAorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgd29yZHMgaW4gVFggRklGTy4KKyAgKi8KKyNkZWZpbmUgU1BJSTJTX0dFVF9UWF9GSUZPX0xFVkVMKGkycykgKCAoKGkycyktPkkyU1NUUyAmIFNQSV9JMlNTVFNfVFhDTlRfTXNrKSA+PiBTUElfSTJTU1RTX1RYQ05UX1BvcyApCisKKy8qKgorICAqIEBicmllZiAgR2V0IHJlY2VpdmUgRklGTyBsZXZlbAorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIFJYIEZJRk8gbGV2ZWwKKyAgKiBAZGV0YWlscyBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHdvcmRzIGluIFJYIEZJRk8uCisgICovCisjZGVmaW5lIFNQSUkyU19HRVRfUlhfRklGT19MRVZFTChpMnMpICggKChpMnMpLT5JMlNTVFMgJiBTUElfSTJTU1RTX1JYQ05UX01zaykgPj4gU1BJX0kyU1NUU19SWENOVF9Qb3MgKQorCisvKiBGdW5jdGlvbiBwcm90b3R5cGUgZGVjbGFyYXRpb24gKi8KK3VpbnQzMl90IFNQSV9PcGVuKFNQSV9UICpzcGksIHVpbnQzMl90IHUzMk1hc3RlclNsYXZlLCB1aW50MzJfdCB1MzJTUElNb2RlLCB1aW50MzJfdCB1MzJEYXRhV2lkdGgsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKTsKK3ZvaWQgU1BJX0Nsb3NlKFNQSV9UICpzcGkpOwordm9pZCBTUElfQ2xlYXJSeEZJRk8oU1BJX1QgKnNwaSk7Cit2b2lkIFNQSV9DbGVhclR4RklGTyhTUElfVCAqc3BpKTsKK3ZvaWQgU1BJX0Rpc2FibGVBdXRvU1MoU1BJX1QgKnNwaSk7Cit2b2lkIFNQSV9FbmFibGVBdXRvU1MoU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyU1NQaW5NYXNrLCB1aW50MzJfdCB1MzJBY3RpdmVMZXZlbCk7Cit1aW50MzJfdCBTUElfU2V0QnVzQ2xvY2soU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyQnVzQ2xvY2spOwordm9pZCBTUElfU2V0RklGTyhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJUeFRocmVzaG9sZCwgdWludDMyX3QgdTMyUnhUaHJlc2hvbGQpOwordWludDMyX3QgU1BJX0dldEJ1c0Nsb2NrKFNQSV9UICpzcGkpOwordm9pZCBTUElfRW5hYmxlSW50KFNQSV9UICpzcGksIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBTUElfRGlzYWJsZUludChTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3VpbnQzMl90IFNQSV9HZXRJbnRGbGFnKFNQSV9UICpzcGksIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBTUElfQ2xlYXJJbnRGbGFnKFNQSV9UICpzcGksIHVpbnQzMl90IHUzMk1hc2spOwordWludDMyX3QgU1BJX0dldFN0YXR1cyhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKKwordWludDMyX3QgU1BJSTJTX09wZW4oU1BJX1QgKmkycywgdWludDMyX3QgdTMyTWFzdGVyU2xhdmUsIHVpbnQzMl90IHUzMlNhbXBsZVJhdGUsIHVpbnQzMl90IHUzMldvcmRXaWR0aCwgdWludDMyX3QgdTMyQ2hhbm5lbHMsIHVpbnQzMl90IHUzMkRhdGFGb3JtYXQpOwordm9pZCBTUElJMlNfQ2xvc2UoU1BJX1QgKmkycyk7Cit2b2lkIFNQSUkyU19FbmFibGVJbnQoU1BJX1QgKmkycywgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFNQSUkyU19EaXNhYmxlSW50KFNQSV9UICppMnMsIHVpbnQzMl90IHUzMk1hc2spOwordWludDMyX3QgU1BJSTJTX0VuYWJsZU1DTEsoU1BJX1QgKmkycywgdWludDMyX3QgdTMyQnVzQ2xvY2spOwordm9pZCBTUElJMlNfRGlzYWJsZU1DTEsoU1BJX1QgKmkycyk7Cit2b2lkIFNQSUkyU19TZXRGSUZPKFNQSV9UICppMnMsIHVpbnQzMl90IHUzMlR4VGhyZXNob2xkLCB1aW50MzJfdCB1MzJSeFRocmVzaG9sZCk7CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTUElfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU1BJX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19TUElfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3N5cy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0ZGE1MwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3N5cy5oCkBAIC0wLDAgKzEsMzA5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIFNZUy5oCisgKiBAdmVyc2lvbiAgVjMKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgU3lzdGVtIE1hbmFnZXIgKFNZUykgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1NZU19IX18KKyNkZWZpbmUgX19TWVNfSF9fCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTWVNfRHJpdmVyIFNZUyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTWVNfRVhQT1JURURfQ09OU1RBTlRTIFNZUyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBNb2R1bGUgUmVzZXQgQ29udHJvbCBSZXNpc3RlciBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUERNQTBfUlNUICAgKCgweDBVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QwX1BETUEwUlNUX1BvcykgICAgIC8qITwgUERNQTAgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEVCSV9SU1QgICAgICgoMHgwVUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMF9FQklSU1RfUG9zKSAgICAgICAvKiE8IEVCSSByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVVNCSF9SU1QgICAgKCgweDBVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QwX1VTQkhSU1RfUG9zKSAgICAgIC8qITwgVVNCSCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgU0RIMF9SU1QgICAgKCgweDBVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QwX1NESDBSU1RfUG9zKSAgICAgIC8qITwgU0RIMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgQ1JDX1JTVCAgICAgKCgweDBVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QwX0NSQ1JTVF9Qb3MpICAgICAgIC8qITwgQ1JDIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBDUlBUX1JTVCAgICAoKDB4MFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDBfQ1JQVFJTVF9Qb3MpICAgICAgLyohPCBDUlBUIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBQRE1BMV9SU1QgICAoKDB4MFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDBfUERNQTFSU1RfUG9zKSAgICAgLyohPCBQRE1BMSByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKworI2RlZmluZSBHUElPX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfR1BJT1JTVF9Qb3MpICAgICAgLyohPCBHUElPIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBUTVIwX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVE1SMFJTVF9Qb3MpICAgICAgLyohPCBUTVIwIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBUTVIxX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVE1SMVJTVF9Qb3MpICAgICAgLyohPCBUTVIxIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBUTVIyX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVE1SMlJTVF9Qb3MpICAgICAgLyohPCBUTVIyIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBUTVIzX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVE1SM1JTVF9Qb3MpICAgICAgLyohPCBUTVIzIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBBQ01QMDFfUlNUICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfQUNNUDAxUlNUX1BvcykgICAgLyohPCBBQ01QMDEgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEkyQzBfUlNUICAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9JMkMwUlNUX1BvcykgICAgICAvKiE8IEkyQzAgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEkyQzFfUlNUICAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9JMkMxUlNUX1BvcykgICAgICAvKiE8IEkyQzEgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEkyQzJfUlNUICAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9JMkMyUlNUX1BvcykgICAgICAvKiE8IEkyQzIgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFFTUEkwX1JTVCAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9RU1BJMFJTVF9Qb3MpICAgICAvKiE8IFFTUEkwIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBTUEkwX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfU1BJMFJTVF9Qb3MpICAgICAgLyohPCBTUEkwIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBTUEkxX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfU1BJMVJTVF9Qb3MpICAgICAgLyohPCBTUEkxIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBTUEkyX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfU1BJMlJTVF9Qb3MpICAgICAgLyohPCBTUEkyIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBVQVJUMF9SU1QgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVUFSVDBSU1RfUG9zKSAgICAgLyohPCBVQVJUMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVUFSVDFfUlNUICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1VBUlQxUlNUX1BvcykgICAgIC8qITwgVUFSVDEgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFVBUlQyX1JTVCAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9VQVJUMlJTVF9Qb3MpICAgICAvKiE8IFVBUlQyIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBVQVJUM19SU1QgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfVUFSVDNSU1RfUG9zKSAgICAgLyohPCBVQVJUMyByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVUFSVDRfUlNUICAgKCgweDRVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QxX1VBUlQ0UlNUX1BvcykgICAgIC8qITwgVUFSVDQgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFVBUlQ1X1JTVCAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9VQVJUNVJTVF9Qb3MpICAgICAvKiE8IFVBUlQ1IHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBDQU4wX1JTVCAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfQ0FOMFJTVF9Qb3MpICAgICAgLyohPCBDQU4wIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBPVEdfUlNUICAgICAoKDB4NFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDFfT1RHUlNUX1BvcykgICAgICAgLyohPCBPVEcgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFVTQkRfUlNUICAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9VU0JEUlNUX1BvcykgICAgICAvKiE8IFVTQkQgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEVBRENfUlNUICAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9FQURDUlNUX1BvcykgICAgICAvKiE8IEVBREMgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEkyUzBfUlNUICAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9JMlMwUlNUX1BvcykgICAgICAvKiE8IEkyUzAgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFRSTkdfUlNUICAgICgoMHg0VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMV9UUk5HUlNUX1BvcykgICAgICAvKiE8IFRSTkcgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisKKyNkZWZpbmUgU0MwX1JTVCAgICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX1NDMFJTVF9Qb3MpICAgICAgIC8qITwgU0MwIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBTQzFfUlNUICAgICAoKDB4OFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDJfU0MxUlNUX1BvcykgICAgICAgLyohPCBTQzEgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFNDMl9SU1QgICAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9TQzJSU1RfUG9zKSAgICAgICAvKiE8IFNDMiByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgU1BJM19SU1QgICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX1NQSTNSU1RfUG9zKSAgICAgIC8qITwgU1BJMyByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgVVNDSTBfUlNUICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX1VTQ0kwUlNUX1BvcykgICAgIC8qITwgVVNDSTAgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIFVTQ0kxX1JTVCAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9VU0NJMVJTVF9Qb3MpICAgICAvKiE8IFVTQ0kxIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBVU0NJMl9SU1QgICAoKDB4OFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDJfVVNDSTJSU1RfUG9zKSAgICAgLyohPCBVU0NJMiByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgREFDX1JTVCAgICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX0RBQ1JTVF9Qb3MpICAgICAgIC8qITwgREFDIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBFUFdNMF9SU1QgICAoKDB4OFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDJfRVBXTTBSU1RfUG9zKSAgICAgLyohPCBFUFdNMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgRVBXTTFfUlNUICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX0VQV00xUlNUX1BvcykgICAgIC8qITwgRVBXTTEgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEJQV00wX1JTVCAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9CUFdNMFJTVF9Qb3MpICAgICAvKiE8IEJQV00wIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBCUFdNMV9SU1QgICAoKDB4OFVMPDwyNCl8KHVpbnQzMl90KVNZU19JUFJTVDJfQlBXTTFSU1RfUG9zKSAgICAgLyohPCBCUFdNMSByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgUUVJMF9SU1QgICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX1FFSTBSU1RfUG9zKSAgICAgIC8qITwgUUVJMCByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgUUVJMV9SU1QgICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX1FFSTFSU1RfUG9zKSAgICAgIC8qITwgUUVJMSByZXNldCBpcyBvbmUgb2YgdGhlIFNZU19SZXNldE1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgRUNBUDBfUlNUICAgKCgweDhVTDw8MjQpfCh1aW50MzJfdClTWVNfSVBSU1QyX0VDQVAwUlNUX1BvcykgICAgIC8qITwgRUNBUDAgcmVzZXQgaXMgb25lIG9mIHRoZSBTWVNfUmVzZXRNb2R1bGUgcGFyYW1ldGVyICovCisjZGVmaW5lIEVDQVAxX1JTVCAgICgoMHg4VUw8PDI0KXwodWludDMyX3QpU1lTX0lQUlNUMl9FQ0FQMVJTVF9Qb3MpICAgICAvKiE8IEVDQVAxIHJlc2V0IGlzIG9uZSBvZiB0aGUgU1lTX1Jlc2V0TW9kdWxlIHBhcmFtZXRlciAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBCcm93biBPdXQgRGV0ZWN0b3IgVGhyZXNob2xkIFZvbHRhZ2UgU2VsZWN0aW9uIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RfUlNUX0VOICAgICAgICAgICAoMVVMPDxTWVNfQk9EQ1RMX0JPRFJTVEVOX1BvcykgICAgLyohPCBCcm93bi1vdXQgUmVzZXQgRW5hYmxlICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EX0lOVEVSUlVQVF9FTiAgICAgKDBVTDw8U1lTX0JPRENUTF9CT0RSU1RFTl9Qb3MpICAgIC8qITwgQnJvd24tb3V0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RWTF8zXzBWICAgICAgICAgICAoN1VMPDxTWVNfQk9EQ1RMX0JPRFZMX1BvcykgICAgICAgLyohPCBTZXR0aW5nIEJyb3duIE91dCBEZXRlY3RvciBUaHJlc2hvbGQgVm9sdGFnZSBhcyAzLjBWICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EVkxfMl84ViAgICAgICAgICAgKDZVTDw8U1lTX0JPRENUTF9CT0RWTF9Qb3MpICAgICAgIC8qITwgU2V0dGluZyBCcm93biBPdXQgRGV0ZWN0b3IgVGhyZXNob2xkIFZvbHRhZ2UgYXMgMi44ViAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRFZMXzJfNlYgICAgICAgICAgICg1VUw8PFNZU19CT0RDVExfQk9EVkxfUG9zKSAgICAgICAvKiE8IFNldHRpbmcgQnJvd24gT3V0IERldGVjdG9yIFRocmVzaG9sZCBWb2x0YWdlIGFzIDIuNlYgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RWTF8yXzRWICAgICAgICAgICAoNFVMPDxTWVNfQk9EQ1RMX0JPRFZMX1BvcykgICAgICAgLyohPCBTZXR0aW5nIEJyb3duIE91dCBEZXRlY3RvciBUaHJlc2hvbGQgVm9sdGFnZSBhcyAyLjRWICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EVkxfMl8yViAgICAgICAgICAgKDNVTDw8U1lTX0JPRENUTF9CT0RWTF9Qb3MpICAgICAgIC8qITwgU2V0dGluZyBCcm93biBPdXQgRGV0ZWN0b3IgVGhyZXNob2xkIFZvbHRhZ2UgYXMgMi4yViAqLworI2RlZmluZSBTWVNfQk9EQ1RMX0JPRFZMXzJfMFYgICAgICAgICAgICgyVUw8PFNZU19CT0RDVExfQk9EVkxfUG9zKSAgICAgICAvKiE8IFNldHRpbmcgQnJvd24gT3V0IERldGVjdG9yIFRocmVzaG9sZCBWb2x0YWdlIGFzIDIuMFYgKi8KKyNkZWZpbmUgU1lTX0JPRENUTF9CT0RWTF8xXzhWICAgICAgICAgICAoMVVMPDxTWVNfQk9EQ1RMX0JPRFZMX1BvcykgICAgICAgLyohPCBTZXR0aW5nIEJyb3duIE91dCBEZXRlY3RvciBUaHJlc2hvbGQgVm9sdGFnZSBhcyAxLjhWICovCisjZGVmaW5lIFNZU19CT0RDVExfQk9EVkxfMV82ViAgICAgICAgICAgKDBVTDw8U1lTX0JPRENUTF9CT0RWTF9Qb3MpICAgICAgIC8qITwgU2V0dGluZyBCcm93biBPdXQgRGV0ZWN0b3IgVGhyZXNob2xkIFZvbHRhZ2UgYXMgMS42ViAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBWUkVGQ1RMIGNvbnN0YW50IGRlZmluaXRpb25zLiAoV3JpdGUtUHJvdGVjdGlvbiBSZWdpc3RlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1lTX1ZSRUZDVExfVlJFRl9QSU4gICAgICAgICgweDBVTDw8U1lTX1ZSRUZDVExfVlJFRkNUTF9Qb3MpICAgIC8qITwgVnJlZiA9IFZyZWYgcGluICovCisjZGVmaW5lIFNZU19WUkVGQ1RMX1ZSRUZfMV82ViAgICAgICAoMHgzVUw8PFNZU19WUkVGQ1RMX1ZSRUZDVExfUG9zKSAgICAvKiE8IFZyZWYgPSAxLjZWICovCisjZGVmaW5lIFNZU19WUkVGQ1RMX1ZSRUZfMl8wViAgICAgICAoMHg3VUw8PFNZU19WUkVGQ1RMX1ZSRUZDVExfUG9zKSAgICAvKiE8IFZyZWYgPSAyLjBWICovCisjZGVmaW5lIFNZU19WUkVGQ1RMX1ZSRUZfMl81ViAgICAgICAoMHhCVUw8PFNZU19WUkVGQ1RMX1ZSRUZDVExfUG9zKSAgICAvKiE8IFZyZWYgPSAyLjVWICovCisjZGVmaW5lIFNZU19WUkVGQ1RMX1ZSRUZfM18wViAgICAgICAoMHhGVUw8PFNZU19WUkVGQ1RMX1ZSRUZDVExfUG9zKSAgICAvKiE8IFZyZWYgPSAzLjBWICovCisjZGVmaW5lIFNZU19WUkVGQ1RMX1ZSRUZfQVZERCAgICAgICAoMHgxMFVMPDxTWVNfVlJFRkNUTF9WUkVGQ1RMX1BvcykgICAvKiE8IFZyZWYgPSBBVkREICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFVTQlBIWSBjb25zdGFudCBkZWZpbml0aW9ucy4gKFdyaXRlLVByb3RlY3Rpb24gUmVnaXN0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTWVNfVVNCUEhZX1VTQlJPTEVfU1REX1VTQkQgICAoMHgwVUw8PFNZU19VU0JQSFlfVVNCUk9MRV9Qb3MpICAgLyohPCBTdGFuZGFyZCBVU0IgZGV2aWNlICovCisjZGVmaW5lIFNZU19VU0JQSFlfVVNCUk9MRV9TVERfVVNCSCAgICgweDFVTDw8U1lTX1VTQlBIWV9VU0JST0xFX1BvcykgICAvKiE8IFN0YW5kYXJkIFVTQiBob3N0ICovCisjZGVmaW5lIFNZU19VU0JQSFlfVVNCUk9MRV9JRF9ERVBIICAgICgweDJVTDw8U1lTX1VTQlBIWV9VU0JST0xFX1BvcykgICAvKiE8IElEIGRlcGVuZGVudCBkZXZpY2UgKi8KKyNkZWZpbmUgU1lTX1VTQlBIWV9VU0JST0xFX09OX1RIRV9HTyAgKDB4M1VMPDxTWVNfVVNCUEhZX1VTQlJPTEVfUG9zKSAgIC8qITwgT24tVGhlLUdvIGRldmljZSAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBQTENUTCBjb25zdGFudCBkZWZpbml0aW9ucy4gKFdyaXRlLVByb3RlY3Rpb24gUmVnaXN0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1lTX1BMQ1RMX1BMU0VMX1BMMCAgICAgKDB4MFVMPDxTWVNfUExDVExfUExTRUxfUG9zKSAgIC8qITwgU2V0IHBvd2VyIGxldmVsIHRvIHBvd2VyIGxldmVsIDAgKi8KKyNkZWZpbmUgU1lTX1BMQ1RMX1BMU0VMX1BMMSAgICAgKDB4MVVMPDxTWVNfUExDVExfUExTRUxfUG9zKSAgIC8qITwgU2V0IHBvd2VyIGxldmVsIHRvIHBvd2VyIGxldmVsIDEgKi8KKyNkZWZpbmUgU1lTX1BMQ1RMX01WUlNfTERPICAgICAgKDB4MFVMPDxTWVNfUExDVExfTVZSU19Qb3MpICAgIC8qITwgU2V0IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSB0byBMRE8gKi8KKyNkZWZpbmUgU1lTX1BMQ1RMX01WUlNfRENEQyAgICAgKDB4MVVMPDxTWVNfUExDVExfTVZSU19Qb3MpICAgIC8qITwgU2V0IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSB0byBEQ0RDICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFBMU1RTIGNvbnN0YW50IGRlZmluaXRpb25zLiAoV3JpdGUtUHJvdGVjdGlvbiBSZWdpc3RlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTWVNfUExTVFNfUExTVEFUVVNfUEwwICAoMHgwVUw8PFNZU19QTFNUU19QTFNUQVRVU19Qb3MpIC8qITwgUG93ZXIgbGV2ZWwgaXMgcG93ZXIgbGV2ZWwgMCAqLworI2RlZmluZSBTWVNfUExTVFNfUExTVEFUVVNfUEwxICAoMHgxVUw8PFNZU19QTFNUU19QTFNUQVRVU19Qb3MpIC8qITwgUG93ZXIgbGV2ZWwgaXMgcG93ZXIgbGV2ZWwgMSAqLworI2RlZmluZSBTWVNfUExTVFNfQ1VSTVZSX0xETyAgICAoMHgwVUw8PFNZU19QTFNUU19DVVJNVlJfUG9zKSAgIC8qITwgTWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGlzIExETyAqLworI2RlZmluZSBTWVNfUExTVFNfQ1VSTVZSX0RDREMgICAoMHgxVUw8PFNZU19QTFNUU19DVVJNVlJfUG9zKSAgIC8qITwgTWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGlzIERDREMgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgU1JBTVBDVEwgY29uc3RhbnQgZGVmaW5pdGlvbnMuIChXcml0ZS1Qcm90ZWN0aW9uIFJlZ2lzdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNZU19TUkFNUENUTF9TUkFNX05PUk1BTCAgICAgICAgICAweDBVTCAgIC8qITwgU2VsZWN0IHN5c3RlbSBTUkFNIHBvd2VyIG1vZGUgdG8gbm9ybWFsIG1vZGUgKi8KKyNkZWZpbmUgU1lTX1NSQU1QQ1RMX1NSQU1fUkVURU5USU9OICAgICAgIDB4MVVMICAgLyohPCBTZWxlY3Qgc3lzdGVtIFNSQU0gcG93ZXIgbW9kZSB0byByZXRlbnRpb24gbW9kZSAqLworI2RlZmluZSBTWVNfU1JBTVBDVExfU1JBTV9QT1dFUl9TSFVUX0RPV04gMHgyVUwgICAvKiE8IFNlbGVjdCBzeXN0ZW0gU1JBTSBwb3dlciBtb2RlIHRvIHBvd2VyIHNodXQgZG93biBtb2RlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBTUkFNUFBDVEwgY29uc3RhbnQgZGVmaW5pdGlvbnMuIChXcml0ZS1Qcm90ZWN0aW9uIFJlZ2lzdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1lTX1NSQU1QUENUX1NSQU1fTk9STUFMICAgICAgICAgIDB4MFVMICAgLyohPCBTZWxlY3QgcGVyaXBoZXJhbCBTUkFNIHBvd2VyIG1vZGUgdG8gbm9ybWFsIG1vZGUgKi8KKyNkZWZpbmUgU1lTX1NSQU1QUENUX1NSQU1fUkVURU5USU9OICAgICAgIDB4MVVMICAgLyohPCBTZWxlY3QgcGVyaXBoZXJhbCBTUkFNIHBvd2VyIG1vZGUgdG8gcmV0ZW50aW9uIG1vZGUgKi8KKyNkZWZpbmUgU1lTX1NSQU1QUENUX1NSQU1fUE9XRVJfU0hVVF9ET1dOIDB4MlVMICAgLyohPCBTZWxlY3QgcGVyaXBoZXJhbCBTUkFNIHBvd2VyIG1vZGUgdG8gcG93ZXIgc2h1dCBkb3duIG1vZGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE11bHRpLUZ1bmN0aW9uIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBIb3cgdG8gdXNlIGJlbG93ICNkZWZpbmU/CisKK0V4YW1wbGU6IElmIHVzZXIgd2FudCB0byBzZXQgUEEuMSBhcyBVQVJUMF9UWEQgYW5kIFBBLjAgYXMgVUFSVDBfUlhEIGluIGluaXRpYWwgZnVuY3Rpb24sCisgICAgICAgICB1c2VyIGNhbiBpc3N1ZSBmb2xsb3dpbmcgY29tbWFuZCB0byBhY2hpZXZlIGl0LgorCisgICAgU1lTLT5HUEFfTUZQTCA9IChTWVMtPkdQQV9NRlBMICYgKH5TWVNfR1BBX01GUExfUEEwTUZQX01zaykpIHwgU1lTX0dQQV9NRlBMX1BBME1GUF9VQVJUMF9SWEQ7CisgICAgU1lTLT5HUEFfTUZQTCA9IChTWVMtPkdQQV9NRlBMICYgKH5TWVNfR1BBX01GUExfUEExTUZQX01zaykpIHwgU1lTX0dQQV9NRlBMX1BBMU1GUF9VQVJUMF9UWEQ7CisqLworCisvKiBQQS4wIE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEwTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUExfUEEwTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBME1GUF9RU1BJMF9NT1NJMCAgKDB4MDNVTDw8U1lTX0dQQV9NRlBMX1BBME1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIFFTUEkwX01PU0kwICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTBNRlBfU1BJMF9NT1NJICAgICgweDA0VUw8PFNZU19HUEFfTUZQTF9QQTBNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBTUEkwX01PU0kgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEwTUZQX1NDMF9DTEsgICAgICAoMHgwNlVMPDxTWVNfR1BBX01GUExfUEEwTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgU0MwX0NMSyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBME1GUF9VQVJUMF9SWEQgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBMX1BBME1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIFVBUlQwX1JYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTBNRlBfVUFSVDFfblJUUyAgICgweDA4VUw8PFNZU19HUEFfTUZQTF9QQTBNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBVQVJUMV9uUlRTICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEwTUZQX0kyQzJfU0RBICAgICAoMHgwOVVMPDxTWVNfR1BBX01GUExfUEEwTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgSTJDMl9TREEgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBME1GUF9CUFdNMF9DSDAgICAgKDB4MGNVTDw8U1lTX0dQQV9NRlBMX1BBME1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIEJQV00wX0NIMCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTBNRlBfRVBXTTBfQ0g1ICAgICgweDBkVUw8PFNZU19HUEFfTUZQTF9QQTBNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBFUFdNMF9DSDUgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEwTUZQX0RBQzBfU1QgICAgICAoMHgwZlVMPDxTWVNfR1BBX01GUExfUEEwTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgREFDMF9TVCAgICAgKi8KKworLyogUEEuMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBMX1BBMU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTFNRlBfUVNQSTBfTUlTTzAgICgweDAzVUw8PFNZU19HUEFfTUZQTF9QQTFNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBRU1BJMF9NSVNPMCAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEExTUZQX1NQSTBfTUlTTyAgICAoMHgwNFVMPDxTWVNfR1BBX01GUExfUEExTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgU1BJMF9NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMU1GUF9TQzBfREFUICAgICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBMX1BBMU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIFNDMF9EQVQgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTFNRlBfVUFSVDBfVFhEICAgICgweDA3VUw8PFNZU19HUEFfTUZQTF9QQTFNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBVQVJUMF9UWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEExTUZQX1VBUlQxX25DVFMgICAoMHgwOFVMPDxTWVNfR1BBX01GUExfUEExTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgVUFSVDFfbkNUUyAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMU1GUF9JMkMyX1NDTCAgICAgKDB4MDlVTDw8U1lTX0dQQV9NRlBMX1BBMU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIEkyQzJfU0NMICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTFNRlBfQlBXTTBfQ0gxICAgICgweDBjVUw8PFNZU19HUEFfTUZQTF9QQTFNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBCUFdNMF9DSDEgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEExTUZQX0VQV00wX0NINCAgICAoMHgwZFVMPDxTWVNfR1BBX01GUExfUEExTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgRVBXTTBfQ0g0ICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMU1GUF9EQUMxX1NUICAgICAgKDB4MGZVTDw8U1lTX0dQQV9NRlBMX1BBMU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIERBQzFfU1QgICAgICovCisKKy8qIFBBLjIgTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTJNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQTF9QQTJNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEyTUZQX1FTUEkwX0NMSyAgICAoMHgwM1VMPDxTWVNfR1BBX01GUExfUEEyTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgUVNQSTBfQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMk1GUF9TUEkwX0NMSyAgICAgKDB4MDRVTDw8U1lTX0dQQV9NRlBMX1BBMk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIFNQSTBfQ0xLICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTJNRlBfU0MwX1JTVCAgICAgICgweDA2VUw8PFNZU19HUEFfTUZQTF9QQTJNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBTQzBfUlNUICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEyTUZQX1VBUlQ0X1JYRCAgICAoMHgwN1VMPDxTWVNfR1BBX01GUExfUEEyTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgVUFSVDRfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMk1GUF9VQVJUMV9SWEQgICAgKDB4MDhVTDw8U1lTX0dQQV9NRlBMX1BBMk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIFVBUlQxX1JYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTJNRlBfSTJDMV9TREEgICAgICgweDA5VUw8PFNZU19HUEFfTUZQTF9QQTJNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBJMkMxX1NEQSAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEyTUZQX0JQV00wX0NIMiAgICAoMHgwY1VMPDxTWVNfR1BBX01GUExfUEEyTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgQlBXTTBfQ0gyICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBMk1GUF9FUFdNMF9DSDMgICAgKDB4MGRVTDw8U1lTX0dQQV9NRlBMX1BBMk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIEVQV00wX0NIMyAgICovCisKKy8qIFBBLjMgTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTNNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQTF9QQTNNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEzTUZQX1FTUEkwX1NTICAgICAoMHgwM1VMPDxTWVNfR1BBX01GUExfUEEzTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgUVNQSTBfU1MgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBM01GUF9TUEkwX1NTICAgICAgKDB4MDRVTDw8U1lTX0dQQV9NRlBMX1BBM01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIFNQSTBfU1MgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTNNRlBfU0MwX1BXUiAgICAgICgweDA2VUw8PFNZU19HUEFfTUZQTF9QQTNNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBTQzBfUFdSICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEzTUZQX1VBUlQ0X1RYRCAgICAoMHgwN1VMPDxTWVNfR1BBX01GUExfUEEzTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgVUFSVDRfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBM01GUF9VQVJUMV9UWEQgICAgKDB4MDhVTDw8U1lTX0dQQV9NRlBMX1BBM01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIFVBUlQxX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTNNRlBfSTJDMV9TQ0wgICAgICgweDA5VUw8PFNZU19HUEFfTUZQTF9QQTNNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBJMkMxX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEEzTUZQX0JQV00wX0NIMyAgICAoMHgwY1VMPDxTWVNfR1BBX01GUExfUEEzTUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgQlBXTTBfQ0gzICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBM01GUF9FUFdNMF9DSDIgICAgKDB4MGRVTDw8U1lTX0dQQV9NRlBMX1BBM01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIEVQV00wX0NIMiAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTNNRlBfUUVJMF9CICAgICAgICgweDBlVUw8PFNZU19HUEFfTUZQTF9QQTNNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBRRUkwX0IgICAgICAqLworCisvKiBQQS40IE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE0TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUExfUEE0TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNE1GUF9RU1BJMF9NT1NJMSAgKDB4MDNVTDw8U1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIFFTUEkwX01PU0kxICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTRNRlBfU1BJMF9JMlNNQ0xLICgweDA0VUw8PFNZU19HUEFfTUZQTF9QQTRNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBTUEkwX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE0TUZQX1NDMF9uQ0QgICAgICAoMHgwNlVMPDxTWVNfR1BBX01GUExfUEE0TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgU0MwX25DRCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNE1GUF9VQVJUMF9uUlRTICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIFVBUlQwX25SVFMgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTRNRlBfVUFSVDVfUlhEICAgICgweDA4VUw8PFNZU19HUEFfTUZQTF9QQTRNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBVQVJUNV9SWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE0TUZQX0kyQzBfU0RBICAgICAoMHgwOVVMPDxTWVNfR1BBX01GUExfUEE0TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgSTJDMF9TREEgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNE1GUF9DQU4wX1JYRCAgICAgKDB4MGFVTDw8U1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIENBTjBfUlhEICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTRNRlBfQlBXTTBfQ0g0ICAgICgweDBjVUw8PFNZU19HUEFfTUZQTF9QQTRNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBCUFdNMF9DSDQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE0TUZQX0VQV00wX0NIMSAgICAoMHgwZFVMPDxTWVNfR1BBX01GUExfUEE0TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgRVBXTTBfQ0gxICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNE1GUF9RRUkwX0EgICAgICAgKDB4MGVVTDw8U1lTX0dQQV9NRlBMX1BBNE1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIFFFSTBfQSAgICAgICovCisKKy8qIFBBLjUgTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTVNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQTF9QQTVNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX1FTUEkwX01JU08xICAoMHgwM1VMPDxTWVNfR1BBX01GUExfUEE1TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgUVNQSTBfTUlTTzEgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNU1GUF9TUEkxX0kyU01DTEsgKDB4MDRVTDw8U1lTX0dQQV9NRlBMX1BBNU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIFNQSTFfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTVNRlBfU0MyX25DRCAgICAgICgweDA2VUw8PFNZU19HUEFfTUZQTF9QQTVNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBTQzJfbkNEICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX1VBUlQwX25DVFMgICAoMHgwN1VMPDxTWVNfR1BBX01GUExfUEE1TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgVUFSVDBfbkNUUyAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNU1GUF9VQVJUNV9UWEQgICAgKDB4MDhVTDw8U1lTX0dQQV9NRlBMX1BBNU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIFVBUlQ1X1RYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTVNRlBfSTJDMF9TQ0wgICAgICgweDA5VUw8PFNZU19HUEFfTUZQTF9QQTVNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBJMkMwX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX0NBTjBfVFhEICAgICAoMHgwYVVMPDxTWVNfR1BBX01GUExfUEE1TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgQ0FOMF9UWEQgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNU1GUF9CUFdNMF9DSDUgICAgKDB4MGNVTDw8U1lTX0dQQV9NRlBMX1BBNU1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIEJQV00wX0NINSAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTVNRlBfRVBXTTBfQ0gwICAgICgweDBkVUw8PFNZU19HUEFfTUZQTF9QQTVNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBFUFdNMF9DSDAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE1TUZQX1FFSTBfSU5ERVggICAoMHgwZVVMPDxTWVNfR1BBX01GUExfUEE1TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgUUVJMF9JTkRFWCAgKi8KKworLyogUEEuNiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNk1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBMX1BBNk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTZNRlBfRUJJX0FENiAgICAgICgweDAyVUw8PFNZU19HUEFfTUZQTF9QQTZNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBFQklfQUQ2ICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE2TUZQX1NQSTFfU1MgICAgICAoMHgwNFVMPDxTWVNfR1BBX01GUExfUEE2TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgU1BJMV9TUyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNk1GUF9TQzJfQ0xLICAgICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBMX1BBNk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIFNDMl9DTEsgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTZNRlBfVUFSVDBfUlhEICAgICgweDA3VUw8PFNZU19HUEFfTUZQTF9QQTZNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBVQVJUMF9SWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE2TUZQX0kyQzFfU0RBICAgICAoMHgwOFVMPDxTWVNfR1BBX01GUExfUEE2TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgSTJDMV9TREEgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNk1GUF9FUFdNMV9DSDUgICAgKDB4MGJVTDw8U1lTX0dQQV9NRlBMX1BBNk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIEVQV00xX0NINSAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTZNRlBfQlBXTTFfQ0gzICAgICgweDBjVUw8PFNZU19HUEFfTUZQTF9QQTZNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBCUFdNMV9DSDMgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE2TUZQX0FDTVAxX1dMQVQgICAoMHgwZFVMPDxTWVNfR1BBX01GUExfUEE2TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgQUNNUDFfV0xBVCAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBNk1GUF9UTTMgICAgICAgICAgKDB4MGVVTDw8U1lTX0dQQV9NRlBMX1BBNk1GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIFRNMyAgICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTZNRlBfSU5UMCAgICAgICAgICgweDBmVUw8PFNZU19HUEFfTUZQTF9QQTZNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBJTlQwICAgICAgICAqLworCisvKiBQQS43IE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE3TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUExfUEE3TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBN01GUF9FQklfQUQ3ICAgICAgKDB4MDJVTDw8U1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIEVCSV9BRDcgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTdNRlBfU1BJMV9DTEsgICAgICgweDA0VUw8PFNZU19HUEFfTUZQTF9QQTdNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBTUEkxX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE3TUZQX1NDMl9EQVQgICAgICAoMHgwNlVMPDxTWVNfR1BBX01GUExfUEE3TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgU0MyX0RBVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBN01GUF9VQVJUMF9UWEQgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIFVBUlQwX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTdNRlBfSTJDMV9TQ0wgICAgICgweDA4VUw8PFNZU19HUEFfTUZQTF9QQTdNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBJMkMxX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE3TUZQX0VQV00xX0NINCAgICAoMHgwYlVMPDxTWVNfR1BBX01GUExfUEE3TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgRVBXTTFfQ0g0ICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBN01GUF9CUFdNMV9DSDIgICAgKDB4MGNVTDw8U1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIEJQV00xX0NIMiAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQTF9QQTdNRlBfQUNNUDBfV0xBVCAgICgweDBkVUw8PFNZU19HUEFfTUZQTF9QQTdNRlBfUG9zKSAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBBQ01QMF9XTEFUICAqLworI2RlZmluZSBTWVNfR1BBX01GUExfUEE3TUZQX1RNMiAgICAgICAgICAoMHgwZVVMPDxTWVNfR1BBX01GUExfUEE3TUZQX1BvcykgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgVE0yICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBMX1BBN01GUF9JTlQxICAgICAgICAgKDB4MGZVTDw8U1lTX0dQQV9NRlBMX1BBN01GUF9Qb3MpIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIElOVDEgICAgICAgICovCisKKy8qIFBBLjggTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQThNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQSF9QQThNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX0VCSV9BTEUgICAgICAoMHgwMlVMPDxTWVNfR1BBX01GUEhfUEE4TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgRUJJX0FMRSAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOE1GUF9TQzJfQ0xLICAgICAgKDB4MDNVTDw8U1lTX0dQQV9NRlBIX1BBOE1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIFNDMl9DTEsgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQThNRlBfU1BJMl9NT1NJICAgICgweDA0VUw8PFNZU19HUEFfTUZQSF9QQThNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBTUEkyX01PU0kgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX1VTQ0kwX0NUTDEgICAoMHgwNlVMPDxTWVNfR1BBX01GUEhfUEE4TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgVVNDSTBfQ1RMMSAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOE1GUF9VQVJUMV9SWEQgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBIX1BBOE1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIFVBUlQxX1JYRCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQThNRlBfQlBXTTBfQ0gzICAgICgweDA5VUw8PFNZU19HUEFfTUZQSF9QQThNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBCUFdNMF9DSDMgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX1FFSTFfQiAgICAgICAoMHgwYVVMPDxTWVNfR1BBX01GUEhfUEE4TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgUUVJMV9CICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOE1GUF9FQ0FQMF9JQzIgICAgKDB4MGJVTDw8U1lTX0dQQV9NRlBIX1BBOE1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIEVDQVAwX0lDMiAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQThNRlBfVE0zX0VYVCAgICAgICgweDBkVUw8PFNZU19HUEFfTUZQSF9QQThNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBUTTNfRVhUICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE4TUZQX0lOVDQgICAgICAgICAoMHgwZlVMPDxTWVNfR1BBX01GUEhfUEE4TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgSU5UNCAgICAgICAgKi8KKworLyogUEEuOSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBIX1BBOU1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTlNRlBfRUJJX01DTEsgICAgICgweDAyVUw8PFNZU19HUEFfTUZQSF9QQTlNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBFQklfTUNMSyAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE5TUZQX1NDMl9EQVQgICAgICAoMHgwM1VMPDxTWVNfR1BBX01GUEhfUEE5TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgU0MyX0RBVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOU1GUF9TUEkyX01JU08gICAgKDB4MDRVTDw8U1lTX0dQQV9NRlBIX1BBOU1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIFNQSTJfTUlTTyAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTlNRlBfVVNDSTBfREFUMSAgICgweDA2VUw8PFNZU19HUEFfTUZQSF9QQTlNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBVU0NJMF9EQVQxICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE5TUZQX1VBUlQxX1RYRCAgICAoMHgwN1VMPDxTWVNfR1BBX01GUEhfUEE5TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgVUFSVDFfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOU1GUF9CUFdNMF9DSDIgICAgKDB4MDlVTDw8U1lTX0dQQV9NRlBIX1BBOU1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIEJQV00wX0NIMiAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTlNRlBfUUVJMV9BICAgICAgICgweDBhVUw8PFNZU19HUEFfTUZQSF9QQTlNRlBfUG9zKSAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBRRUkxX0EgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEE5TUZQX0VDQVAwX0lDMSAgICAoMHgwYlVMPDxTWVNfR1BBX01GUEhfUEE5TUZQX1BvcykgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgRUNBUDBfSUMxICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBOU1GUF9UTTJfRVhUICAgICAgKDB4MGRVTDw8U1lTX0dQQV9NRlBIX1BBOU1GUF9Qb3MpIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIFRNMl9FWFQgICAgICovCisKKy8qIFBBLjEwIE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExME1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUEhfUEExME1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTBNRlBfQUNNUDFfUDAgICAgKDB4MDFVTDw8U1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBBQ01QMV9QMCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX0VCSV9uV1IgICAgICgweDAyVUw8PFNZU19HUEFfTUZQSF9QQTEwTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgRUJJX25XUiAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExME1GUF9TQzJfUlNUICAgICAoMHgwM1VMPDxTWVNfR1BBX01GUEhfUEExME1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIFNDMl9SU1QgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTBNRlBfU1BJMl9DTEsgICAgKDB4MDRVTDw8U1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBTUEkyX0NMSyAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX1VTQ0kwX0RBVDAgICgweDA2VUw8PFNZU19HUEFfTUZQSF9QQTEwTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgVVNDSTBfREFUMCAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExME1GUF9JMkMyX1NEQSAgICAoMHgwN1VMPDxTWVNfR1BBX01GUEhfUEExME1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIEkyQzJfU0RBICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTBNRlBfQlBXTTBfQ0gxICAgKDB4MDlVTDw8U1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBCUFdNMF9DSDEgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX1FFSTFfSU5ERVggICgweDBhVUw8PFNZU19HUEFfTUZQSF9QQTEwTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgUUVJMV9JTkRFWCAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExME1GUF9FQ0FQMF9JQzAgICAoMHgwYlVMPDxTWVNfR1BBX01GUEhfUEExME1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIEVDQVAwX0lDMCAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTBNRlBfVE0xX0VYVCAgICAgKDB4MGRVTDw8U1lTX0dQQV9NRlBIX1BBMTBNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBUTTFfRVhUICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEwTUZQX0RBQzBfU1QgICAgICgweDBlVUw8PFNZU19HUEFfTUZQSF9QQTEwTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgREFDMF9TVCAgICAqLworCisvKiBQQS4xMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTFNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBIX1BBMTFNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTExTUZQX0FDTVAwX1AwICAgICgweDAxVUw8PFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgQUNNUDBfUDAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMU1GUF9FQklfblJEICAgICAoMHgwMlVMPDxTWVNfR1BBX01GUEhfUEExMU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIEVCSV9uUkQgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTFNRlBfU0MyX1BXUiAgICAgKDB4MDNVTDw8U1lTX0dQQV9NRlBIX1BBMTFNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBTQzJfUFdSICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTExTUZQX1NQSTJfU1MgICAgICgweDA0VUw8PFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgU1BJMl9TUyAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMU1GUF9VU0NJMF9DTEsgICAoMHgwNlVMPDxTWVNfR1BBX01GUEhfUEExMU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIFVTQ0kwX0NMSyAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTFNRlBfSTJDMl9TQ0wgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBIX1BBMTFNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBJMkMyX1NDTCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTExTUZQX0JQV00wX0NIMCAgICgweDA5VUw8PFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgQlBXTTBfQ0gwICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMU1GUF9FUFdNMF9TWU5DX09VVCAoMHgwYVVMPDxTWVNfR1BBX01GUEhfUEExMU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIEVQV00wX1NZTkNfT1VUKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTFNRlBfVE0wX0VYVCAgICAgKDB4MGRVTDw8U1lTX0dQQV9NRlBIX1BBMTFNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBUTTBfRVhUICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTExTUZQX0RBQzFfU1QgICAgICgweDBlVUw8PFNZU19HUEFfTUZQSF9QQTExTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgREFDMV9TVCAgICAqLworCisvKiBQQS4xMiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTJNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQV9NRlBIX1BBMTJNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEyTUZQX0kyUzBfQkNMSyAgICgweDAyVUw8PFNZU19HUEFfTUZQSF9QQTEyTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgSTJTMF9CQ0xLICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMk1GUF9VQVJUNF9UWEQgICAoMHgwM1VMPDxTWVNfR1BBX01GUEhfUEExMk1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIFVBUlQ0X1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTJNRlBfSTJDMV9TQ0wgICAgKDB4MDRVTDw8U1lTX0dQQV9NRlBIX1BBMTJNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBJMkMxX1NDTCAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEyTUZQX1NQSTJfU1MgICAgICgweDA1VUw8PFNZU19HUEFfTUZQSF9QQTEyTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgU1BJMl9TUyAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMk1GUF9DQU4wX1RYRCAgICAoMHgwNlVMPDxTWVNfR1BBX01GUEhfUEExMk1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIENBTjBfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTJNRlBfU0MyX1BXUiAgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBIX1BBMTJNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBTQzJfUFdSICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEyTUZQX0JQV00xX0NIMiAgICgweDBiVUw8PFNZU19HUEFfTUZQSF9QQTEyTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgQlBXTTFfQ0gyICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExMk1GUF9RRUkxX0lOREVYICAoMHgwY1VMPDxTWVNfR1BBX01GUEhfUEExMk1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIFFFSTFfSU5ERVggKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTJNRlBfVVNCX1ZCVVMgICAgKDB4MGVVTDw8U1lTX0dQQV9NRlBIX1BBMTJNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBVU0JfVkJVUyAgICovCisKKy8qIFBBLjEzIE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExM01GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUEhfUEExM01GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTNNRlBfSTJTMF9NQ0xLICAgKDB4MDJVTDw8U1lTX0dQQV9NRlBIX1BBMTNNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBJMlMwX01DTEsgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEzTUZQX1VBUlQ0X1JYRCAgICgweDAzVUw8PFNZU19HUEFfTUZQSF9QQTEzTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgVUFSVDRfUlhEICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExM01GUF9JMkMxX1NEQSAgICAoMHgwNFVMPDxTWVNfR1BBX01GUEhfUEExM01GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIEkyQzFfU0RBICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTNNRlBfU1BJMl9DTEsgICAgKDB4MDVVTDw8U1lTX0dQQV9NRlBIX1BBMTNNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBTUEkyX0NMSyAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEzTUZQX0NBTjBfUlhEICAgICgweDA2VUw8PFNZU19HUEFfTUZQSF9QQTEzTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgQ0FOMF9SWEQgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExM01GUF9TQzJfUlNUICAgICAoMHgwN1VMPDxTWVNfR1BBX01GUEhfUEExM01GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIFNDMl9SU1QgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTNNRlBfQlBXTTFfQ0gzICAgKDB4MGJVTDw8U1lTX0dQQV9NRlBIX1BBMTNNRlBfUG9zKS8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBCUFdNMV9DSDMgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTEzTUZQX1FFSTFfQSAgICAgICgweDBjVUw8PFNZU19HUEFfTUZQSF9QQTEzTUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgUUVJMV9BICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExM01GUF9VU0JfRF9OICAgICAoMHgwZVVMPDxTWVNfR1BBX01GUEhfUEExM01GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIFVTQl9EX04gICAgKi8KKworLyogUEEuMTQgTUZQICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE0TUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEFfTUZQSF9QQTE0TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNE1GUF9JMlMwX0RJICAgICAoMHgwMlVMPDxTWVNfR1BBX01GUEhfUEExNE1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIEkyUzBfREkgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTRNRlBfVUFSVDBfVFhEICAgKDB4MDNVTDw8U1lTX0dQQV9NRlBIX1BBMTRNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBVQVJUMF9UWEQgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE0TUZQX1NQSTJfTUlTTyAgICgweDA1VUw8PFNZU19HUEFfTUZQSF9QQTE0TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgU1BJMl9NSVNPICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNE1GUF9JMkMyX1NDTCAgICAoMHgwNlVMPDxTWVNfR1BBX01GUEhfUEExNE1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIEkyQzJfU0NMICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTRNRlBfU0MyX0RBVCAgICAgKDB4MDdVTDw8U1lTX0dQQV9NRlBIX1BBMTRNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBTQzJfREFUICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE0TUZQX0JQV00xX0NINCAgICgweDBiVUw8PFNZU19HUEFfTUZQSF9QQTE0TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgQlBXTTFfQ0g0ICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNE1GUF9RRUkxX0IgICAgICAoMHgwY1VMPDxTWVNfR1BBX01GUEhfUEExNE1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIFFFSTFfQiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTRNRlBfVVNCX0RfUCAgICAgKDB4MGVVTDw8U1lTX0dQQV9NRlBIX1BBMTRNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBVU0JfRF9QICAgICovCisKKy8qIFBBLjE1IE1GUCAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNU1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BBX01GUEhfUEExNU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTVNRlBfSTJTMF9ETyAgICAgKDB4MDJVTDw8U1lTX0dQQV9NRlBIX1BBMTVNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBJMlMwX0RPICAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE1TUZQX1VBUlQwX1JYRCAgICgweDAzVUw8PFNZU19HUEFfTUZQSF9QQTE1TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgVUFSVDBfUlhEICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNU1GUF9TUEkyX01PU0kgICAoMHgwNVVMPDxTWVNfR1BBX01GUEhfUEExNU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIFNQSTJfTU9TSSAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTVNRlBfSTJDMl9TREEgICAgKDB4MDZVTDw8U1lTX0dQQV9NRlBIX1BBMTVNRlBfUG9zKS8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBJMkMyX1NEQSAgICovCisjZGVmaW5lIFNZU19HUEFfTUZQSF9QQTE1TUZQX1NDMl9DTEsgICAgICgweDA3VUw8PFNZU19HUEFfTUZQSF9QQTE1TUZQX1BvcykvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgU0MyX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNU1GUF9CUFdNMV9DSDUgICAoMHgwYlVMPDxTWVNfR1BBX01GUEhfUEExNU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIEJQV00xX0NINSAgKi8KKyNkZWZpbmUgU1lTX0dQQV9NRlBIX1BBMTVNRlBfRVBXTTBfU1lOQ19JTiAoMHgwY1VMPDxTWVNfR1BBX01GUEhfUEExNU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIEVQV00wX1NZTkNfSU4qLworI2RlZmluZSBTWVNfR1BBX01GUEhfUEExNU1GUF9VU0JfT1RHX0lEICAoMHgwZVVMPDxTWVNfR1BBX01GUEhfUEExNU1GUF9Qb3MpLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIFVTQl9PVEdfSUQgKi8KKworLyogUEIuMCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCME1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQl9NRlBMX1BCME1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjBNRlBfRUFEQzBfQ0gwICAgICgweDAxVUw8PFNZU19HUEJfTUZQTF9QQjBNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBFQURDMF9DSDAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIwTUZQX0VCSV9BRFI5ICAgICAoMHgwMlVMPDxTWVNfR1BCX01GUExfUEIwTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgRUJJX0FEUjkgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCME1GUF9TRDBfQ01EICAgICAgKDB4MDNVTDw8U1lTX0dQQl9NRlBMX1BCME1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIFNEMF9DTUQgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjBNRlBfVUFSVDJfUlhEICAgICgweDA3VUw8PFNZU19HUEJfTUZQTF9QQjBNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBVQVJUMl9SWEQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIwTUZQX1NQSTBfSTJTTUNMSyAoMHgwOFVMPDxTWVNfR1BCX01GUExfUEIwTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgU1BJMF9JMlNNQ0xLKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCME1GUF9JMkMxX1NEQSAgICAgKDB4MDlVTDw8U1lTX0dQQl9NRlBMX1BCME1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIEkyQzFfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjBNRlBfRVBXTTBfQ0g1ICAgICgweDBiVUw8PFNZU19HUEJfTUZQTF9QQjBNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBFUFdNMF9DSDUgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIwTUZQX0VQV00xX0NINSAgICAoMHgwY1VMPDxTWVNfR1BCX01GUExfUEIwTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgRVBXTTFfQ0g1ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCME1GUF9FUFdNMF9CUkFLRTEgKDB4MGRVTDw8U1lTX0dQQl9NRlBMX1BCME1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIEVQV00wX0JSQUtFMSovCisKKy8qIFBCLjEgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX0VBREMwX0NIMSAgICAoMHgwMVVMPDxTWVNfR1BCX01GUExfUEIxTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgRUFEQzBfQ0gxICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMU1GUF9FQklfQURSOCAgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBMX1BCMU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEVCSV9BRFI4ICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfU0QwX0NMSyAgICAgICgweDAzVUw8PFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBTRDBfQ0xLICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX1NQSTFfSTJTTUNMSyAoMHgwNVVMPDxTWVNfR1BCX01GUExfUEIxTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgU1BJMV9JMlNNQ0xLKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMU1GUF9TUEkzX0kyU01DTEsgKDB4MDZVTDw8U1lTX0dQQl9NRlBMX1BCMU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIFNQSTNfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfVUFSVDJfVFhEICAgICgweDA3VUw8PFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBVQVJUMl9UWEQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX1VTQ0kxX0NMSyAgICAoMHgwOFVMPDxTWVNfR1BCX01GUExfUEIxTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgVVNDSTFfQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMU1GUF9JMkMxX1NDTCAgICAgKDB4MDlVTDw8U1lTX0dQQl9NRlBMX1BCMU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEkyQzFfU0NMICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfSTJTMF9MUkNLICAgICgweDBhVUw8PFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBJMlMwX0xSQ0sgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIxTUZQX0VQV00wX0NINCAgICAoMHgwYlVMPDxTWVNfR1BCX01GUExfUEIxTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgRVBXTTBfQ0g0ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMU1GUF9FUFdNMV9DSDQgICAgKDB4MGNVTDw8U1lTX0dQQl9NRlBMX1BCMU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEVQV00xX0NINCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjFNRlBfRVBXTTBfQlJBS0UwICgweDBkVUw8PFNZU19HUEJfTUZQTF9QQjFNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBFUFdNMF9CUkFLRTAqLworCisvKiBQQi4yIE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9FQURDMF9DSDIgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIEVBREMwX0NIMiAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfQUNNUDBfUDEgICAgICgweDAxVUw8PFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBBQ01QMF9QMSAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX0VCSV9BRFIzICAgICAoMHgwMlVMPDxTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgRUJJX0FEUjMgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9TRDBfREFUMCAgICAgKDB4MDNVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIFNEMF9EQVQwICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfU1BJMV9TUyAgICAgICgweDA1VUw8PFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBTUEkxX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX1VBUlQxX1JYRCAgICAoMHgwNlVMPDxTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgVUFSVDFfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9VQVJUNV9uQ1RTICAgKDB4MDdVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIFVBUlQ1X25DVFMgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfVVNDSTFfREFUMCAgICgweDA4VUw8PFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBVU0NJMV9EQVQwICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX1NDMF9QV1IgICAgICAoMHgwOVVMPDxTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgU0MwX1BXUiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9JMlMwX0RPICAgICAgKDB4MGFVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIEkyUzBfRE8gICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjJNRlBfRVBXTTBfQ0gzICAgICgweDBiVUw8PFNZU19HUEJfTUZQTF9QQjJNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBFUFdNMF9DSDMgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIyTUZQX1RNMyAgICAgICAgICAoMHgwZVVMPDxTWVNfR1BCX01GUExfUEIyTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgVE0zICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCMk1GUF9JTlQzICAgICAgICAgKDB4MGZVTDw8U1lTX0dQQl9NRlBMX1BCMk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIElOVDMgICAgICAgICovCisKKy8qIFBCLjMgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX0VBREMwX0NIMyAgICAoMHgwMVVMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgRUFEQzBfQ0gzICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9BQ01QMF9OICAgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIEFDTVAwX04gICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfRUJJX0FEUjIgICAgICgweDAyVUw8PFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBFQklfQURSMiAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX1NEMF9EQVQxICAgICAoMHgwM1VMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgU0QwX0RBVDEgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9TUEkxX0NMSyAgICAgKDB4MDVVTDw8U1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFNQSTFfQ0xLICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfVUFSVDFfVFhEICAgICgweDA2VUw8PFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBVQVJUMV9UWEQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX1VBUlQ1X25SVFMgICAoMHgwN1VMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgVUFSVDVfblJUUyAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9VU0NJMV9EQVQxICAgKDB4MDhVTDw8U1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFVTQ0kxX0RBVDEgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfU0MwX1JTVCAgICAgICgweDA5VUw8PFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBTQzBfUlNUICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX0kyUzBfREkgICAgICAoMHgwYVVMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgSTJTMF9ESSAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCM01GUF9FUFdNMF9DSDIgICAgKDB4MGJVTDw8U1lTX0dQQl9NRlBMX1BCM01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIEVQV00wX0NIMiAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjNNRlBfVE0yICAgICAgICAgICgweDBlVUw8PFNZU19HUEJfTUZQTF9QQjNNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBUTTIgICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEIzTUZQX0lOVDIgICAgICAgICAoMHgwZlVMPDxTWVNfR1BCX01GUExfUEIzTUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgSU5UMiAgICAgICAgKi8KKworLyogUEIuNCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfRUFEQzBfQ0g0ICAgICgweDAxVUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBFQURDMF9DSDQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX0FDTVAxX1AxICAgICAoMHgwMVVMPDxTWVNfR1BCX01GUExfUEI0TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgQUNNUDFfUDEgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9FQklfQURSMSAgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEVCSV9BRFIxICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfU0QwX0RBVDIgICAgICgweDAzVUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBTRDBfREFUMiAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX1NQSTFfTU9TSSAgICAoMHgwNVVMPDxTWVNfR1BCX01GUExfUEI0TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgU1BJMV9NT1NJICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9JMkMwX1NEQSAgICAgKDB4MDZVTDw8U1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEkyQzBfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfVUFSVDVfUlhEICAgICgweDA3VUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBVQVJUNV9SWEQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX1VTQ0kxX0NUTDEgICAoMHgwOFVMPDxTWVNfR1BCX01GUExfUEI0TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMSAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9TQzBfREFUICAgICAgKDB4MDlVTDw8U1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIFNDMF9EQVQgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfSTJTMF9NQ0xLICAgICgweDBhVUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBJMlMwX01DTEsgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI0TUZQX0VQV00wX0NIMSAgICAoMHgwYlVMPDxTWVNfR1BCX01GUExfUEI0TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgRVBXTTBfQ0gxICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNE1GUF9UTTEgICAgICAgICAgKDB4MGVVTDw8U1lTX0dQQl9NRlBMX1BCNE1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIFRNMSAgICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjRNRlBfSU5UMSAgICAgICAgICgweDBmVUw8PFNZU19HUEJfTUZQTF9QQjRNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBJTlQxICAgICAgICAqLworCisvKiBQQi41IE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9FQURDMF9DSDUgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEVBREMwX0NINSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfQUNNUDFfTiAgICAgICgweDAxVUw8PFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBBQ01QMV9OICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX0VCSV9BRFIwICAgICAoMHgwMlVMPDxTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgRUJJX0FEUjAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9TRDBfREFUMyAgICAgKDB4MDNVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIFNEMF9EQVQzICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfU1BJMV9NSVNPICAgICgweDA1VUw8PFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBTUEkxX01JU08gICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX0kyQzBfU0NMICAgICAoMHgwNlVMPDxTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgSTJDMF9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9VQVJUNV9UWEQgICAgKDB4MDdVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIFVBUlQ1X1RYRCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfVVNDSTFfQ1RMMCAgICgweDA4VUw8PFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBVU0NJMV9DVEwwICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX1NDMF9DTEsgICAgICAoMHgwOVVMPDxTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgU0MwX0NMSyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9JMlMwX0JDTEsgICAgKDB4MGFVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEkyUzBfQkNMSyAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjVNRlBfRVBXTTBfQ0gwICAgICgweDBiVUw8PFNZU19HUEJfTUZQTF9QQjVNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBFUFdNMF9DSDAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI1TUZQX1RNMCAgICAgICAgICAoMHgwZVVMPDxTWVNfR1BCX01GUExfUEI1TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgVE0wICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNU1GUF9JTlQwICAgICAgICAgKDB4MGZVTDw8U1lTX0dQQl9NRlBMX1BCNU1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIElOVDAgICAgICAgICovCisKKy8qIFBCLjYgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQTF9QQjZNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI2TUZQX0VBREMwX0NINiAgICAoMHgwMVVMPDxTWVNfR1BCX01GUExfUEI2TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgRUFEQzBfQ0g2ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNk1GUF9FQklfbldSSCAgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEVCSV9uV1JIICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfVVNDSTFfREFUMSAgICgweDA0VUw8PFNZU19HUEJfTUZQTF9QQjZNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBVU0NJMV9EQVQxICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI2TUZQX1VBUlQxX1JYRCAgICAoMHgwNlVMPDxTWVNfR1BCX01GUExfUEI2TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgVUFSVDFfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNk1GUF9FQklfbkNTMSAgICAgKDB4MDhVTDw8U1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEVCSV9uQ1MxICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfQlBXTTFfQ0g1ICAgICgweDBhVUw8PFNZU19HUEJfTUZQTF9QQjZNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBCUFdNMV9DSDUgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI2TUZQX0VQV00xX0JSQUtFMSAoMHgwYlVMPDxTWVNfR1BCX01GUExfUEI2TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgRVBXTTFfQlJBS0UxKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNk1GUF9FUFdNMV9DSDUgICAgKDB4MGNVTDw8U1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEVQV00xX0NINSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjZNRlBfSU5UNCAgICAgICAgICgweDBkVUw8PFNZU19HUEJfTUZQTF9QQjZNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBJTlQ0ICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI2TUZQX1VTQl9WQlVTX0VOICAoMHgwZVVMPDxTWVNfR1BCX01GUExfUEI2TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgVVNCX1ZCVVNfRU4gKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCNk1GUF9BQ01QMV9PICAgICAgKDB4MGZVTDw8U1lTX0dQQl9NRlBMX1BCNk1GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEFDTVAxX08gICAgICovCisKKy8qIFBCLjcgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjdNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX0VBREMwX0NINyAgICAoMHgwMVVMPDxTWVNfR1BCX01GUExfUEI3TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgRUFEQzBfQ0g3ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCN01GUF9FQklfbldSTCAgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBMX1BCN01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEVCSV9uV1JMICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjdNRlBfVVNDSTFfREFUMCAgICgweDA0VUw8PFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBVU0NJMV9EQVQwICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX1VBUlQxX1RYRCAgICAoMHgwNlVMPDxTWVNfR1BCX01GUExfUEI3TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgVUFSVDFfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCN01GUF9FQklfbkNTMCAgICAgKDB4MDhVTDw8U1lTX0dQQl9NRlBMX1BCN01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEVCSV9uQ1MwICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjdNRlBfQlBXTTFfQ0g0ICAgICgweDBhVUw8PFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBCUFdNMV9DSDQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX0VQV00xX0JSQUtFMCAoMHgwYlVMPDxTWVNfR1BCX01GUExfUEI3TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgRVBXTTFfQlJBS0UwKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCN01GUF9FUFdNMV9DSDQgICAgKDB4MGNVTDw8U1lTX0dQQl9NRlBMX1BCN01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEVQV00xX0NINCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQTF9QQjdNRlBfSU5UNSAgICAgICAgICgweDBkVUw8PFNZU19HUEJfTUZQTF9QQjdNRlBfUG9zKSAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBJTlQ1ICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUExfUEI3TUZQX1VTQl9WQlVTX1NUICAoMHgwZVVMPDxTWVNfR1BCX01GUExfUEI3TUZQX1BvcykgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgVVNCX1ZCVVNfU1QgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBMX1BCN01GUF9BQ01QMF9PICAgICAgKDB4MGZVTDw8U1lTX0dQQl9NRlBMX1BCN01GUF9Qb3MpIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEFDTVAwX08gICAgICovCisKKy8qIFBCLjggTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjhNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQSF9QQjhNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI4TUZQX0VBREMwX0NIOCAgICAoMHgwMVVMPDxTWVNfR1BCX01GUEhfUEI4TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgRUFEQzBfQ0g4ICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOE1GUF9FQklfQURSMTkgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBIX1BCOE1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIEVCSV9BRFIxOSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjhNRlBfVVNDSTFfQ0xLICAgICgweDA0VUw8PFNZU19HUEJfTUZQSF9QQjhNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBVU0NJMV9DTEsgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI4TUZQX1VBUlQwX1JYRCAgICAoMHgwNVVMPDxTWVNfR1BCX01GUEhfUEI4TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgVUFSVDBfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOE1GUF9VQVJUMV9uUlRTICAgKDB4MDZVTDw8U1lTX0dQQl9NRlBIX1BCOE1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIFVBUlQxX25SVFMgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjhNRlBfSTJDMV9TTUJTVVMgICgweDA3VUw8PFNZU19HUEJfTUZQSF9QQjhNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBJMkMxX1NNQlNVUyAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI4TUZQX0JQV00xX0NIMyAgICAoMHgwYVVMPDxTWVNfR1BCX01GUEhfUEI4TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgQlBXTTFfQ0gzICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOE1GUF9TUEkzX01PU0kgICAgKDB4MGJVTDw8U1lTX0dQQl9NRlBIX1BCOE1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIFNQSTNfTU9TSSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjhNRlBfSU5UNiAgICAgICAgICgweDBkVUw8PFNZU19HUEJfTUZQSF9QQjhNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOCBzZXR0aW5nIGZvciBJTlQ2ICAgICAgICAqLworCisvKiBQQi45IE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI5TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUEhfUEI5TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOU1GUF9FQURDMF9DSDkgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCOU1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIEVBREMwX0NIOSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjlNRlBfRUJJX0FEUjE4ICAgICgweDAyVUw8PFNZU19HUEJfTUZQSF9QQjlNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBFQklfQURSMTggICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI5TUZQX1VTQ0kxX0NUTDEgICAoMHgwNFVMPDxTWVNfR1BCX01GUEhfUEI5TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMSAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOU1GUF9VQVJUMF9UWEQgICAgKDB4MDVVTDw8U1lTX0dQQl9NRlBIX1BCOU1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIFVBUlQwX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjlNRlBfVUFSVDFfbkNUUyAgICgweDA2VUw8PFNZU19HUEJfTUZQSF9QQjlNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBVQVJUMV9uQ1RTICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI5TUZQX0kyQzFfU01CQUwgICAoMHgwN1VMPDxTWVNfR1BCX01GUEhfUEI5TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgSTJDMV9TTUJBTCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCOU1GUF9CUFdNMV9DSDIgICAgKDB4MGFVTDw8U1lTX0dQQl9NRlBIX1BCOU1GUF9Qb3MpIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIEJQV00xX0NIMiAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjlNRlBfU1BJM19NSVNPICAgICgweDBiVUw8PFNZU19HUEJfTUZQSF9QQjlNRlBfUG9zKSAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBTUEkzX01JU08gICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEI5TUZQX0lOVDcgICAgICAgICAoMHgwZFVMPDxTWVNfR1BCX01GUEhfUEI5TUZQX1BvcykgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgSU5UNyAgICAgICAgKi8KKworLyogUEIuMTAgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEwTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQSF9QQjEwTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxME1GUF9FQURDMF9DSDEwICAoMHgwMVVMPDxTWVNfR1BCX01GUEhfUEIxME1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIEVBREMwX0NIMTAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTBNRlBfRUJJX0FEUjE3ICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBIX1BCMTBNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBFQklfQURSMTcgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEwTUZQX1VTQ0kxX0NUTDAgICgweDA0VUw8PFNZU19HUEJfTUZQSF9QQjEwTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxME1GUF9VQVJUMF9uUlRTICAoMHgwNVVMPDxTWVNfR1BCX01GUEhfUEIxME1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIFVBUlQwX25SVFMgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTBNRlBfVUFSVDRfUlhEICAgKDB4MDZVTDw8U1lTX0dQQl9NRlBIX1BCMTBNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBVQVJUNF9SWEQgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEwTUZQX0kyQzFfU0RBICAgICgweDA3VUw8PFNZU19HUEJfTUZQSF9QQjEwTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgSTJDMV9TREEgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxME1GUF9DQU4wX1JYRCAgICAoMHgwOFVMPDxTWVNfR1BCX01GUEhfUEIxME1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIENBTjBfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTBNRlBfQlBXTTFfQ0gxICAgKDB4MGFVTDw8U1lTX0dQQl9NRlBIX1BCMTBNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBCUFdNMV9DSDEgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEwTUZQX1NQSTNfU1MgICAgICgweDBiVUw8PFNZU19HUEJfTUZQSF9QQjEwTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgU1BJM19TUyAgICAqLworCisvKiBQQi4xMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTFNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQl9NRlBIX1BCMTFNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjExTUZQX0VBREMwX0NIMTEgICgweDAxVUw8PFNZU19HUEJfTUZQSF9QQjExTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgRUFEQzBfQ0gxMSAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMU1GUF9FQklfQURSMTYgICAoMHgwMlVMPDxTWVNfR1BCX01GUEhfUEIxMU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIEVCSV9BRFIxNiAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTFNRlBfVUFSVDBfbkNUUyAgKDB4MDVVTDw8U1lTX0dQQl9NRlBIX1BCMTFNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBVQVJUMF9uQ1RTICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjExTUZQX1VBUlQ0X1RYRCAgICgweDA2VUw8PFNZU19HUEJfTUZQSF9QQjExTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgVUFSVDRfVFhEICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMU1GUF9JMkMxX1NDTCAgICAoMHgwN1VMPDxTWVNfR1BCX01GUEhfUEIxMU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIEkyQzFfU0NMICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTFNRlBfQ0FOMF9UWEQgICAgKDB4MDhVTDw8U1lTX0dQQl9NRlBIX1BCMTFNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBDQU4wX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjExTUZQX1NQSTBfSTJTTUNMSyAoMHgwOVVMPDxTWVNfR1BCX01GUEhfUEIxMU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIFNQSTBfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjExTUZQX0JQV00xX0NIMCAgICgweDBhVUw8PFNZU19HUEJfTUZQSF9QQjExTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTEgc2V0dGluZyBmb3IgQlBXTTFfQ0gwICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMU1GUF9TUEkzX0NMSyAgICAoMHgwYlVMPDxTWVNfR1BCX01GUEhfUEIxMU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIFNQSTNfQ0xLICAgKi8KKworLyogUEIuMTIgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9FQURDMF9DSDEyICAoMHgwMVVMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIEVBREMwX0NIMTIgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfREFDMF9PVVQgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBEQUMwX09VVCAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX0FDTVAwX1AyICAgICgweDAxVUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgQUNNUDBfUDIgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9BQ01QMV9QMiAgICAoMHgwMVVMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIEFDTVAxX1AyICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfRUJJX0FEMTUgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBFQklfQUQxNSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX1NDMV9DTEsgICAgICgweDAzVUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgU0MxX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9TUEkwX01PU0kgICAoMHgwNFVMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIFNQSTBfTU9TSSAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfVVNDSTBfQ0xLICAgKDB4MDVVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBVU0NJMF9DTEsgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX1VBUlQwX1JYRCAgICgweDA2VUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgVUFSVDBfUlhEICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9VQVJUM19uQ1RTICAoMHgwN1VMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIFVBUlQzX25DVFMgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfSTJDMl9TREEgICAgKDB4MDhVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBJMkMyX1NEQSAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEyTUZQX1NEMF9uQ0QgICAgICgweDA5VUw8PFNZU19HUEJfTUZQSF9QQjEyTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgU0QwX25DRCAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxMk1GUF9FUFdNMV9DSDMgICAoMHgwYlVMPDxTWVNfR1BCX01GUEhfUEIxMk1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIEVQV00xX0NIMyAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTJNRlBfVE0zX0VYVCAgICAgKDB4MGRVTDw8U1lTX0dQQl9NRlBIX1BCMTJNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBUTTNfRVhUICAgICovCisKKy8qIFBCLjEzIE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfRUFEQzBfQ0gxMyAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBFQURDMF9DSDEzICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX0RBQzFfT1VUICAgICgweDAxVUw8PFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgREFDMV9PVVQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9BQ01QMF9QMyAgICAoMHgwMVVMPDxTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIEFDTVAwX1AzICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfQUNNUDFfUDMgICAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBBQ01QMV9QMyAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX0VCSV9BRDE0ICAgICgweDAyVUw8PFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgRUJJX0FEMTQgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9TQzFfREFUICAgICAoMHgwM1VMPDxTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIFNDMV9EQVQgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfU1BJMF9NSVNPICAgKDB4MDRVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBTUEkwX01JU08gICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX1VTQ0kwX0RBVDAgICgweDA1VUw8PFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgVVNDSTBfREFUMCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9VQVJUMF9UWEQgICAoMHgwNlVMPDxTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIFVBUlQwX1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfVUFSVDNfblJUUyAgKDB4MDdVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBVQVJUM19uUlRTICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjEzTUZQX0kyQzJfU0NMICAgICgweDA4VUw8PFNZU19HUEJfTUZQSF9QQjEzTUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgSTJDMl9TQ0wgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxM01GUF9FUFdNMV9DSDIgICAoMHgwYlVMPDxTWVNfR1BCX01GUEhfUEIxM01GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIEVQV00xX0NIMiAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTNNRlBfVE0yX0VYVCAgICAgKDB4MGRVTDw8U1lTX0dQQl9NRlBIX1BCMTNNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBUTTJfRVhUICAgICovCisKKy8qIFBCLjE0IE1GUCAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfRUFEQzBfQ0gxNCAgKDB4MDFVTDw8U1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBFQURDMF9DSDE0ICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE0TUZQX0VCSV9BRDEzICAgICgweDAyVUw8PFNZU19HUEJfTUZQSF9QQjE0TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgRUJJX0FEMTMgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9TQzFfUlNUICAgICAoMHgwM1VMPDxTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFNDMV9SU1QgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfU1BJMF9DTEsgICAgKDB4MDRVTDw8U1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBTUEkwX0NMSyAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE0TUZQX1VTQ0kwX0RBVDEgICgweDA1VUw8PFNZU19HUEJfTUZQSF9QQjE0TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgVVNDSTBfREFUMSAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9VQVJUMF9uUlRTICAoMHgwNlVMPDxTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFVBUlQwX25SVFMgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfVUFSVDNfUlhEICAgKDB4MDdVTDw8U1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBVQVJUM19SWEQgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE0TUZQX0kyQzJfU01CU1VTICgweDA4VUw8PFNZU19HUEJfTUZQSF9QQjE0TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgSTJDMl9TTUJTVVMqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9FUFdNMV9DSDEgICAoMHgwYlVMPDxTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIEVQV00xX0NIMSAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTRNRlBfVE0xX0VYVCAgICAgKDB4MGRVTDw8U1lTX0dQQl9NRlBIX1BCMTRNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBUTTFfRVhUICAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE0TUZQX0NMS08gICAgICAgICgweDBlVUw8PFNZU19HUEJfTUZQSF9QQjE0TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgQ0xLTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNE1GUF9VU0JfVkJVU19TVCAoMHgwZlVMPDxTWVNfR1BCX01GUEhfUEIxNE1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFVTQl9WQlVTX1NUKi8KKworLyogUEIuMTUgTUZQICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEJfTUZQSF9QQjE1TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNU1GUF9FQURDMF9DSDE1ICAoMHgwMVVMPDxTWVNfR1BCX01GUEhfUEIxNU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIEVBREMwX0NIMTUgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTVNRlBfRUJJX0FEMTIgICAgKDB4MDJVTDw8U1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBFQklfQUQxMiAgICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX1NDMV9QV1IgICAgICgweDAzVUw8PFNZU19HUEJfTUZQSF9QQjE1TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgU0MxX1BXUiAgICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNU1GUF9TUEkwX1NTICAgICAoMHgwNFVMPDxTWVNfR1BCX01GUEhfUEIxNU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFNQSTBfU1MgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTVNRlBfVVNDSTBfQ1RMMSAgKDB4MDVVTDw8U1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBVU0NJMF9DVEwxICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX1VBUlQwX25DVFMgICgweDA2VUw8PFNZU19HUEJfTUZQSF9QQjE1TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgVUFSVDBfbkNUUyAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNU1GUF9VQVJUM19UWEQgICAoMHgwN1VMPDxTWVNfR1BCX01GUEhfUEIxNU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFVBUlQzX1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTVNRlBfSTJDMl9TTUJBTCAgKDB4MDhVTDw8U1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBJMkMyX1NNQkFMICovCisjZGVmaW5lIFNZU19HUEJfTUZQSF9QQjE1TUZQX0VQV00xX0NIMCAgICgweDBiVUw8PFNZU19HUEJfTUZQSF9QQjE1TUZQX1BvcykvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgRVBXTTFfQ0gwICAqLworI2RlZmluZSBTWVNfR1BCX01GUEhfUEIxNU1GUF9UTTBfRVhUICAgICAoMHgwZFVMPDxTWVNfR1BCX01GUEhfUEIxNU1GUF9Qb3MpLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFRNMF9FWFQgICAgKi8KKyNkZWZpbmUgU1lTX0dQQl9NRlBIX1BCMTVNRlBfVVNCX1ZCVVNfRU4gKDB4MGVVTDw8U1lTX0dQQl9NRlBIX1BCMTVNRlBfUG9zKS8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBVU0JfVkJVU19FTiovCisKKy8qIFBDLjAgTUZQICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzBNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUENfTUZQTF9QQzBNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMwTUZQX0VCSV9BRDAgICAgICAoMHgwMlVMPDxTWVNfR1BDX01GUExfUEMwTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgRUJJX0FEMCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDME1GUF9RU1BJMF9NT1NJMCAgKDB4MDRVTDw8U1lTX0dQQ19NRlBMX1BDME1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMwIHNldHRpbmcgZm9yIFFTUEkwX01PU0kwICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzBNRlBfU0MxX0NMSyAgICAgICgweDA1VUw8PFNZU19HUENfTUZQTF9QQzBNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBTQzFfQ0xLICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMwTUZQX0kyUzBfTFJDSyAgICAoMHgwNlVMPDxTWVNfR1BDX01GUExfUEMwTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgSTJTMF9MUkNLICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDME1GUF9TUEkxX1NTICAgICAgKDB4MDdVTDw8U1lTX0dQQ19NRlBMX1BDME1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMwIHNldHRpbmcgZm9yIFNQSTFfU1MgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzBNRlBfVUFSVDJfUlhEICAgICgweDA4VUw8PFNZU19HUENfTUZQTF9QQzBNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBVQVJUMl9SWEQgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMwTUZQX0kyQzBfU0RBICAgICAoMHgwOVVMPDxTWVNfR1BDX01GUExfUEMwTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzAgc2V0dGluZyBmb3IgSTJDMF9TREEgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDME1GUF9FUFdNMV9DSDUgICAgKDB4MGNVTDw8U1lTX0dQQ19NRlBMX1BDME1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMwIHNldHRpbmcgZm9yIEVQV00xX0NINSAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzBNRlBfQUNNUDFfTyAgICAgICgweDBlVUw8PFNZU19HUENfTUZQTF9QQzBNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBBQ01QMV9PICAgICAqLworCisvKiBQQy4xIE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMxTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUExfUEMxTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMU1GUF9FQklfQUQxICAgICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBMX1BDMU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIEVCSV9BRDEgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzFNRlBfUVNQSTBfTUlTTzAgICgweDA0VUw8PFNZU19HUENfTUZQTF9QQzFNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBRU1BJMF9NSVNPMCAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMxTUZQX1NDMV9EQVQgICAgICAoMHgwNVVMPDxTWVNfR1BDX01GUExfUEMxTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgU0MxX0RBVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMU1GUF9JMlMwX0RPICAgICAgKDB4MDZVTDw8U1lTX0dQQ19NRlBMX1BDMU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIEkyUzBfRE8gICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzFNRlBfU1BJMV9DTEsgICAgICgweDA3VUw8PFNZU19HUENfTUZQTF9QQzFNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBTUEkxX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMxTUZQX1VBUlQyX1RYRCAgICAoMHgwOFVMPDxTWVNfR1BDX01GUExfUEMxTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgVUFSVDJfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMU1GUF9JMkMwX1NDTCAgICAgKDB4MDlVTDw8U1lTX0dQQ19NRlBMX1BDMU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIEkyQzBfU0NMICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzFNRlBfRVBXTTFfQ0g0ICAgICgweDBjVUw8PFNZU19HUENfTUZQTF9QQzFNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBFUFdNMV9DSDQgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMxTUZQX0FDTVAwX08gICAgICAoMHgwZVVMPDxTWVNfR1BDX01GUExfUEMxTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgQUNNUDBfTyAgICAgKi8KKworLyogUEMuMiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMk1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQ19NRlBMX1BDMk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzJNRlBfRUJJX0FEMiAgICAgICgweDAyVUw8PFNZU19HUENfTUZQTF9QQzJNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBFQklfQUQyICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMyTUZQX1FTUEkwX0NMSyAgICAoMHgwNFVMPDxTWVNfR1BDX01GUExfUEMyTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgUVNQSTBfQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMk1GUF9TQzFfUlNUICAgICAgKDB4MDVVTDw8U1lTX0dQQ19NRlBMX1BDMk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIFNDMV9SU1QgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzJNRlBfSTJTMF9ESSAgICAgICgweDA2VUw8PFNZU19HUENfTUZQTF9QQzJNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBJMlMwX0RJICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMyTUZQX1NQSTFfTU9TSSAgICAoMHgwN1VMPDxTWVNfR1BDX01GUExfUEMyTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgU1BJMV9NT1NJICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMk1GUF9VQVJUMl9uQ1RTICAgKDB4MDhVTDw8U1lTX0dQQ19NRlBMX1BDMk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIFVBUlQyX25DVFMgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzJNRlBfSTJDMF9TTUJTVVMgICgweDA5VUw8PFNZU19HUENfTUZQTF9QQzJNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBJMkMwX1NNQlNVUyAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMyTUZQX1VBUlQzX1JYRCAgICAoMHgwYlVMPDxTWVNfR1BDX01GUExfUEMyTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgVUFSVDNfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDMk1GUF9FUFdNMV9DSDMgICAgKDB4MGNVTDw8U1lTX0dQQ19NRlBMX1BDMk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIEVQV00xX0NIMyAgICovCisKKy8qIFBDLjMgTUZQICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzNNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUENfTUZQTF9QQzNNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMzTUZQX0VCSV9BRDMgICAgICAoMHgwMlVMPDxTWVNfR1BDX01GUExfUEMzTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgRUJJX0FEMyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDM01GUF9RU1BJMF9TUyAgICAgKDB4MDRVTDw8U1lTX0dQQ19NRlBMX1BDM01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMzIHNldHRpbmcgZm9yIFFTUEkwX1NTICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzNNRlBfU0MxX1BXUiAgICAgICgweDA1VUw8PFNZU19HUENfTUZQTF9QQzNNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBTQzFfUFdSICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMzTUZQX0kyUzBfTUNMSyAgICAoMHgwNlVMPDxTWVNfR1BDX01GUExfUEMzTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgSTJTMF9NQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDM01GUF9TUEkxX01JU08gICAgKDB4MDdVTDw8U1lTX0dQQ19NRlBMX1BDM01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMzIHNldHRpbmcgZm9yIFNQSTFfTUlTTyAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzNNRlBfVUFSVDJfblJUUyAgICgweDA4VUw8PFNZU19HUENfTUZQTF9QQzNNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBVQVJUMl9uUlRTICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEMzTUZQX0kyQzBfU01CQUwgICAoMHgwOVVMPDxTWVNfR1BDX01GUExfUEMzTUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgSTJDMF9TTUJBTCAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDM01GUF9VQVJUM19UWEQgICAgKDB4MGJVTDw8U1lTX0dQQ19NRlBMX1BDM01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEMzIHNldHRpbmcgZm9yIFVBUlQzX1RYRCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzNNRlBfRVBXTTFfQ0gyICAgICgweDBjVUw8PFNZU19HUENfTUZQTF9QQzNNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBFUFdNMV9DSDIgICAqLworCisvKiBQQy40IE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM0TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUExfUEM0TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9FQklfQUQ0ICAgICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBMX1BDNE1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIEVCSV9BRDQgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzRNRlBfUVNQSTBfTU9TSTEgICgweDA0VUw8PFNZU19HUENfTUZQTF9QQzRNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMSAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM0TUZQX1NDMV9uQ0QgICAgICAoMHgwNVVMPDxTWVNfR1BDX01GUExfUEM0TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgU0MxX25DRCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9JMlMwX0JDTEsgICAgKDB4MDZVTDw8U1lTX0dQQ19NRlBMX1BDNE1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIEkyUzBfQkNMSyAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzRNRlBfU1BJMV9JMlNNQ0xLICgweDA3VUw8PFNZU19HUENfTUZQTF9QQzRNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBTUEkxX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM0TUZQX1VBUlQyX1JYRCAgICAoMHgwOFVMPDxTWVNfR1BDX01GUExfUEM0TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgVUFSVDJfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9JMkMxX1NEQSAgICAgKDB4MDlVTDw8U1lTX0dQQ19NRlBMX1BDNE1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIEkyQzFfU0RBICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzRNRlBfQ0FOMF9SWEQgICAgICgweDBhVUw8PFNZU19HUENfTUZQTF9QQzRNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBDQU4wX1JYRCAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM0TUZQX1VBUlQ0X1JYRCAgICAoMHgwYlVMPDxTWVNfR1BDX01GUExfUEM0TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgVUFSVDRfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNE1GUF9FUFdNMV9DSDEgICAgKDB4MGNVTDw8U1lTX0dQQ19NRlBMX1BDNE1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIEVQV00xX0NIMSAgICovCisKKy8qIFBDLjUgTUZQICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzVNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUENfTUZQTF9QQzVNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM1TUZQX0VCSV9BRDUgICAgICAoMHgwMlVMPDxTWVNfR1BDX01GUExfUEM1TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgRUJJX0FENSAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNU1GUF9RU1BJMF9NSVNPMSAgKDB4MDRVTDw8U1lTX0dQQ19NRlBMX1BDNU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM1IHNldHRpbmcgZm9yIFFTUEkwX01JU08xICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzVNRlBfVUFSVDJfVFhEICAgICgweDA4VUw8PFNZU19HUENfTUZQTF9QQzVNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNSBzZXR0aW5nIGZvciBVQVJUMl9UWEQgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM1TUZQX0kyQzFfU0NMICAgICAoMHgwOVVMPDxTWVNfR1BDX01GUExfUEM1TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgSTJDMV9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNU1GUF9DQU4wX1RYRCAgICAgKDB4MGFVTDw8U1lTX0dQQ19NRlBMX1BDNU1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM1IHNldHRpbmcgZm9yIENBTjBfVFhEICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzVNRlBfVUFSVDRfVFhEICAgICgweDBiVUw8PFNZU19HUENfTUZQTF9QQzVNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNSBzZXR0aW5nIGZvciBVQVJUNF9UWEQgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM1TUZQX0VQV00xX0NIMCAgICAoMHgwY1VMPDxTWVNfR1BDX01GUExfUEM1TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgRVBXTTFfQ0gwICAgKi8KKworLyogUEMuNiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNk1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQQ19NRlBMX1BDNk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzZNRlBfRUJJX0FEOCAgICAgICgweDAyVUw8PFNZU19HUENfTUZQTF9QQzZNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBFQklfQUQ4ICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM2TUZQX1NQSTFfTU9TSSAgICAoMHgwNFVMPDxTWVNfR1BDX01GUExfUEM2TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgU1BJMV9NT1NJICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNk1GUF9VQVJUNF9SWEQgICAgKDB4MDVVTDw8U1lTX0dQQ19NRlBMX1BDNk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIFVBUlQ0X1JYRCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzZNRlBfU0MyX1JTVCAgICAgICgweDA2VUw8PFNZU19HUENfTUZQTF9QQzZNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBTQzJfUlNUICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM2TUZQX1VBUlQwX25SVFMgICAoMHgwN1VMPDxTWVNfR1BDX01GUExfUEM2TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgVUFSVDBfblJUUyAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNk1GUF9JMkMxX1NNQlNVUyAgKDB4MDhVTDw8U1lTX0dQQ19NRlBMX1BDNk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIEkyQzFfU01CU1VTICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzZNRlBfRVBXTTFfQ0gzICAgICgweDBiVUw8PFNZU19HUENfTUZQTF9QQzZNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBFUFdNMV9DSDMgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM2TUZQX0JQV00xX0NIMSAgICAoMHgwY1VMPDxTWVNfR1BDX01GUExfUEM2TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgQlBXTTFfQ0gxICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDNk1GUF9UTTEgICAgICAgICAgKDB4MGVVTDw8U1lTX0dQQ19NRlBMX1BDNk1GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIFRNMSAgICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzZNRlBfSU5UMiAgICAgICAgICgweDBmVUw8PFNZU19HUENfTUZQTF9QQzZNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBJTlQyICAgICAgICAqLworCisvKiBQQy43IE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM3TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUExfUEM3TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9FQklfQUQ5ICAgICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBMX1BDN01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIEVCSV9BRDkgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzdNRlBfU1BJMV9NSVNPICAgICgweDA0VUw8PFNZU19HUENfTUZQTF9QQzdNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBTUEkxX01JU08gICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM3TUZQX1VBUlQ0X1RYRCAgICAoMHgwNVVMPDxTWVNfR1BDX01GUExfUEM3TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgVUFSVDRfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9TQzJfUFdSICAgICAgKDB4MDZVTDw8U1lTX0dQQ19NRlBMX1BDN01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIFNDMl9QV1IgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzdNRlBfVUFSVDBfbkNUUyAgICgweDA3VUw8PFNZU19HUENfTUZQTF9QQzdNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBVQVJUMF9uQ1RTICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM3TUZQX0kyQzFfU01CQUwgICAoMHgwOFVMPDxTWVNfR1BDX01GUExfUEM3TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgSTJDMV9TTUJBTCAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9FUFdNMV9DSDIgICAgKDB4MGJVTDw8U1lTX0dQQ19NRlBMX1BDN01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIEVQV00xX0NIMiAgICovCisjZGVmaW5lIFNZU19HUENfTUZQTF9QQzdNRlBfQlBXTTFfQ0gwICAgICgweDBjVUw8PFNZU19HUENfTUZQTF9QQzdNRlBfUG9zKSAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBCUFdNMV9DSDAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUExfUEM3TUZQX1RNMCAgICAgICAgICAoMHgwZVVMPDxTWVNfR1BDX01GUExfUEM3TUZQX1BvcykgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgVE0wICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBMX1BDN01GUF9JTlQzICAgICAgICAgKDB4MGZVTDw8U1lTX0dQQ19NRlBMX1BDN01GUF9Qb3MpIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIElOVDMgICAgICAgICovCisKKy8qIFBDLjggTUZQICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzhNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUENfTUZQSF9QQzhNRlBfUG9zKSAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM4TUZQX0VCSV9BRFIxNiAgICAoMHgwMlVMPDxTWVNfR1BDX01GUEhfUEM4TUZQX1BvcykgLyohPCBHUENfTUZQSCBQQzggc2V0dGluZyBmb3IgRUJJX0FEUjE2ICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOE1GUF9JMkMwX1NEQSAgICAgKDB4MDRVTDw8U1lTX0dQQ19NRlBIX1BDOE1GUF9Qb3MpIC8qITwgR1BDX01GUEggUEM4IHNldHRpbmcgZm9yIEkyQzBfU0RBICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzhNRlBfVUFSVDRfbkNUUyAgICgweDA1VUw8PFNZU19HUENfTUZQSF9QQzhNRlBfUG9zKSAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBVQVJUNF9uQ1RTICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM4TUZQX1VBUlQxX1JYRCAgICAoMHgwOFVMPDxTWVNfR1BDX01GUEhfUEM4TUZQX1BvcykgLyohPCBHUENfTUZQSCBQQzggc2V0dGluZyBmb3IgVUFSVDFfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOE1GUF9FUFdNMV9DSDEgICAgKDB4MGJVTDw8U1lTX0dQQ19NRlBIX1BDOE1GUF9Qb3MpIC8qITwgR1BDX01GUEggUEM4IHNldHRpbmcgZm9yIEVQV00xX0NIMSAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzhNRlBfQlBXTTFfQ0g0ICAgICgweDBjVUw8PFNZU19HUENfTUZQSF9QQzhNRlBfUG9zKSAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBCUFdNMV9DSDQgICAqLworCisvKiBQQy45IE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM5TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUEhfUEM5TUZQX1BvcykgLyohPCBHUENfTUZQSCBQQzkgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOU1GUF9FQklfQURSNyAgICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBIX1BDOU1GUF9Qb3MpIC8qITwgR1BDX01GUEggUEM5IHNldHRpbmcgZm9yIEVCSV9BRFI3ICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzlNRlBfU1BJM19TUyAgICAgICgweDA2VUw8PFNZU19HUENfTUZQSF9QQzlNRlBfUG9zKSAvKiE8IEdQQ19NRlBIIFBDOSBzZXR0aW5nIGZvciBTUEkzX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEM5TUZQX1VBUlQzX1JYRCAgICAoMHgwN1VMPDxTWVNfR1BDX01GUEhfUEM5TUZQX1BvcykgLyohPCBHUENfTUZQSCBQQzkgc2V0dGluZyBmb3IgVUFSVDNfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDOU1GUF9FUFdNMV9DSDMgICAgKDB4MGNVTDw8U1lTX0dQQ19NRlBIX1BDOU1GUF9Qb3MpIC8qITwgR1BDX01GUEggUEM5IHNldHRpbmcgZm9yIEVQV00xX0NIMyAgICovCisKKy8qIFBDLjEwIE1GUCAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxME1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BDX01GUEhfUEMxME1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTBNRlBfRUJJX0FEUjYgICAgKDB4MDJVTDw8U1lTX0dQQ19NRlBIX1BDMTBNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMCBzZXR0aW5nIGZvciBFQklfQURSNiAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEwTUZQX1NQSTNfQ0xLICAgICgweDA2VUw8PFNZU19HUENfTUZQSF9QQzEwTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTAgc2V0dGluZyBmb3IgU1BJM19DTEsgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxME1GUF9VQVJUM19UWEQgICAoMHgwN1VMPDxTWVNfR1BDX01GUEhfUEMxME1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEwIHNldHRpbmcgZm9yIFVBUlQzX1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTBNRlBfRUNBUDFfSUMwICAgKDB4MGJVTDw8U1lTX0dQQ19NRlBIX1BDMTBNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMCBzZXR0aW5nIGZvciBFQ0FQMV9JQzAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEwTUZQX0VQV00xX0NIMiAgICgweDBjVUw8PFNZU19HUENfTUZQSF9QQzEwTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTAgc2V0dGluZyBmb3IgRVBXTTFfQ0gyICAqLworCisvKiBQQy4xMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTFNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQ19NRlBIX1BDMTFNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzExTUZQX0VCSV9BRFI1ICAgICgweDAyVUw8PFNZU19HUENfTUZQSF9QQzExTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgRUJJX0FEUjUgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMU1GUF9VQVJUMF9SWEQgICAoMHgwM1VMPDxTWVNfR1BDX01GUEhfUEMxMU1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIFVBUlQwX1JYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTFNRlBfSTJDMF9TREEgICAgKDB4MDRVTDw8U1lTX0dQQ19NRlBIX1BDMTFNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMSBzZXR0aW5nIGZvciBJMkMwX1NEQSAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzExTUZQX1NQSTNfTU9TSSAgICgweDA2VUw8PFNZU19HUENfTUZQSF9QQzExTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgU1BJM19NT1NJICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMU1GUF9FQ0FQMV9JQzEgICAoMHgwYlVMPDxTWVNfR1BDX01GUEhfUEMxMU1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIEVDQVAxX0lDMSAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTFNRlBfRVBXTTFfQ0gxICAgKDB4MGNVTDw8U1lTX0dQQ19NRlBIX1BDMTFNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMSBzZXR0aW5nIGZvciBFUFdNMV9DSDEgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzExTUZQX0FDTVAxX08gICAgICgweDBlVUw8PFNZU19HUENfTUZQSF9QQzExTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgQUNNUDFfTyAgICAqLworCisvKiBQQy4xMiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTJNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQQ19NRlBIX1BDMTJNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEyTUZQX0VCSV9BRFI0ICAgICgweDAyVUw8PFNZU19HUENfTUZQSF9QQzEyTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgRUJJX0FEUjQgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMk1GUF9VQVJUMF9UWEQgICAoMHgwM1VMPDxTWVNfR1BDX01GUEhfUEMxMk1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIFVBUlQwX1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTJNRlBfSTJDMF9TQ0wgICAgKDB4MDRVTDw8U1lTX0dQQ19NRlBIX1BDMTJNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBJMkMwX1NDTCAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEyTUZQX1NQSTNfTUlTTyAgICgweDA2VUw8PFNZU19HUENfTUZQSF9QQzEyTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgU1BJM19NSVNPICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMk1GUF9TQzBfbkNEICAgICAoMHgwOVVMPDxTWVNfR1BDX01GUEhfUEMxMk1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIFNDMF9uQ0QgICAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTJNRlBfRUNBUDFfSUMyICAgKDB4MGJVTDw8U1lTX0dQQ19NRlBIX1BDMTJNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBFQ0FQMV9JQzIgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEyTUZQX0VQV00xX0NIMCAgICgweDBjVUw8PFNZU19HUENfTUZQSF9QQzEyTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgRVBXTTFfQ0gwICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxMk1GUF9BQ01QMF9PICAgICAoMHgwZVVMPDxTWVNfR1BDX01GUEhfUEMxMk1GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIEFDTVAwX08gICAgKi8KKworLyogUEMuMTMgTUZQICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEzTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUENfTUZQSF9QQzEzTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxM01GUF9FQklfQURSMTAgICAoMHgwMlVMPDxTWVNfR1BDX01GUEhfUEMxM01GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIEVCSV9BRFIxMCAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTNNRlBfU0MyX25DRCAgICAgKDB4MDNVTDw8U1lTX0dQQ19NRlBIX1BDMTNNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBTQzJfbkNEICAgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEzTUZQX1NQSTJfSTJTTUNMSyAoMHgwNFVMPDxTWVNfR1BDX01GUEhfUEMxM01GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIFNQSTJfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEzTUZQX1VTQ0kwX0NUTDAgICgweDA2VUw8PFNZU19HUENfTUZQSF9QQzEzTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgVVNDSTBfQ1RMMCAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxM01GUF9VQVJUMl9UWEQgICAoMHgwN1VMPDxTWVNfR1BDX01GUEhfUEMxM01GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIFVBUlQyX1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQQ19NRlBIX1BDMTNNRlBfQlBXTTBfQ0g0ICAgKDB4MDlVTDw8U1lTX0dQQ19NRlBIX1BDMTNNRlBfUG9zKS8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBCUFdNMF9DSDQgICovCisjZGVmaW5lIFNZU19HUENfTUZQSF9QQzEzTUZQX0NMS08gICAgICAgICgweDBkVUw8PFNZU19HUENfTUZQSF9QQzEzTUZQX1BvcykvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgQ0xLTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BDX01GUEhfUEMxM01GUF9FQURDMF9TVCAgICAoMHgwZVVMPDxTWVNfR1BDX01GUEhfUEMxM01GUF9Qb3MpLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIEVBREMwX1NUICAgKi8KKworLyogUEQuMCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEME1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRF9NRlBMX1BEME1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQwIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDBNRlBfRUJJX0FEMTMgICAgICgweDAyVUw8PFNZU19HUERfTUZQTF9QRDBNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBFQklfQUQxMyAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQwTUZQX1VTQ0kwX0NMSyAgICAoMHgwM1VMPDxTWVNfR1BEX01GUExfUEQwTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgVVNDSTBfQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEME1GUF9TUEkwX01PU0kgICAgKDB4MDRVTDw8U1lTX0dQRF9NRlBMX1BEME1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQwIHNldHRpbmcgZm9yIFNQSTBfTU9TSSAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDBNRlBfVUFSVDNfUlhEICAgICgweDA1VUw8PFNZU19HUERfTUZQTF9QRDBNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBVQVJUM19SWEQgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQwTUZQX0kyQzJfU0RBICAgICAoMHgwNlVMPDxTWVNfR1BEX01GUExfUEQwTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgSTJDMl9TREEgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEME1GUF9TQzJfQ0xLICAgICAgKDB4MDdVTDw8U1lTX0dQRF9NRlBMX1BEME1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQwIHNldHRpbmcgZm9yIFNDMl9DTEsgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDBNRlBfVE0yICAgICAgICAgICgweDBlVUw8PFNZU19HUERfTUZQTF9QRDBNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBUTTIgICAgICAgICAqLworCisvKiBQRC4xIE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQxTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUExfUEQxTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDEgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMU1GUF9FQklfQUQxMiAgICAgKDB4MDJVTDw8U1lTX0dQRF9NRlBMX1BEMU1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQxIHNldHRpbmcgZm9yIEVCSV9BRDEyICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDFNRlBfVVNDSTBfREFUMCAgICgweDAzVUw8PFNZU19HUERfTUZQTF9QRDFNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMSBzZXR0aW5nIGZvciBVU0NJMF9EQVQwICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQxTUZQX1NQSTBfTUlTTyAgICAoMHgwNFVMPDxTWVNfR1BEX01GUExfUEQxTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDEgc2V0dGluZyBmb3IgU1BJMF9NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMU1GUF9VQVJUM19UWEQgICAgKDB4MDVVTDw8U1lTX0dQRF9NRlBMX1BEMU1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQxIHNldHRpbmcgZm9yIFVBUlQzX1RYRCAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDFNRlBfSTJDMl9TQ0wgICAgICgweDA2VUw8PFNZU19HUERfTUZQTF9QRDFNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMSBzZXR0aW5nIGZvciBJMkMyX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQxTUZQX1NDMl9EQVQgICAgICAoMHgwN1VMPDxTWVNfR1BEX01GUExfUEQxTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDEgc2V0dGluZyBmb3IgU0MyX0RBVCAgICAgKi8KKworLyogUEQuMiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMk1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRF9NRlBMX1BEMk1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQyIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDJNRlBfRUJJX0FEMTEgICAgICgweDAyVUw8PFNZU19HUERfTUZQTF9QRDJNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMiBzZXR0aW5nIGZvciBFQklfQUQxMSAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQyTUZQX1VTQ0kwX0RBVDEgICAoMHgwM1VMPDxTWVNfR1BEX01GUExfUEQyTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgVVNDSTBfREFUMSAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMk1GUF9TUEkwX0NMSyAgICAgKDB4MDRVTDw8U1lTX0dQRF9NRlBMX1BEMk1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQyIHNldHRpbmcgZm9yIFNQSTBfQ0xLICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDJNRlBfVUFSVDNfbkNUUyAgICgweDA1VUw8PFNZU19HUERfTUZQTF9QRDJNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMiBzZXR0aW5nIGZvciBVQVJUM19uQ1RTICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQyTUZQX1NDMl9SU1QgICAgICAoMHgwN1VMPDxTWVNfR1BEX01GUExfUEQyTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgU0MyX1JTVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEMk1GUF9VQVJUMF9SWEQgICAgKDB4MDlVTDw8U1lTX0dQRF9NRlBMX1BEMk1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQyIHNldHRpbmcgZm9yIFVBUlQwX1JYRCAgICovCisKKy8qIFBELjMgTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDNNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQTF9QRDNNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQzTUZQX0VCSV9BRDEwICAgICAoMHgwMlVMPDxTWVNfR1BEX01GUExfUEQzTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgRUJJX0FEMTAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEM01GUF9VU0NJMF9DVEwxICAgKDB4MDNVTDw8U1lTX0dQRF9NRlBMX1BEM01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFVTQ0kwX0NUTDEgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDNNRlBfU1BJMF9TUyAgICAgICgweDA0VUw8PFNZU19HUERfTUZQTF9QRDNNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBTUEkwX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQzTUZQX1VBUlQzX25SVFMgICAoMHgwNVVMPDxTWVNfR1BEX01GUExfUEQzTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgVUFSVDNfblJUUyAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEM01GUF9VU0NJMV9DVEwwICAgKDB4MDZVTDw8U1lTX0dQRF9NRlBMX1BEM01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFVTQ0kxX0NUTDAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDNNRlBfU0MyX1BXUiAgICAgICgweDA3VUw8PFNZU19HUERfTUZQTF9QRDNNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBTQzJfUFdSICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQzTUZQX1NDMV9uQ0QgICAgICAoMHgwOFVMPDxTWVNfR1BEX01GUExfUEQzTUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgU0MxX25DRCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEM01GUF9VQVJUMF9UWEQgICAgKDB4MDlVTDw8U1lTX0dQRF9NRlBMX1BEM01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFVBUlQwX1RYRCAgICovCisKKy8qIFBELjQgTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDRNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQTF9QRDRNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ0TUZQX1VTQ0kwX0NUTDAgICAoMHgwM1VMPDxTWVNfR1BEX01GUExfUEQ0TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDQgc2V0dGluZyBmb3IgVVNDSTBfQ1RMMCAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENE1GUF9JMkMxX1NEQSAgICAgKDB4MDRVTDw8U1lTX0dQRF9NRlBMX1BENE1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ0IHNldHRpbmcgZm9yIEkyQzFfU0RBICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDRNRlBfU1BJMV9TUyAgICAgICgweDA1VUw8PFNZU19HUERfTUZQTF9QRDRNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENCBzZXR0aW5nIGZvciBTUEkxX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ0TUZQX1VTQ0kxX0NUTDEgICAoMHgwNlVMPDxTWVNfR1BEX01GUExfUEQ0TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDQgc2V0dGluZyBmb3IgVVNDSTFfQ1RMMSAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENE1GUF9TQzFfQ0xLICAgICAgKDB4MDhVTDw8U1lTX0dQRF9NRlBMX1BENE1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ0IHNldHRpbmcgZm9yIFNDMV9DTEsgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDRNRlBfVVNCX1ZCVVNfU1QgICgweDBlVUw8PFNZU19HUERfTUZQTF9QRDRNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENCBzZXR0aW5nIGZvciBVU0JfVkJVU19TVCAqLworCisvKiBQRC41IE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ1TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUExfUEQ1TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDUgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENU1GUF9JMkMxX1NDTCAgICAgKDB4MDRVTDw8U1lTX0dQRF9NRlBMX1BENU1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ1IHNldHRpbmcgZm9yIEkyQzFfU0NMICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDVNRlBfU1BJMV9DTEsgICAgICgweDA1VUw8PFNZU19HUERfTUZQTF9QRDVNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENSBzZXR0aW5nIGZvciBTUEkxX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ1TUZQX1VTQ0kxX0RBVDAgICAoMHgwNlVMPDxTWVNfR1BEX01GUExfUEQ1TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDUgc2V0dGluZyBmb3IgVVNDSTFfREFUMCAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENU1GUF9TQzFfREFUICAgICAgKDB4MDhVTDw8U1lTX0dQRF9NRlBMX1BENU1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ1IHNldHRpbmcgZm9yIFNDMV9EQVQgICAgICovCisKKy8qIFBELjYgTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDZNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQTF9QRDZNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ2TUZQX1VBUlQxX1JYRCAgICAoMHgwM1VMPDxTWVNfR1BEX01GUExfUEQ2TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDYgc2V0dGluZyBmb3IgVUFSVDFfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENk1GUF9JMkMwX1NEQSAgICAgKDB4MDRVTDw8U1lTX0dQRF9NRlBMX1BENk1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ2IHNldHRpbmcgZm9yIEkyQzBfU0RBICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDZNRlBfU1BJMV9NT1NJICAgICgweDA1VUw8PFNZU19HUERfTUZQTF9QRDZNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENiBzZXR0aW5nIGZvciBTUEkxX01PU0kgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ2TUZQX1VTQ0kxX0RBVDEgICAoMHgwNlVMPDxTWVNfR1BEX01GUExfUEQ2TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDYgc2V0dGluZyBmb3IgVVNDSTFfREFUMSAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BENk1GUF9TQzFfUlNUICAgICAgKDB4MDhVTDw8U1lTX0dQRF9NRlBMX1BENk1GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ2IHNldHRpbmcgZm9yIFNDMV9SU1QgICAgICovCisKKy8qIFBELjcgTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDdNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQTF9QRDdNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ3TUZQX1VBUlQxX1RYRCAgICAoMHgwM1VMPDxTWVNfR1BEX01GUExfUEQ3TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDcgc2V0dGluZyBmb3IgVUFSVDFfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEN01GUF9JMkMwX1NDTCAgICAgKDB4MDRVTDw8U1lTX0dQRF9NRlBMX1BEN01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ3IHNldHRpbmcgZm9yIEkyQzBfU0NMICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQTF9QRDdNRlBfU1BJMV9NSVNPICAgICgweDA1VUw8PFNZU19HUERfTUZQTF9QRDdNRlBfUG9zKSAvKiE8IEdQRF9NRlBMIFBENyBzZXR0aW5nIGZvciBTUEkxX01JU08gICAqLworI2RlZmluZSBTWVNfR1BEX01GUExfUEQ3TUZQX1VTQ0kxX0NMSyAgICAoMHgwNlVMPDxTWVNfR1BEX01GUExfUEQ3TUZQX1BvcykgLyohPCBHUERfTUZQTCBQRDcgc2V0dGluZyBmb3IgVVNDSTFfQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBMX1BEN01GUF9TQzFfUFdSICAgICAgKDB4MDhVTDw8U1lTX0dQRF9NRlBMX1BEN01GUF9Qb3MpIC8qITwgR1BEX01GUEwgUEQ3IHNldHRpbmcgZm9yIFNDMV9QV1IgICAgICovCisKKy8qIFBELjggTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDhNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQSF9QRDhNRlBfUG9zKSAvKiE8IEdQRF9NRlBIIFBEOCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQ4TUZQX0VCSV9BRDYgICAgICAoMHgwMlVMPDxTWVNfR1BEX01GUEhfUEQ4TUZQX1BvcykgLyohPCBHUERfTUZQSCBQRDggc2V0dGluZyBmb3IgRUJJX0FENiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEOE1GUF9JMkMyX1NEQSAgICAgKDB4MDNVTDw8U1lTX0dQRF9NRlBIX1BEOE1GUF9Qb3MpIC8qITwgR1BEX01GUEggUEQ4IHNldHRpbmcgZm9yIEkyQzJfU0RBICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDhNRlBfVUFSVDJfblJUUyAgICgweDA0VUw8PFNZU19HUERfTUZQSF9QRDhNRlBfUG9zKSAvKiE8IEdQRF9NRlBIIFBEOCBzZXR0aW5nIGZvciBVQVJUMl9uUlRTICAqLworCisvKiBQRC45IE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQ5TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUEhfUEQ5TUZQX1BvcykgLyohPCBHUERfTUZQSCBQRDkgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEOU1GUF9FQklfQUQ3ICAgICAgKDB4MDJVTDw8U1lTX0dQRF9NRlBIX1BEOU1GUF9Qb3MpIC8qITwgR1BEX01GUEggUEQ5IHNldHRpbmcgZm9yIEVCSV9BRDcgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDlNRlBfSTJDMl9TQ0wgICAgICgweDAzVUw8PFNZU19HUERfTUZQSF9QRDlNRlBfUG9zKSAvKiE8IEdQRF9NRlBIIFBEOSBzZXR0aW5nIGZvciBJMkMyX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQ5TUZQX1VBUlQyX25DVFMgICAoMHgwNFVMPDxTWVNfR1BEX01GUEhfUEQ5TUZQX1BvcykgLyohPCBHUERfTUZQSCBQRDkgc2V0dGluZyBmb3IgVUFSVDJfbkNUUyAgKi8KKworLyogUEQuMTAgTUZQICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEwTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUERfTUZQSF9QRDEwTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxME1GUF9FQklfbkNTMiAgICAoMHgwMlVMPDxTWVNfR1BEX01GUEhfUEQxME1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEwIHNldHRpbmcgZm9yIEVCSV9uQ1MyICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTBNRlBfVUFSVDFfUlhEICAgKDB4MDNVTDw8U1lTX0dQRF9NRlBIX1BEMTBNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMCBzZXR0aW5nIGZvciBVQVJUMV9SWEQgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEwTUZQX0NBTjBfUlhEICAgICgweDA0VUw8PFNZU19HUERfTUZQSF9QRDEwTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTAgc2V0dGluZyBmb3IgQ0FOMF9SWEQgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxME1GUF9RRUkwX0IgICAgICAoMHgwYVVMPDxTWVNfR1BEX01GUEhfUEQxME1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEwIHNldHRpbmcgZm9yIFFFSTBfQiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTBNRlBfSU5UNyAgICAgICAgKDB4MGZVTDw8U1lTX0dQRF9NRlBIX1BEMTBNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMCBzZXR0aW5nIGZvciBJTlQ3ICAgICAgICovCisKKy8qIFBELjExIE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMU1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUEhfUEQxMU1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDExIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTFNRlBfRUJJX25DUzEgICAgKDB4MDJVTDw8U1lTX0dQRF9NRlBIX1BEMTFNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMSBzZXR0aW5nIGZvciBFQklfbkNTMSAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDExTUZQX1VBUlQxX1RYRCAgICgweDAzVUw8PFNZU19HUERfTUZQSF9QRDExTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTEgc2V0dGluZyBmb3IgVUFSVDFfVFhEICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMU1GUF9DQU4wX1RYRCAgICAoMHgwNFVMPDxTWVNfR1BEX01GUEhfUEQxMU1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDExIHNldHRpbmcgZm9yIENBTjBfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTFNRlBfUUVJMF9BICAgICAgKDB4MGFVTDw8U1lTX0dQRF9NRlBIX1BEMTFNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMSBzZXR0aW5nIGZvciBRRUkwX0EgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDExTUZQX0lOVDYgICAgICAgICgweDBmVUw8PFNZU19HUERfTUZQSF9QRDExTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTEgc2V0dGluZyBmb3IgSU5UNiAgICAgICAqLworCisvKiBQRC4xMiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTJNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQRF9NRlBIX1BEMTJNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEyTUZQX0VCSV9uQ1MwICAgICgweDAyVUw8PFNZU19HUERfTUZQSF9QRDEyTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgRUJJX25DUzAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMk1GUF9VQVJUMl9SWEQgICAoMHgwN1VMPDxTWVNfR1BEX01GUEhfUEQxMk1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEyIHNldHRpbmcgZm9yIFVBUlQyX1JYRCAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTJNRlBfQlBXTTBfQ0g1ICAgKDB4MDlVTDw8U1lTX0dQRF9NRlBIX1BEMTJNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBCUFdNMF9DSDUgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEyTUZQX1FFSTBfSU5ERVggICgweDBhVUw8PFNZU19HUERfTUZQSF9QRDEyTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgUUVJMF9JTkRFWCAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxMk1GUF9DTEtPICAgICAgICAoMHgwZFVMPDxTWVNfR1BEX01GUEhfUEQxMk1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEyIHNldHRpbmcgZm9yIENMS08gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTJNRlBfRUFEQzBfU1QgICAgKDB4MGVVTDw8U1lTX0dQRF9NRlBIX1BEMTJNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBFQURDMF9TVCAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEyTUZQX0lOVDUgICAgICAgICgweDBmVUw8PFNZU19HUERfTUZQSF9QRDEyTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTIgc2V0dGluZyBmb3IgSU5UNSAgICAgICAqLworCisvKiBQRC4xMyBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTNNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQRF9NRlBIX1BEMTNNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMyBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDEzTUZQX0VCSV9BRDEwICAgICgweDAyVUw8PFNZU19HUERfTUZQSF9QRDEzTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTMgc2V0dGluZyBmb3IgRUJJX0FEMTAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxM01GUF9TRDBfbkNEICAgICAoMHgwM1VMPDxTWVNfR1BEX01GUEhfUEQxM01GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDEzIHNldHRpbmcgZm9yIFNEMF9uQ0QgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTNNRlBfU1BJMF9JMlNNQ0xLICgweDA0VUw8PFNZU19HUERfTUZQSF9QRDEzTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTMgc2V0dGluZyBmb3IgU1BJMF9JMlNNQ0xLKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTNNRlBfU1BJMV9JMlNNQ0xLICgweDA1VUw8PFNZU19HUERfTUZQSF9QRDEzTUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTMgc2V0dGluZyBmb3IgU1BJMV9JMlNNQ0xLKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTNNRlBfU0MyX25DRCAgICAgKDB4MDdVTDw8U1lTX0dQRF9NRlBIX1BEMTNNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxMyBzZXR0aW5nIGZvciBTQzJfbkNEICAgICovCisKKy8qIFBELjE0IE1GUCAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxNE1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BEX01GUEhfUEQxNE1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTRNRlBfRUJJX25DUzAgICAgKDB4MDJVTDw8U1lTX0dQRF9NRlBIX1BEMTRNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBFQklfbkNTMCAgICovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDE0TUZQX1NQSTNfSTJTTUNMSyAoMHgwM1VMPDxTWVNfR1BEX01GUEhfUEQxNE1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIFNQSTNfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUERfTUZQSF9QRDE0TUZQX1NDMV9uQ0QgICAgICgweDA0VUw8PFNZU19HUERfTUZQSF9QRDE0TUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTQgc2V0dGluZyBmb3IgU0MxX25DRCAgICAqLworI2RlZmluZSBTWVNfR1BEX01GUEhfUEQxNE1GUF9VU0NJMF9DVEwwICAoMHgwNVVMPDxTWVNfR1BEX01GUEhfUEQxNE1GUF9Qb3MpLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDAgKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTRNRlBfU1BJMF9JMlNNQ0xLICgweDA2VUw8PFNZU19HUERfTUZQSF9QRDE0TUZQX1BvcykvKiE8IEdQRF9NRlBIIFBEMTQgc2V0dGluZyBmb3IgU1BJMF9JMlNNQ0xLKi8KKyNkZWZpbmUgU1lTX0dQRF9NRlBIX1BEMTRNRlBfRVBXTTBfQ0g0ICAgKDB4MGJVTDw8U1lTX0dQRF9NRlBIX1BEMTRNRlBfUG9zKS8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBFUFdNMF9DSDQgICovCisKKy8qIFBFLjAgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTBNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQTF9QRTBNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUwTUZQX0VCSV9BRDExICAgICAoMHgwMlVMPDxTWVNfR1BFX01GUExfUEUwTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgRUJJX0FEMTEgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFME1GUF9RU1BJMF9NT1NJMCAgKDB4MDNVTDw8U1lTX0dQRV9NRlBMX1BFME1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIFFTUEkwX01PU0kwICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTBNRlBfU0MyX0NMSyAgICAgICgweDA0VUw8PFNZU19HUEVfTUZQTF9QRTBNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBTQzJfQ0xLICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUwTUZQX0kyUzBfTUNMSyAgICAoMHgwNVVMPDxTWVNfR1BFX01GUExfUEUwTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgSTJTMF9NQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFME1GUF9TUEkxX01PU0kgICAgKDB4MDZVTDw8U1lTX0dQRV9NRlBMX1BFME1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIFNQSTFfTU9TSSAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTBNRlBfVUFSVDNfUlhEICAgICgweDA3VUw8PFNZU19HUEVfTUZQTF9QRTBNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBVQVJUM19SWEQgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUwTUZQX0kyQzFfU0RBICAgICAoMHgwOFVMPDxTWVNfR1BFX01GUExfUEUwTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgSTJDMV9TREEgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFME1GUF9VQVJUNF9uUlRTICAgKDB4MDlVTDw8U1lTX0dQRV9NRlBMX1BFME1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIFVBUlQ0X25SVFMgICovCisKKy8qIFBFLjEgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTFNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQTF9QRTFNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUxTUZQX0VCSV9BRDEwICAgICAoMHgwMlVMPDxTWVNfR1BFX01GUExfUEUxTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgRUJJX0FEMTAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMU1GUF9RU1BJMF9NSVNPMCAgKDB4MDNVTDw8U1lTX0dQRV9NRlBMX1BFMU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIFFTUEkwX01JU08wICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTFNRlBfU0MyX0RBVCAgICAgICgweDA0VUw8PFNZU19HUEVfTUZQTF9QRTFNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBTQzJfREFUICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUxTUZQX0kyUzBfQkNMSyAgICAoMHgwNVVMPDxTWVNfR1BFX01GUExfUEUxTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgSTJTMF9CQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMU1GUF9TUEkxX01JU08gICAgKDB4MDZVTDw8U1lTX0dQRV9NRlBMX1BFMU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIFNQSTFfTUlTTyAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTFNRlBfVUFSVDNfVFhEICAgICgweDA3VUw8PFNZU19HUEVfTUZQTF9QRTFNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBVQVJUM19UWEQgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUxTUZQX0kyQzFfU0NMICAgICAoMHgwOFVMPDxTWVNfR1BFX01GUExfUEUxTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgSTJDMV9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMU1GUF9VQVJUNF9uQ1RTICAgKDB4MDlVTDw8U1lTX0dQRV9NRlBMX1BFMU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIFVBUlQ0X25DVFMgICovCisKKy8qIFBFLjIgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTJNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQTF9QRTJNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUyTUZQX0VCSV9BTEUgICAgICAoMHgwMlVMPDxTWVNfR1BFX01GUExfUEUyTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgRUJJX0FMRSAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMk1GUF9TRDBfREFUMCAgICAgKDB4MDNVTDw8U1lTX0dQRV9NRlBMX1BFMk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIFNEMF9EQVQwICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTJNRlBfU1BJM19NT1NJICAgICgweDA1VUw8PFNZU19HUEVfTUZQTF9QRTJNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBTUEkzX01PU0kgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUyTUZQX1NDMF9DTEsgICAgICAoMHgwNlVMPDxTWVNfR1BFX01GUExfUEUyTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgU0MwX0NMSyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMk1GUF9VU0NJMF9DTEsgICAgKDB4MDdVTDw8U1lTX0dQRV9NRlBMX1BFMk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIFVTQ0kwX0NMSyAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTJNRlBfUUVJMF9CICAgICAgICgweDBiVUw8PFNZU19HUEVfTUZQTF9QRTJNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBRRUkwX0IgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUyTUZQX0VQV00wX0NINSAgICAoMHgwY1VMPDxTWVNfR1BFX01GUExfUEUyTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgRVBXTTBfQ0g1ICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFMk1GUF9CUFdNMF9DSDAgICAgKDB4MGRVTDw8U1lTX0dQRV9NRlBMX1BFMk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIEJQV00wX0NIMCAgICovCisKKy8qIFBFLjMgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTNNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQTF9QRTNNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUzTUZQX0VCSV9NQ0xLICAgICAoMHgwMlVMPDxTWVNfR1BFX01GUExfUEUzTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgRUJJX01DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFM01GUF9TRDBfREFUMSAgICAgKDB4MDNVTDw8U1lTX0dQRV9NRlBMX1BFM01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIFNEMF9EQVQxICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTNNRlBfU1BJM19NSVNPICAgICgweDA1VUw8PFNZU19HUEVfTUZQTF9QRTNNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBTUEkzX01JU08gICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUzTUZQX1NDMF9EQVQgICAgICAoMHgwNlVMPDxTWVNfR1BFX01GUExfUEUzTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgU0MwX0RBVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFM01GUF9VU0NJMF9EQVQwICAgKDB4MDdVTDw8U1lTX0dQRV9NRlBMX1BFM01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIFVTQ0kwX0RBVDAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTNNRlBfUUVJMF9BICAgICAgICgweDBiVUw8PFNZU19HUEVfTUZQTF9QRTNNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBRRUkwX0EgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEUzTUZQX0VQV00wX0NINCAgICAoMHgwY1VMPDxTWVNfR1BFX01GUExfUEUzTUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgRVBXTTBfQ0g0ICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFM01GUF9CUFdNMF9DSDEgICAgKDB4MGRVTDw8U1lTX0dQRV9NRlBMX1BFM01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIEJQV00wX0NIMSAgICovCisKKy8qIFBFLjQgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTRNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQTF9QRTRNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU0TUZQX0VCSV9uV1IgICAgICAoMHgwMlVMPDxTWVNfR1BFX01GUExfUEU0TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgRUJJX25XUiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNE1GUF9TRDBfREFUMiAgICAgKDB4MDNVTDw8U1lTX0dQRV9NRlBMX1BFNE1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIFNEMF9EQVQyICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTRNRlBfU1BJM19DTEsgICAgICgweDA1VUw8PFNZU19HUEVfTUZQTF9QRTRNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBTUEkzX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU0TUZQX1NDMF9SU1QgICAgICAoMHgwNlVMPDxTWVNfR1BFX01GUExfUEU0TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgU0MwX1JTVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNE1GUF9VU0NJMF9EQVQxICAgKDB4MDdVTDw8U1lTX0dQRV9NRlBMX1BFNE1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIFVTQ0kwX0RBVDEgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTRNRlBfUUVJMF9JTkRFWCAgICgweDBiVUw8PFNZU19HUEVfTUZQTF9QRTRNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBRRUkwX0lOREVYICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU0TUZQX0VQV00wX0NIMyAgICAoMHgwY1VMPDxTWVNfR1BFX01GUExfUEU0TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgRVBXTTBfQ0gzICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNE1GUF9CUFdNMF9DSDIgICAgKDB4MGRVTDw8U1lTX0dQRV9NRlBMX1BFNE1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIEJQV00wX0NIMiAgICovCisKKy8qIFBFLjUgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTVNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQTF9QRTVNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU1TUZQX0VCSV9uUkQgICAgICAoMHgwMlVMPDxTWVNfR1BFX01GUExfUEU1TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgRUJJX25SRCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNU1GUF9TRDBfREFUMyAgICAgKDB4MDNVTDw8U1lTX0dQRV9NRlBMX1BFNU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIFNEMF9EQVQzICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTVNRlBfU1BJM19TUyAgICAgICgweDA1VUw8PFNZU19HUEVfTUZQTF9QRTVNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBTUEkzX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU1TUZQX1NDMF9QV1IgICAgICAoMHgwNlVMPDxTWVNfR1BFX01GUExfUEU1TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgU0MwX1BXUiAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNU1GUF9VU0NJMF9DVEwxICAgKDB4MDdVTDw8U1lTX0dQRV9NRlBMX1BFNU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDEgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTVNRlBfUUVJMV9CICAgICAgICgweDBiVUw8PFNZU19HUEVfTUZQTF9QRTVNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBRRUkxX0IgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU1TUZQX0VQV00wX0NIMiAgICAoMHgwY1VMPDxTWVNfR1BFX01GUExfUEU1TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgRVBXTTBfQ0gyICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNU1GUF9CUFdNMF9DSDMgICAgKDB4MGRVTDw8U1lTX0dQRV9NRlBMX1BFNU1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIEJQV00wX0NIMyAgICovCisKKy8qIFBFLjYgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTZNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQTF9QRTZNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU2TUZQX1NEMF9DTEsgICAgICAoMHgwM1VMPDxTWVNfR1BFX01GUExfUEU2TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgU0QwX0NMSyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNk1GUF9TUEkzX0kyU01DTEsgKDB4MDVVTDw8U1lTX0dQRV9NRlBMX1BFNk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIFNQSTNfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTZNRlBfU0MwX25DRCAgICAgICgweDA2VUw8PFNZU19HUEVfTUZQTF9QRTZNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBTQzBfbkNEICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU2TUZQX1VTQ0kwX0NUTDAgICAoMHgwN1VMPDxTWVNfR1BFX01GUExfUEU2TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgVVNDSTBfQ1RMMCAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNk1GUF9VQVJUNV9SWEQgICAgKDB4MDhVTDw8U1lTX0dQRV9NRlBMX1BFNk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIFVBUlQ1X1JYRCAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTZNRlBfUUVJMV9BICAgICAgICgweDBiVUw8PFNZU19HUEVfTUZQTF9QRTZNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBRRUkxX0EgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU2TUZQX0VQV00wX0NIMSAgICAoMHgwY1VMPDxTWVNfR1BFX01GUExfUEU2TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgRVBXTTBfQ0gxICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFNk1GUF9CUFdNMF9DSDQgICAgKDB4MGRVTDw8U1lTX0dQRV9NRlBMX1BFNk1GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIEJQV00wX0NINCAgICovCisKKy8qIFBFLjcgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTdNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQTF9QRTdNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU3TUZQX1NEMF9DTUQgICAgICAoMHgwM1VMPDxTWVNfR1BFX01GUExfUEU3TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTcgc2V0dGluZyBmb3IgU0QwX0NNRCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFN01GUF9VQVJUNV9UWEQgICAgKDB4MDhVTDw8U1lTX0dQRV9NRlBMX1BFN01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU3IHNldHRpbmcgZm9yIFVBUlQ1X1RYRCAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQTF9QRTdNRlBfUUVJMV9JTkRFWCAgICgweDBiVUw8PFNZU19HUEVfTUZQTF9QRTdNRlBfUG9zKSAvKiE8IEdQRV9NRlBMIFBFNyBzZXR0aW5nIGZvciBRRUkxX0lOREVYICAqLworI2RlZmluZSBTWVNfR1BFX01GUExfUEU3TUZQX0VQV00wX0NIMCAgICAoMHgwY1VMPDxTWVNfR1BFX01GUExfUEU3TUZQX1BvcykgLyohPCBHUEVfTUZQTCBQRTcgc2V0dGluZyBmb3IgRVBXTTBfQ0gwICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBMX1BFN01GUF9CUFdNMF9DSDUgICAgKDB4MGRVTDw8U1lTX0dQRV9NRlBMX1BFN01GUF9Qb3MpIC8qITwgR1BFX01GUEwgUEU3IHNldHRpbmcgZm9yIEJQV00wX0NINSAgICovCisKKy8qIFBFLjggTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRThNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQSF9QRThNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU4TUZQX0VCSV9BRFIxMCAgICAoMHgwMlVMPDxTWVNfR1BFX01GUEhfUEU4TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgRUJJX0FEUjEwICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOE1GUF9JMlMwX0JDTEsgICAgKDB4MDRVTDw8U1lTX0dQRV9NRlBIX1BFOE1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIEkyUzBfQkNMSyAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRThNRlBfU1BJMl9DTEsgICAgICgweDA1VUw8PFNZU19HUEVfTUZQSF9QRThNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBTUEkyX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU4TUZQX1VTQ0kxX0NUTDEgICAoMHgwNlVMPDxTWVNfR1BFX01GUEhfUEU4TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgVVNDSTFfQ1RMMSAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOE1GUF9VQVJUMl9UWEQgICAgKDB4MDdVTDw8U1lTX0dQRV9NRlBIX1BFOE1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIFVBUlQyX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRThNRlBfRVBXTTBfQ0gwICAgICgweDBhVUw8PFNZU19HUEVfTUZQSF9QRThNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBFUFdNMF9DSDAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU4TUZQX0VQV00wX0JSQUtFMCAoMHgwYlVMPDxTWVNfR1BFX01GUEhfUEU4TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTggc2V0dGluZyBmb3IgRVBXTTBfQlJBS0UwKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOE1GUF9FQ0FQMF9JQzAgICAgKDB4MGNVTDw8U1lTX0dQRV9NRlBIX1BFOE1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIEVDQVAwX0lDMCAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRThNRlBfVFJBQ0VfREFUQTMgICgweDBlVUw8PFNZU19HUEVfTUZQSF9QRThNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBUUkFDRV9EQVRBMyAqLworCisvKiBQRS45IE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU5TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUEhfUEU5TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOU1GUF9FQklfQURSMTEgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBIX1BFOU1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIEVCSV9BRFIxMSAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTlNRlBfSTJTMF9NQ0xLICAgICgweDA0VUw8PFNZU19HUEVfTUZQSF9QRTlNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOSBzZXR0aW5nIGZvciBJMlMwX01DTEsgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU5TUZQX1NQSTJfTUlTTyAgICAoMHgwNVVMPDxTWVNfR1BFX01GUEhfUEU5TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgU1BJMl9NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOU1GUF9VU0NJMV9DVEwwICAgKDB4MDZVTDw8U1lTX0dQRV9NRlBIX1BFOU1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIFVTQ0kxX0NUTDAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTlNRlBfVUFSVDJfUlhEICAgICgweDA3VUw8PFNZU19HUEVfTUZQSF9QRTlNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOSBzZXR0aW5nIGZvciBVQVJUMl9SWEQgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU5TUZQX0VQV00wX0NIMSAgICAoMHgwYVVMPDxTWVNfR1BFX01GUEhfUEU5TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgRVBXTTBfQ0gxICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFOU1GUF9FUFdNMF9CUkFLRTEgKDB4MGJVTDw8U1lTX0dQRV9NRlBIX1BFOU1GUF9Qb3MpIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIEVQV00wX0JSQUtFMSovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTlNRlBfRUNBUDBfSUMxICAgICgweDBjVUw8PFNZU19HUEVfTUZQSF9QRTlNRlBfUG9zKSAvKiE8IEdQRV9NRlBIIFBFOSBzZXR0aW5nIGZvciBFQ0FQMF9JQzEgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEU5TUZQX1RSQUNFX0RBVEEyICAoMHgwZVVMPDxTWVNfR1BFX01GUEhfUEU5TUZQX1BvcykgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgVFJBQ0VfREFUQTIgKi8KKworLyogUEUuMTAgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEwTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQSF9QRTEwTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxME1GUF9FQklfQURSMTIgICAoMHgwMlVMPDxTWVNfR1BFX01GUEhfUEUxME1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIEVCSV9BRFIxMiAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTBNRlBfSTJTMF9ESSAgICAgKDB4MDRVTDw8U1lTX0dQRV9NRlBIX1BFMTBNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBJMlMwX0RJICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEwTUZQX1NQSTJfTU9TSSAgICgweDA1VUw8PFNZU19HUEVfTUZQSF9QRTEwTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgU1BJMl9NT1NJICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxME1GUF9VU0NJMV9EQVQwICAoMHgwNlVMPDxTWVNfR1BFX01GUEhfUEUxME1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIFVTQ0kxX0RBVDAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTBNRlBfVUFSVDNfVFhEICAgKDB4MDdVTDw8U1lTX0dQRV9NRlBIX1BFMTBNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBVQVJUM19UWEQgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEwTUZQX0VQV00wX0NIMiAgICgweDBhVUw8PFNZU19HUEVfTUZQSF9QRTEwTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgRVBXTTBfQ0gyICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxME1GUF9FUFdNMV9CUkFLRTAgKDB4MGJVTDw8U1lTX0dQRV9NRlBIX1BFMTBNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBFUFdNMV9CUkFLRTAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxME1GUF9FQ0FQMF9JQzIgICAoMHgwY1VMPDxTWVNfR1BFX01GUEhfUEUxME1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIEVDQVAwX0lDMiAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTBNRlBfVFJBQ0VfREFUQTEgKDB4MGVVTDw8U1lTX0dQRV9NRlBIX1BFMTBNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBUUkFDRV9EQVRBMSovCisKKy8qIFBFLjExIE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMU1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTFNRlBfRUJJX0FEUjEzICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBIX1BFMTFNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBFQklfQURSMTMgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTExTUZQX0kyUzBfRE8gICAgICgweDA0VUw8PFNZU19HUEVfTUZQSF9QRTExTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgSTJTMF9ETyAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMU1GUF9TUEkyX1NTICAgICAoMHgwNVVMPDxTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIFNQSTJfU1MgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTFNRlBfVVNDSTFfREFUMSAgKDB4MDZVTDw8U1lTX0dQRV9NRlBIX1BFMTFNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBVU0NJMV9EQVQxICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTExTUZQX1VBUlQzX1JYRCAgICgweDA3VUw8PFNZU19HUEVfTUZQSF9QRTExTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgVUFSVDNfUlhEICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMU1GUF9VQVJUMV9uQ1RTICAoMHgwOFVMPDxTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIFVBUlQxX25DVFMgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTFNRlBfRVBXTTBfQ0gzICAgKDB4MGFVTDw8U1lTX0dQRV9NRlBIX1BFMTFNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBFUFdNMF9DSDMgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTExTUZQX0VQV00xX0JSQUtFMSAoMHgwYlVMPDxTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIEVQV00xX0JSQUtFMSovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTExTUZQX0VDQVAxX0lDMiAgICgweDBkVUw8PFNZU19HUEVfTUZQSF9QRTExTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgRUNBUDFfSUMyICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMU1GUF9UUkFDRV9EQVRBMCAoMHgwZVVMPDxTWVNfR1BFX01GUEhfUEUxMU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIFRSQUNFX0RBVEEwKi8KKworLyogUEUuMTIgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEyTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQSF9QRTEyTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMk1GUF9FQklfQURSMTQgICAoMHgwMlVMPDxTWVNfR1BFX01GUEhfUEUxMk1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIEVCSV9BRFIxNCAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTJNRlBfSTJTMF9MUkNLICAgKDB4MDRVTDw8U1lTX0dQRV9NRlBIX1BFMTJNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBJMlMwX0xSQ0sgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEyTUZQX1NQSTJfSTJTTUNMSyAoMHgwNVVMPDxTWVNfR1BFX01GUEhfUEUxMk1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIFNQSTJfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEyTUZQX1VTQ0kxX0NMSyAgICgweDA2VUw8PFNZU19HUEVfTUZQSF9QRTEyTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgVVNDSTFfQ0xLICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMk1GUF9VQVJUMV9uUlRTICAoMHgwOFVMPDxTWVNfR1BFX01GUEhfUEUxMk1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIFVBUlQxX25SVFMgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTJNRlBfRVBXTTBfQ0g0ICAgKDB4MGFVTDw8U1lTX0dQRV9NRlBIX1BFMTJNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBFUFdNMF9DSDQgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEyTUZQX0VDQVAxX0lDMSAgICgweDBkVUw8PFNZU19HUEVfTUZQSF9QRTEyTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgRUNBUDFfSUMxICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxMk1GUF9UUkFDRV9DTEsgICAoMHgwZVVMPDxTWVNfR1BFX01GUEhfUEUxMk1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIFRSQUNFX0NMSyAgKi8KKworLyogUEUuMTMgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEzTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQSF9QRTEzTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxM01GUF9FQklfQURSMTUgICAoMHgwMlVMPDxTWVNfR1BFX01GUEhfUEUxM01GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIEVCSV9BRFIxNSAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTNNRlBfSTJDMF9TQ0wgICAgKDB4MDRVTDw8U1lTX0dQRV9NRlBIX1BFMTNNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBJMkMwX1NDTCAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEzTUZQX1VBUlQ0X25SVFMgICgweDA1VUw8PFNZU19HUEVfTUZQSF9QRTEzTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgVUFSVDRfblJUUyAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxM01GUF9VQVJUMV9UWEQgICAoMHgwOFVMPDxTWVNfR1BFX01GUEhfUEUxM01GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIFVBUlQxX1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTNNRlBfRVBXTTBfQ0g1ICAgKDB4MGFVTDw8U1lTX0dQRV9NRlBIX1BFMTNNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBFUFdNMF9DSDUgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTEzTUZQX0VQV00xX0NIMCAgICgweDBiVUw8PFNZU19HUEVfTUZQSF9QRTEzTUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgRVBXTTFfQ0gwICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxM01GUF9CUFdNMV9DSDUgICAoMHgwY1VMPDxTWVNfR1BFX01GUEhfUEUxM01GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIEJQV00xX0NINSAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTNNRlBfRUNBUDFfSUMwICAgKDB4MGRVTDw8U1lTX0dQRV9NRlBIX1BFMTNNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBFQ0FQMV9JQzAgICovCisKKy8qIFBFLjE0IE1GUCAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxNE1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BFX01GUEhfUEUxNE1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTE0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTRNRlBfRUJJX0FEOCAgICAgKDB4MDJVTDw8U1lTX0dQRV9NRlBIX1BFMTRNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxNCBzZXR0aW5nIGZvciBFQklfQUQ4ICAgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTE0TUZQX1VBUlQyX1RYRCAgICgweDAzVUw8PFNZU19HUEVfTUZQSF9QRTE0TUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTQgc2V0dGluZyBmb3IgVUFSVDJfVFhEICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxNE1GUF9DQU4wX1RYRCAgICAoMHgwNFVMPDxTWVNfR1BFX01GUEhfUEUxNE1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTE0IHNldHRpbmcgZm9yIENBTjBfVFhEICAgKi8KKworLyogUEUuMTUgTUZQICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTE1TUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEVfTUZQSF9QRTE1TUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTUgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BFX01GUEhfUEUxNU1GUF9FQklfQUQ5ICAgICAoMHgwMlVMPDxTWVNfR1BFX01GUEhfUEUxNU1GUF9Qb3MpLyohPCBHUEVfTUZQSCBQRTE1IHNldHRpbmcgZm9yIEVCSV9BRDkgICAgKi8KKyNkZWZpbmUgU1lTX0dQRV9NRlBIX1BFMTVNRlBfVUFSVDJfUlhEICAgKDB4MDNVTDw8U1lTX0dQRV9NRlBIX1BFMTVNRlBfUG9zKS8qITwgR1BFX01GUEggUEUxNSBzZXR0aW5nIGZvciBVQVJUMl9SWEQgICovCisjZGVmaW5lIFNZU19HUEVfTUZQSF9QRTE1TUZQX0NBTjBfUlhEICAgICgweDA0VUw8PFNZU19HUEVfTUZQSF9QRTE1TUZQX1BvcykvKiE8IEdQRV9NRlBIIFBFMTUgc2V0dGluZyBmb3IgQ0FOMF9SWEQgICAqLworCisvKiBQRi4wIE1GUCAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYwTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BGX01GUExfUEYwTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGME1GUF9VQVJUMV9UWEQgICAgKDB4MDJVTDw8U1lTX0dQRl9NRlBMX1BGME1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYwIHNldHRpbmcgZm9yIFVBUlQxX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjBNRlBfSTJDMV9TQ0wgICAgICgweDAzVUw8PFNZU19HUEZfTUZQTF9QRjBNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMCBzZXR0aW5nIGZvciBJMkMxX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYwTUZQX0JQV00xX0NIMCAgICAoMHgwY1VMPDxTWVNfR1BGX01GUExfUEYwTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjAgc2V0dGluZyBmb3IgQlBXTTFfQ0gwICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGME1GUF9JQ0VfREFUICAgICAgKDB4MGVVTDw8U1lTX0dQRl9NRlBMX1BGME1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYwIHNldHRpbmcgZm9yIElDRV9EQVQgICAgICovCisKKy8qIFBGLjEgTUZQICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjFNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEZfTUZQTF9QRjFNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYxTUZQX1VBUlQxX1JYRCAgICAoMHgwMlVMPDxTWVNfR1BGX01GUExfUEYxTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjEgc2V0dGluZyBmb3IgVUFSVDFfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMU1GUF9JMkMxX1NEQSAgICAgKDB4MDNVTDw8U1lTX0dQRl9NRlBMX1BGMU1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYxIHNldHRpbmcgZm9yIEkyQzFfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjFNRlBfQlBXTTFfQ0gxICAgICgweDBjVUw8PFNZU19HUEZfTUZQTF9QRjFNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMSBzZXR0aW5nIGZvciBCUFdNMV9DSDEgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYxTUZQX0lDRV9DTEsgICAgICAoMHgwZVVMPDxTWVNfR1BGX01GUExfUEYxTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjEgc2V0dGluZyBmb3IgSUNFX0NMSyAgICAgKi8KKworLyogUEYuMiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMk1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRl9NRlBMX1BGMk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYyIHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjJNRlBfRUJJX25DUzEgICAgICgweDAyVUw8PFNZU19HUEZfTUZQTF9QRjJNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBFQklfbkNTMSAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYyTUZQX1VBUlQwX1JYRCAgICAoMHgwM1VMPDxTWVNfR1BGX01GUExfUEYyTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjIgc2V0dGluZyBmb3IgVUFSVDBfUlhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMk1GUF9JMkMwX1NEQSAgICAgKDB4MDRVTDw8U1lTX0dQRl9NRlBMX1BGMk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYyIHNldHRpbmcgZm9yIEkyQzBfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjJNRlBfUVNQSTBfQ0xLICAgICgweDA1VUw8PFNZU19HUEZfTUZQTF9QRjJNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBRU1BJMF9DTEsgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYyTUZQX1hUMV9PVVQgICAgICAoMHgwYVVMPDxTWVNfR1BGX01GUExfUEYyTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjIgc2V0dGluZyBmb3IgWFQxX09VVCAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGMk1GUF9CUFdNMV9DSDEgICAgKDB4MGJVTDw8U1lTX0dQRl9NRlBMX1BGMk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYyIHNldHRpbmcgZm9yIEJQV00xX0NIMSAgICovCisKKy8qIFBGLjMgTUZQICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjNNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEZfTUZQTF9QRjNNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYzTUZQX0VCSV9uQ1MwICAgICAoMHgwMlVMPDxTWVNfR1BGX01GUExfUEYzTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjMgc2V0dGluZyBmb3IgRUJJX25DUzAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGM01GUF9VQVJUMF9UWEQgICAgKDB4MDNVTDw8U1lTX0dQRl9NRlBMX1BGM01GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYzIHNldHRpbmcgZm9yIFVBUlQwX1RYRCAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjNNRlBfSTJDMF9TQ0wgICAgICgweDA0VUw8PFNZU19HUEZfTUZQTF9QRjNNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGMyBzZXR0aW5nIGZvciBJMkMwX1NDTCAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEYzTUZQX1hUMV9JTiAgICAgICAoMHgwYVVMPDxTWVNfR1BGX01GUExfUEYzTUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjMgc2V0dGluZyBmb3IgWFQxX0lOICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGM01GUF9CUFdNMV9DSDAgICAgKDB4MGJVTDw8U1lTX0dQRl9NRlBMX1BGM01GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEYzIHNldHRpbmcgZm9yIEJQV00xX0NIMCAgICovCisKKy8qIFBGLjQgTUZQICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjRNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEZfTUZQTF9QRjRNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNCBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY0TUZQX1VBUlQyX1RYRCAgICAoMHgwMlVMPDxTWVNfR1BGX01GUExfUEY0TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjQgc2V0dGluZyBmb3IgVUFSVDJfVFhEICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNE1GUF9VQVJUMl9uUlRTICAgKDB4MDRVTDw8U1lTX0dQRl9NRlBMX1BGNE1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY0IHNldHRpbmcgZm9yIFVBUlQyX25SVFMgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjRNRlBfQlBXTTBfQ0g1ICAgICgweDA4VUw8PFNZU19HUEZfTUZQTF9QRjRNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNCBzZXR0aW5nIGZvciBCUFdNMF9DSDUgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY0TUZQX1gzMl9PVVQgICAgICAoMHgwYVVMPDxTWVNfR1BGX01GUExfUEY0TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjQgc2V0dGluZyBmb3IgWDMyX09VVCAgICAgKi8KKworLyogUEYuNSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQRl9NRlBMX1BGNU1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY1IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjVNRlBfVUFSVDJfUlhEICAgICgweDAyVUw8PFNZU19HUEZfTUZQTF9QRjVNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNSBzZXR0aW5nIGZvciBVQVJUMl9SWEQgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY1TUZQX1VBUlQyX25DVFMgICAoMHgwNFVMPDxTWVNfR1BGX01GUExfUEY1TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjUgc2V0dGluZyBmb3IgVUFSVDJfbkNUUyAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNU1GUF9CUFdNMF9DSDQgICAgKDB4MDhVTDw8U1lTX0dQRl9NRlBMX1BGNU1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY1IHNldHRpbmcgZm9yIEJQV00wX0NINCAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjVNRlBfRVBXTTBfU1lOQ19PVVQgKDB4MDlVTDw8U1lTX0dQRl9NRlBMX1BGNU1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY1IHNldHRpbmcgZm9yIEVQV00wX1NZTkNfT1VUKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNU1GUF9YMzJfSU4gICAgICAgKDB4MGFVTDw8U1lTX0dQRl9NRlBMX1BGNU1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY1IHNldHRpbmcgZm9yIFgzMl9JTiAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjVNRlBfRUFEQzBfU1QgICAgICgweDBiVUw8PFNZU19HUEZfTUZQTF9QRjVNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNSBzZXR0aW5nIGZvciBFQURDMF9TVCAgICAqLworCisvKiBQRi42IE1GUCAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY2TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BGX01GUExfUEY2TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjYgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNk1GUF9FQklfQURSMTkgICAgKDB4MDJVTDw8U1lTX0dQRl9NRlBMX1BGNk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIEVCSV9BRFIxOSAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjZNRlBfU0MwX0NMSyAgICAgICgweDAzVUw8PFNZU19HUEZfTUZQTF9QRjZNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNiBzZXR0aW5nIGZvciBTQzBfQ0xLICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY2TUZQX0kyUzBfTFJDSyAgICAoMHgwNFVMPDxTWVNfR1BGX01GUExfUEY2TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjYgc2V0dGluZyBmb3IgSTJTMF9MUkNLICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNk1GUF9TUEkwX01PU0kgICAgKDB4MDVVTDw8U1lTX0dQRl9NRlBMX1BGNk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIFNQSTBfTU9TSSAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjZNRlBfVUFSVDRfUlhEICAgICgweDA2VUw8PFNZU19HUEZfTUZQTF9QRjZNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNiBzZXR0aW5nIGZvciBVQVJUNF9SWEQgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY2TUZQX0VCSV9uQ1MwICAgICAoMHgwN1VMPDxTWVNfR1BGX01GUExfUEY2TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjYgc2V0dGluZyBmb3IgRUJJX25DUzAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGNk1GUF9UQU1QRVIwICAgICAgKDB4MGFVTDw8U1lTX0dQRl9NRlBMX1BGNk1GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIFRBTVBFUjAgICAgICovCisKKy8qIFBGLjcgTUZQICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjdNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEZfTUZQTF9QRjdNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNyBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY3TUZQX0VCSV9BRFIxOCAgICAoMHgwMlVMPDxTWVNfR1BGX01GUExfUEY3TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjcgc2V0dGluZyBmb3IgRUJJX0FEUjE4ICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGN01GUF9TQzBfREFUICAgICAgKDB4MDNVTDw8U1lTX0dQRl9NRlBMX1BGN01GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY3IHNldHRpbmcgZm9yIFNDMF9EQVQgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjdNRlBfSTJTMF9ETyAgICAgICgweDA0VUw8PFNZU19HUEZfTUZQTF9QRjdNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNyBzZXR0aW5nIGZvciBJMlMwX0RPICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUExfUEY3TUZQX1NQSTBfTUlTTyAgICAoMHgwNVVMPDxTWVNfR1BGX01GUExfUEY3TUZQX1BvcykgLyohPCBHUEZfTUZQTCBQRjcgc2V0dGluZyBmb3IgU1BJMF9NSVNPICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBMX1BGN01GUF9VQVJUNF9UWEQgICAgKDB4MDZVTDw8U1lTX0dQRl9NRlBMX1BGN01GUF9Qb3MpIC8qITwgR1BGX01GUEwgUEY3IHNldHRpbmcgZm9yIFVBUlQ0X1RYRCAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQTF9QRjdNRlBfVEFNUEVSMSAgICAgICgweDBhVUw8PFNZU19HUEZfTUZQTF9QRjdNRlBfUG9zKSAvKiE8IEdQRl9NRlBMIFBGNyBzZXR0aW5nIGZvciBUQU1QRVIxICAgICAqLworCisvKiBQRi44IE1GUCAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY4TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BGX01GUEhfUEY4TUZQX1BvcykgLyohPCBHUEZfTUZQSCBQRjggc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOE1GUF9FQklfQURSMTcgICAgKDB4MDJVTDw8U1lTX0dQRl9NRlBIX1BGOE1GUF9Qb3MpIC8qITwgR1BGX01GUEggUEY4IHNldHRpbmcgZm9yIEVCSV9BRFIxNyAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjhNRlBfU0MwX1JTVCAgICAgICgweDAzVUw8PFNZU19HUEZfTUZQSF9QRjhNRlBfUG9zKSAvKiE8IEdQRl9NRlBIIFBGOCBzZXR0aW5nIGZvciBTQzBfUlNUICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY4TUZQX0kyUzBfREkgICAgICAoMHgwNFVMPDxTWVNfR1BGX01GUEhfUEY4TUZQX1BvcykgLyohPCBHUEZfTUZQSCBQRjggc2V0dGluZyBmb3IgSTJTMF9ESSAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOE1GUF9TUEkwX0NMSyAgICAgKDB4MDVVTDw8U1lTX0dQRl9NRlBIX1BGOE1GUF9Qb3MpIC8qITwgR1BGX01GUEggUEY4IHNldHRpbmcgZm9yIFNQSTBfQ0xLICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjhNRlBfVEFNUEVSMiAgICAgICgweDBhVUw8PFNZU19HUEZfTUZQSF9QRjhNRlBfUG9zKSAvKiE8IEdQRl9NRlBIIFBGOCBzZXR0aW5nIGZvciBUQU1QRVIyICAgICAqLworCisvKiBQRi45IE1GUCAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY5TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BGX01GUEhfUEY5TUZQX1BvcykgLyohPCBHUEZfTUZQSCBQRjkgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOU1GUF9FQklfQURSMTYgICAgKDB4MDJVTDw8U1lTX0dQRl9NRlBIX1BGOU1GUF9Qb3MpIC8qITwgR1BGX01GUEggUEY5IHNldHRpbmcgZm9yIEVCSV9BRFIxNiAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjlNRlBfU0MwX1BXUiAgICAgICgweDAzVUw8PFNZU19HUEZfTUZQSF9QRjlNRlBfUG9zKSAvKiE8IEdQRl9NRlBIIFBGOSBzZXR0aW5nIGZvciBTQzBfUFdSICAgICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEY5TUZQX0kyUzBfTUNMSyAgICAoMHgwNFVMPDxTWVNfR1BGX01GUEhfUEY5TUZQX1BvcykgLyohPCBHUEZfTUZQSCBQRjkgc2V0dGluZyBmb3IgSTJTMF9NQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGOU1GUF9TUEkwX1NTICAgICAgKDB4MDVVTDw8U1lTX0dQRl9NRlBIX1BGOU1GUF9Qb3MpIC8qITwgR1BGX01GUEggUEY5IHNldHRpbmcgZm9yIFNQSTBfU1MgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjlNRlBfVEFNUEVSMyAgICAgICgweDBhVUw8PFNZU19HUEZfTUZQSF9QRjlNRlBfUG9zKSAvKiE8IEdQRl9NRlBIIFBGOSBzZXR0aW5nIGZvciBUQU1QRVIzICAgICAqLworCisvKiBQRi4xMCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGMTBNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQRl9NRlBIX1BGMTBNRlBfUG9zKS8qITwgR1BGX01GUEggUEYxMCBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjEwTUZQX0VCSV9BRFIxNSAgICgweDAyVUw8PFNZU19HUEZfTUZQSF9QRjEwTUZQX1BvcykvKiE8IEdQRl9NRlBIIFBGMTAgc2V0dGluZyBmb3IgRUJJX0FEUjE1ICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEYxME1GUF9TQzBfbkNEICAgICAoMHgwM1VMPDxTWVNfR1BGX01GUEhfUEYxME1GUF9Qb3MpLyohPCBHUEZfTUZQSCBQRjEwIHNldHRpbmcgZm9yIFNDMF9uQ0QgICAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGMTBNRlBfSTJTMF9CQ0xLICAgKDB4MDRVTDw8U1lTX0dQRl9NRlBIX1BGMTBNRlBfUG9zKS8qITwgR1BGX01GUEggUEYxMCBzZXR0aW5nIGZvciBJMlMwX0JDTEsgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjEwTUZQX1NQSTBfSTJTTUNMSyAoMHgwNVVMPDxTWVNfR1BGX01GUEhfUEYxME1GUF9Qb3MpLyohPCBHUEZfTUZQSCBQRjEwIHNldHRpbmcgZm9yIFNQSTBfSTJTTUNMSyovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjEwTUZQX1RBTVBFUjQgICAgICgweDBhVUw8PFNZU19HUEZfTUZQSF9QRjEwTUZQX1BvcykvKiE8IEdQRl9NRlBIIFBGMTAgc2V0dGluZyBmb3IgVEFNUEVSNCAgICAqLworCisvKiBQRi4xMSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGMTFNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQRl9NRlBIX1BGMTFNRlBfUG9zKS8qITwgR1BGX01GUEggUEYxMSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjExTUZQX0VCSV9BRFIxNCAgICgweDAyVUw8PFNZU19HUEZfTUZQSF9QRjExTUZQX1BvcykvKiE8IEdQRl9NRlBIIFBGMTEgc2V0dGluZyBmb3IgRUJJX0FEUjE0ICAqLworI2RlZmluZSBTWVNfR1BGX01GUEhfUEYxMU1GUF9TUEkyX01PU0kgICAoMHgwM1VMPDxTWVNfR1BGX01GUEhfUEYxMU1GUF9Qb3MpLyohPCBHUEZfTUZQSCBQRjExIHNldHRpbmcgZm9yIFNQSTJfTU9TSSAgKi8KKyNkZWZpbmUgU1lTX0dQRl9NRlBIX1BGMTFNRlBfVEFNUEVSNSAgICAgKDB4MGFVTDw8U1lTX0dQRl9NRlBIX1BGMTFNRlBfUG9zKS8qITwgR1BGX01GUEggUEYxMSBzZXR0aW5nIGZvciBUQU1QRVI1ICAgICovCisjZGVmaW5lIFNZU19HUEZfTUZQSF9QRjExTUZQX1RNMyAgICAgICAgICgweDBkVUw8PFNZU19HUEZfTUZQSF9QRjExTUZQX1BvcykvKiE8IEdQRl9NRlBIIFBGMTEgc2V0dGluZyBmb3IgVE0zICAgICAgICAqLworCisvKiBQRy4yIE1GUCAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEcyTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BHX01GUExfUEcyTUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzIgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHMk1GUF9FQklfQURSMTEgICAgKDB4MDJVTDw8U1lTX0dQR19NRlBMX1BHMk1GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEcyIHNldHRpbmcgZm9yIEVCSV9BRFIxMSAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzJNRlBfU1BJMl9TUyAgICAgICgweDAzVUw8PFNZU19HUEdfTUZQTF9QRzJNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHMiBzZXR0aW5nIGZvciBTUEkyX1NTICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEcyTUZQX0kyQzBfU01CQUwgICAoMHgwNFVMPDxTWVNfR1BHX01GUExfUEcyTUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzIgc2V0dGluZyBmb3IgSTJDMF9TTUJBTCAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHMk1GUF9JMkMxX1NDTCAgICAgKDB4MDVVTDw8U1lTX0dQR19NRlBMX1BHMk1GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEcyIHNldHRpbmcgZm9yIEkyQzFfU0NMICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzJNRlBfVE0wICAgICAgICAgICgweDBkVUw8PFNZU19HUEdfTUZQTF9QRzJNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHMiBzZXR0aW5nIGZvciBUTTAgICAgICAgICAqLworCisvKiBQRy4zIE1GUCAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEczTUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BHX01GUExfUEczTUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHM01GUF9FQklfQURSMTIgICAgKDB4MDJVTDw8U1lTX0dQR19NRlBMX1BHM01GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEczIHNldHRpbmcgZm9yIEVCSV9BRFIxMiAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzNNRlBfU1BJMl9DTEsgICAgICgweDAzVUw8PFNZU19HUEdfTUZQTF9QRzNNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHMyBzZXR0aW5nIGZvciBTUEkyX0NMSyAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEczTUZQX0kyQzBfU01CU1VTICAoMHgwNFVMPDxTWVNfR1BHX01GUExfUEczTUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzMgc2V0dGluZyBmb3IgSTJDMF9TTUJTVVMgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHM01GUF9JMkMxX1NEQSAgICAgKDB4MDVVTDw8U1lTX0dQR19NRlBMX1BHM01GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEczIHNldHRpbmcgZm9yIEkyQzFfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzNNRlBfVE0xICAgICAgICAgICgweDBkVUw8PFNZU19HUEdfTUZQTF9QRzNNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHMyBzZXR0aW5nIGZvciBUTTEgICAgICAgICAqLworCisvKiBQRy40IE1GUCAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEc0TUZQX0dQSU8gICAgICAgICAoMHgwMFVMPDxTWVNfR1BHX01GUExfUEc0TUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzQgc2V0dGluZyBmb3IgR1BJTyAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBMX1BHNE1GUF9FQklfQURSMTMgICAgKDB4MDJVTDw8U1lTX0dQR19NRlBMX1BHNE1GUF9Qb3MpIC8qITwgR1BHX01GUEwgUEc0IHNldHRpbmcgZm9yIEVCSV9BRFIxMyAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQTF9QRzRNRlBfU1BJMl9NSVNPICAgICgweDAzVUw8PFNZU19HUEdfTUZQTF9QRzRNRlBfUG9zKSAvKiE8IEdQR19NRlBMIFBHNCBzZXR0aW5nIGZvciBTUEkyX01JU08gICAqLworI2RlZmluZSBTWVNfR1BHX01GUExfUEc0TUZQX1RNMiAgICAgICAgICAoMHgwZFVMPDxTWVNfR1BHX01GUExfUEc0TUZQX1BvcykgLyohPCBHUEdfTUZQTCBQRzQgc2V0dGluZyBmb3IgVE0yICAgICAgICAgKi8KKworLyogUEcuOSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHOU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQR19NRlBIX1BHOU1GUF9Qb3MpIC8qITwgR1BHX01GUEggUEc5IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzlNRlBfRUJJX0FEMCAgICAgICgweDAyVUw8PFNZU19HUEdfTUZQSF9QRzlNRlBfUG9zKSAvKiE8IEdQR19NRlBIIFBHOSBzZXR0aW5nIGZvciBFQklfQUQwICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEc5TUZQX0JQV00wX0NINSAgICAoMHgwY1VMPDxTWVNfR1BHX01GUEhfUEc5TUZQX1BvcykgLyohPCBHUEdfTUZQSCBQRzkgc2V0dGluZyBmb3IgQlBXTTBfQ0g1ICAgKi8KKworLyogUEcuMTAgTUZQICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzEwTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEdfTUZQSF9QRzEwTUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTAgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxME1GUF9FQklfQUQxICAgICAoMHgwMlVMPDxTWVNfR1BHX01GUEhfUEcxME1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzEwIHNldHRpbmcgZm9yIEVCSV9BRDEgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTBNRlBfQlBXTTBfQ0g0ICAgKDB4MGNVTDw8U1lTX0dQR19NRlBIX1BHMTBNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxMCBzZXR0aW5nIGZvciBCUFdNMF9DSDQgICovCisKKy8qIFBHLjExIE1GUCAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxMU1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BHX01GUEhfUEcxMU1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzExIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTFNRlBfRUJJX0FEMiAgICAgKDB4MDJVTDw8U1lTX0dQR19NRlBIX1BHMTFNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxMSBzZXR0aW5nIGZvciBFQklfQUQyICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzExTUZQX0JQV00wX0NIMyAgICgweDBjVUw8PFNZU19HUEdfTUZQSF9QRzExTUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTEgc2V0dGluZyBmb3IgQlBXTTBfQ0gzICAqLworCisvKiBQRy4xMiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTJNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQR19NRlBIX1BHMTJNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxMiBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzEyTUZQX0VCSV9BRDMgICAgICgweDAyVUw8PFNZU19HUEdfTUZQSF9QRzEyTUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTIgc2V0dGluZyBmb3IgRUJJX0FEMyAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxMk1GUF9CUFdNMF9DSDIgICAoMHgwY1VMPDxTWVNfR1BHX01GUEhfUEcxMk1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzEyIHNldHRpbmcgZm9yIEJQV00wX0NIMiAgKi8KKworLyogUEcuMTMgTUZQICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzEzTUZQX0dQSU8gICAgICAgICgweDAwVUw8PFNZU19HUEdfTUZQSF9QRzEzTUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTMgc2V0dGluZyBmb3IgR1BJTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxM01GUF9FQklfQUQ0ICAgICAoMHgwMlVMPDxTWVNfR1BHX01GUEhfUEcxM01GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzEzIHNldHRpbmcgZm9yIEVCSV9BRDQgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTNNRlBfQlBXTTBfQ0gxICAgKDB4MGNVTDw8U1lTX0dQR19NRlBIX1BHMTNNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxMyBzZXR0aW5nIGZvciBCUFdNMF9DSDEgICovCisKKy8qIFBHLjE0IE1GUCAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxNE1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BHX01GUEhfUEcxNE1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzE0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTRNRlBfRUJJX0FENSAgICAgKDB4MDJVTDw8U1lTX0dQR19NRlBIX1BHMTRNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxNCBzZXR0aW5nIGZvciBFQklfQUQ1ICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzE0TUZQX0JQV00wX0NIMCAgICgweDBjVUw8PFNZU19HUEdfTUZQSF9QRzE0TUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTQgc2V0dGluZyBmb3IgQlBXTTBfQ0gwICAqLworCisvKiBQRy4xNSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQR19NRlBIX1BHMTVNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQR19NRlBIX1BHMTVNRlBfUG9zKS8qITwgR1BHX01GUEggUEcxNSBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEdfTUZQSF9QRzE1TUZQX0NMS08gICAgICAgICgweDBlVUw8PFNZU19HUEdfTUZQSF9QRzE1TUZQX1BvcykvKiE8IEdQR19NRlBIIFBHMTUgc2V0dGluZyBmb3IgQ0xLTyAgICAgICAqLworI2RlZmluZSBTWVNfR1BHX01GUEhfUEcxNU1GUF9FQURDMF9TVCAgICAoMHgwZlVMPDxTWVNfR1BHX01GUEhfUEcxNU1GUF9Qb3MpLyohPCBHUEdfTUZQSCBQRzE1IHNldHRpbmcgZm9yIEVBREMwX1NUICAgKi8KKworLyogUEguNCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINE1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQSF9NRlBMX1BINE1GUF9Qb3MpIC8qITwgR1BIX01GUEwgUEg0IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDRNRlBfRUJJX0FEUjMgICAgICgweDAyVUw8PFNZU19HUEhfTUZQTF9QSDRNRlBfUG9zKSAvKiE8IEdQSF9NRlBMIFBINCBzZXR0aW5nIGZvciBFQklfQURSMyAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg0TUZQX1NQSTFfTUlTTyAgICAoMHgwM1VMPDxTWVNfR1BIX01GUExfUEg0TUZQX1BvcykgLyohPCBHUEhfTUZQTCBQSDQgc2V0dGluZyBmb3IgU1BJMV9NSVNPICAgKi8KKworLyogUEguNSBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINU1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQSF9NRlBMX1BINU1GUF9Qb3MpIC8qITwgR1BIX01GUEwgUEg1IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDVNRlBfRUJJX0FEUjIgICAgICgweDAyVUw8PFNZU19HUEhfTUZQTF9QSDVNRlBfUG9zKSAvKiE8IEdQSF9NRlBMIFBINSBzZXR0aW5nIGZvciBFQklfQURSMiAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg1TUZQX1NQSTFfTU9TSSAgICAoMHgwM1VMPDxTWVNfR1BIX01GUExfUEg1TUZQX1BvcykgLyohPCBHUEhfTUZQTCBQSDUgc2V0dGluZyBmb3IgU1BJMV9NT1NJICAgKi8KKworLyogUEguNiBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BINk1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQSF9NRlBMX1BINk1GUF9Qb3MpIC8qITwgR1BIX01GUEwgUEg2IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDZNRlBfRUJJX0FEUjEgICAgICgweDAyVUw8PFNZU19HUEhfTUZQTF9QSDZNRlBfUG9zKSAvKiE8IEdQSF9NRlBMIFBINiBzZXR0aW5nIGZvciBFQklfQURSMSAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg2TUZQX1NQSTFfQ0xLICAgICAoMHgwM1VMPDxTWVNfR1BIX01GUExfUEg2TUZQX1BvcykgLyohPCBHUEhfTUZQTCBQSDYgc2V0dGluZyBmb3IgU1BJMV9DTEsgICAgKi8KKworLyogUEguNyBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBMX1BIN01GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQSF9NRlBMX1BIN01GUF9Qb3MpIC8qITwgR1BIX01GUEwgUEg3IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQTF9QSDdNRlBfRUJJX0FEUjAgICAgICgweDAyVUw8PFNZU19HUEhfTUZQTF9QSDdNRlBfUG9zKSAvKiE8IEdQSF9NRlBMIFBINyBzZXR0aW5nIGZvciBFQklfQURSMCAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUExfUEg3TUZQX1NQSTFfU1MgICAgICAoMHgwM1VMPDxTWVNfR1BIX01GUExfUEg3TUZQX1BvcykgLyohPCBHUEhfTUZQTCBQSDcgc2V0dGluZyBmb3IgU1BJMV9TUyAgICAgKi8KKworLyogUEguOCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOE1GUF9HUElPICAgICAgICAgKDB4MDBVTDw8U1lTX0dQSF9NRlBIX1BIOE1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIEdQSU8gICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDhNRlBfRUJJX0FEMTIgICAgICgweDAyVUw8PFNZU19HUEhfTUZQSF9QSDhNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBFQklfQUQxMiAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg4TUZQX1FTUEkwX0NMSyAgICAoMHgwM1VMPDxTWVNfR1BIX01GUEhfUEg4TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgUVNQSTBfQ0xLICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOE1GUF9TQzJfUFdSICAgICAgKDB4MDRVTDw8U1lTX0dQSF9NRlBIX1BIOE1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIFNDMl9QV1IgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDhNRlBfSTJTMF9ESSAgICAgICgweDA1VUw8PFNZU19HUEhfTUZQSF9QSDhNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBJMlMwX0RJICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg4TUZQX1NQSTFfQ0xLICAgICAoMHgwNlVMPDxTWVNfR1BIX01GUEhfUEg4TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgU1BJMV9DTEsgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOE1GUF9VQVJUM19uUlRTICAgKDB4MDdVTDw8U1lTX0dQSF9NRlBIX1BIOE1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIFVBUlQzX25SVFMgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDhNRlBfSTJDMV9TTUJBTCAgICgweDA4VUw8PFNZU19HUEhfTUZQSF9QSDhNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBJMkMxX1NNQkFMICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg4TUZQX0kyQzJfU0NMICAgICAoMHgwOVVMPDxTWVNfR1BIX01GUEhfUEg4TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgSTJDMl9TQ0wgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOE1GUF9VQVJUMV9UWEQgICAgKDB4MGFVTDw8U1lTX0dQSF9NRlBIX1BIOE1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIFVBUlQxX1RYRCAgICovCisKKy8qIFBILjkgTUZQICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDlNRlBfR1BJTyAgICAgICAgICgweDAwVUw8PFNZU19HUEhfTUZQSF9QSDlNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBHUElPICAgICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg5TUZQX0VCSV9BRDEzICAgICAoMHgwMlVMPDxTWVNfR1BIX01GUEhfUEg5TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgRUJJX0FEMTMgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOU1GUF9RU1BJMF9TUyAgICAgKDB4MDNVTDw8U1lTX0dQSF9NRlBIX1BIOU1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIFFTUEkwX1NTICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDlNRlBfU0MyX1JTVCAgICAgICgweDA0VUw8PFNZU19HUEhfTUZQSF9QSDlNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBTQzJfUlNUICAgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg5TUZQX0kyUzBfRE8gICAgICAoMHgwNVVMPDxTWVNfR1BIX01GUEhfUEg5TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgSTJTMF9ETyAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOU1GUF9TUEkxX1NTICAgICAgKDB4MDZVTDw8U1lTX0dQSF9NRlBIX1BIOU1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIFNQSTFfU1MgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDlNRlBfVUFSVDNfbkNUUyAgICgweDA3VUw8PFNZU19HUEhfTUZQSF9QSDlNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBVQVJUM19uQ1RTICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEg5TUZQX0kyQzFfU01CU1VTICAoMHgwOFVMPDxTWVNfR1BIX01GUEhfUEg5TUZQX1BvcykgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgSTJDMV9TTUJTVVMgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIOU1GUF9JMkMyX1NEQSAgICAgKDB4MDlVTDw8U1lTX0dQSF9NRlBIX1BIOU1GUF9Qb3MpIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIEkyQzJfU0RBICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDlNRlBfVUFSVDFfUlhEICAgICgweDBhVUw8PFNZU19HUEhfTUZQSF9QSDlNRlBfUG9zKSAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBVQVJUMV9SWEQgICAqLworCisvKiBQSC4xMCBNRlAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTBNRlBfR1BJTyAgICAgICAgKDB4MDBVTDw8U1lTX0dQSF9NRlBIX1BIMTBNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBHUElPICAgICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDEwTUZQX0VCSV9BRDE0ICAgICgweDAyVUw8PFNZU19HUEhfTUZQSF9QSDEwTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgRUJJX0FEMTQgICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxME1GUF9RU1BJMF9NSVNPMSAoMHgwM1VMPDxTWVNfR1BIX01GUEhfUEgxME1GUF9Qb3MpLyohPCBHUEhfTUZQSCBQSDEwIHNldHRpbmcgZm9yIFFTUEkwX01JU08xKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTBNRlBfU0MyX25DRCAgICAgKDB4MDRVTDw8U1lTX0dQSF9NRlBIX1BIMTBNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBTQzJfbkNEICAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDEwTUZQX0kyUzBfTFJDSyAgICgweDA1VUw8PFNZU19HUEhfTUZQSF9QSDEwTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgSTJTMF9MUkNLICAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxME1GUF9TUEkxX0kyU01DTEsgKDB4MDZVTDw8U1lTX0dQSF9NRlBIX1BIMTBNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBTUEkxX0kyU01DTEsqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxME1GUF9VQVJUNF9UWEQgICAoMHgwN1VMPDxTWVNfR1BIX01GUEhfUEgxME1GUF9Qb3MpLyohPCBHUEhfTUZQSCBQSDEwIHNldHRpbmcgZm9yIFVBUlQ0X1RYRCAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTBNRlBfVUFSVDBfVFhEICAgKDB4MDhVTDw8U1lTX0dQSF9NRlBIX1BIMTBNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBVQVJUMF9UWEQgICovCisKKy8qIFBILjExIE1GUCAqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxMU1GUF9HUElPICAgICAgICAoMHgwMFVMPDxTWVNfR1BIX01GUEhfUEgxMU1GUF9Qb3MpLyohPCBHUEhfTUZQSCBQSDExIHNldHRpbmcgZm9yIEdQSU8gICAgICAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTFNRlBfRUJJX0FEMTUgICAgKDB4MDJVTDw8U1lTX0dQSF9NRlBIX1BIMTFNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMSBzZXR0aW5nIGZvciBFQklfQUQxNSAgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDExTUZQX1FTUEkwX01PU0kxICgweDAzVUw8PFNZU19HUEhfTUZQSF9QSDExTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTEgc2V0dGluZyBmb3IgUVNQSTBfTU9TSTEqLworI2RlZmluZSBTWVNfR1BIX01GUEhfUEgxMU1GUF9VQVJUNF9SWEQgICAoMHgwN1VMPDxTWVNfR1BIX01GUEhfUEgxMU1GUF9Qb3MpLyohPCBHUEhfTUZQSCBQSDExIHNldHRpbmcgZm9yIFVBUlQ0X1JYRCAgKi8KKyNkZWZpbmUgU1lTX0dQSF9NRlBIX1BIMTFNRlBfVUFSVDBfUlhEICAgKDB4MDhVTDw8U1lTX0dQSF9NRlBIX1BIMTFNRlBfUG9zKS8qITwgR1BIX01GUEggUEgxMSBzZXR0aW5nIGZvciBVQVJUMF9SWEQgICovCisjZGVmaW5lIFNZU19HUEhfTUZQSF9QSDExTUZQX0VQV00wX0NINSAgICgweDBiVUw8PFNZU19HUEhfTUZQSF9QSDExTUZQX1BvcykvKiE8IEdQSF9NRlBIIFBIMTEgc2V0dGluZyBmb3IgRVBXTTBfQ0g1ICAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBNdWx0aS1GdW5jdGlvbiBzZXR0aW5nIGNvbnN0YW50IGRlZmluaXRpb25zIGFiYnJldmlhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBBQ01QMF9OX1BCMyAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9BQ01QMF9OICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIEFDTVAwX04qLworI2RlZmluZSBBQ01QMF9PX1BCNyAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9BQ01QMF9PICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEFDTVAwX08qLworI2RlZmluZSBBQ01QMF9PX1BDMSAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9BQ01QMF9PICAgICAgICAgIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIEFDTVAwX08qLworI2RlZmluZSBBQ01QMF9PX1BDMTIgICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfQUNNUDBfTyAgICAgICAgIC8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBBQ01QMF9PKi8KKyNkZWZpbmUgQUNNUDBfUDBfUEExMSAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX0FDTVAwX1AwICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgQUNNUDBfUDAqLworI2RlZmluZSBBQ01QMF9QMV9QQjIgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9BQ01QMF9QMSAgICAgICAgIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIEFDTVAwX1AxKi8KKyNkZWZpbmUgQUNNUDBfUDJfUEIxMiAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX0FDTVAwX1AyICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgQUNNUDBfUDIqLworI2RlZmluZSBBQ01QMF9QM19QQjEzICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfQUNNUDBfUDMgICAgICAgIC8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBBQ01QMF9QMyovCisjZGVmaW5lIEFDTVAwX1dMQVRfUEE3ICAgICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX0FDTVAwX1dMQVQgICAgICAgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgQUNNUDBfV0xBVCovCisjZGVmaW5lIEFDTVAxX05fUEI1ICAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX0FDTVAxX04gICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgQUNNUDFfTiovCisjZGVmaW5lIEFDTVAxX09fUEI2ICAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX0FDTVAxX08gICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgQUNNUDFfTyovCisjZGVmaW5lIEFDTVAxX09fUEMxMSAgICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9BQ01QMV9PICAgICAgICAgLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIEFDTVAxX08qLworI2RlZmluZSBBQ01QMV9PX1BDMCAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9BQ01QMV9PICAgICAgICAgIC8qITwgR1BDX01GUEwgUEMwIHNldHRpbmcgZm9yIEFDTVAxX08qLworI2RlZmluZSBBQ01QMV9QMF9QQTEwICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfQUNNUDFfUDAgICAgICAgIC8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBBQ01QMV9QMCovCisjZGVmaW5lIEFDTVAxX1AxX1BCNCAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX0FDTVAxX1AxICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgQUNNUDFfUDEqLworI2RlZmluZSBBQ01QMV9QMl9QQjEyICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfQUNNUDFfUDIgICAgICAgIC8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBBQ01QMV9QMiovCisjZGVmaW5lIEFDTVAxX1AzX1BCMTMgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9BQ01QMV9QMyAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIEFDTVAxX1AzKi8KKyNkZWZpbmUgQUNNUDFfV0xBVF9QQTYgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfQUNNUDFfV0xBVCAgICAgICAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBBQ01QMV9XTEFUKi8KKyNkZWZpbmUgQlBXTTBfQ0gwX1BBMCAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfQlBXTTBfQ0gwICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBCUFdNMF9DSDAqLworI2RlZmluZSBCUFdNMF9DSDBfUEExMSAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfQlBXTTBfQ0gwICAgICAgIC8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBCUFdNMF9DSDAqLworI2RlZmluZSBCUFdNMF9DSDBfUEUyICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9CUFdNMF9DSDAgICAgICAgIC8qITwgR1BFX01GUEwgUEUyIHNldHRpbmcgZm9yIEJQV00wX0NIMCovCisjZGVmaW5lIEJQV00wX0NIMF9QRzE0ICAgICAgICAgICBTWVNfR1BHX01GUEhfUEcxNE1GUF9CUFdNMF9DSDAgICAgICAgLyohPCBHUEdfTUZQSCBQRzE0IHNldHRpbmcgZm9yIEJQV00wX0NIMCovCisjZGVmaW5lIEJQV00wX0NIMV9QQTEgICAgICAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX0JQV00wX0NIMSAgICAgICAgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgQlBXTTBfQ0gxKi8KKyNkZWZpbmUgQlBXTTBfQ0gxX1BFMyAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfQlBXTTBfQ0gxICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBCUFdNMF9DSDEqLworI2RlZmluZSBCUFdNMF9DSDFfUEcxMyAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTNNRlBfQlBXTTBfQ0gxICAgICAgIC8qITwgR1BHX01GUEggUEcxMyBzZXR0aW5nIGZvciBCUFdNMF9DSDEqLworI2RlZmluZSBCUFdNMF9DSDFfUEExMCAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfQlBXTTBfQ0gxICAgICAgIC8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBCUFdNMF9DSDEqLworI2RlZmluZSBCUFdNMF9DSDJfUEU0ICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9CUFdNMF9DSDIgICAgICAgIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIEJQV00wX0NIMiovCisjZGVmaW5lIEJQV00wX0NIMl9QRzEyICAgICAgICAgICBTWVNfR1BHX01GUEhfUEcxMk1GUF9CUFdNMF9DSDIgICAgICAgLyohPCBHUEdfTUZQSCBQRzEyIHNldHRpbmcgZm9yIEJQV00wX0NIMiovCisjZGVmaW5lIEJQV00wX0NIMl9QQTIgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX0JQV00wX0NIMiAgICAgICAgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgQlBXTTBfQ0gyKi8KKyNkZWZpbmUgQlBXTTBfQ0gyX1BBOSAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfQlBXTTBfQ0gyICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBCUFdNMF9DSDIqLworI2RlZmluZSBCUFdNMF9DSDNfUEcxMSAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTFNRlBfQlBXTTBfQ0gzICAgICAgIC8qITwgR1BHX01GUEggUEcxMSBzZXR0aW5nIGZvciBCUFdNMF9DSDMqLworI2RlZmluZSBCUFdNMF9DSDNfUEEzICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9CUFdNMF9DSDMgICAgICAgIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIEJQV00wX0NIMyovCisjZGVmaW5lIEJQV00wX0NIM19QQTggICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX0JQV00wX0NIMyAgICAgICAgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgQlBXTTBfQ0gzKi8KKyNkZWZpbmUgQlBXTTBfQ0gzX1BFNSAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfQlBXTTBfQ0gzICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBCUFdNMF9DSDMqLworI2RlZmluZSBCUFdNMF9DSDRfUEcxMCAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTBNRlBfQlBXTTBfQ0g0ICAgICAgIC8qITwgR1BHX01GUEggUEcxMCBzZXR0aW5nIGZvciBCUFdNMF9DSDQqLworI2RlZmluZSBCUFdNMF9DSDRfUEE0ICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9CUFdNMF9DSDQgICAgICAgIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIEJQV00wX0NINCovCisjZGVmaW5lIEJQV00wX0NINF9QQzEzICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxM01GUF9CUFdNMF9DSDQgICAgICAgLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIEJQV00wX0NINCovCisjZGVmaW5lIEJQV00wX0NINF9QRTYgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX0JQV00wX0NINCAgICAgICAgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgQlBXTTBfQ0g0Ki8KKyNkZWZpbmUgQlBXTTBfQ0g0X1BGNSAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjVNRlBfQlBXTTBfQ0g0ICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNSBzZXR0aW5nIGZvciBCUFdNMF9DSDQqLworI2RlZmluZSBCUFdNMF9DSDVfUEE1ICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9CUFdNMF9DSDUgICAgICAgIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIEJQV00wX0NINSovCisjZGVmaW5lIEJQV00wX0NINV9QRTcgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU3TUZQX0JQV00wX0NINSAgICAgICAgLyohPCBHUEVfTUZQTCBQRTcgc2V0dGluZyBmb3IgQlBXTTBfQ0g1Ki8KKyNkZWZpbmUgQlBXTTBfQ0g1X1BGNCAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjRNRlBfQlBXTTBfQ0g1ICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNCBzZXR0aW5nIGZvciBCUFdNMF9DSDUqLworI2RlZmluZSBCUFdNMF9DSDVfUEQxMiAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfQlBXTTBfQ0g1ICAgICAgIC8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBCUFdNMF9DSDUqLworI2RlZmluZSBCUFdNMF9DSDVfUEc5ICAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHOU1GUF9CUFdNMF9DSDUgICAgICAgIC8qITwgR1BHX01GUEggUEc5IHNldHRpbmcgZm9yIEJQV00wX0NINSovCisjZGVmaW5lIEJQV00xX0NIMF9QQjExICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9CUFdNMV9DSDAgICAgICAgLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIEJQV00xX0NIMCovCisjZGVmaW5lIEJQV00xX0NIMF9QQzcgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX0JQV00xX0NIMCAgICAgICAgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgQlBXTTFfQ0gwKi8KKyNkZWZpbmUgQlBXTTFfQ0gwX1BGMCAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjBNRlBfQlBXTTFfQ0gwICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMCBzZXR0aW5nIGZvciBCUFdNMV9DSDAqLworI2RlZmluZSBCUFdNMV9DSDBfUEYzICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGM01GUF9CUFdNMV9DSDAgICAgICAgIC8qITwgR1BGX01GUEwgUEYzIHNldHRpbmcgZm9yIEJQV00xX0NIMCovCisjZGVmaW5lIEJQV00xX0NIMV9QQzYgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX0JQV00xX0NIMSAgICAgICAgLyohPCBHUENfTUZQTCBQQzYgc2V0dGluZyBmb3IgQlBXTTFfQ0gxKi8KKyNkZWZpbmUgQlBXTTFfQ0gxX1BGMSAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjFNRlBfQlBXTTFfQ0gxICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMSBzZXR0aW5nIGZvciBCUFdNMV9DSDEqLworI2RlZmluZSBCUFdNMV9DSDFfUEYyICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGMk1GUF9CUFdNMV9DSDEgICAgICAgIC8qITwgR1BGX01GUEwgUEYyIHNldHRpbmcgZm9yIEJQV00xX0NIMSovCisjZGVmaW5lIEJQV00xX0NIMV9QQjEwICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9CUFdNMV9DSDEgICAgICAgLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIEJQV00xX0NIMSovCisjZGVmaW5lIEJQV00xX0NIMl9QQjkgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX0JQV00xX0NIMiAgICAgICAgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgQlBXTTFfQ0gyKi8KKyNkZWZpbmUgQlBXTTFfQ0gyX1BBNyAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfQlBXTTFfQ0gyICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBCUFdNMV9DSDIqLworI2RlZmluZSBCUFdNMV9DSDJfUEExMiAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfQlBXTTFfQ0gyICAgICAgIC8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBCUFdNMV9DSDIqLworI2RlZmluZSBCUFdNMV9DSDNfUEE2ICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9CUFdNMV9DSDMgICAgICAgIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIEJQV00xX0NIMyovCisjZGVmaW5lIEJQV00xX0NIM19QQTEzICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9CUFdNMV9DSDMgICAgICAgLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIEJQV00xX0NIMyovCisjZGVmaW5lIEJQV00xX0NIM19QQjggICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX0JQV00xX0NIMyAgICAgICAgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgQlBXTTFfQ0gzKi8KKyNkZWZpbmUgQlBXTTFfQ0g0X1BBMTQgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX0JQV00xX0NINCAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgQlBXTTFfQ0g0Ki8KKyNkZWZpbmUgQlBXTTFfQ0g0X1BDOCAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzhNRlBfQlBXTTFfQ0g0ICAgICAgICAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBCUFdNMV9DSDQqLworI2RlZmluZSBCUFdNMV9DSDRfUEI3ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9CUFdNMV9DSDQgICAgICAgIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEJQV00xX0NINCovCisjZGVmaW5lIEJQV00xX0NINV9QQTE1ICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNU1GUF9CUFdNMV9DSDUgICAgICAgLyohPCBHUEFfTUZQSCBQQTE1IHNldHRpbmcgZm9yIEJQV00xX0NINSovCisjZGVmaW5lIEJQV00xX0NINV9QQjYgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX0JQV00xX0NINSAgICAgICAgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgQlBXTTFfQ0g1Ki8KKyNkZWZpbmUgQlBXTTFfQ0g1X1BFMTMgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX0JQV00xX0NINSAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgQlBXTTFfQ0g1Ki8KKyNkZWZpbmUgQ0FOMF9SWERfUEExMyAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX0NBTjBfUlhEICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgQ0FOMF9SWEQqLworI2RlZmluZSBDQU4wX1JYRF9QRDEwICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTBNRlBfQ0FOMF9SWEQgICAgICAgIC8qITwgR1BEX01GUEggUEQxMCBzZXR0aW5nIGZvciBDQU4wX1JYRCovCisjZGVmaW5lIENBTjBfUlhEX1BBNCAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX0NBTjBfUlhEICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgQ0FOMF9SWEQqLworI2RlZmluZSBDQU4wX1JYRF9QQzQgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9DQU4wX1JYRCAgICAgICAgIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIENBTjBfUlhEKi8KKyNkZWZpbmUgQ0FOMF9SWERfUEIxMCAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX0NBTjBfUlhEICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgQ0FOMF9SWEQqLworI2RlZmluZSBDQU4wX1JYRF9QRTE1ICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTVNRlBfQ0FOMF9SWEQgICAgICAgIC8qITwgR1BFX01GUEggUEUxNSBzZXR0aW5nIGZvciBDQU4wX1JYRCovCisjZGVmaW5lIENBTjBfVFhEX1BEMTEgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxMU1GUF9DQU4wX1RYRCAgICAgICAgLyohPCBHUERfTUZQSCBQRDExIHNldHRpbmcgZm9yIENBTjBfVFhEKi8KKyNkZWZpbmUgQ0FOMF9UWERfUEM1ICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzVNRlBfQ0FOMF9UWEQgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNSBzZXR0aW5nIGZvciBDQU4wX1RYRCovCisjZGVmaW5lIENBTjBfVFhEX1BCMTEgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9DQU4wX1RYRCAgICAgICAgLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIENBTjBfVFhEKi8KKyNkZWZpbmUgQ0FOMF9UWERfUEExMiAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX0NBTjBfVFhEICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgQ0FOMF9UWEQqLworI2RlZmluZSBDQU4wX1RYRF9QRTE0ICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTRNRlBfQ0FOMF9UWEQgICAgICAgIC8qITwgR1BFX01GUEggUEUxNCBzZXR0aW5nIGZvciBDQU4wX1RYRCovCisjZGVmaW5lIENBTjBfVFhEX1BBNSAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX0NBTjBfVFhEICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgQ0FOMF9UWEQqLworI2RlZmluZSBDTEtPX1BDMTMgICAgICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfQ0xLTyAgICAgICAgICAgIC8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBDTEtPKi8KKyNkZWZpbmUgQ0xLT19QQjE0ICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX0NMS08gICAgICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgQ0xLTyovCisjZGVmaW5lIENMS09fUEQxMiAgICAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxMk1GUF9DTEtPICAgICAgICAgICAgLyohPCBHUERfTUZQSCBQRDEyIHNldHRpbmcgZm9yIENMS08qLworI2RlZmluZSBDTEtPX1BHMTUgICAgICAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTVNRlBfQ0xLTyAgICAgICAgICAgIC8qITwgR1BHX01GUEggUEcxNSBzZXR0aW5nIGZvciBDTEtPKi8KKyNkZWZpbmUgREFDMF9PVVRfUEIxMiAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX0RBQzBfT1VUICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgREFDMF9PVVQqLworI2RlZmluZSBEQUMwX1NUX1BBMTAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfREFDMF9TVCAgICAgICAgIC8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBEQUMwX1NUKi8KKyNkZWZpbmUgREFDMF9TVF9QQTAgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfREFDMF9TVCAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBEQUMwX1NUKi8KKyNkZWZpbmUgREFDMV9PVVRfUEIxMyAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX0RBQzFfT1VUICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgREFDMV9PVVQqLworI2RlZmluZSBEQUMxX1NUX1BBMSAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9EQUMxX1NUICAgICAgICAgIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIERBQzFfU1QqLworI2RlZmluZSBEQUMxX1NUX1BBMTEgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfREFDMV9TVCAgICAgICAgIC8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBEQUMxX1NUKi8KKyNkZWZpbmUgRUFEQzBfQ0gwX1BCMCAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfRUFEQzBfQ0gwICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBFQURDMF9DSDAqLworI2RlZmluZSBFQURDMF9DSDFfUEIxICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9FQURDMF9DSDEgICAgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEVBREMwX0NIMSovCisjZGVmaW5lIEVBREMwX0NIMTBfUEIxMCAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9FQURDMF9DSDEwICAgICAgLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIEVBREMwX0NIMTAqLworI2RlZmluZSBFQURDMF9DSDExX1BCMTEgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfRUFEQzBfQ0gxMSAgICAgIC8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBFQURDMF9DSDExKi8KKyNkZWZpbmUgRUFEQzBfQ0gxMl9QQjEyICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX0VBREMwX0NIMTIgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgRUFEQzBfQ0gxMiovCisjZGVmaW5lIEVBREMwX0NIMTNfUEIxMyAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9FQURDMF9DSDEzICAgICAgLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIEVBREMwX0NIMTMqLworI2RlZmluZSBFQURDMF9DSDE0X1BCMTQgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfRUFEQzBfQ0gxNCAgICAgIC8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBFQURDMF9DSDE0Ki8KKyNkZWZpbmUgRUFEQzBfQ0gxNV9QQjE1ICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX0VBREMwX0NIMTUgICAgICAvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgRUFEQzBfQ0gxNSovCisjZGVmaW5lIEVBREMwX0NIMl9QQjIgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX0VBREMwX0NIMiAgICAgICAgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgRUFEQzBfQ0gyKi8KKyNkZWZpbmUgRUFEQzBfQ0gzX1BCMyAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfRUFEQzBfQ0gzICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBFQURDMF9DSDMqLworI2RlZmluZSBFQURDMF9DSDRfUEI0ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9FQURDMF9DSDQgICAgICAgIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEVBREMwX0NINCovCisjZGVmaW5lIEVBREMwX0NINV9QQjUgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX0VBREMwX0NINSAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgRUFEQzBfQ0g1Ki8KKyNkZWZpbmUgRUFEQzBfQ0g2X1BCNiAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfRUFEQzBfQ0g2ICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBFQURDMF9DSDYqLworI2RlZmluZSBFQURDMF9DSDdfUEI3ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9FQURDMF9DSDcgICAgICAgIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEVBREMwX0NINyovCisjZGVmaW5lIEVBREMwX0NIOF9QQjggICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX0VBREMwX0NIOCAgICAgICAgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgRUFEQzBfQ0g4Ki8KKyNkZWZpbmUgRUFEQzBfQ0g5X1BCOSAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfRUFEQzBfQ0g5ICAgICAgICAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBFQURDMF9DSDkqLworI2RlZmluZSBFQURDMF9TVF9QRDEyICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfRUFEQzBfU1QgICAgICAgIC8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBFQURDMF9TVCovCisjZGVmaW5lIEVBREMwX1NUX1BGNSAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY1TUZQX0VBREMwX1NUICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjUgc2V0dGluZyBmb3IgRUFEQzBfU1QqLworI2RlZmluZSBFQURDMF9TVF9QQzEzICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfRUFEQzBfU1QgICAgICAgIC8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBFQURDMF9TVCovCisjZGVmaW5lIEVBREMwX1NUX1BHMTUgICAgICAgICAgICBTWVNfR1BHX01GUEhfUEcxNU1GUF9FQURDMF9TVCAgICAgICAgLyohPCBHUEdfTUZQSCBQRzE1IHNldHRpbmcgZm9yIEVBREMwX1NUKi8KKyNkZWZpbmUgRUJJX0FEMF9QRzkgICAgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzlNRlBfRUJJX0FEMCAgICAgICAgICAvKiE8IEdQR19NRlBIIFBHOSBzZXR0aW5nIGZvciBFQklfQUQwKi8KKyNkZWZpbmUgRUJJX0FEMF9QQzAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfRUJJX0FEMCAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBFQklfQUQwKi8KKyNkZWZpbmUgRUJJX0FEMV9QQzEgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfRUJJX0FEMSAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBFQklfQUQxKi8KKyNkZWZpbmUgRUJJX0FEMV9QRzEwICAgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzEwTUZQX0VCSV9BRDEgICAgICAgICAvKiE8IEdQR19NRlBIIFBHMTAgc2V0dGluZyBmb3IgRUJJX0FEMSovCisjZGVmaW5lIEVCSV9BRDEwX1BFMSAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX0VCSV9BRDEwICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgRUJJX0FEMTAqLworI2RlZmluZSBFQklfQUQxMF9QRDMgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9FQklfQUQxMCAgICAgICAgIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIEVCSV9BRDEwKi8KKyNkZWZpbmUgRUJJX0FEMTBfUEQxMyAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEzTUZQX0VCSV9BRDEwICAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTMgc2V0dGluZyBmb3IgRUJJX0FEMTAqLworI2RlZmluZSBFQklfQUQxMV9QRTAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9FQklfQUQxMSAgICAgICAgIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIEVCSV9BRDExKi8KKyNkZWZpbmUgRUJJX0FEMTFfUEQyICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDJNRlBfRUJJX0FEMTEgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMiBzZXR0aW5nIGZvciBFQklfQUQxMSovCisjZGVmaW5lIEVCSV9BRDEyX1BEMSAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQxTUZQX0VCSV9BRDEyICAgICAgICAgLyohPCBHUERfTUZQTCBQRDEgc2V0dGluZyBmb3IgRUJJX0FEMTIqLworI2RlZmluZSBFQklfQUQxMl9QQjE1ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfRUJJX0FEMTIgICAgICAgIC8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBFQklfQUQxMiovCisjZGVmaW5lIEVCSV9BRDEyX1BIOCAgICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX0VCSV9BRDEyICAgICAgICAgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgRUJJX0FEMTIqLworI2RlZmluZSBFQklfQUQxM19QRDAgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEME1GUF9FQklfQUQxMyAgICAgICAgIC8qITwgR1BEX01GUEwgUEQwIHNldHRpbmcgZm9yIEVCSV9BRDEzKi8KKyNkZWZpbmUgRUJJX0FEMTNfUEIxNCAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX0VCSV9BRDEzICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgRUJJX0FEMTMqLworI2RlZmluZSBFQklfQUQxM19QSDkgICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9FQklfQUQxMyAgICAgICAgIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIEVCSV9BRDEzKi8KKyNkZWZpbmUgRUJJX0FEMTRfUEIxMyAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX0VCSV9BRDE0ICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgRUJJX0FEMTQqLworI2RlZmluZSBFQklfQUQxNF9QSDEwICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfRUJJX0FEMTQgICAgICAgIC8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBFQklfQUQxNCovCisjZGVmaW5lIEVCSV9BRDE1X1BCMTIgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9FQklfQUQxNSAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIEVCSV9BRDE1Ki8KKyNkZWZpbmUgRUJJX0FEMTVfUEgxMSAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDExTUZQX0VCSV9BRDE1ICAgICAgICAvKiE8IEdQSF9NRlBIIFBIMTEgc2V0dGluZyBmb3IgRUJJX0FEMTUqLworI2RlZmluZSBFQklfQUQyX1BHMTEgICAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTFNRlBfRUJJX0FEMiAgICAgICAgIC8qITwgR1BHX01GUEggUEcxMSBzZXR0aW5nIGZvciBFQklfQUQyKi8KKyNkZWZpbmUgRUJJX0FEMl9QQzIgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfRUJJX0FEMiAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBFQklfQUQyKi8KKyNkZWZpbmUgRUJJX0FEM19QQzMgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfRUJJX0FEMyAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBFQklfQUQzKi8KKyNkZWZpbmUgRUJJX0FEM19QRzEyICAgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzEyTUZQX0VCSV9BRDMgICAgICAgICAvKiE8IEdQR19NRlBIIFBHMTIgc2V0dGluZyBmb3IgRUJJX0FEMyovCisjZGVmaW5lIEVCSV9BRDRfUEcxMyAgICAgICAgICAgICBTWVNfR1BHX01GUEhfUEcxM01GUF9FQklfQUQ0ICAgICAgICAgLyohPCBHUEdfTUZQSCBQRzEzIHNldHRpbmcgZm9yIEVCSV9BRDQqLworI2RlZmluZSBFQklfQUQ0X1BDNCAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9FQklfQUQ0ICAgICAgICAgIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIEVCSV9BRDQqLworI2RlZmluZSBFQklfQUQ1X1BHMTQgICAgICAgICAgICAgU1lTX0dQR19NRlBIX1BHMTRNRlBfRUJJX0FENSAgICAgICAgIC8qITwgR1BHX01GUEggUEcxNCBzZXR0aW5nIGZvciBFQklfQUQ1Ki8KKyNkZWZpbmUgRUJJX0FENV9QQzUgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzVNRlBfRUJJX0FENSAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNSBzZXR0aW5nIGZvciBFQklfQUQ1Ki8KKyNkZWZpbmUgRUJJX0FENl9QRDggICAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDhNRlBfRUJJX0FENiAgICAgICAgICAvKiE8IEdQRF9NRlBIIFBEOCBzZXR0aW5nIGZvciBFQklfQUQ2Ki8KKyNkZWZpbmUgRUJJX0FENl9QQTYgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfRUJJX0FENiAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBFQklfQUQ2Ki8KKyNkZWZpbmUgRUJJX0FEN19QQTcgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfRUJJX0FENyAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNyBzZXR0aW5nIGZvciBFQklfQUQ3Ki8KKyNkZWZpbmUgRUJJX0FEN19QRDkgICAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDlNRlBfRUJJX0FENyAgICAgICAgICAvKiE8IEdQRF9NRlBIIFBEOSBzZXR0aW5nIGZvciBFQklfQUQ3Ki8KKyNkZWZpbmUgRUJJX0FEOF9QQzYgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfRUJJX0FEOCAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBFQklfQUQ4Ki8KKyNkZWZpbmUgRUJJX0FEOF9QRTE0ICAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTE0TUZQX0VCSV9BRDggICAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTQgc2V0dGluZyBmb3IgRUJJX0FEOCovCisjZGVmaW5lIEVCSV9BRDlfUEUxNSAgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxNU1GUF9FQklfQUQ5ICAgICAgICAgLyohPCBHUEVfTUZQSCBQRTE1IHNldHRpbmcgZm9yIEVCSV9BRDkqLworI2RlZmluZSBFQklfQUQ5X1BDNyAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9FQklfQUQ5ICAgICAgICAgIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIEVCSV9BRDkqLworI2RlZmluZSBFQklfQURSMF9QQjUgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9FQklfQURSMCAgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIEVCSV9BRFIwKi8KKyNkZWZpbmUgRUJJX0FEUjBfUEg3ICAgICAgICAgICAgIFNZU19HUEhfTUZQTF9QSDdNRlBfRUJJX0FEUjAgICAgICAgICAvKiE8IEdQSF9NRlBMIFBINyBzZXR0aW5nIGZvciBFQklfQURSMCovCisjZGVmaW5lIEVCSV9BRFIxX1BINiAgICAgICAgICAgICBTWVNfR1BIX01GUExfUEg2TUZQX0VCSV9BRFIxICAgICAgICAgLyohPCBHUEhfTUZQTCBQSDYgc2V0dGluZyBmb3IgRUJJX0FEUjEqLworI2RlZmluZSBFQklfQURSMV9QQjQgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9FQklfQURSMSAgICAgICAgIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEVCSV9BRFIxKi8KKyNkZWZpbmUgRUJJX0FEUjEwX1BFOCAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfRUJJX0FEUjEwICAgICAgICAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBFQklfQURSMTAqLworI2RlZmluZSBFQklfQURSMTBfUEMxMyAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfRUJJX0FEUjEwICAgICAgIC8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBFQklfQURSMTAqLworI2RlZmluZSBFQklfQURSMTFfUEcyICAgICAgICAgICAgU1lTX0dQR19NRlBMX1BHMk1GUF9FQklfQURSMTEgICAgICAgIC8qITwgR1BHX01GUEwgUEcyIHNldHRpbmcgZm9yIEVCSV9BRFIxMSovCisjZGVmaW5lIEVCSV9BRFIxMV9QRTkgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX0VCSV9BRFIxMSAgICAgICAgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgRUJJX0FEUjExKi8KKyNkZWZpbmUgRUJJX0FEUjEyX1BHMyAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzNNRlBfRUJJX0FEUjEyICAgICAgICAvKiE8IEdQR19NRlBMIFBHMyBzZXR0aW5nIGZvciBFQklfQURSMTIqLworI2RlZmluZSBFQklfQURSMTJfUEUxMCAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfRUJJX0FEUjEyICAgICAgIC8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBFQklfQURSMTIqLworI2RlZmluZSBFQklfQURSMTNfUEc0ICAgICAgICAgICAgU1lTX0dQR19NRlBMX1BHNE1GUF9FQklfQURSMTMgICAgICAgIC8qITwgR1BHX01GUEwgUEc0IHNldHRpbmcgZm9yIEVCSV9BRFIxMyovCisjZGVmaW5lIEVCSV9BRFIxM19QRTExICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9FQklfQURSMTMgICAgICAgLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIEVCSV9BRFIxMyovCisjZGVmaW5lIEVCSV9BRFIxNF9QRTEyICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9FQklfQURSMTQgICAgICAgLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIEVCSV9BRFIxNCovCisjZGVmaW5lIEVCSV9BRFIxNF9QRjExICAgICAgICAgICBTWVNfR1BGX01GUEhfUEYxMU1GUF9FQklfQURSMTQgICAgICAgLyohPCBHUEZfTUZQSCBQRjExIHNldHRpbmcgZm9yIEVCSV9BRFIxNCovCisjZGVmaW5lIEVCSV9BRFIxNV9QRjEwICAgICAgICAgICBTWVNfR1BGX01GUEhfUEYxME1GUF9FQklfQURSMTUgICAgICAgLyohPCBHUEZfTUZQSCBQRjEwIHNldHRpbmcgZm9yIEVCSV9BRFIxNSovCisjZGVmaW5lIEVCSV9BRFIxNV9QRTEzICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9FQklfQURSMTUgICAgICAgLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIEVCSV9BRFIxNSovCisjZGVmaW5lIEVCSV9BRFIxNl9QQjExICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9FQklfQURSMTYgICAgICAgLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIEVCSV9BRFIxNiovCisjZGVmaW5lIEVCSV9BRFIxNl9QRjkgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEY5TUZQX0VCSV9BRFIxNiAgICAgICAgLyohPCBHUEZfTUZQSCBQRjkgc2V0dGluZyBmb3IgRUJJX0FEUjE2Ki8KKyNkZWZpbmUgRUJJX0FEUjE2X1BDOCAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzhNRlBfRUJJX0FEUjE2ICAgICAgICAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBFQklfQURSMTYqLworI2RlZmluZSBFQklfQURSMTdfUEY4ICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOE1GUF9FQklfQURSMTcgICAgICAgIC8qITwgR1BGX01GUEggUEY4IHNldHRpbmcgZm9yIEVCSV9BRFIxNyovCisjZGVmaW5lIEVCSV9BRFIxN19QQjEwICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9FQklfQURSMTcgICAgICAgLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIEVCSV9BRFIxNyovCisjZGVmaW5lIEVCSV9BRFIxOF9QQjkgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX0VCSV9BRFIxOCAgICAgICAgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgRUJJX0FEUjE4Ki8KKyNkZWZpbmUgRUJJX0FEUjE4X1BGNyAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjdNRlBfRUJJX0FEUjE4ICAgICAgICAvKiE8IEdQRl9NRlBMIFBGNyBzZXR0aW5nIGZvciBFQklfQURSMTgqLworI2RlZmluZSBFQklfQURSMTlfUEY2ICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9FQklfQURSMTkgICAgICAgIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIEVCSV9BRFIxOSovCisjZGVmaW5lIEVCSV9BRFIxOV9QQjggICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX0VCSV9BRFIxOSAgICAgICAgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgRUJJX0FEUjE5Ki8KKyNkZWZpbmUgRUJJX0FEUjJfUEIzICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfRUJJX0FEUjIgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBFQklfQURSMiovCisjZGVmaW5lIEVCSV9BRFIyX1BINSAgICAgICAgICAgICBTWVNfR1BIX01GUExfUEg1TUZQX0VCSV9BRFIyICAgICAgICAgLyohPCBHUEhfTUZQTCBQSDUgc2V0dGluZyBmb3IgRUJJX0FEUjIqLworI2RlZmluZSBFQklfQURSM19QSDQgICAgICAgICAgICAgU1lTX0dQSF9NRlBMX1BINE1GUF9FQklfQURSMyAgICAgICAgIC8qITwgR1BIX01GUEwgUEg0IHNldHRpbmcgZm9yIEVCSV9BRFIzKi8KKyNkZWZpbmUgRUJJX0FEUjNfUEIyICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfRUJJX0FEUjMgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBFQklfQURSMyovCisjZGVmaW5lIEVCSV9BRFI0X1BDMTIgICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9FQklfQURSNCAgICAgICAgLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIEVCSV9BRFI0Ki8KKyNkZWZpbmUgRUJJX0FEUjVfUEMxMSAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzExTUZQX0VCSV9BRFI1ICAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgRUJJX0FEUjUqLworI2RlZmluZSBFQklfQURSNl9QQzEwICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTBNRlBfRUJJX0FEUjYgICAgICAgIC8qITwgR1BDX01GUEggUEMxMCBzZXR0aW5nIGZvciBFQklfQURSNiovCisjZGVmaW5lIEVCSV9BRFI3X1BDOSAgICAgICAgICAgICBTWVNfR1BDX01GUEhfUEM5TUZQX0VCSV9BRFI3ICAgICAgICAgLyohPCBHUENfTUZQSCBQQzkgc2V0dGluZyBmb3IgRUJJX0FEUjcqLworI2RlZmluZSBFQklfQURSOF9QQjEgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9FQklfQURSOCAgICAgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEVCSV9BRFI4Ki8KKyNkZWZpbmUgRUJJX0FEUjlfUEIwICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfRUJJX0FEUjkgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBFQklfQURSOSovCisjZGVmaW5lIEVCSV9BTEVfUEE4ICAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX0VCSV9BTEUgICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgRUJJX0FMRSovCisjZGVmaW5lIEVCSV9BTEVfUEUyICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX0VCSV9BTEUgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgRUJJX0FMRSovCisjZGVmaW5lIEVCSV9NQ0xLX1BFMyAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX0VCSV9NQ0xLICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgRUJJX01DTEsqLworI2RlZmluZSBFQklfTUNMS19QQTkgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9FQklfTUNMSyAgICAgICAgIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIEVCSV9NQ0xLKi8KKyNkZWZpbmUgRUJJX25DUzBfUEI3ICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfRUJJX25DUzAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBFQklfbkNTMCovCisjZGVmaW5lIEVCSV9uQ1MwX1BGNiAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY2TUZQX0VCSV9uQ1MwICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjYgc2V0dGluZyBmb3IgRUJJX25DUzAqLworI2RlZmluZSBFQklfbkNTMF9QRDEyICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfRUJJX25DUzAgICAgICAgIC8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBFQklfbkNTMCovCisjZGVmaW5lIEVCSV9uQ1MwX1BEMTQgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9FQklfbkNTMCAgICAgICAgLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIEVCSV9uQ1MwKi8KKyNkZWZpbmUgRUJJX25DUzBfUEYzICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjNNRlBfRUJJX25DUzAgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMyBzZXR0aW5nIGZvciBFQklfbkNTMCovCisjZGVmaW5lIEVCSV9uQ1MxX1BGMiAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYyTUZQX0VCSV9uQ1MxICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjIgc2V0dGluZyBmb3IgRUJJX25DUzEqLworI2RlZmluZSBFQklfbkNTMV9QRDExICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTFNRlBfRUJJX25DUzEgICAgICAgIC8qITwgR1BEX01GUEggUEQxMSBzZXR0aW5nIGZvciBFQklfbkNTMSovCisjZGVmaW5lIEVCSV9uQ1MxX1BCNiAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX0VCSV9uQ1MxICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjYgc2V0dGluZyBmb3IgRUJJX25DUzEqLworI2RlZmluZSBFQklfbkNTMl9QRDEwICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTBNRlBfRUJJX25DUzIgICAgICAgIC8qITwgR1BEX01GUEggUEQxMCBzZXR0aW5nIGZvciBFQklfbkNTMiovCisjZGVmaW5lIEVCSV9uUkRfUEExMSAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9FQklfblJEICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIEVCSV9uUkQqLworI2RlZmluZSBFQklfblJEX1BFNSAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9FQklfblJEICAgICAgICAgIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIEVCSV9uUkQqLworI2RlZmluZSBFQklfbldSX1BBMTAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfRUJJX25XUiAgICAgICAgIC8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBFQklfbldSKi8KKyNkZWZpbmUgRUJJX25XUl9QRTQgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTRNRlBfRUJJX25XUiAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBFQklfbldSKi8KKyNkZWZpbmUgRUJJX25XUkhfUEI2ICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfRUJJX25XUkggICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBFQklfbldSSCovCisjZGVmaW5lIEVCSV9uV1JMX1BCNyAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX0VCSV9uV1JMICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjcgc2V0dGluZyBmb3IgRUJJX25XUkwqLworI2RlZmluZSBFQ0FQMF9JQzBfUEExMCAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfRUNBUDBfSUMwICAgICAgIC8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBFQ0FQMF9JQzAqLworI2RlZmluZSBFQ0FQMF9JQzBfUEU4ICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9FQ0FQMF9JQzAgICAgICAgIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIEVDQVAwX0lDMCovCisjZGVmaW5lIEVDQVAwX0lDMV9QRTkgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX0VDQVAwX0lDMSAgICAgICAgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgRUNBUDBfSUMxKi8KKyNkZWZpbmUgRUNBUDBfSUMxX1BBOSAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfRUNBUDBfSUMxICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBFQ0FQMF9JQzEqLworI2RlZmluZSBFQ0FQMF9JQzJfUEE4ICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9FQ0FQMF9JQzIgICAgICAgIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIEVDQVAwX0lDMiovCisjZGVmaW5lIEVDQVAwX0lDMl9QRTEwICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9FQ0FQMF9JQzIgICAgICAgLyohPCBHUEVfTUZQSCBQRTEwIHNldHRpbmcgZm9yIEVDQVAwX0lDMiovCisjZGVmaW5lIEVDQVAxX0lDMF9QQzEwICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxME1GUF9FQ0FQMV9JQzAgICAgICAgLyohPCBHUENfTUZQSCBQQzEwIHNldHRpbmcgZm9yIEVDQVAxX0lDMCovCisjZGVmaW5lIEVDQVAxX0lDMF9QRTEzICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9FQ0FQMV9JQzAgICAgICAgLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIEVDQVAxX0lDMCovCisjZGVmaW5lIEVDQVAxX0lDMV9QRTEyICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9FQ0FQMV9JQzEgICAgICAgLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIEVDQVAxX0lDMSovCisjZGVmaW5lIEVDQVAxX0lDMV9QQzExICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9FQ0FQMV9JQzEgICAgICAgLyohPCBHUENfTUZQSCBQQzExIHNldHRpbmcgZm9yIEVDQVAxX0lDMSovCisjZGVmaW5lIEVDQVAxX0lDMl9QRTExICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9FQ0FQMV9JQzIgICAgICAgLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIEVDQVAxX0lDMiovCisjZGVmaW5lIEVDQVAxX0lDMl9QQzEyICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9FQ0FQMV9JQzIgICAgICAgLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIEVDQVAxX0lDMiovCisjZGVmaW5lIEkyQzBfU0NMX1BCNSAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX0kyQzBfU0NMICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgSTJDMF9TQ0wqLworI2RlZmluZSBJMkMwX1NDTF9QQzEgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9JMkMwX1NDTCAgICAgICAgIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIEkyQzBfU0NMKi8KKyNkZWZpbmUgSTJDMF9TQ0xfUEYzICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjNNRlBfSTJDMF9TQ0wgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMyBzZXR0aW5nIGZvciBJMkMwX1NDTCovCisjZGVmaW5lIEkyQzBfU0NMX1BFMTMgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9JMkMwX1NDTCAgICAgICAgLyohPCBHUEVfTUZQSCBQRTEzIHNldHRpbmcgZm9yIEkyQzBfU0NMKi8KKyNkZWZpbmUgSTJDMF9TQ0xfUEQ3ICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDdNRlBfSTJDMF9TQ0wgICAgICAgICAvKiE8IEdQRF9NRlBMIFBENyBzZXR0aW5nIGZvciBJMkMwX1NDTCovCisjZGVmaW5lIEkyQzBfU0NMX1BBNSAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX0kyQzBfU0NMICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgSTJDMF9TQ0wqLworI2RlZmluZSBJMkMwX1NDTF9QQzEyICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfSTJDMF9TQ0wgICAgICAgIC8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBJMkMwX1NDTCovCisjZGVmaW5lIEkyQzBfU0RBX1BCNCAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX0kyQzBfU0RBICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgSTJDMF9TREEqLworI2RlZmluZSBJMkMwX1NEQV9QQzggICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDOE1GUF9JMkMwX1NEQSAgICAgICAgIC8qITwgR1BDX01GUEggUEM4IHNldHRpbmcgZm9yIEkyQzBfU0RBKi8KKyNkZWZpbmUgSTJDMF9TREFfUEMwICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfSTJDMF9TREEgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBJMkMwX1NEQSovCisjZGVmaW5lIEkyQzBfU0RBX1BENiAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ2TUZQX0kyQzBfU0RBICAgICAgICAgLyohPCBHUERfTUZQTCBQRDYgc2V0dGluZyBmb3IgSTJDMF9TREEqLworI2RlZmluZSBJMkMwX1NEQV9QQzExICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTFNRlBfSTJDMF9TREEgICAgICAgIC8qITwgR1BDX01GUEggUEMxMSBzZXR0aW5nIGZvciBJMkMwX1NEQSovCisjZGVmaW5lIEkyQzBfU0RBX1BBNCAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX0kyQzBfU0RBICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTQgc2V0dGluZyBmb3IgSTJDMF9TREEqLworI2RlZmluZSBJMkMwX1NEQV9QRjIgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGMk1GUF9JMkMwX1NEQSAgICAgICAgIC8qITwgR1BGX01GUEwgUEYyIHNldHRpbmcgZm9yIEkyQzBfU0RBKi8KKyNkZWZpbmUgSTJDMF9TTUJBTF9QRzIgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzJNRlBfSTJDMF9TTUJBTCAgICAgICAvKiE8IEdQR19NRlBMIFBHMiBzZXR0aW5nIGZvciBJMkMwX1NNQkFMKi8KKyNkZWZpbmUgSTJDMF9TTUJBTF9QQzMgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfSTJDMF9TTUJBTCAgICAgICAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBJMkMwX1NNQkFMKi8KKyNkZWZpbmUgSTJDMF9TTUJTVVNfUEMyICAgICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfSTJDMF9TTUJTVVMgICAgICAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBJMkMwX1NNQlNVUyovCisjZGVmaW5lIEkyQzBfU01CU1VTX1BHMyAgICAgICAgICBTWVNfR1BHX01GUExfUEczTUZQX0kyQzBfU01CU1VTICAgICAgLyohPCBHUEdfTUZQTCBQRzMgc2V0dGluZyBmb3IgSTJDMF9TTUJTVVMqLworI2RlZmluZSBJMkMxX1NDTF9QQTMgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9JMkMxX1NDTCAgICAgICAgIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIEkyQzFfU0NMKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEcyICAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzJNRlBfSTJDMV9TQ0wgICAgICAgICAvKiE8IEdQR19NRlBMIFBHMiBzZXR0aW5nIGZvciBJMkMxX1NDTCovCisjZGVmaW5lIEkyQzFfU0NMX1BCMSAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIxTUZQX0kyQzFfU0NMICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgSTJDMV9TQ0wqLworI2RlZmluZSBJMkMxX1NDTF9QQjExICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfSTJDMV9TQ0wgICAgICAgIC8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBJMkMxX1NDTCovCisjZGVmaW5lIEkyQzFfU0NMX1BENSAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ1TUZQX0kyQzFfU0NMICAgICAgICAgLyohPCBHUERfTUZQTCBQRDUgc2V0dGluZyBmb3IgSTJDMV9TQ0wqLworI2RlZmluZSBJMkMxX1NDTF9QQTEyICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfSTJDMV9TQ0wgICAgICAgIC8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBJMkMxX1NDTCovCisjZGVmaW5lIEkyQzFfU0NMX1BDNSAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM1TUZQX0kyQzFfU0NMICAgICAgICAgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgSTJDMV9TQ0wqLworI2RlZmluZSBJMkMxX1NDTF9QQTcgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9JMkMxX1NDTCAgICAgICAgIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIEkyQzFfU0NMKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEYwICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjBNRlBfSTJDMV9TQ0wgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMCBzZXR0aW5nIGZvciBJMkMxX1NDTCovCisjZGVmaW5lIEkyQzFfU0NMX1BFMSAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX0kyQzFfU0NMICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgSTJDMV9TQ0wqLworI2RlZmluZSBJMkMxX1NEQV9QQjAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9JMkMxX1NEQSAgICAgICAgIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIEkyQzFfU0RBKi8KKyNkZWZpbmUgSTJDMV9TREFfUEE2ICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfSTJDMV9TREEgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBJMkMxX1NEQSovCisjZGVmaW5lIEkyQzFfU0RBX1BBMTMgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9JMkMxX1NEQSAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIEkyQzFfU0RBKi8KKyNkZWZpbmUgSTJDMV9TREFfUEczICAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzNNRlBfSTJDMV9TREEgICAgICAgICAvKiE8IEdQR19NRlBMIFBHMyBzZXR0aW5nIGZvciBJMkMxX1NEQSovCisjZGVmaW5lIEkyQzFfU0RBX1BFMCAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX0kyQzFfU0RBICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgSTJDMV9TREEqLworI2RlZmluZSBJMkMxX1NEQV9QQzQgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9JMkMxX1NEQSAgICAgICAgIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIEkyQzFfU0RBKi8KKyNkZWZpbmUgSTJDMV9TREFfUEEyICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfSTJDMV9TREEgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBJMkMxX1NEQSovCisjZGVmaW5lIEkyQzFfU0RBX1BCMTAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9JMkMxX1NEQSAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEwIHNldHRpbmcgZm9yIEkyQzFfU0RBKi8KKyNkZWZpbmUgSTJDMV9TREFfUEYxICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjFNRlBfSTJDMV9TREEgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMSBzZXR0aW5nIGZvciBJMkMxX1NEQSovCisjZGVmaW5lIEkyQzFfU0RBX1BENCAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ0TUZQX0kyQzFfU0RBICAgICAgICAgLyohPCBHUERfTUZQTCBQRDQgc2V0dGluZyBmb3IgSTJDMV9TREEqLworI2RlZmluZSBJMkMxX1NNQkFMX1BCOSAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9JMkMxX1NNQkFMICAgICAgIC8qITwgR1BCX01GUEggUEI5IHNldHRpbmcgZm9yIEkyQzFfU01CQUwqLworI2RlZmluZSBJMkMxX1NNQkFMX1BDNyAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9JMkMxX1NNQkFMICAgICAgIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIEkyQzFfU01CQUwqLworI2RlZmluZSBJMkMxX1NNQkFMX1BIOCAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9JMkMxX1NNQkFMICAgICAgIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIEkyQzFfU01CQUwqLworI2RlZmluZSBJMkMxX1NNQlNVU19QSDkgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9JMkMxX1NNQlNVUyAgICAgIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIEkyQzFfU01CU1VTKi8KKyNkZWZpbmUgSTJDMV9TTUJTVVNfUEM2ICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfSTJDMV9TTUJTVVMgICAgICAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBJMkMxX1NNQlNVUyovCisjZGVmaW5lIEkyQzFfU01CU1VTX1BCOCAgICAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX0kyQzFfU01CU1VTICAgICAgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgSTJDMV9TTUJTVVMqLworI2RlZmluZSBJMkMyX1NDTF9QQjEzICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfSTJDMl9TQ0wgICAgICAgIC8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBJMkMyX1NDTCovCisjZGVmaW5lIEkyQzJfU0NMX1BBMTEgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9JMkMyX1NDTCAgICAgICAgLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIEkyQzJfU0NMKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEg4ICAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfSTJDMl9TQ0wgICAgICAgICAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBJMkMyX1NDTCovCisjZGVmaW5lIEkyQzJfU0NMX1BEOSAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQ5TUZQX0kyQzJfU0NMICAgICAgICAgLyohPCBHUERfTUZQSCBQRDkgc2V0dGluZyBmb3IgSTJDMl9TQ0wqLworI2RlZmluZSBJMkMyX1NDTF9QRDEgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEMU1GUF9JMkMyX1NDTCAgICAgICAgIC8qITwgR1BEX01GUEwgUEQxIHNldHRpbmcgZm9yIEkyQzJfU0NMKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEExNCAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX0kyQzJfU0NMICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgSTJDMl9TQ0wqLworI2RlZmluZSBJMkMyX1NDTF9QQTEgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9JMkMyX1NDTCAgICAgICAgIC8qITwgR1BBX01GUEwgUEExIHNldHRpbmcgZm9yIEkyQzJfU0NMKi8KKyNkZWZpbmUgSTJDMl9TREFfUEEwICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfSTJDMl9TREEgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBJMkMyX1NEQSovCisjZGVmaW5lIEkyQzJfU0RBX1BCMTIgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9JMkMyX1NEQSAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIEkyQzJfU0RBKi8KKyNkZWZpbmUgSTJDMl9TREFfUEExMCAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX0kyQzJfU0RBICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgSTJDMl9TREEqLworI2RlZmluZSBJMkMyX1NEQV9QQTE1ICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfSTJDMl9TREEgICAgICAgIC8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBJMkMyX1NEQSovCisjZGVmaW5lIEkyQzJfU0RBX1BIOSAgICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX0kyQzJfU0RBICAgICAgICAgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgSTJDMl9TREEqLworI2RlZmluZSBJMkMyX1NEQV9QRDggICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEOE1GUF9JMkMyX1NEQSAgICAgICAgIC8qITwgR1BEX01GUEggUEQ4IHNldHRpbmcgZm9yIEkyQzJfU0RBKi8KKyNkZWZpbmUgSTJDMl9TREFfUEQwICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfSTJDMl9TREEgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBJMkMyX1NEQSovCisjZGVmaW5lIEkyQzJfU01CQUxfUEIxNSAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9JMkMyX1NNQkFMICAgICAgLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIEkyQzJfU01CQUwqLworI2RlZmluZSBJMkMyX1NNQlNVU19QQjE0ICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfSTJDMl9TTUJTVVMgICAgIC8qITwgR1BCX01GUEggUEIxNCBzZXR0aW5nIGZvciBJMkMyX1NNQlNVUyovCisjZGVmaW5lIEkyUzBfQkNMS19QQTEyICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9JMlMwX0JDTEsgICAgICAgLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIEkyUzBfQkNMSyovCisjZGVmaW5lIEkyUzBfQkNMS19QQjUgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX0kyUzBfQkNMSyAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgSTJTMF9CQ0xLKi8KKyNkZWZpbmUgSTJTMF9CQ0xLX1BFOCAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfSTJTMF9CQ0xLICAgICAgICAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBJMlMwX0JDTEsqLworI2RlZmluZSBJMlMwX0JDTEtfUEUxICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9JMlMwX0JDTEsgICAgICAgIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIEkyUzBfQkNMSyovCisjZGVmaW5lIEkyUzBfQkNMS19QRjEwICAgICAgICAgICBTWVNfR1BGX01GUEhfUEYxME1GUF9JMlMwX0JDTEsgICAgICAgLyohPCBHUEZfTUZQSCBQRjEwIHNldHRpbmcgZm9yIEkyUzBfQkNMSyovCisjZGVmaW5lIEkyUzBfQkNMS19QQzQgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX0kyUzBfQkNMSyAgICAgICAgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgSTJTMF9CQ0xLKi8KKyNkZWZpbmUgSTJTMF9ESV9QRjggICAgICAgICAgICAgIFNZU19HUEZfTUZQSF9QRjhNRlBfSTJTMF9ESSAgICAgICAgICAvKiE8IEdQRl9NRlBIIFBGOCBzZXR0aW5nIGZvciBJMlMwX0RJKi8KKyNkZWZpbmUgSTJTMF9ESV9QQjMgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfSTJTMF9ESSAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMyBzZXR0aW5nIGZvciBJMlMwX0RJKi8KKyNkZWZpbmUgSTJTMF9ESV9QRTEwICAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX0kyUzBfREkgICAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgSTJTMF9ESSovCisjZGVmaW5lIEkyUzBfRElfUEExNCAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9JMlMwX0RJICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIEkyUzBfREkqLworI2RlZmluZSBJMlMwX0RJX1BIOCAgICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9JMlMwX0RJICAgICAgICAgIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIEkyUzBfREkqLworI2RlZmluZSBJMlMwX0RJX1BDMiAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9JMlMwX0RJICAgICAgICAgIC8qITwgR1BDX01GUEwgUEMyIHNldHRpbmcgZm9yIEkyUzBfREkqLworI2RlZmluZSBJMlMwX0RPX1BCMiAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9JMlMwX0RPICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIEkyUzBfRE8qLworI2RlZmluZSBJMlMwX0RPX1BIOSAgICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9JMlMwX0RPICAgICAgICAgIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIEkyUzBfRE8qLworI2RlZmluZSBJMlMwX0RPX1BGNyAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGN01GUF9JMlMwX0RPICAgICAgICAgIC8qITwgR1BGX01GUEwgUEY3IHNldHRpbmcgZm9yIEkyUzBfRE8qLworI2RlZmluZSBJMlMwX0RPX1BFMTEgICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfSTJTMF9ETyAgICAgICAgIC8qITwgR1BFX01GUEggUEUxMSBzZXR0aW5nIGZvciBJMlMwX0RPKi8KKyNkZWZpbmUgSTJTMF9ET19QQzEgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfSTJTMF9ETyAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBJMlMwX0RPKi8KKyNkZWZpbmUgSTJTMF9ET19QQTE1ICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX0kyUzBfRE8gICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgSTJTMF9ETyovCisjZGVmaW5lIEkyUzBfTFJDS19QRjYgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY2TUZQX0kyUzBfTFJDSyAgICAgICAgLyohPCBHUEZfTUZQTCBQRjYgc2V0dGluZyBmb3IgSTJTMF9MUkNLKi8KKyNkZWZpbmUgSTJTMF9MUkNLX1BFMTIgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX0kyUzBfTFJDSyAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgSTJTMF9MUkNLKi8KKyNkZWZpbmUgSTJTMF9MUkNLX1BDMCAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfSTJTMF9MUkNLICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBJMlMwX0xSQ0sqLworI2RlZmluZSBJMlMwX0xSQ0tfUEgxMCAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfSTJTMF9MUkNLICAgICAgIC8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBJMlMwX0xSQ0sqLworI2RlZmluZSBJMlMwX0xSQ0tfUEIxICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9JMlMwX0xSQ0sgICAgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEkyUzBfTFJDSyovCisjZGVmaW5lIEkyUzBfTUNMS19QRTkgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX0kyUzBfTUNMSyAgICAgICAgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgSTJTMF9NQ0xLKi8KKyNkZWZpbmUgSTJTMF9NQ0xLX1BCNCAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfSTJTMF9NQ0xLICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBJMlMwX01DTEsqLworI2RlZmluZSBJMlMwX01DTEtfUEMzICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDM01GUF9JMlMwX01DTEsgICAgICAgIC8qITwgR1BDX01GUEwgUEMzIHNldHRpbmcgZm9yIEkyUzBfTUNMSyovCisjZGVmaW5lIEkyUzBfTUNMS19QRTAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX0kyUzBfTUNMSyAgICAgICAgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgSTJTMF9NQ0xLKi8KKyNkZWZpbmUgSTJTMF9NQ0xLX1BBMTMgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX0kyUzBfTUNMSyAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgSTJTMF9NQ0xLKi8KKyNkZWZpbmUgSTJTMF9NQ0xLX1BGOSAgICAgICAgICAgIFNZU19HUEZfTUZQSF9QRjlNRlBfSTJTMF9NQ0xLICAgICAgICAvKiE8IEdQRl9NRlBIIFBGOSBzZXR0aW5nIGZvciBJMlMwX01DTEsqLworI2RlZmluZSBJQ0VfQ0xLX1BGMSAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGMU1GUF9JQ0VfQ0xLICAgICAgICAgIC8qITwgR1BGX01GUEwgUEYxIHNldHRpbmcgZm9yIElDRV9DTEsqLworI2RlZmluZSBJQ0VfREFUX1BGMCAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGME1GUF9JQ0VfREFUICAgICAgICAgIC8qITwgR1BGX01GUEwgUEYwIHNldHRpbmcgZm9yIElDRV9EQVQqLworI2RlZmluZSBJTlQwX1BCNSAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9JTlQwICAgICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIElOVDAqLworI2RlZmluZSBJTlQwX1BBNiAgICAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9JTlQwICAgICAgICAgICAgIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIElOVDAqLworI2RlZmluZSBJTlQxX1BCNCAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9JTlQxICAgICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIElOVDEqLworI2RlZmluZSBJTlQxX1BBNyAgICAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9JTlQxICAgICAgICAgICAgIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIElOVDEqLworI2RlZmluZSBJTlQyX1BCMyAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9JTlQyICAgICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIElOVDIqLworI2RlZmluZSBJTlQyX1BDNiAgICAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9JTlQyICAgICAgICAgICAgIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIElOVDIqLworI2RlZmluZSBJTlQzX1BDNyAgICAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9JTlQzICAgICAgICAgICAgIC8qITwgR1BDX01GUEwgUEM3IHNldHRpbmcgZm9yIElOVDMqLworI2RlZmluZSBJTlQzX1BCMiAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9JTlQzICAgICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIElOVDMqLworI2RlZmluZSBJTlQ0X1BCNiAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9JTlQ0ICAgICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIElOVDQqLworI2RlZmluZSBJTlQ0X1BBOCAgICAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9JTlQ0ICAgICAgICAgICAgIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIElOVDQqLworI2RlZmluZSBJTlQ1X1BCNyAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9JTlQ1ICAgICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIElOVDUqLworI2RlZmluZSBJTlQ1X1BEMTIgICAgICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfSU5UNSAgICAgICAgICAgIC8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBJTlQ1Ki8KKyNkZWZpbmUgSU5UNl9QRDExICAgICAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDExTUZQX0lOVDYgICAgICAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTEgc2V0dGluZyBmb3IgSU5UNiovCisjZGVmaW5lIElOVDZfUEI4ICAgICAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX0lOVDYgICAgICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgSU5UNiovCisjZGVmaW5lIElOVDdfUEI5ICAgICAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX0lOVDcgICAgICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgSU5UNyovCisjZGVmaW5lIElOVDdfUEQxMCAgICAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxME1GUF9JTlQ3ICAgICAgICAgICAgLyohPCBHUERfTUZQSCBQRDEwIHNldHRpbmcgZm9yIElOVDcqLworI2RlZmluZSBFUFdNMF9CUkFLRTBfUEU4ICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9FUFdNMF9CUkFLRTAgICAgIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIEVQV00wX0JSQUtFMCovCisjZGVmaW5lIEVQV00wX0JSQUtFMF9QQjEgICAgICAgICBTWVNfR1BCX01GUExfUEIxTUZQX0VQV00wX0JSQUtFMCAgICAgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgRVBXTTBfQlJBS0UwKi8KKyNkZWZpbmUgRVBXTTBfQlJBS0UxX1BCMCAgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfRVBXTTBfQlJBS0UxICAgICAvKiE8IEdQQl9NRlBMIFBCMCBzZXR0aW5nIGZvciBFUFdNMF9CUkFLRTEqLworI2RlZmluZSBFUFdNMF9CUkFLRTFfUEU5ICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9FUFdNMF9CUkFLRTEgICAgIC8qITwgR1BFX01GUEggUEU5IHNldHRpbmcgZm9yIEVQV00wX0JSQUtFMSovCisjZGVmaW5lIEVQV00wX0NIMF9QQTUgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX0VQV00wX0NIMCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTUgc2V0dGluZyBmb3IgRVBXTTBfQ0gwKi8KKyNkZWZpbmUgRVBXTTBfQ0gwX1BFNyAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTdNRlBfRVBXTTBfQ0gwICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNyBzZXR0aW5nIGZvciBFUFdNMF9DSDAqLworI2RlZmluZSBFUFdNMF9DSDBfUEU4ICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9FUFdNMF9DSDAgICAgICAgIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIEVQV00wX0NIMCovCisjZGVmaW5lIEVQV00wX0NIMF9QQjUgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX0VQV00wX0NIMCAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgRVBXTTBfQ0gwKi8KKyNkZWZpbmUgRVBXTTBfQ0gxX1BBNCAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfRVBXTTBfQ0gxICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBFUFdNMF9DSDEqLworI2RlZmluZSBFUFdNMF9DSDFfUEI0ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9FUFdNMF9DSDEgICAgICAgIC8qITwgR1BCX01GUEwgUEI0IHNldHRpbmcgZm9yIEVQV00wX0NIMSovCisjZGVmaW5lIEVQV00wX0NIMV9QRTkgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX0VQV00wX0NIMSAgICAgICAgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgRVBXTTBfQ0gxKi8KKyNkZWZpbmUgRVBXTTBfQ0gxX1BFNiAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfRVBXTTBfQ0gxICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBFUFdNMF9DSDEqLworI2RlZmluZSBFUFdNMF9DSDJfUEU1ICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9FUFdNMF9DSDIgICAgICAgIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIEVQV00wX0NIMiovCisjZGVmaW5lIEVQV00wX0NIMl9QQjMgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX0VQV00wX0NIMiAgICAgICAgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgRVBXTTBfQ0gyKi8KKyNkZWZpbmUgRVBXTTBfQ0gyX1BFMTAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX0VQV00wX0NIMiAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgRVBXTTBfQ0gyKi8KKyNkZWZpbmUgRVBXTTBfQ0gyX1BBMyAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfRVBXTTBfQ0gyICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBFUFdNMF9DSDIqLworI2RlZmluZSBFUFdNMF9DSDNfUEEyICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMk1GUF9FUFdNMF9DSDMgICAgICAgIC8qITwgR1BBX01GUEwgUEEyIHNldHRpbmcgZm9yIEVQV00wX0NIMyovCisjZGVmaW5lIEVQV00wX0NIM19QRTExICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9FUFdNMF9DSDMgICAgICAgLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIEVQV00wX0NIMyovCisjZGVmaW5lIEVQV00wX0NIM19QRTQgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX0VQV00wX0NIMyAgICAgICAgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgRVBXTTBfQ0gzKi8KKyNkZWZpbmUgRVBXTTBfQ0gzX1BCMiAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfRVBXTTBfQ0gzICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBFUFdNMF9DSDMqLworI2RlZmluZSBFUFdNMF9DSDRfUEQxNCAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTRNRlBfRVBXTTBfQ0g0ICAgICAgIC8qITwgR1BEX01GUEggUEQxNCBzZXR0aW5nIGZvciBFUFdNMF9DSDQqLworI2RlZmluZSBFUFdNMF9DSDRfUEIxICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9FUFdNMF9DSDQgICAgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIEVQV00wX0NINCovCisjZGVmaW5lIEVQV00wX0NINF9QRTMgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX0VQV00wX0NINCAgICAgICAgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgRVBXTTBfQ0g0Ki8KKyNkZWZpbmUgRVBXTTBfQ0g0X1BBMSAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfRVBXTTBfQ0g0ICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBFUFdNMF9DSDQqLworI2RlZmluZSBFUFdNMF9DSDRfUEUxMiAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfRVBXTTBfQ0g0ICAgICAgIC8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBFUFdNMF9DSDQqLworI2RlZmluZSBFUFdNMF9DSDVfUEIwICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9FUFdNMF9DSDUgICAgICAgIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIEVQV00wX0NINSovCisjZGVmaW5lIEVQV00wX0NINV9QRTIgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX0VQV00wX0NINSAgICAgICAgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgRVBXTTBfQ0g1Ki8KKyNkZWZpbmUgRVBXTTBfQ0g1X1BBMCAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfRVBXTTBfQ0g1ICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMCBzZXR0aW5nIGZvciBFUFdNMF9DSDUqLworI2RlZmluZSBFUFdNMF9DSDVfUEUxMyAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfRVBXTTBfQ0g1ICAgICAgIC8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBFUFdNMF9DSDUqLworI2RlZmluZSBFUFdNMF9DSDVfUEgxMSAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIMTFNRlBfRVBXTTBfQ0g1ICAgICAgIC8qITwgR1BIX01GUEggUEgxMSBzZXR0aW5nIGZvciBFUFdNMF9DSDUqLworI2RlZmluZSBFUFdNMF9TWU5DX0lOX1BBMTUgICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfRVBXTTBfU1lOQ19JTiAgIC8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBFUFdNMF9TWU5DX0lOKi8KKyNkZWZpbmUgRVBXTTBfU1lOQ19PVVRfUEY1ICAgICAgIFNZU19HUEZfTUZQTF9QRjVNRlBfRVBXTTBfU1lOQ19PVVQgICAvKiE8IEdQRl9NRlBMIFBGNSBzZXR0aW5nIGZvciBFUFdNMF9TWU5DX09VVCovCisjZGVmaW5lIEVQV00wX1NZTkNfT1VUX1BBMTEgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9FUFdNMF9TWU5DX09VVCAgLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIEVQV00wX1NZTkNfT1VUKi8KKyNkZWZpbmUgRVBXTTFfQlJBS0UwX1BCNyAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfRVBXTTFfQlJBS0UwICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBFUFdNMV9CUkFLRTAqLworI2RlZmluZSBFUFdNMV9CUkFLRTBfUEUxMCAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfRVBXTTFfQlJBS0UwICAgIC8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBFUFdNMV9CUkFLRTAqLworI2RlZmluZSBFUFdNMV9CUkFLRTFfUEI2ICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9FUFdNMV9CUkFLRTEgICAgIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEVQV00xX0JSQUtFMSovCisjZGVmaW5lIEVQV00xX0JSQUtFMV9QRTExICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9FUFdNMV9CUkFLRTEgICAgLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIEVQV00xX0JSQUtFMSovCisjZGVmaW5lIEVQV00xX0NIMF9QQzUgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM1TUZQX0VQV00xX0NIMCAgICAgICAgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgRVBXTTFfQ0gwKi8KKyNkZWZpbmUgRVBXTTFfQ0gwX1BFMTMgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX0VQV00xX0NIMCAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgRVBXTTFfQ0gwKi8KKyNkZWZpbmUgRVBXTTFfQ0gwX1BDMTIgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEyTUZQX0VQV00xX0NIMCAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTIgc2V0dGluZyBmb3IgRVBXTTFfQ0gwKi8KKyNkZWZpbmUgRVBXTTFfQ0gwX1BCMTUgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX0VQV00xX0NIMCAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgRVBXTTFfQ0gwKi8KKyNkZWZpbmUgRVBXTTFfQ0gxX1BCMTQgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX0VQV00xX0NIMSAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgRVBXTTFfQ0gxKi8KKyNkZWZpbmUgRVBXTTFfQ0gxX1BDMTEgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzExTUZQX0VQV00xX0NIMSAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgRVBXTTFfQ0gxKi8KKyNkZWZpbmUgRVBXTTFfQ0gxX1BDNCAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfRVBXTTFfQ0gxICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBFUFdNMV9DSDEqLworI2RlZmluZSBFUFdNMV9DSDFfUEM4ICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDOE1GUF9FUFdNMV9DSDEgICAgICAgIC8qITwgR1BDX01GUEggUEM4IHNldHRpbmcgZm9yIEVQV00xX0NIMSovCisjZGVmaW5lIEVQV00xX0NIMl9QQzcgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX0VQV00xX0NIMiAgICAgICAgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgRVBXTTFfQ0gyKi8KKyNkZWZpbmUgRVBXTTFfQ0gyX1BDMTAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEwTUZQX0VQV00xX0NIMiAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTAgc2V0dGluZyBmb3IgRVBXTTFfQ0gyKi8KKyNkZWZpbmUgRVBXTTFfQ0gyX1BDMyAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfRVBXTTFfQ0gyICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBFUFdNMV9DSDIqLworI2RlZmluZSBFUFdNMV9DSDJfUEIxMyAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfRVBXTTFfQ0gyICAgICAgIC8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBFUFdNMV9DSDIqLworI2RlZmluZSBFUFdNMV9DSDNfUEIxMiAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfRVBXTTFfQ0gzICAgICAgIC8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBFUFdNMV9DSDMqLworI2RlZmluZSBFUFdNMV9DSDNfUEM2ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9FUFdNMV9DSDMgICAgICAgIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIEVQV00xX0NIMyovCisjZGVmaW5lIEVQV00xX0NIM19QQzkgICAgICAgICAgICBTWVNfR1BDX01GUEhfUEM5TUZQX0VQV00xX0NIMyAgICAgICAgLyohPCBHUENfTUZQSCBQQzkgc2V0dGluZyBmb3IgRVBXTTFfQ0gzKi8KKyNkZWZpbmUgRVBXTTFfQ0gzX1BDMiAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfRVBXTTFfQ0gzICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBFUFdNMV9DSDMqLworI2RlZmluZSBFUFdNMV9DSDRfUEI3ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9FUFdNMV9DSDQgICAgICAgIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIEVQV00xX0NINCovCisjZGVmaW5lIEVQV00xX0NINF9QQjEgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIxTUZQX0VQV00xX0NINCAgICAgICAgLyohPCBHUEJfTUZQTCBQQjEgc2V0dGluZyBmb3IgRVBXTTFfQ0g0Ki8KKyNkZWZpbmUgRVBXTTFfQ0g0X1BDMSAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfRVBXTTFfQ0g0ICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMSBzZXR0aW5nIGZvciBFUFdNMV9DSDQqLworI2RlZmluZSBFUFdNMV9DSDRfUEE3ICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9FUFdNMV9DSDQgICAgICAgIC8qITwgR1BBX01GUEwgUEE3IHNldHRpbmcgZm9yIEVQV00xX0NINCovCisjZGVmaW5lIEVQV00xX0NINV9QQTYgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX0VQV00xX0NINSAgICAgICAgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgRVBXTTFfQ0g1Ki8KKyNkZWZpbmUgRVBXTTFfQ0g1X1BDMCAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfRVBXTTFfQ0g1ICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBFUFdNMV9DSDUqLworI2RlZmluZSBFUFdNMV9DSDVfUEI2ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9FUFdNMV9DSDUgICAgICAgIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIEVQV00xX0NINSovCisjZGVmaW5lIEVQV00xX0NINV9QQjAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIwTUZQX0VQV00xX0NINSAgICAgICAgLyohPCBHUEJfTUZQTCBQQjAgc2V0dGluZyBmb3IgRVBXTTFfQ0g1Ki8KKyNkZWZpbmUgUUVJMF9BX1BFMyAgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfUUVJMF9BICAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBRRUkwX0EqLworI2RlZmluZSBRRUkwX0FfUEE0ICAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9RRUkwX0EgICAgICAgICAgIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIFFFSTBfQSovCisjZGVmaW5lIFFFSTBfQV9QRDExICAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxMU1GUF9RRUkwX0EgICAgICAgICAgLyohPCBHUERfTUZQSCBQRDExIHNldHRpbmcgZm9yIFFFSTBfQSovCisjZGVmaW5lIFFFSTBfQl9QRDEwICAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxME1GUF9RRUkwX0IgICAgICAgICAgLyohPCBHUERfTUZQSCBQRDEwIHNldHRpbmcgZm9yIFFFSTBfQiovCisjZGVmaW5lIFFFSTBfQl9QQTMgICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX1FFSTBfQiAgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgUUVJMF9CKi8KKyNkZWZpbmUgUUVJMF9CX1BFMiAgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfUUVJMF9CICAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBRRUkwX0IqLworI2RlZmluZSBRRUkwX0lOREVYX1BFNCAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9RRUkwX0lOREVYICAgICAgIC8qITwgR1BFX01GUEwgUEU0IHNldHRpbmcgZm9yIFFFSTBfSU5ERVgqLworI2RlZmluZSBRRUkwX0lOREVYX1BBNSAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9RRUkwX0lOREVYICAgICAgIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIFFFSTBfSU5ERVgqLworI2RlZmluZSBRRUkwX0lOREVYX1BEMTIgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfUUVJMF9JTkRFWCAgICAgIC8qITwgR1BEX01GUEggUEQxMiBzZXR0aW5nIGZvciBRRUkwX0lOREVYKi8KKyNkZWZpbmUgUUVJMV9BX1BFNiAgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfUUVJMV9BICAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBRRUkxX0EqLworI2RlZmluZSBRRUkxX0FfUEExMyAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfUUVJMV9BICAgICAgICAgIC8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBRRUkxX0EqLworI2RlZmluZSBRRUkxX0FfUEE5ICAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9RRUkxX0EgICAgICAgICAgIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIFFFSTFfQSovCisjZGVmaW5lIFFFSTFfQl9QQTE0ICAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9RRUkxX0IgICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIFFFSTFfQiovCisjZGVmaW5lIFFFSTFfQl9QQTggICAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX1FFSTFfQiAgICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTggc2V0dGluZyBmb3IgUUVJMV9CKi8KKyNkZWZpbmUgUUVJMV9CX1BFNSAgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfUUVJMV9CICAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBRRUkxX0IqLworI2RlZmluZSBRRUkxX0lOREVYX1BFNyAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFN01GUF9RRUkxX0lOREVYICAgICAgIC8qITwgR1BFX01GUEwgUEU3IHNldHRpbmcgZm9yIFFFSTFfSU5ERVgqLworI2RlZmluZSBRRUkxX0lOREVYX1BBMTAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfUUVJMV9JTkRFWCAgICAgIC8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBRRUkxX0lOREVYKi8KKyNkZWZpbmUgUUVJMV9JTkRFWF9QQTEyICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX1FFSTFfSU5ERVggICAgICAvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgUUVJMV9JTkRFWCovCisjZGVmaW5lIFNDMF9DTEtfUEY2ICAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY2TUZQX1NDMF9DTEsgICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjYgc2V0dGluZyBmb3IgU0MwX0NMSyovCisjZGVmaW5lIFNDMF9DTEtfUEUyICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX1NDMF9DTEsgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgU0MwX0NMSyovCisjZGVmaW5lIFNDMF9DTEtfUEEwICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX1NDMF9DTEsgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgU0MwX0NMSyovCisjZGVmaW5lIFNDMF9DTEtfUEI1ICAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX1NDMF9DTEsgICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgU0MwX0NMSyovCisjZGVmaW5lIFNDMF9EQVRfUEUzICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX1NDMF9EQVQgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgU0MwX0RBVCovCisjZGVmaW5lIFNDMF9EQVRfUEI0ICAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX1NDMF9EQVQgICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgU0MwX0RBVCovCisjZGVmaW5lIFNDMF9EQVRfUEExICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX1NDMF9EQVQgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgU0MwX0RBVCovCisjZGVmaW5lIFNDMF9EQVRfUEY3ICAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY3TUZQX1NDMF9EQVQgICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjcgc2V0dGluZyBmb3IgU0MwX0RBVCovCisjZGVmaW5lIFNDMF9QV1JfUEU1ICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX1NDMF9QV1IgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgU0MwX1BXUiovCisjZGVmaW5lIFNDMF9QV1JfUEEzICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX1NDMF9QV1IgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgU0MwX1BXUiovCisjZGVmaW5lIFNDMF9QV1JfUEIyICAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX1NDMF9QV1IgICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgU0MwX1BXUiovCisjZGVmaW5lIFNDMF9QV1JfUEY5ICAgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEY5TUZQX1NDMF9QV1IgICAgICAgICAgLyohPCBHUEZfTUZQSCBQRjkgc2V0dGluZyBmb3IgU0MwX1BXUiovCisjZGVmaW5lIFNDMF9SU1RfUEY4ICAgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEY4TUZQX1NDMF9SU1QgICAgICAgICAgLyohPCBHUEZfTUZQSCBQRjggc2V0dGluZyBmb3IgU0MwX1JTVCovCisjZGVmaW5lIFNDMF9SU1RfUEU0ICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX1NDMF9SU1QgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgU0MwX1JTVCovCisjZGVmaW5lIFNDMF9SU1RfUEEyICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX1NDMF9SU1QgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgU0MwX1JTVCovCisjZGVmaW5lIFNDMF9SU1RfUEIzICAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX1NDMF9SU1QgICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgU0MwX1JTVCovCisjZGVmaW5lIFNDMF9uQ0RfUEU2ICAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX1NDMF9uQ0QgICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTYgc2V0dGluZyBmb3IgU0MwX25DRCovCisjZGVmaW5lIFNDMF9uQ0RfUEYxMCAgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEYxME1GUF9TQzBfbkNEICAgICAgICAgLyohPCBHUEZfTUZQSCBQRjEwIHNldHRpbmcgZm9yIFNDMF9uQ0QqLworI2RlZmluZSBTQzBfbkNEX1BBNCAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9TQzBfbkNEICAgICAgICAgIC8qITwgR1BBX01GUEwgUEE0IHNldHRpbmcgZm9yIFNDMF9uQ0QqLworI2RlZmluZSBTQzBfbkNEX1BDMTIgICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfU0MwX25DRCAgICAgICAgIC8qITwgR1BDX01GUEggUEMxMiBzZXR0aW5nIGZvciBTQzBfbkNEKi8KKyNkZWZpbmUgU0MxX0NMS19QQzAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfU0MxX0NMSyAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBTQzFfQ0xLKi8KKyNkZWZpbmUgU0MxX0NMS19QQjEyICAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX1NDMV9DTEsgICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgU0MxX0NMSyovCisjZGVmaW5lIFNDMV9DTEtfUEQ0ICAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ0TUZQX1NDMV9DTEsgICAgICAgICAgLyohPCBHUERfTUZQTCBQRDQgc2V0dGluZyBmb3IgU0MxX0NMSyovCisjZGVmaW5lIFNDMV9EQVRfUEQ1ICAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ1TUZQX1NDMV9EQVQgICAgICAgICAgLyohPCBHUERfTUZQTCBQRDUgc2V0dGluZyBmb3IgU0MxX0RBVCovCisjZGVmaW5lIFNDMV9EQVRfUEIxMyAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9TQzFfREFUICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIFNDMV9EQVQqLworI2RlZmluZSBTQzFfREFUX1BDMSAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9TQzFfREFUICAgICAgICAgIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIFNDMV9EQVQqLworI2RlZmluZSBTQzFfUFdSX1BCMTUgICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfU0MxX1BXUiAgICAgICAgIC8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBTQzFfUFdSKi8KKyNkZWZpbmUgU0MxX1BXUl9QQzMgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfU0MxX1BXUiAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBTQzFfUFdSKi8KKyNkZWZpbmUgU0MxX1BXUl9QRDcgICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDdNRlBfU0MxX1BXUiAgICAgICAgICAvKiE8IEdQRF9NRlBMIFBENyBzZXR0aW5nIGZvciBTQzFfUFdSKi8KKyNkZWZpbmUgU0MxX1JTVF9QRDYgICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDZNRlBfU0MxX1JTVCAgICAgICAgICAvKiE8IEdQRF9NRlBMIFBENiBzZXR0aW5nIGZvciBTQzFfUlNUKi8KKyNkZWZpbmUgU0MxX1JTVF9QQjE0ICAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX1NDMV9SU1QgICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgU0MxX1JTVCovCisjZGVmaW5lIFNDMV9SU1RfUEMyICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX1NDMV9SU1QgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgU0MxX1JTVCovCisjZGVmaW5lIFNDMV9uQ0RfUEQzICAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX1NDMV9uQ0QgICAgICAgICAgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgU0MxX25DRCovCisjZGVmaW5lIFNDMV9uQ0RfUEM0ICAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX1NDMV9uQ0QgICAgICAgICAgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgU0MxX25DRCovCisjZGVmaW5lIFNDMV9uQ0RfUEQxNCAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9TQzFfbkNEICAgICAgICAgLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIFNDMV9uQ0QqLworI2RlZmluZSBTQzJfQ0xLX1BEMCAgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEME1GUF9TQzJfQ0xLICAgICAgICAgIC8qITwgR1BEX01GUEwgUEQwIHNldHRpbmcgZm9yIFNDMl9DTEsqLworI2RlZmluZSBTQzJfQ0xLX1BBMTUgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfU0MyX0NMSyAgICAgICAgIC8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBTQzJfQ0xLKi8KKyNkZWZpbmUgU0MyX0NMS19QRTAgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTBNRlBfU0MyX0NMSyAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBTQzJfQ0xLKi8KKyNkZWZpbmUgU0MyX0NMS19QQTggICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfU0MyX0NMSyAgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOCBzZXR0aW5nIGZvciBTQzJfQ0xLKi8KKyNkZWZpbmUgU0MyX0NMS19QQTYgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfU0MyX0NMSyAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBTQzJfQ0xLKi8KKyNkZWZpbmUgU0MyX0RBVF9QRTEgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfU0MyX0RBVCAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBTQzJfREFUKi8KKyNkZWZpbmUgU0MyX0RBVF9QRDEgICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDFNRlBfU0MyX0RBVCAgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMSBzZXR0aW5nIGZvciBTQzJfREFUKi8KKyNkZWZpbmUgU0MyX0RBVF9QQTkgICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTlNRlBfU0MyX0RBVCAgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBOSBzZXR0aW5nIGZvciBTQzJfREFUKi8KKyNkZWZpbmUgU0MyX0RBVF9QQTE0ICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX1NDMl9EQVQgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgU0MyX0RBVCovCisjZGVmaW5lIFNDMl9EQVRfUEE3ICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX1NDMl9EQVQgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgU0MyX0RBVCovCisjZGVmaW5lIFNDMl9QV1JfUEQzICAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX1NDMl9QV1IgICAgICAgICAgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgU0MyX1BXUiovCisjZGVmaW5lIFNDMl9QV1JfUEExMSAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9TQzJfUFdSICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTExIHNldHRpbmcgZm9yIFNDMl9QV1IqLworI2RlZmluZSBTQzJfUFdSX1BBMTIgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfU0MyX1BXUiAgICAgICAgIC8qITwgR1BBX01GUEggUEExMiBzZXR0aW5nIGZvciBTQzJfUFdSKi8KKyNkZWZpbmUgU0MyX1BXUl9QSDggICAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfU0MyX1BXUiAgICAgICAgICAvKiE8IEdQSF9NRlBIIFBIOCBzZXR0aW5nIGZvciBTQzJfUFdSKi8KKyNkZWZpbmUgU0MyX1BXUl9QQzcgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfU0MyX1BXUiAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBTQzJfUFdSKi8KKyNkZWZpbmUgU0MyX1JTVF9QRDIgICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDJNRlBfU0MyX1JTVCAgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMiBzZXR0aW5nIGZvciBTQzJfUlNUKi8KKyNkZWZpbmUgU0MyX1JTVF9QQzYgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfU0MyX1JTVCAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBTQzJfUlNUKi8KKyNkZWZpbmUgU0MyX1JTVF9QSDkgICAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfU0MyX1JTVCAgICAgICAgICAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBTQzJfUlNUKi8KKyNkZWZpbmUgU0MyX1JTVF9QQTEwICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX1NDMl9SU1QgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgU0MyX1JTVCovCisjZGVmaW5lIFNDMl9SU1RfUEExMyAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9TQzJfUlNUICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEzIHNldHRpbmcgZm9yIFNDMl9SU1QqLworI2RlZmluZSBTQzJfbkNEX1BIMTAgICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfU0MyX25DRCAgICAgICAgIC8qITwgR1BIX01GUEggUEgxMCBzZXR0aW5nIGZvciBTQzJfbkNEKi8KKyNkZWZpbmUgU0MyX25DRF9QQTUgICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfU0MyX25DRCAgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBTQzJfbkNEKi8KKyNkZWZpbmUgU0MyX25DRF9QQzEzICAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX1NDMl9uQ0QgICAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTMgc2V0dGluZyBmb3IgU0MyX25DRCovCisjZGVmaW5lIFNDMl9uQ0RfUEQxMyAgICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxM01GUF9TQzJfbkNEICAgICAgICAgLyohPCBHUERfTUZQSCBQRDEzIHNldHRpbmcgZm9yIFNDMl9uQ0QqLworI2RlZmluZSBTRDBfQ0xLX1BFNiAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNk1GUF9TRDBfQ0xLICAgICAgICAgIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIFNEMF9DTEsqLworI2RlZmluZSBTRDBfQ0xLX1BCMSAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9TRDBfQ0xLICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIFNEMF9DTEsqLworI2RlZmluZSBTRDBfQ01EX1BCMCAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9TRDBfQ01EICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIFNEMF9DTUQqLworI2RlZmluZSBTRDBfQ01EX1BFNyAgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFN01GUF9TRDBfQ01EICAgICAgICAgIC8qITwgR1BFX01GUEwgUEU3IHNldHRpbmcgZm9yIFNEMF9DTUQqLworI2RlZmluZSBTRDBfREFUMF9QQjIgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9TRDBfREFUMCAgICAgICAgIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIFNEMF9EQVQwKi8KKyNkZWZpbmUgU0QwX0RBVDBfUEUyICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfU0QwX0RBVDAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBTRDBfREFUMCovCisjZGVmaW5lIFNEMF9EQVQxX1BFMyAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX1NEMF9EQVQxICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTMgc2V0dGluZyBmb3IgU0QwX0RBVDEqLworI2RlZmluZSBTRDBfREFUMV9QQjMgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9TRDBfREFUMSAgICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFNEMF9EQVQxKi8KKyNkZWZpbmUgU0QwX0RBVDJfUEI0ICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfU0QwX0RBVDIgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBTRDBfREFUMiovCisjZGVmaW5lIFNEMF9EQVQyX1BFNCAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX1NEMF9EQVQyICAgICAgICAgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgU0QwX0RBVDIqLworI2RlZmluZSBTRDBfREFUM19QRTUgICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9TRDBfREFUMyAgICAgICAgIC8qITwgR1BFX01GUEwgUEU1IHNldHRpbmcgZm9yIFNEMF9EQVQzKi8KKyNkZWZpbmUgU0QwX0RBVDNfUEI1ICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfU0QwX0RBVDMgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBTRDBfREFUMyovCisjZGVmaW5lIFNEMF9uQ0RfUEIxMiAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9TRDBfbkNEICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjEyIHNldHRpbmcgZm9yIFNEMF9uQ0QqLworI2RlZmluZSBTRDBfbkNEX1BEMTMgICAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTNNRlBfU0QwX25DRCAgICAgICAgIC8qITwgR1BEX01GUEggUEQxMyBzZXR0aW5nIGZvciBTRDBfbkNEKi8KKyNkZWZpbmUgUVNQSTBfQ0xLX1BGMiAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjJNRlBfUVNQSTBfQ0xLICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBRU1BJMF9DTEsqLworI2RlZmluZSBRU1BJMF9DTEtfUEg4ICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9RU1BJMF9DTEsgICAgICAgIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIFFTUEkwX0NMSyovCisjZGVmaW5lIFFTUEkwX0NMS19QQTIgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX1FTUEkwX0NMSyAgICAgICAgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgUVNQSTBfQ0xLKi8KKyNkZWZpbmUgUVNQSTBfQ0xLX1BDMiAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfUVNQSTBfQ0xLICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMiBzZXR0aW5nIGZvciBRU1BJMF9DTEsqLworI2RlZmluZSBRU1BJMF9NSVNPMF9QQzEgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9RU1BJMF9NSVNPMCAgICAgIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIFFTUEkwX01JU08wKi8KKyNkZWZpbmUgUVNQSTBfTUlTTzBfUEUxICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfUVNQSTBfTUlTTzAgICAgICAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBRU1BJMF9NSVNPMCovCisjZGVmaW5lIFFTUEkwX01JU08wX1BBMSAgICAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX1FTUEkwX01JU08wICAgICAgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgUVNQSTBfTUlTTzAqLworI2RlZmluZSBRU1BJMF9NSVNPMV9QQzUgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9RU1BJMF9NSVNPMSAgICAgIC8qITwgR1BDX01GUEwgUEM1IHNldHRpbmcgZm9yIFFTUEkwX01JU08xKi8KKyNkZWZpbmUgUVNQSTBfTUlTTzFfUEgxMCAgICAgICAgIFNZU19HUEhfTUZQSF9QSDEwTUZQX1FTUEkwX01JU08xICAgICAvKiE8IEdQSF9NRlBIIFBIMTAgc2V0dGluZyBmb3IgUVNQSTBfTUlTTzEqLworI2RlZmluZSBRU1BJMF9NSVNPMV9QQTUgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9RU1BJMF9NSVNPMSAgICAgIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIFFTUEkwX01JU08xKi8KKyNkZWZpbmUgUVNQSTBfTU9TSTBfUEMwICAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfUVNQSTBfTU9TSTAgICAgICAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMCovCisjZGVmaW5lIFFTUEkwX01PU0kwX1BFMCAgICAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX1FTUEkwX01PU0kwICAgICAgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgUVNQSTBfTU9TSTAqLworI2RlZmluZSBRU1BJMF9NT1NJMF9QQTAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9RU1BJMF9NT1NJMCAgICAgIC8qITwgR1BBX01GUEwgUEEwIHNldHRpbmcgZm9yIFFTUEkwX01PU0kwKi8KKyNkZWZpbmUgUVNQSTBfTU9TSTFfUEE0ICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfUVNQSTBfTU9TSTEgICAgICAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMSovCisjZGVmaW5lIFFTUEkwX01PU0kxX1BIMTEgICAgICAgICBTWVNfR1BIX01GUEhfUEgxMU1GUF9RU1BJMF9NT1NJMSAgICAgLyohPCBHUEhfTUZQSCBQSDExIHNldHRpbmcgZm9yIFFTUEkwX01PU0kxKi8KKyNkZWZpbmUgUVNQSTBfTU9TSTFfUEM0ICAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfUVNQSTBfTU9TSTEgICAgICAvKiE8IEdQQ19NRlBMIFBDNCBzZXR0aW5nIGZvciBRU1BJMF9NT1NJMSovCisjZGVmaW5lIFFTUEkwX1NTX1BIOSAgICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX1FTUEkwX1NTICAgICAgICAgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgUVNQSTBfU1MqLworI2RlZmluZSBRU1BJMF9TU19QQTMgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9RU1BJMF9TUyAgICAgICAgIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIFFTUEkwX1NTKi8KKyNkZWZpbmUgUVNQSTBfU1NfUEMzICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfUVNQSTBfU1MgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBRU1BJMF9TUyovCisjZGVmaW5lIFNQSTBfQ0xLX1BEMiAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX1NQSTBfQ0xLICAgICAgICAgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgU1BJMF9DTEsqLworI2RlZmluZSBTUEkwX0NMS19QRjggICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOE1GUF9TUEkwX0NMSyAgICAgICAgIC8qITwgR1BGX01GUEggUEY4IHNldHRpbmcgZm9yIFNQSTBfQ0xLKi8KKyNkZWZpbmUgU1BJMF9DTEtfUEEyICAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfU1BJMF9DTEsgICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBTUEkwX0NMSyovCisjZGVmaW5lIFNQSTBfQ0xLX1BCMTQgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9TUEkwX0NMSyAgICAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFNQSTBfQ0xLKi8KKyNkZWZpbmUgU1BJMF9JMlNNQ0xLX1BEMTMgICAgICAgIFNZU19HUERfTUZQSF9QRDEzTUZQX1NQSTBfSTJTTUNMSyAgICAvKiE8IEdQRF9NRlBIIFBEMTMgc2V0dGluZyBmb3IgU1BJMF9JMlNNQ0xLKi8KKyNkZWZpbmUgU1BJMF9JMlNNQ0xLX1BBNCAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfU1BJMF9JMlNNQ0xLICAgICAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBTUEkwX0kyU01DTEsqLworI2RlZmluZSBTUEkwX0kyU01DTEtfUEIxMSAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfU1BJMF9JMlNNQ0xLICAgIC8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBTUEkwX0kyU01DTEsqLworI2RlZmluZSBTUEkwX0kyU01DTEtfUEIwICAgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9TUEkwX0kyU01DTEsgICAgIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIFNQSTBfSTJTTUNMSyovCisjZGVmaW5lIFNQSTBfSTJTTUNMS19QRDE0ICAgICAgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9TUEkwX0kyU01DTEsgICAgLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIFNQSTBfSTJTTUNMSyovCisjZGVmaW5lIFNQSTBfSTJTTUNMS19QRjEwICAgICAgICBTWVNfR1BGX01GUEhfUEYxME1GUF9TUEkwX0kyU01DTEsgICAgLyohPCBHUEZfTUZQSCBQRjEwIHNldHRpbmcgZm9yIFNQSTBfSTJTTUNMSyovCisjZGVmaW5lIFNQSTBfTUlTT19QRjcgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY3TUZQX1NQSTBfTUlTTyAgICAgICAgLyohPCBHUEZfTUZQTCBQRjcgc2V0dGluZyBmb3IgU1BJMF9NSVNPKi8KKyNkZWZpbmUgU1BJMF9NSVNPX1BCMTMgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX1NQSTBfTUlTTyAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgU1BJMF9NSVNPKi8KKyNkZWZpbmUgU1BJMF9NSVNPX1BBMSAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfU1BJMF9NSVNPICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMSBzZXR0aW5nIGZvciBTUEkwX01JU08qLworI2RlZmluZSBTUEkwX01JU09fUEQxICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEMU1GUF9TUEkwX01JU08gICAgICAgIC8qITwgR1BEX01GUEwgUEQxIHNldHRpbmcgZm9yIFNQSTBfTUlTTyovCisjZGVmaW5lIFNQSTBfTU9TSV9QQTAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX1NQSTBfTU9TSSAgICAgICAgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgU1BJMF9NT1NJKi8KKyNkZWZpbmUgU1BJMF9NT1NJX1BCMTIgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX1NQSTBfTU9TSSAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgU1BJMF9NT1NJKi8KKyNkZWZpbmUgU1BJMF9NT1NJX1BEMCAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfU1BJMF9NT1NJICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBTUEkwX01PU0kqLworI2RlZmluZSBTUEkwX01PU0lfUEY2ICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9TUEkwX01PU0kgICAgICAgIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIFNQSTBfTU9TSSovCisjZGVmaW5lIFNQSTBfU1NfUEIxNSAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9TUEkwX1NTICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFNQSTBfU1MqLworI2RlZmluZSBTUEkwX1NTX1BBMyAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9TUEkwX1NTICAgICAgICAgIC8qITwgR1BBX01GUEwgUEEzIHNldHRpbmcgZm9yIFNQSTBfU1MqLworI2RlZmluZSBTUEkwX1NTX1BEMyAgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9TUEkwX1NTICAgICAgICAgIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFNQSTBfU1MqLworI2RlZmluZSBTUEkwX1NTX1BGOSAgICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOU1GUF9TUEkwX1NTICAgICAgICAgIC8qITwgR1BGX01GUEggUEY5IHNldHRpbmcgZm9yIFNQSTBfU1MqLworI2RlZmluZSBTUEkxX0NMS19QQjMgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9TUEkxX0NMSyAgICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFNQSTFfQ0xLKi8KKyNkZWZpbmUgU1BJMV9DTEtfUEg2ICAgICAgICAgICAgIFNZU19HUEhfTUZQTF9QSDZNRlBfU1BJMV9DTEsgICAgICAgICAvKiE8IEdQSF9NRlBMIFBINiBzZXR0aW5nIGZvciBTUEkxX0NMSyovCisjZGVmaW5lIFNQSTFfQ0xLX1BIOCAgICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX1NQSTFfQ0xLICAgICAgICAgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgU1BJMV9DTEsqLworI2RlZmluZSBTUEkxX0NMS19QQzEgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9TUEkxX0NMSyAgICAgICAgIC8qITwgR1BDX01GUEwgUEMxIHNldHRpbmcgZm9yIFNQSTFfQ0xLKi8KKyNkZWZpbmUgU1BJMV9DTEtfUEQ1ICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDVNRlBfU1BJMV9DTEsgICAgICAgICAvKiE8IEdQRF9NRlBMIFBENSBzZXR0aW5nIGZvciBTUEkxX0NMSyovCisjZGVmaW5lIFNQSTFfQ0xLX1BBNyAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX1NQSTFfQ0xLICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgU1BJMV9DTEsqLworI2RlZmluZSBTUEkxX0kyU01DTEtfUEIxICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9TUEkxX0kyU01DTEsgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIFNQSTFfSTJTTUNMSyovCisjZGVmaW5lIFNQSTFfSTJTTUNMS19QSDEwICAgICAgICBTWVNfR1BIX01GUEhfUEgxME1GUF9TUEkxX0kyU01DTEsgICAgLyohPCBHUEhfTUZQSCBQSDEwIHNldHRpbmcgZm9yIFNQSTFfSTJTTUNMSyovCisjZGVmaW5lIFNQSTFfSTJTTUNMS19QQzQgICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX1NQSTFfSTJTTUNMSyAgICAgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgU1BJMV9JMlNNQ0xLKi8KKyNkZWZpbmUgU1BJMV9JMlNNQ0xLX1BEMTMgICAgICAgIFNZU19HUERfTUZQSF9QRDEzTUZQX1NQSTFfSTJTTUNMSyAgICAvKiE8IEdQRF9NRlBIIFBEMTMgc2V0dGluZyBmb3IgU1BJMV9JMlNNQ0xLKi8KKyNkZWZpbmUgU1BJMV9JMlNNQ0xLX1BBNSAgICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfU1BJMV9JMlNNQ0xLICAgICAvKiE8IEdQQV9NRlBMIFBBNSBzZXR0aW5nIGZvciBTUEkxX0kyU01DTEsqLworI2RlZmluZSBTUEkxX01JU09fUEQ3ICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEN01GUF9TUEkxX01JU08gICAgICAgIC8qITwgR1BEX01GUEwgUEQ3IHNldHRpbmcgZm9yIFNQSTFfTUlTTyovCisjZGVmaW5lIFNQSTFfTUlTT19QQzcgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX1NQSTFfTUlTTyAgICAgICAgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgU1BJMV9NSVNPKi8KKyNkZWZpbmUgU1BJMV9NSVNPX1BCNSAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfU1BJMV9NSVNPICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBTUEkxX01JU08qLworI2RlZmluZSBTUEkxX01JU09fUEUxICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9TUEkxX01JU08gICAgICAgIC8qITwgR1BFX01GUEwgUEUxIHNldHRpbmcgZm9yIFNQSTFfTUlTTyovCisjZGVmaW5lIFNQSTFfTUlTT19QSDQgICAgICAgICAgICBTWVNfR1BIX01GUExfUEg0TUZQX1NQSTFfTUlTTyAgICAgICAgLyohPCBHUEhfTUZQTCBQSDQgc2V0dGluZyBmb3IgU1BJMV9NSVNPKi8KKyNkZWZpbmUgU1BJMV9NSVNPX1BDMyAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfU1BJMV9NSVNPICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMyBzZXR0aW5nIGZvciBTUEkxX01JU08qLworI2RlZmluZSBTUEkxX01PU0lfUEQ2ICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENk1GUF9TUEkxX01PU0kgICAgICAgIC8qITwgR1BEX01GUEwgUEQ2IHNldHRpbmcgZm9yIFNQSTFfTU9TSSovCisjZGVmaW5lIFNQSTFfTU9TSV9QRTAgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX1NQSTFfTU9TSSAgICAgICAgLyohPCBHUEVfTUZQTCBQRTAgc2V0dGluZyBmb3IgU1BJMV9NT1NJKi8KKyNkZWZpbmUgU1BJMV9NT1NJX1BCNCAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfU1BJMV9NT1NJICAgICAgICAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBTUEkxX01PU0kqLworI2RlZmluZSBTUEkxX01PU0lfUEM2ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9TUEkxX01PU0kgICAgICAgIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIFNQSTFfTU9TSSovCisjZGVmaW5lIFNQSTFfTU9TSV9QQzIgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX1NQSTFfTU9TSSAgICAgICAgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgU1BJMV9NT1NJKi8KKyNkZWZpbmUgU1BJMV9NT1NJX1BINSAgICAgICAgICAgIFNZU19HUEhfTUZQTF9QSDVNRlBfU1BJMV9NT1NJICAgICAgICAvKiE8IEdQSF9NRlBMIFBINSBzZXR0aW5nIGZvciBTUEkxX01PU0kqLworI2RlZmluZSBTUEkxX1NTX1BCMiAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9TUEkxX1NTICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIyIHNldHRpbmcgZm9yIFNQSTFfU1MqLworI2RlZmluZSBTUEkxX1NTX1BIOSAgICAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9TUEkxX1NTICAgICAgICAgIC8qITwgR1BIX01GUEggUEg5IHNldHRpbmcgZm9yIFNQSTFfU1MqLworI2RlZmluZSBTUEkxX1NTX1BENCAgICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENE1GUF9TUEkxX1NTICAgICAgICAgIC8qITwgR1BEX01GUEwgUEQ0IHNldHRpbmcgZm9yIFNQSTFfU1MqLworI2RlZmluZSBTUEkxX1NTX1BDMCAgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9TUEkxX1NTICAgICAgICAgIC8qITwgR1BDX01GUEwgUEMwIHNldHRpbmcgZm9yIFNQSTFfU1MqLworI2RlZmluZSBTUEkxX1NTX1BBNiAgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9TUEkxX1NTICAgICAgICAgIC8qITwgR1BBX01GUEwgUEE2IHNldHRpbmcgZm9yIFNQSTFfU1MqLworI2RlZmluZSBTUEkxX1NTX1BINyAgICAgICAgICAgICAgU1lTX0dQSF9NRlBMX1BIN01GUF9TUEkxX1NTICAgICAgICAgIC8qITwgR1BIX01GUEwgUEg3IHNldHRpbmcgZm9yIFNQSTFfU1MqLworI2RlZmluZSBTUEkyX0NMS19QRTggICAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9TUEkyX0NMSyAgICAgICAgIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIFNQSTJfQ0xLKi8KKyNkZWZpbmUgU1BJMl9DTEtfUEczICAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzNNRlBfU1BJMl9DTEsgICAgICAgICAvKiE8IEdQR19NRlBMIFBHMyBzZXR0aW5nIGZvciBTUEkyX0NMSyovCisjZGVmaW5lIFNQSTJfQ0xLX1BBMTAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9TUEkyX0NMSyAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEwIHNldHRpbmcgZm9yIFNQSTJfQ0xLKi8KKyNkZWZpbmUgU1BJMl9DTEtfUEExMyAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX1NQSTJfQ0xLICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTMgc2V0dGluZyBmb3IgU1BJMl9DTEsqLworI2RlZmluZSBTUEkyX0kyU01DTEtfUEMxMyAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfU1BJMl9JMlNNQ0xLICAgIC8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBTUEkyX0kyU01DTEsqLworI2RlZmluZSBTUEkyX0kyU01DTEtfUEUxMiAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfU1BJMl9JMlNNQ0xLICAgIC8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBTUEkyX0kyU01DTEsqLworI2RlZmluZSBTUEkyX01JU09fUEc0ICAgICAgICAgICAgU1lTX0dQR19NRlBMX1BHNE1GUF9TUEkyX01JU08gICAgICAgIC8qITwgR1BHX01GUEwgUEc0IHNldHRpbmcgZm9yIFNQSTJfTUlTTyovCisjZGVmaW5lIFNQSTJfTUlTT19QQTkgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX1NQSTJfTUlTTyAgICAgICAgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgU1BJMl9NSVNPKi8KKyNkZWZpbmUgU1BJMl9NSVNPX1BBMTQgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX1NQSTJfTUlTTyAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTQgc2V0dGluZyBmb3IgU1BJMl9NSVNPKi8KKyNkZWZpbmUgU1BJMl9NSVNPX1BFOSAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTlNRlBfU1BJMl9NSVNPICAgICAgICAvKiE8IEdQRV9NRlBIIFBFOSBzZXR0aW5nIGZvciBTUEkyX01JU08qLworI2RlZmluZSBTUEkyX01PU0lfUEUxMCAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfU1BJMl9NT1NJICAgICAgIC8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBTUEkyX01PU0kqLworI2RlZmluZSBTUEkyX01PU0lfUEExNSAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfU1BJMl9NT1NJICAgICAgIC8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBTUEkyX01PU0kqLworI2RlZmluZSBTUEkyX01PU0lfUEE4ICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9TUEkyX01PU0kgICAgICAgIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIFNQSTJfTU9TSSovCisjZGVmaW5lIFNQSTJfTU9TSV9QRjExICAgICAgICAgICBTWVNfR1BGX01GUEhfUEYxMU1GUF9TUEkyX01PU0kgICAgICAgLyohPCBHUEZfTUZQSCBQRjExIHNldHRpbmcgZm9yIFNQSTJfTU9TSSovCisjZGVmaW5lIFNQSTJfU1NfUEcyICAgICAgICAgICAgICBTWVNfR1BHX01GUExfUEcyTUZQX1NQSTJfU1MgICAgICAgICAgLyohPCBHUEdfTUZQTCBQRzIgc2V0dGluZyBmb3IgU1BJMl9TUyovCisjZGVmaW5lIFNQSTJfU1NfUEUxMSAgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9TUEkyX1NTICAgICAgICAgLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIFNQSTJfU1MqLworI2RlZmluZSBTUEkyX1NTX1BBMTEgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfU1BJMl9TUyAgICAgICAgIC8qITwgR1BBX01GUEggUEExMSBzZXR0aW5nIGZvciBTUEkyX1NTKi8KKyNkZWZpbmUgU1BJMl9TU19QQTEyICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX1NQSTJfU1MgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgU1BJMl9TUyovCisjZGVmaW5lIFNQSTNfQ0xLX1BCMTEgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9TUEkzX0NMSyAgICAgICAgLyohPCBHUEJfTUZQSCBQQjExIHNldHRpbmcgZm9yIFNQSTNfQ0xLKi8KKyNkZWZpbmUgU1BJM19DTEtfUEU0ICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTRNRlBfU1BJM19DTEsgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNCBzZXR0aW5nIGZvciBTUEkzX0NMSyovCisjZGVmaW5lIFNQSTNfQ0xLX1BDMTAgICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxME1GUF9TUEkzX0NMSyAgICAgICAgLyohPCBHUENfTUZQSCBQQzEwIHNldHRpbmcgZm9yIFNQSTNfQ0xLKi8KKyNkZWZpbmUgU1BJM19JMlNNQ0xLX1BFNiAgICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfU1BJM19JMlNNQ0xLICAgICAvKiE8IEdQRV9NRlBMIFBFNiBzZXR0aW5nIGZvciBTUEkzX0kyU01DTEsqLworI2RlZmluZSBTUEkzX0kyU01DTEtfUEIxICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9TUEkzX0kyU01DTEsgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIFNQSTNfSTJTTUNMSyovCisjZGVmaW5lIFNQSTNfSTJTTUNMS19QRDE0ICAgICAgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9TUEkzX0kyU01DTEsgICAgLyohPCBHUERfTUZQSCBQRDE0IHNldHRpbmcgZm9yIFNQSTNfSTJTTUNMSyovCisjZGVmaW5lIFNQSTNfTUlTT19QQzEyICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9TUEkzX01JU08gICAgICAgLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIFNQSTNfTUlTTyovCisjZGVmaW5lIFNQSTNfTUlTT19QQjkgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX1NQSTNfTUlTTyAgICAgICAgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgU1BJM19NSVNPKi8KKyNkZWZpbmUgU1BJM19NSVNPX1BFMyAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfU1BJM19NSVNPICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMyBzZXR0aW5nIGZvciBTUEkzX01JU08qLworI2RlZmluZSBTUEkzX01PU0lfUEI4ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9TUEkzX01PU0kgICAgICAgIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIFNQSTNfTU9TSSovCisjZGVmaW5lIFNQSTNfTU9TSV9QRTIgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX1NQSTNfTU9TSSAgICAgICAgLyohPCBHUEVfTUZQTCBQRTIgc2V0dGluZyBmb3IgU1BJM19NT1NJKi8KKyNkZWZpbmUgU1BJM19NT1NJX1BDMTEgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzExTUZQX1NQSTNfTU9TSSAgICAgICAvKiE8IEdQQ19NRlBIIFBDMTEgc2V0dGluZyBmb3IgU1BJM19NT1NJKi8KKyNkZWZpbmUgU1BJM19TU19QRTUgICAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfU1BJM19TUyAgICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNSBzZXR0aW5nIGZvciBTUEkzX1NTKi8KKyNkZWZpbmUgU1BJM19TU19QQjEwICAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX1NQSTNfU1MgICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgU1BJM19TUyovCisjZGVmaW5lIFNQSTNfU1NfUEM5ICAgICAgICAgICAgICBTWVNfR1BDX01GUEhfUEM5TUZQX1NQSTNfU1MgICAgICAgICAgLyohPCBHUENfTUZQSCBQQzkgc2V0dGluZyBmb3IgU1BJM19TUyovCisjZGVmaW5lIFRBTVBFUjBfUEY2ICAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY2TUZQX1RBTVBFUjAgICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjYgc2V0dGluZyBmb3IgVEFNUEVSMCovCisjZGVmaW5lIFRBTVBFUjFfUEY3ICAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY3TUZQX1RBTVBFUjEgICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjcgc2V0dGluZyBmb3IgVEFNUEVSMSovCisjZGVmaW5lIFRBTVBFUjJfUEY4ICAgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEY4TUZQX1RBTVBFUjIgICAgICAgICAgLyohPCBHUEZfTUZQSCBQRjggc2V0dGluZyBmb3IgVEFNUEVSMiovCisjZGVmaW5lIFRBTVBFUjNfUEY5ICAgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEY5TUZQX1RBTVBFUjMgICAgICAgICAgLyohPCBHUEZfTUZQSCBQRjkgc2V0dGluZyBmb3IgVEFNUEVSMyovCisjZGVmaW5lIFRBTVBFUjRfUEYxMCAgICAgICAgICAgICBTWVNfR1BGX01GUEhfUEYxME1GUF9UQU1QRVI0ICAgICAgICAgLyohPCBHUEZfTUZQSCBQRjEwIHNldHRpbmcgZm9yIFRBTVBFUjQqLworI2RlZmluZSBUQU1QRVI1X1BGMTEgICAgICAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTFNRlBfVEFNUEVSNSAgICAgICAgIC8qITwgR1BGX01GUEggUEYxMSBzZXR0aW5nIGZvciBUQU1QRVI1Ki8KKyNkZWZpbmUgVE0wX1BDNyAgICAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfVE0wICAgICAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBUTTAqLworI2RlZmluZSBUTTBfUEI1ICAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9UTTAgICAgICAgICAgICAgIC8qITwgR1BCX01GUEwgUEI1IHNldHRpbmcgZm9yIFRNMCovCisjZGVmaW5lIFRNMF9QRzIgICAgICAgICAgICAgICAgICBTWVNfR1BHX01GUExfUEcyTUZQX1RNMCAgICAgICAgICAgICAgLyohPCBHUEdfTUZQTCBQRzIgc2V0dGluZyBmb3IgVE0wKi8KKyNkZWZpbmUgVE0wX0VYVF9QQTExICAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX1RNMF9FWFQgICAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgVE0wX0VYVCovCisjZGVmaW5lIFRNMF9FWFRfUEIxNSAgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9UTTBfRVhUICAgICAgICAgLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFRNMF9FWFQqLworI2RlZmluZSBUTTFfUEczICAgICAgICAgICAgICAgICAgU1lTX0dQR19NRlBMX1BHM01GUF9UTTEgICAgICAgICAgICAgIC8qITwgR1BHX01GUEwgUEczIHNldHRpbmcgZm9yIFRNMSovCisjZGVmaW5lIFRNMV9QQjQgICAgICAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX1RNMSAgICAgICAgICAgICAgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgVE0xKi8KKyNkZWZpbmUgVE0xX1BDNiAgICAgICAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfVE0xICAgICAgICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBUTTEqLworI2RlZmluZSBUTTFfRVhUX1BBMTAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfVE0xX0VYVCAgICAgICAgIC8qITwgR1BBX01GUEggUEExMCBzZXR0aW5nIGZvciBUTTFfRVhUKi8KKyNkZWZpbmUgVE0xX0VYVF9QQjE0ICAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX1RNMV9FWFQgICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgVE0xX0VYVCovCisjZGVmaW5lIFRNMl9QRzQgICAgICAgICAgICAgICAgICBTWVNfR1BHX01GUExfUEc0TUZQX1RNMiAgICAgICAgICAgICAgLyohPCBHUEdfTUZQTCBQRzQgc2V0dGluZyBmb3IgVE0yKi8KKyNkZWZpbmUgVE0yX1BEMCAgICAgICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfVE0yICAgICAgICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMCBzZXR0aW5nIGZvciBUTTIqLworI2RlZmluZSBUTTJfUEIzICAgICAgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9UTTIgICAgICAgICAgICAgIC8qITwgR1BCX01GUEwgUEIzIHNldHRpbmcgZm9yIFRNMiovCisjZGVmaW5lIFRNMl9QQTcgICAgICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX1RNMiAgICAgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgVE0yKi8KKyNkZWZpbmUgVE0yX0VYVF9QQjEzICAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX1RNMl9FWFQgICAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTMgc2V0dGluZyBmb3IgVE0yX0VYVCovCisjZGVmaW5lIFRNMl9FWFRfUEE5ICAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX1RNMl9FWFQgICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTkgc2V0dGluZyBmb3IgVE0yX0VYVCovCisjZGVmaW5lIFRNM19QQTYgICAgICAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX1RNMyAgICAgICAgICAgICAgLyohPCBHUEFfTUZQTCBQQTYgc2V0dGluZyBmb3IgVE0zKi8KKyNkZWZpbmUgVE0zX1BGMTEgICAgICAgICAgICAgICAgIFNZU19HUEZfTUZQSF9QRjExTUZQX1RNMyAgICAgICAgICAgICAvKiE8IEdQRl9NRlBIIFBGMTEgc2V0dGluZyBmb3IgVE0zKi8KKyNkZWZpbmUgVE0zX1BCMiAgICAgICAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfVE0zICAgICAgICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBUTTMqLworI2RlZmluZSBUTTNfRVhUX1BBOCAgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9UTTNfRVhUICAgICAgICAgIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIFRNM19FWFQqLworI2RlZmluZSBUTTNfRVhUX1BCMTIgICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfVE0zX0VYVCAgICAgICAgIC8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBUTTNfRVhUKi8KKyNkZWZpbmUgVFJBQ0VfQ0xLX1BFMTIgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX1RSQUNFX0NMSyAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTIgc2V0dGluZyBmb3IgVFJBQ0VfQ0xLKi8KKyNkZWZpbmUgVFJBQ0VfREFUQTBfUEUxMSAgICAgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX1RSQUNFX0RBVEEwICAgICAvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgVFJBQ0VfREFUQTAqLworI2RlZmluZSBUUkFDRV9EQVRBMV9QRTEwICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfVFJBQ0VfREFUQTEgICAgIC8qITwgR1BFX01GUEggUEUxMCBzZXR0aW5nIGZvciBUUkFDRV9EQVRBMSovCisjZGVmaW5lIFRSQUNFX0RBVEEyX1BFOSAgICAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX1RSQUNFX0RBVEEyICAgICAgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgVFJBQ0VfREFUQTIqLworI2RlZmluZSBUUkFDRV9EQVRBM19QRTggICAgICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9UUkFDRV9EQVRBMyAgICAgIC8qITwgR1BFX01GUEggUEU4IHNldHRpbmcgZm9yIFRSQUNFX0RBVEEzKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BEMiAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDJNRlBfVUFSVDBfUlhEICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMiBzZXR0aW5nIGZvciBVQVJUMF9SWEQqLworI2RlZmluZSBVQVJUMF9SWERfUEI4ICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9VQVJUMF9SWEQgICAgICAgIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIFVBUlQwX1JYRCovCisjZGVmaW5lIFVBUlQwX1JYRF9QQTAgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX1VBUlQwX1JYRCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgVUFSVDBfUlhEKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BBNiAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfVUFSVDBfUlhEICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNiBzZXR0aW5nIGZvciBVQVJUMF9SWEQqLworI2RlZmluZSBVQVJUMF9SWERfUEIxMiAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfVUFSVDBfUlhEICAgICAgIC8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBVQVJUMF9SWEQqLworI2RlZmluZSBVQVJUMF9SWERfUEExNSAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfVUFSVDBfUlhEICAgICAgIC8qITwgR1BBX01GUEggUEExNSBzZXR0aW5nIGZvciBVQVJUMF9SWEQqLworI2RlZmluZSBVQVJUMF9SWERfUEMxMSAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTFNRlBfVUFSVDBfUlhEICAgICAgIC8qITwgR1BDX01GUEggUEMxMSBzZXR0aW5nIGZvciBVQVJUMF9SWEQqLworI2RlZmluZSBVQVJUMF9SWERfUEgxMSAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIMTFNRlBfVUFSVDBfUlhEICAgICAgIC8qITwgR1BIX01GUEggUEgxMSBzZXR0aW5nIGZvciBVQVJUMF9SWEQqLworI2RlZmluZSBVQVJUMF9SWERfUEYyICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGMk1GUF9VQVJUMF9SWEQgICAgICAgIC8qITwgR1BGX01GUEwgUEYyIHNldHRpbmcgZm9yIFVBUlQwX1JYRCovCisjZGVmaW5lIFVBUlQwX1RYRF9QQTcgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX1VBUlQwX1RYRCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTcgc2V0dGluZyBmb3IgVUFSVDBfVFhEKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BEMyAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfVUFSVDBfVFhEICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBVQVJUMF9UWEQqLworI2RlZmluZSBVQVJUMF9UWERfUEYzICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGM01GUF9VQVJUMF9UWEQgICAgICAgIC8qITwgR1BGX01GUEwgUEYzIHNldHRpbmcgZm9yIFVBUlQwX1RYRCovCisjZGVmaW5lIFVBUlQwX1RYRF9QQzEyICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9VQVJUMF9UWEQgICAgICAgLyohPCBHUENfTUZQSCBQQzEyIHNldHRpbmcgZm9yIFVBUlQwX1RYRCovCisjZGVmaW5lIFVBUlQwX1RYRF9QSDEwICAgICAgICAgICBTWVNfR1BIX01GUEhfUEgxME1GUF9VQVJUMF9UWEQgICAgICAgLyohPCBHUEhfTUZQSCBQSDEwIHNldHRpbmcgZm9yIFVBUlQwX1RYRCovCisjZGVmaW5lIFVBUlQwX1RYRF9QQTEgICAgICAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX1VBUlQwX1RYRCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgVUFSVDBfVFhEKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BCOSAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfVUFSVDBfVFhEICAgICAgICAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBVQVJUMF9UWEQqLworI2RlZmluZSBVQVJUMF9UWERfUEIxMyAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfVUFSVDBfVFhEICAgICAgIC8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBVQVJUMF9UWEQqLworI2RlZmluZSBVQVJUMF9UWERfUEExNCAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTRNRlBfVUFSVDBfVFhEICAgICAgIC8qITwgR1BBX01GUEggUEExNCBzZXR0aW5nIGZvciBVQVJUMF9UWEQqLworI2RlZmluZSBVQVJUMF9uQ1RTX1BBNSAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9VQVJUMF9uQ1RTICAgICAgIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIFVBUlQwX25DVFMqLworI2RlZmluZSBVQVJUMF9uQ1RTX1BCMTEgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfVUFSVDBfbkNUUyAgICAgIC8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBVQVJUMF9uQ1RTKi8KKyNkZWZpbmUgVUFSVDBfbkNUU19QQjE1ICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX1VBUlQwX25DVFMgICAgICAvKiE8IEdQQl9NRlBIIFBCMTUgc2V0dGluZyBmb3IgVUFSVDBfbkNUUyovCisjZGVmaW5lIFVBUlQwX25DVFNfUEM3ICAgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX1VBUlQwX25DVFMgICAgICAgLyohPCBHUENfTUZQTCBQQzcgc2V0dGluZyBmb3IgVUFSVDBfbkNUUyovCisjZGVmaW5lIFVBUlQwX25SVFNfUEIxNCAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9VQVJUMF9uUlRTICAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFVBUlQwX25SVFMqLworI2RlZmluZSBVQVJUMF9uUlRTX1BCMTAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfVUFSVDBfblJUUyAgICAgIC8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBVQVJUMF9uUlRTKi8KKyNkZWZpbmUgVUFSVDBfblJUU19QQzYgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfVUFSVDBfblJUUyAgICAgICAvKiE8IEdQQ19NRlBMIFBDNiBzZXR0aW5nIGZvciBVQVJUMF9uUlRTKi8KKyNkZWZpbmUgVUFSVDBfblJUU19QQTQgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfVUFSVDBfblJUUyAgICAgICAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBVQVJUMF9uUlRTKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BGMSAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjFNRlBfVUFSVDFfUlhEICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMSBzZXR0aW5nIGZvciBVQVJUMV9SWEQqLworI2RlZmluZSBVQVJUMV9SWERfUEE4ICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9VQVJUMV9SWEQgICAgICAgIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIFVBUlQxX1JYRCovCisjZGVmaW5lIFVBUlQxX1JYRF9QQTIgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX1VBUlQxX1JYRCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTIgc2V0dGluZyBmb3IgVUFSVDFfUlhEKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BCMiAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfVUFSVDFfUlhEICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBVQVJUMV9SWEQqLworI2RlZmluZSBVQVJUMV9SWERfUEI2ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9VQVJUMV9SWEQgICAgICAgIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIFVBUlQxX1JYRCovCisjZGVmaW5lIFVBUlQxX1JYRF9QRDYgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ2TUZQX1VBUlQxX1JYRCAgICAgICAgLyohPCBHUERfTUZQTCBQRDYgc2V0dGluZyBmb3IgVUFSVDFfUlhEKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BEMTAgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEwTUZQX1VBUlQxX1JYRCAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTAgc2V0dGluZyBmb3IgVUFSVDFfUlhEKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BIOSAgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfVUFSVDFfUlhEICAgICAgICAvKiE8IEdQSF9NRlBIIFBIOSBzZXR0aW5nIGZvciBVQVJUMV9SWEQqLworI2RlZmluZSBVQVJUMV9SWERfUEM4ICAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDOE1GUF9VQVJUMV9SWEQgICAgICAgIC8qITwgR1BDX01GUEggUEM4IHNldHRpbmcgZm9yIFVBUlQxX1JYRCovCisjZGVmaW5lIFVBUlQxX1RYRF9QQjMgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX1VBUlQxX1RYRCAgICAgICAgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgVUFSVDFfVFhEKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BBMyAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfVUFSVDFfVFhEICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMyBzZXR0aW5nIGZvciBVQVJUMV9UWEQqLworI2RlZmluZSBVQVJUMV9UWERfUEUxMyAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfVUFSVDFfVFhEICAgICAgIC8qITwgR1BFX01GUEggUEUxMyBzZXR0aW5nIGZvciBVQVJUMV9UWEQqLworI2RlZmluZSBVQVJUMV9UWERfUEE5ICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9VQVJUMV9UWEQgICAgICAgIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIFVBUlQxX1RYRCovCisjZGVmaW5lIFVBUlQxX1RYRF9QRjAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYwTUZQX1VBUlQxX1RYRCAgICAgICAgLyohPCBHUEZfTUZQTCBQRjAgc2V0dGluZyBmb3IgVUFSVDFfVFhEKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BEMTEgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDExTUZQX1VBUlQxX1RYRCAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTEgc2V0dGluZyBmb3IgVUFSVDFfVFhEKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BENyAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDdNRlBfVUFSVDFfVFhEICAgICAgICAvKiE8IEdQRF9NRlBMIFBENyBzZXR0aW5nIGZvciBVQVJUMV9UWEQqLworI2RlZmluZSBVQVJUMV9UWERfUEI3ICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9VQVJUMV9UWEQgICAgICAgIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIFVBUlQxX1RYRCovCisjZGVmaW5lIFVBUlQxX1RYRF9QSDggICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX1VBUlQxX1RYRCAgICAgICAgLyohPCBHUEhfTUZQSCBQSDggc2V0dGluZyBmb3IgVUFSVDFfVFhEKi8KKyNkZWZpbmUgVUFSVDFfbkNUU19QRTExICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX1VBUlQxX25DVFMgICAgICAvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgVUFSVDFfbkNUUyovCisjZGVmaW5lIFVBUlQxX25DVFNfUEI5ICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX1VBUlQxX25DVFMgICAgICAgLyohPCBHUEJfTUZQSCBQQjkgc2V0dGluZyBmb3IgVUFSVDFfbkNUUyovCisjZGVmaW5lIFVBUlQxX25DVFNfUEExICAgICAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX1VBUlQxX25DVFMgICAgICAgLyohPCBHUEFfTUZQTCBQQTEgc2V0dGluZyBmb3IgVUFSVDFfbkNUUyovCisjZGVmaW5lIFVBUlQxX25SVFNfUEEwICAgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX1VBUlQxX25SVFMgICAgICAgLyohPCBHUEFfTUZQTCBQQTAgc2V0dGluZyBmb3IgVUFSVDFfblJUUyovCisjZGVmaW5lIFVBUlQxX25SVFNfUEUxMiAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9VQVJUMV9uUlRTICAgICAgLyohPCBHUEVfTUZQSCBQRTEyIHNldHRpbmcgZm9yIFVBUlQxX25SVFMqLworI2RlZmluZSBVQVJUMV9uUlRTX1BCOCAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9VQVJUMV9uUlRTICAgICAgIC8qITwgR1BCX01GUEggUEI4IHNldHRpbmcgZm9yIFVBUlQxX25SVFMqLworI2RlZmluZSBVQVJUMl9SWERfUEIwICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9VQVJUMl9SWEQgICAgICAgIC8qITwgR1BCX01GUEwgUEIwIHNldHRpbmcgZm9yIFVBUlQyX1JYRCovCisjZGVmaW5lIFVBUlQyX1JYRF9QRTE1ICAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxNU1GUF9VQVJUMl9SWEQgICAgICAgLyohPCBHUEVfTUZQSCBQRTE1IHNldHRpbmcgZm9yIFVBUlQyX1JYRCovCisjZGVmaW5lIFVBUlQyX1JYRF9QRDEyICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQxMk1GUF9VQVJUMl9SWEQgICAgICAgLyohPCBHUERfTUZQSCBQRDEyIHNldHRpbmcgZm9yIFVBUlQyX1JYRCovCisjZGVmaW5lIFVBUlQyX1JYRF9QRjUgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY1TUZQX1VBUlQyX1JYRCAgICAgICAgLyohPCBHUEZfTUZQTCBQRjUgc2V0dGluZyBmb3IgVUFSVDJfUlhEKi8KKyNkZWZpbmUgVUFSVDJfUlhEX1BDMCAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfVUFSVDJfUlhEICAgICAgICAvKiE8IEdQQ19NRlBMIFBDMCBzZXR0aW5nIGZvciBVQVJUMl9SWEQqLworI2RlZmluZSBVQVJUMl9SWERfUEM0ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9VQVJUMl9SWEQgICAgICAgIC8qITwgR1BDX01GUEwgUEM0IHNldHRpbmcgZm9yIFVBUlQyX1JYRCovCisjZGVmaW5lIFVBUlQyX1JYRF9QRTkgICAgICAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX1VBUlQyX1JYRCAgICAgICAgLyohPCBHUEVfTUZQSCBQRTkgc2V0dGluZyBmb3IgVUFSVDJfUlhEKi8KKyNkZWZpbmUgVUFSVDJfVFhEX1BFOCAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfVUFSVDJfVFhEICAgICAgICAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBVQVJUMl9UWEQqLworI2RlZmluZSBVQVJUMl9UWERfUEY0ICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNE1GUF9VQVJUMl9UWEQgICAgICAgIC8qITwgR1BGX01GUEwgUEY0IHNldHRpbmcgZm9yIFVBUlQyX1RYRCovCisjZGVmaW5lIFVBUlQyX1RYRF9QQzEzICAgICAgICAgICBTWVNfR1BDX01GUEhfUEMxM01GUF9VQVJUMl9UWEQgICAgICAgLyohPCBHUENfTUZQSCBQQzEzIHNldHRpbmcgZm9yIFVBUlQyX1RYRCovCisjZGVmaW5lIFVBUlQyX1RYRF9QQzEgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMxTUZQX1VBUlQyX1RYRCAgICAgICAgLyohPCBHUENfTUZQTCBQQzEgc2V0dGluZyBmb3IgVUFSVDJfVFhEKi8KKyNkZWZpbmUgVUFSVDJfVFhEX1BFMTQgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTE0TUZQX1VBUlQyX1RYRCAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTQgc2V0dGluZyBmb3IgVUFSVDJfVFhEKi8KKyNkZWZpbmUgVUFSVDJfVFhEX1BDNSAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzVNRlBfVUFSVDJfVFhEICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNSBzZXR0aW5nIGZvciBVQVJUMl9UWEQqLworI2RlZmluZSBVQVJUMl9UWERfUEIxICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9VQVJUMl9UWEQgICAgICAgIC8qITwgR1BCX01GUEwgUEIxIHNldHRpbmcgZm9yIFVBUlQyX1RYRCovCisjZGVmaW5lIFVBUlQyX25DVFNfUEY1ICAgICAgICAgICBTWVNfR1BGX01GUExfUEY1TUZQX1VBUlQyX25DVFMgICAgICAgLyohPCBHUEZfTUZQTCBQRjUgc2V0dGluZyBmb3IgVUFSVDJfbkNUUyovCisjZGVmaW5lIFVBUlQyX25DVFNfUEQ5ICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQ5TUZQX1VBUlQyX25DVFMgICAgICAgLyohPCBHUERfTUZQSCBQRDkgc2V0dGluZyBmb3IgVUFSVDJfbkNUUyovCisjZGVmaW5lIFVBUlQyX25DVFNfUEMyICAgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX1VBUlQyX25DVFMgICAgICAgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgVUFSVDJfbkNUUyovCisjZGVmaW5lIFVBUlQyX25SVFNfUEY0ICAgICAgICAgICBTWVNfR1BGX01GUExfUEY0TUZQX1VBUlQyX25SVFMgICAgICAgLyohPCBHUEZfTUZQTCBQRjQgc2V0dGluZyBmb3IgVUFSVDJfblJUUyovCisjZGVmaW5lIFVBUlQyX25SVFNfUEQ4ICAgICAgICAgICBTWVNfR1BEX01GUEhfUEQ4TUZQX1VBUlQyX25SVFMgICAgICAgLyohPCBHUERfTUZQSCBQRDggc2V0dGluZyBmb3IgVUFSVDJfblJUUyovCisjZGVmaW5lIFVBUlQyX25SVFNfUEMzICAgICAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX1VBUlQyX25SVFMgICAgICAgLyohPCBHUENfTUZQTCBQQzMgc2V0dGluZyBmb3IgVUFSVDJfblJUUyovCisjZGVmaW5lIFVBUlQzX1JYRF9QRDAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX1VBUlQzX1JYRCAgICAgICAgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgVUFSVDNfUlhEKi8KKyNkZWZpbmUgVUFSVDNfUlhEX1BFMTEgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX1VBUlQzX1JYRCAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTEgc2V0dGluZyBmb3IgVUFSVDNfUlhEKi8KKyNkZWZpbmUgVUFSVDNfUlhEX1BDOSAgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzlNRlBfVUFSVDNfUlhEICAgICAgICAvKiE8IEdQQ19NRlBIIFBDOSBzZXR0aW5nIGZvciBVQVJUM19SWEQqLworI2RlZmluZSBVQVJUM19SWERfUEUwICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9VQVJUM19SWEQgICAgICAgIC8qITwgR1BFX01GUEwgUEUwIHNldHRpbmcgZm9yIFVBUlQzX1JYRCovCisjZGVmaW5lIFVBUlQzX1JYRF9QQzIgICAgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX1VBUlQzX1JYRCAgICAgICAgLyohPCBHUENfTUZQTCBQQzIgc2V0dGluZyBmb3IgVUFSVDNfUlhEKi8KKyNkZWZpbmUgVUFSVDNfUlhEX1BCMTQgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX1VBUlQzX1JYRCAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgVUFSVDNfUlhEKi8KKyNkZWZpbmUgVUFSVDNfVFhEX1BEMSAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDFNRlBfVUFSVDNfVFhEICAgICAgICAvKiE8IEdQRF9NRlBMIFBEMSBzZXR0aW5nIGZvciBVQVJUM19UWEQqLworI2RlZmluZSBVQVJUM19UWERfUEMxMCAgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTBNRlBfVUFSVDNfVFhEICAgICAgIC8qITwgR1BDX01GUEggUEMxMCBzZXR0aW5nIGZvciBVQVJUM19UWEQqLworI2RlZmluZSBVQVJUM19UWERfUEIxNSAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfVUFSVDNfVFhEICAgICAgIC8qITwgR1BCX01GUEggUEIxNSBzZXR0aW5nIGZvciBVQVJUM19UWEQqLworI2RlZmluZSBVQVJUM19UWERfUEMzICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDM01GUF9VQVJUM19UWEQgICAgICAgIC8qITwgR1BDX01GUEwgUEMzIHNldHRpbmcgZm9yIFVBUlQzX1RYRCovCisjZGVmaW5lIFVBUlQzX1RYRF9QRTEgICAgICAgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX1VBUlQzX1RYRCAgICAgICAgLyohPCBHUEVfTUZQTCBQRTEgc2V0dGluZyBmb3IgVUFSVDNfVFhEKi8KKyNkZWZpbmUgVUFSVDNfVFhEX1BFMTAgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX1VBUlQzX1RYRCAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgVUFSVDNfVFhEKi8KKyNkZWZpbmUgVUFSVDNfbkNUU19QQjEyICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX1VBUlQzX25DVFMgICAgICAvKiE8IEdQQl9NRlBIIFBCMTIgc2V0dGluZyBmb3IgVUFSVDNfbkNUUyovCisjZGVmaW5lIFVBUlQzX25DVFNfUEg5ICAgICAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX1VBUlQzX25DVFMgICAgICAgLyohPCBHUEhfTUZQSCBQSDkgc2V0dGluZyBmb3IgVUFSVDNfbkNUUyovCisjZGVmaW5lIFVBUlQzX25DVFNfUEQyICAgICAgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX1VBUlQzX25DVFMgICAgICAgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgVUFSVDNfbkNUUyovCisjZGVmaW5lIFVBUlQzX25SVFNfUEIxMyAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9VQVJUM19uUlRTICAgICAgLyohPCBHUEJfTUZQSCBQQjEzIHNldHRpbmcgZm9yIFVBUlQzX25SVFMqLworI2RlZmluZSBVQVJUM19uUlRTX1BIOCAgICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9VQVJUM19uUlRTICAgICAgIC8qITwgR1BIX01GUEggUEg4IHNldHRpbmcgZm9yIFVBUlQzX25SVFMqLworI2RlZmluZSBVQVJUM19uUlRTX1BEMyAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9VQVJUM19uUlRTICAgICAgIC8qITwgR1BEX01GUEwgUEQzIHNldHRpbmcgZm9yIFVBUlQzX25SVFMqLworI2RlZmluZSBVQVJUNF9SWERfUEExMyAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfVUFSVDRfUlhEICAgICAgIC8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBVQVJUNF9SWEQqLworI2RlZmluZSBVQVJUNF9SWERfUEM2ICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9VQVJUNF9SWEQgICAgICAgIC8qITwgR1BDX01GUEwgUEM2IHNldHRpbmcgZm9yIFVBUlQ0X1JYRCovCisjZGVmaW5lIFVBUlQ0X1JYRF9QQzQgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX1VBUlQ0X1JYRCAgICAgICAgLyohPCBHUENfTUZQTCBQQzQgc2V0dGluZyBmb3IgVUFSVDRfUlhEKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BCMTAgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX1VBUlQ0X1JYRCAgICAgICAvKiE8IEdQQl9NRlBIIFBCMTAgc2V0dGluZyBmb3IgVUFSVDRfUlhEKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BIMTEgICAgICAgICAgIFNZU19HUEhfTUZQSF9QSDExTUZQX1VBUlQ0X1JYRCAgICAgICAvKiE8IEdQSF9NRlBIIFBIMTEgc2V0dGluZyBmb3IgVUFSVDRfUlhEKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BBMiAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfVUFSVDRfUlhEICAgICAgICAvKiE8IEdQQV9NRlBMIFBBMiBzZXR0aW5nIGZvciBVQVJUNF9SWEQqLworI2RlZmluZSBVQVJUNF9SWERfUEY2ICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9VQVJUNF9SWEQgICAgICAgIC8qITwgR1BGX01GUEwgUEY2IHNldHRpbmcgZm9yIFVBUlQ0X1JYRCovCisjZGVmaW5lIFVBUlQ0X1RYRF9QSDEwICAgICAgICAgICBTWVNfR1BIX01GUEhfUEgxME1GUF9VQVJUNF9UWEQgICAgICAgLyohPCBHUEhfTUZQSCBQSDEwIHNldHRpbmcgZm9yIFVBUlQ0X1RYRCovCisjZGVmaW5lIFVBUlQ0X1RYRF9QQTMgICAgICAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX1VBUlQ0X1RYRCAgICAgICAgLyohPCBHUEFfTUZQTCBQQTMgc2V0dGluZyBmb3IgVUFSVDRfVFhEKi8KKyNkZWZpbmUgVUFSVDRfVFhEX1BBMTIgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX1VBUlQ0X1RYRCAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTIgc2V0dGluZyBmb3IgVUFSVDRfVFhEKi8KKyNkZWZpbmUgVUFSVDRfVFhEX1BDNyAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfVUFSVDRfVFhEICAgICAgICAvKiE8IEdQQ19NRlBMIFBDNyBzZXR0aW5nIGZvciBVQVJUNF9UWEQqLworI2RlZmluZSBVQVJUNF9UWERfUEIxMSAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfVUFSVDRfVFhEICAgICAgIC8qITwgR1BCX01GUEggUEIxMSBzZXR0aW5nIGZvciBVQVJUNF9UWEQqLworI2RlZmluZSBVQVJUNF9UWERfUEY3ICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGN01GUF9VQVJUNF9UWEQgICAgICAgIC8qITwgR1BGX01GUEwgUEY3IHNldHRpbmcgZm9yIFVBUlQ0X1RYRCovCisjZGVmaW5lIFVBUlQ0X1RYRF9QQzUgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM1TUZQX1VBUlQ0X1RYRCAgICAgICAgLyohPCBHUENfTUZQTCBQQzUgc2V0dGluZyBmb3IgVUFSVDRfVFhEKi8KKyNkZWZpbmUgVUFSVDRfbkNUU19QRTEgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfVUFSVDRfbkNUUyAgICAgICAvKiE8IEdQRV9NRlBMIFBFMSBzZXR0aW5nIGZvciBVQVJUNF9uQ1RTKi8KKyNkZWZpbmUgVUFSVDRfbkNUU19QQzggICAgICAgICAgIFNZU19HUENfTUZQSF9QQzhNRlBfVUFSVDRfbkNUUyAgICAgICAvKiE8IEdQQ19NRlBIIFBDOCBzZXR0aW5nIGZvciBVQVJUNF9uQ1RTKi8KKyNkZWZpbmUgVUFSVDRfblJUU19QRTAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTBNRlBfVUFSVDRfblJUUyAgICAgICAvKiE8IEdQRV9NRlBMIFBFMCBzZXR0aW5nIGZvciBVQVJUNF9uUlRTKi8KKyNkZWZpbmUgVUFSVDRfblJUU19QRTEzICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX1VBUlQ0X25SVFMgICAgICAvKiE8IEdQRV9NRlBIIFBFMTMgc2V0dGluZyBmb3IgVUFSVDRfblJUUyovCisjZGVmaW5lIFVBUlQ1X1JYRF9QQjQgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX1VBUlQ1X1JYRCAgICAgICAgLyohPCBHUEJfTUZQTCBQQjQgc2V0dGluZyBmb3IgVUFSVDVfUlhEKi8KKyNkZWZpbmUgVUFSVDVfUlhEX1BBNCAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfVUFSVDVfUlhEICAgICAgICAvKiE8IEdQQV9NRlBMIFBBNCBzZXR0aW5nIGZvciBVQVJUNV9SWEQqLworI2RlZmluZSBVQVJUNV9SWERfUEU2ICAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNk1GUF9VQVJUNV9SWEQgICAgICAgIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIFVBUlQ1X1JYRCovCisjZGVmaW5lIFVBUlQ1X1RYRF9QQjUgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX1VBUlQ1X1RYRCAgICAgICAgLyohPCBHUEJfTUZQTCBQQjUgc2V0dGluZyBmb3IgVUFSVDVfVFhEKi8KKyNkZWZpbmUgVUFSVDVfVFhEX1BFNyAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTdNRlBfVUFSVDVfVFhEICAgICAgICAvKiE8IEdQRV9NRlBMIFBFNyBzZXR0aW5nIGZvciBVQVJUNV9UWEQqLworI2RlZmluZSBVQVJUNV9UWERfUEE1ICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9VQVJUNV9UWEQgICAgICAgIC8qITwgR1BBX01GUEwgUEE1IHNldHRpbmcgZm9yIFVBUlQ1X1RYRCovCisjZGVmaW5lIFVBUlQ1X25DVFNfUEIyICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX1VBUlQ1X25DVFMgICAgICAgLyohPCBHUEJfTUZQTCBQQjIgc2V0dGluZyBmb3IgVUFSVDVfbkNUUyovCisjZGVmaW5lIFVBUlQ1X25SVFNfUEIzICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX1VBUlQ1X25SVFMgICAgICAgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgVUFSVDVfblJUUyovCisjZGVmaW5lIFVTQl9EX1BfUEExNCAgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExNE1GUF9VU0JfRF9QICAgICAgICAgLyohPCBHUEFfTUZQSCBQQTE0IHNldHRpbmcgZm9yIFVTQl9EX1AqLworI2RlZmluZSBVU0JfRF9OX1BBMTMgICAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfVVNCX0RfTiAgICAgICAgIC8qITwgR1BBX01GUEggUEExMyBzZXR0aW5nIGZvciBVU0JfRF9OKi8KKyNkZWZpbmUgVVNCX09UR19JRF9QQTE1ICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX1VTQl9PVEdfSUQgICAgICAvKiE8IEdQQV9NRlBIIFBBMTUgc2V0dGluZyBmb3IgVVNCX09UR19JRCovCisjZGVmaW5lIFVTQl9WQlVTX1BBMTIgICAgICAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9VU0JfVkJVUyAgICAgICAgLyohPCBHUEFfTUZQSCBQQTEyIHNldHRpbmcgZm9yIFVTQl9WQlVTKi8KKyNkZWZpbmUgVVNCX1ZCVVNfRU5fUEI2ICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfVVNCX1ZCVVNfRU4gICAgICAvKiE8IEdQQl9NRlBMIFBCNiBzZXR0aW5nIGZvciBVU0JfVkJVU19FTiovCisjZGVmaW5lIFVTQl9WQlVTX0VOX1BCMTUgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9VU0JfVkJVU19FTiAgICAgLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFVTQl9WQlVTX0VOKi8KKyNkZWZpbmUgVVNCX1ZCVVNfU1RfUEIxNCAgICAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX1VTQl9WQlVTX1NUICAgICAvKiE8IEdQQl9NRlBIIFBCMTQgc2V0dGluZyBmb3IgVVNCX1ZCVVNfU1QqLworI2RlZmluZSBVU0JfVkJVU19TVF9QQjcgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9VU0JfVkJVU19TVCAgICAgIC8qITwgR1BCX01GUEwgUEI3IHNldHRpbmcgZm9yIFVTQl9WQlVTX1NUKi8KKyNkZWZpbmUgVVNCX1ZCVVNfU1RfUEQ0ICAgICAgICAgIFNZU19HUERfTUZQTF9QRDRNRlBfVVNCX1ZCVVNfU1QgICAgICAvKiE8IEdQRF9NRlBMIFBENCBzZXR0aW5nIGZvciBVU0JfVkJVU19TVCovCisjZGVmaW5lIFVTQ0kwX0NMS19QRDAgICAgICAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX1VTQ0kwX0NMSyAgICAgICAgLyohPCBHUERfTUZQTCBQRDAgc2V0dGluZyBmb3IgVVNDSTBfQ0xLKi8KKyNkZWZpbmUgVVNDSTBfQ0xLX1BBMTEgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX1VTQ0kwX0NMSyAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTEgc2V0dGluZyBmb3IgVVNDSTBfQ0xLKi8KKyNkZWZpbmUgVVNDSTBfQ0xLX1BFMiAgICAgICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfVVNDSTBfQ0xLICAgICAgICAvKiE8IEdQRV9NRlBMIFBFMiBzZXR0aW5nIGZvciBVU0NJMF9DTEsqLworI2RlZmluZSBVU0NJMF9DTEtfUEIxMiAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfVVNDSTBfQ0xLICAgICAgIC8qITwgR1BCX01GUEggUEIxMiBzZXR0aW5nIGZvciBVU0NJMF9DTEsqLworI2RlZmluZSBVU0NJMF9DVEwwX1BENCAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BENE1GUF9VU0NJMF9DVEwwICAgICAgIC8qITwgR1BEX01GUEwgUEQ0IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDAqLworI2RlZmluZSBVU0NJMF9DVEwwX1BFNiAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNk1GUF9VU0NJMF9DVEwwICAgICAgIC8qITwgR1BFX01GUEwgUEU2IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDAqLworI2RlZmluZSBVU0NJMF9DVEwwX1BDMTMgICAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfVVNDSTBfQ1RMMCAgICAgIC8qITwgR1BDX01GUEggUEMxMyBzZXR0aW5nIGZvciBVU0NJMF9DVEwwKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMF9QRDE0ICAgICAgICAgIFNZU19HUERfTUZQSF9QRDE0TUZQX1VTQ0kwX0NUTDAgICAgICAvKiE8IEdQRF9NRlBIIFBEMTQgc2V0dGluZyBmb3IgVVNDSTBfQ1RMMCovCisjZGVmaW5lIFVTQ0kwX0NUTDFfUEQzICAgICAgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX1VTQ0kwX0NUTDEgICAgICAgLyohPCBHUERfTUZQTCBQRDMgc2V0dGluZyBmb3IgVVNDSTBfQ1RMMSovCisjZGVmaW5lIFVTQ0kwX0NUTDFfUEU1ICAgICAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX1VTQ0kwX0NUTDEgICAgICAgLyohPCBHUEVfTUZQTCBQRTUgc2V0dGluZyBmb3IgVVNDSTBfQ1RMMSovCisjZGVmaW5lIFVTQ0kwX0NUTDFfUEIxNSAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9VU0NJMF9DVEwxICAgICAgLyohPCBHUEJfTUZQSCBQQjE1IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDEqLworI2RlZmluZSBVU0NJMF9DVEwxX1BBOCAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9VU0NJMF9DVEwxICAgICAgIC8qITwgR1BBX01GUEggUEE4IHNldHRpbmcgZm9yIFVTQ0kwX0NUTDEqLworI2RlZmluZSBVU0NJMF9EQVQwX1BFMyAgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFM01GUF9VU0NJMF9EQVQwICAgICAgIC8qITwgR1BFX01GUEwgUEUzIHNldHRpbmcgZm9yIFVTQ0kwX0RBVDAqLworI2RlZmluZSBVU0NJMF9EQVQwX1BCMTMgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfVVNDSTBfREFUMCAgICAgIC8qITwgR1BCX01GUEggUEIxMyBzZXR0aW5nIGZvciBVU0NJMF9EQVQwKi8KKyNkZWZpbmUgVVNDSTBfREFUMF9QRDEgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDFNRlBfVVNDSTBfREFUMCAgICAgICAvKiE8IEdQRF9NRlBMIFBEMSBzZXR0aW5nIGZvciBVU0NJMF9EQVQwKi8KKyNkZWZpbmUgVVNDSTBfREFUMF9QQTEwICAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX1VTQ0kwX0RBVDAgICAgICAvKiE8IEdQQV9NRlBIIFBBMTAgc2V0dGluZyBmb3IgVVNDSTBfREFUMCovCisjZGVmaW5lIFVTQ0kwX0RBVDFfUEU0ICAgICAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX1VTQ0kwX0RBVDEgICAgICAgLyohPCBHUEVfTUZQTCBQRTQgc2V0dGluZyBmb3IgVVNDSTBfREFUMSovCisjZGVmaW5lIFVTQ0kwX0RBVDFfUEQyICAgICAgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX1VTQ0kwX0RBVDEgICAgICAgLyohPCBHUERfTUZQTCBQRDIgc2V0dGluZyBmb3IgVVNDSTBfREFUMSovCisjZGVmaW5lIFVTQ0kwX0RBVDFfUEIxNCAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9VU0NJMF9EQVQxICAgICAgLyohPCBHUEJfTUZQSCBQQjE0IHNldHRpbmcgZm9yIFVTQ0kwX0RBVDEqLworI2RlZmluZSBVU0NJMF9EQVQxX1BBOSAgICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9VU0NJMF9EQVQxICAgICAgIC8qITwgR1BBX01GUEggUEE5IHNldHRpbmcgZm9yIFVTQ0kwX0RBVDEqLworI2RlZmluZSBVU0NJMV9DTEtfUEUxMiAgICAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfVVNDSTFfQ0xLICAgICAgIC8qITwgR1BFX01GUEggUEUxMiBzZXR0aW5nIGZvciBVU0NJMV9DTEsqLworI2RlZmluZSBVU0NJMV9DTEtfUEQ3ICAgICAgICAgICAgU1lTX0dQRF9NRlBMX1BEN01GUF9VU0NJMV9DTEsgICAgICAgIC8qITwgR1BEX01GUEwgUEQ3IHNldHRpbmcgZm9yIFVTQ0kxX0NMSyovCisjZGVmaW5lIFVTQ0kxX0NMS19QQjggICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX1VTQ0kxX0NMSyAgICAgICAgLyohPCBHUEJfTUZQSCBQQjggc2V0dGluZyBmb3IgVVNDSTFfQ0xLKi8KKyNkZWZpbmUgVVNDSTFfQ0xLX1BCMSAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfVVNDSTFfQ0xLICAgICAgICAvKiE8IEdQQl9NRlBMIFBCMSBzZXR0aW5nIGZvciBVU0NJMV9DTEsqLworI2RlZmluZSBVU0NJMV9DVEwwX1BCMTAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfVVNDSTFfQ1RMMCAgICAgIC8qITwgR1BCX01GUEggUEIxMCBzZXR0aW5nIGZvciBVU0NJMV9DVEwwKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMF9QQjUgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfVVNDSTFfQ1RMMCAgICAgICAvKiE8IEdQQl9NRlBMIFBCNSBzZXR0aW5nIGZvciBVU0NJMV9DVEwwKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMF9QRTkgICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTlNRlBfVVNDSTFfQ1RMMCAgICAgICAvKiE8IEdQRV9NRlBIIFBFOSBzZXR0aW5nIGZvciBVU0NJMV9DVEwwKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMF9QRDMgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfVVNDSTFfQ1RMMCAgICAgICAvKiE8IEdQRF9NRlBMIFBEMyBzZXR0aW5nIGZvciBVU0NJMV9DVEwwKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMV9QRDQgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDRNRlBfVVNDSTFfQ1RMMSAgICAgICAvKiE8IEdQRF9NRlBMIFBENCBzZXR0aW5nIGZvciBVU0NJMV9DVEwxKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMV9QRTggICAgICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfVVNDSTFfQ1RMMSAgICAgICAvKiE8IEdQRV9NRlBIIFBFOCBzZXR0aW5nIGZvciBVU0NJMV9DVEwxKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMV9QQjkgICAgICAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfVVNDSTFfQ1RMMSAgICAgICAvKiE8IEdQQl9NRlBIIFBCOSBzZXR0aW5nIGZvciBVU0NJMV9DVEwxKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMV9QQjQgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfVVNDSTFfQ1RMMSAgICAgICAvKiE8IEdQQl9NRlBMIFBCNCBzZXR0aW5nIGZvciBVU0NJMV9DVEwxKi8KKyNkZWZpbmUgVVNDSTFfREFUMF9QQjIgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfVVNDSTFfREFUMCAgICAgICAvKiE8IEdQQl9NRlBMIFBCMiBzZXR0aW5nIGZvciBVU0NJMV9EQVQwKi8KKyNkZWZpbmUgVVNDSTFfREFUMF9QQjcgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfVVNDSTFfREFUMCAgICAgICAvKiE8IEdQQl9NRlBMIFBCNyBzZXR0aW5nIGZvciBVU0NJMV9EQVQwKi8KKyNkZWZpbmUgVVNDSTFfREFUMF9QRTEwICAgICAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX1VTQ0kxX0RBVDAgICAgICAvKiE8IEdQRV9NRlBIIFBFMTAgc2V0dGluZyBmb3IgVVNDSTFfREFUMCovCisjZGVmaW5lIFVTQ0kxX0RBVDBfUEQ1ICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ1TUZQX1VTQ0kxX0RBVDAgICAgICAgLyohPCBHUERfTUZQTCBQRDUgc2V0dGluZyBmb3IgVVNDSTFfREFUMCovCisjZGVmaW5lIFVTQ0kxX0RBVDFfUEQ2ICAgICAgICAgICBTWVNfR1BEX01GUExfUEQ2TUZQX1VTQ0kxX0RBVDEgICAgICAgLyohPCBHUERfTUZQTCBQRDYgc2V0dGluZyBmb3IgVVNDSTFfREFUMSovCisjZGVmaW5lIFVTQ0kxX0RBVDFfUEIzICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX1VTQ0kxX0RBVDEgICAgICAgLyohPCBHUEJfTUZQTCBQQjMgc2V0dGluZyBmb3IgVVNDSTFfREFUMSovCisjZGVmaW5lIFVTQ0kxX0RBVDFfUEUxMSAgICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9VU0NJMV9EQVQxICAgICAgLyohPCBHUEVfTUZQSCBQRTExIHNldHRpbmcgZm9yIFVTQ0kxX0RBVDEqLworI2RlZmluZSBVU0NJMV9EQVQxX1BCNiAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9VU0NJMV9EQVQxICAgICAgIC8qITwgR1BCX01GUEwgUEI2IHNldHRpbmcgZm9yIFVTQ0kxX0RBVDEqLworI2RlZmluZSBYMzJfSU5fUEY1ICAgICAgICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNU1GUF9YMzJfSU4gICAgICAgICAgIC8qITwgR1BGX01GUEwgUEY1IHNldHRpbmcgZm9yIFgzMl9JTiovCisjZGVmaW5lIFgzMl9PVVRfUEY0ICAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEY0TUZQX1gzMl9PVVQgICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjQgc2V0dGluZyBmb3IgWDMyX09VVCovCisjZGVmaW5lIFhUMV9JTl9QRjMgICAgICAgICAgICAgICBTWVNfR1BGX01GUExfUEYzTUZQX1hUMV9JTiAgICAgICAgICAgLyohPCBHUEZfTUZQTCBQRjMgc2V0dGluZyBmb3IgWFQxX0lOKi8KKyNkZWZpbmUgWFQxX09VVF9QRjIgICAgICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjJNRlBfWFQxX09VVCAgICAgICAgICAvKiE8IEdQRl9NRlBMIFBGMiBzZXR0aW5nIGZvciBYVDFfT1VUKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE11bHRpLUZ1bmN0aW9uIHNldHRpbmcgbWFzayBjb25zdGFudCBkZWZpbml0aW9ucyBhYmJyZXZpYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKyNkZWZpbmUgQUNNUDBfTl9QQjNfTXNrICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgQUNNUDBfTiAgICAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAwX09fUEI3X01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfTXNrICAgICAgICAvKjwhIEFDTVAwX08gICAgICAgICBQQjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMF9PX1BDMV9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEMxTUZQX01zayAgICAgICAgLyo8ISBBQ01QMF9PICAgICAgICAgUEMxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDBfT19QQzEyX01zayAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfTXNrICAgICAgIC8qPCEgQUNNUDBfTyAgICAgICAgIFBDMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAwX1AwX1BBMTFfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX01zayAgICAgICAvKjwhIEFDTVAwX1AwICAgICAgICBQQTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMF9QMV9QQjJfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX01zayAgICAgICAgLyo8ISBBQ01QMF9QMSAgICAgICAgUEIyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDBfUDJfUEIxMl9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgQUNNUDBfUDIgICAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAwX1AzX1BCMTNfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX01zayAgICAgICAvKjwhIEFDTVAwX1AzICAgICAgICBQQjEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMF9XTEFUX1BBN19Nc2sgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX01zayAgICAgICAgLyo8ISBBQ01QMF9XTEFUICAgICAgUEE3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDFfTl9QQjVfTXNrICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9Nc2sgICAgICAgIC8qPCEgQUNNUDFfTiAgICAgICAgIFBCNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAxX09fUEI2X01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfTXNrICAgICAgICAvKjwhIEFDTVAxX08gICAgICAgICBQQjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMV9PX1BDMTFfTXNrICAgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9Nc2sgICAgICAgLyo8ISBBQ01QMV9PICAgICAgICAgUEMxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDFfT19QQzBfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9Nc2sgICAgICAgIC8qPCEgQUNNUDFfTyAgICAgICAgIFBDMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAxX1AwX1BBMTBfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX01zayAgICAgICAvKjwhIEFDTVAxX1AwICAgICAgICBQQTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMV9QMV9QQjRfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgLyo8ISBBQ01QMV9QMSAgICAgICAgUEI0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQUNNUDFfUDJfUEIxMl9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgQUNNUDFfUDIgICAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEFDTVAxX1AzX1BCMTNfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX01zayAgICAgICAvKjwhIEFDTVAxX1AzICAgICAgICBQQjEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBBQ01QMV9XTEFUX1BBNl9Nc2sgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX01zayAgICAgICAgLyo8ISBBQ01QMV9XTEFUICAgICAgUEE2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gwX1BBMF9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0gwICAgICAgIFBBMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIMF9QQTExX01zayAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX01zayAgICAgICAvKjwhIEJQV00wX0NIMCAgICAgICBQQTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDBfUEUyX01zayAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDAgICAgICAgUEUyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gwX1BHMTRfTXNrICAgICAgU1lTX0dQR19NRlBIX1BHMTRNRlBfTXNrICAgICAgIC8qPCEgQlBXTTBfQ0gwICAgICAgIFBHMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIMV9QQTFfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfTXNrICAgICAgICAvKjwhIEJQV00wX0NIMSAgICAgICBQQTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDFfUEUzX01zayAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDEgICAgICAgUEUzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gxX1BHMTNfTXNrICAgICAgU1lTX0dQR19NRlBIX1BHMTNNRlBfTXNrICAgICAgIC8qPCEgQlBXTTBfQ0gxICAgICAgIFBHMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIMV9QQTEwX01zayAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX01zayAgICAgICAvKjwhIEJQV00wX0NIMSAgICAgICBQQTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDJfUEU0X01zayAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDIgICAgICAgUEU0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gyX1BHMTJfTXNrICAgICAgU1lTX0dQR19NRlBIX1BHMTJNRlBfTXNrICAgICAgIC8qPCEgQlBXTTBfQ0gyICAgICAgIFBHMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIMl9QQTJfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfTXNrICAgICAgICAvKjwhIEJQV00wX0NIMiAgICAgICBQQTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDJfUEE5X01zayAgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDIgICAgICAgUEE5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gzX1BHMTFfTXNrICAgICAgU1lTX0dQR19NRlBIX1BHMTFNRlBfTXNrICAgICAgIC8qPCEgQlBXTTBfQ0gzICAgICAgIFBHMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NIM19QQTNfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfTXNrICAgICAgICAvKjwhIEJQV00wX0NIMyAgICAgICBQQTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDNfUEE4X01zayAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDMgICAgICAgUEE4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0gzX1BFNV9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0gzICAgICAgIFBFNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NINF9QRzEwX01zayAgICAgIFNZU19HUEdfTUZQSF9QRzEwTUZQX01zayAgICAgICAvKjwhIEJQV00wX0NINCAgICAgICBQRzEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDRfUEE0X01zayAgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDQgICAgICAgUEE0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0g0X1BDMTNfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfTXNrICAgICAgIC8qPCEgQlBXTTBfQ0g0ICAgICAgIFBDMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NINF9QRTZfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfTXNrICAgICAgICAvKjwhIEJQV00wX0NINCAgICAgICBQRTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDRfUEY1X01zayAgICAgICBTWVNfR1BGX01GUExfUEY1TUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDQgICAgICAgUEY1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0g1X1BBNV9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTBfQ0g1ICAgICAgIFBBNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NINV9QRTdfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTdNRlBfTXNrICAgICAgICAvKjwhIEJQV00wX0NINSAgICAgICBQRTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMF9DSDVfUEY0X01zayAgICAgICBTWVNfR1BGX01GUExfUEY0TUZQX01zayAgICAgICAgLyo8ISBCUFdNMF9DSDUgICAgICAgUEY0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTBfQ0g1X1BEMTJfTXNrICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfTXNrICAgICAgIC8qPCEgQlBXTTBfQ0g1ICAgICAgIFBEMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00wX0NINV9QRzlfTXNrICAgICAgIFNZU19HUEdfTUZQSF9QRzlNRlBfTXNrICAgICAgICAvKjwhIEJQV00wX0NINSAgICAgICBQRzkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDBfUEIxMV9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9Nc2sgICAgICAgLyo8ISBCUFdNMV9DSDAgICAgICAgUEIxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gwX1BDN19Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTFfQ0gwICAgICAgIFBDNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NIMF9QRjBfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjBNRlBfTXNrICAgICAgICAvKjwhIEJQV00xX0NIMCAgICAgICBQRjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDBfUEYzX01zayAgICAgICBTWVNfR1BGX01GUExfUEYzTUZQX01zayAgICAgICAgLyo8ISBCUFdNMV9DSDAgICAgICAgUEYzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gxX1BDNl9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTFfQ0gxICAgICAgIFBDNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NIMV9QRjFfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjFNRlBfTXNrICAgICAgICAvKjwhIEJQV00xX0NIMSAgICAgICBQRjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDFfUEYyX01zayAgICAgICBTWVNfR1BGX01GUExfUEYyTUZQX01zayAgICAgICAgLyo8ISBCUFdNMV9DSDEgICAgICAgUEYyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gxX1BCMTBfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfTXNrICAgICAgIC8qPCEgQlBXTTFfQ0gxICAgICAgIFBCMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NIMl9QQjlfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfTXNrICAgICAgICAvKjwhIEJQV00xX0NIMiAgICAgICBQQjkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDJfUEE3X01zayAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX01zayAgICAgICAgLyo8ISBCUFdNMV9DSDIgICAgICAgUEE3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gyX1BBMTJfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfTXNrICAgICAgIC8qPCEgQlBXTTFfQ0gyICAgICAgIFBBMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NIM19QQTZfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfTXNrICAgICAgICAvKjwhIEJQV00xX0NIMyAgICAgICBQQTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDNfUEExM19Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9Nc2sgICAgICAgLyo8ISBCUFdNMV9DSDMgICAgICAgUEExMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0gzX1BCOF9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTFfQ0gzICAgICAgIFBCOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NINF9QQTE0X01zayAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX01zayAgICAgICAvKjwhIEJQV00xX0NINCAgICAgICBQQTE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDRfUEM4X01zayAgICAgICBTWVNfR1BDX01GUEhfUEM4TUZQX01zayAgICAgICAgLyo8ISBCUFdNMV9DSDQgICAgICAgUEM4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0g0X1BCN19Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9Nc2sgICAgICAgIC8qPCEgQlBXTTFfQ0g0ICAgICAgIFBCNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEJQV00xX0NINV9QQTE1X01zayAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX01zayAgICAgICAvKjwhIEJQV00xX0NINSAgICAgICBQQTE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBCUFdNMV9DSDVfUEI2X01zayAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBCUFdNMV9DSDUgICAgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQlBXTTFfQ0g1X1BFMTNfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfTXNrICAgICAgIC8qPCEgQlBXTTFfQ0g1ICAgICAgIFBFMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENBTjBfUlhEX1BBMTNfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX01zayAgICAgICAvKjwhIENBTjBfUlhEICAgICAgICBQQTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDQU4wX1JYRF9QRDEwX01zayAgICAgICBTWVNfR1BEX01GUEhfUEQxME1GUF9Nc2sgICAgICAgLyo8ISBDQU4wX1JYRCAgICAgICAgUEQxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0FOMF9SWERfUEE0X01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9Nc2sgICAgICAgIC8qPCEgQ0FOMF9SWEQgICAgICAgIFBBNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENBTjBfUlhEX1BDNF9Nc2sgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfTXNrICAgICAgICAvKjwhIENBTjBfUlhEICAgICAgICBQQzQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDQU4wX1JYRF9QQjEwX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9Nc2sgICAgICAgLyo8ISBDQU4wX1JYRCAgICAgICAgUEIxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0FOMF9SWERfUEUxNV9Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFMTVNRlBfTXNrICAgICAgIC8qPCEgQ0FOMF9SWEQgICAgICAgIFBFMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENBTjBfVFhEX1BEMTFfTXNrICAgICAgIFNZU19HUERfTUZQSF9QRDExTUZQX01zayAgICAgICAvKjwhIENBTjBfVFhEICAgICAgICBQRDExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDQU4wX1RYRF9QQzVfTXNrICAgICAgICBTWVNfR1BDX01GUExfUEM1TUZQX01zayAgICAgICAgLyo8ISBDQU4wX1RYRCAgICAgICAgUEM1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0FOMF9UWERfUEIxMV9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfTXNrICAgICAgIC8qPCEgQ0FOMF9UWEQgICAgICAgIFBCMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENBTjBfVFhEX1BBMTJfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX01zayAgICAgICAvKjwhIENBTjBfVFhEICAgICAgICBQQTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDQU4wX1RYRF9QRTE0X01zayAgICAgICBTWVNfR1BFX01GUEhfUEUxNE1GUF9Nc2sgICAgICAgLyo8ISBDQU4wX1RYRCAgICAgICAgUEUxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0FOMF9UWERfUEE1X01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9Nc2sgICAgICAgIC8qPCEgQ0FOMF9UWEQgICAgICAgIFBBNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENMS09fUEMxM19Nc2sgICAgICAgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX01zayAgICAgICAvKjwhIENMS08gICAgICAgICAgICBQQzEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBDTEtPX1BCMTRfTXNrICAgICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBDTEtPICAgICAgICAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgQ0xLT19QRDEyX01zayAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfTXNrICAgICAgIC8qPCEgQ0xLTyAgICAgICAgICAgIFBEMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIENMS09fUEcxNV9Nc2sgICAgICAgICAgIFNZU19HUEdfTUZQSF9QRzE1TUZQX01zayAgICAgICAvKjwhIENMS08gICAgICAgICAgICBQRzE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBEQUMwX09VVF9QQjEyX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9Nc2sgICAgICAgLyo8ISBEQUMwX09VVCAgICAgICAgUEIxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgREFDMF9TVF9QQTEwX01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfTXNrICAgICAgIC8qPCEgREFDMF9TVCAgICAgICAgIFBBMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIERBQzBfU1RfUEEwX01zayAgICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfTXNrICAgICAgICAvKjwhIERBQzBfU1QgICAgICAgICBQQTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBEQUMxX09VVF9QQjEzX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBEQUMxX09VVCAgICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgREFDMV9TVF9QQTFfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9Nc2sgICAgICAgIC8qPCEgREFDMV9TVCAgICAgICAgIFBBMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIERBQzFfU1RfUEExMV9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX01zayAgICAgICAvKjwhIERBQzFfU1QgICAgICAgICBQQTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDBfUEIwX01zayAgICAgICBTWVNfR1BCX01GUExfUEIwTUZQX01zayAgICAgICAgLyo8ISBFQURDMF9DSDAgICAgICAgUEIwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0gxX1BCMV9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgRUFEQzBfQ0gxICAgICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NIMTBfUEIxMF9Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX01zayAgICAgICAvKjwhIEVBREMwX0NIMTAgICAgICBQQjEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDExX1BCMTFfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9Nc2sgICAgICAgLyo8ISBFQURDMF9DSDExICAgICAgUEIxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0gxMl9QQjEyX01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgRUFEQzBfQ0gxMiAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NIMTNfUEIxM19Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX01zayAgICAgICAvKjwhIEVBREMwX0NIMTMgICAgICBQQjEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDE0X1BCMTRfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBFQURDMF9DSDE0ICAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0gxNV9QQjE1X01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfTXNrICAgICAgIC8qPCEgRUFEQzBfQ0gxNSAgICAgIFBCMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NIMl9QQjJfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfTXNrICAgICAgICAvKjwhIEVBREMwX0NIMiAgICAgICBQQjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDNfUEIzX01zayAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX01zayAgICAgICAgLyo8ISBFQURDMF9DSDMgICAgICAgUEIzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0g0X1BCNF9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgRUFEQzBfQ0g0ICAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NINV9QQjVfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIEVBREMwX0NINSAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDZfUEI2X01zayAgICAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBFQURDMF9DSDYgICAgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfQ0g3X1BCN19Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9Nc2sgICAgICAgIC8qPCEgRUFEQzBfQ0g3ICAgICAgIFBCNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX0NIOF9QQjhfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjhNRlBfTXNrICAgICAgICAvKjwhIEVBREMwX0NIOCAgICAgICBQQjggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9DSDlfUEI5X01zayAgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX01zayAgICAgICAgLyo8ISBFQURDMF9DSDkgICAgICAgUEI5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfU1RfUEQxMl9Nc2sgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfTXNrICAgICAgIC8qPCEgRUFEQzBfU1QgICAgICAgIFBEMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVBREMwX1NUX1BGNV9Nc2sgICAgICAgIFNZU19HUEZfTUZQTF9QRjVNRlBfTXNrICAgICAgICAvKjwhIEVBREMwX1NUICAgICAgICBQRjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQURDMF9TVF9QQzEzX01zayAgICAgICBTWVNfR1BDX01GUEhfUEMxM01GUF9Nc2sgICAgICAgLyo8ISBFQURDMF9TVCAgICAgICAgUEMxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUFEQzBfU1RfUEcxNV9Nc2sgICAgICAgU1lTX0dQR19NRlBIX1BHMTVNRlBfTXNrICAgICAgIC8qPCEgRUFEQzBfU1QgICAgICAgIFBHMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDBfUEc5X01zayAgICAgICAgIFNZU19HUEdfTUZQSF9QRzlNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDAgICAgICAgICBQRzkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQwX1BDMF9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX01zayAgICAgICAgLyo8ISBFQklfQUQwICAgICAgICAgUEMwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMV9QQzFfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEMSAgICAgICAgIFBDMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDFfUEcxMF9Nc2sgICAgICAgIFNZU19HUEdfTUZQSF9QRzEwTUZQX01zayAgICAgICAvKjwhIEVCSV9BRDEgICAgICAgICBQRzEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxMF9QRTFfTXNrICAgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX01zayAgICAgICAgLyo8ISBFQklfQUQxMCAgICAgICAgUEUxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTBfUEQzX01zayAgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEMTAgICAgICAgIFBEMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDEwX1BEMTNfTXNrICAgICAgIFNZU19HUERfTUZQSF9QRDEzTUZQX01zayAgICAgICAvKjwhIEVCSV9BRDEwICAgICAgICBQRDEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxMV9QRTBfTXNrICAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX01zayAgICAgICAgLyo8ISBFQklfQUQxMSAgICAgICAgUEUwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTFfUEQyX01zayAgICAgICAgU1lTX0dQRF9NRlBMX1BEMk1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEMTEgICAgICAgIFBEMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDEyX1BEMV9Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDFNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDEyICAgICAgICBQRDEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxMl9QQjE1X01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQxMiAgICAgICAgUEIxNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTJfUEg4X01zayAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEMTIgICAgICAgIFBIOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDEzX1BEMF9Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDEzICAgICAgICBQRDAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxM19QQjE0X01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQxMyAgICAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTNfUEg5X01zayAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEMTMgICAgICAgIFBIOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDE0X1BCMTNfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX01zayAgICAgICAvKjwhIEVCSV9BRDE0ICAgICAgICBQQjEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQxNF9QSDEwX01zayAgICAgICBTWVNfR1BIX01GUEhfUEgxME1GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQxNCAgICAgICAgUEgxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMTVfUEIxMl9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEMTUgICAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDE1X1BIMTFfTXNrICAgICAgIFNZU19HUEhfTUZQSF9QSDExTUZQX01zayAgICAgICAvKjwhIEVCSV9BRDE1ICAgICAgICBQSDExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQyX1BHMTFfTXNrICAgICAgICBTWVNfR1BHX01GUEhfUEcxMU1GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQyICAgICAgICAgUEcxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEMl9QQzJfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEMiAgICAgICAgIFBDMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDNfUEMzX01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDMgICAgICAgICBQQzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQzX1BHMTJfTXNrICAgICAgICBTWVNfR1BHX01GUEhfUEcxMk1GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQzICAgICAgICAgUEcxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FENF9QRzEzX01zayAgICAgICAgU1lTX0dQR19NRlBIX1BHMTNNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FENCAgICAgICAgIFBHMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDRfUEM0X01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDQgICAgICAgICBQQzQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQ1X1BHMTRfTXNrICAgICAgICBTWVNfR1BHX01GUEhfUEcxNE1GUF9Nc2sgICAgICAgLyo8ISBFQklfQUQ1ICAgICAgICAgUEcxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FENV9QQzVfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FENSAgICAgICAgIFBDNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDZfUEQ4X01zayAgICAgICAgIFNZU19HUERfTUZQSF9QRDhNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDYgICAgICAgICBQRDggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQ2X1BBNl9Nc2sgICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX01zayAgICAgICAgLyo8ISBFQklfQUQ2ICAgICAgICAgUEE2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEN19QQTdfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FENyAgICAgICAgIFBBNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDdfUEQ5X01zayAgICAgICAgIFNZU19HUERfTUZQSF9QRDlNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRDcgICAgICAgICBQRDkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQ4X1BDNl9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX01zayAgICAgICAgLyo8ISBFQklfQUQ4ICAgICAgICAgUEM2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEOF9QRTE0X01zayAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTRNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEOCAgICAgICAgIFBFMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRDlfUEUxNV9Nc2sgICAgICAgIFNZU19HUEVfTUZQSF9QRTE1TUZQX01zayAgICAgICAvKjwhIEVCSV9BRDkgICAgICAgICBQRTE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUQ5X1BDN19Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX01zayAgICAgICAgLyo8ISBFQklfQUQ5ICAgICAgICAgUEM3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjBfUEI1X01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjAgICAgICAgIFBCNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIwX1BIN19Nc2sgICAgICAgIFNZU19HUEhfTUZQTF9QSDdNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIwICAgICAgICBQSDcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMV9QSDZfTXNrICAgICAgICBTWVNfR1BIX01GUExfUEg2TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMSAgICAgICAgUEg2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjFfUEI0X01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjEgICAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxMF9QRThfTXNrICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxMCAgICAgICBQRTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTBfUEMxM19Nc2sgICAgICBTWVNfR1BDX01GUEhfUEMxM01GUF9Nc2sgICAgICAgLyo8ISBFQklfQURSMTAgICAgICAgUEMxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjExX1BHMl9Nc2sgICAgICAgU1lTX0dQR19NRlBMX1BHMk1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjExICAgICAgIFBHMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxMV9QRTlfTXNrICAgICAgIFNZU19HUEVfTUZQSF9QRTlNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxMSAgICAgICBQRTkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTJfUEczX01zayAgICAgICBTWVNfR1BHX01GUExfUEczTUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMTIgICAgICAgUEczICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjEyX1BFMTBfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEUjEyICAgICAgIFBFMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxM19QRzRfTXNrICAgICAgIFNZU19HUEdfTUZQTF9QRzRNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxMyAgICAgICBQRzQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTNfUEUxMV9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9Nc2sgICAgICAgLyo8ISBFQklfQURSMTMgICAgICAgUEUxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjE0X1BFMTJfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEUjE0ICAgICAgIFBFMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxNF9QRjExX01zayAgICAgIFNZU19HUEZfTUZQSF9QRjExTUZQX01zayAgICAgICAvKjwhIEVCSV9BRFIxNCAgICAgICBQRjExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTVfUEYxMF9Nc2sgICAgICBTWVNfR1BGX01GUEhfUEYxME1GUF9Nc2sgICAgICAgLyo8ISBFQklfQURSMTUgICAgICAgUEYxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjE1X1BFMTNfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEUjE1ICAgICAgIFBFMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxNl9QQjExX01zayAgICAgIFNZU19HUEJfTUZQSF9QQjExTUZQX01zayAgICAgICAvKjwhIEVCSV9BRFIxNiAgICAgICBQQjExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTZfUEY5X01zayAgICAgICBTWVNfR1BGX01GUEhfUEY5TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMTYgICAgICAgUEY5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjE2X1BDOF9Nc2sgICAgICAgU1lTX0dQQ19NRlBIX1BDOE1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjE2ICAgICAgIFBDOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxN19QRjhfTXNrICAgICAgIFNZU19HUEZfTUZQSF9QRjhNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxNyAgICAgICBQRjggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTdfUEIxMF9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9Nc2sgICAgICAgLyo8ISBFQklfQURSMTcgICAgICAgUEIxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjE4X1BCOV9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjE4ICAgICAgIFBCOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIxOF9QRjdfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjdNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIxOCAgICAgICBQRjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMTlfUEY2X01zayAgICAgICBTWVNfR1BGX01GUExfUEY2TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMTkgICAgICAgUEY2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjE5X1BCOF9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCOE1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjE5ICAgICAgIFBCOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIyX1BCM19Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIyICAgICAgICBQQjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSMl9QSDVfTXNrICAgICAgICBTWVNfR1BIX01GUExfUEg1TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSMiAgICAgICAgUEg1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjNfUEg0X01zayAgICAgICAgU1lTX0dQSF9NRlBMX1BINE1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjMgICAgICAgIFBINCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFIzX1BCMl9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFIzICAgICAgICBQQjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSNF9QQzEyX01zayAgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9Nc2sgICAgICAgLyo8ISBFQklfQURSNCAgICAgICAgUEMxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjVfUEMxMV9Nc2sgICAgICAgU1lTX0dQQ19NRlBIX1BDMTFNRlBfTXNrICAgICAgIC8qPCEgRUJJX0FEUjUgICAgICAgIFBDMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFI2X1BDMTBfTXNrICAgICAgIFNZU19HUENfTUZQSF9QQzEwTUZQX01zayAgICAgICAvKjwhIEVCSV9BRFI2ICAgICAgICBQQzEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQURSN19QQzlfTXNrICAgICAgICBTWVNfR1BDX01GUEhfUEM5TUZQX01zayAgICAgICAgLyo8ISBFQklfQURSNyAgICAgICAgUEM5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FEUjhfUEIxX01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FEUjggICAgICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9BRFI5X1BCMF9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfTXNrICAgICAgICAvKjwhIEVCSV9BRFI5ICAgICAgICBQQjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfQUxFX1BBOF9Nc2sgICAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX01zayAgICAgICAgLyo8ISBFQklfQUxFICAgICAgICAgUEE4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX0FMRV9QRTJfTXNrICAgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX0FMRSAgICAgICAgIFBFMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9NQ0xLX1BFM19Nc2sgICAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfTXNrICAgICAgICAvKjwhIEVCSV9NQ0xLICAgICAgICBQRTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfTUNMS19QQTlfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX01zayAgICAgICAgLyo8ISBFQklfTUNMSyAgICAgICAgUEE5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25DUzBfUEI3X01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCN01GUF9Nc2sgICAgICAgIC8qPCEgRUJJX25DUzAgICAgICAgIFBCNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uQ1MwX1BGNl9Nc2sgICAgICAgIFNZU19HUEZfTUZQTF9QRjZNRlBfTXNrICAgICAgICAvKjwhIEVCSV9uQ1MwICAgICAgICBQRjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfbkNTMF9QRDEyX01zayAgICAgICBTWVNfR1BEX01GUEhfUEQxMk1GUF9Nc2sgICAgICAgLyo8ISBFQklfbkNTMCAgICAgICAgUEQxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25DUzBfUEQxNF9Nc2sgICAgICAgU1lTX0dQRF9NRlBIX1BEMTRNRlBfTXNrICAgICAgIC8qPCEgRUJJX25DUzAgICAgICAgIFBEMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uQ1MwX1BGM19Nc2sgICAgICAgIFNZU19HUEZfTUZQTF9QRjNNRlBfTXNrICAgICAgICAvKjwhIEVCSV9uQ1MwICAgICAgICBQRjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfbkNTMV9QRjJfTXNrICAgICAgICBTWVNfR1BGX01GUExfUEYyTUZQX01zayAgICAgICAgLyo8ISBFQklfbkNTMSAgICAgICAgUEYyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25DUzFfUEQxMV9Nc2sgICAgICAgU1lTX0dQRF9NRlBIX1BEMTFNRlBfTXNrICAgICAgIC8qPCEgRUJJX25DUzEgICAgICAgIFBEMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uQ1MxX1BCNl9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfTXNrICAgICAgICAvKjwhIEVCSV9uQ1MxICAgICAgICBQQjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfbkNTMl9QRDEwX01zayAgICAgICBTWVNfR1BEX01GUEhfUEQxME1GUF9Nc2sgICAgICAgLyo8ISBFQklfbkNTMiAgICAgICAgUEQxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25SRF9QQTExX01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfTXNrICAgICAgIC8qPCEgRUJJX25SRCAgICAgICAgIFBBMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uUkRfUEU1X01zayAgICAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfTXNrICAgICAgICAvKjwhIEVCSV9uUkQgICAgICAgICBQRTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfbldSX1BBMTBfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgLyo8ISBFQklfbldSICAgICAgICAgUEExMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUJJX25XUl9QRTRfTXNrICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9Nc2sgICAgICAgIC8qPCEgRUJJX25XUiAgICAgICAgIFBFNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVCSV9uV1JIX1BCNl9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfTXNrICAgICAgICAvKjwhIEVCSV9uV1JIICAgICAgICBQQjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQklfbldSTF9QQjdfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX01zayAgICAgICAgLyo8ISBFQklfbldSTCAgICAgICAgUEI3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUNBUDBfSUMwX1BBMTBfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTBNRlBfTXNrICAgICAgIC8qPCEgRUNBUDBfSUMwICAgICAgIFBBMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVDQVAwX0lDMF9QRThfTXNrICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfTXNrICAgICAgICAvKjwhIEVDQVAwX0lDMCAgICAgICBQRTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQ0FQMF9JQzFfUEU5X01zayAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX01zayAgICAgICAgLyo8ISBFQ0FQMF9JQzEgICAgICAgUEU5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUNBUDBfSUMxX1BBOV9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgIC8qPCEgRUNBUDBfSUMxICAgICAgIFBBOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVDQVAwX0lDMl9QQThfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfTXNrICAgICAgICAvKjwhIEVDQVAwX0lDMiAgICAgICBQQTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQ0FQMF9JQzJfUEUxMF9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9Nc2sgICAgICAgLyo8ISBFQ0FQMF9JQzIgICAgICAgUEUxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUNBUDFfSUMwX1BDMTBfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTBNRlBfTXNrICAgICAgIC8qPCEgRUNBUDFfSUMwICAgICAgIFBDMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVDQVAxX0lDMF9QRTEzX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX01zayAgICAgICAvKjwhIEVDQVAxX0lDMCAgICAgICBQRTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQ0FQMV9JQzFfUEUxMl9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9Nc2sgICAgICAgLyo8ISBFQ0FQMV9JQzEgICAgICAgUEUxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRUNBUDFfSUMxX1BDMTFfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTFNRlBfTXNrICAgICAgIC8qPCEgRUNBUDFfSUMxICAgICAgIFBDMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVDQVAxX0lDMl9QRTExX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX01zayAgICAgICAvKjwhIEVDQVAxX0lDMiAgICAgICBQRTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFQ0FQMV9JQzJfUEMxMl9Nc2sgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9Nc2sgICAgICAgLyo8ISBFQ0FQMV9JQzIgICAgICAgUEMxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TQ0xfUEI1X01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMF9TQ0wgICAgICAgIFBCNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0NMX1BDMV9Nc2sgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU0NMICAgICAgICBQQzEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NDTF9QRjNfTXNrICAgICAgICBTWVNfR1BGX01GUExfUEYzTUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NDTCAgICAgICAgUEYzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TQ0xfUEUxM19Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfTXNrICAgICAgIC8qPCEgSTJDMF9TQ0wgICAgICAgIFBFMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0NMX1BEN19Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDdNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU0NMICAgICAgICBQRDcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NDTF9QQTVfTXNrICAgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NDTCAgICAgICAgUEE1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TQ0xfUEMxMl9Nc2sgICAgICAgU1lTX0dQQ19NRlBIX1BDMTJNRlBfTXNrICAgICAgIC8qPCEgSTJDMF9TQ0wgICAgICAgIFBDMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0RBX1BCNF9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU0RBICAgICAgICBQQjQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NEQV9QQzhfTXNrICAgICAgICBTWVNfR1BDX01GUEhfUEM4TUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NEQSAgICAgICAgUEM4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TREFfUEMwX01zayAgICAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMF9TREEgICAgICAgIFBDMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0RBX1BENl9Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDZNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU0RBICAgICAgICBQRDYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NEQV9QQzExX01zayAgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9Nc2sgICAgICAgLyo8ISBJMkMwX1NEQSAgICAgICAgUEMxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TREFfUEE0X01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMF9TREEgICAgICAgIFBBNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU0RBX1BGMl9Nc2sgICAgICAgIFNZU19HUEZfTUZQTF9QRjJNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU0RBICAgICAgICBQRjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NNQkFMX1BHMl9Nc2sgICAgICBTWVNfR1BHX01GUExfUEcyTUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NNQkFMICAgICAgUEcyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMF9TTUJBTF9QQzNfTXNrICAgICAgU1lTX0dQQ19NRlBMX1BDM01GUF9Nc2sgICAgICAgIC8qPCEgSTJDMF9TTUJBTCAgICAgIFBDMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzBfU01CU1VTX1BDMl9Nc2sgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfTXNrICAgICAgICAvKjwhIEkyQzBfU01CU1VTICAgICBQQzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMwX1NNQlNVU19QRzNfTXNrICAgICBTWVNfR1BHX01GUExfUEczTUZQX01zayAgICAgICAgLyo8ISBJMkMwX1NNQlNVUyAgICAgUEczICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEEzX01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TQ0wgICAgICAgIFBBMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0NMX1BHMl9Nc2sgICAgICAgIFNZU19HUEdfTUZQTF9QRzJNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0NMICAgICAgICBQRzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NDTF9QQjFfTXNrICAgICAgICBTWVNfR1BCX01GUExfUEIxTUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NDTCAgICAgICAgUEIxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEIxMV9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCMTFNRlBfTXNrICAgICAgIC8qPCEgSTJDMV9TQ0wgICAgICAgIFBCMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0NMX1BENV9Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDVNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0NMICAgICAgICBQRDUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NDTF9QQTEyX01zayAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9Nc2sgICAgICAgLyo8ISBJMkMxX1NDTCAgICAgICAgUEExMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEM1X01zayAgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TQ0wgICAgICAgIFBDNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0NMX1BBN19Nc2sgICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0NMICAgICAgICBQQTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NDTF9QRjBfTXNrICAgICAgICBTWVNfR1BGX01GUExfUEYwTUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NDTCAgICAgICAgUEYwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TQ0xfUEUxX01zayAgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TQ0wgICAgICAgIFBFMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0RBX1BCMF9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0RBICAgICAgICBQQjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NEQV9QQTZfTXNrICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NEQSAgICAgICAgUEE2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TREFfUEExM19Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfTXNrICAgICAgIC8qPCEgSTJDMV9TREEgICAgICAgIFBBMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0RBX1BHM19Nc2sgICAgICAgIFNZU19HUEdfTUZQTF9QRzNNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0RBICAgICAgICBQRzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NEQV9QRTBfTXNrICAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NEQSAgICAgICAgUEUwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TREFfUEM0X01zayAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TREEgICAgICAgIFBDNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0RBX1BBMl9Nc2sgICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0RBICAgICAgICBQQTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NEQV9QQjEwX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9Nc2sgICAgICAgLyo8ISBJMkMxX1NEQSAgICAgICAgUEIxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TREFfUEYxX01zayAgICAgICAgU1lTX0dQRl9NRlBMX1BGMU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TREEgICAgICAgIFBGMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU0RBX1BENF9Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDRNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU0RBICAgICAgICBQRDQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NNQkFMX1BCOV9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEI5TUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NNQkFMICAgICAgUEI5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TTUJBTF9QQzdfTXNrICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TTUJBTCAgICAgIFBDNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU01CQUxfUEg4X01zayAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU01CQUwgICAgICBQSDggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMxX1NNQlNVU19QSDlfTXNrICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX01zayAgICAgICAgLyo8ISBJMkMxX1NNQlNVUyAgICAgUEg5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMV9TTUJTVVNfUEM2X01zayAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMV9TTUJTVVMgICAgIFBDNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzFfU01CU1VTX1BCOF9Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjhNRlBfTXNrICAgICAgICAvKjwhIEkyQzFfU01CU1VTICAgICBQQjggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NDTF9QQjEzX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBJMkMyX1NDTCAgICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEExMV9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfTXNrICAgICAgIC8qPCEgSTJDMl9TQ0wgICAgICAgIFBBMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU0NMX1BIOF9Nc2sgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfTXNrICAgICAgICAvKjwhIEkyQzJfU0NMICAgICAgICBQSDggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NDTF9QRDlfTXNrICAgICAgICBTWVNfR1BEX01GUEhfUEQ5TUZQX01zayAgICAgICAgLyo8ISBJMkMyX1NDTCAgICAgICAgUEQ5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TQ0xfUEQxX01zayAgICAgICAgU1lTX0dQRF9NRlBMX1BEMU1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMl9TQ0wgICAgICAgIFBEMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU0NMX1BBMTRfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX01zayAgICAgICAvKjwhIEkyQzJfU0NMICAgICAgICBQQTE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NDTF9QQTFfTXNrICAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX01zayAgICAgICAgLyo8ISBJMkMyX1NDTCAgICAgICAgUEExICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TREFfUEEwX01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMl9TREEgICAgICAgIFBBMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU0RBX1BCMTJfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAvKjwhIEkyQzJfU0RBICAgICAgICBQQjEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NEQV9QQTEwX01zayAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgLyo8ISBJMkMyX1NEQSAgICAgICAgUEExMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TREFfUEExNV9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfTXNrICAgICAgIC8qPCEgSTJDMl9TREEgICAgICAgIFBBMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU0RBX1BIOV9Nc2sgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfTXNrICAgICAgICAvKjwhIEkyQzJfU0RBICAgICAgICBQSDkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NEQV9QRDhfTXNrICAgICAgICBTWVNfR1BEX01GUEhfUEQ4TUZQX01zayAgICAgICAgLyo8ISBJMkMyX1NEQSAgICAgICAgUEQ4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJDMl9TREFfUEQwX01zayAgICAgICAgU1lTX0dQRF9NRlBMX1BEME1GUF9Nc2sgICAgICAgIC8qPCEgSTJDMl9TREEgICAgICAgIFBEMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyQzJfU01CQUxfUEIxNV9Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX01zayAgICAgICAvKjwhIEkyQzJfU01CQUwgICAgICBQQjE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMkMyX1NNQlNVU19QQjE0X01zayAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBJMkMyX1NNQlNVUyAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9CQ0xLX1BBMTJfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTJNRlBfTXNrICAgICAgIC8qPCEgSTJTMF9CQ0xLICAgICAgIFBBMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfQkNMS19QQjVfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfQkNMSyAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0JDTEtfUEU4X01zayAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX01zayAgICAgICAgLyo8ISBJMlMwX0JDTEsgICAgICAgUEU4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9CQ0xLX1BFMV9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9CQ0xLICAgICAgIFBFMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfQkNMS19QRjEwX01zayAgICAgIFNZU19HUEZfTUZQSF9QRjEwTUZQX01zayAgICAgICAvKjwhIEkyUzBfQkNMSyAgICAgICBQRjEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0JDTEtfUEM0X01zayAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX01zayAgICAgICAgLyo8ISBJMlMwX0JDTEsgICAgICAgUEM0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9ESV9QRjhfTXNrICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOE1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9ESSAgICAgICAgIFBGOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfRElfUEIzX01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjNNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfREkgICAgICAgICBQQjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0RJX1BFMTBfTXNrICAgICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9Nc2sgICAgICAgLyo8ISBJMlMwX0RJICAgICAgICAgUEUxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9ESV9QQTE0X01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTRNRlBfTXNrICAgICAgIC8qPCEgSTJTMF9ESSAgICAgICAgIFBBMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfRElfUEg4X01zayAgICAgICAgIFNZU19HUEhfTUZQSF9QSDhNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfREkgICAgICAgICBQSDggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0RJX1BDMl9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEMyTUZQX01zayAgICAgICAgLyo8ISBJMlMwX0RJICAgICAgICAgUEMyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9ET19QQjJfTXNrICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9ETyAgICAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfRE9fUEg5X01zayAgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfRE8gICAgICAgICBQSDkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0RPX1BGN19Nc2sgICAgICAgICBTWVNfR1BGX01GUExfUEY3TUZQX01zayAgICAgICAgLyo8ISBJMlMwX0RPICAgICAgICAgUEY3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9ET19QRTExX01zayAgICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfTXNrICAgICAgIC8qPCEgSTJTMF9ETyAgICAgICAgIFBFMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfRE9fUEMxX01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfRE8gICAgICAgICBQQzEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0RPX1BBMTVfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExNU1GUF9Nc2sgICAgICAgLyo8ISBJMlMwX0RPICAgICAgICAgUEExNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9MUkNLX1BGNl9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9MUkNLICAgICAgIFBGNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfTFJDS19QRTEyX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX01zayAgICAgICAvKjwhIEkyUzBfTFJDSyAgICAgICBQRTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX0xSQ0tfUEMwX01zayAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX01zayAgICAgICAgLyo8ISBJMlMwX0xSQ0sgICAgICAgUEMwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9MUkNLX1BIMTBfTXNrICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfTXNrICAgICAgIC8qPCEgSTJTMF9MUkNLICAgICAgIFBIMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfTFJDS19QQjFfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfTFJDSyAgICAgICBQQjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX01DTEtfUEU5X01zayAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX01zayAgICAgICAgLyo8ISBJMlMwX01DTEsgICAgICAgUEU5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9NQ0xLX1BCNF9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgSTJTMF9NQ0xLICAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfTUNMS19QQzNfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfTUNMSyAgICAgICBQQzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJMlMwX01DTEtfUEUwX01zayAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX01zayAgICAgICAgLyo8ISBJMlMwX01DTEsgICAgICAgUEUwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSTJTMF9NQ0xLX1BBMTNfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfTXNrICAgICAgIC8qPCEgSTJTMF9NQ0xLICAgICAgIFBBMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEkyUzBfTUNMS19QRjlfTXNrICAgICAgIFNZU19HUEZfTUZQSF9QRjlNRlBfTXNrICAgICAgICAvKjwhIEkyUzBfTUNMSyAgICAgICBQRjkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJQ0VfQ0xLX1BGMV9Nc2sgICAgICAgICBTWVNfR1BGX01GUExfUEYxTUZQX01zayAgICAgICAgLyo8ISBJQ0VfQ0xLICAgICAgICAgUEYxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSUNFX0RBVF9QRjBfTXNrICAgICAgICAgU1lTX0dQRl9NRlBMX1BGME1GUF9Nc2sgICAgICAgIC8qPCEgSUNFX0RBVCAgICAgICAgIFBGMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDBfUEI1X01zayAgICAgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIElOVDAgICAgICAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQwX1BBNl9Nc2sgICAgICAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX01zayAgICAgICAgLyo8ISBJTlQwICAgICAgICAgICAgUEE2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UMV9QQjRfTXNrICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNE1GUF9Nc2sgICAgICAgIC8qPCEgSU5UMSAgICAgICAgICAgIFBCNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDFfUEE3X01zayAgICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfTXNrICAgICAgICAvKjwhIElOVDEgICAgICAgICAgICBQQTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQyX1BCM19Nc2sgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX01zayAgICAgICAgLyo8ISBJTlQyICAgICAgICAgICAgUEIzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UMl9QQzZfTXNrICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9Nc2sgICAgICAgIC8qPCEgSU5UMiAgICAgICAgICAgIFBDNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDNfUEM3X01zayAgICAgICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfTXNrICAgICAgICAvKjwhIElOVDMgICAgICAgICAgICBQQzcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQzX1BCMl9Nc2sgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX01zayAgICAgICAgLyo8ISBJTlQzICAgICAgICAgICAgUEIyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UNF9QQjZfTXNrICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNk1GUF9Nc2sgICAgICAgIC8qPCEgSU5UNCAgICAgICAgICAgIFBCNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDRfUEE4X01zayAgICAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfTXNrICAgICAgICAvKjwhIElOVDQgICAgICAgICAgICBQQTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQ1X1BCN19Nc2sgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI3TUZQX01zayAgICAgICAgLyo8ISBJTlQ1ICAgICAgICAgICAgUEI3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UNV9QRDEyX01zayAgICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTJNRlBfTXNrICAgICAgIC8qPCEgSU5UNSAgICAgICAgICAgIFBEMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDZfUEQxMV9Nc2sgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDExTUZQX01zayAgICAgICAvKjwhIElOVDYgICAgICAgICAgICBQRDExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBJTlQ2X1BCOF9Nc2sgICAgICAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX01zayAgICAgICAgLyo8ISBJTlQ2ICAgICAgICAgICAgUEI4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgSU5UN19QQjlfTXNrICAgICAgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9Nc2sgICAgICAgIC8qPCEgSU5UNyAgICAgICAgICAgIFBCOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIElOVDdfUEQxMF9Nc2sgICAgICAgICAgIFNZU19HUERfTUZQSF9QRDEwTUZQX01zayAgICAgICAvKjwhIElOVDcgICAgICAgICAgICBQRDEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9CUkFLRTBfUEU4X01zayAgICBTWVNfR1BFX01GUEhfUEU4TUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9CUkFLRTAgICAgUEU4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQlJBS0UwX1BCMV9Nc2sgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQlJBS0UwICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0JSQUtFMV9QQjBfTXNrICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0JSQUtFMSAgICBQQjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9CUkFLRTFfUEU5X01zayAgICBTWVNfR1BFX01GUEhfUEU5TUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9CUkFLRTEgICAgUEU5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gwX1BBNV9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBNU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gwICAgICAgIFBBNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIMF9QRTdfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTdNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NIMCAgICAgICBQRTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDBfUEU4X01zayAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDAgICAgICAgUEU4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gwX1BCNV9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gwICAgICAgIFBCNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIMV9QQTRfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NIMSAgICAgICBQQTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDFfUEI0X01zayAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDEgICAgICAgUEI0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gxX1BFOV9Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gxICAgICAgIFBFOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIMV9QRTZfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NIMSAgICAgICBQRTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDJfUEU1X01zayAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDIgICAgICAgUEU1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gyX1BCM19Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gyICAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIMl9QRTEwX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX01zayAgICAgICAvKjwhIEVQV00wX0NIMiAgICAgICBQRTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDJfUEEzX01zayAgICAgICBTWVNfR1BBX01GUExfUEEzTUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDIgICAgICAgUEEzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gzX1BBMl9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBMk1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gzICAgICAgIFBBMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NIM19QRTExX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTExTUZQX01zayAgICAgICAvKjwhIEVQV00wX0NIMyAgICAgICBQRTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDNfUEU0X01zayAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDMgICAgICAgUEU0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0gzX1BCMl9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0gzICAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NINF9QRDE0X01zayAgICAgIFNZU19HUERfTUZQSF9QRDE0TUZQX01zayAgICAgICAvKjwhIEVQV00wX0NINCAgICAgICBQRDE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDRfUEIxX01zayAgICAgICBTWVNfR1BCX01GUExfUEIxTUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDQgICAgICAgUEIxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0g0X1BFM19Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFM01GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0g0ICAgICAgIFBFMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NINF9QQTFfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NINCAgICAgICBQQTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDRfUEUxMl9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxMk1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMF9DSDQgICAgICAgUEUxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0g1X1BCMF9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfQ0g1ICAgICAgIFBCMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NINV9QRTJfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfTXNrICAgICAgICAvKjwhIEVQV00wX0NINSAgICAgICBQRTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9DSDVfUEEwX01zayAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX01zayAgICAgICAgLyo8ISBFUFdNMF9DSDUgICAgICAgUEEwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfQ0g1X1BFMTNfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTNNRlBfTXNrICAgICAgIC8qPCEgRVBXTTBfQ0g1ICAgICAgIFBFMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX0NINV9QSDExX01zayAgICAgIFNZU19HUEhfTUZQSF9QSDExTUZQX01zayAgICAgICAvKjwhIEVQV00wX0NINSAgICAgICBQSDExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMF9TWU5DX0lOX1BBMTVfTXNrICBTWVNfR1BBX01GUEhfUEExNU1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMF9TWU5DX0lOICAgUEExNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTBfU1lOQ19PVVRfUEY1X01zayAgU1lTX0dQRl9NRlBMX1BGNU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTBfU1lOQ19PVVQgIFBGNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00wX1NZTkNfT1VUX1BBMTFfTXNrIFNZU19HUEFfTUZQSF9QQTExTUZQX01zayAgICAgICAvKjwhIEVQV00wX1NZTkNfT1VUICBQQTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9CUkFLRTBfUEI3X01zayAgICBTWVNfR1BCX01GUExfUEI3TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9CUkFLRTAgICAgUEI3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQlJBS0UwX1BFMTBfTXNrICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfTXNrICAgICAgIC8qPCEgRVBXTTFfQlJBS0UwICAgIFBFMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0JSQUtFMV9QQjZfTXNrICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0JSQUtFMSAgICBQQjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9CUkFLRTFfUEUxMV9Nc2sgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMV9CUkFLRTEgICAgUEUxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gwX1BDNV9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0gwICAgICAgIFBDNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIMF9QRTEzX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX01zayAgICAgICAvKjwhIEVQV00xX0NIMCAgICAgICBQRTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDBfUEMxMl9Nc2sgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMV9DSDAgICAgICAgUEMxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gwX1BCMTVfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfTXNrICAgICAgIC8qPCEgRVBXTTFfQ0gwICAgICAgIFBCMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIMV9QQjE0X01zayAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX01zayAgICAgICAvKjwhIEVQV00xX0NIMSAgICAgICBQQjE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDFfUEMxMV9Nc2sgICAgICBTWVNfR1BDX01GUEhfUEMxMU1GUF9Nc2sgICAgICAgLyo8ISBFUFdNMV9DSDEgICAgICAgUEMxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gxX1BDNF9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0gxICAgICAgIFBDNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIMV9QQzhfTXNrICAgICAgIFNZU19HUENfTUZQSF9QQzhNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NIMSAgICAgICBQQzggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDJfUEM3X01zayAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDIgICAgICAgUEM3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gyX1BDMTBfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTBNRlBfTXNrICAgICAgIC8qPCEgRVBXTTFfQ0gyICAgICAgIFBDMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIMl9QQzNfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NIMiAgICAgICBQQzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDJfUEIxM19Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBFUFdNMV9DSDIgICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gzX1BCMTJfTXNrICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgRVBXTTFfQ0gzICAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NIM19QQzZfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NIMyAgICAgICBQQzYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDNfUEM5X01zayAgICAgICBTWVNfR1BDX01GUEhfUEM5TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDMgICAgICAgUEM5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0gzX1BDMl9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0gzICAgICAgIFBDMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NINF9QQjdfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NINCAgICAgICBQQjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDRfUEIxX01zayAgICAgICBTWVNfR1BCX01GUExfUEIxTUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDQgICAgICAgUEIxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0g0X1BDMV9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0g0ICAgICAgIFBDMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NINF9QQTdfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NINCAgICAgICBQQTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDVfUEE2X01zayAgICAgICBTWVNfR1BBX01GUExfUEE2TUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDUgICAgICAgUEE2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgRVBXTTFfQ0g1X1BDMF9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDME1GUF9Nc2sgICAgICAgIC8qPCEgRVBXTTFfQ0g1ICAgICAgIFBDMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIEVQV00xX0NINV9QQjZfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfTXNrICAgICAgICAvKjwhIEVQV00xX0NINSAgICAgICBQQjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBFUFdNMV9DSDVfUEIwX01zayAgICAgICBTWVNfR1BCX01GUExfUEIwTUZQX01zayAgICAgICAgLyo8ISBFUFdNMV9DSDUgICAgICAgUEIwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMF9BX1BFM19Nc2sgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFM01GUF9Nc2sgICAgICAgIC8qPCEgUUVJMF9BICAgICAgICAgIFBFMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTBfQV9QQTRfTXNrICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfTXNrICAgICAgICAvKjwhIFFFSTBfQSAgICAgICAgICBQQTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkwX0FfUEQxMV9Nc2sgICAgICAgICBTWVNfR1BEX01GUEhfUEQxMU1GUF9Nc2sgICAgICAgLyo8ISBRRUkwX0EgICAgICAgICAgUEQxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMF9CX1BEMTBfTXNrICAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTBNRlBfTXNrICAgICAgIC8qPCEgUUVJMF9CICAgICAgICAgIFBEMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTBfQl9QQTNfTXNrICAgICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfTXNrICAgICAgICAvKjwhIFFFSTBfQiAgICAgICAgICBQQTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkwX0JfUEUyX01zayAgICAgICAgICBTWVNfR1BFX01GUExfUEUyTUZQX01zayAgICAgICAgLyo8ISBRRUkwX0IgICAgICAgICAgUEUyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMF9JTkRFWF9QRTRfTXNrICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9Nc2sgICAgICAgIC8qPCEgUUVJMF9JTkRFWCAgICAgIFBFNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTBfSU5ERVhfUEE1X01zayAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfTXNrICAgICAgICAvKjwhIFFFSTBfSU5ERVggICAgICBQQTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkwX0lOREVYX1BEMTJfTXNrICAgICBTWVNfR1BEX01GUEhfUEQxMk1GUF9Nc2sgICAgICAgLyo8ISBRRUkwX0lOREVYICAgICAgUEQxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMV9BX1BFNl9Nc2sgICAgICAgICAgU1lTX0dQRV9NRlBMX1BFNk1GUF9Nc2sgICAgICAgIC8qPCEgUUVJMV9BICAgICAgICAgIFBFNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTFfQV9QQTEzX01zayAgICAgICAgIFNZU19HUEFfTUZQSF9QQTEzTUZQX01zayAgICAgICAvKjwhIFFFSTFfQSAgICAgICAgICBQQTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkxX0FfUEE5X01zayAgICAgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX01zayAgICAgICAgLyo8ISBRRUkxX0EgICAgICAgICAgUEE5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMV9CX1BBMTRfTXNrICAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTRNRlBfTXNrICAgICAgIC8qPCEgUUVJMV9CICAgICAgICAgIFBBMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTFfQl9QQThfTXNrICAgICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfTXNrICAgICAgICAvKjwhIFFFSTFfQiAgICAgICAgICBQQTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkxX0JfUEU1X01zayAgICAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX01zayAgICAgICAgLyo8ISBRRUkxX0IgICAgICAgICAgUEU1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUUVJMV9JTkRFWF9QRTdfTXNrICAgICAgU1lTX0dQRV9NRlBMX1BFN01GUF9Nc2sgICAgICAgIC8qPCEgUUVJMV9JTkRFWCAgICAgIFBFNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFFSTFfSU5ERVhfUEExMF9Nc2sgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX01zayAgICAgICAvKjwhIFFFSTFfSU5ERVggICAgICBQQTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRRUkxX0lOREVYX1BBMTJfTXNrICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9Nc2sgICAgICAgLyo8ISBRRUkxX0lOREVYICAgICAgUEExMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX0NMS19QRjZfTXNrICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNk1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX0NMSyAgICAgICAgIFBGNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9DTEtfUEUyX01zayAgICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfTXNrICAgICAgICAvKjwhIFNDMF9DTEsgICAgICAgICBQRTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfQ0xLX1BBMF9Nc2sgICAgICAgICBTWVNfR1BBX01GUExfUEEwTUZQX01zayAgICAgICAgLyo8ISBTQzBfQ0xLICAgICAgICAgUEEwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX0NMS19QQjVfTXNrICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX0NMSyAgICAgICAgIFBCNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9EQVRfUEUzX01zayAgICAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfTXNrICAgICAgICAvKjwhIFNDMF9EQVQgICAgICAgICBQRTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfREFUX1BCNF9Nc2sgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgLyo8ISBTQzBfREFUICAgICAgICAgUEI0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX0RBVF9QQTFfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX0RBVCAgICAgICAgIFBBMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9EQVRfUEY3X01zayAgICAgICAgIFNZU19HUEZfTUZQTF9QRjdNRlBfTXNrICAgICAgICAvKjwhIFNDMF9EQVQgICAgICAgICBQRjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfUFdSX1BFNV9Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX01zayAgICAgICAgLyo8ISBTQzBfUFdSICAgICAgICAgUEU1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX1BXUl9QQTNfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9Nc2sgICAgICAgIC8qPCEgU0MwX1BXUiAgICAgICAgIFBBMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9QV1JfUEIyX01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjJNRlBfTXNrICAgICAgICAvKjwhIFNDMF9QV1IgICAgICAgICBQQjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfUFdSX1BGOV9Nc2sgICAgICAgICBTWVNfR1BGX01GUEhfUEY5TUZQX01zayAgICAgICAgLyo8ISBTQzBfUFdSICAgICAgICAgUEY5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX1JTVF9QRjhfTXNrICAgICAgICAgU1lTX0dQRl9NRlBIX1BGOE1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX1JTVCAgICAgICAgIFBGOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9SU1RfUEU0X01zayAgICAgICAgIFNZU19HUEVfTUZQTF9QRTRNRlBfTXNrICAgICAgICAvKjwhIFNDMF9SU1QgICAgICAgICBQRTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfUlNUX1BBMl9Nc2sgICAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX01zayAgICAgICAgLyo8ISBTQzBfUlNUICAgICAgICAgUEEyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX1JTVF9QQjNfTXNrICAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgU0MwX1JTVCAgICAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9uQ0RfUEU2X01zayAgICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfTXNrICAgICAgICAvKjwhIFNDMF9uQ0QgICAgICAgICBQRTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzBfbkNEX1BGMTBfTXNrICAgICAgICBTWVNfR1BGX01GUEhfUEYxME1GUF9Nc2sgICAgICAgLyo8ISBTQzBfbkNEICAgICAgICAgUEYxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MwX25DRF9QQTRfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9Nc2sgICAgICAgIC8qPCEgU0MwX25DRCAgICAgICAgIFBBNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMF9uQ0RfUEMxMl9Nc2sgICAgICAgIFNZU19HUENfTUZQSF9QQzEyTUZQX01zayAgICAgICAvKjwhIFNDMF9uQ0QgICAgICAgICBQQzEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfQ0xLX1BDMF9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX01zayAgICAgICAgLyo8ISBTQzFfQ0xLICAgICAgICAgUEMwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX0NMS19QQjEyX01zayAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTJNRlBfTXNrICAgICAgIC8qPCEgU0MxX0NMSyAgICAgICAgIFBCMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9DTEtfUEQ0X01zayAgICAgICAgIFNZU19HUERfTUZQTF9QRDRNRlBfTXNrICAgICAgICAvKjwhIFNDMV9DTEsgICAgICAgICBQRDQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfREFUX1BENV9Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQ1TUZQX01zayAgICAgICAgLyo8ISBTQzFfREFUICAgICAgICAgUEQ1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX0RBVF9QQjEzX01zayAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTNNRlBfTXNrICAgICAgIC8qPCEgU0MxX0RBVCAgICAgICAgIFBCMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9EQVRfUEMxX01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfTXNrICAgICAgICAvKjwhIFNDMV9EQVQgICAgICAgICBQQzEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfUFdSX1BCMTVfTXNrICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9Nc2sgICAgICAgLyo8ISBTQzFfUFdSICAgICAgICAgUEIxNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX1BXUl9QQzNfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDM01GUF9Nc2sgICAgICAgIC8qPCEgU0MxX1BXUiAgICAgICAgIFBDMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9QV1JfUEQ3X01zayAgICAgICAgIFNZU19HUERfTUZQTF9QRDdNRlBfTXNrICAgICAgICAvKjwhIFNDMV9QV1IgICAgICAgICBQRDcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfUlNUX1BENl9Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQ2TUZQX01zayAgICAgICAgLyo8ISBTQzFfUlNUICAgICAgICAgUEQ2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX1JTVF9QQjE0X01zayAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTRNRlBfTXNrICAgICAgIC8qPCEgU0MxX1JTVCAgICAgICAgIFBCMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9SU1RfUEMyX01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfTXNrICAgICAgICAvKjwhIFNDMV9SU1QgICAgICAgICBQQzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzFfbkNEX1BEM19Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX01zayAgICAgICAgLyo8ISBTQzFfbkNEICAgICAgICAgUEQzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MxX25DRF9QQzRfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNE1GUF9Nc2sgICAgICAgIC8qPCEgU0MxX25DRCAgICAgICAgIFBDNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMV9uQ0RfUEQxNF9Nc2sgICAgICAgIFNZU19HUERfTUZQSF9QRDE0TUZQX01zayAgICAgICAvKjwhIFNDMV9uQ0QgICAgICAgICBQRDE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfQ0xLX1BEMF9Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX01zayAgICAgICAgLyo8ISBTQzJfQ0xLICAgICAgICAgUEQwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX0NMS19QQTE1X01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfTXNrICAgICAgIC8qPCEgU0MyX0NMSyAgICAgICAgIFBBMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9DTEtfUEUwX01zayAgICAgICAgIFNZU19HUEVfTUZQTF9QRTBNRlBfTXNrICAgICAgICAvKjwhIFNDMl9DTEsgICAgICAgICBQRTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfQ0xLX1BBOF9Nc2sgICAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX01zayAgICAgICAgLyo8ISBTQzJfQ0xLICAgICAgICAgUEE4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX0NMS19QQTZfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9Nc2sgICAgICAgIC8qPCEgU0MyX0NMSyAgICAgICAgIFBBNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9EQVRfUEUxX01zayAgICAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfTXNrICAgICAgICAvKjwhIFNDMl9EQVQgICAgICAgICBQRTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfREFUX1BEMV9Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQxTUZQX01zayAgICAgICAgLyo8ISBTQzJfREFUICAgICAgICAgUEQxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX0RBVF9QQTlfTXNrICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgIC8qPCEgU0MyX0RBVCAgICAgICAgIFBBOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9EQVRfUEExNF9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX01zayAgICAgICAvKjwhIFNDMl9EQVQgICAgICAgICBQQTE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfREFUX1BBN19Nc2sgICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX01zayAgICAgICAgLyo8ISBTQzJfREFUICAgICAgICAgUEE3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX1BXUl9QRDNfTXNrICAgICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9Nc2sgICAgICAgIC8qPCEgU0MyX1BXUiAgICAgICAgIFBEMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9QV1JfUEExMV9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTExTUZQX01zayAgICAgICAvKjwhIFNDMl9QV1IgICAgICAgICBQQTExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfUFdSX1BBMTJfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9Nc2sgICAgICAgLyo8ISBTQzJfUFdSICAgICAgICAgUEExMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX1BXUl9QSDhfTXNrICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9Nc2sgICAgICAgIC8qPCEgU0MyX1BXUiAgICAgICAgIFBIOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9QV1JfUEM3X01zayAgICAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfTXNrICAgICAgICAvKjwhIFNDMl9QV1IgICAgICAgICBQQzcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfUlNUX1BEMl9Nc2sgICAgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX01zayAgICAgICAgLyo8ISBTQzJfUlNUICAgICAgICAgUEQyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX1JTVF9QQzZfTXNrICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9Nc2sgICAgICAgIC8qPCEgU0MyX1JTVCAgICAgICAgIFBDNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9SU1RfUEg5X01zayAgICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfTXNrICAgICAgICAvKjwhIFNDMl9SU1QgICAgICAgICBQSDkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfUlNUX1BBMTBfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExME1GUF9Nc2sgICAgICAgLyo8ISBTQzJfUlNUICAgICAgICAgUEExMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX1JTVF9QQTEzX01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTNNRlBfTXNrICAgICAgIC8qPCEgU0MyX1JTVCAgICAgICAgIFBBMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9uQ0RfUEgxMF9Nc2sgICAgICAgIFNZU19HUEhfTUZQSF9QSDEwTUZQX01zayAgICAgICAvKjwhIFNDMl9uQ0QgICAgICAgICBQSDEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTQzJfbkNEX1BBNV9Nc2sgICAgICAgICBTWVNfR1BBX01GUExfUEE1TUZQX01zayAgICAgICAgLyo8ISBTQzJfbkNEICAgICAgICAgUEE1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0MyX25DRF9QQzEzX01zayAgICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfTXNrICAgICAgIC8qPCEgU0MyX25DRCAgICAgICAgIFBDMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNDMl9uQ0RfUEQxM19Nc2sgICAgICAgIFNZU19HUERfTUZQSF9QRDEzTUZQX01zayAgICAgICAvKjwhIFNDMl9uQ0QgICAgICAgICBQRDEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTRDBfQ0xLX1BFNl9Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEU2TUZQX01zayAgICAgICAgLyo8ISBTRDBfQ0xLICAgICAgICAgUEU2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX0NMS19QQjFfTXNrICAgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgU0QwX0NMSyAgICAgICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNEMF9DTURfUEIwX01zayAgICAgICAgIFNZU19HUEJfTUZQTF9QQjBNRlBfTXNrICAgICAgICAvKjwhIFNEMF9DTUQgICAgICAgICBQQjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTRDBfQ01EX1BFN19Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEU3TUZQX01zayAgICAgICAgLyo8ISBTRDBfQ01EICAgICAgICAgUEU3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX0RBVDBfUEIyX01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgU0QwX0RBVDAgICAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNEMF9EQVQwX1BFMl9Nc2sgICAgICAgIFNZU19HUEVfTUZQTF9QRTJNRlBfTXNrICAgICAgICAvKjwhIFNEMF9EQVQwICAgICAgICBQRTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTRDBfREFUMV9QRTNfTXNrICAgICAgICBTWVNfR1BFX01GUExfUEUzTUZQX01zayAgICAgICAgLyo8ISBTRDBfREFUMSAgICAgICAgUEUzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX0RBVDFfUEIzX01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgU0QwX0RBVDEgICAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNEMF9EQVQyX1BCNF9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfTXNrICAgICAgICAvKjwhIFNEMF9EQVQyICAgICAgICBQQjQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTRDBfREFUMl9QRTRfTXNrICAgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX01zayAgICAgICAgLyo8ISBTRDBfREFUMiAgICAgICAgUEU0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX0RBVDNfUEU1X01zayAgICAgICAgU1lTX0dQRV9NRlBMX1BFNU1GUF9Nc2sgICAgICAgIC8qPCEgU0QwX0RBVDMgICAgICAgIFBFNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNEMF9EQVQzX1BCNV9Nc2sgICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIFNEMF9EQVQzICAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTRDBfbkNEX1BCMTJfTXNrICAgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9Nc2sgICAgICAgLyo8ISBTRDBfbkNEICAgICAgICAgUEIxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU0QwX25DRF9QRDEzX01zayAgICAgICAgU1lTX0dQRF9NRlBIX1BEMTNNRlBfTXNrICAgICAgIC8qPCEgU0QwX25DRCAgICAgICAgIFBEMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX0NMS19QRjJfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjJNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX0NMSyAgICAgICBQRjIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9DTEtfUEg4X01zayAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9DTEsgICAgICAgUEg4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfQ0xLX1BBMl9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBMk1GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfQ0xLICAgICAgIFBBMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX0NMS19QQzJfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX0NMSyAgICAgICBQQzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9NSVNPMF9QQzFfTXNrICAgICBTWVNfR1BDX01GUExfUEMxTUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9NSVNPMCAgICAgUEMxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfTUlTTzBfUEUxX01zayAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfTUlTTzAgICAgIFBFMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX01JU08wX1BBMV9Nc2sgICAgIFNZU19HUEFfTUZQTF9QQTFNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX01JU08wICAgICBQQTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9NSVNPMV9QQzVfTXNrICAgICBTWVNfR1BDX01GUExfUEM1TUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9NSVNPMSAgICAgUEM1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfTUlTTzFfUEgxMF9Nc2sgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfTXNrICAgICAgIC8qPCEgUVNQSTBfTUlTTzEgICAgIFBIMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX01JU08xX1BBNV9Nc2sgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX01JU08xICAgICBQQTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9NT1NJMF9QQzBfTXNrICAgICBTWVNfR1BDX01GUExfUEMwTUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9NT1NJMCAgICAgUEMwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfTU9TSTBfUEUwX01zayAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfTU9TSTAgICAgIFBFMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX01PU0kwX1BBMF9Nc2sgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX01PU0kwICAgICBQQTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9NT1NJMV9QQTRfTXNrICAgICBTWVNfR1BBX01GUExfUEE0TUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9NT1NJMSAgICAgUEE0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfTU9TSTFfUEgxMV9Nc2sgICAgU1lTX0dQSF9NRlBIX1BIMTFNRlBfTXNrICAgICAgIC8qPCEgUVNQSTBfTU9TSTEgICAgIFBIMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX01PU0kxX1BDNF9Nc2sgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX01PU0kxICAgICBQQzQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBRU1BJMF9TU19QSDlfTXNrICAgICAgICBTWVNfR1BIX01GUEhfUEg5TUZQX01zayAgICAgICAgLyo8ISBRU1BJMF9TUyAgICAgICAgUEg5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgUVNQSTBfU1NfUEEzX01zayAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9Nc2sgICAgICAgIC8qPCEgUVNQSTBfU1MgICAgICAgIFBBMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFFTUEkwX1NTX1BDM19Nc2sgICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfTXNrICAgICAgICAvKjwhIFFTUEkwX1NTICAgICAgICBQQzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX0NMS19QRDJfTXNrICAgICAgICBTWVNfR1BEX01GUExfUEQyTUZQX01zayAgICAgICAgLyo8ISBTUEkwX0NMSyAgICAgICAgUEQyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9DTEtfUEY4X01zayAgICAgICAgU1lTX0dQRl9NRlBIX1BGOE1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMF9DTEsgICAgICAgIFBGOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfQ0xLX1BBMl9Nc2sgICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfQ0xLICAgICAgICBQQTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX0NMS19QQjE0X01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBTUEkwX0NMSyAgICAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9JMlNNQ0xLX1BEMTNfTXNrICAgU1lTX0dQRF9NRlBIX1BEMTNNRlBfTXNrICAgICAgIC8qPCEgU1BJMF9JMlNNQ0xLICAgIFBEMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfSTJTTUNMS19QQTRfTXNrICAgIFNZU19HUEFfTUZQTF9QQTRNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfSTJTTUNMSyAgICBQQTQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX0kyU01DTEtfUEIxMV9Nc2sgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9Nc2sgICAgICAgLyo8ISBTUEkwX0kyU01DTEsgICAgUEIxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9JMlNNQ0xLX1BCMF9Nc2sgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMF9JMlNNQ0xLICAgIFBCMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfSTJTTUNMS19QRDE0X01zayAgIFNZU19HUERfTUZQSF9QRDE0TUZQX01zayAgICAgICAvKjwhIFNQSTBfSTJTTUNMSyAgICBQRDE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX0kyU01DTEtfUEYxMF9Nc2sgICBTWVNfR1BGX01GUEhfUEYxME1GUF9Nc2sgICAgICAgLyo8ISBTUEkwX0kyU01DTEsgICAgUEYxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9NSVNPX1BGN19Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGN01GUF9Nc2sgICAgICAgIC8qPCEgU1BJMF9NSVNPICAgICAgIFBGNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfTUlTT19QQjEzX01zayAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX01zayAgICAgICAvKjwhIFNQSTBfTUlTTyAgICAgICBQQjEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX01JU09fUEExX01zayAgICAgICBTWVNfR1BBX01GUExfUEExTUZQX01zayAgICAgICAgLyo8ISBTUEkwX01JU08gICAgICAgUEExICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9NSVNPX1BEMV9Nc2sgICAgICAgU1lTX0dQRF9NRlBMX1BEMU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMF9NSVNPICAgICAgIFBEMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfTU9TSV9QQTBfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTBNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfTU9TSSAgICAgICBQQTAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX01PU0lfUEIxMl9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9Nc2sgICAgICAgLyo8ISBTUEkwX01PU0kgICAgICAgUEIxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9NT1NJX1BEMF9Nc2sgICAgICAgU1lTX0dQRF9NRlBMX1BEME1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMF9NT1NJICAgICAgIFBEMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfTU9TSV9QRjZfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjZNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfTU9TSSAgICAgICBQRjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX1NTX1BCMTVfTXNrICAgICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9Nc2sgICAgICAgLyo8ISBTUEkwX1NTICAgICAgICAgUEIxNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMF9TU19QQTNfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBM01GUF9Nc2sgICAgICAgIC8qPCEgU1BJMF9TUyAgICAgICAgIFBBMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTBfU1NfUEQzX01zayAgICAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfTXNrICAgICAgICAvKjwhIFNQSTBfU1MgICAgICAgICBQRDMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkwX1NTX1BGOV9Nc2sgICAgICAgICBTWVNfR1BGX01GUEhfUEY5TUZQX01zayAgICAgICAgLyo8ISBTUEkwX1NTICAgICAgICAgUEY5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9DTEtfUEIzX01zayAgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9DTEsgICAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfQ0xLX1BINl9Nc2sgICAgICAgIFNZU19HUEhfTUZQTF9QSDZNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfQ0xLICAgICAgICBQSDYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX0NMS19QSDhfTXNrICAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX01zayAgICAgICAgLyo8ISBTUEkxX0NMSyAgICAgICAgUEg4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9DTEtfUEMxX01zayAgICAgICAgU1lTX0dQQ19NRlBMX1BDMU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9DTEsgICAgICAgIFBDMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfQ0xLX1BENV9Nc2sgICAgICAgIFNZU19HUERfTUZQTF9QRDVNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfQ0xLICAgICAgICBQRDUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX0NMS19QQTdfTXNrICAgICAgICBTWVNfR1BBX01GUExfUEE3TUZQX01zayAgICAgICAgLyo8ISBTUEkxX0NMSyAgICAgICAgUEE3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9JMlNNQ0xLX1BCMV9Nc2sgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9JMlNNQ0xLICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfSTJTTUNMS19QSDEwX01zayAgIFNZU19HUEhfTUZQSF9QSDEwTUZQX01zayAgICAgICAvKjwhIFNQSTFfSTJTTUNMSyAgICBQSDEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX0kyU01DTEtfUEM0X01zayAgICBTWVNfR1BDX01GUExfUEM0TUZQX01zayAgICAgICAgLyo8ISBTUEkxX0kyU01DTEsgICAgUEM0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9JMlNNQ0xLX1BEMTNfTXNrICAgU1lTX0dQRF9NRlBIX1BEMTNNRlBfTXNrICAgICAgIC8qPCEgU1BJMV9JMlNNQ0xLICAgIFBEMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfSTJTTUNMS19QQTVfTXNrICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfSTJTTUNMSyAgICBQQTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX01JU09fUEQ3X01zayAgICAgICBTWVNfR1BEX01GUExfUEQ3TUZQX01zayAgICAgICAgLyo8ISBTUEkxX01JU08gICAgICAgUEQ3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9NSVNPX1BDN19Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9NSVNPICAgICAgIFBDNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfTUlTT19QQjVfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjVNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfTUlTTyAgICAgICBQQjUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX01JU09fUEUxX01zayAgICAgICBTWVNfR1BFX01GUExfUEUxTUZQX01zayAgICAgICAgLyo8ISBTUEkxX01JU08gICAgICAgUEUxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9NSVNPX1BINF9Nc2sgICAgICAgU1lTX0dQSF9NRlBMX1BINE1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9NSVNPICAgICAgIFBINCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfTUlTT19QQzNfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfTUlTTyAgICAgICBQQzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX01PU0lfUEQ2X01zayAgICAgICBTWVNfR1BEX01GUExfUEQ2TUZQX01zayAgICAgICAgLyo8ISBTUEkxX01PU0kgICAgICAgUEQ2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9NT1NJX1BFMF9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9NT1NJICAgICAgIFBFMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfTU9TSV9QQjRfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjRNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfTU9TSSAgICAgICBQQjQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX01PU0lfUEM2X01zayAgICAgICBTWVNfR1BDX01GUExfUEM2TUZQX01zayAgICAgICAgLyo8ISBTUEkxX01PU0kgICAgICAgUEM2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9NT1NJX1BDMl9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9NT1NJICAgICAgIFBDMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfTU9TSV9QSDVfTXNrICAgICAgIFNZU19HUEhfTUZQTF9QSDVNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfTU9TSSAgICAgICBQSDUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX1NTX1BCMl9Nc2sgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX01zayAgICAgICAgLyo8ISBTUEkxX1NTICAgICAgICAgUEIyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9TU19QSDlfTXNrICAgICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9TUyAgICAgICAgIFBIOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfU1NfUEQ0X01zayAgICAgICAgIFNZU19HUERfTUZQTF9QRDRNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfU1MgICAgICAgICBQRDQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkxX1NTX1BDMF9Nc2sgICAgICAgICBTWVNfR1BDX01GUExfUEMwTUZQX01zayAgICAgICAgLyo8ISBTUEkxX1NTICAgICAgICAgUEMwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMV9TU19QQTZfTXNrICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMV9TUyAgICAgICAgIFBBNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTFfU1NfUEg3X01zayAgICAgICAgIFNZU19HUEhfTUZQTF9QSDdNRlBfTXNrICAgICAgICAvKjwhIFNQSTFfU1MgICAgICAgICBQSDcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX0NMS19QRThfTXNrICAgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX01zayAgICAgICAgLyo8ISBTUEkyX0NMSyAgICAgICAgUEU4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9DTEtfUEczX01zayAgICAgICAgU1lTX0dQR19NRlBMX1BHM01GUF9Nc2sgICAgICAgIC8qPCEgU1BJMl9DTEsgICAgICAgIFBHMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfQ0xLX1BBMTBfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX01zayAgICAgICAvKjwhIFNQSTJfQ0xLICAgICAgICBQQTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX0NMS19QQTEzX01zayAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9Nc2sgICAgICAgLyo8ISBTUEkyX0NMSyAgICAgICAgUEExMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9JMlNNQ0xLX1BDMTNfTXNrICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfTXNrICAgICAgIC8qPCEgU1BJMl9JMlNNQ0xLICAgIFBDMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfSTJTTUNMS19QRTEyX01zayAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX01zayAgICAgICAvKjwhIFNQSTJfSTJTTUNMSyAgICBQRTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX01JU09fUEc0X01zayAgICAgICBTWVNfR1BHX01GUExfUEc0TUZQX01zayAgICAgICAgLyo8ISBTUEkyX01JU08gICAgICAgUEc0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9NSVNPX1BBOV9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJMl9NSVNPICAgICAgIFBBOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfTUlTT19QQTE0X01zayAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX01zayAgICAgICAvKjwhIFNQSTJfTUlTTyAgICAgICBQQTE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX01JU09fUEU5X01zayAgICAgICBTWVNfR1BFX01GUEhfUEU5TUZQX01zayAgICAgICAgLyo8ISBTUEkyX01JU08gICAgICAgUEU5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9NT1NJX1BFMTBfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTBNRlBfTXNrICAgICAgIC8qPCEgU1BJMl9NT1NJICAgICAgIFBFMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfTU9TSV9QQTE1X01zayAgICAgIFNZU19HUEFfTUZQSF9QQTE1TUZQX01zayAgICAgICAvKjwhIFNQSTJfTU9TSSAgICAgICBQQTE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX01PU0lfUEE4X01zayAgICAgICBTWVNfR1BBX01GUEhfUEE4TUZQX01zayAgICAgICAgLyo8ISBTUEkyX01PU0kgICAgICAgUEE4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9NT1NJX1BGMTFfTXNrICAgICAgU1lTX0dQRl9NRlBIX1BGMTFNRlBfTXNrICAgICAgIC8qPCEgU1BJMl9NT1NJICAgICAgIFBGMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfU1NfUEcyX01zayAgICAgICAgIFNZU19HUEdfTUZQTF9QRzJNRlBfTXNrICAgICAgICAvKjwhIFNQSTJfU1MgICAgICAgICBQRzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkyX1NTX1BFMTFfTXNrICAgICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9Nc2sgICAgICAgLyo8ISBTUEkyX1NTICAgICAgICAgUEUxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJMl9TU19QQTExX01zayAgICAgICAgU1lTX0dQQV9NRlBIX1BBMTFNRlBfTXNrICAgICAgIC8qPCEgU1BJMl9TUyAgICAgICAgIFBBMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTJfU1NfUEExMl9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX01zayAgICAgICAvKjwhIFNQSTJfU1MgICAgICAgICBQQTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX0NMS19QQjExX01zayAgICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9Nc2sgICAgICAgLyo8ISBTUEkzX0NMSyAgICAgICAgUEIxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19DTEtfUEU0X01zayAgICAgICAgU1lTX0dQRV9NRlBMX1BFNE1GUF9Nc2sgICAgICAgIC8qPCEgU1BJM19DTEsgICAgICAgIFBFNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfQ0xLX1BDMTBfTXNrICAgICAgIFNZU19HUENfTUZQSF9QQzEwTUZQX01zayAgICAgICAvKjwhIFNQSTNfQ0xLICAgICAgICBQQzEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX0kyU01DTEtfUEU2X01zayAgICBTWVNfR1BFX01GUExfUEU2TUZQX01zayAgICAgICAgLyo8ISBTUEkzX0kyU01DTEsgICAgUEU2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19JMlNNQ0xLX1BCMV9Nc2sgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJM19JMlNNQ0xLICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfSTJTTUNMS19QRDE0X01zayAgIFNZU19HUERfTUZQSF9QRDE0TUZQX01zayAgICAgICAvKjwhIFNQSTNfSTJTTUNMSyAgICBQRDE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX01JU09fUEMxMl9Nc2sgICAgICBTWVNfR1BDX01GUEhfUEMxMk1GUF9Nc2sgICAgICAgLyo8ISBTUEkzX01JU08gICAgICAgUEMxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19NSVNPX1BCOV9Nc2sgICAgICAgU1lTX0dQQl9NRlBIX1BCOU1GUF9Nc2sgICAgICAgIC8qPCEgU1BJM19NSVNPICAgICAgIFBCOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfTUlTT19QRTNfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfTXNrICAgICAgICAvKjwhIFNQSTNfTUlTTyAgICAgICBQRTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX01PU0lfUEI4X01zayAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX01zayAgICAgICAgLyo8ISBTUEkzX01PU0kgICAgICAgUEI4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19NT1NJX1BFMl9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9Nc2sgICAgICAgIC8qPCEgU1BJM19NT1NJICAgICAgIFBFMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfTU9TSV9QQzExX01zayAgICAgIFNZU19HUENfTUZQSF9QQzExTUZQX01zayAgICAgICAvKjwhIFNQSTNfTU9TSSAgICAgICBQQzExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBTUEkzX1NTX1BFNV9Nc2sgICAgICAgICBTWVNfR1BFX01GUExfUEU1TUZQX01zayAgICAgICAgLyo8ISBTUEkzX1NTICAgICAgICAgUEU1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgU1BJM19TU19QQjEwX01zayAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfTXNrICAgICAgIC8qPCEgU1BJM19TUyAgICAgICAgIFBCMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFNQSTNfU1NfUEM5X01zayAgICAgICAgIFNZU19HUENfTUZQSF9QQzlNRlBfTXNrICAgICAgICAvKjwhIFNQSTNfU1MgICAgICAgICBQQzkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUQU1QRVIwX1BGNl9Nc2sgICAgICAgICBTWVNfR1BGX01GUExfUEY2TUZQX01zayAgICAgICAgLyo8ISBUQU1QRVIwICAgICAgICAgUEY2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVEFNUEVSMV9QRjdfTXNrICAgICAgICAgU1lTX0dQRl9NRlBMX1BGN01GUF9Nc2sgICAgICAgIC8qPCEgVEFNUEVSMSAgICAgICAgIFBGNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRBTVBFUjJfUEY4X01zayAgICAgICAgIFNZU19HUEZfTUZQSF9QRjhNRlBfTXNrICAgICAgICAvKjwhIFRBTVBFUjIgICAgICAgICBQRjggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUQU1QRVIzX1BGOV9Nc2sgICAgICAgICBTWVNfR1BGX01GUEhfUEY5TUZQX01zayAgICAgICAgLyo8ISBUQU1QRVIzICAgICAgICAgUEY5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVEFNUEVSNF9QRjEwX01zayAgICAgICAgU1lTX0dQRl9NRlBIX1BGMTBNRlBfTXNrICAgICAgIC8qPCEgVEFNUEVSNCAgICAgICAgIFBGMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRBTVBFUjVfUEYxMV9Nc2sgICAgICAgIFNZU19HUEZfTUZQSF9QRjExTUZQX01zayAgICAgICAvKjwhIFRBTVBFUjUgICAgICAgICBQRjExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTBfUEM3X01zayAgICAgICAgICAgICBTWVNfR1BDX01GUExfUEM3TUZQX01zayAgICAgICAgLyo8ISBUTTAgICAgICAgICAgICAgUEM3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0wX1BCNV9Nc2sgICAgICAgICAgICAgU1lTX0dQQl9NRlBMX1BCNU1GUF9Nc2sgICAgICAgIC8qPCEgVE0wICAgICAgICAgICAgIFBCNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMF9QRzJfTXNrICAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzJNRlBfTXNrICAgICAgICAvKjwhIFRNMCAgICAgICAgICAgICBQRzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTBfRVhUX1BBMTFfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9Nc2sgICAgICAgLyo8ISBUTTBfRVhUICAgICAgICAgUEExMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0wX0VYVF9QQjE1X01zayAgICAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfTXNrICAgICAgIC8qPCEgVE0wX0VYVCAgICAgICAgIFBCMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMV9QRzNfTXNrICAgICAgICAgICAgIFNZU19HUEdfTUZQTF9QRzNNRlBfTXNrICAgICAgICAvKjwhIFRNMSAgICAgICAgICAgICBQRzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTFfUEI0X01zayAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgLyo8ISBUTTEgICAgICAgICAgICAgUEI0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0xX1BDNl9Nc2sgICAgICAgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9Nc2sgICAgICAgIC8qPCEgVE0xICAgICAgICAgICAgIFBDNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMV9FWFRfUEExMF9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX01zayAgICAgICAvKjwhIFRNMV9FWFQgICAgICAgICBQQTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTFfRVhUX1BCMTRfTXNrICAgICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBUTTFfRVhUICAgICAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0yX1BHNF9Nc2sgICAgICAgICAgICAgU1lTX0dQR19NRlBMX1BHNE1GUF9Nc2sgICAgICAgIC8qPCEgVE0yICAgICAgICAgICAgIFBHNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMl9QRDBfTXNrICAgICAgICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfTXNrICAgICAgICAvKjwhIFRNMiAgICAgICAgICAgICBQRDAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTJfUEIzX01zayAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX01zayAgICAgICAgLyo8ISBUTTIgICAgICAgICAgICAgUEIzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0yX1BBN19Nc2sgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBN01GUF9Nc2sgICAgICAgIC8qPCEgVE0yICAgICAgICAgICAgIFBBNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNMl9FWFRfUEIxM19Nc2sgICAgICAgIFNZU19HUEJfTUZQSF9QQjEzTUZQX01zayAgICAgICAvKjwhIFRNMl9FWFQgICAgICAgICBQQjEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTJfRVhUX1BBOV9Nc2sgICAgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX01zayAgICAgICAgLyo8ISBUTTJfRVhUICAgICAgICAgUEE5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0zX1BBNl9Nc2sgICAgICAgICAgICAgU1lTX0dQQV9NRlBMX1BBNk1GUF9Nc2sgICAgICAgIC8qPCEgVE0zICAgICAgICAgICAgIFBBNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNM19QRjExX01zayAgICAgICAgICAgIFNZU19HUEZfTUZQSF9QRjExTUZQX01zayAgICAgICAvKjwhIFRNMyAgICAgICAgICAgICBQRjExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUTTNfUEIyX01zayAgICAgICAgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX01zayAgICAgICAgLyo8ISBUTTMgICAgICAgICAgICAgUEIyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVE0zX0VYVF9QQThfTXNrICAgICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9Nc2sgICAgICAgIC8qPCEgVE0zX0VYVCAgICAgICAgIFBBOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRNM19FWFRfUEIxMl9Nc2sgICAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAvKjwhIFRNM19FWFQgICAgICAgICBQQjEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUUkFDRV9DTEtfUEUxMl9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEU4TUZQX01zayAgICAgICAgLyo8ISBUUkFDRV9DTEsgICAgICAgUEUxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVFJBQ0VfREFUQTBfUEUxMV9Nc2sgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9Nc2sgICAgICAgIC8qPCEgVFJBQ0VfREFUQTAgICAgIFBFMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFRSQUNFX0RBVEExX1BFMTBfTXNrICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX01zayAgICAgICAvKjwhIFRSQUNFX0RBVEExICAgICBQRTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBUUkFDRV9EQVRBMl9QRTlfTXNrICAgICBTWVNfR1BFX01GUEhfUEUxMU1GUF9Nc2sgICAgICAgLyo8ISBUUkFDRV9EQVRBMiAgICAgUEU5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVFJBQ0VfREFUQTNfUEU4X01zayAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfTXNrICAgICAgIC8qPCEgVFJBQ0VfREFUQTMgICAgIFBFOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1JYRF9QRDJfTXNrICAgICAgIFNZU19HUERfTUZQTF9QRDJNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX1JYRCAgICAgICBQRDIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9SWERfUEI4X01zayAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9SWEQgICAgICAgUEI4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BBMF9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDBfUlhEICAgICAgIFBBMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1JYRF9QQTZfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTZNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX1JYRCAgICAgICBQQTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9SWERfUEIxMl9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMF9SWEQgICAgICAgUEIxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BBMTVfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfUlhEICAgICAgIFBBMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1JYRF9QQzExX01zayAgICAgIFNZU19HUENfTUZQSF9QQzExTUZQX01zayAgICAgICAvKjwhIFVBUlQwX1JYRCAgICAgICBQQzExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9SWERfUEgxMV9Nc2sgICAgICBTWVNfR1BIX01GUEhfUEgxMU1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMF9SWEQgICAgICAgUEgxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfUlhEX1BGMl9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGMk1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDBfUlhEICAgICAgIFBGMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1RYRF9QQTdfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTdNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX1RYRCAgICAgICBQQTcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9UWERfUEQzX01zayAgICAgICBTWVNfR1BEX01GUExfUEQzTUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9UWEQgICAgICAgUEQzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BGM19Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGM01GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDBfVFhEICAgICAgIFBGMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1RYRF9QQzEyX01zayAgICAgIFNZU19HUENfTUZQSF9QQzEyTUZQX01zayAgICAgICAvKjwhIFVBUlQwX1RYRCAgICAgICBQQzEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9UWERfUEgxMF9Nc2sgICAgICBTWVNfR1BIX01GUEhfUEgxME1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMF9UWEQgICAgICAgUEgxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BBMV9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBMU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDBfVFhEICAgICAgIFBBMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX1RYRF9QQjlfTXNrICAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX1RYRCAgICAgICBQQjkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9UWERfUEIxM19Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBVQVJUMF9UWEQgICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfVFhEX1BBMTRfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBMTRNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfVFhEICAgICAgIFBBMTQgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX25DVFNfUEE1X01zayAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX25DVFMgICAgICBQQTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9uQ1RTX1BCMTFfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxMU1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMF9uQ1RTICAgICAgUEIxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfbkNUU19QQjE1X01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfbkNUUyAgICAgIFBCMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX25DVFNfUEM3X01zayAgICAgIFNZU19HUENfTUZQTF9QQzdNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX25DVFMgICAgICBQQzcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9uUlRTX1BCMTRfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxNE1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMF9uUlRTICAgICAgUEIxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDBfblJUU19QQjEwX01zayAgICAgU1lTX0dQQl9NRlBIX1BCMTBNRlBfTXNrICAgICAgIC8qPCEgVUFSVDBfblJUUyAgICAgIFBCMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQwX25SVFNfUEM2X01zayAgICAgIFNZU19HUENfTUZQTF9QQzZNRlBfTXNrICAgICAgICAvKjwhIFVBUlQwX25SVFMgICAgICBQQzYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMF9uUlRTX1BBNF9Nc2sgICAgICBTWVNfR1BBX01GUExfUEE0TUZQX01zayAgICAgICAgLyo8ISBVQVJUMF9uUlRTICAgICAgUEE0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BGMV9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGMU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfUlhEICAgICAgIFBGMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1JYRF9QQThfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQThNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1JYRCAgICAgICBQQTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9SWERfUEEyX01zayAgICAgICBTWVNfR1BBX01GUExfUEEyTUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9SWEQgICAgICAgUEEyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BCMl9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfUlhEICAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1JYRF9QQjZfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1JYRCAgICAgICBQQjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9SWERfUEQ2X01zayAgICAgICBTWVNfR1BEX01GUExfUEQ2TUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9SWEQgICAgICAgUEQ2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfUlhEX1BEMTBfTXNrICAgICAgU1lTX0dQRF9NRlBIX1BEMTBNRlBfTXNrICAgICAgIC8qPCEgVUFSVDFfUlhEICAgICAgIFBEMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1JYRF9QSDlfTXNrICAgICAgIFNZU19HUEhfTUZQSF9QSDlNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1JYRCAgICAgICBQSDkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9SWERfUEM4X01zayAgICAgICBTWVNfR1BDX01GUEhfUEM4TUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9SWEQgICAgICAgUEM4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BCM19Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfVFhEICAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1RYRF9QQTNfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1RYRCAgICAgICBQQTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9UWERfUEUxM19Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxM01GUF9Nc2sgICAgICAgLyo8ISBVQVJUMV9UWEQgICAgICAgUEUxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BBOV9Nc2sgICAgICAgU1lTX0dQQV9NRlBIX1BBOU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfVFhEICAgICAgIFBBOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1RYRF9QRjBfTXNrICAgICAgIFNZU19HUEZfTUZQTF9QRjBNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1RYRCAgICAgICBQRjAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9UWERfUEQxMV9Nc2sgICAgICBTWVNfR1BEX01GUEhfUEQxMU1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMV9UWEQgICAgICAgUEQxMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfVFhEX1BEN19Nc2sgICAgICAgU1lTX0dQRF9NRlBMX1BEN01GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfVFhEICAgICAgIFBENyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX1RYRF9QQjdfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX1RYRCAgICAgICBQQjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9UWERfUEg4X01zayAgICAgICBTWVNfR1BIX01GUEhfUEg4TUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9UWEQgICAgICAgUEg4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfbkNUU19QRTExX01zayAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfTXNrICAgICAgIC8qPCEgVUFSVDFfbkNUUyAgICAgIFBFMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX25DVFNfUEI5X01zayAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfTXNrICAgICAgICAvKjwhIFVBUlQxX25DVFMgICAgICBQQjkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9uQ1RTX1BBMV9Nc2sgICAgICBTWVNfR1BBX01GUExfUEExTUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9uQ1RTICAgICAgUEExICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDFfblJUU19QQTBfTXNrICAgICAgU1lTX0dQQV9NRlBMX1BBME1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDFfblJUUyAgICAgIFBBMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQxX25SVFNfUEUxMl9Nc2sgICAgIFNZU19HUEVfTUZQSF9QRTEyTUZQX01zayAgICAgICAvKjwhIFVBUlQxX25SVFMgICAgICBQRTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMV9uUlRTX1BCOF9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX01zayAgICAgICAgLyo8ISBVQVJUMV9uUlRTICAgICAgUEI4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfUlhEX1BCMF9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCME1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfUlhEICAgICAgIFBCMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1JYRF9QRTE1X01zayAgICAgIFNZU19HUEVfTUZQSF9QRTE1TUZQX01zayAgICAgICAvKjwhIFVBUlQyX1JYRCAgICAgICBQRTE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9SWERfUEQxMl9Nc2sgICAgICBTWVNfR1BEX01GUEhfUEQxMk1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMl9SWEQgICAgICAgUEQxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfUlhEX1BGNV9Nc2sgICAgICAgU1lTX0dQRl9NRlBMX1BGNU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfUlhEICAgICAgIFBGNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1JYRF9QQzBfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzBNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX1JYRCAgICAgICBQQzAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9SWERfUEM0X01zayAgICAgICBTWVNfR1BDX01GUExfUEM0TUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9SWEQgICAgICAgUEM0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfUlhEX1BFOV9Nc2sgICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfUlhEICAgICAgIFBFOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1RYRF9QRThfTXNrICAgICAgIFNZU19HUEVfTUZQSF9QRThNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX1RYRCAgICAgICBQRTggICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9UWERfUEY0X01zayAgICAgICBTWVNfR1BGX01GUExfUEY0TUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9UWEQgICAgICAgUEY0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfVFhEX1BDMTNfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTNNRlBfTXNrICAgICAgIC8qPCEgVUFSVDJfVFhEICAgICAgIFBDMTMgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1RYRF9QQzFfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzFNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX1RYRCAgICAgICBQQzEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9UWERfUEUxNF9Nc2sgICAgICBTWVNfR1BFX01GUEhfUEUxNE1GUF9Nc2sgICAgICAgLyo8ISBVQVJUMl9UWEQgICAgICAgUEUxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfVFhEX1BDNV9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfVFhEICAgICAgIFBDNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX1RYRF9QQjFfTXNrICAgICAgIFNZU19HUEJfTUZQTF9QQjFNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX1RYRCAgICAgICBQQjEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9uQ1RTX1BGNV9Nc2sgICAgICBTWVNfR1BGX01GUExfUEY1TUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9uQ1RTICAgICAgUEY1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfbkNUU19QRDlfTXNrICAgICAgU1lTX0dQRF9NRlBIX1BEOU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfbkNUUyAgICAgIFBEOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX25DVFNfUEMyX01zayAgICAgIFNZU19HUENfTUZQTF9QQzJNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX25DVFMgICAgICBQQzIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUMl9uUlRTX1BGNF9Nc2sgICAgICBTWVNfR1BGX01GUExfUEY0TUZQX01zayAgICAgICAgLyo8ISBVQVJUMl9uUlRTICAgICAgUEY0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDJfblJUU19QRDhfTXNrICAgICAgU1lTX0dQRF9NRlBIX1BEOE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDJfblJUUyAgICAgIFBEOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQyX25SVFNfUEMzX01zayAgICAgIFNZU19HUENfTUZQTF9QQzNNRlBfTXNrICAgICAgICAvKjwhIFVBUlQyX25SVFMgICAgICBQQzMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19SWERfUEQwX01zayAgICAgICBTWVNfR1BEX01GUExfUEQwTUZQX01zayAgICAgICAgLyo8ISBVQVJUM19SWEQgICAgICAgUEQwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfUlhEX1BFMTFfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfTXNrICAgICAgIC8qPCEgVUFSVDNfUlhEICAgICAgIFBFMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX1JYRF9QQzlfTXNrICAgICAgIFNZU19HUENfTUZQSF9QQzlNRlBfTXNrICAgICAgICAvKjwhIFVBUlQzX1JYRCAgICAgICBQQzkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19SWERfUEUwX01zayAgICAgICBTWVNfR1BFX01GUExfUEUwTUZQX01zayAgICAgICAgLyo8ISBVQVJUM19SWEQgICAgICAgUEUwICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfUlhEX1BDMl9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDMk1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDNfUlhEICAgICAgIFBDMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX1JYRF9QQjE0X01zayAgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX01zayAgICAgICAvKjwhIFVBUlQzX1JYRCAgICAgICBQQjE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19UWERfUEQxX01zayAgICAgICBTWVNfR1BEX01GUExfUEQxTUZQX01zayAgICAgICAgLyo8ISBVQVJUM19UWEQgICAgICAgUEQxICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfVFhEX1BDMTBfTXNrICAgICAgU1lTX0dQQ19NRlBIX1BDMTBNRlBfTXNrICAgICAgIC8qPCEgVUFSVDNfVFhEICAgICAgIFBDMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX1RYRF9QQjE1X01zayAgICAgIFNZU19HUEJfTUZQSF9QQjE1TUZQX01zayAgICAgICAvKjwhIFVBUlQzX1RYRCAgICAgICBQQjE1ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19UWERfUEMzX01zayAgICAgICBTWVNfR1BDX01GUExfUEMzTUZQX01zayAgICAgICAgLyo8ISBVQVJUM19UWEQgICAgICAgUEMzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfVFhEX1BFMV9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFMU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDNfVFhEICAgICAgIFBFMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX1RYRF9QRTEwX01zayAgICAgIFNZU19HUEVfTUZQSF9QRTEwTUZQX01zayAgICAgICAvKjwhIFVBUlQzX1RYRCAgICAgICBQRTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19uQ1RTX1BCMTJfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxMk1GUF9Nc2sgICAgICAgLyo8ISBVQVJUM19uQ1RTICAgICAgUEIxMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfbkNUU19QSDlfTXNrICAgICAgU1lTX0dQSF9NRlBIX1BIOU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDNfbkNUUyAgICAgIFBIOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX25DVFNfUEQyX01zayAgICAgIFNZU19HUERfTUZQTF9QRDJNRlBfTXNrICAgICAgICAvKjwhIFVBUlQzX25DVFMgICAgICBQRDIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUM19uUlRTX1BCMTNfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBVQVJUM19uUlRTICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDNfblJUU19QSDhfTXNrICAgICAgU1lTX0dQSF9NRlBIX1BIOE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDNfblJUUyAgICAgIFBIOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQzX25SVFNfUEQzX01zayAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfTXNrICAgICAgICAvKjwhIFVBUlQzX25SVFMgICAgICBQRDMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9SWERfUEExM19Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9Nc2sgICAgICAgLyo8ISBVQVJUNF9SWEQgICAgICAgUEExMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BDNl9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDNk1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDRfUlhEICAgICAgIFBDNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X1JYRF9QQzRfTXNrICAgICAgIFNZU19HUENfTUZQTF9QQzRNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ0X1JYRCAgICAgICBQQzQgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9SWERfUEIxMF9Nc2sgICAgICBTWVNfR1BCX01GUEhfUEIxME1GUF9Nc2sgICAgICAgLyo8ISBVQVJUNF9SWEQgICAgICAgUEIxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfUlhEX1BIMTFfTXNrICAgICAgU1lTX0dQSF9NRlBIX1BIMTFNRlBfTXNrICAgICAgIC8qPCEgVUFSVDRfUlhEICAgICAgIFBIMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X1JYRF9QQTJfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTJNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ0X1JYRCAgICAgICBQQTIgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9SWERfUEY2X01zayAgICAgICBTWVNfR1BGX01GUExfUEY2TUZQX01zayAgICAgICAgLyo8ISBVQVJUNF9SWEQgICAgICAgUEY2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfVFhEX1BIMTBfTXNrICAgICAgU1lTX0dQSF9NRlBIX1BIMTBNRlBfTXNrICAgICAgIC8qPCEgVUFSVDRfVFhEICAgICAgIFBIMTAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X1RYRF9QQTNfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTNNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ0X1RYRCAgICAgICBQQTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9UWERfUEExMl9Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExMk1GUF9Nc2sgICAgICAgLyo8ISBVQVJUNF9UWEQgICAgICAgUEExMiAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfVFhEX1BDN19Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDN01GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDRfVFhEICAgICAgIFBDNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X1RYRF9QQjExX01zayAgICAgIFNZU19HUEJfTUZQSF9QQjExTUZQX01zayAgICAgICAvKjwhIFVBUlQ0X1RYRCAgICAgICBQQjExICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9UWERfUEY3X01zayAgICAgICBTWVNfR1BGX01GUExfUEY3TUZQX01zayAgICAgICAgLyo8ISBVQVJUNF9UWEQgICAgICAgUEY3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfVFhEX1BDNV9Nc2sgICAgICAgU1lTX0dQQ19NRlBMX1BDNU1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDRfVFhEICAgICAgIFBDNSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X25DVFNfUEUxX01zayAgICAgIFNZU19HUEVfTUZQTF9QRTFNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ0X25DVFMgICAgICBQRTEgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNF9uQ1RTX1BDOF9Nc2sgICAgICBTWVNfR1BDX01GUEhfUEM4TUZQX01zayAgICAgICAgLyo8ISBVQVJUNF9uQ1RTICAgICAgUEM4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDRfblJUU19QRTBfTXNrICAgICAgU1lTX0dQRV9NRlBMX1BFME1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDRfblJUUyAgICAgIFBFMCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ0X25SVFNfUEUxM19Nc2sgICAgIFNZU19HUEVfTUZQSF9QRTEzTUZQX01zayAgICAgICAvKjwhIFVBUlQ0X25SVFMgICAgICBQRTEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNV9SWERfUEI0X01zayAgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgLyo8ISBVQVJUNV9SWEQgICAgICAgUEI0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDVfUlhEX1BBNF9Nc2sgICAgICAgU1lTX0dQQV9NRlBMX1BBNE1GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDVfUlhEICAgICAgIFBBNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ1X1JYRF9QRTZfTXNrICAgICAgIFNZU19HUEVfTUZQTF9QRTZNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ1X1JYRCAgICAgICBQRTYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNV9UWERfUEI1X01zayAgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX01zayAgICAgICAgLyo8ISBVQVJUNV9UWEQgICAgICAgUEI1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDVfVFhEX1BFN19Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFN01GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDVfVFhEICAgICAgIFBFNyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVBUlQ1X1RYRF9QQTVfTXNrICAgICAgIFNZU19HUEFfTUZQTF9QQTVNRlBfTXNrICAgICAgICAvKjwhIFVBUlQ1X1RYRCAgICAgICBQQTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVQVJUNV9uQ1RTX1BCMl9Nc2sgICAgICBTWVNfR1BCX01GUExfUEIyTUZQX01zayAgICAgICAgLyo8ISBVQVJUNV9uQ1RTICAgICAgUEIyICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVUFSVDVfblJUU19QQjNfTXNrICAgICAgU1lTX0dQQl9NRlBMX1BCM01GUF9Nc2sgICAgICAgIC8qPCEgVUFSVDVfblJUUyAgICAgIFBCMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQl9EX1BfUEExNF9Nc2sgICAgICAgIFNZU19HUEFfTUZQSF9QQTE0TUZQX01zayAgICAgICAvKjwhIFVTQl9EX1AgICAgICAgICBQQTE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0JfRF9OX1BBMTNfTXNrICAgICAgICBTWVNfR1BBX01GUEhfUEExM01GUF9Nc2sgICAgICAgLyo8ISBVU0JfRF9OICAgICAgICAgUEExMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNCX09UR19JRF9QQTE1X01zayAgICAgU1lTX0dQQV9NRlBIX1BBMTVNRlBfTXNrICAgICAgIC8qPCEgVVNCX09UR19JRCAgICAgIFBBMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQl9WQlVTX1BBMTJfTXNrICAgICAgIFNZU19HUEFfTUZQSF9QQTEyTUZQX01zayAgICAgICAvKjwhIFVTQl9WQlVTICAgICAgICBQQTEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0JfVkJVU19FTl9QQjZfTXNrICAgICBTWVNfR1BCX01GUExfUEI2TUZQX01zayAgICAgICAgLyo8ISBVU0JfVkJVU19FTiAgICAgUEI2ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNCX1ZCVVNfRU5fUEIxNV9Nc2sgICAgU1lTX0dQQl9NRlBIX1BCMTVNRlBfTXNrICAgICAgIC8qPCEgVVNCX1ZCVVNfRU4gICAgIFBCMTUgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQl9WQlVTX1NUX1BCMTRfTXNrICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX01zayAgICAgICAvKjwhIFVTQl9WQlVTX1NUICAgICBQQjE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0JfVkJVU19TVF9QQjdfTXNrICAgICBTWVNfR1BCX01GUExfUEI3TUZQX01zayAgICAgICAgLyo8ISBVU0JfVkJVU19TVCAgICAgUEI3ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNCX1ZCVVNfU1RfUEQ0X01zayAgICAgU1lTX0dQRF9NRlBMX1BENE1GUF9Nc2sgICAgICAgIC8qPCEgVVNCX1ZCVVNfU1QgICAgIFBENCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0NMS19QRDBfTXNrICAgICAgIFNZU19HUERfTUZQTF9QRDBNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kwX0NMSyAgICAgICBQRDAgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9DTEtfUEExMV9Nc2sgICAgICBTWVNfR1BBX01GUEhfUEExMU1GUF9Nc2sgICAgICAgLyo8ISBVU0NJMF9DTEsgICAgICAgUEExMSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfQ0xLX1BFMl9Nc2sgICAgICAgU1lTX0dQRV9NRlBMX1BFMk1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTBfQ0xLICAgICAgIFBFMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0NMS19QQjEyX01zayAgICAgIFNZU19HUEJfTUZQSF9QQjEyTUZQX01zayAgICAgICAvKjwhIFVTQ0kwX0NMSyAgICAgICBQQjEyICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9DVEwwX1BENF9Nc2sgICAgICBTWVNfR1BEX01GUExfUEQ0TUZQX01zayAgICAgICAgLyo8ISBVU0NJMF9DVEwwICAgICAgUEQ0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMF9QRTZfTXNrICAgICAgU1lTX0dQRV9NRlBMX1BFNk1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTBfQ1RMMCAgICAgIFBFNiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0NUTDBfUEMxM19Nc2sgICAgIFNZU19HUENfTUZQSF9QQzEzTUZQX01zayAgICAgICAvKjwhIFVTQ0kwX0NUTDAgICAgICBQQzEzICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9DVEwwX1BEMTRfTXNrICAgICBTWVNfR1BEX01GUEhfUEQxNE1GUF9Nc2sgICAgICAgLyo8ISBVU0NJMF9DVEwwICAgICAgUEQxNCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMV9QRDNfTXNrICAgICAgU1lTX0dQRF9NRlBMX1BEM01GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTBfQ1RMMSAgICAgIFBEMyAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0NUTDFfUEU1X01zayAgICAgIFNZU19HUEVfTUZQTF9QRTVNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kwX0NUTDEgICAgICBQRTUgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9DVEwxX1BCMTVfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxNU1GUF9Nc2sgICAgICAgLyo8ISBVU0NJMF9DVEwxICAgICAgUEIxNSAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfQ1RMMV9QQThfTXNrICAgICAgU1lTX0dQQV9NRlBIX1BBOE1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTBfQ1RMMSAgICAgIFBBOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0RBVDBfUEUzX01zayAgICAgIFNZU19HUEVfTUZQTF9QRTNNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kwX0RBVDAgICAgICBQRTMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9EQVQwX1BCMTNfTXNrICAgICBTWVNfR1BCX01GUEhfUEIxM01GUF9Nc2sgICAgICAgLyo8ISBVU0NJMF9EQVQwICAgICAgUEIxMyAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfREFUMF9QRDFfTXNrICAgICAgU1lTX0dQRF9NRlBMX1BEMU1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTBfREFUMCAgICAgIFBEMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0RBVDBfUEExMF9Nc2sgICAgIFNZU19HUEFfTUZQSF9QQTEwTUZQX01zayAgICAgICAvKjwhIFVTQ0kwX0RBVDAgICAgICBQQTEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9EQVQxX1BFNF9Nc2sgICAgICBTWVNfR1BFX01GUExfUEU0TUZQX01zayAgICAgICAgLyo8ISBVU0NJMF9EQVQxICAgICAgUEU0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTBfREFUMV9QRDJfTXNrICAgICAgU1lTX0dQRF9NRlBMX1BEMk1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTBfREFUMSAgICAgIFBEMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kwX0RBVDFfUEIxNF9Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjE0TUZQX01zayAgICAgICAvKjwhIFVTQ0kwX0RBVDEgICAgICBQQjE0ICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMF9EQVQxX1BBOV9Nc2sgICAgICBTWVNfR1BBX01GUEhfUEE5TUZQX01zayAgICAgICAgLyo8ISBVU0NJMF9EQVQxICAgICAgUEE5ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfQ0xLX1BFMTJfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFMTJNRlBfTXNrICAgICAgIC8qPCEgVVNDSTFfQ0xLICAgICAgIFBFMTIgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0NMS19QRDdfTXNrICAgICAgIFNZU19HUERfTUZQTF9QRDdNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0NMSyAgICAgICBQRDcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9DTEtfUEI4X01zayAgICAgICBTWVNfR1BCX01GUEhfUEI4TUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9DTEsgICAgICAgUEI4ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfQ0xLX1BCMV9Nc2sgICAgICAgU1lTX0dQQl9NRlBMX1BCMU1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfQ0xLICAgICAgIFBCMSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0NUTDBfUEIxMF9Nc2sgICAgIFNZU19HUEJfTUZQSF9QQjEwTUZQX01zayAgICAgICAvKjwhIFVTQ0kxX0NUTDAgICAgICBQQjEwICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9DVEwwX1BCNV9Nc2sgICAgICBTWVNfR1BCX01GUExfUEI1TUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9DVEwwICAgICAgUEI1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMF9QRTlfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFOU1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfQ1RMMCAgICAgIFBFOSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0NUTDBfUEQzX01zayAgICAgIFNZU19HUERfTUZQTF9QRDNNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0NUTDAgICAgICBQRDMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9DVEwxX1BENF9Nc2sgICAgICBTWVNfR1BEX01GUExfUEQ0TUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9DVEwxICAgICAgUEQ0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfQ1RMMV9QRThfTXNrICAgICAgU1lTX0dQRV9NRlBIX1BFOE1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfQ1RMMSAgICAgIFBFOCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0NUTDFfUEI5X01zayAgICAgIFNZU19HUEJfTUZQSF9QQjlNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0NUTDEgICAgICBQQjkgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9DVEwxX1BCNF9Nc2sgICAgICBTWVNfR1BCX01GUExfUEI0TUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9DVEwxICAgICAgUEI0ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfREFUMF9QQjJfTXNrICAgICAgU1lTX0dQQl9NRlBMX1BCMk1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfREFUMCAgICAgIFBCMiAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0RBVDBfUEI3X01zayAgICAgIFNZU19HUEJfTUZQTF9QQjdNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0RBVDAgICAgICBQQjcgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9EQVQwX1BFMTBfTXNrICAgICBTWVNfR1BFX01GUEhfUEUxME1GUF9Nc2sgICAgICAgLyo8ISBVU0NJMV9EQVQwICAgICAgUEUxMCAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfREFUMF9QRDVfTXNrICAgICAgU1lTX0dQRF9NRlBMX1BENU1GUF9Nc2sgICAgICAgIC8qPCEgVVNDSTFfREFUMCAgICAgIFBENSAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0RBVDFfUEQ2X01zayAgICAgIFNZU19HUERfTUZQTF9QRDZNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0RBVDEgICAgICBQRDYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBVU0NJMV9EQVQxX1BCM19Nc2sgICAgICBTWVNfR1BCX01GUExfUEIzTUZQX01zayAgICAgICAgLyo8ISBVU0NJMV9EQVQxICAgICAgUEIzICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgVVNDSTFfREFUMV9QRTExX01zayAgICAgU1lTX0dQRV9NRlBIX1BFMTFNRlBfTXNrICAgICAgIC8qPCEgVVNDSTFfREFUMSAgICAgIFBFMTEgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFVTQ0kxX0RBVDFfUEI2X01zayAgICAgIFNZU19HUEJfTUZQTF9QQjZNRlBfTXNrICAgICAgICAvKjwhIFVTQ0kxX0RBVDEgICAgICBQQjYgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBYMzJfSU5fUEY1X01zayAgICAgICAgICBTWVNfR1BGX01GUExfUEY1TUZQX01zayAgICAgICAgLyo8ISBYMzJfSU4gICAgICAgICAgUEY1ICAgICAgTUZQIE1hc2sgKi8KKyNkZWZpbmUgWDMyX09VVF9QRjRfTXNrICAgICAgICAgU1lTX0dQRl9NRlBMX1BGNE1GUF9Nc2sgICAgICAgIC8qPCEgWDMyX09VVCAgICAgICAgIFBGNCAgICAgIE1GUCBNYXNrICovCisjZGVmaW5lIFhUMV9JTl9QRjNfTXNrICAgICAgICAgIFNZU19HUEZfTUZQTF9QRjNNRlBfTXNrICAgICAgICAvKjwhIFhUMV9JTiAgICAgICAgICBQRjMgICAgICBNRlAgTWFzayAqLworI2RlZmluZSBYVDFfT1VUX1BGMl9Nc2sgICAgICAgICBTWVNfR1BGX01GUExfUEYyTUZQX01zayAgICAgICAgLyo8ISBYVDFfT1VUICAgICAgICAgUEYyICAgICAgTUZQIE1hc2sgKi8KKworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU1lTX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisvKiogQGFkZHRvZ3JvdXAgU1lTX0VYUE9SVEVEX0ZVTkNUSU9OUyBTWVMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIEJyb3duLW91dCBkZXRlY3RvciBpbnRlcnJ1cHQgZmxhZworICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhciBCcm93bi1vdXQgZGV0ZWN0b3IgaW50ZXJydXB0IGZsYWcuCisgICovCisjZGVmaW5lIFNZU19DTEVBUl9CT0RfSU5UX0ZMQUcoKSAgICAgICAgKFNZUy0+Qk9EQ1RMIHw9IFNZU19CT0RDVExfQk9ESUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQnJvd24tb3V0IGRldGVjdG9yIGZ1bmN0aW9uIHRvIG5vcm1hbCBtb2RlCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHNldCBCcm93bi1vdXQgZGV0ZWN0b3IgdG8gbm9ybWFsIG1vZGUuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIG1hY3JvLgorICAqLworI2RlZmluZSBTWVNfQ0xFQVJfQk9EX0xQTSgpICAgICAgICAgICAgIChTWVMtPkJPRENUTCAmPSB+U1lTX0JPRENUTF9CT0RMUE1fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIEJyb3duLW91dCBkZXRlY3RvciBmdW5jdGlvbgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBkaXNhYmxlIEJyb3duLW91dCBkZXRlY3RvciBmdW5jdGlvbi4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgbWFjcm8uCisgICovCisjZGVmaW5lIFNZU19ESVNBQkxFX0JPRCgpICAgICAgICAgICAgICAgKFNZUy0+Qk9EQ1RMICY9IH5TWVNfQk9EQ1RMX0JPREVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEJyb3duLW91dCBkZXRlY3RvciBmdW5jdGlvbgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBlbmFibGUgQnJvd24tb3V0IGRldGVjdG9yIGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4KKyAgKi8KKyNkZWZpbmUgU1lTX0VOQUJMRV9CT0QoKSAgICAgICAgICAgICAgICAoU1lTLT5CT0RDVEwgfD0gU1lTX0JPRENUTF9CT0RFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBCcm93bi1vdXQgZGV0ZWN0b3IgaW50ZXJydXB0IGZsYWcKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHZhbCAgICAgMCAgIEJyb3duLW91dCBkZXRlY3QgaW50ZXJydXB0IGZsYWcgaXMgbm90IHNldC4KKyAgKiBAcmV0dmFsICAgICA+PTEgQnJvd24tb3V0IGRldGVjdCBpbnRlcnJ1cHQgZmxhZyBpcyBzZXQuCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXQgQnJvd24tb3V0IGRldGVjdG9yIGludGVycnVwdCBmbGFnLgorICAqLworI2RlZmluZSBTWVNfR0VUX0JPRF9JTlRfRkxBRygpICAgICAgICAgIChTWVMtPkJPRENUTCAmIFNZU19CT0RDVExfQk9ESUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQnJvd24tb3V0IGRldGVjdG9yIHN0YXR1cworICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dmFsICAgICAwICAgU3lzdGVtIHZvbHRhZ2UgaXMgaGlnaGVyIHRoYW4gQk9EIHRocmVzaG9sZCB2b2x0YWdlIHNldHRpbmcgb3IgQk9EIGZ1bmN0aW9uIGlzIGRpc2FibGVkLgorICAqIEByZXR2YWwgICAgID49MSBTeXN0ZW0gdm9sdGFnZSBpcyBsb3dlciB0aGFuIEJPRCB0aHJlc2hvbGQgdm9sdGFnZSBzZXR0aW5nLgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IEJyb3duLW91dCBkZXRlY3RvciBvdXRwdXQgc3RhdHVzLgorICAqICAgICAgICAgICAgIElmIHRoZSBCT0QgZnVuY3Rpb24gaXMgZGlzYWJsZWQsIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybiAwLgorICAqLworI2RlZmluZSBTWVNfR0VUX0JPRF9PVVRQVVQoKSAgICAgICAgICAgIChTWVMtPkJPRENUTCAmIFNZU19CT0RDVExfQk9ET1VUX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEJyb3duLW91dCBkZXRlY3RvciBpbnRlcnJ1cHQgZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZW5hYmxlIEJyb3duLW91dCBkZXRlY3RvciBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIG1hY3JvLgorICAqLworI2RlZmluZSBTWVNfRElTQUJMRV9CT0RfUlNUKCkgICAgICAgICAgIChTWVMtPkJPRENUTCAmPSB+U1lTX0JPRENUTF9CT0RSU1RFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBCcm93bi1vdXQgZGV0ZWN0b3IgcmVzZXQgZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZW5hYmxlIEJyb3duLW91dCBkZXRlY3QgcmVzZXQgZnVuY3Rpb24uCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIG1hY3JvLgorICAqLworI2RlZmluZSBTWVNfRU5BQkxFX0JPRF9SU1QoKSAgICAgICAgICAgIChTWVMtPkJPRENUTCB8PSBTWVNfQk9EQ1RMX0JPRFJTVEVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEJyb3duLW91dCBkZXRlY3RvciBmdW5jdGlvbiBsb3cgcG93ZXIgbW9kZQorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBzZXQgQnJvd24tb3V0IGRldGVjdG9yIHRvIGxvdyBwb3dlciBtb2RlLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4KKyAgKi8KKyNkZWZpbmUgU1lTX1NFVF9CT0RfTFBNKCkgICAgICAgICAgICAgICAoU1lTLT5CT0RDVEwgfD0gU1lTX0JPRENUTF9CT0RMUE1fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQnJvd24tb3V0IGRldGVjdG9yIHZvbHRhZ2UgbGV2ZWwKKyAgKiBAcGFyYW1baW5dICB1MzJMZXZlbCBpcyBCcm93bi1vdXQgdm9sdGFnZSBsZXZlbC4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8xXzZWCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMV84VgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzJfMFYKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8yXzJWCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMl80VgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzJfNlYKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8yXzhWCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfM18wVgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHNldCBCcm93bi1vdXQgZGV0ZWN0b3Igdm9sdGFnZSBsZXZlbC4KKyAgKiAgICAgICAgICAgICBUaGUgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgbWFjcm8uCisgICovCisjZGVmaW5lIFNZU19TRVRfQk9EX0xFVkVMKHUzMkxldmVsKSAgICAgKFNZUy0+Qk9EQ1RMID0gKFNZUy0+Qk9EQ1RMICYgflNZU19CT0RDVExfQk9EVkxfTXNrKSB8ICh1MzJMZXZlbCkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCByZXNldCBzb3VyY2UgaXMgZnJvbSBCcm93bi1vdXQgZGV0ZWN0b3IgcmVzZXQKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHZhbCAgICAgMCAgIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBub3QgZnJvbSBCcm93bi1vdXQgZGV0ZWN0b3IgcmVzZXQKKyAgKiBAcmV0dmFsICAgICA+PTEgUHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gQnJvd24tb3V0IGRldGVjdG9yIHJlc2V0CisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXQgcHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gQnJvd24tb3V0IGRldGVjdCByZXNldCBvciBub3QuCisgICovCisjZGVmaW5lIFNZU19JU19CT0RfUlNUKCkgICAgICAgICAgICAgICAgKFNZUy0+UlNUU1RTICYgU1lTX1JTVFNUU19CT0RSRl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCByZXNldCBzb3VyY2UgaXMgZnJvbSBDUFUgcmVzZXQKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHZhbCAgICAgMCAgIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBub3QgZnJvbSBDUFUgcmVzZXQKKyAgKiBAcmV0dmFsICAgICA+PTEgUHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gQ1BVIHJlc2V0CisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXQgcHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gQ1BVIHJlc2V0LgorICAqLworI2RlZmluZSBTWVNfSVNfQ1BVX1JTVCgpICAgICAgICAgICAgICAgIChTWVMtPlJTVFNUUyAmIFNZU19SU1RTVFNfQ1BVUkZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgcmVzZXQgc291cmNlIGlzIGZyb20gTFZSIFJlc2V0CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgICBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgbm90IGZyb20gTG93LVZvbHRhZ2UtUmVzZXQKKyAgKiBAcmV0dmFsICAgICA+PTEgUHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gTG93LVZvbHRhZ2UtUmVzZXQKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGdldCBwcmV2aW91cyByZXNldCBzb3VyY2UgaXMgZnJvbSBMb3ctVm9sdGFnZS1SZXNldC4KKyAgKi8KKyNkZWZpbmUgU1lTX0lTX0xWUl9SU1QoKSAgICAgICAgICAgICAgICAoU1lTLT5SU1RTVFMgJiBTWVNfUlNUU1RTX0xWUkZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgcmVzZXQgc291cmNlIGlzIGZyb20gUG93ZXItb24gUmVzZXQKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHZhbCAgICAgMCAgIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBub3QgZnJvbSBQb3dlci1vbiBSZXNldAorICAqIEByZXR2YWwgICAgID49MSBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgZnJvbSBQb3dlci1vbiBSZXNldAorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IHByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIFBvd2VyLW9uIFJlc2V0LgorICAqLworI2RlZmluZSBTWVNfSVNfUE9SX1JTVCgpICAgICAgICAgICAgICAgIChTWVMtPlJTVFNUUyAmIFNZU19SU1RTVFNfUE9SRl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCByZXNldCBzb3VyY2UgaXMgZnJvbSByZXNldCBwaW4gcmVzZXQKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHZhbCAgICAgMCAgIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBub3QgZnJvbSByZXNldCBwaW4gcmVzZXQKKyAgKiBAcmV0dmFsICAgICA+PTEgUHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gcmVzZXQgcGluIHJlc2V0CisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXQgcHJldmlvdXMgcmVzZXQgc291cmNlIGlzIGZyb20gcmVzZXQgcGluIHJlc2V0LgorICAqLworI2RlZmluZSBTWVNfSVNfUlNUUElOX1JTVCgpICAgICAgICAgICAgIChTWVMtPlJTVFNUUyAmIFNZU19SU1RTVFNfUElOUkZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgcmVzZXQgc291cmNlIGlzIGZyb20gc3lzdGVtIHJlc2V0CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgICBQcmV2aW91cyByZXNldCBzb3VyY2UgaXMgbm90IGZyb20gc3lzdGVtIHJlc2V0CisgICogQHJldHZhbCAgICAgPj0xIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIHN5c3RlbSByZXNldAorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZ2V0IHByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIHN5c3RlbSByZXNldC4KKyAgKi8KKyNkZWZpbmUgU1lTX0lTX1NZU1RFTV9SU1QoKSAgICAgICAgICAgICAoU1lTLT5SU1RTVFMgJiBTWVNfUlNUU1RTX1NZU1JGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHJlc2V0IHNvdXJjZSBpcyBmcm9tIHdpbmRvdyB3YXRjaCBkb2cgcmVzZXQKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHZhbCAgICAgMCAgIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBub3QgZnJvbSB3aW5kb3cgd2F0Y2ggZG9nIHJlc2V0CisgICogQHJldHZhbCAgICAgPj0xIFByZXZpb3VzIHJlc2V0IHNvdXJjZSBpcyBmcm9tIHdpbmRvdyB3YXRjaCBkb2cgcmVzZXQKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGdldCBwcmV2aW91cyByZXNldCBzb3VyY2UgaXMgZnJvbSB3aW5kb3cgd2F0Y2ggZG9nIHJlc2V0LgorICAqLworI2RlZmluZSBTWVNfSVNfV0RUX1JTVCgpICAgICAgICAgICAgICAgIChTWVMtPlJTVFNUUyAmIFNZU19SU1RTVFNfV0RUUkZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIExvdy1Wb2x0YWdlLVJlc2V0IGZ1bmN0aW9uCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGRpc2FibGUgTG93LVZvbHRhZ2UtUmVzZXQgZnVuY3Rpb24uCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIG1hY3JvLgorICAqLworI2RlZmluZSBTWVNfRElTQUJMRV9MVlIoKSAgICAgICAgICAgICAgIChTWVMtPkJPRENUTCAmPSB+U1lTX0JPRENUTF9MVlJFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBMb3ctVm9sdGFnZS1SZXNldCBmdW5jdGlvbgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBlbmFibGUgTG93LVZvbHRhZ2UtUmVzZXQgZnVuY3Rpb24uCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIG1hY3JvLgorICAqLworI2RlZmluZSBTWVNfRU5BQkxFX0xWUigpICAgICAgICAgICAgICAgIChTWVMtPkJPRENUTCB8PSBTWVNfQk9EQ1RMX0xWUkVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBQb3dlci1vbiBSZXNldCBmdW5jdGlvbgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBkaXNhYmxlIFBvd2VyLW9uIFJlc2V0IGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4KKyAgKi8KKyNkZWZpbmUgU1lTX0RJU0FCTEVfUE9SKCkgICAgICAgICAgICAgICAoU1lTLT5QT1JDVEwwID0gMHg1QUE1KQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgUG93ZXItb24gUmVzZXQgZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gZW5hYmxlIFBvd2VyLW9uIFJlc2V0IGZ1bmN0aW9uLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4KKyAgKi8KKyNkZWZpbmUgU1lTX0VOQUJMRV9QT1IoKSAgICAgICAgICAgICAgICAoU1lTLT5QT1JDVEwwID0gMCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgcmVzZXQgc291cmNlIGZsYWcKKyAgKiBAcGFyYW1baW5dICB1MzJSc3RTcmMgaXMgcmVzZXQgc291cmNlLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUlNUU1RTX1BPUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfUElOUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfV0RUUkZfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfTFZSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19CT0RSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19TWVNSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19DUFVSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19DUFVMS1JGX01zaworICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGNsZWFyIHJlc2V0IHNvdXJjZSBmbGFnLgorICAqLworI2RlZmluZSBTWVNfQ0xFQVJfUlNUX1NPVVJDRSh1MzJSc3RTcmMpICgoU1lTLT5SU1RTVFMpID0gKHUzMlJzdFNyYykgKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlY2xhcmUgdGhlc2UgaW5saW5lIGZ1bmN0aW9ucyBoZXJlIHRvIGF2b2lkIE1JU1JBIEMgMjAwNCBydWxlIDguMSBlcnJvciAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU1lTX1VubG9ja1JlZyh2b2lkKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFNZU19Mb2NrUmVnKHZvaWQpOworCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24uCisgICogICAgICAgICAgICAgVG8gdW5sb2NrIHRoZSBwcm90ZWN0ZWQgcmVnaXN0ZXIgdG8gYWxsb3cgd3JpdGUgYWNjZXNzLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU1lTX1VubG9ja1JlZyh2b2lkKQoreworICAgIGRvCisgICAgeworICAgICAgICBTWVMtPlJFR0xDVEwgPSAweDU5VUw7CisgICAgICAgIFNZUy0+UkVHTENUTCA9IDB4MTZVTDsKKyAgICAgICAgU1lTLT5SRUdMQ1RMID0gMHg4OFVMOworICAgIH0KKyAgICB3aGlsZShTWVMtPlJFR0xDVEwgPT0gMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbi4KKyAgKiAgICAgICAgICAgICBUbyBsb2NrIHRoZSBwcm90ZWN0ZWQgcmVnaXN0ZXIgdG8gZm9yYmlkIHdyaXRlIGFjY2Vzcy4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNZU19Mb2NrUmVnKHZvaWQpCit7CisgICAgU1lTLT5SRUdMQ1RMID0gMFVMOworfQorCisKK3ZvaWQgU1lTX0NsZWFyUmVzZXRTcmModWludDMyX3QgdTMyU3JjKTsKK3VpbnQzMl90IFNZU19HZXRCT0RTdGF0dXModm9pZCk7Cit1aW50MzJfdCBTWVNfR2V0UmVzZXRTcmModm9pZCk7Cit1aW50MzJfdCBTWVNfSXNSZWdMb2NrZWQodm9pZCk7Cit1aW50MzJfdCBTWVNfUmVhZFBESUQodm9pZCk7Cit2b2lkIFNZU19SZXNldENoaXAodm9pZCk7Cit2b2lkIFNZU19SZXNldENQVSh2b2lkKTsKK3ZvaWQgU1lTX1Jlc2V0TW9kdWxlKHVpbnQzMl90IHUzMk1vZHVsZUluZGV4KTsKK3ZvaWQgU1lTX0VuYWJsZUJPRChpbnQzMl90IGkzMk1vZGUsIHVpbnQzMl90IHUzMkJPRExldmVsKTsKK3ZvaWQgU1lTX0Rpc2FibGVCT0Qodm9pZCk7Cit2b2lkIFNZU19TZXRQb3dlckxldmVsKHVpbnQzMl90IHUzMlBvd2VyTGV2ZWwpOwordWludDMyX3QgU1lTX1NldFBvd2VyUmVndWxhdG9yKHVpbnQzMl90IHUzMlBvd2VyUmVndWxhdG9yKTsKK3ZvaWQgU1lTX1NldFNTUkFNUG93ZXJNb2RlKHVpbnQzMl90IHUzMlNSQU1TZWwsIHVpbnQzMl90IHUzMlBvd2VyTW9kZSk7Cit2b2lkIFNZU19TZXRQU1JBTVBvd2VyTW9kZSh1aW50MzJfdCB1MzJTUkFNU2VsLCB1aW50MzJfdCB1MzJQb3dlck1vZGUpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU1lTX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNZU19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19TWVNfSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3RpbWVyLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYzZiNjgKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy90aW1lci5oCkBAIC0wLDAgKzEsNTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdGltZXIuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgVGltZXIgQ29udHJvbGxlcihUaW1lcikgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19USU1FUl9IX18KKyNkZWZpbmUgX19USU1FUl9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFRJTUVSX0RyaXZlciBUSU1FUiBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBUSU1FUl9FWFBPUlRFRF9DT05TVEFOVFMgVElNRVIgRXhwb3J0ZWQgQ29uc3RhbnRzCisgIEB7CisqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFRJTUVSIE9wZXJhdGlvbiBNb2RlLCBFeHRlcm5hbCBDb3VudGVyIGFuZCBDYXB0dXJlIE1vZGUgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUSU1FUl9PTkVTSE9UX01PREUgICAgICAgICAgICAgICAgICAgICAgKDBVTCA8PCBUSU1FUl9DVExfT1BNT0RFX1BvcykgICAgICAvKiE8IFRpbWVyIHdvcmtpbmcgaW4gb25lLXNob3QgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX1BFUklPRElDX01PREUgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IFRJTUVSX0NUTF9PUE1PREVfUG9zKSAgICAgIC8qITwgVGltZXIgd29ya2luZyBpbiBwZXJpb2RpYyBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfVE9HR0xFX01PREUgICAgICAgICAgICAgICAgICAgICAgICgyVUwgPDwgVElNRVJfQ1RMX09QTU9ERV9Qb3MpICAgICAgLyohPCBUaW1lciB3b3JraW5nIGluIHRvZ2dsZS1vdXRwdXQgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX0NPTlRJTlVPVVNfTU9ERSAgICAgICAgICAgICAgICAgICAoM1VMIDw8IFRJTUVSX0NUTF9PUE1PREVfUG9zKSAgICAgIC8qITwgVGltZXIgd29ya2luZyBpbiBjb250aW51b3VzIGNvdW50aW5nIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9UT1VUX1BJTl9GUk9NX1RNWCAgICAgICAgICAgICAgICAgKDBVTCA8PCBUSU1FUl9DVExfVEdMUElOU0VMX1BvcykgICAvKiE8IFRpbWVyIHRvZ2dsZS1vdXRwdXQgcGluIGlzIGZyb20gVE14IHBpbiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX1RPVVRfUElOX0ZST01fVE1YX0VYVCAgICAgICAgICAgICAoMVVMIDw8IFRJTUVSX0NUTF9UR0xQSU5TRUxfUG9zKSAgIC8qITwgVGltZXIgdG9nZ2xlLW91dHB1dCBwaW4gaXMgZnJvbSBUTXhfRVhUIHBpbiBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgVElNRVJfQ09VTlRFUl9FVkVOVF9GQUxMSU5HICAgICAgICAgICAgICgwVUwgPDwgVElNRVJfRVhUQ1RMX0NOVFBIQVNFX1BvcykgLyohPCBDb3VudGVyIGluY3JlYXNlIG9uIGZhbGxpbmcgZWRnZSBkZXRlY3Rpb24gXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9DT1VOVEVSX0VWRU5UX1JJU0lORyAgICAgICAgICAgICAgKDFVTCA8PCBUSU1FUl9FWFRDVExfQ05UUEhBU0VfUG9zKSAvKiE8IENvdW50ZXIgaW5jcmVhc2Ugb24gcmlzaW5nIGVkZ2UgZGV0ZWN0aW9uIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfQ0FQVFVSRV9GUkVFX0NPVU5USU5HX01PREUgICAgICAgICgwVUwgPDwgVElNRVJfRVhUQ1RMX0NBUEZVTkNTX1BvcykgLyohPCBUaW1lciBjYXB0dXJlIGV2ZW50IHRvIGdldCB0aW1lciBjb3VudGVyIHZhbHVlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfQ0FQVFVSRV9DT1VOVEVSX1JFU0VUX01PREUgICAgICAgICgxVUwgPDwgVElNRVJfRVhUQ1RMX0NBUEZVTkNTX1BvcykgLyohPCBUaW1lciBjYXB0dXJlIGV2ZW50IHRvIHJlc2V0IHRpbWVyIGNvdW50ZXIgXGhpZGVpbml0aWFsaXplciAqLworCisjZGVmaW5lIFRJTUVSX0NBUFRVUkVfRVZFTlRfRkFMTElORyAgICAgICAgICAgICAoMFVMIDw8IFRJTUVSX0VYVENUTF9DQVBFREdFX1BvcykgIC8qITwgRmFsbGluZyBlZGdlIGRldGVjdGlvbiB0byB0cmlnZ2VyIGNhcHR1cmUgZXZlbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9DQVBUVVJFX0VWRU5UX1JJU0lORyAgICAgICAgICAgICAgKDFVTCA8PCBUSU1FUl9FWFRDVExfQ0FQRURHRV9Qb3MpICAvKiE8IFJpc2luZyBlZGdlIGRldGVjdGlvbiB0byB0cmlnZ2VyIGNhcHR1cmUgZXZlbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9DQVBUVVJFX0VWRU5UX0ZBTExJTkdfUklTSU5HICAgICAgKDJVTCA8PCBUSU1FUl9FWFRDVExfQ0FQRURHRV9Qb3MpICAvKiE8IEJvdGggZmFsbGluZyBhbmQgcmlzaW5nIGVkZ2UgZGV0ZWN0aW9uIHRvIHRyaWdnZXIgY2FwdHVyZSBldmVudCwgYW5kIGZpcnN0IGV2ZW50IGF0IGZhbGxpbmcgZWRnZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX0NBUFRVUkVfRVZFTlRfUklTSU5HX0ZBTExJTkcgICAgICAoM1VMIDw8IFRJTUVSX0VYVENUTF9DQVBFREdFX1BvcykgIC8qITwgQm90aCByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZSBkZXRlY3Rpb24gdG8gdHJpZ2dlciBjYXB0dXJlIGV2ZW50LCBhbmQgZmlyc3QgZXZlbnQgYXQgcmlzaW5nIGVkZ2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9DQVBUVVJFX0VWRU5UX0dFVF9MT1dfUEVSSU9EICAgICAgKDZVTCA8PCBUSU1FUl9FWFRDVExfQ0FQRURHRV9Qb3MpICAvKiE8IEZpcnN0IGNhcHR1cmUgZXZlbnQgaXMgYXQgZmFsbGluZyBlZGdlLCBmb2xsb3dzIGFyZSBhdCBhdCByaXNpbmcgZWRnZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX0NBUFRVUkVfRVZFTlRfR0VUX0hJR0hfUEVSSU9EICAgICAoN1VMIDw8IFRJTUVSX0VYVENUTF9DQVBFREdFX1BvcykgIC8qITwgRmlyc3QgY2FwdHVyZSBldmVudCBpcyBhdCByaXNpbmcgZWRnZSwgZm9sbG93cyBhcmUgYXQgYXQgZmFsbGluZyBlZGdlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworI2RlZmluZSBUSU1FUl9UUkdTUkNfVElNRU9VVF9FVkVOVCAgICAgICAgICAgICAgKDBVTCA8PCBUSU1FUl9UUkdDVExfVFJHU1NFTF9Qb3MpIC8qITwgU2VsZWN0IGludGVybmFsIHRyaWdnZXIgc291cmNlIGZyb20gdGltZXIgdGltZS1vdXQgZXZlbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9UUkdTUkNfQ0FQVFVSRV9FVkVOVCAgICAgICAgICAgICAgKDFVTCA8PCBUSU1FUl9UUkdDVExfVFJHU1NFTF9Qb3MpIC8qITwgU2VsZWN0IGludGVybmFsIHRyaWdnZXIgc291cmNlIGZyb20gdGltZXIgY2FwdHVyZSBldmVudCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX1RSR19UT19FUFdNICAgICAgICAgICAgICAgICAgICAgICAoVElNRVJfVFJHQ1RMX1RSR0VQV01fTXNrKSAgICAgICAgLyohPCBFYWNoIHRpbWVyIGV2ZW50IGFzIEVQV00gY291bnRlciBjbG9jayBzb3VyY2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUSU1FUl9UUkdfVE9fRUFEQyAgICAgICAgICAgICAgICAgICAgICAgKFRJTUVSX1RSR0NUTF9UUkdFQURDX01zaykgICAgICAgIC8qITwgRWFjaCB0aW1lciBldmVudCB0byBzdGFydCBBREMgY29udmVyc2lvbiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRJTUVSX1RSR19UT19EQUMgICAgICAgICAgICAgICAgICAgICAgICAoVElNRVJfVFJHQ1RMX1RSR0RBQ19Nc2spICAgICAgICAgLyohPCBFYWNoIHRpbWVyIGV2ZW50IHRvIHN0YXJ0IERBQyBjb252ZXJzaW9uIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVElNRVJfVFJHX1RPX1BETUEgICAgICAgICAgICAgICAgICAgICAgIChUSU1FUl9UUkdDVExfVFJHUERNQV9Nc2spICAgICAgICAvKiE8IEVhY2ggdGltZXIgZXZlbnQgdG8gdHJpZ2dlciBQRE1BIHRyYW5zZmVyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBUSU1FUl9FWFBPUlRFRF9DT05TVEFOVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVElNRVJfRVhQT1JURURfRlVOQ1RJT05TIFRJTUVSIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFRpbWVyIENvbXBhcmVkIFZhbHVlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMlZhbHVlICAgIFRpbWVyIGNvbXBhcmUgdmFsdWUuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAyIHRvIDB4RkZGRkZGLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aW1lciBjb21wYXJlZCB2YWx1ZSB0byBhZGp1c3QgdGltZXIgdGltZS1vdXQgaW50ZXJ2YWwuCisgICAgICAgIDEuIE5ldmVyIHdyaXRlIDB4MCBvciAweDEgaW4gdGhpcyBmaWVsZCwgb3IgdGhlIGNvcmUgd2lsbCBydW4gaW50byB1bmtub3duIHN0YXRlLiBcbgorICAqICAgICAgICAgICAgIDIuIElmIHVwZGF0ZSB0aW1lciBjb21wYXJlZCB2YWx1ZSBpbiBjb250aW51b3VzIGNvdW50aW5nIG1vZGUsIHRpbWVyIGNvdW50ZXIgdmFsdWUgd2lsbCBrZWVwIGNvdW50aW5nIGNvbnRpbnVvdXNseS4gXG4KKyAgKiAgICAgICAgICAgICAgICBCdXQgaWYgdGltZXIgaXMgb3BlcmF0aW5nIGF0IG90aGVyIG1vZGVzLCB0aGUgdGltZXIgdXAgY291bnRlciB3aWxsIHJlc3RhcnQgY291bnRpbmcgYW5kIHN0YXJ0IGZyb20gMC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRJTUVSX1NFVF9DTVBfVkFMVUUodGltZXIsIHUzMlZhbHVlKSAgICAgICAgKCh0aW1lciktPkNNUCA9ICh1MzJWYWx1ZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBUaW1lciBQcmVzY2FsZSBWYWx1ZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJWYWx1ZSAgICBUaW1lciBwcmVzY2FsZSB2YWx1ZS4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDAgdG8gMHhGRi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgdGltZXIgcHJlc2NhbGUgdmFsdWUgYW5kIHRpbWVyIHNvdXJjZSBjbG9jayB3aWxsIGJlIGRpdmlkZWQgYnkgKHByZXNjYWxlICsgMSkgXG4KKyAgKiAgICAgICAgICAgICBiZWZvcmUgaXQgaXMgZmVkIGludG8gdGltZXIuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUSU1FUl9TRVRfUFJFU0NBTEVfVkFMVUUodGltZXIsIHUzMlZhbHVlKSAgICgodGltZXIpLT5DVEwgPSAoKHRpbWVyKS0+Q1RMICYgflRJTUVSX0NUTF9QU0NfTXNrKSB8ICh1MzJWYWx1ZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIENoZWNrIHNwZWNpZnkgVGltZXIgU3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHZhbCAgICAgMCAgIFRpbWVyIDI0LWJpdCB1cCBjb3VudGVyIGlzIGluYWN0aXZlCisgICogQHJldHZhbCAgICAgMSAgIFRpbWVyIDI0LWJpdCB1cCBjb3VudGVyIGlzIGFjdGl2ZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNoZWNrIGlmIHNwZWNpZnkgVGltZXIgY291bnRlciBpcyBpbmFjdGl2ZSBvciBhY3RpdmUuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUSU1FUl9JU19BQ1RJVkUodGltZXIpICAgICAgICAgICAgICAgICAgICAgICgoKHRpbWVyKS0+Q1RMICYgVElNRVJfQ1RMX0FDVFNUU19Nc2spPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgU2VsZWN0IFRvZ2dsZS1vdXRwdXQgUGluCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMlRvdXRTZWwgIFRvZ2dsZS1vdXRwdXQgcGluIHNlbGVjdGlvbiwgdmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfVE9VVF9QSU5fRlJPTV9UTVgKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfVE9VVF9QSU5fRlJPTV9UTVhfRVhUCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VsZWN0IHRpbWVyIHRvZ2dsZS1vdXRwdXQgcGluIGlzIG91dHB1dCBvbiBUTXggb3IgVE14X0VYVCBwaW4uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUSU1FUl9TRUxFQ1RfVE9VVF9QSU4odGltZXIsIHUzMlRvdXRTZWwpICAgICgodGltZXIpLT5DVEwgPSAoKHRpbWVyKS0+Q1RMICYgflRJTUVSX0NUTF9UR0xQSU5TRUxfTXNrKSB8ICh1MzJUb3V0U2VsKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBEZWNsYXJlIHRoZXNlIGlubGluZSBmdW5jdGlvbnMgaGVyZSB0byBhdm9pZCBNSVNSQSBDIDIwMDQgcnVsZSA4LjEgZXJyb3IgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX1N0YXJ0KFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX1N0b3AoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfRW5hYmxlV2FrZXVwKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0Rpc2FibGVXYWtldXAoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfU3RhcnRDYXB0dXJlKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX1N0b3BDYXB0dXJlKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0VuYWJsZUNhcHR1cmVEZWJvdW5jZShUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9EaXNhYmxlQ2FwdHVyZURlYm91bmNlKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0VuYWJsZUV2ZW50Q291bnRlckRlYm91bmNlKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0Rpc2FibGVFdmVudENvdW50ZXJEZWJvdW5jZShUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9FbmFibGVJbnQoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfRGlzYWJsZUludChUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9FbmFibGVDYXB0dXJlSW50KFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0Rpc2FibGVDYXB0dXJlSW50KFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBUSU1FUl9HZXRJbnRGbGFnKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0NsZWFySW50RmxhZyhUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVElNRVJfR2V0Q2FwdHVyZUludEZsYWcoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfQ2xlYXJDYXB0dXJlSW50RmxhZyhUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVElNRVJfR2V0V2FrZXVwRmxhZyhUSU1FUl9UICp0aW1lcik7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9DbGVhcldha2V1cEZsYWcoVElNRVJfVCAqdGltZXIpOworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFRJTUVSX0dldENhcHR1cmVEYXRhKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBUSU1FUl9HZXRDb3VudGVyKFRJTUVSX1QgKnRpbWVyKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX1Jlc2V0Q291bnRlcihUSU1FUl9UICp0aW1lcik7CisKKworLyoqCisgICogQGJyaWVmICAgICAgU3RhcnQgVGltZXIgQ291bnRpbmcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RhcnQgVGltZXIgY291bnRpbmcuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9TdGFydChUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+Q1RMIHw9IFRJTUVSX0NUTF9DTlRFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFN0b3AgVGltZXIgQ291bnRpbmcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RvcC9zdXNwZW5kIFRpbWVyIGNvdW50aW5nLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfU3RvcChUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+Q1RMICY9IH5USU1FUl9DVExfQ05URU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgVGltZXIgSW50ZXJydXB0IFdha2UtdXAgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQgd2FrZS11cCBmdW5jdGlvbiBhbmQgaW50ZXJydXB0IHNvdXJjZSBjb3VsZCBiZSB0aW1lLW91dCBpbnRlcnJ1cHQsIFxuCisgICogICAgICAgICAgICAgY291bnRlciBldmVudCBpbnRlcnJ1cHQgb3IgY2FwdHVyZSB0cmlnZ2VyIGludGVycnVwdC4KKyAgICAgICAgVG8gd2FrZSB0aGUgc3lzdGVtIGZyb20gUG93ZXItZG93biBtb2RlLCB0aW1lciBjbG9jayBzb3VyY2UgbXVzdCBiZSBldGhlciBMWFQgb3IgTElSQy4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0VuYWJsZVdha2V1cChUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+Q1RMIHw9IFRJTUVSX0NUTF9XS0VOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUaW1lciBXYWtlLXVwIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIHRpbWVyIGludGVycnVwdCB3YWtlLXVwIGZ1bmN0aW9uLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfRGlzYWJsZVdha2V1cChUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+Q1RMICY9IH5USU1FUl9DVExfV0tFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFN0YXJ0IFRpbWVyIENhcHR1cmUgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RhcnQgVGltZXIgY2FwdHVyZSBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX1N0YXJ0Q2FwdHVyZShUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+RVhUQ1RMIHw9IFRJTUVSX0VYVENUTF9DQVBFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFN0b3AgVGltZXIgQ2FwdHVyZSBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdG9wIFRpbWVyIGNhcHR1cmUgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUSU1FUl9TdG9wQ2FwdHVyZShUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+RVhUQ1RMICY9IH5USU1FUl9FWFRDVExfQ0FQRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgQ2FwdHVyZSBQaW4gRGUtYm91bmNlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgZGV0ZWN0IGRlLWJvdW5jZSBmdW5jdGlvbiBvZiBjYXB0dXJlIHBpbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0VuYWJsZUNhcHR1cmVEZWJvdW5jZShUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+RVhUQ1RMIHw9IFRJTUVSX0VYVENUTF9DQVBEQkVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBDYXB0dXJlIFBpbiBEZS1ib3VuY2UKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgZGV0ZWN0IGRlLWJvdW5jZSBmdW5jdGlvbiBvZiBjYXB0dXJlIHBpbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0Rpc2FibGVDYXB0dXJlRGVib3VuY2UoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkVYVENUTCAmPSB+VElNRVJfRVhUQ1RMX0NBUERCRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgQ291bnRlciBQaW4gRGUtYm91bmNlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgZGV0ZWN0IGRlLWJvdW5jZSBmdW5jdGlvbiBvZiBjb3VudGVyIHBpbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0VuYWJsZUV2ZW50Q291bnRlckRlYm91bmNlKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5FWFRDVEwgfD0gVElNRVJfRVhUQ1RMX0NOVERCRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIENvdW50ZXIgUGluIERlLWJvdW5jZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHRoZSBkZXRlY3QgZGUtYm91bmNlIGZ1bmN0aW9uIG9mIGNvdW50ZXIgcGluLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfRGlzYWJsZUV2ZW50Q291bnRlckRlYm91bmNlKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5FWFRDVEwgJj0gflRJTUVSX0VYVENUTF9DTlREQkVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFRpbWVyIFRpbWUtb3V0IEludGVycnVwdAorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgdGhlIHRpbWVyIHRpbWUtb3V0IGludGVycnVwdCBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0VuYWJsZUludChUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+Q1RMIHw9IFRJTUVSX0NUTF9JTlRFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgVGltZXIgVGltZS1vdXQgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIHRpbWVyIHRpbWUtb3V0IGludGVycnVwdCBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0Rpc2FibGVJbnQoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkNUTCAmPSB+VElNRVJfQ1RMX0lOVEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIENhcHR1cmUgVHJpZ2dlciBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSB0aW1lciBjYXB0dXJlIHRyaWdnZXIgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfRW5hYmxlQ2FwdHVyZUludChUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+RVhUQ1RMIHw9IFRJTUVSX0VYVENUTF9DQVBJRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIENhcHR1cmUgVHJpZ2dlciBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgdGltZXIgY2FwdHVyZSB0cmlnZ2VyIGludGVycnVwdCBmdW5jdGlvbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0Rpc2FibGVDYXB0dXJlSW50KFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5FWFRDVEwgJj0gflRJTUVSX0VYVENUTF9DQVBJRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgVGltZXIgVGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBUaW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBUaW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHRpbWVyIHRpbWUtb3V0IGludGVycnVwdCBvY2N1cnJlZCBvciBub3QuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVElNRVJfR2V0SW50RmxhZyhUSU1FUl9UICp0aW1lcikKK3sKKyAgICByZXR1cm4gKCh0aW1lci0+SU5UU1RTICYgVElNRVJfSU5UU1RTX1RJRl9Nc2spID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgVGltZXIgVGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aW1lciB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyB0byAwLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVElNRVJfQ2xlYXJJbnRGbGFnKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5JTlRTVFMgPSBUSU1FUl9JTlRTVFNfVElGX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFRpbWVyIENhcHR1cmUgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBUaW1lciBjYXB0dXJlIGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgICogQHJldHZhbCAgICAgMSAgIFRpbWVyIGNhcHR1cmUgaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGluZGljYXRlcyB0aW1lciBjYXB0dXJlIHRyaWdnZXIgaW50ZXJydXB0IG9jY3VycmVkIG9yIG5vdC4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBUSU1FUl9HZXRDYXB0dXJlSW50RmxhZyhUSU1FUl9UICp0aW1lcikKK3sKKyAgICByZXR1cm4gdGltZXItPkVJTlRTVFM7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFRpbWVyIENhcHR1cmUgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aW1lciBjYXB0dXJlIHRyaWdnZXIgaW50ZXJydXB0IGZsYWcgdG8gMC4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0NsZWFyQ2FwdHVyZUludEZsYWcoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkVJTlRTVFMgPSBUSU1FUl9FSU5UU1RTX0NBUElGX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFRpbWVyIFdha2UtdXAgRmxhZworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHZhbCAgICAgMCAgIFRpbWVyIGRvZXMgbm90IGNhdXNlIENQVSB3YWtlLXVwCisgICogQHJldHZhbCAgICAgMSAgIFRpbWVyIGludGVycnVwdCBldmVudCBjYXVzZSBDUFUgd2FrZS11cAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgdGltZXIgaW50ZXJydXB0IGV2ZW50IGhhcyB3YWtlZCB1cCBzeXN0ZW0gb3Igbm90LgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFRJTUVSX0dldFdha2V1cEZsYWcoVElNRVJfVCAqdGltZXIpCit7CisgICAgcmV0dXJuICh0aW1lci0+SU5UU1RTICYgVElNRVJfSU5UU1RTX1RXS0ZfTXNrID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgVGltZXIgV2FrZS11cCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIHRpbWVyIHdha2UtdXAgc3lzdGVtIGZsYWcgdG8gMC4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX0NsZWFyV2FrZXVwRmxhZyhUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+SU5UU1RTID0gVElNRVJfSU5UU1RTX1RXS0ZfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ2FwdHVyZSB2YWx1ZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIDI0LWJpdCBDYXB0dXJlIFZhbHVlCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHJlcG9ydHMgdGhlIGN1cnJlbnQgMjQtYml0IHRpbWVyIGNhcHR1cmUgdmFsdWUuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVElNRVJfR2V0Q2FwdHVyZURhdGEoVElNRVJfVCAqdGltZXIpCit7CisgICAgcmV0dXJuIHRpbWVyLT5DQVA7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBDb3VudGVyIHZhbHVlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgMjQtYml0IENvdW50ZXIgVmFsdWUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gcmVwb3J0cyB0aGUgY3VycmVudCAyNC1iaXQgdGltZXIgY291bnRlciB2YWx1ZS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBUSU1FUl9HZXRDb3VudGVyKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHJldHVybiB0aW1lci0+Q05UOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZXNldCBDb3VudGVyCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlc2V0IGN1cnJlbnQgY291bnRlciB2YWx1ZSBhbmQgaW50ZXJuYWwgcHJlc2NhbGUgY291bnRlciB2YWx1ZS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRJTUVSX1Jlc2V0Q291bnRlcihUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+Q05UID0gMFVMOworICAgIHdoaWxlKCh0aW1lci0+Q05UICYgVElNRVJfQ05UX1JTVEFDVF9Nc2spID09IFRJTUVSX0NOVF9SU1RBQ1RfTXNrKSB7fQorfQorCisKK3VpbnQzMl90IFRJTUVSX09wZW4oVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMk1vZGUsIHVpbnQzMl90IHUzMkZyZXEpOwordm9pZCBUSU1FUl9DbG9zZShUSU1FUl9UICp0aW1lcik7Cit2b2lkIFRJTUVSX0RlbGF5KFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJVc2VjKTsKK3ZvaWQgVElNRVJfRW5hYmxlQ2FwdHVyZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyQ2FwTW9kZSwgdWludDMyX3QgdTMyRWRnZSk7Cit2b2lkIFRJTUVSX0Rpc2FibGVDYXB0dXJlKFRJTUVSX1QgKnRpbWVyKTsKK3ZvaWQgVElNRVJfRW5hYmxlRXZlbnRDb3VudGVyKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJFZGdlKTsKK3ZvaWQgVElNRVJfRGlzYWJsZUV2ZW50Q291bnRlcihUSU1FUl9UICp0aW1lcik7Cit1aW50MzJfdCBUSU1FUl9HZXRNb2R1bGVDbG9jayhUSU1FUl9UICp0aW1lcik7Cit2b2lkIFRJTUVSX0VuYWJsZUZyZXFDb3VudGVyKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJEcm9wQ291bnQsIHVpbnQzMl90IHUzMlRpbWVvdXQsIHVpbnQzMl90IHUzMkVuYWJsZUludCk7Cit2b2lkIFRJTUVSX0Rpc2FibGVGcmVxQ291bnRlcihUSU1FUl9UICp0aW1lcik7Cit2b2lkIFRJTUVSX1NldFRyaWdnZXJTb3VyY2UoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMlNyYyk7Cit2b2lkIFRJTUVSX1NldFRyaWdnZXJUYXJnZXQoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMk1hc2spOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFRJTUVSX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFRJTUVSX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19USU1FUl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdGltZXJfcHdtLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy90aW1lcl9wd20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjNkMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdGltZXJfcHdtLmgKQEAgLTAsMCArMSw3NDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB0aW1lci5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBUaW1lciBQV00gQ29udHJvbGxlcihUaW1lciBQV00pIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVElNRVJfUFdNX0hfXworI2RlZmluZSBfX1RJTUVSX1BXTV9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFRJTUVSX1BXTV9Ecml2ZXIgVElNRVIgUFdNIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFRJTUVSX1BXTV9FWFBPUlRFRF9DT05TVEFOVFMgVElNRVIgUFdNIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBPdXRwdXQgQ2hhbm5lbCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9DSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQwKSAgICAgICAvKiE8IEluZGljYXRlIFBXTXhfQ0gwIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9DSDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQxKSAgICAgICAvKiE8IEluZGljYXRlIFBXTXhfQ0gxIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENvdW50ZXIgVHlwZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUUFdNX1VQX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVTCA8PCBUSU1FUl9QV01DVExfQ05UVFlQRV9Qb3MpICAgICAgIC8qITwgVXAgY291bnQgdHlwZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fRE9XTl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IFRJTUVSX1BXTUNUTF9DTlRUWVBFX1BvcykgICAgICAgLyohPCBEb3duIGNvdW50IHR5cGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX1VQX0RPV05fQ09VTlQgICAgICAgICAgICAgICAgICAgICAgKDJVTCA8PCBUSU1FUl9QV01DVExfQ05UVFlQRV9Qb3MpICAgICAgIC8qITwgVXAtRG93biBjb3VudCB0eXBlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENvdW50ZXIgTW9kZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUUFdNX0FVVE9fUkVMT0FEX01PREUgICAgICAgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBdXRvLXJlbG9hZCBtb2RlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9PTkVfU0hPVF9NT0RFICAgICAgICAgICAgICAgICAgICAgIChUSU1FUl9QV01DVExfQ05UTU9ERV9Nc2spICAgICAgIC8qITwgT25lLXNob3QgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBPdXRwdXQgTGV2ZWwgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9PVVRQVVRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICgwVUwpICAgICAgLyohPCBUaW1lciBQV00gb3V0cHV0IHRvZ2dsZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fT1VUUFVUX05PVEhJTkcgICAgICAgICAgICAgICAgICAgICAoMVVMKSAgICAgIC8qITwgVGltZXIgUFdNIG91dHB1dCBub3RoaW5nIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9PVVRQVVRfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICgyVUwpICAgICAgLyohPCBUaW1lciBQV00gb3V0cHV0IGxvdyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fT1VUUFVUX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAoM1VMKSAgICAgIC8qITwgVGltZXIgUFdNIG91dHB1dCBoaWdoIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFRyaWdnZXIgQURDIFNvdXJjZSBTZWxlY3QgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUUFdNX1RSSUdHRVJfQURDX0FUX1pFUk9fUE9JTlQgICAgICAgICAgICAgICAgICAgICAgKDBVTCA8PCBUSU1FUl9QV01FQURDVFNfVFJHU0VMX1BvcykgICAgIC8qITwgVGltZXIgUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgemVybyBwb2ludCBldmVudCBvY2N1cnJlZCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fVFJJR0dFUl9BRENfQVRfUEVSSU9EX1BPSU5UICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IFRJTUVSX1BXTUVBRENUU19UUkdTRUxfUG9zKSAgICAgLyohPCBUaW1lciBQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBwZXJpb2QgcG9pbnQgZXZlbnQgb2NjdXJyZWQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX1RSSUdHRVJfQURDX0FUX1pFUk9fT1JfUEVSSU9EX1BPSU5UICAgICAgICAgICAgKDJVTCA8PCBUSU1FUl9QV01FQURDVFNfVFJHU0VMX1BvcykgICAgIC8qITwgVGltZXIgUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgemVybyBvciBwZXJpb2QgcG9pbnQgZXZlbnQgb2NjdXJyZWQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX1RSSUdHRVJfQURDX0FUX0NPTVBBUkVfVVBfQ09VTlRfUE9JTlQgICAgICAgICAgKDNVTCA8PCBUSU1FUl9QV01FQURDVFNfVFJHU0VMX1BvcykgICAgIC8qITwgVGltZXIgUFdNIHRyaWdnZXIgQURDIHdoaWxlIGNvdW50ZXIgdXAgY291bnQgY29tcGFyZSBwb2ludCBldmVudCBvY2N1cnJlZCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fVFJJR0dFUl9BRENfQVRfQ09NUEFSRV9ET1dOX0NPVU5UX1BPSU5UICAgICAgICAoNFVMIDw8IFRJTUVSX1BXTUVBRENUU19UUkdTRUxfUG9zKSAgICAgLyohPCBUaW1lciBQV00gdHJpZ2dlciBBREMgd2hpbGUgY291bnRlciBkb3duIGNvdW50IGNvbXBhcmUgcG9pbnQgZXZlbnQgb2NjdXJyZWQgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgQnJha2UgQ29udHJvbCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0VER0VfQUNNUDAgICAgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX0NQTzBFQkVOX01zaykgLyohPCBDb21wYXJhdG9yIDAgYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfRURHRV9BQ01QMSAgICAgICAgICAgIChUSU1FUl9QV01CUktDVExfQ1BPMUVCRU5fTXNrKSAvKiE8IENvbXBhcmF0b3IgMSBhcyBlZGdlLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX0JLUElOICAgICAgICAgICAgKFRJTUVSX1BXTUJSS0NUTF9CUktQRUVOX01zaykgIC8qITwgQnJha2UgcGluIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0VER0VfU1lTX0NTUyAgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX1NZU0VCRU5fTXNrIHwgKFRJTUVSX1BXTUZBSUxCUktfQ1NTQlJLRU5fTXNrIDw8IDE2KSkgICAgLyohPCBTeXN0ZW0gZmFpbCBjb25kaXRpb246IGNsb2NrIHNlY3VyaXR5IHN5c3RlbSBkZXRlY3Rpb24gYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfRURHRV9TWVNfQk9EICAgICAgICAgIChUSU1FUl9QV01CUktDVExfU1lTRUJFTl9Nc2sgfCAoVElNRVJfUFdNRkFJTEJSS19CT0RCUktFTl9Nc2sgPDwgMTYpKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogYnJvd24tb3V0IGRldGVjdGlvbiBhcyBlZGdlLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX1NZU19DT1IgICAgICAgICAgKFRJTUVSX1BXTUJSS0NUTF9TWVNFQkVOX01zayB8IChUSU1FUl9QV01GQUlMQlJLX0NPUkJSS0VOX01zayA8PCAxNikpICAgIC8qITwgU3lzdGVtIGZhaWwgY29uZGl0aW9uOiBjb3JlIGxvY2t1cCBkZXRlY3Rpb24gYXMgZWRnZS1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfRURHRV9TWVNfUkFNICAgICAgICAgIChUSU1FUl9QV01CUktDVExfU1lTRUJFTl9Nc2sgfCAoVElNRVJfUFdNRkFJTEJSS19SQU1CUktFTl9Nc2sgPDwgMTYpKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogU1JBTSBwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uIGFzIGVkZ2UtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfQUNNUDAgICAgICAgICAgIChUSU1FUl9QV01CUktDVExfQ1BPMExCRU5fTXNrKSAgLyohPCBDb21wYXJhdG9yIDAgYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX0FDTVAxICAgICAgICAgICAoVElNRVJfUFdNQlJLQ1RMX0NQTzFMQkVOX01zaykgIC8qITwgQ29tcGFyYXRvciAxIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JSQUtFX1NPVVJDRV9MRVZFTF9CS1BJTiAgICAgICAgICAgKFRJTUVSX1BXTUJSS0NUTF9CUktQTEVOX01zaykgICAvKiE8IEJyYWtlIHBpbiBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfU1lTX0NTUyAgICAgICAgIChUSU1FUl9QV01CUktDVExfU1lTTEJFTl9Nc2sgfCAoVElNRVJfUFdNRkFJTEJSS19DU1NCUktFTl9Nc2sgPDwgMTYpKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogY2xvY2sgc2VjdXJpdHkgc3lzdGVtIGRldGVjdGlvbiBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfU1lTX0JPRCAgICAgICAgIChUSU1FUl9QV01CUktDVExfU1lTTEJFTl9Nc2sgfCAoVElNRVJfUFdNRkFJTEJSS19CT0RCUktFTl9Nc2sgPDwgMTYpKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogYnJvd24tb3V0IGRldGVjdGlvbiBhcyBsZXZlbC1kZXRlY3QgZmF1bHQgYnJha2Ugc291cmNlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfU1lTX0NPUiAgICAgICAgIChUSU1FUl9QV01CUktDVExfU1lTTEJFTl9Nc2sgfCAoVElNRVJfUFdNRkFJTEJSS19DT1JCUktFTl9Nc2sgPDwgMTYpKSAgICAvKiE8IFN5c3RlbSBmYWlsIGNvbmRpdGlvbjogY29yZSBsb2NrdXAgZGV0ZWN0aW9uIGFzIGxldmVsLWRldGVjdCBmYXVsdCBicmFrZSBzb3VyY2UgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JSQUtFX1NPVVJDRV9MRVZFTF9TWVNfUkFNICAgICAgICAgKFRJTUVSX1BXTUJSS0NUTF9TWVNMQkVOX01zayB8IChUSU1FUl9QV01GQUlMQlJLX1JBTUJSS0VOX01zayA8PCAxNikpICAgIC8qITwgU3lzdGVtIGZhaWwgY29uZGl0aW9uOiBTUkFNIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gYXMgbGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIHNvdXJjZSBcaGlkZWluaXRpYWxpemVyICovCisKKyNkZWZpbmUgVFBXTV9CUkFLRV9FREdFICAgICAgICAgICAgICAgICAgICAgICAgIChUSU1FUl9QV01TV0JSS19CUktFVFJHX01zaykgICAgLyohPCBFZGdlLWRldGVjdCBmYXVsdCBicmFrZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQlJBS0VfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAoVElNRVJfUFdNU1dCUktfQlJLTFRSR19Nc2spICAgIC8qITwgTGV2ZWwtZGV0ZWN0IGZhdWx0IGJyYWtlIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIExvYWQgTW9kZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUUFdNX0xPQURfTU9ERV9QRVJJT0QgICAgICAgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGltZXIgUFdNIHBlcmlvZCBsb2FkIG1vZGUgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0xPQURfTU9ERV9JTU1FRElBVEUgICAgICAgICAgICAgICAgKFRJTUVSX1BXTUNUTF9JTU1MREVOX01zaykgIC8qITwgVGltZXIgUFdNIGltbWVkaWF0ZWx5IGxvYWQgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fTE9BRF9NT0RFX0NFTlRFUiAgICAgICAgICAgICAgICAgICAoVElNRVJfUFdNQ1RMX0NUUkxEX01zaykgICAgLyohPCBUaW1lciBQV00gY2VudGVyIGxvYWQgbW9kZSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBCcmFrZSBQaW4gRGUtYm91bmNlIENsb2NrIFNvdXJjZSBTZWxlY3QgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMSAgICAgICAgICAgICAgICgwVUwpICAgIC8qITwgRGUtYm91bmNlIGNsb2NrIGlzIFBDTEsgZGl2aWRlIGJ5IDEgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl8yICAgICAgICAgICAgICAgKDFVTCkgICAgLyohPCBEZS1ib3VuY2UgY2xvY2sgaXMgUENMSyBkaXZpZGUgYnkgMiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQktQX0RCQ0xLX1BDTEtfRElWXzQgICAgICAgICAgICAgICAoMlVMKSAgICAvKiE8IERlLWJvdW5jZSBjbG9jayBpcyBQQ0xLIGRpdmlkZSBieSA0IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfOCAgICAgICAgICAgICAgICgzVUwpICAgIC8qITwgRGUtYm91bmNlIGNsb2NrIGlzIFBDTEsgZGl2aWRlIGJ5IDggXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl8xNiAgICAgICAgICAgICAgKDRVTCkgICAgLyohPCBEZS1ib3VuY2UgY2xvY2sgaXMgUENMSyBkaXZpZGUgYnkgMTYgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl8zMiAgICAgICAgICAgICAgKDVVTCkgICAgLyohPCBEZS1ib3VuY2UgY2xvY2sgaXMgUENMSyBkaXZpZGUgYnkgMzIgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl82NCAgICAgICAgICAgICAgKDZVTCkgICAgLyohPCBEZS1ib3VuY2UgY2xvY2sgaXMgUENMSyBkaXZpZGUgYnkgNjQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl8xMjggICAgICAgICAgICAgKDdVTCkgICAgLyohPCBEZS1ib3VuY2UgY2xvY2sgaXMgUENMSyBkaXZpZGUgYnkgMTI4IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEJyYWtlIFBpbiBTb3VyY2UgU2VsZWN0IENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUUFdNX1RNX0JSQUtFMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVTCkgICAgLyohPCBCcmFrZSBwaW4gc291cmNlIGNvbWVzIGZyb20gVE1fQlJBS0UwIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9UTV9CUkFLRTEgICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwpICAgIC8qITwgQnJha2UgcGluIHNvdXJjZSBjb21lcyBmcm9tIFRNX0JSQUtFMSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fVE1fQlJBS0UyICAgICAgICAgICAgICAgICAgICAgICAgICAoMlVMKSAgICAvKiE8IEJyYWtlIHBpbiBzb3VyY2UgY29tZXMgZnJvbSBUTV9CUkFLRTIgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX1RNX0JSQUtFMyAgICAgICAgICAgICAgICAgICAgICAgICAgKDNVTCkgICAgLyohPCBCcmFrZSBwaW4gc291cmNlIGNvbWVzIGZyb20gVE1fQlJBS0UzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENvdW50ZXIgQ2xvY2sgU291cmNlIFNlbGVjdCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUUFdNX0NOVFJfQ0xLU1JDX1RNUl9DTEsgICAgICAgICAgICAgICAgKDBVTCkgICAgLyohPCBUaW1lciBQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gVE1SX0NMSyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQ05UUl9DTEtTUkNfVElNRVIwX0lOVCAgICAgICAgICAgICAoMVVMKSAgICAvKiE8IFRpbWVyIFBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBUSU1FUjAgaW50ZXJydXB0IGV2ZW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgVFBXTV9DTlRSX0NMS1NSQ19USU1FUjFfSU5UICAgICAgICAgICAgICgyVUwpICAgIC8qITwgVGltZXIgUFdNIENsb2NrIHNvdXJjZSBzZWxlY3RzIHRvIFRJTUVSMSBpbnRlcnJ1cHQgZXZlbnQgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBUUFdNX0NOVFJfQ0xLU1JDX1RJTUVSMl9JTlQgICAgICAgICAgICAgKDNVTCkgICAgLyohPCBUaW1lciBQV00gQ2xvY2sgc291cmNlIHNlbGVjdHMgdG8gVElNRVIyIGludGVycnVwdCBldmVudCBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQ05UUl9DTEtTUkNfVElNRVIzX0lOVCAgICAgICAgICAgICAoNFVMKSAgICAvKiE8IFRpbWVyIFBXTSBDbG9jayBzb3VyY2Ugc2VsZWN0cyB0byBUSU1FUjMgaW50ZXJydXB0IGV2ZW50IFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIENvdW50ZXIgU3luY2hyb25vdXMgTW9kZSBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUUFdNX0NOVFJfU1lOQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgKDBVTCkgICAgLyohPCBEaXNhYmxlIFRJTUVSIFBXTSBzeW5jaHJvbm91cyBmdW5jdGlvbiBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQ05UUl9TWU5DX1NUQVJUX0JZX1RJTUVSMCAgICAgICAgICAoKDA8PFRJTUVSX1BXTVNDVExfU1lOQ1NSQ19Qb3MpIHwgKDE8PFRJTUVSX1BXTVNDVExfU1lOQ01PREVfUG9zKSkgIC8qITwgUFdNIGNvdW50ZXIgc3luY2hyb25vdXMgc3RhcnQgYnkgVElNRVIwIFBXTSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQ05UUl9TWU5DX0NMRUFSX0JZX1RJTUVSMCAgICAgICAgICAoKDA8PFRJTUVSX1BXTVNDVExfU1lOQ1NSQ19Qb3MpIHwgKDM8PFRJTUVSX1BXTVNDVExfU1lOQ01PREVfUG9zKSkgIC8qITwgUFdNIGNvdW50ZXIgc3luY2hyb25vdXMgY2xlYXIgYnkgVElNRVIwIFBXTSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQ05UUl9TWU5DX1NUQVJUX0JZX1RJTUVSMiAgICAgICAgICAoKDE8PFRJTUVSX1BXTVNDVExfU1lOQ1NSQ19Qb3MpIHwgKDE8PFRJTUVSX1BXTVNDVExfU1lOQ01PREVfUG9zKSkgIC8qITwgUFdNIGNvdW50ZXIgc3luY2hyb25vdXMgc3RhcnQgYnkgVElNRVIyIFBXTSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFRQV01fQ05UUl9TWU5DX0NMRUFSX0JZX1RJTUVSMiAgICAgICAgICAoKDE8PFRJTUVSX1BXTVNDVExfU1lOQ1NSQ19Qb3MpIHwgKDM8PFRJTUVSX1BXTVNDVExfU1lOQ01PREVfUG9zKSkgIC8qITwgUFdNIGNvdW50ZXIgc3luY2hyb25vdXMgY2xlYXIgYnkgVElNRVIyIFBXTSBcaGlkZWluaXRpYWxpemVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVElNRVJfUFdNX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBUSU1FUl9QV01fRVhQT1JURURfRlVOQ1RJT05TIFRJTUVSIFBXTSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBQV00gQ291bnRlciBNb2RlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIHNwZWNpZmllZCBUaW1lciBjaGFubmVsIGFzIFBXTSBjb3VudGVyIG1vZGUsIHRoZW4gdGltZXIgY291bnRlciBtb2RlIGlzIGludmFsaWQuCisgICAgICAgIEFsbCByZWdpc3RlcnMgYWJvdXQgdGltZSBjb3VudGVyIGZ1bmN0aW9uIHdpbGwgYmUgY2xlYXJlZCB0byAwIGFuZCB0aW1lciBjbG9jayBzb3VyY2Ugd2lsbCBiZSBjaGFuZ2VkIHRvIFBDTEt4IGF1dG9tYXRpY2FsbHkgYWZ0ZXIgZXhlY3V0aW5nIHRoaXMgbWFjcm8uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0VOQUJMRV9QV01fTU9ERSh0aW1lcikgICAgICAgICAgICAgKCh0aW1lciktPkFMVENUTCA9ICgxIDw8IFRJTUVSX0FMVENUTF9GVU5DU0VMX1BvcykpCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUFdNIENvdW50ZXIgTW9kZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgc3BlY2lmaWVkIFRpbWVyIGNoYW5uZWwgYXMgUFdNIGNvdW50ZXIgbW9kZSwgdGhlbiB0aW1lciBjb3VudGVyIG1vZGUgaXMgYXZhaWxhYmxlLgorICAgICAgICBBbGwgcmVnaXN0ZXJzIGFib3V0IFBXTSBjb3VudGVyIGZ1bmN0aW9uIHdpbGwgYmUgY2xlYXJlZCB0byAwIGFmdGVyIGV4ZWN1dGluZyB0aGlzIG1hY3JvLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9ESVNBQkxFX1BXTV9NT0RFKHRpbWVyKSAgICAgICAgICAgICgodGltZXIpLT5BTFRDVEwgPSAoMCA8PCBUSU1FUl9BTFRDVExfRlVOQ1NFTF9Qb3MpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgSW5kZXBlbmRlbnQgTW9kZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBpbmRlcGVuZGVudCBtb2RlIG9mIFRJTUVSIFBXTSBtb2R1bGUgYW5kIGNvbXBsZW1lbnRhcnkgbW9kZSB3aWxsIGJlIGRpc2FibGVkLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9FTkFCTEVfSU5ERVBFTkRFTlRfTU9ERSh0aW1lcikgICAgICgodGltZXIpLT5QV01DVEwgJj0gfigxdWwgPDwgVElNRVJfUFdNQ1RMX09VVE1PREVfUG9zKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIENvbXBsZW1lbnRhcnkgTW9kZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBjb21wbGVtZW50YXJ5IG1vZGUgb2YgVGltZXIgUFdNIG1vZHVsZSBhbmQgaW5kZXBlbmRlbnQgbW9kZSB3aWxsIGJlIGRpc2FibGVkLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9FTkFCTEVfQ09NUExFTUVOVEFSWV9NT0RFKHRpbWVyKSAgICgodGltZXIpLT5QV01DVEwgfD0gKDEgPDwgVElNRVJfUFdNQ1RMX09VVE1PREVfUG9zKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IENvdW50ZXIgVHlwZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB0eXBlICAgICAgICBUaW1lciBQV00gY291bnQgdHlwZSwgY291bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHlwZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9VUF9DT1VOVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9ET1dOX0NPVU5UCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1VQX0RPV05fQ09VTlQKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgVGltZXIgUFdNIGNvdW50ZXIgdHlwZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fU0VUX0NPVU5URVJfVFlQRSh0aW1lciwgdHlwZSkgICAgICAoKHRpbWVyKS0+UFdNQ1RMID0gKCh0aW1lciktPlBXTUNUTCAmIH5USU1FUl9QV01DVExfQ05UVFlQRV9Nc2spIHwgKHR5cGUpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdGFydCBQV00gQ291bnRlcgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgUFdNIGdlbmVyYXRvciBhbmQgc3RhcnQgY291bnRlciBjb3VudGluZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fU1RBUlRfQ09VTlRFUih0aW1lcikgICAgICAgICAgICAgICAoKHRpbWVyKS0+UFdNQ1RMIHw9IFRJTUVSX1BXTUNUTF9DTlRFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIFN0b3AgUFdNIENvdW50ZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc3RvcCBQV00gY291bnRlciBhZnRlciBjdXJyZW50IHBlcmlvZCBpcyBjb21wbGV0ZWQuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX1NUT1BfQ09VTlRFUih0aW1lcikgICAgICAgICAgICAgICAgKCh0aW1lciktPlBXTVBFUklPRCA9IDB4MCkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IENvdW50ZXIgQ2xvY2sgUHJlc2NhbGVyCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHBhcmFtW2luXSAgcHJlc2NhbGVyICAgIENsb2NrIHByZXNjYWxlciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB4MH4weEZGRi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgdGhlIHByZXNjYWxlciBvZiBzcGVjaWZpZWQgVElNRVIgUFdNLgorICAgICAgICBJZiBwcmVzY2FsZXIgaXMgMCwgdGhlbiB0aGVyZSBpcyBubyBzY2FsaW5nIGluIGNvdW50ZXIgY2xvY2sgc291cmNlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9TRVRfUFJFU0NBTEVSKHRpbWVyLCBwcmVzY2FsZXIpICAgICgodGltZXIpLT5QV01DTEtQU0MgPSAocHJlc2NhbGVyKSkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IENvdW50ZXIgQ2xvY2sgUHJlc2NhbGVyCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgVGFyZ2V0IHByZXNjYWxlciBzZXR0aW5nLCBDTEtQU0MgKFRJTUVSeF9QV01DTEtQU0NbMTE6MF0pCisgICoKKyAgKiBAZGV0YWlscyAgICBHZXQgdGhlIHByZXNjYWxlciBzZXR0aW5nLCB0aGUgdGFyZ2V0IGNvdW50ZXIgY2xvY2sgZGl2aWRlciBpcyAoQ0xLUFNDICsgMSkuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0dFVF9QUkVTQ0FMRVIodGltZXIpICAgICAgICAgICAgICAgKCh0aW1lciktPlBXTUNMS1BTQykKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IENvdW5lciBQZXJpb2QKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcGFyYW1baW5dICBwZXJpb2QgICAgICBQZXJpb2Qgb2Ygc3BlY2lmaWVkIGNoYW5uZWwuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAweDB+MHhGRkZGLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCB0aGUgcGVyaW9kIG9mIHNwZWNpZmllZCBUSU1FUiBQV00uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX1NFVF9QRVJJT0QodGltZXIsIHBlcmlvZCkgICAgICAgICAgKCh0aW1lciktPlBXTVBFUklPRCA9IChwZXJpb2QpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ291bmVyIFBlcmlvZAorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIFRhcmdldCBwZXJpb2Qgc2V0dGluZywgUEVSSU9EIChUSU1FUnhfUFdNUEVSSU9EWzE1OjBdKQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCB0aGUgcGVyaW9kIG9mIHNwZWNpZmllZCBUSU1FUiBQV00uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0dFVF9QRVJJT0QodGltZXIpICAgICAgICAgICAgICAgICAgKCh0aW1lciktPlBXTVBFUklPRCkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IENvbXBhcmF0b3IgVmFsdWUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEBwYXJhbVtpbl0gIGNtcCAgICAgQ29tcGFyYXRvciBvZiBzcGVjaWZpZWQgY2hhbm5lbC4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB4MH4weEZGRkYuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IHRoZSBjb21wYXJhdG9yIHZhbHVlIG9mIHNwZWNpZmllZCBUSU1FUiBQV00uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX1NFVF9DTVBEQVQodGltZXIsIGNtcCkgICAgICAgICAgICAgKCh0aW1lciktPlBXTUNNUERBVCA9IChjbXApKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ29tcGFyYXRvciBWYWx1ZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgVGFyZ2V0IGNvbXBhcmF0b3Igc2V0dGluZywgQ01QREFUIChUSU1FUnhfUFdNQ01QREFUWzE1OjBdKQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGdldCB0aGUgY29tcGFyYXRvciB2YWx1ZSBvZiBzcGVjaWZpZWQgVElNRVIgUFdNLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9HRVRfQ01QREFUKHRpbWVyKSAgICAgICAgICAgICAgICAgICgodGltZXIpLT5QV01DTVBEQVQpCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIENvdW50ZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBjb3VudGVyIG9mIHNwZWNpZmllZCBUSU1FUiBQV00uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0NMRUFSX0NPVU5URVIodGltZXIpICAgICAgICAgICAgICAgKCh0aW1lciktPlBXTUNOVENMUiA9IFRJTUVSX1BXTUNOVENMUl9DTlRDTFJfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTb2Z0d2FyZSBUcmlnZ2VyIEJyYWtlIEV2ZW50CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHBhcmFtW2luXSAgdHlwZSAgICAgICAgVHlwZSBvZiBicmFrZSB0cmlnZ2VyLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9FREdFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX0xFVkVMCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdHJpZ2dlciBicmFrZSBldmVudCBieSB3cml0aW5nIFBXTVNXQlJLIHJlZ2lzdGVyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9TV19UUklHR0VSX0JSQUtFKHRpbWVyLCB0eXBlKSAgICAgICgodGltZXIpLT5QV01TV0JSSyA9ICh0eXBlKSkKKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIE91dHB1dCBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEBwYXJhbVtpbl0gIGNoICAgICAgICAgIEVuYWJsZSBzcGVjaWZpZWQgY2hhbm5lbCBvdXRwdXQgZnVuY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NIMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9DSDEKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBlbmFibGUgb3V0cHV0IGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBvdXRwdXQgcGlucy4KKyAgICAgICAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHUzMkNoTWFzayBwYXJhbWV0ZXIgaXMgMCwgdGhlbiBvdXRwdXQgZnVuY3Rpb24gd2lsbCBiZSBkaXNhYmxlZCBpbiB0aGlzIGNoYW5uZWwuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0VOQUJMRV9PVVRQVVQodGltZXIsIGNoKSAgICAgICAgICAgKCh0aW1lciktPlBXTVBPRU4gPSAoY2gpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgT3V0cHV0IEludmVyc2UKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcGFyYW1baW5dICBjaCAgICAgICAgICBTZXQgc3BlY2lmaWVkIGNoYW5uZWwgb3V0cHV0IGlzIGludmVyc2VkIG9yIG5vdC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ0gwCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NIMQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBvdXRwdXQgaW52ZXJzZSBvZiBzcGVjaWZpZWQgb3V0cHV0IHBpbnMuCisgICAgICAgIElmIHUzMkNoTWFzayBwYXJhbWV0ZXIgaXMgMCwgdGhlbiBvdXRwdXQgaW52ZXJzZSBmdW5jdGlvbiB3aWxsIGJlIGRpc2FibGVkLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9TRVRfT1VUUFVUX0lOVkVSU0UodGltZXIsIGNoKSAgICAgICgodGltZXIpLT5QV01QT0xDVEwgPSAoY2gpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgT3V0cHV0IEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcGFyYW1baW5dICBjaCAgICAgICBFbmFibGUgc3BlY2lmaWVkIGNoYW5uZWwgb3V0cHV0IG1hc2sgZnVuY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NIMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9DSDEKKyAgKgorICAqIEBwYXJhbVtpbl0gIGxldmVsICAgIE91dHB1dCB0byBoaWdoIG9yIGxvdyBvbiBzcGVjaWZpZWQgbWFzayBjaGFubmVsLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBvdXRwdXQgZnVuY3Rpb24gb2Ygc3BlY2lmaWVkIG91dHB1dCBwaW5zLgorICAgICAgICBJZiB1MzJDaE1hc2sgcGFyYW1ldGVyIGlzIDAsIHRoZW4gb3V0cHV0IG1hc2sgZnVuY3Rpb24gd2lsbCBiZSBkaXNhYmxlZC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fU0VUX01BU0tfT1VUUFVUKHRpbWVyLCBjaCwgbGV2ZWwpIGRvIHsodGltZXIpLT5QV01NU0tFTiA9IChjaCk7ICh0aW1lciktPlBXTU1TSyA9IChsZXZlbCk7IH13aGlsZSgwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQ291bnRlciBTeW5jaHJvbm91cyBNb2RlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcGFyYW1baW5dICBtb2RlICAgIFN5bmNocm9ub3VzIG1vZGUuIFBvc3NpYmxlIG9wdGlvbnMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NOVFJfU1lOQ19ESVNBQkxFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ05UUl9TWU5DX1NUQVJUX0JZX1RJTUVSMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0NOVFJfU1lOQ19DTEVBUl9CWV9USU1FUjAKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9DTlRSX1NZTkNfU1RBUlRfQllfVElNRVIyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ05UUl9TWU5DX0NMRUFSX0JZX1RJTUVSMgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBjb3VudGVyIHN5bmNocm9ub3VzIG1vZGUgb2Ygc3BlY2lmaWVkIFRpbWVyIFBXTSBtb2R1bGUuCisgICAgICAgIE9ubHkgc3VwcG9ydCBhbGwgUFdNIGNvdW50ZXJzIGFyZSBzeW5jaHJvbm91cyBieSBUSU1FUjAgUFdNIG9yIFRJTUVSMH4xIFBXTSBjb3VudGVyIHN5bmNocm9ub3VzIGJ5IFRJTUVSMCBQV00gYW5kCisgICogICAgICAgICAgICAgVElNRVIyfjMgUFdNIGNvdW50ZXIgc3luY2hyb25vdXMgYnkgVElNRVIyIFBXTS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fU0VUX0NPVU5URVJfU1lOQ19NT0RFKHRpbWVyLCBtb2RlKSAgICAgKCh0aW1lciktPlBXTVNDVEwgPSAobW9kZSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFRyaWdnZXIgQ291bnRlciBTeW5jaHJvbm91cworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRyaWdnZXIgc3luY2hyb25vdXMgZXZlbnQgYnkgc3BlY2lmaWVkIFRJTUVSIFBXTS4KKyAgICAgICAgMS4gVGhpcyBtYWNybyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgVElNRVIwIFBXTSBhbmQgVElNRVIyIFBXTS4gXG4KKyAgKiAgICAgICAgICAgICAyLiBTVFJHRU4gKFBXTVNUUkdbMF0pIGlzIHdyaXRlIG9ubHkgYW5kIGFsd2F5cyByZWFkIGFzIDAuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX1RSSUdHRVJfQ09VTlRFUl9TWU5DKHRpbWVyKSAgICAgICAgICAgICgodGltZXIpLT5QV01TVFJHID0gVElNRVJfUFdNU1RSR19TVFJHRU5fTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgWmVybyBFdmVudCBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSB6ZXJvIGV2ZW50IGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fRU5BQkxFX1pFUk9fSU5UKHRpbWVyKSAgICAgICAgICAgICAgICAgKCh0aW1lciktPlBXTUlOVEVOMCB8PSBUSU1FUl9QV01JTlRFTjBfWklFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgWmVybyBFdmVudCBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgemVybyBldmVudCBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0RJU0FCTEVfWkVST19JTlQodGltZXIpICAgICAgICAgICAgICAgICgodGltZXIpLT5QV01JTlRFTjAgJj0gflRJTUVSX1BXTUlOVEVOMF9aSUVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFplcm8gRXZlbnQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgWmVybyBldmVudCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBaZXJvIGV2ZW50IGludGVycnVwdCBvY2N1cnJlZAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpbmRpY2F0ZXMgemVybyBldmVudCBvY2N1cnJlZCBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0dFVF9aRVJPX0lOVF9GTEFHKHRpbWVyKSAgICAgICAgICAgICAgICgoKHRpbWVyKS0+UFdNSU5UU1RTMCAmIFRJTUVSX1BXTUlOVFNUUzBfWklGX01zayk/IDEgOiAwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBaZXJvIEV2ZW50IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhcnMgemVybyBldmVudCBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fQ0xFQVJfWkVST19JTlRfRkxBRyh0aW1lcikgICAgICAgICAgICAgKCh0aW1lciktPlBXTUlOVFNUUzAgPSBUSU1FUl9QV01JTlRTVFMwX1pJRl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBQZXJpb2QgRXZlbnQgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgcGVyaW9kIGV2ZW50IGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fRU5BQkxFX1BFUklPRF9JTlQodGltZXIpICAgICAgICAgICAgICAgKCh0aW1lciktPlBXTUlOVEVOMCB8PSBUSU1FUl9QV01JTlRFTjBfUElFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUGVyaW9kIEV2ZW50IEludGVycnVwdAorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIHRoZSBwZXJpb2QgZXZlbnQgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9ESVNBQkxFX1BFUklPRF9JTlQodGltZXIpICAgICAgICAgICAgICAoKHRpbWVyKS0+UFdNSU5URU4wICY9IH5USU1FUl9QV01JTlRFTjBfUElFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBQZXJpb2QgRXZlbnQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgUGVyaW9kIGV2ZW50IGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgICogQHJldHZhbCAgICAgMSAgIFBlcmlvZCBldmVudCBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaW5kaWNhdGVzIHBlcmlvZCBldmVudCBvY2N1cnJlZCBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0dFVF9QRVJJT0RfSU5UX0ZMQUcodGltZXIpICAgICAgICAgICAgICgoKHRpbWVyKS0+UFdNSU5UU1RTMCAmIFRJTUVSX1BXTUlOVFNUUzBfUElGX01zayk/IDEgOiAwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBQZXJpb2QgRXZlbnQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGNsZWFycyBwZXJpb2QgZXZlbnQgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0NMRUFSX1BFUklPRF9JTlRfRkxBRyh0aW1lcikgICAgICAgICAgICgodGltZXIpLT5QV01JTlRTVFMwID0gVElNRVJfUFdNSU5UU1RTMF9QSUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgQ29tcGFyZSBVcCBFdmVudCBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBjb21wYXJlIHVwIGV2ZW50IGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fRU5BQkxFX0NNUF9VUF9JTlQodGltZXIpICAgICAgICAgICAgICAgKCh0aW1lciktPlBXTUlOVEVOMCB8PSBUSU1FUl9QV01JTlRFTjBfQ01QVUlFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgQ29tcGFyZSBVcCBFdmVudCBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgY29tcGFyZSB1cCBldmVudCBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0RJU0FCTEVfQ01QX1VQX0lOVCh0aW1lcikgICAgICAgICAgICAgICgodGltZXIpLT5QV01JTlRFTjAgJj0gflRJTUVSX1BXTUlOVEVOMF9DTVBVSUVOX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IENvbXBhcmUgVXAgRXZlbnQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgQ29tcGFyZSB1cCBldmVudCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBDb21wYXJlIHVwIGV2ZW50IGludGVycnVwdCBvY2N1cnJlZAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpbmRpY2F0ZXMgY29tcGFyZSB1cCBldmVudCBvY2N1cnJlZCBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0dFVF9DTVBfVVBfSU5UX0ZMQUcodGltZXIpICAgICAgICAgICAgICgoKHRpbWVyKS0+UFdNSU5UU1RTMCAmIFRJTUVSX1BXTUlOVFNUUzBfQ01QVUlGX01zayk/IDEgOiAwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBDb21wYXJlIFVwIEV2ZW50IEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhcnMgY29tcGFyZSB1cCBldmVudCBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fQ0xFQVJfQ01QX1VQX0lOVF9GTEFHKHRpbWVyKSAgICAgICAgICAgKCh0aW1lciktPlBXTUlOVFNUUzAgPSBUSU1FUl9QV01JTlRTVFMwX0NNUFVJRl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBDb21wYXJlIERvd24gRXZlbnQgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgY29tcGFyZSBkb3duIGV2ZW50IGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fRU5BQkxFX0NNUF9ET1dOX0lOVCh0aW1lcikgICAgICAgICAgICAgKCh0aW1lciktPlBXTUlOVEVOMCB8PSBUSU1FUl9QV01JTlRFTjBfQ01QRElFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgQ29tcGFyZSBEb3duIEV2ZW50IEludGVycnVwdAorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIHRoZSBjb21wYXJlIGRvd24gZXZlbnQgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9ESVNBQkxFX0NNUF9ET1dOX0lOVCh0aW1lcikgICAgICAgICAgICAoKHRpbWVyKS0+UFdNSU5URU4wICY9IH5USU1FUl9QV01JTlRFTjBfQ01QRElFTl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBDb21wYXJlIERvd24gRXZlbnQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgQ29tcGFyZSBkb3duIGV2ZW50IGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgICogQHJldHZhbCAgICAgMSAgIENvbXBhcmUgZG93biBldmVudCBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaW5kaWNhdGVzIGNvbXBhcmUgZG93biBldmVudCBvY2N1cnJlZCBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0dFVF9DTVBfRE9XTl9JTlRfRkxBRyh0aW1lcikgICAgICAgICAgICgoKHRpbWVyKS0+UFdNSU5UU1RTMCAmIFRJTUVSX1BXTUlOVFNUUzBfQ01QRElGX01zayk/IDEgOiAwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBDb21wYXJlIERvd24gRXZlbnQgSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGNsZWFycyBjb21wYXJlIGRvd24gZXZlbnQgaW50ZXJydXB0IGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0NMRUFSX0NNUF9ET1dOX0lOVF9GTEFHKHRpbWVyKSAgICAgICAgICgodGltZXIpLT5QV01JTlRTVFMwID0gVElNRVJfUFdNSU5UU1RTMF9DTVBESUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ291bnRlciBSZWFjaCBNYXhpbXVtIENvdW50IFN0YXR1cworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR2YWwgICAgIDAgICBUaW1lciBQV00gY291bnRlciBuZXZlciBjb3VudHMgdG8gbWF4aW11bSB2YWx1ZQorICAqIEByZXR2YWwgICAgIDEgICBUaW1lciBQV00gY291bnRlciBjb3VudHMgdG8gbWF4aW11bSB2YWx1ZSwgMHhGRkZGCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGluZGljYXRlcyBUaW1lciBQV00gY291bnRlciBoYXMgY291bnQgdG8gMHhGRkZGIG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFRQV01fR0VUX1JFQUNIX01BWF9DTlRfU1RBVFVTKHRpbWVyKSAgICAgICAgKCgodGltZXIpLT5QV01TVEFUVVMgJiBUSU1FUl9QV01TVEFUVVNfQ05UTUFYRl9Nc2spPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgQ291bnRlciBSZWFjaCBNYXhpbXVtIENvdW50IFN0YXR1cworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gY2xlYXJzIHJlYWNoIG1heGltdW0gY291bnQgc3RhdHVzLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9DTEVBUl9SRUFDSF9NQVhfQ05UX1NUQVRVUyh0aW1lcikgICAgICAoKHRpbWVyKS0+UFdNU1RBVFVTID0gVElNRVJfUFdNU1RBVFVTX0NOVE1BWEZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgVHJpZ2dlciBBREMgU3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgICAgIFRyaWdnZXIgQURDIHN0YXJ0IGNvbnZlcnNpb24gaXMgbm90IG9jY3VyCisgICogQHJldHZhbCAgICAgMSAgICAgICBTcGVjaWZpZWQgY291bnRlciBjb21wYXJlIGV2ZW50IGhhcyB0cmlnZ2VyIEFEQyBzdGFydCBjb252ZXJzaW9uCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gaW5kaWNhdGUgUFdNIGNvdW50ZXIgY29tcGFyZSBldmVudCBoYXMgdHJpZ2dlcmVkIEFEQyBzdGFydCBjb252ZXJzaW9uLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9HRVRfVFJHX0FEQ19TVEFUVVModGltZXIpICAgICAgICAgICAgICAoKCh0aW1lciktPlBXTVNUQVRVUyAmIFRJTUVSX1BXTVNUQVRVU19FQURDVFJHRl9Nc2spPyAxIDogMCkKKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgVHJpZ2dlciBBREMgU3RhdHVzCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY2xlYXIgUFdNIGNvdW50ZXIgY29tcGFyZSBldmVudCB0cmlnZ2VyIEFEQyBzdGF0dXMuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX0NMRUFSX1RSR19BRENfU1RBVFVTKHRpbWVyKSAgICAgICAgICAgICgodGltZXIpLT5QV01TVEFUVVMgPSBUSU1FUl9QV01TVEFUVVNfRUFEQ1RSR0ZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQnJha2UgRXZlbnQgYXQgQnJha2UgUGluIEhpZ2ggb3IgTG93LXRvLUhpZ2gKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IGRldGVjdCBicmFrZSBldmVudCB3aGVuIGV4dGVybmFsIGJyYWtlIHBpbiBhdCBoaWdoIGxldmVsIG9yIHRyYW5zZmVyIGZyb20gbG93IHRvIGhpZ2guCisgICAgICAgIFRoZSBkZWZhdWx0IGJyYWtlIHBpbiBkZXRlY3Rpb24gaXMgaGlnaCBsZXZlbCBvciBmcm9tIGxvdyB0byBoaWdoLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9TRVRfQlJBS0VfUElOX0hJR0hfREVURUNUKHRpbWVyKSAgICAgICAoKHRpbWVyKS0+UFdNQk5GICY9IH5USU1FUl9QV01CTkZfQlJLUElOVl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBCcmFrZSBFdmVudCBhdCBCcmFrZSBQaW4gTG93IG9yIEhpZ2gtdG8tTG93CisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBkZXRlY3QgYnJha2UgZXZlbnQgd2hlbiBleHRlcm5hbCBicmFrZSBwaW4gYXQgbG93IGxldmVsIG9yIHRyYW5zZmVyIGZyb20gaGlnaCB0byBsb3cuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBUUFdNX1NFVF9CUkFLRV9QSU5fTE9XX0RFVEVDVCh0aW1lcikgICAgICAgICgodGltZXIpLT5QV01CTkYgfD0gVElNRVJfUFdNQk5GX0JSS1BJTlZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgRXh0ZXJuYWwgQnJha2UgUGluIFNvdXJjZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICBwaW4gICAgICAgICBUaGUgZXh0ZXJuYWwgYnJha2UgcGluIHNvdXJjZSwgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RNX0JSQUtFMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVE1fQlJBS0UxCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UTV9CUkFLRTIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RNX0JSQUtFMworICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNldCBkZXRlY3QgYnJha2UgZXZlbnQgd2hlbiBleHRlcm5hbCBicmFrZSBwaW4gYXQgaGlnaCBsZXZlbCBvciB0cmFuc2ZlciBmcm9tIGxvdyB0byBoaWdoLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVFBXTV9TRVRfQlJBS0VfUElOX1NPVVJDRSh0aW1lciwgcGluKSAgICAgICAoKHRpbWVyKS0+UFdNQk5GID0gKCh0aW1lciktPlBXTUJORiAmIH5USU1FUl9QV01CTkZfQktQSU5TUkNfTXNrKSB8ICgocGluKTw8VElNRVJfUFdNQk5GX0JLUElOU1JDX1BvcykpCisKKwordm9pZCBUUFdNX1NldENvdW50ZXJDbG9ja1NvdXJjZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyQ250Q2xrU3JjKTsKK3VpbnQzMl90IFRQV01fQ29uZmlnT3V0cHV0RnJlcUFuZER1dHkoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkZyZXF1ZW5jeSwgdWludDMyX3QgdTMyRHV0eUN5Y2xlKTsKK3ZvaWQgVFBXTV9FbmFibGVEZWFkVGltZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyRFRDb3VudCk7Cit2b2lkIFRQV01fRW5hYmxlRGVhZFRpbWVXaXRoUHJlc2NhbGUoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkRUQ291bnQpOwordm9pZCBUUFdNX0Rpc2FibGVEZWFkVGltZShUSU1FUl9UICp0aW1lcik7Cit2b2lkIFRQV01fRW5hYmxlQ291bnRlcihUSU1FUl9UICp0aW1lcik7Cit2b2lkIFRQV01fRGlzYWJsZUNvdW50ZXIoVElNRVJfVCAqdGltZXIpOwordm9pZCBUUFdNX0VuYWJsZVRyaWdnZXJBREMoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkNvbmRpdGlvbik7Cit2b2lkIFRQV01fRGlzYWJsZVRyaWdnZXJBREMoVElNRVJfVCAqdGltZXIpOwordm9pZCBUUFdNX0VuYWJsZUZhdWx0QnJha2UoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkNIMExldmVsLCB1aW50MzJfdCB1MzJDSDFMZXZlbCwgdWludDMyX3QgdTMyQnJha2VTb3VyY2UpOwordm9pZCBUUFdNX0VuYWJsZUZhdWx0QnJha2VJbnQoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkludFNvdXJjZSk7Cit2b2lkIFRQV01fRGlzYWJsZUZhdWx0QnJha2VJbnQoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkludFNvdXJjZSk7Cit1aW50MzJfdCBUUFdNX0dldEZhdWx0QnJha2VJbnRGbGFnKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJJbnRTb3VyY2UpOwordm9pZCBUUFdNX0NsZWFyRmF1bHRCcmFrZUludEZsYWcoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkludFNvdXJjZSk7Cit2b2lkIFRQV01fU2V0TG9hZE1vZGUoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkxvYWRNb2RlKTsKK3ZvaWQgVFBXTV9FbmFibGVCcmFrZVBpbkRlYm91bmNlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJCcmFrZVBpblNyYywgdWludDMyX3QgdTMyRGVib3VuY2VDbnQsIHVpbnQzMl90IHUzMkNsa1NyY1NlbCk7Cit2b2lkIFRQV01fRGlzYWJsZUJyYWtlUGluRGVib3VuY2UoVElNRVJfVCAqdGltZXIpOwordm9pZCBUUFdNX0VuYWJsZUJyYWtlUGluSW52ZXJzZShUSU1FUl9UICp0aW1lcik7Cit2b2lkIFRQV01fRGlzYWJsZUJyYWtlUGluSW52ZXJzZShUSU1FUl9UICp0aW1lcik7Cit2b2lkIFRQV01fU2V0QnJha2VQaW5Tb3VyY2UoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkJyYWtlUGluTnVtKTsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBUSU1FUl9QV01fRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVElNRVJfUFdNX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19USU1FUl9QV01fSF9fICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VhcnQuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDBkMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdWFydC5oCkBAIC0wLDAgKzEsNDk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgVUFSVC5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgVUFSVCBJbnRlcmZhY2UgQ29udHJvbGxlciAoVUFSVCkgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VQVJUX0hfXworI2RlZmluZSBfX1VBUlRfSF9fCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVBUlRfRHJpdmVyIFVBUlQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVUFSVF9FWFBPUlRFRF9DT05TVEFOVFMgVUFSVCBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVBUlQgRklGTyBzaXplIGNvbnN0YW50cyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUFSVDBfRklGT19TSVpFIDE2VUwgLyohPCBVQVJUMCBzdXBwb3J0cyBzZXBhcmF0ZWQgcmVjZWl2ZS90cmFuc21pdCAxNi8xNiBieXRlcyBlbnRyeSBGSUZPICovCisjZGVmaW5lIFVBUlQxX0ZJRk9fU0laRSAxNlVMIC8qITwgVUFSVDEgc3VwcG9ydHMgc2VwYXJhdGVkIHJlY2VpdmUvdHJhbnNtaXQgMTYvMTYgYnl0ZXMgZW50cnkgRklGTyAqLworI2RlZmluZSBVQVJUMl9GSUZPX1NJWkUgMTZVTCAvKiE8IFVBUlQyIHN1cHBvcnRzIHNlcGFyYXRlZCByZWNlaXZlL3RyYW5zbWl0IDE2LzE2IGJ5dGVzIGVudHJ5IEZJRk8gKi8KKyNkZWZpbmUgVUFSVDNfRklGT19TSVpFIDE2VUwgLyohPCBVQVJUMyBzdXBwb3J0cyBzZXBhcmF0ZWQgcmVjZWl2ZS90cmFuc21pdCAxNi8xNiBieXRlcyBlbnRyeSBGSUZPICovCisjZGVmaW5lIFVBUlQ0X0ZJRk9fU0laRSAxNlVMIC8qITwgVUFSVDQgc3VwcG9ydHMgc2VwYXJhdGVkIHJlY2VpdmUvdHJhbnNtaXQgMTYvMTYgYnl0ZXMgZW50cnkgRklGTyAqLworI2RlZmluZSBVQVJUNV9GSUZPX1NJWkUgMTZVTCAvKiE8IFVBUlQ1IHN1cHBvcnRzIHNlcGFyYXRlZCByZWNlaXZlL3RyYW5zbWl0IDE2LzE2IGJ5dGVzIGVudHJ5IEZJRk8gKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVQVJUX0ZJRk8gY29uc3RhbnRzIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVBUlRfRklGT19SRklUTF8xQllURSAgICAgICgweDBVTCA8PCBVQVJUX0ZJRk9fUkZJVExfUG9zKSAgIC8qITwgVUFSVF9GSUZPIHNldHRpbmcgdG8gc2V0IFJYIEZJRk8gVHJpZ2dlciBMZXZlbCB0byAxIGJ5dGUgKi8KKyNkZWZpbmUgVUFSVF9GSUZPX1JGSVRMXzRCWVRFUyAgICAgKDB4MVVMIDw8IFVBUlRfRklGT19SRklUTF9Qb3MpICAgLyohPCBVQVJUX0ZJRk8gc2V0dGluZyB0byBzZXQgUlggRklGTyBUcmlnZ2VyIExldmVsIHRvIDQgYnl0ZXMgKi8KKyNkZWZpbmUgVUFSVF9GSUZPX1JGSVRMXzhCWVRFUyAgICAgKDB4MlVMIDw8IFVBUlRfRklGT19SRklUTF9Qb3MpICAgLyohPCBVQVJUX0ZJRk8gc2V0dGluZyB0byBzZXQgUlggRklGTyBUcmlnZ2VyIExldmVsIHRvIDggYnl0ZXMgKi8KKyNkZWZpbmUgVUFSVF9GSUZPX1JGSVRMXzE0QllURVMgICAgKDB4M1VMIDw8IFVBUlRfRklGT19SRklUTF9Qb3MpICAgLyohPCBVQVJUX0ZJRk8gc2V0dGluZyB0byBzZXQgUlggRklGTyBUcmlnZ2VyIExldmVsIHRvIDE0IGJ5dGVzICovCisKKyNkZWZpbmUgVUFSVF9GSUZPX1JUU1RSR0xWXzFCWVRFICAgICAgKDB4MFVMIDw8IFVBUlRfRklGT19SVFNUUkdMVl9Qb3MpICAvKiE8IFVBUlRfRklGTyBzZXR0aW5nIHRvIHNldCBSVFMgVHJpZ2dlciBMZXZlbCB0byAxIGJ5dGUgKi8KKyNkZWZpbmUgVUFSVF9GSUZPX1JUU1RSR0xWXzRCWVRFUyAgICAgKDB4MVVMIDw8IFVBUlRfRklGT19SVFNUUkdMVl9Qb3MpICAvKiE8IFVBUlRfRklGTyBzZXR0aW5nIHRvIHNldCBSVFMgVHJpZ2dlciBMZXZlbCB0byA0IGJ5dGVzICovCisjZGVmaW5lIFVBUlRfRklGT19SVFNUUkdMVl84QllURVMgICAgICgweDJVTCA8PCBVQVJUX0ZJRk9fUlRTVFJHTFZfUG9zKSAgLyohPCBVQVJUX0ZJRk8gc2V0dGluZyB0byBzZXQgUlRTIFRyaWdnZXIgTGV2ZWwgdG8gOCBieXRlcyAqLworI2RlZmluZSBVQVJUX0ZJRk9fUlRTVFJHTFZfMTRCWVRFUyAgICAoMHgzVUwgPDwgVUFSVF9GSUZPX1JUU1RSR0xWX1BvcykgIC8qITwgVUFSVF9GSUZPIHNldHRpbmcgdG8gc2V0IFJUUyBUcmlnZ2VyIExldmVsIHRvIDE0IGJ5dGVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVBUlRfTElORSBjb25zdGFudHMgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUFSVF9XT1JEX0xFTl81ICAgICAoMFVMKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIHRvIHNldCBVQVJUIHdvcmQgbGVuZ3RoIHRvIDUgYml0cyAqLworI2RlZmluZSBVQVJUX1dPUkRfTEVOXzYgICAgICgxVUwpIC8qITwgVUFSVF9MSU5FIHNldHRpbmcgdG8gc2V0IFVBUlQgd29yZCBsZW5ndGggdG8gNiBiaXRzICovCisjZGVmaW5lIFVBUlRfV09SRF9MRU5fNyAgICAgKDJVTCkgLyohPCBVQVJUX0xJTkUgc2V0dGluZyB0byBzZXQgVUFSVCB3b3JkIGxlbmd0aCB0byA3IGJpdHMgKi8KKyNkZWZpbmUgVUFSVF9XT1JEX0xFTl84ICAgICAoM1VMKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIHRvIHNldCBVQVJUIHdvcmQgbGVuZ3RoIHRvIDggYml0cyAqLworCisjZGVmaW5lIFVBUlRfUEFSSVRZX05PTkUgICAgKDB4MFVMIDw8IFVBUlRfTElORV9QQkVfUG9zKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIHRvIHNldCBVQVJUIGFzIG5vIHBhcml0eSAgICovCisjZGVmaW5lIFVBUlRfUEFSSVRZX09ERCAgICAgKDB4MVVMIDw8IFVBUlRfTElORV9QQkVfUG9zKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIHRvIHNldCBVQVJUIGFzIG9kZCBwYXJpdHkgICovCisjZGVmaW5lIFVBUlRfUEFSSVRZX0VWRU4gICAgKDB4M1VMIDw8IFVBUlRfTElORV9QQkVfUG9zKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIHRvIHNldCBVQVJUIGFzIGV2ZW4gcGFyaXR5ICovCisjZGVmaW5lIFVBUlRfUEFSSVRZX01BUksgICAgKDB4NVVMIDw8IFVBUlRfTElORV9QQkVfUG9zKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIHRvIGtlZXAgcGFyaXR5IGJpdCBhcyAnMScgICovCisjZGVmaW5lIFVBUlRfUEFSSVRZX1NQQUNFICAgKDB4N1VMIDw8IFVBUlRfTElORV9QQkVfUG9zKSAvKiE8IFVBUlRfTElORSBzZXR0aW5nIHRvIGtlZXAgcGFyaXR5IGJpdCBhcyAnMCcgICovCisKKyNkZWZpbmUgVUFSVF9TVE9QX0JJVF8xICAgICAoMHgwVUwgPDwgVUFSVF9MSU5FX05TQl9Qb3MpIC8qITwgVUFSVF9MSU5FIHNldHRpbmcgZm9yIG9uZSBzdG9wIGJpdCAqLworI2RlZmluZSBVQVJUX1NUT1BfQklUXzFfNSAgICgweDFVTCA8PCBVQVJUX0xJTkVfTlNCX1BvcykgLyohPCBVQVJUX0xJTkUgc2V0dGluZyBmb3IgMS41IHN0b3AgYml0IHdoZW4gNS1iaXQgd29yZCBsZW5ndGggKi8KKyNkZWZpbmUgVUFSVF9TVE9QX0JJVF8yICAgICAoMHgxVUwgPDwgVUFSVF9MSU5FX05TQl9Qb3MpIC8qITwgVUFSVF9MSU5FIHNldHRpbmcgZm9yIHR3byBzdG9wIGJpdCB3aGVuIDYsIDcsIDgtYml0IHdvcmQgbGVuZ3RoICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVUFSVCBSVFMgQUNUSVZFIExFVkVMIGNvbnN0YW50cyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVQVJUX1JUU19JU19MT1dfTEVWX0FDVElWRSAgICgweDFVTCA8PCBVQVJUX01PREVNX1JUU0FDVExWX1BvcykgLyohPCBTZXQgUlRTIGlzIExvdyBMZXZlbCBBY3RpdmUgKi8KKyNkZWZpbmUgVUFSVF9SVFNfSVNfSElHSF9MRVZfQUNUSVZFICAoMHgwVUwgPDwgVUFSVF9NT0RFTV9SVFNBQ1RMVl9Qb3MpIC8qITwgU2V0IFJUUyBpcyBIaWdoIExldmVsIEFjdGl2ZSAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVBUlRfSVJEQSBjb25zdGFudHMgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUFSVF9JUkRBX1RYRU4gICAgICAoMHgxVUwgPDwgVUFSVF9JUkRBX1RYRU5fUG9zKSAvKiE8IFNldCBJckRBIGZ1bmN0aW9uIFR4IG1vZGUgKi8KKyNkZWZpbmUgVUFSVF9JUkRBX1JYRU4gICAgICAoMHgwVUwgPDwgVUFSVF9JUkRBX1RYRU5fUG9zKSAvKiE8IFNldCBJckRBIGZ1bmN0aW9uIFJ4IG1vZGUgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVQVJUX0ZVTkNTRUwgY29uc3RhbnRzIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVBUlRfRlVOQ1NFTF9VQVJUICAoMHgwVUwgPDwgVUFSVF9GVU5DU0VMX0ZVTkNTRUxfUG9zKSAvKiE8IFVBUlRfRlVOQ1NFTCBzZXR0aW5nIHRvIHNldCBVQVJUIEZ1bmN0aW9uIChEZWZhdWx0KSAqLworI2RlZmluZSBVQVJUX0ZVTkNTRUxfTElOICAgKDB4MVVMIDw8IFVBUlRfRlVOQ1NFTF9GVU5DU0VMX1BvcykgLyohPCBVQVJUX0ZVTkNTRUwgc2V0dGluZyB0byBzZXQgTElOIEZ1bmN0aW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVF9GVU5DU0VMX0lyREEgICgweDJVTCA8PCBVQVJUX0ZVTkNTRUxfRlVOQ1NFTF9Qb3MpIC8qITwgVUFSVF9GVU5DU0VMIHNldHRpbmcgdG8gc2V0IElyREEgRnVuY3Rpb24gICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfRlVOQ1NFTF9SUzQ4NSAoMHgzVUwgPDwgVUFSVF9GVU5DU0VMX0ZVTkNTRUxfUG9zKSAvKiE8IFVBUlRfRlVOQ1NFTCBzZXR0aW5nIHRvIHNldCBSUzQ4NSBGdW5jdGlvbiAgICAgICAgICAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVBUlRfTElOQ1RMIGNvbnN0YW50cyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfQlJLRkwoeCkgICAgKCgoeCktMVVMKSA8PCBVQVJUX0xJTkNUTF9CUktGTF9Qb3MpICAvKiE8IFVBUlRfTElOQ1RMIHNldHRpbmcgdG8gc2V0IExJTiBCcmVhayBGaWVsZCBMZW5ndGgsIHggPSAxMCB+IDE1LCBkZWZhdWx0IHZhbHVlIGlzIDEyICovCisjZGVmaW5lIFVBUlRfTElOQ1RMX0JTTCh4KSAgICAgICgoKHgpLTFVTCkgPDwgVUFSVF9MSU5DVExfQlNMX1BvcykgICAgLyohPCBVQVJUX0xJTkNUTCBzZXR0aW5nIHRvIHNldCBMSU4gQnJlYWsvU3luYyBEZWxpbWl0ZXIgTGVuZ3RoLCB4ID0gMSB+IDQgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfSFNFTF9CUkVBSyAgICAgICAgICAgICAoMHgwVUwgPDwgVUFSVF9MSU5DVExfSFNFTF9Qb3MpICAgIC8qITwgVUFSVF9MSU5DVEwgc2V0dGluZyB0byBzZXQgTElOIEhlYWRlciBTZWxlY3QgdG8gYnJlYWsgZmllbGQgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfSFNFTF9CUkVBS19TWU5DICAgICAgICAoMHgxVUwgPDwgVUFSVF9MSU5DVExfSFNFTF9Qb3MpICAgIC8qITwgVUFSVF9MSU5DVEwgc2V0dGluZyB0byBzZXQgTElOIEhlYWRlciBTZWxlY3QgdG8gYnJlYWsgZmllbGQgYW5kIHN5bmMgZmllbGQgKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfSFNFTF9CUkVBS19TWU5DX0lEICAgICAoMHgyVUwgPDwgVUFSVF9MSU5DVExfSFNFTF9Qb3MpICAgIC8qITwgVUFSVF9MSU5DVEwgc2V0dGluZyB0byBzZXQgTElOIEhlYWRlciBTZWxlY3QgdG8gYnJlYWsgZmllbGQsIHN5bmMgZmllbGQgYW5kIElEIGZpZWxkKi8KKyNkZWZpbmUgVUFSVF9MSU5DVExfUElEKHgpICAgICAgKCh4KSA8PCBVQVJUX0xJTkNUTF9QSURfUG9zKSAgICAgICAvKiE8IFVBUlRfTElOQ1RMIHNldHRpbmcgdG8gc2V0IExJTiBQSUQgdmFsdWUgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVQVJUIEJBVURSQVRFIE1PREUgY29uc3RhbnRzIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVBUlRfQkFVRF9NT0RFMCAgICAgKDBVTCkgLyohPCBTZXQgVUFSVCBCYXVkcmF0ZSBNb2RlIGlzIE1vZGUwICovCisjZGVmaW5lIFVBUlRfQkFVRF9NT0RFMiAgICAgKFVBUlRfQkFVRF9CQVVETTFfTXNrIHwgVUFSVF9CQVVEX0JBVURNMF9Nc2spIC8qITwgU2V0IFVBUlQgQmF1ZHJhdGUgTW9kZSBpcyBNb2RlMiAqLworCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVQVJUX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBVQVJUX0VYUE9SVEVEX0ZVTkNUSU9OUyBVQVJUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgQ2FsY3VsYXRlIFVBUlQgYmF1ZHJhdGUgbW9kZTAgZGl2aWRlcgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyU3JjRnJlcSAgICAgIFVBUlQgY2xvY2sgZnJlcXVlbmN5CisgKiAgICBAcGFyYW1baW5dICAgIHUzMkJhdWRSYXRlICAgICBCYXVkcmF0ZSBvZiBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR1cm4gICAgICAgVUFSVCBiYXVkcmF0ZSBtb2RlMCBkaXZpZGVyCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGNhbGN1bGF0ZSBVQVJUIGJhdWRyYXRlIG1vZGUwIGRpdmlkZXIuCisgKi8KKyNkZWZpbmUgVUFSVF9CQVVEX01PREUwX0RJVklERVIodTMyU3JjRnJlcSwgdTMyQmF1ZFJhdGUpICAgICgoKCh1MzJTcmNGcmVxKSArICgodTMyQmF1ZFJhdGUpKjh1bCkpIC8gKHUzMkJhdWRSYXRlKSA+PiA0dWwpLTJ1bCkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgQ2FsY3VsYXRlIFVBUlQgYmF1ZHJhdGUgbW9kZTIgZGl2aWRlcgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyU3JjRnJlcSAgICAgIFVBUlQgY2xvY2sgZnJlcXVlbmN5CisgKiAgICBAcGFyYW1baW5dICAgIHUzMkJhdWRSYXRlICAgICBCYXVkcmF0ZSBvZiBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR1cm4gICAgICAgVUFSVCBiYXVkcmF0ZSBtb2RlMiBkaXZpZGVyCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGNhbGN1bGF0ZSBVQVJUIGJhdWRyYXRlIG1vZGUyIGRpdmlkZXIuCisgKi8KKyNkZWZpbmUgVUFSVF9CQVVEX01PREUyX0RJVklERVIodTMyU3JjRnJlcSwgdTMyQmF1ZFJhdGUpICAgICgoKCh1MzJTcmNGcmVxKSArICgodTMyQmF1ZFJhdGUpLzJ1bCkpIC8gKHUzMkJhdWRSYXRlKSktMnVsKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBXcml0ZSBVQVJUIGRhdGEKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1OERhdGEgIERhdGEgYnl0ZSB0byB0cmFuc21pdC4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gd3JpdGUgRGF0YSB0byBUeCBkYXRhIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFVBUlRfV1JJVEUodWFydCwgdThEYXRhKSAgICAoKHVhcnQpLT5EQVQgPSAodThEYXRhKSkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgUmVhZCBVQVJUIGRhdGEKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR1cm4gICAgICAgVGhlIG9sZGVzdCBkYXRhIGJ5dGUgaW4gUlggRklGTy4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gcmVhZCBSeCBkYXRhIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFVBUlRfUkVBRCh1YXJ0KSAgICAoKHVhcnQpLT5EQVQpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBUeCBlbXB0eQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgVHggRklGTyBpcyBub3QgZW1wdHkKKyAqICAgIEByZXR2YWwgICAgICAgPj0xIFR4IEZJRk8gaXMgZW1wdHkKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IFRyYW5zbWl0dGVyIEZJRk8gZW1wdHkgcmVnaXN0ZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUgVUFSVF9HRVRfVFhfRU1QVFkodWFydCkgICAgKCh1YXJ0KS0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19UWEVNUFRZX01zaykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IFJ4IGVtcHR5CisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICBSeCBGSUZPIGlzIG5vdCBlbXB0eQorICogICAgQHJldHZhbCAgICAgICA+PTEgUnggRklGTyBpcyBlbXB0eQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBnZXQgUmVjZWl2ZXIgRklGTyBlbXB0eSByZWdpc3RlciB2YWx1ZS4KKyAqLworI2RlZmluZSBVQVJUX0dFVF9SWF9FTVBUWSh1YXJ0KSAgICAoKHVhcnQpLT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1JYRU1QVFlfTXNrKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDaGVjayBzcGVjaWZpZWQgdWFydCBwb3J0IHRyYW5zbWlzc2lvbiBpcyBvdmVyLgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAwIFR4IHRyYW5zbWlzc2lvbiBpcyBub3Qgb3ZlcgorICogICAgQHJldHZhbCAgICAgICAxIFR4IHRyYW5zbWlzc2lvbiBpcyBvdmVyCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIHJldHVybiBUcmFuc21pdHRlciBFbXB0eSBGbGFnIHJlZ2lzdGVyIGJpdCB2YWx1ZS4KKyAqICAgICAgICAgICAgICAgICAgSXQgaW5kaWNhdGVzIGlmIHNwZWNpZmllZCB1YXJ0IHBvcnQgdHJhbnNtaXNzaW9uIGlzIG92ZXIgbm9yIG5vdC4KKyAqLworI2RlZmluZSBVQVJUX0lTX1RYX0VNUFRZKHVhcnQpICAgICgoKHVhcnQpLT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1RYRU1QVFlGX01zaykgPj4gVUFSVF9GSUZPU1RTX1RYRU1QVFlGX1BvcykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgV2FpdCBzcGVjaWZpZWQgdWFydCBwb3J0IHRyYW5zbWlzc2lvbiBpcyBvdmVyCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gd2FpdCBzcGVjaWZpZWQgdWFydCBwb3J0IHRyYW5zbWlzc2lvbiBpcyBvdmVyLgorICovCisjZGVmaW5lIFVBUlRfV0FJVF9UWF9FTVBUWSh1YXJ0KSAgICB3aGlsZSghKCgoKHVhcnQpLT5GSUZPU1RTKSAmIFVBUlRfRklGT1NUU19UWEVNUFRZRl9Nc2spID4+IFVBUlRfRklGT1NUU19UWEVNUFRZRl9Qb3MpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDaGVjayBSWCBpcyByZWFkeSBvciBub3QKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBSWCBGSUZPIGlzIGxlc3MgdGhhbiB0aGUgUkZJVEwKKyAqICAgIEByZXR2YWwgICAgICAgMSBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBSWCBGSUZPIGVxdWFscyBvciBsYXJnZXIgdGhhbiBSRklUTAorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBjaGVjayByZWNlaXZlIGRhdGEgYXZhaWxhYmxlIGludGVycnVwdCBmbGFnIGlzIHNldCBvciBub3QuCisgKi8KKyNkZWZpbmUgVUFSVF9JU19SWF9SRUFEWSh1YXJ0KSAgICAoKCh1YXJ0KS0+SU5UU1RTICYgVUFSVF9JTlRTVFNfUkRBSUZfTXNrKT4+VUFSVF9JTlRTVFNfUkRBSUZfUG9zKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDaGVjayBUWCBGSUZPIGlzIGZ1bGwgb3Igbm90CisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDEgVFggRklGTyBpcyBmdWxsCisgKiAgICBAcmV0dmFsICAgICAgIDAgVFggRklGTyBpcyBub3QgZnVsbAorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBjaGVjayBUWCBGSUZPIGlzIGZ1bGwgb3Igbm90LgorICovCisjZGVmaW5lIFVBUlRfSVNfVFhfRlVMTCh1YXJ0KSAgICAoKCh1YXJ0KS0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19UWEZVTExfTXNrKT4+VUFSVF9GSUZPU1RTX1RYRlVMTF9Qb3MpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENoZWNrIFJYIEZJRk8gaXMgZnVsbCBvciBub3QKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMSBSWCBGSUZPIGlzIGZ1bGwKKyAqICAgIEByZXR2YWwgICAgICAgMCBSWCBGSUZPIGlzIG5vdCBmdWxsCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGNoZWNrIFJYIEZJRk8gaXMgZnVsbCBvciBub3QuCisgKi8KKyNkZWZpbmUgVUFSVF9JU19SWF9GVUxMKHVhcnQpICAgICgoKHVhcnQpLT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1JYRlVMTF9Nc2spPj5VQVJUX0ZJRk9TVFNfUlhGVUxMX1BvcykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IFR4IGZ1bGwgcmVnaXN0ZXIgdmFsdWUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCAgIFR4IEZJRk8gaXMgbm90IGZ1bGwuCisgKiAgICBAcmV0dmFsICAgICAgID49MSBUeCBGSUZPIGlzIGZ1bGwuCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGdldCBUeCBmdWxsIHJlZ2lzdGVyIHZhbHVlLgorICovCisjZGVmaW5lIFVBUlRfR0VUX1RYX0ZVTEwodWFydCkgICAgKCh1YXJ0KS0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19UWEZVTExfTXNrKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBHZXQgUnggZnVsbCByZWdpc3RlciB2YWx1ZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgUnggRklGTyBpcyBub3QgZnVsbC4KKyAqICAgIEByZXR2YWwgICAgICAgPj0xIFJ4IEZJRk8gaXMgZnVsbC4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IFJ4IGZ1bGwgcmVnaXN0ZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUgVUFSVF9HRVRfUlhfRlVMTCh1YXJ0KSAgICAoKHVhcnQpLT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1JYRlVMTF9Nc2spCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEVuYWJsZSBzcGVjaWZpZWQgVUFSVCBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyZUludFNlbCAgSW50ZXJydXB0IHR5cGUgc2VsZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1RYRU5ESUVOX01zayAgIDogVHJhbnNtaXR0ZXIgZW1wdHkgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX0FCUklFTl9Nc2sgICAgIDogQXV0byBiYXVkIHJhdGUgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX0xJTklFTl9Nc2sgICAgIDogTGluIGJ1cyBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fV0tJRU5fTXNrICAgICAgOiBXYWtlLXVwIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9CVUZFUlJJRU5fTXNrICA6IEJ1ZmZlciBFcnJvciBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUlhUT0lFTl9Nc2sgICAgOiBSeCB0aW1lLW91dCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fTU9ERU1JRU5fTXNrICAgOiBNb2RlbSBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUkxTSUVOX01zayAgICAgOiBSeCBMaW5lIHN0YXR1cyBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fVEhSRUlFTl9Nc2sgICAgOiBUeCBlbXB0eSBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUkRBSUVOX01zayAgICAgOiBSeCByZWFkeSBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZW5hYmxlIHNwZWNpZmllZCBVQVJUIGludGVycnVwdC4KKyAqLworI2RlZmluZSBVQVJUX0VOQUJMRV9JTlQodWFydCwgdTMyZUludFNlbCkgICAgKCh1YXJ0KS0+SU5URU4gfD0gKHUzMmVJbnRTZWwpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBEaXNhYmxlIHNwZWNpZmllZCBVQVJUIGludGVycnVwdAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1MzJlSW50U2VsICBJbnRlcnJ1cHQgdHlwZSBzZWxlY3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fVFhFTkRJRU5fTXNrICAgOiBUcmFuc21pdHRlciBFbXB0eSBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fQUJSSUVOX01zayAgICAgOiBBdXRvLWJhdWQgUmF0ZSBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fTElOSUVOX01zayAgICAgOiBMaW4gQnVzIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9XS0lFTl9Nc2sgICAgICA6IFdha2UtdXAgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX0JVRkVSUklFTl9Nc2sgIDogQnVmZmVyIEVycm9yIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9SWFRPSUVOX01zayAgICA6IFJ4IFRpbWUtb3V0IEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9NT0RFTUlFTl9Nc2sgICA6IE1PREVNIFN0YXR1cyBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUkxTSUVOX01zayAgICAgOiBSZWNlaXZlIExpbmUgU3RhdHVzIEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9USFJFSUVOX01zayAgICA6IFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JEQUlFTl9Nc2sgICAgIDogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZW5hYmxlIHNwZWNpZmllZCBVQVJUIGludGVycnVwdC4KKyAqLworI2RlZmluZSBVQVJUX0RJU0FCTEVfSU5UKHVhcnQsIHUzMmVJbnRTZWwpICAgICgodWFydCktPklOVEVOICY9IH4gKHUzMmVJbnRTZWwpKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBHZXQgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnL3N0YXR1cworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyZUludFR5cGVGbGFnIEludGVycnVwdCBUeXBlIEZsYWcsIHNob3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0hXQlVGRUlOVF9Nc2sgOiBQRE1BIE1vZGUgQnVmZmVyIEVycm9yIEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19IV1RPSU5UX01zayAgIDogUERNQSBNb2RlIFJ4IFRpbWUtb3V0IEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19IV01PRElOVF9Nc2sgIDogUERNQSBNb2RlIE1PREVNIFN0YXR1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfSFdSTFNJTlRfTXNrICA6IFBETUEgTW9kZSBSZWNlaXZlIExpbmUgU3RhdHVzIEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19IV0JVRkVJRl9Nc2sgIDogUERNQSBNb2RlIEJ1ZmZlciBFcnJvciBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0hXVE9JRl9Nc2sgICAgOiBQRE1BIE1vZGUgVGltZS1vdXQgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19IV01PRElGX01zayAgIDogUERNQSBNb2RlIE1PREVNIFN0YXR1cyBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0hXUkxTSUZfTXNrICAgOiBQRE1BIE1vZGUgUmVjZWl2ZSBMaW5lIFN0YXR1cyBGbGFnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfQUJSSU5UX01zayAgICA6IEF1dG8tYmF1ZCBSYXRlIEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19UWEVORElOVF9Nc2sgIDogVHJhbnNtaXR0ZXIgRW1wdHkgSW50ZXJydXB0IEluZGljYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0xJTklOVF9Nc2sgICAgOiBMSU4gQnVzIEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19XS0lOVF9Nc2sgICAgIDogV2FrZS11cCBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfQlVGRVJSSU5UX01zayA6IEJ1ZmZlciBFcnJvciBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfUlhUT0lOVF9Nc2sgICA6IFJ4IFRpbWUtb3V0IEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19NT0RFTUlOVF9Nc2sgIDogTW9kZW0gU3RhdHVzIEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19STFNJTlRfTXNrICAgIDogUmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfVEhSRUlOVF9Nc2sgICA6IFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgSW50ZXJydXB0IEluZGljYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX1JEQUlOVF9Nc2sgICAgOiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIEludGVycnVwdCBJbmRpY2F0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19UWEVORElGX01zayAgIDogVHJhbnNtaXR0ZXIgRW1wdHkgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19MSU5JRl9Nc2sgICAgIDogTElOIEJ1cyBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX1dLSUZfTXNrICAgICAgOiBXYWtlLXVwIEludGVycnVwdCBGbGFnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfQlVGRVJSSUZfTXNrICA6IEJ1ZmZlciBFcnJvciBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX1JYVE9JRl9Nc2sgICAgOiBSeCBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX01PREVNSUZfTXNrICAgOiBNT0RFTSBTdGF0dXMgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19STFNJRl9Nc2sgICAgIDogUmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX1RIUkVJRl9Nc2sgICAgOiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5IEludGVycnVwdCBGbGFnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfUkRBSUZfTXNrICAgICA6IFJlY2VpdmUgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0IEZsYWcKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgVGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgaXMgbm90IGhhcHBlbmVkLgorICogICAgICAgICAgICAgICAgICAxIFRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IGlzIGhhcHBlbmVkLgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBnZXQgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnIG9yIGludGVycnVwdCBpbmRpY2F0b3Igc3RhdHVzLgorICovCisjZGVmaW5lIFVBUlRfR0VUX0lOVF9GTEFHKHVhcnQsdTMyZUludFR5cGVGbGFnKSAgICAoKCh1YXJ0KS0+SU5UU1RTICYgKHUzMmVJbnRUeXBlRmxhZykpPzE6MCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogc3RhdGljIGlubGluZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVjbGFyZSB0aGVzZSBpbmxpbmUgZnVuY3Rpb25zIGhlcmUgdG8gYXZvaWQgTUlTUkEgQyAyMDA0IHJ1bGUgOC4xIGVycm9yICovCitzdGF0aWMgX19JTkxJTkUgdm9pZCBVQVJUX0NMRUFSX1JUUyhVQVJUX1QqIHVhcnQpOworc3RhdGljIF9fSU5MSU5FIHZvaWQgVUFSVF9TRVRfUlRTKFVBUlRfVCogdWFydCk7CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFNldCBSVFMgcGluIHRvIGxvdworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIHNldCBSVFMgcGluIHRvIGxvdy4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVUFSVF9DTEVBUl9SVFMoVUFSVF9UKiB1YXJ0KQoreworICAgIHVhcnQtPk1PREVNIHw9IFVBUlRfTU9ERU1fUlRTQUNUTFZfTXNrOworICAgIHVhcnQtPk1PREVNICY9IH5VQVJUX01PREVNX1JUU19Nc2s7Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFNldCBSVFMgcGluIHRvIGhpZ2gKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBzZXQgUlRTIHBpbiB0byBoaWdoLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBVQVJUX1NFVF9SVFMoVUFSVF9UKiB1YXJ0KQoreworICAgIHVhcnQtPk1PREVNIHw9IFVBUlRfTU9ERU1fUlRTQUNUTFZfTXNrIHwgVUFSVF9NT0RFTV9SVFNfTXNrOworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDbGVhciBSUy00ODUgQWRkcmVzcyBCeXRlIERldGVjdGlvbiBGbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gY2xlYXIgUlMtNDg1IGFkZHJlc3MgYnl0ZSBkZXRlY3Rpb24gZmxhZy4KKyAqLworI2RlZmluZSBVQVJUX1JTNDg1X0NMRUFSX0FERFJfRkxBRyh1YXJ0KSAgICAoKHVhcnQpLT5GSUZPU1RTID0gVUFSVF9GSUZPU1RTX0FERFJERVRGX01zaykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IFJTLTQ4NSBBZGRyZXNzIEJ5dGUgRGV0ZWN0aW9uIEZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCBSZWNlaXZlciBkZXRlY3RzIGEgZGF0YSB0aGF0IGlzIG5vdCBhbiBhZGRyZXNzIGJpdC4KKyAqICAgIEByZXR2YWwgICAgICAgMSBSZWNlaXZlciBkZXRlY3RzIGEgZGF0YSB0aGF0IGlzIGFuIGFkZHJlc3MgYml0LgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBnZXQgUlMtNDg1IGFkZHJlc3MgYnl0ZSBkZXRlY3Rpb24gZmxhZy4KKyAqLworI2RlZmluZSBVQVJUX1JTNDg1X0dFVF9BRERSX0ZMQUcodWFydCkgICAgKCgodWFydCktPkZJRk9TVFMgICYgVUFSVF9GSUZPU1RTX0FERFJERVRGX01zaykgPj4gVUFSVF9GSUZPU1RTX0FERFJERVRGX1BvcykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRW5hYmxlIHNwZWNpZmllZCBVQVJUIFBETUEgZnVuY3Rpb24KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyRnVuY1NlbCAgQ29tYmluYXRpb24gb2YgZm9sbG93aW5nIGZ1bmN0aW9ucworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1RYUERNQUVOX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JYUERNQUVOX01zaworICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBlbmFibGUgc3BlY2lmaWVkIFVBUlQgUERNQSBmdW5jdGlvbi4KKyAqLworI2RlZmluZSBVQVJUX1BETUFfRU5BQkxFKHVhcnQsIHUzMkZ1bmNTZWwpICAgICgodWFydCktPklOVEVOIHw9ICh1MzJGdW5jU2VsKSkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRGlzYWJsZSBzcGVjaWZpZWQgVUFSVCBQRE1BIGZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkZ1bmNTZWwgIENvbWJpbmF0aW9uIG9mIGZvbGxvd2luZyBmdW5jdGlvbnMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9UWFBETUFFTl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9SWFBETUFFTl9Nc2sKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBzcGVjaWZpZWQgVUFSVCBQRE1BIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIFVBUlRfUERNQV9ESVNBQkxFKHVhcnQsIHUzMkZ1bmNTZWwpICAgICgodWFydCktPklOVEVOICY9IH4odTMyRnVuY1NlbCkpCisKKwordm9pZCBVQVJUX0NsZWFySW50RmxhZyhVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMkludGVycnVwdEZsYWcpOwordm9pZCBVQVJUX0Nsb3NlKFVBUlRfVCogdWFydCk7Cit2b2lkIFVBUlRfRGlzYWJsZUZsb3dDdHJsKFVBUlRfVCogdWFydCk7Cit2b2lkIFVBUlRfRGlzYWJsZUludChVQVJUX1QqICB1YXJ0LCB1aW50MzJfdCB1MzJJbnRlcnJ1cHRGbGFnKTsKK3ZvaWQgVUFSVF9FbmFibGVGbG93Q3RybChVQVJUX1QqIHVhcnQpOwordm9pZCBVQVJUX0VuYWJsZUludChVQVJUX1QqICB1YXJ0LCB1aW50MzJfdCB1MzJJbnRlcnJ1cHRGbGFnKTsKK3ZvaWQgVUFSVF9PcGVuKFVBUlRfVCogdWFydCwgdWludDMyX3QgdTMyYmF1ZHJhdGUpOwordWludDMyX3QgVUFSVF9SZWFkKFVBUlRfVCogdWFydCwgdWludDhfdCBwdThSeEJ1ZltdLCB1aW50MzJfdCB1MzJSZWFkQnl0ZXMpOwordm9pZCBVQVJUX1NldExpbmVDb25maWcoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJiYXVkcmF0ZSwgdWludDMyX3QgdTMyZGF0YV93aWR0aCwgdWludDMyX3QgdTMycGFyaXR5LCB1aW50MzJfdCAgdTMyc3RvcF9iaXRzKTsKK3ZvaWQgVUFSVF9TZXRUaW1lb3V0Q250KFVBUlRfVCogdWFydCwgdWludDMyX3QgdTMyVE9DKTsKK3ZvaWQgVUFSVF9TZWxlY3RJckRBTW9kZShVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMkJ1YWRyYXRlLCB1aW50MzJfdCB1MzJEaXJlY3Rpb24pOwordm9pZCBVQVJUX1NlbGVjdFJTNDg1TW9kZShVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMk1vZGUsIHVpbnQzMl90IHUzMkFkZHIpOwordm9pZCBVQVJUX1NlbGVjdExJTk1vZGUoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJCcmVha0xlbmd0aCk7Cit1aW50MzJfdCBVQVJUX1dyaXRlKFVBUlRfVCogdWFydCwgdWludDhfdCBwdThUeEJ1ZltdLCB1aW50MzJfdCB1MzJXcml0ZUJ5dGVzKTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVBUlRfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVUFSVF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVUFSVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdXNiZC5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdXNiZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiM2I4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91c2JkLmgKQEAgLTAsMCArMSw3MzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1c2JkLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBVU0JEIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1VTQkRfSF9fCisjZGVmaW5lIF9fVVNCRF9IX18KKworI2RlZmluZSBTVVBQT1JUX0xQTSAgICAgLy8gZGVmaW5lIHRvIHN1cHBvcnQgTFBNCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0JEX0RyaXZlciBVU0JEIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVTQkRfRVhQT1JURURfU1RSVUNUUyBVU0JEIEV4cG9ydGVkIFN0cnVjdHMKKyAgQHsKKyovCisKK3R5cGVkZWYgc3RydWN0IHNfdXNiZF9pbmZvCit7CisgICAgdWludDhfdCAqZ3U4RGV2RGVzYzsgICAgICAgICAgICAvKiE8IFBvaW50ZXIgZm9yIFVTQiBEZXZpY2UgRGVzY3JpcHRvciAgICAgICAgICAqLworICAgIHVpbnQ4X3QgKmd1OENvbmZpZ0Rlc2M7ICAgICAgICAgLyohPCBQb2ludGVyIGZvciBVU0IgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yICAgKi8KKyAgICB1aW50OF90ICoqZ3U4U3RyaW5nRGVzYzsgICAgICAgIC8qITwgUG9pbnRlciBmb3IgVVNCIFN0cmluZyBEZXNjcmlwdG9yIHBvaW50ZXJzICovCisgICAgdWludDhfdCAqKmd1OEhpZFJlcG9ydERlc2M7ICAgICAvKiE8IFBvaW50ZXIgZm9yIFVTQiBISUQgUmVwb3J0IERlc2NyaXB0b3IgICAgICAqLworICAgIHVpbnQ4X3QgKmd1OEJvc0Rlc2M7ICAgICAgICAgICAgLyohPCBQb2ludGVyIGZvciBVU0IgQk9TIERlc2NyaXB0b3IgICAgICAgICAgICAgKi8KKyAgICB1aW50MzJfdCAqZ3UzMkhpZFJlcG9ydFNpemU7ICAgIC8qITwgUG9pbnRlciBmb3IgSElEIFJlcG9ydCBkZXNjcmlwdG9yIFNpemUgKi8KKyAgICB1aW50MzJfdCAqZ3UzMkNvbmZpZ0hpZERlc2NJZHg7IC8qITwgUG9pbnRlciBmb3IgSElEIERlc2NyaXB0b3Igc3RhcnQgaW5kZXggKi8KKworfSBTX1VTQkRfSU5GT19UOyAgLyohPCBEZXZpY2UgZGVzY3JpcHRpb24gc3RydWN0dXJlICovCisKK2V4dGVybiBjb25zdCBTX1VTQkRfSU5GT19UIGdzSW5mbzsKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0JEX0VYUE9SVEVEX1NUUlVDVFMgKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVVNCRF9FWFBPUlRFRF9DT05TVEFOVFMgVVNCRCBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKyNkZWZpbmUgVVNCRF9CVUZfQkFTRSAgICAgICh1aW50MzJfdCkoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChVU0JEX0JBU0UrTlNfT0ZGU0VUKzB4MTAwVUwpOihVU0JEX0JBU0UrMHgxMDBVTCkpICAvKiE8IFVTQkQgYnVmZmVyIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBVU0JEX01BWF9FUCAgICAgICAgMTJVTCAgLyohPCBUb3RhbCBFUCBudW1iZXIgKi8KKworI2RlZmluZSBFUDAgICAgIDBVTCAgICAgICAvKiE8IEVuZHBvaW50IDAgKi8KKyNkZWZpbmUgRVAxICAgICAxVUwgICAgICAgLyohPCBFbmRwb2ludCAxICovCisjZGVmaW5lIEVQMiAgICAgMlVMICAgICAgIC8qITwgRW5kcG9pbnQgMiAqLworI2RlZmluZSBFUDMgICAgIDNVTCAgICAgICAvKiE8IEVuZHBvaW50IDMgKi8KKyNkZWZpbmUgRVA0ICAgICA0VUwgICAgICAgLyohPCBFbmRwb2ludCA0ICovCisjZGVmaW5lIEVQNSAgICAgNVVMICAgICAgIC8qITwgRW5kcG9pbnQgNSAqLworI2RlZmluZSBFUDYgICAgIDZVTCAgICAgICAvKiE8IEVuZHBvaW50IDYgKi8KKyNkZWZpbmUgRVA3ICAgICA3VUwgICAgICAgLyohPCBFbmRwb2ludCA3ICovCisjZGVmaW5lIEVQOCAgICAgOFVMICAgICAgIC8qITwgRW5kcG9pbnQgOCAqLworI2RlZmluZSBFUDkgICAgIDlVTCAgICAgICAvKiE8IEVuZHBvaW50IDkgKi8KKyNkZWZpbmUgRVAxMCAgICAxMFVMICAgICAgLyohPCBFbmRwb2ludCAxMCAqLworI2RlZmluZSBFUDExICAgIDExVUwgICAgICAvKiE8IEVuZHBvaW50IDExICovCisKKy8qKiBAY29uZCBISURERU5fU1lNQk9MUyAqLworLyogVVNCIFJlcXVlc3QgVHlwZSAqLworI2RlZmluZSBSRVFfU1RBTkRBUkQgICAgICAgIDB4MDBVTAorI2RlZmluZSBSRVFfQ0xBU1MgICAgICAgICAgIDB4MjBVTAorI2RlZmluZSBSRVFfVkVORE9SICAgICAgICAgIDB4NDBVTAorCisvKiBVU0IgU3RhbmRhcmQgUmVxdWVzdCAqLworI2RlZmluZSBHRVRfU1RBVFVTICAgICAgICAgIDB4MDBVTAorI2RlZmluZSBDTEVBUl9GRUFUVVJFICAgICAgIDB4MDFVTAorI2RlZmluZSBTRVRfRkVBVFVSRSAgICAgICAgIDB4MDNVTAorI2RlZmluZSBTRVRfQUREUkVTUyAgICAgICAgIDB4MDVVTAorI2RlZmluZSBHRVRfREVTQ1JJUFRPUiAgICAgIDB4MDZVTAorI2RlZmluZSBTRVRfREVTQ1JJUFRPUiAgICAgIDB4MDdVTAorI2RlZmluZSBHRVRfQ09ORklHVVJBVElPTiAgIDB4MDhVTAorI2RlZmluZSBTRVRfQ09ORklHVVJBVElPTiAgIDB4MDlVTAorI2RlZmluZSBHRVRfSU5URVJGQUNFICAgICAgIDB4MEFVTAorI2RlZmluZSBTRVRfSU5URVJGQUNFICAgICAgIDB4MEJVTAorI2RlZmluZSBTWU5DX0ZSQU1FICAgICAgICAgIDB4MENVTAorCisvKiBVU0IgRGVzY3JpcHRvciBUeXBlICovCisjZGVmaW5lIERFU0NfREVWSUNFICAgICAgICAgMHgwMVVMCisjZGVmaW5lIERFU0NfQ09ORklHICAgICAgICAgMHgwMlVMCisjZGVmaW5lIERFU0NfU1RSSU5HICAgICAgICAgMHgwM1VMCisjZGVmaW5lIERFU0NfSU5URVJGQUNFICAgICAgMHgwNFVMCisjZGVmaW5lIERFU0NfRU5EUE9JTlQgICAgICAgMHgwNVVMCisjZGVmaW5lIERFU0NfUVVBTElGSUVSICAgICAgMHgwNlVMCisjZGVmaW5lIERFU0NfT1RIRVJTUEVFRCAgICAgMHgwN1VMCisjZGVmaW5lIERFU0NfSUZQT1dFUiAgICAgICAgMHgwOFVMCisjZGVmaW5lIERFU0NfT1RHICAgICAgICAgICAgMHgwOVVMCisjZGVmaW5lIERFU0NfQk9TICAgICAgICAgICAgMHgwRlVMCisjZGVmaW5lIERFU0NfQ0FQQUJJTElUWSAgICAgMHgxMFVMCisKKy8qIFVTQiBEZXZpY2UgQ2FwYWJpbGl0eSBUeXBlICovCisjZGVmaW5lIENBUF9XSVJFTEVTUyAgICAgICAgMHgwMVVMCisjZGVmaW5lIENBUF9VU0IyMF9FWFQgICAgICAgMHgwMlVMCisKKy8qITxVU0IgSElEIERlc2NyaXB0b3IgVHlwZSAqLworI2RlZmluZSBERVNDX0hJRCAgICAgICAgICAgIDB4MjFVTAorI2RlZmluZSBERVNDX0hJRF9SUFQgICAgICAgIDB4MjJVTAorCisvKiBVU0IgRGVzY3JpcHRvciBMZW5ndGggKi8KKyNkZWZpbmUgTEVOX0RFVklDRSAgICAgICAgICAxOFVMCisjZGVmaW5lIExFTl9RVUFMSUZJRVIgICAgICAgMTBVTAorI2RlZmluZSBMRU5fQ09ORklHICAgICAgICAgIDlVTAorI2RlZmluZSBMRU5fSU5URVJGQUNFICAgICAgIDlVTAorI2RlZmluZSBMRU5fRU5EUE9JTlQgICAgICAgIDdVTAorI2RlZmluZSBMRU5fT1RHICAgICAgICAgICAgIDVVTAorI2RlZmluZSBMRU5fQk9TICAgICAgICAgICAgIDVVTAorI2RlZmluZSBMRU5fSElEICAgICAgICAgICAgIDlVTAorI2RlZmluZSBMRU5fQ0NJRCAgICAgICAgICAgIDB4MzZVTAorI2RlZmluZSBMRU5fQk9TQ0FQICAgICAgICAgIDdVTAorCisvKiBVU0IgRW5kcG9pbnQgVHlwZSAqLworI2RlZmluZSBFUF9JU08gICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgRVBfQlVMSyAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEVQX0lOVCAgICAgICAgICAgICAgMHgwMworCisjZGVmaW5lIEVQX0lOUFVUICAgICAgICAgICAgMHg4MAorI2RlZmluZSBFUF9PVVRQVVQgICAgICAgICAgIDB4MDAKKworLyogVVNCIEZlYXR1cmUgU2VsZWN0b3IgKi8KKyNkZWZpbmUgRkVBVFVSRV9ERVZJQ0VfUkVNT1RFX1dBS0VVUCAgICAweDAxVUwKKyNkZWZpbmUgRkVBVFVSRV9FTkRQT0lOVF9IQUxUICAgICAgICAgICAweDAwVUwKKy8qKiBAZW5kY29uZCBISURERU5fU1lNQk9MUyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgVVNCIFNwZWNpZmljIE1hY3JvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgVVNCRF9XQUtFVVBfRU4gICAgICAgICAgVVNCRF9JTlRFTl9XS0VOX01zayAgICAgICAgIC8qITwgVVNCIFdha2UtdXAgRW5hYmxlICovCisjZGVmaW5lIFVTQkRfRFJWU0UwICAgICAgICAgICAgIFVTQkRfU0UwX1NFMF9Nc2sgICAgICAgICAgICAvKiE8IERyaXZlIFNFMCAqLworCisjZGVmaW5lIFVTQkRfTFBNQUNLICAgICAgICAgICAgIFVTQkRfQVRUUl9MUE1BQ0tfTXNrICAgICAgICAvKiE8IExQTSBFbmFibGUgKi8KKyNkZWZpbmUgVVNCRF9CWVRFTSAgICAgICAgICAgICAgVVNCRF9BVFRSX0JZVEVNX01zayAgICAgICAgIC8qITwgQWNjZXNzIFNpemUgTW9kZSBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgVVNCRF9EUFBVX0VOICAgICAgICAgICAgVVNCRF9BVFRSX0RQUFVFTl9Nc2sgICAgICAgIC8qITwgVVNCIEQrIFB1bGwtdXAgRW5hYmxlICovCisjZGVmaW5lIFVTQkRfVVNCX0VOICAgICAgICAgICAgIFVTQkRfQVRUUl9VU0JFTl9Nc2sgICAgICAgICAvKiE8IFVTQiBFbmFibGUgKi8KKyNkZWZpbmUgVVNCRF9SV0FLRVVQICAgICAgICAgICAgVVNCRF9BVFRSX1JXQUtFVVBfTXNrICAgICAgIC8qITwgUmVtb3RlIFdha2UtVXAgKi8KKyNkZWZpbmUgVVNCRF9QSFlfRU4gICAgICAgICAgICAgVVNCRF9BVFRSX1BIWUVOX01zayAgICAgICAgIC8qITwgUEhZIEVuYWJsZSAqLworCisjZGVmaW5lIFVTQkRfSU5UX0JVUyAgICAgICAgICAgIFVTQkRfSU5URU5fQlVTSUVOX01zayAgICAgICAvKiE8IFVTQiBCdXMgRXZlbnQgSW50ZXJydXB0ICovCisjZGVmaW5lIFVTQkRfSU5UX1VTQiAgICAgICAgICAgIFVTQkRfSU5URU5fVVNCSUVOX01zayAgICAgICAvKiE8IFVTQiBFdmVudCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVVNCRF9JTlRfRkxERVQgICAgICAgICAgVVNCRF9JTlRFTl9WQkRFVElFTl9Nc2sgICAgIC8qITwgVVNCIFZCVVMgRGV0ZWN0aW9uIEludGVycnVwdCAqLworI2RlZmluZSBVU0JEX0lOVF9XQUtFVVAgICAgICAgICAoVVNCRF9JTlRFTl9ORVZXS0lFTl9Nc2sgfCBVU0JEX0lOVEVOX1dLRU5fTXNrKSAgICAgLyohPCBVU0IgTm8tRXZlbnQtV2FrZS1VcCBJbnRlcnJ1cHQgKi8KKworI2RlZmluZSBVU0JEX0lOVFNUU19XQUtFVVAgICAgICBVU0JEX0lOVFNUU19ORVZXS0lGX01zayAgICAgLyohPCBVU0IgTm8tRXZlbnQtV2FrZS1VcCBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0ZMREVUICAgICAgIFVTQkRfSU5UU1RTX1ZCREVUSUZfTXNrICAgICAvKiE8IFVTQiBGbG9hdCBEZXRlY3QgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBVU0JEX0lOVFNUU19CVVMgICAgICAgICBVU0JEX0lOVFNUU19CVVNJRl9Nc2sgICAgICAgLyohPCBVU0IgQnVzIEV2ZW50IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfVVNCICAgICAgICAgVVNCRF9JTlRTVFNfVVNCSUZfTXNrICAgICAgIC8qITwgVVNCIEV2ZW50IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgVVNCRF9JTlRTVFNfU0VUVVAgICAgICAgVVNCRF9JTlRTVFNfU0VUVVBfTXNrICAgICAgIC8qITwgVVNCIFNldHVwIEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQMCAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUMF9Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCAwIEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQMSAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUMV9Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCAxIEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQMiAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUMl9Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCAyIEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQMyAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUM19Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCAzIEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQNCAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUNF9Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCA0IEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQNSAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUNV9Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCA1IEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQNiAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUNl9Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCA2IEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQNyAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUN19Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCA3IEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQOCAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUOF9Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCA4IEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQOSAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUOV9Nc2sgICAgICAvKiE8IFVTQiBFbmRwb2ludCA5IEV2ZW50ICovCisjZGVmaW5lIFVTQkRfSU5UU1RTX0VQMTAgICAgICAgIFVTQkRfSU5UU1RTX0VQRVZUMTBfTXNrICAgICAvKiE8IFVTQiBFbmRwb2ludCAxMCBFdmVudCAqLworI2RlZmluZSBVU0JEX0lOVFNUU19FUDExICAgICAgICBVU0JEX0lOVFNUU19FUEVWVDExX01zayAgICAgLyohPCBVU0IgRW5kcG9pbnQgMTEgRXZlbnQgKi8KKworI2RlZmluZSBVU0JEX1NUQVRFX1VTQlJTVCAgICAgICBVU0JEX0FUVFJfVVNCUlNUX01zayAgICAgICAgLyohPCBVU0IgQnVzIFJlc2V0ICovCisjZGVmaW5lIFVTQkRfU1RBVEVfU1VTUEVORCAgICAgIFVTQkRfQVRUUl9TVVNQRU5EX01zayAgICAgICAvKiE8IFVTQiBCdXMgU3VzcGVuZCAqLworI2RlZmluZSBVU0JEX1NUQVRFX1JFU1VNRSAgICAgICBVU0JEX0FUVFJfUkVTVU1FX01zayAgICAgICAgLyohPCBVU0IgQnVzIFJlc3VtZSAqLworI2RlZmluZSBVU0JEX1NUQVRFX1RJTUVPVVQgICAgICBVU0JEX0FUVFJfVE9VVF9Nc2sgICAgICAgICAgLyohPCBVU0IgQnVzIFRpbWVvdXQgKi8KKyNkZWZpbmUgVVNCRF9TVEFURV9MMVNVU1BFTkQgICAgVVNCRF9BVFRSX0wxU1VTUEVORF9Nc2sgICAgIC8qITwgVVNCIEJ1cyBMMVNVU1BFTkQgKi8KKyNkZWZpbmUgVVNCRF9TVEFURV9MMVJFU1VNRSAgICAgVVNCRF9BVFRSX0wxUkVTVU1FX01zayAgICAgIC8qITwgVVNCIEJ1cyBMMVJFU1VNRSAqLworCisjZGVmaW5lIFVTQkRfQ0ZHUF9TU1RBTEwgICAgICAgIFVTQkRfQ0ZHUF9TU1RBTExfTXNrICAgICAgICAvKiE8IFNldCBTdGFsbCAqLworI2RlZmluZSBVU0JEX0NGR19DU1RBTEwgICAgICAgICBVU0JEX0NGR19DU1RBTExfTXNrICAgICAgICAgLyohPCBDbGVhciBTdGFsbCAqLworCisjZGVmaW5lIFVTQkRfQ0ZHX0VQTU9ERV9ESVNBQkxFICgwVUwgPDwgVVNCRF9DRkdfU1RBVEVfUG9zKS8qITwgRW5kcG9pbnQgRGlzYWJsZSAqLworI2RlZmluZSBVU0JEX0NGR19FUE1PREVfT1VUICAgICAoMVVMIDw8IFVTQkRfQ0ZHX1NUQVRFX1BvcykvKiE8IE91dCBFbmRwb2ludCAqLworI2RlZmluZSBVU0JEX0NGR19FUE1PREVfSU4gICAgICAoMlVMIDw8IFVTQkRfQ0ZHX1NUQVRFX1BvcykvKiE8IEluIEVuZHBvaW50ICovCisjZGVmaW5lIFVTQkRfQ0ZHX1RZUEVfSVNPICAgICAgICgxVUwgPDwgVVNCRF9DRkdfSVNPQ0hfUG9zKS8qITwgSXNvY2hyb25vdXMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0JEX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBVU0JEX0VYUE9SVEVEX0ZVTkNUSU9OUyBVU0JEIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgQ29tcGFyZSB0d28gaW5wdXQgbnVtYmVycyBhbmQgcmV0dXJuIG1heGltdW0gb25lLgorICAqCisgICogQHBhcmFtW2luXSAgYSAgIEZpcnN0IG51bWJlciB0byBiZSBjb21wYXJlZC4KKyAgKiBAcGFyYW1baW5dICBiICAgU2Vjb25kIG51bWJlciB0byBiZSBjb21wYXJlZC4KKyAgKgorICAqIEByZXR1cm4gICAgIE1heGltdW0gdmFsdWUgYmV0d2VlbiBhIGFuZCBiLgorICAqCisgICogQGRldGFpbHMgICAgSWYgYSA+IGIsIHRoZW4gcmV0dXJuIGEuIE90aGVyd2lzZSwgcmV0dXJuIGIuCisgICovCisjZGVmaW5lIFVTQkRfTWF4aW11bShhLGIpICAgICAgICAoKGEpPihiKSA/IChhKSA6IChiKSkKKworLyoqCisgICogQGJyaWVmICAgICAgQ29tcGFyZSB0d28gaW5wdXQgbnVtYmVycyBhbmQgcmV0dXJuIG1pbmltdW0gb25lCisgICoKKyAgKiBAcGFyYW1baW5dICBhICAgRmlyc3QgbnVtYmVyIHRvIGJlIGNvbXBhcmVkCisgICogQHBhcmFtW2luXSAgYiAgIFNlY29uZCBudW1iZXIgdG8gYmUgY29tcGFyZWQKKyAgKgorICAqIEByZXR1cm4gICAgIE1pbmltdW0gdmFsdWUgYmV0d2VlbiBhIGFuZCBiCisgICoKKyAgKiBAZGV0YWlscyAgICBJZiBhIDwgYiwgdGhlbiByZXR1cm4gYS4gT3RoZXJ3aXNlLCByZXR1cm4gYi4KKyAgKi8KKyNkZWZpbmUgVVNCRF9NaW5pbXVtKGEsYikgICAgICAgICgoYSk8KGIpID8gKGEpIDogKGIpKQorCisvKioKKyAgKiBAYnJpZWYgICAgRW5hYmxlIFVTQgorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgVG8gc2V0IFVTQiBBVFRSIGNvbnRyb2wgcmVnaXN0ZXIgdG8gZW5hYmxlIFVTQiBhbmQgUEhZLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfRU5BQkxFX1VTQigpICAgICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgodWludDMyX3QpKFVTQkRfTlMtPkFUVFIgfD0gMHg3RDApKTooKHVpbnQzMl90KShVU0JELT5BVFRSIHw9IDB4N0QwKSkpCisKKy8qKgorICAqIEBicmllZiAgICBEaXNhYmxlIFVTQgorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgVG8gc2V0IFVTQiBBVFRSIGNvbnRyb2wgcmVnaXN0ZXIgdG8gZGlzYWJsZSBVU0IuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9ESVNBQkxFX1VTQigpICAgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCh1aW50MzJfdCkoVVNCRF9OUy0+QVRUUiAmPSB+VVNCRF9VU0JfRU4pKTooKHVpbnQzMl90KShVU0JELT5BVFRSICY9IH5VU0JEX1VTQl9FTikpKQorCisvKioKKyAgKiBAYnJpZWYgICAgRW5hYmxlIFVTQiBQSFkKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIFRvIHNldCBVU0IgQVRUUiBjb250cm9sIHJlZ2lzdGVyIHRvIGVuYWJsZSBVU0IgUEhZLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfRU5BQkxFX1BIWSgpICAgICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgodWludDMyX3QpKFVTQkRfTlMtPkFUVFIgfD0gVVNCRF9QSFlfRU4pKTooKHVpbnQzMl90KShVU0JELT5BVFRSIHw9IFVTQkRfUEhZX0VOKSkpCisKKy8qKgorICAqIEBicmllZiAgICBEaXNhYmxlIFVTQiBQSFkKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIFRvIHNldCBVU0IgQVRUUiBjb250cm9sIHJlZ2lzdGVyIHRvIGRpc2FibGUgVVNCIFBIWS4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0RJU0FCTEVfUEhZKCkgICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KShVU0JEX05TLT5BVFRSICY9IH5VU0JEX1BIWV9FTikpOigodWludDMyX3QpKFVTQkQtPkFUVFIgJj0gflVTQkRfUEhZX0VOKSkpCisKKy8qKgorICAqIEBicmllZiAgICBFbmFibGUgU0UwLiBGb3JjZSBVU0IgUEhZIHRyYW5zY2VpdmVyIHRvIGRyaXZlIFNFMC4KKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIFNldCBEUlZTRTAgYml0IG9mIFVTQl9EUlZTRTAgcmVnaXN0ZXIgdG8gZW5hYmxlIHNvZnR3YXJlLWRpc2Nvbm5lY3QgZnVuY3Rpb24uIEZvcmNlIFVTQiBQSFkgdHJhbnNjZWl2ZXIgdG8gZHJpdmUgU0UwIHRvIGJ1cy4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX1NFVF9TRTAoKSAgICAgICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KShVU0JEX05TLT5TRTAgfD0gVVNCRF9EUlZTRTApKTooKHVpbnQzMl90KShVU0JELT5TRTAgfD0gVVNCRF9EUlZTRTApKSkKKworLyoqCisgICogQGJyaWVmICAgIERpc2FibGUgU0UwCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBDbGVhciBEUlZTRTAgYml0IG9mIFVTQl9EUlZTRTAgcmVnaXN0ZXIgdG8gZGlzYWJsZSBzb2Z0d2FyZS1kaXNjb25uZWN0IGZ1bmN0aW9uLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfQ0xSX1NFMCgpICAgICAgICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgodWludDMyX3QpKFVTQkRfTlMtPlNFMCAmPSB+VVNCRF9EUlZTRTApKTooKHVpbnQzMl90KShVU0JELT5TRTAgJj0gflVTQkRfRFJWU0UwKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgICBTZXQgVVNCIGRldmljZSBhZGRyZXNzCisgICoKKyAgKiBAcGFyYW1baW5dICAgYWRkciBUaGUgVVNCIGRldmljZSBhZGRyZXNzLgorICAqCisgICogQHJldHVybiAgICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgICBXcml0ZSBVU0IgZGV2aWNlIGFkZHJlc3MgdG8gVVNCX0ZBRERSIHJlZ2lzdGVyLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfU0VUX0FERFIoYWRkcikgICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChVU0JEX05TLT5GQUREUiA9IChhZGRyKSk6KFVTQkQtPkZBRERSID0gKGFkZHIpKSkKKworLyoqCisgICogQGJyaWVmICAgIEdldCBVU0IgZGV2aWNlIGFkZHJlc3MKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgVVNCIGRldmljZSBhZGRyZXNzCisgICoKKyAgKiBAZGV0YWlscyAgUmVhZCBVU0JfRkFERFIgcmVnaXN0ZXIgdG8gZ2V0IFVTQiBkZXZpY2UgYWRkcmVzcy4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0dFVF9BRERSKCkgICAgICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KShVU0JEX05TLT5GQUREUikpOigodWludDMyX3QpKFVTQkQtPkZBRERSKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBVU0IgaW50ZXJydXB0IGZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICBpbnRyIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGludGVycnVwdCBlbmFibGUgYml0cy4KKyAgKiAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBlbmFibGUgYml0LgorICAqICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQuCisgICogICAgICAgICAgICAgKFVTQkRfSU5UX1dBS0VVUCwgVVNCRF9JTlRfRkxERVQsIFVTQkRfSU5UX1VTQiwgVVNCRF9JTlRfQlVTKQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgRW5hYmxlIFVTQiByZWxhdGVkIGludGVycnVwdCBmdW5jdGlvbnMgc3BlY2lmaWVkIGJ5IGludHIgcGFyYW1ldGVyLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfRU5BQkxFX0lOVChpbnRyKSAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/IChVU0JEX05TLT5JTlRFTiB8PSAoaW50cikpOihVU0JELT5JTlRFTiB8PSAoaW50cikpKQorCisvKioKKyAgKiBAYnJpZWYgICAgR2V0IGludGVycnVwdCBzdGF0dXMKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgVGhlIHZhbHVlIG9mIFVTQl9JTlRTVFMgcmVnaXN0ZXIKKyAgKgorICAqIEBkZXRhaWxzICBSZXR1cm4gYWxsIGludGVycnVwdCBmbGFncyBvZiBVU0JfSU5UU1RTIHJlZ2lzdGVyLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfR0VUX0lOVF9GTEFHKCkgICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgodWludDMyX3QpKFVTQkRfTlMtPklOVFNUUykpOigodWludDMyX3QpKFVTQkQtPklOVFNUUykpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBVU0IgaW50ZXJydXB0IGZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIGZsYWcgVGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWdzLgorICAqICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4KKyAgKiAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdCBmbGFncyB3aWxsIGJlIGNsZWFyZWQuCisgICogICAgICAgICAgICAgKFVTQkRfSU5UU1RTX1dBS0VVUCwgVVNCRF9JTlRTVFNfRkxERVQsIFVTQkRfSU5UU1RTX0JVUywgVVNCRF9JTlRTVFNfVVNCKQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgQ2xlYXIgVVNCIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzIHNwZWNpZmllZCBieSBmbGFnIHBhcmFtZXRlci4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0NMUl9JTlRfRkxBRyhmbGFnKSAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoVVNCRF9OUy0+SU5UU1RTID0gKGZsYWcpKTooVVNCRC0+SU5UU1RTID0gKGZsYWcpKSkKKworLyoqCisgICogQGJyaWVmICAgIEdldCBlbmRwb2ludCBzdGF0dXMKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgVGhlIHZhbHVlIG9mIFVTQl9FUFNUUyByZWdpc3Rlci4KKyAgKgorICAqIEBkZXRhaWxzICBSZXR1cm4gYWxsIGVuZHBvaW50IHN0YXR1cy4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0dFVF9FUF9GTEFHKCkgICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KShVU0JEX05TLT5FUFNUUykpOigodWludDMyX3QpKFVTQkQtPkVQU1RTKSkpCisKKy8qKgorICAqIEBicmllZiAgICBHZXQgVVNCIGJ1cyBzdGF0ZQorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBUaGUgdmFsdWUgb2YgVVNCX0FUVFJbMTM6MTJdIGFuZCBVU0JfQVRUUlszOjBdLgorICAqICAgICAgICAgICBCaXQgMCAgaW5kaWNhdGVzIFVTQiBidXMgcmVzZXQgc3RhdHVzLgorICAqICAgICAgICAgICBCaXQgMSAgaW5kaWNhdGVzIFVTQiBidXMgc3VzcGVuZCBzdGF0dXMuCisgICogICAgICAgICAgIEJpdCAyICBpbmRpY2F0ZXMgVVNCIGJ1cyByZXN1bWUgc3RhdHVzLgorICAqICAgICAgICAgICBCaXQgMyAgaW5kaWNhdGVzIFVTQiBidXMgdGltZS1vdXQgc3RhdHVzLgorICAqICAgICAgICAgICBCaXQgMTIgaW5kaWNhdGVzIFVTQiBidXMgTFBNIEwxIHN1c3BlbmQgc3RhdHVzLgorICAqICAgICAgICAgICBCaXQgMTMgaW5kaWNhdGVzIFVTQiBidXMgTFBNIEwxIHJlc3VtZSBzdGF0dXMuCisgICoKKyAgKiBAZGV0YWlscyAgUmV0dXJuIFVTQl9BVFRSWzEzOjEyXSBhbmQgVVNCX0FUVFJbMzowXSBmb3IgVVNCIGJ1cyBldmVudHMuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9HRVRfQlVTX1NUQVRFKCkgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCh1aW50MzJfdCkoVVNCRF9OUy0+QVRUUiAmIDB4MzAwRikpOigodWludDMyX3QpKFVTQkQtPkFUVFIgJiAweDMwMEYpKSkKKworLyoqCisgICogQGJyaWVmICAgIENoZWNrIGNhYmxlIGNvbm5lY3Rpb24gc3RhdGUKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dmFsICAgMCBVU0IgY2FibGUgaXMgbm90IGF0dGFjaGVkLgorICAqIEByZXR2YWwgICAxIFVTQiBjYWJsZSBpcyBhdHRhY2hlZC4KKyAgKgorICAqIEBkZXRhaWxzICBDaGVjayB0aGUgY29ubmVjdGlvbiBzdGF0ZSBieSBGTERFVCBiaXQgb2YgVVNCX0ZMREVUIHJlZ2lzdGVyLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfSVNfQVRUQUNIRUQoKSAgICAgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgodWludDMyX3QpKFVTQkRfTlMtPlZCVVNERVQgJiBVU0JEX1ZCVVNERVRfVkJVU0RFVF9Nc2spKTooKHVpbnQzMl90KShVU0JELT5WQlVTREVUICYgVVNCRF9WQlVTREVUX1ZCVVNERVRfTXNrKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIFN0b3AgVVNCIHRyYW5zYWN0aW9uIG9mIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgSUQKKyAgKgorICAqIEBwYXJhbVtpbl0gIGVwIFRoZSBVU0IgZW5kcG9pbnQgSUQuIE0yMzUxIFNlcmllcyBzdXBwb3J0cyAxMiBoYXJkd2FyZSBlbmRwb2ludCBJRC4gVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgMCB+IDExLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgV3JpdGUgMSB0byBDTFJSRFkgYml0IG9mIFVTQl9DRkdQeCByZWdpc3RlciB0byBzdG9wIFVTQiB0cmFuc2FjdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGVuZHBvaW50IElELgorICAqCisgICovCisjZGVmaW5lIFVTQkRfU1RPUF9UUkFOU0FDVElPTihlcCkgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkRfTlMtPkVQWzBdLkNGR1AgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSB8PSBVU0JEX0NGR1BfQ0xSUkRZX01zayk6KCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRC0+RVBbMF0uQ0ZHUCArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpIHw9IFVTQkRfQ0ZHUF9DTFJSRFlfTXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFVTQiBEQVRBMSBQSUQgZm9yIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgSUQKKyAgKgorICAqIEBwYXJhbVtpbl0gIGVwIFRoZSBVU0IgZW5kcG9pbnQgSUQuIE0yMzUxIFNlcmllcyBzdXBwb3J0cyAxMiBoYXJkd2FyZSBlbmRwb2ludCBJRC4gVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgMCB+IDExLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgU2V0IERTUV9TWU5DIGJpdCBvZiBVU0JfQ0ZHeCByZWdpc3RlciB0byBzcGVjaWZ5IHRoZSBEQVRBMSBQSUQgZm9yIHRoZSBmb2xsb3dpbmcgSU4gdG9rZW4gdHJhbnNhY3Rpb24uCisgICogICAgICAgICAgICAgQmFzZSBvbiB0aGlzIHNldHRpbmcsIGhhcmR3YXJlIHdpbGwgdG9nZ2xlIFBJRCBiZXR3ZWVuIERBVEEwIGFuZCBEQVRBMSBhdXRvbWF0aWNhbGx5IGZvciBJTiB0b2tlbiB0cmFuc2FjdGlvbnMuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9TRVRfREFUQTEoZXApICAgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRF9OUy0+RVBbMF0uQ0ZHICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgfD0gVVNCRF9DRkdfRFNRU1lOQ19Nc2spOigqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkQtPkVQWzBdLkNGRyArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpIHw9IFVTQkRfQ0ZHX0RTUVNZTkNfTXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFVTQiBEQVRBMCBQSUQgZm9yIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgSUQKKyAgKgorICAqIEBwYXJhbVtpbl0gIGVwIFRoZSBVU0IgZW5kcG9pbnQgSUQuIE0yMzUxIFNlcmllcyBzdXBwb3J0cyAxMiBoYXJkd2FyZSBlbmRwb2ludCBJRC4gVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgMCB+IDExLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgQ2xlYXIgRFNRX1NZTkMgYml0IG9mIFVTQl9DRkd4IHJlZ2lzdGVyIHRvIHNwZWNpZnkgdGhlIERBVEEwIFBJRCBmb3IgdGhlIGZvbGxvd2luZyBJTiB0b2tlbiB0cmFuc2FjdGlvbi4KKyAgKiAgICAgICAgICAgICBCYXNlIG9uIHRoaXMgc2V0dGluZywgaGFyZHdhcmUgd2lsbCB0b2dnbGUgUElEIGJldHdlZW4gREFUQTAgYW5kIERBVEExIGF1dG9tYXRpY2FsbHkgZm9yIElOIHRva2VuIHRyYW5zYWN0aW9ucy4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX1NFVF9EQVRBMChlcCkgICAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JEX05TLT5FUFswXS5DRkcgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSAmPSAoflVTQkRfQ0ZHX0RTUVNZTkNfTXNrKSk6KCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRC0+RVBbMF0uQ0ZHICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgJj0gKH5VU0JEX0NGR19EU1FTWU5DX01zaykpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgVVNCIHBheWxvYWQgc2l6ZSAoSU4gZGF0YSkKKyAgKgorICAqIEBwYXJhbVtpbl0gIGVwIFRoZSBVU0IgZW5kcG9pbnQgSUQuIE0yMzUxIFNlcmllcyBzdXBwb3J0cyAxMiBoYXJkd2FyZSBlbmRwb2ludCBJRC4gVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgMCB+IDExLgorICAqCisgICogQHBhcmFtW2luXSAgc2l6ZSBUaGUgdHJhbnNmZXIgbGVuZ3RoLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyB3aWxsIHdyaXRlIHRoZSB0cmFuc2ZlciBsZW5ndGggdG8gVVNCX01YUExEeCByZWdpc3RlciBmb3IgSU4gZGF0YSB0cmFuc2FjdGlvbi4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX1NFVF9QQVlMT0FEX0xFTihlcCwgc2l6ZSkgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRF9OUy0+RVBbMF0uTVhQTEQgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSA9IChzaXplKSk6KCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRC0+RVBbMF0uTVhQTEQgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSA9IChzaXplKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBVU0IgcGF5bG9hZCBzaXplIChPVVQgZGF0YSkKKyAgKgorICAqIEBwYXJhbVtpbl0gIGVwIFRoZSBVU0IgZW5kcG9pbnQgSUQuIE0yMzUxIFNlcmllcyBzdXBwb3J0cyAxMiBoYXJkd2FyZSBlbmRwb2ludCBJRC4gVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgMCB+IDExLgorICAqCisgICogQHJldHVybiAgICAgVGhlIHZhbHVlIG9mIFVTQl9NWFBMRHggcmVnaXN0ZXIuCisgICoKKyAgKiBAZGV0YWlscyAgICBHZXQgdGhlIGRhdGEgbGVuZ3RoIG9mIE9VVCBkYXRhIHRyYW5zYWN0aW9uIGJ5IHJlYWRpbmcgVVNCX01YUExEeCByZWdpc3Rlci4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0dFVF9QQVlMT0FEX0xFTihlcCkgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCh1aW50MzJfdCkqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkRfTlMtPkVQWzBdLk1YUExEICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkpOigodWludDMyX3QpKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JELT5FUFswXS5NWFBMRCArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgQ29uZmlndXJlIGVuZHBvaW50CisgICoKKyAgKiBAcGFyYW1baW5dICBlcCBUaGUgVVNCIGVuZHBvaW50IElELiBNMjM1MSBTZXJpZXMgc3VwcG9ydHMgMTIgaGFyZHdhcmUgZW5kcG9pbnQgSUQuIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIDAgfiAxMS4KKyAgKgorICAqIEBwYXJhbVtpbl0gIGNvbmZpZyBUaGUgVVNCIGNvbmZpZ3VyYXRpb24uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHdpbGwgd3JpdGUgY29uZmlnIHBhcmFtZXRlciB0byBVU0JfQ0ZHeCByZWdpc3RlciBvZiBzcGVjaWZpZWQgZW5kcG9pbnQgSUQuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9DT05GSUdfRVAoZXAsIGNvbmZpZykgICAgICAoKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCk/ICgqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkRfTlMtPkVQWzBdLkNGRyArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpID0gKGNvbmZpZykpOigqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkQtPkVQWzBdLkNGRyArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpID0gKGNvbmZpZykpKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgVVNCIGVuZHBvaW50IGJ1ZmZlcgorICAqCisgICogQHBhcmFtW2luXSAgZXAgVGhlIFVTQiBlbmRwb2ludCBJRC4gTTIzNTEgU2VyaWVzIHN1cHBvcnRzIDEyIGhhcmR3YXJlIGVuZHBvaW50IElELiBUaGlzIHBhcmFtZXRlciBjb3VsZCBiZSAwIH4gMTEuCisgICoKKyAgKiBAcGFyYW1baW5dICBvZmZzZXQgVGhlIFNSQU0gb2Zmc2V0LgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyB3aWxsIHNldCB0aGUgU1JBTSBvZmZzZXQgZm9yIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgSUQuCisgICoKKyAgKi8KKyNkZWZpbmUgVVNCRF9TRVRfRVBfQlVGX0FERFIoZXAsIG9mZnNldCkgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JEX05TLT5FUFswXS5CVUZTRUcgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSA9IChvZmZzZXQpKTooKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JELT5FUFswXS5CVUZTRUcgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSA9IChvZmZzZXQpKSkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHRoZSBvZmZzZXQgb2YgdGhlIHNwZWNpZmllZCBVU0IgZW5kcG9pbnQgYnVmZmVyCisgICoKKyAgKiBAcGFyYW1baW5dICBlcCBUaGUgVVNCIGVuZHBvaW50IElELiBNMjM1MSBTZXJpZXMgc3VwcG9ydHMgMTIgaGFyZHdhcmUgZW5kcG9pbnQgSUQuIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIDAgfiAxMS4KKyAgKgorICAqIEByZXR1cm4gICAgIFRoZSBvZmZzZXQgb2YgdGhlIHNwZWNpZmllZCBlbmRwb2ludCBidWZmZXIuCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIHRoZSBTUkFNIG9mZnNldCBvZiB0aGUgc3BlY2lmaWVkIGVuZHBvaW50IElELgorICAqCisgICovCisjZGVmaW5lIFVTQkRfR0VUX0VQX0JVRl9BRERSKGVwKSAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKHVpbnQzMl90KSooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRF9OUy0+RVBbMF0uQlVGU0VHICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkpOigodWludDMyX3QpKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JELT5FUFswXS5CVUZTRUcgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSkpCisKKy8qKgorICAqIEBicmllZiAgICAgICBTZXQgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlCisgICoKKyAgKiBAcGFyYW1baW5dICAgZXAgIFRoZSBVU0IgZW5kcG9pbnQgSUQuIE0yMzUxIFNlcmllcyBzdXBwb3J0cyAxMiBoYXJkd2FyZSBlbmRwb2ludCBJRC4gVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgMCB+IDExLgorICAqCisgICogQHJldHVybiAgICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgICBTZXQgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlIGZvciB0aGUgc3BlY2lmaWVkIGVuZHBvaW50IElELiBFbmRwb2ludCB3aWxsIHJlc3BvbmQgU1RBTEwgdG9rZW4gYXV0b21hdGljYWxseS4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX1NFVF9FUF9TVEFMTChlcCkgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRF9OUy0+RVBbMF0uQ0ZHUCArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpIHw9IFVTQkRfQ0ZHUF9TU1RBTExfTXNrKTooKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JELT5FUFswXS5DRkdQICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgfD0gVVNCRF9DRkdQX1NTVEFMTF9Nc2spKQorCisvKioKKyAgKiBAYnJpZWYgICAgICAgQ2xlYXIgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlCisgICoKKyAgKiBAcGFyYW1baW5dICAgZXAgIFRoZSBVU0IgZW5kcG9pbnQgSUQuIE0yMzUxIFNlcmllcyBzdXBwb3J0cyAxMiBoYXJkd2FyZSBlbmRwb2ludCBJRC4gVGhpcyBwYXJhbWV0ZXIgY291bGQgYmUgMCB+IDExLgorICAqCisgICogQHJldHVybiAgICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgICBDbGVhciBVU0IgZW5kcG9pbnQgc3RhbGwgc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgSUQuIEVuZHBvaW50IHdpbGwgcmVzcG9uZCBBQ0svTkFLIHRva2VuLgorICAqCisgICovCisjZGVmaW5lIFVTQkRfQ0xSX0VQX1NUQUxMKGVwKSAgICAgICAgKCgoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpPyAoKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JEX05TLT5FUFswXS5DRkdQICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgJj0gflVTQkRfQ0ZHUF9TU1RBTExfTXNrKTooKigoX19JTyB1aW50MzJfdCAqKSAoKHVpbnQzMl90KSZVU0JELT5FUFswXS5DRkdQICsgKHVpbnQzMl90KSgoZXApIDw8IDQpKSkgJj0gflVTQkRfQ0ZHUF9TU1RBTExfTXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgIEdldCBVU0IgZW5kcG9pbnQgc3RhbGwgc3RhdGUKKyAgKgorICAqIEBwYXJhbVtpbl0gICBlcCAgVGhlIFVTQiBlbmRwb2ludCBJRC4gTTIzNTEgU2VyaWVzIHN1cHBvcnRzIDEyIGhhcmR3YXJlIGVuZHBvaW50IElELiBUaGlzIHBhcmFtZXRlciBjb3VsZCBiZSAwIH4gMTEuCisgICoKKyAgKiBAcmV0dmFsICAgICAgMCAgICAgIFVTQiBlbmRwb2ludCBpcyBub3Qgc3RhbGxlZC4KKyAgKiBAcmV0dmFsICAgICAgT3RoZXJzIFVTQiBlbmRwb2ludCBpcyBzdGFsbGVkLgorICAqCisgICogQGRldGFpbHMgICAgIEdldCBVU0IgZW5kcG9pbnQgc3RhbGwgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBlbmRwb2ludCBJRC4KKyAgKgorICAqLworI2RlZmluZSBVU0JEX0dFVF9FUF9TVEFMTChlcCkgICAgICAgICgoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKT8gKCooKF9fSU8gdWludDMyX3QgKikgKCh1aW50MzJfdCkmVVNCRF9OUy0+RVBbMF0uQ0ZHUCArICh1aW50MzJfdCkoKGVwKSA8PCA0KSkpICYgVVNCRF9DRkdQX1NTVEFMTF9Nc2spOigqKChfX0lPIHVpbnQzMl90ICopICgodWludDMyX3QpJlVTQkQtPkVQWzBdLkNGR1AgKyAodWludDMyX3QpKChlcCkgPDwgNCkpKSAmIFVTQkRfQ0ZHUF9TU1RBTExfTXNrKSkKKworLyoqCisgICogQGJyaWVmICAgICAgVG8gc3VwcG9ydCBieXRlIGFjY2VzcyBiZXR3ZWVuIFVTQiBTUkFNIGFuZCBzeXN0ZW0gU1JBTQorICAqCisgICogQHBhcmFtW2luXSAgZGVzdCBEZXN0aW5hdGlvbiBwb2ludGVyLgorICAqCisgICogQHBhcmFtW2luXSAgc3JjICBTb3VyY2UgcG9pbnRlci4KKyAgKgorICAqIEBwYXJhbVtpbl0gIHNpemUgQnl0ZSBjb3VudC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjb3B5IHRoZSBudW1iZXIgb2YgZGF0YSBzcGVjaWZpZWQgYnkgc2l6ZSBhbmQgc3JjIHBhcmFtZXRlcnMgdG8gdGhlIGFkZHJlc3Mgc3BlY2lmaWVkIGJ5IGRlc3QgcGFyYW1ldGVyLgorICAqCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBVU0JEX01lbUNvcHkodWludDhfdCBkZXN0W10sIHVpbnQ4X3Qgc3JjW10sIHVpbnQzMl90IHNpemUpCit7CisgICAgdWludDMyX3Qgdm9sYXRpbGUgaSA9IDBVTDsKKworICAgIHdoaWxlKHNpemUtLSkKKyAgICB7CisgICAgICAgIGRlc3RbaV0gPSBzcmNbaV07CisgICAgICAgIGkrKzsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgICBTZXQgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlCisgICoKKyAgKiBAcGFyYW1baW5dICAgZXBudW0gIFVTQiBlbmRwb2ludCBudW1iZXIKKyAgKgorICAqIEByZXR1cm4gICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICAgU2V0IFVTQiBlbmRwb2ludCBzdGFsbCBzdGF0ZS4gRW5kcG9pbnQgd2lsbCByZXNwb25kIFNUQUxMIHRva2VuIGF1dG9tYXRpY2FsbHkuCisgICoKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFVTQkRfU2V0U3RhbGwodWludDhfdCBlcG51bSkKK3sKKyAgICB1aW50MzJfdCB1MzJDZmdBZGRyOworICAgIHVpbnQzMl90IHUzMkNmZzsKKyAgICB1aW50MzJfdCBpOworICAgIFVTQkRfVCAqcFVTQkQ7CisKKyAgICBpZigoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpCisgICAgeworICAgICAgICBwVVNCRCA9IFVTQkRfTlM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRDsKKyAgICB9CisKKyAgICBmb3IoaSA9IDBVTDsgaSA8IFVTQkRfTUFYX0VQOyBpKyspCisgICAgeworICAgICAgICB1MzJDZmdBZGRyID0gKHVpbnQzMl90KShpIDw8IDQpICsgKHVpbnQzMl90KSZwVVNCRC0+RVBbMF0uQ0ZHOyAvKiBVU0JEX0NGRzAgKi8KKyAgICAgICAgdTMyQ2ZnID0gKigoX19JTyB1aW50MzJfdCAqKSh1MzJDZmdBZGRyKSk7CisKKyAgICAgICAgaWYoKHUzMkNmZyAmIDB4RlVMKSA9PSBlcG51bSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2ZnQWRkciA9ICh1aW50MzJfdCkoaSA8PCA0KSArICh1aW50MzJfdCkmcFVTQkQtPkVQWzBdLkNGR1A7IC8qIFVTQkRfQ0ZHUDAgKi8KKyAgICAgICAgICAgIHUzMkNmZyA9ICooKF9fSU8gdWludDMyX3QgKikodTMyQ2ZnQWRkcikpOworCisgICAgICAgICAgICAqKChfX0lPIHVpbnQzMl90ICopKHUzMkNmZ0FkZHIpKSA9ICh1MzJDZmcgfCBVU0JEX0NGR1BfU1NUQUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICAgQ2xlYXIgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlCisgICoKKyAgKiBAcGFyYW1baW5dICAgZXBudW0gIFVTQiBlbmRwb2ludCBudW1iZXIKKyAgKgorICAqIEByZXR1cm4gICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICAgQ2xlYXIgVVNCIGVuZHBvaW50IHN0YWxsIHN0YXRlLiBFbmRwb2ludCB3aWxsIHJlc3BvbmQgQUNLL05BSyB0b2tlbi4KKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFVTQkRfQ2xlYXJTdGFsbCh1aW50OF90IGVwbnVtKQoreworICAgIHVpbnQzMl90IHUzMkNmZ0FkZHI7CisgICAgdWludDMyX3QgdTMyQ2ZnOworICAgIHVpbnQzMl90IGk7CisgICAgVVNCRF9UICpwVVNCRDsKKworICAgIGlmKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCkKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRF9OUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcFVTQkQgPSBVU0JEOworICAgIH0KKworICAgIGZvcihpID0gMFVMOyBpIDwgVVNCRF9NQVhfRVA7IGkrKykKKyAgICB7CisgICAgICAgIHUzMkNmZ0FkZHIgPSAodWludDMyX3QpKGkgPDwgNCkgKyAodWludDMyX3QpJnBVU0JELT5FUFswXS5DRkc7IC8qIFVTQkRfQ0ZHMCAqLworICAgICAgICB1MzJDZmcgPSAqKChfX0lPIHVpbnQzMl90ICopKHUzMkNmZ0FkZHIpKTsKKworICAgICAgICBpZigodTMyQ2ZnICYgMHhGVUwpID09IGVwbnVtKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDZmdBZGRyID0gKHVpbnQzMl90KShpIDw8IDQpICsgKHVpbnQzMl90KSZwVVNCRC0+RVBbMF0uQ0ZHUDsgLyogVVNCRF9DRkdQMCAqLworICAgICAgICAgICAgdTMyQ2ZnID0gKigoX19JTyB1aW50MzJfdCAqKSh1MzJDZmdBZGRyKSk7CisKKyAgICAgICAgICAgICooKF9fSU8gdWludDMyX3QgKikodTMyQ2ZnQWRkcikpID0gKHUzMkNmZyAmIH5VU0JEX0NGR1BfU1NUQUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICAgR2V0IFVTQiBlbmRwb2ludCBzdGFsbCBzdGF0ZQorICAqCisgICogQHBhcmFtW2luXSAgIGVwbnVtICBVU0IgZW5kcG9pbnQgbnVtYmVyCisgICoKKyAgKiBAcmV0dmFsICAgICAgMCAgICAgIFVTQiBlbmRwb2ludCBpcyBub3Qgc3RhbGxlZC4KKyAgKiBAcmV0dmFsICAgICAgT3RoZXJzIFVTQiBlbmRwb2ludCBpcyBzdGFsbGVkLgorICAqCisgICogQGRldGFpbHMgICAgIEdldCBVU0IgZW5kcG9pbnQgc3RhbGwgc3RhdGUuCisgICoKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBVU0JEX0dldFN0YWxsKHVpbnQ4X3QgZXBudW0pCit7CisgICAgdWludDMyX3QgdTMyQ2ZnQWRkciA9IDBVTDsKKyAgICB1aW50MzJfdCB1MzJDZmc7CisgICAgdWludDMyX3QgaTsKKyAgICBVU0JEX1QgKnBVU0JEOworCisgICAgaWYoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgcFVTQkQgPSBVU0JEX05TOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwVVNCRCA9IFVTQkQ7CisgICAgfQorCisgICAgZm9yKGkgPSAwVUw7IGkgPCBVU0JEX01BWF9FUDsgaSsrKQorICAgIHsKKyAgICAgICAgdTMyQ2ZnQWRkciA9ICh1aW50MzJfdCkoaSA8PCA0KSArICh1aW50MzJfdCkmcFVTQkQtPkVQWzBdLkNGRzsgLyogVVNCRF9DRkcwICovCisgICAgICAgIHUzMkNmZyA9ICooKF9fSU8gdWludDMyX3QgKikodTMyQ2ZnQWRkcikpOworCisgICAgICAgIGlmKCh1MzJDZmcgJiAweEZVTCkgPT0gZXBudW0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNmZ0FkZHIgPSAodWludDMyX3QpKGkgPDwgNCkgKyAodWludDMyX3QpJnBVU0JELT5FUFswXS5DRkdQOyAvKiBVU0JEX0NGR1AwICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoKCooKF9fSU8gdWludDMyX3QgKikodTMyQ2ZnQWRkcikpKSAmIFVTQkRfQ0ZHUF9TU1RBTEwpOworfQorCitleHRlcm4gdWludDhfdCBnX1VTQkRfYXU4U2V0dXBQYWNrZXRbOF07CitleHRlcm4gdm9sYXRpbGUgdWludDhfdCBnX1VTQkRfdThSZW1vdGVXYWtldXBFbjsKKwordHlwZWRlZiB2b2lkICgqVkVORE9SX1JFUSkodm9pZCk7ICAgICAgICAgICAvKiE8IEZ1bmN0aW9uYWwgcG9pbnRlciB0eXBlIGRlZmluaXRpb24gZm9yIFZlbmRvciBjbGFzcyAqLwordHlwZWRlZiB2b2lkICgqQ0xBU1NfUkVRKSh2b2lkKTsgICAgICAgICAgICAvKiE8IEZ1bmN0aW9uYWwgcG9pbnRlciB0eXBlIGRlY2xhcmF0aW9uIGZvciBVU0IgY2xhc3MgcmVxdWVzdCBjYWxsYmFjayBoYW5kbGVyICovCit0eXBlZGVmIHZvaWQgKCpTRVRfSU5URVJGQUNFX1JFUSkodWludDMyX3QgdTMyQWx0SW50ZXJmYWNlKTsgICAgLyohPCBGdW5jdGlvbmFsIHBvaW50ZXIgdHlwZSBkZWNsYXJhdGlvbiBmb3IgVVNCIHNldCBpbnRlcmZhY2UgcmVxdWVzdCBjYWxsYmFjayBoYW5kbGVyICovCit0eXBlZGVmIHZvaWQgKCpTRVRfQ09ORklHX0NCKSh2b2lkKTsgICAgICAgLyohPCBGdW5jdGlvbmFsIHBvaW50ZXIgdHlwZSBkZWNsYXJhdGlvbiBmb3IgVVNCIHNldCBjb25maWd1cmF0aW9uIHJlcXVlc3QgY2FsbGJhY2sgaGFuZGxlciAqLworCitleHRlcm4gY29uc3QgU19VU0JEX0lORk9fVCAqZ19VU0JEX3NJbmZvOworCitleHRlcm4gVkVORE9SX1JFUSBnX1VTQkRfcGZuVmVuZG9yUmVxdWVzdDsKK2V4dGVybiBDTEFTU19SRVEgZ19VU0JEX3BmbkNsYXNzUmVxdWVzdDsKK2V4dGVybiBTRVRfSU5URVJGQUNFX1JFUSBnX1VTQkRfcGZuU2V0SW50ZXJmYWNlOworZXh0ZXJuIFNFVF9DT05GSUdfQ0IgZ19VU0JEX3BmblNldENvbmZpZ0NhbGxiYWNrOworZXh0ZXJuIHVpbnQzMl90IGdfVVNCRF91MzJFcFN0YWxsTG9jazsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIFVTQkRfT3Blbihjb25zdCBTX1VTQkRfSU5GT19UICpwYXJhbSwgQ0xBU1NfUkVRIHBmbkNsYXNzUmVxLCBTRVRfSU5URVJGQUNFX1JFUSBwZm5TZXRJbnRlcmZhY2UpOwordm9pZCBVU0JEX1N0YXJ0KHZvaWQpOwordm9pZCBVU0JEX0dldFNldHVwUGFja2V0KHVpbnQ4X3QgKmJ1Zik7Cit2b2lkIFVTQkRfUHJvY2Vzc1NldHVwUGFja2V0KHZvaWQpOwordm9pZCBVU0JEX0dldERlc2NyaXB0b3Iodm9pZCk7Cit2b2lkIFVTQkRfU3RhbmRhcmRSZXF1ZXN0KHZvaWQpOwordm9pZCBVU0JEX1ByZXBhcmVDdHJsSW4odWludDhfdCBwdThCdWZbXSwgdWludDMyX3QgdTMyU2l6ZSk7Cit2b2lkIFVTQkRfQ3RybEluKHZvaWQpOwordm9pZCBVU0JEX1ByZXBhcmVDdHJsT3V0KHVpbnQ4X3QgKnB1OEJ1ZiwgdWludDMyX3QgdTMyU2l6ZSk7Cit2b2lkIFVTQkRfQ3RybE91dCh2b2lkKTsKK3ZvaWQgVVNCRF9Td1Jlc2V0KHZvaWQpOwordm9pZCBVU0JEX1NldFZlbmRvclJlcXVlc3QoVkVORE9SX1JFUSBwZm5WZW5kb3JSZXEpOwordm9pZCBVU0JEX1NldENvbmZpZ0NhbGxiYWNrKFNFVF9DT05GSUdfQ0IgcGZuU2V0Q29uZmlnQ2FsbGJhY2spOwordm9pZCBVU0JEX0xvY2tFcFN0YWxsKHVpbnQzMl90IHUzMkVwQml0bWFwKTsKKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQkRfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNCRF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVVNCRF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdXNjaV9pMmMuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VzY2lfaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5ZjFiYwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VzY2lfaTJjLmgKQEAgLTAsMCArMSwzMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBVU0NJX0kyQy5oCisgKiBAdmVyc2lvbiAgVjMuMAorICogJFJldmlzaW9uOiAxICQKKyAqICREYXRlOiAxNi8wNy8wNyA3OjUwcCAkCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFVTQ0kgSTJDKFVJMkMpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1VTQ0lfSTJDX0hfXworI2RlZmluZSBfX1VTQ0lfSTJDX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVVNDSV9JMkNfRHJpdmVyIFVTQ0lfSTJDIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfSTJDX0VYUE9SVEVEX0NPTlNUQU5UUyBVU0NJX0kyQyBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVTQ0lfSTJDIG1hc3RlciBldmVudCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2VudW0gVUkyQ19NQVNURVJfRVZFTlQKK3sKKyAgICBNQVNURVJfU0VORF9BRERSRVNTID0gMTB1LCAgICAvKiE8IE1hc3RlciBzZW5kIGFkZHJlc3MgdG8gU2xhdmUgKi8KKyAgICBNQVNURVJfU0VORF9IX1dSX0FERFJFU1MsICAgIC8qITwgTWFzdGVyIHNlbmQgSGlnaCBhZGRyZXNzIHRvIFNsYXZlICovCisgICAgTUFTVEVSX1NFTkRfSF9SRF9BRERSRVNTLCAgICAvKiE8IE1hc3RlciBzZW5kIGFkZHJlc3MgdG8gU2xhdmUgKFJlYWQgQUREUikgKi8KKyAgICBNQVNURVJfU0VORF9MX0FERFJFU1MsICAgICAgIC8qITwgTWFzdGVyIHNlbmQgTG93IGFkZHJlc3MgdG8gU2xhdmUgKi8KKyAgICBNQVNURVJfU0VORF9EQVRBLCAgICAgICAgICAgIC8qITwgTWFzdGVyIFNlbmQgRGF0YSB0byBTbGF2ZSAqLworICAgIE1BU1RFUl9TRU5EX1JFUEVBVF9TVEFSVCwgICAgLyohPCBNYXN0ZXIgc2VuZCByZXBlYXQgc3RhcnQgdG8gU2xhdmUgKi8KKyAgICBNQVNURVJfUkVBRF9EQVRBLCAgICAgICAgICAgIC8qITwgTWFzdGVyIEdldCBEYXRhIGZyb20gU2xhdmUgKi8KKyAgICBNQVNURVJfU1RPUCwgICAgICAgICAgICAgICAgIC8qITwgTWFzdGVyIHNlbmQgc3RvcCB0byBTbGF2ZSAqLworICAgIE1BU1RFUl9TRU5EX1NUQVJUICAgICAgICAgICAgLyohPCBNYXN0ZXIgc2VuZCBzdGFydCB0byBTbGF2ZSAqLworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVVNDSV9JMkMgc2xhdmUgZXZlbnQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZW51bSBVSTJDX1NMQVZFX0VWRU5UCit7CisgICAgU0xBVkVfQUREUkVTU19BQ0sgPSAxMDB1LCAgICAgIC8qITwgU2xhdmUgc2VuZCBhZGRyZXNzIEFDSyAqLworICAgIFNMQVZFX0hfV1JfQUREUkVTU19BQ0ssICAgICAgIC8qITwgU2xhdmUgc2VuZCBIaWdoIGFkZHJlc3MgQUNLICovCisgICAgU0xBVkVfTF9XUl9BRERSRVNTX0FDSywgICAgICAgLyohPCBTbGF2ZSBzZW5kIExvdyBhZGRyZXNzIEFDSyAqLworICAgIFNMQVZFX0dFVF9EQVRBLCAgICAgICAgICAgICAgIC8qITwgU2xhdmUgR2V0IERhdGEgZnJvbSBNYXN0ZXIgKFdyaXRlIENNRCkgKi8KKyAgICBTTEFWRV9TRU5EX0RBVEEsICAgICAgICAgICAgICAvKiE8IFNsYXZlIFNlbmQgRGF0YSB0byBNYXN0ZXIgKFJlYWQgQ01EKSAqLworICAgIFNMQVZFX0hfUkRfQUREUkVTU19BQ0ssICAgICAgIC8qITwgU2xhdmUgc2VuZCBIaWdoIGFkZHJlc3MgQUNLICovCisgICAgU0xBVkVfTF9SRF9BRERSRVNTX0FDSyAgICAgICAgLyohPCBTbGF2ZSBzZW5kIExvdyBhZGRyZXNzIEFDSyAqLworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFVTQ0lfQ1RMIGNvbnN0YW50IGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVSTJDX0NUTF9QVFJHICAgICAgICAgICAgICAoMHgyMFUpICAgIC8qITwgVVNDSV9DVEwgc2V0dGluZyBmb3IgSTJDIGNvbnRyb2wgYml0cy4gSXQgd291bGQgc2V0IFBUUkcgYml0ICovCisjZGVmaW5lIFVJMkNfQ1RMX1NUQSAgICAgICAgICAgICAgICgweDA4VSkgICAgLyohPCBVU0NJX0NUTCBzZXR0aW5nIGZvciBJMkMgY29udHJvbCBiaXRzLiBJdCB3b3VsZCBzZXQgU1RBIGJpdCAqLworI2RlZmluZSBVSTJDX0NUTF9TVE8gICAgICAgICAgICAgICAoMHgwNFUpICAgIC8qITwgVVNDSV9DVEwgc2V0dGluZyBmb3IgSTJDIGNvbnRyb2wgYml0cy4gSXQgd291bGQgc2V0IFNUTyBiaXQgKi8KKyNkZWZpbmUgVUkyQ19DVExfQUEgICAgICAgICAgICAgICAgKDB4MDJVKSAgICAvKiE8IFVTQ0lfQ1RMIHNldHRpbmcgZm9yIEkyQyBjb250cm9sIGJpdHMuIEl0IHdvdWxkIHNldCBBQSBiaXQgICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBVU0NJX0kyQyBHQ01vZGUgY29uc3RhbnQgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUkyQ19HQ01PREVfRU5BQkxFICAgICAgICAgKDFVKSAgICAvKiE8IEVuYWJsZSAgVVNDSV9JMkMgR0MgTW9kZSAqLworI2RlZmluZSBVSTJDX0dDTU9ERV9ESVNBQkxFICAgICAgICAoMFUpICAgIC8qITwgRGlzYWJsZSBVU0NJX0kyQyBHQyBNb2RlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBVU0NJX0kyQyBXYWtldXAgTW9kZSBjb25zdGFudCBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUkyQ19EQVRBX1RPR0dMRV9XSyAgICAgICAgKDB4MFUgPDwgVUkyQ19XS0NUTF9XS0FERFJFTl9Qb3MpICAgIC8qITwgV2FrZXVwIGFjY29yZGluZyBkYXRhIHRvZ2dsZSAqLworI2RlZmluZSBVSTJDX0FERFJfTUFUQ0hfV0sgICAgICAgICAoMHgxVSA8PCBVSTJDX1dLQ1RMX1dLQUREUkVOX1BvcykgICAgLyohPCBXYWtldXAgYWNjb3JkaW5nIGFkZHJlc3MgbWF0Y2ggKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVVNDSV9JMkMgaW50ZXJydXB0IG1hc2sgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVSTJDX1RPX0lOVF9NQVNLICAgICAgICAgICAoMHgwMDFVKSAgICAvKiE8IFRpbWUtb3V0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVJMkNfU1RBUl9JTlRfTUFTSyAgICAgICAgICgweDAwMlUpICAgIC8qITwgU3RhcnQgY29uZGl0aW9uIHJlY2VpdmVkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVJMkNfU1RPUl9JTlRfTUFTSyAgICAgICAgICgweDAwNFUpICAgIC8qITwgU3RvcCBjb25kaXRpb24gcmVjZWl2ZWQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUkyQ19OQUNLX0lOVF9NQVNLICAgICAgICAgKDB4MDA4VSkgICAgLyohPCBOb24tYWNrbm93bGVkZ2UgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUkyQ19BUkJMT19JTlRfTUFTSyAgICAgICAgKDB4MDEwVSkgICAgLyohPCBBcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVJMkNfRVJSX0lOVF9NQVNLICAgICAgICAgICgweDAyMFUpICAgIC8qITwgRXJyb3IgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUkyQ19BQ0tfSU5UX01BU0sgICAgICAgICAgKDB4MDQwVSkgICAgLyohPCBBY2tub3dsZWRnZSBpbnRlcnJ1cHQgbWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfSTJDX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX0kyQ19FWFBPUlRFRF9GVU5DVElPTlMgVVNDSV9JMkMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBtYWNybyBzZXRzIHRoZSBVU0NJX0kyQyBwcm90b2NvbCBjb250cm9sIHJlZ2lzdGVyIGF0IG9uZSB0aW1lCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHU4Q3RybCAgICBTZXQgdGhlIHJlZ2lzdGVyIHZhbHVlIG9mIFVTQ0lfSTJDIGNvbnRyb2wgcmVnaXN0ZXIuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBTZXQgVUkyQ19QUk9UQ1RMIHJlZ2lzdGVyIHRvIGNvbnRyb2wgVVNDSV9JMkMgYnVzIGNvbmRpdGlvbnMgb2YgU1RBUlQsIFNUT1AsIFBUUkcsIEFDSy4KKyAqLworI2RlZmluZSBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpICgodWkyYyktPlBST1RDVEwgPSAoKHVpMmMpLT5QUk9UQ1RMICYgfjB4MkVVKSB8ICh1OEN0cmwpKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBtYWNybyBvbmx5IHNldCBTVEFSVCBiaXQgdG8gcHJvdG9jb2wgY29udHJvbCByZWdpc3RlciBvZiBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBTZXQgdGhlIFVTQ0lfSTJDIGJ1cyBTVEFSVCBjb25kaXRpb24gaW4gVUkyQ19QUk9UQ1RMIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFVJMkNfU1RBUlQodWkyYykgKCh1aTJjKS0+UFJPVENUTCA9ICgodWkyYyktPlBST1RDVEwgJiB+VUkyQ19QUk9UQ1RMX1BUUkdfTXNrKSB8IFVJMkNfUFJPVENUTF9TVEFfTXNrKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBtYWNybyBvbmx5IHNldCBTVE9QIGJpdCB0byB0aGUgY29udHJvbCByZWdpc3RlciBvZiBVU0NJX0kyQyBtb2R1bGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFNldCB0aGUgVVNDSV9JMkMgYnVzIFNUT1AgY29uZGl0aW9uIGluIFVJMkNfUFJPVENUTCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBVSTJDX1NUT1AodWkyYykgKCh1aTJjKS0+UFJPVENUTCA9ICgodWkyYyktPlBST1RDVEwgJiB+MHgyRSkgfCAoVUkyQ19QUk9UQ1RMX1BUUkdfTXNrIHwgVUkyQ19QUk9UQ1RMX1NUT19Nc2spKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBtYWNybyByZXR1cm5zIHRoZSBkYXRhIHN0b3JlZCBpbiBkYXRhIHJlZ2lzdGVyIG9mIFVTQ0lfSTJDIG1vZHVsZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgRGF0YQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgUmVhZCBhIGJ5dGUgZGF0YSB2YWx1ZSBvZiBVSTJDX1JYREFUIHJlZ2lzdGVyIGZyb20gVVNDSV9JMkMgYnVzCisgKi8KKyNkZWZpbmUgVUkyQ19HRVRfREFUQSh1aTJjKSAoKHVpMmMpLT5SWERBVCkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gd3JpdGVzIHRoZSBkYXRhIHRvIGRhdGEgcmVnaXN0ZXIgb2YgVVNDSV9JMkMgbW9kdWxlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdThEYXRhICAgVGhlIGRhdGEgd2hpY2ggd2lsbCBiZSB3cml0dGVuIHRvIGRhdGEgcmVnaXN0ZXIgb2YgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgV3JpdGUgYSBieXRlIGRhdGEgdmFsdWUgb2YgVUkyQ19UWERBVCByZWdpc3RlciwgdGhlbiBzZW5kcyBhZGRyZXNzIG9yIGRhdGEgdG8gVVNDSSBJMkMgYnVzCisgKi8KKyNkZWZpbmUgVUkyQ19TRVRfREFUQSh1aTJjLCB1OERhdGEpICgodWkyYyktPlRYREFUID0gKHU4RGF0YSkpCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIG1hY3JvIHJldHVybnMgdGltZS1vdXQgZmxhZworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHZhbCAgICAgICAwICAgICAgICBVU0NJX0kyQyBidXMgdGltZS1vdXQgaXMgbm90IGhhcHBlbmVkCisgKiAgICBAcmV0dmFsICAgICAgIDEgICAgICAgIFVTQ0lfSTJDIGJ1cyB0aW1lLW91dCBpcyBoYXBwZW5lZAorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVVNDSV9JMkMgYnVzIG9jY3VycyB0aW1lLW91dCBldmVudCwgdGhlIHRpbWUtb3V0IGZsYWcgd2lsbCBiZSBzZXQuIElmIG5vdCBvY2N1cnMgdGltZS1vdXQgZXZlbnQsIHRoaXMgYml0IGlzIGNsZWFyZWQuCisgKi8KKyNkZWZpbmUgVUkyQ19HRVRfVElNRU9VVF9GTEFHKHVpMmMpICgoKHVpMmMpLT5QUk9UU1RTICYgVUkyQ19QUk9UU1RTX1RPSUZfTXNrKSA9PSBVSTJDX1BST1RTVFNfVE9JRl9Nc2sgPyAxOjApCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIG1hY3JvIHJldHVybnMgd2FrZS11cCBmbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICAgICAgIENoaXAgaXMgbm90IHdva2VuLXVwIGZyb20gcG93ZXItZG93biBtb2RlCisgKiAgICBAcmV0dmFsICAgICAgIDEgICAgICAgIENoaXAgaXMgd29rZW4tdXAgZnJvbSBwb3dlci1kb3duIG1vZGUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFVTQ0lfSTJDIGNvbnRyb2xsZXIgd2FrZS11cCBmbGFnIHdpbGwgYmUgc2V0IHdoZW4gVVNDSV9JMkMgYnVzIG9jY3VycyB3YWtlLXVwIGZyb20gZGVlcC1zbGVlcC4KKyAqLworI2RlZmluZSBVSTJDX0dFVF9XQUtFVVBfRkxBRyh1aTJjKSAoKCh1aTJjKS0+V0tTVFMgJiBVSTJDX1dLU1RTX1dLRl9Nc2spID09IFVJMkNfV0tTVFNfV0tGX01zayA/IDE6MCkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBVU0NJX0kyQyB3YWtlLXVwIGZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgSWYgVVNDSV9JMkMgd2FrZS11cCBmbGFnIGlzIHNldCwgdXNlIHRoaXMgbWFjcm8gdG8gY2xlYXIgaXQuCisgKi8KKyNkZWZpbmUgVUkyQ19DTFJfV0FLRVVQX0ZMQUcodWkyYykgICgodWkyYyktPldLU1RTID0gVUkyQ19XS1NUU19XS0ZfTXNrKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBtYWNybyBkaXNhYmxlcyB0aGUgVVNDSV9JMkMgMTAtYml0IGFkZHJlc3MgbW9kZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgVUkyQ19JMkMgaXMgNy1iaXQgYWRkcmVzcyBtb2RlLCB3aGVuIGRpc2FibGUgVVNDSV9JMkMgMTAtYml0IGFkZHJlc3MgbWF0Y2ggZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgVUkyQ19ESVNBQkxFXzEwQklUX0FERFJfTU9ERSh1aTJjKSAgKCh1aTJjKS0+UFJPVENUTCAmPSB+KFVJMkNfUFJPVENUTF9BRERSMTBFTl9Nc2spKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBtYWNybyBlbmFibGVzIHRoZSAxMC1iaXQgYWRkcmVzcyBtb2RlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRvIGVuYWJsZSBVU0NJX0kyQyAxMC1iaXQgYWRkcmVzcyBtYXRjaCBmdW5jdGlvbi4KKyAqLworI2RlZmluZSBVSTJDX0VOQUJMRV8xMEJJVF9BRERSX01PREUodWkyYykgICgodWkyYyktPlBST1RDVEwgfD0gVUkyQ19QUk9UQ1RMX0FERFIxMEVOX01zaykKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gZ2V0cyBVU0NJX0kyQyBwcm90b2NvbCBpbnRlcnJ1cHQgZmxhZyBvciBidXMgc3RhdHVzCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIEEgd29yZCBkYXRhIG9mIFVTQ0lfSTJDX1BST1RTVFMgcmVnaXN0ZXIKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFJlYWQgYSB3b3JkIGRhdGEgb2YgVVNDSV9JMkMgUFJPVFNUUyByZWdpc3RlciB0byBnZXQgVVNDSV9JMkMgYnVzIEludGVycnVwdCBmbGFncyBvciBzdGF0dXMuCisgKi8KKyNkZWZpbmUgVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgICAgKCh1aTJjKS0+UFJPVFNUUykKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gY2xlYXJzIHNwZWNpZmllZCBwcm90b2NvbCBpbnRlcnJ1cHQgZmxhZworICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50VHlwZUZsYWcgSW50ZXJydXB0IFR5cGUgRmxhZywgc2hvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9UU1RTX0FDS0lGX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVFNUU19FUlJJRl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1BST1RTVFNfQVJCTE9JRl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1BST1RTVFNfTkFDS0lGX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1BST1RTVFNfVE9JRl9Nc2sKKyAqICAgIEByZXR1cm4gTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVG8gY2xlYXIgaW50ZXJydXB0IGZsYWcgd2hlbiBVU0NJX0kyQyBvY2N1cnMgaW50ZXJydXB0IGFuZCBzZXQgaW50ZXJydXB0IGZsYWcuCisgKi8KKyNkZWZpbmUgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLHUzMkludFR5cGVGbGFnKSAgICAoKHVpMmMpLT5QUk9UU1RTID0gKHUzMkludFR5cGVGbGFnKSkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgbWFjcm8gZW5hYmxlcyBzcGVjaWZpZWQgcHJvdG9jb2wgaW50ZXJydXB0CisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRTZWwgSW50ZXJydXB0IFR5cGUsIHNob3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9BQ0tJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX0VSUklFTl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1BST1RJRU5fQVJCTE9JRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX05BQ0tJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX1NUT1JJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX1NUQVJJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX1RPSUVOX01zaworICogICAgQHJldHVybiBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBTZXQgc3BlY2lmaWVkIFVTQ0lfSTJDIHByb3RvY29sIGludGVycnVwdCBiaXRzIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgVUkyQ19FTkFCTEVfUFJPVF9JTlQodWkyYywgdTMySW50U2VsKSAgICAoKHVpMmMpLT5QUk9USUVOIHw9ICh1MzJJbnRTZWwpKQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBtYWNybyBkaXNhYmxlcyBzcGVjaWZpZWQgcHJvdG9jb2wgaW50ZXJydXB0CisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRTZWwgSW50ZXJydXB0IFR5cGUsIHNob3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfUFJPVElFTl9BQ0tJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX0VSUklFTl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1BST1RJRU5fQVJCTE9JRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX05BQ0tJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX1NUT1JJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX1NUQVJJRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19QUk9USUVOX1RPSUVOX01zaworICogICAgQHJldHVybiBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBDbGVhciBzcGVjaWZpZWQgVVNDSV9JMkMgcHJvdG9jb2wgaW50ZXJydXB0IGJpdHMgdG8gZGlzYWJsZSBpbnRlcnJ1cHQgZnVudGlvbi4KKyAqLworI2RlZmluZSBVSTJDX0RJU0FCTEVfUFJPVF9JTlQodWkyYywgdTMySW50U2VsKSAgICAoKHVpMmMpLT5QUk9USUVOICY9IH4gKHUzMkludFNlbCkpCisKKwordWludDMyX3QgVUkyQ19PcGVuKFVJMkNfVCAqdWkyYywgdWludDMyX3QgdTMyQnVzQ2xvY2spOwordm9pZCBVSTJDX0Nsb3NlKFVJMkNfVCAqdWkyYyk7Cit2b2lkIFVJMkNfQ2xlYXJUaW1lb3V0RmxhZyhVSTJDX1QgKnVpMmMpOwordm9pZCBVSTJDX1RyaWdnZXIoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U3RhcnQsIHVpbnQ4X3QgdThTdG9wLCB1aW50OF90IHU4UHRyZywgdWludDhfdCB1OEFjayk7Cit2b2lkIFVJMkNfRGlzYWJsZUludChVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBVSTJDX0VuYWJsZUludChVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMk1hc2spOwordWludDMyX3QgVUkyQ19HZXRCdXNDbG9ja0ZyZXEoVUkyQ19UICp1aTJjKTsKK3VpbnQzMl90IFVJMkNfU2V0QnVzQ2xvY2tGcmVxKFVJMkNfVCAqdWkyYywgdWludDMyX3QgdTMyQnVzQ2xvY2spOwordWludDMyX3QgVUkyQ19HZXRJbnRGbGFnKFVJMkNfVCAqdWkyYywgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFVJMkNfQ2xlYXJJbnRGbGFnKFVJMkNfVCogdWkyYywgdWludDMyX3QgdTMyTWFzayk7Cit1aW50MzJfdCBVSTJDX0dldERhdGEoVUkyQ19UICp1aTJjKTsKK3ZvaWQgVUkyQ19TZXREYXRhKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OERhdGEpOwordm9pZCBVSTJDX1NldFNsYXZlQWRkcihVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZU5vLCB1aW50MTZfdCB1MTZTbGF2ZUFkZHIsIHVpbnQ4X3QgdThHQ01vZGUpOwordm9pZCBVSTJDX1NldFNsYXZlQWRkck1hc2soVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVObywgdWludDE2X3QgdTE2U2xhdmVBZGRyTWFzayk7Cit2b2lkIFVJMkNfRW5hYmxlVGltZW91dChVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMlRpbWVvdXRDbnQpOwordm9pZCBVSTJDX0Rpc2FibGVUaW1lb3V0KFVJMkNfVCAqdWkyYyk7Cit2b2lkIFVJMkNfRW5hYmxlV2FrZXVwKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFdha2V1cE1vZGUpOwordm9pZCBVSTJDX0Rpc2FibGVXYWtldXAoVUkyQ19UICp1aTJjKTsKK3VpbnQ4X3QgVUkyQ19Xcml0ZUJ5dGUoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IGRhdGEpOwordWludDMyX3QgVUkyQ19Xcml0ZU11bHRpQnl0ZXMoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IGRhdGFbXSwgdWludDMyX3QgdTMyd0xlbik7Cit1aW50OF90IFVJMkNfV3JpdGVCeXRlT25lUmVnKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90IGRhdGEpOwordWludDMyX3QgVUkyQ19Xcml0ZU11bHRpQnl0ZXNPbmVSZWcoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YUFkZHIsIHVpbnQ4X3QgZGF0YVtdLCB1aW50MzJfdCB1MzJ3TGVuKTsKK3VpbnQ4X3QgVUkyQ19Xcml0ZUJ5dGVUd29SZWdzKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIsIHVpbnQ4X3QgZGF0YSk7Cit1aW50MzJfdCBVSTJDX1dyaXRlTXVsdGlCeXRlc1R3b1JlZ3MoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkciwgdWludDhfdCBkYXRhW10sIHVpbnQzMl90IHUzMndMZW4pOwordWludDhfdCBVSTJDX1JlYWRCeXRlKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkcik7Cit1aW50MzJfdCBVSTJDX1JlYWRNdWx0aUJ5dGVzKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCByZGF0YVtdLCB1aW50MzJfdCB1MzJyTGVuKTsKK3VpbnQ4X3QgVUkyQ19SZWFkQnl0ZU9uZVJlZyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkcik7Cit1aW50MzJfdCBVSTJDX1JlYWRNdWx0aUJ5dGVzT25lUmVnKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90IHJkYXRhW10sIHVpbnQzMl90IHUzMnJMZW4pOwordWludDhfdCBVSTJDX1JlYWRCeXRlVHdvUmVncyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQxNl90IHUxNkRhdGFBZGRyKTsKK3VpbnQzMl90IFVJMkNfUmVhZE11bHRpQnl0ZXNUd29SZWdzKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIsIHVpbnQ4X3QgcmRhdGFbXSwgdWludDMyX3QgdTMyckxlbik7CisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfSTJDX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfSTJDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9pbmMvdXNjaV9zcGkuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VzY2lfc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmMWY0MAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VzY2lfc3BpLmgKQEAgLTAsMCArMSw0MjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHVzY2lfc3BpLmgKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBVU0NJX1NQSSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1VTQ0lfU1BJX0hfXworI2RlZmluZSBfX1VTQ0lfU1BJX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVVNDSV9TUElfRHJpdmVyIFVTQ0lfU1BJIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfU1BJX0VYUE9SVEVEX0NPTlNUQU5UUyBVU0NJX1NQSSBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKyNkZWZpbmUgVVNQSV9NT0RFXzAgICAgICAgICgweDBVTCA8PCBVU1BJX1BST1RDVExfU0NMS01PREVfUG9zKSAgICAgICAgLyohPCBTQ0xLIGlkbGUgbG93OyBkYXRhIHRyYW5zbWl0IHdpdGggZmFsbGluZyBlZGdlIGFuZCByZWNlaXZlIHdpdGggcmlzaW5nIGVkZ2UgKi8KKyNkZWZpbmUgVVNQSV9NT0RFXzEgICAgICAgICgweDFVTCA8PCBVU1BJX1BST1RDVExfU0NMS01PREVfUG9zKSAgICAgICAgLyohPCBTQ0xLIGlkbGUgbG93OyBkYXRhIHRyYW5zbWl0IHdpdGggcmlzaW5nIGVkZ2UgYW5kIHJlY2VpdmUgd2l0aCBmYWxsaW5nIGVkZ2UgKi8KKyNkZWZpbmUgVVNQSV9NT0RFXzIgICAgICAgICgweDJVTCA8PCBVU1BJX1BST1RDVExfU0NMS01PREVfUG9zKSAgICAgICAgLyohPCBTQ0xLIGlkbGUgaGlnaDsgZGF0YSB0cmFuc21pdCB3aXRoIHJpc2luZyBlZGdlIGFuZCByZWNlaXZlIHdpdGggZmFsbGluZyBlZGdlICovCisjZGVmaW5lIFVTUElfTU9ERV8zICAgICAgICAoMHgzVUwgPDwgVVNQSV9QUk9UQ1RMX1NDTEtNT0RFX1BvcykgICAgICAgIC8qITwgU0NMSyBpZGxlIGhpZ2g7IGRhdGEgdHJhbnNtaXQgd2l0aCBmYWxsaW5nIGVkZ2UgYW5kIHJlY2VpdmUgd2l0aCByaXNpbmcgZWRnZSAqLworCisjZGVmaW5lIFVTUElfU0xBVkUgICAgICAgICAoVVNQSV9QUk9UQ1RMX1NMQVZFX01zaykgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IGFzIHNsYXZlICovCisjZGVmaW5lIFVTUElfTUFTVEVSICAgICAgICAoMHgwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IGFzIG1hc3RlciAqLworCisjZGVmaW5lIFVTUElfU1MgICAgICAgICAgICAgICAgKFVTUElfUFJPVENUTF9TU19Nc2spICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IFNTICovCisjZGVmaW5lIFVTUElfU1NfQUNUSVZFX0hJR0ggICAgKDB4MFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1MgYWN0aXZlIGhpZ2ggKi8KKyNkZWZpbmUgVVNQSV9TU19BQ1RJVkVfTE9XICAgICAoVVNQSV9MSU5FQ1RMX0NUTE9JTlZfTXNrKSAgICAgICAgICAgICAgLyohPCBTUyBhY3RpdmUgbG93ICovCisKKy8qIFVTQ0lfU1BJIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIFVTUElfU1NJTkFDVF9JTlRfTUFTSyAgICAgICAgKDB4MDAxVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgU2xhdmUgSW5hY3RpdmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVNQSV9TU0FDVF9JTlRfTUFTSyAgICAgICAgICAoMHgwMDJVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSBTbGF2ZSBBY3RpdmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVNQSV9TTFZUT19JTlRfTUFTSyAgICAgICAgICAoMHgwMDRVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSBNb2RlIFRpbWUtb3V0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVTUElfU0xWQkVfSU5UX01BU0sgICAgICAgICAgKDB4MDA4VUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgTW9kZSBCaXQgQ291bnQgRXJyb3IgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVNQSV9UWFVEUl9JTlRfTUFTSyAgICAgICAgICAoMHgwMTBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSBUcmFuc21pdCBVbmRlciBSdW4gaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVNQSV9SWE9WX0lOVF9NQVNLICAgICAgICAgICAoMHgwMjBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlIEJ1ZmZlciBPdmVycnVuIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVTUElfVFhTVF9JTlRfTUFTSyAgICAgICAgICAgKDB4MDQwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNtaXQgU3RhcnQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVNQSV9UWEVORF9JTlRfTUFTSyAgICAgICAgICAoMHgwODBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUcmFuc21pdCBFbmQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVNQSV9SWFNUX0lOVF9NQVNLICAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlIFN0YXJ0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVTUElfUlhFTkRfSU5UX01BU0sgICAgICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBFbmQgaW50ZXJydXB0IG1hc2sgKi8KKworLyogVVNDSV9TUEkgU3RhdHVzIE1hc2sgKi8KKyNkZWZpbmUgVVNQSV9CVVNZX01BU0sgICAgICAgICAgICAgICAoMHgwMVVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCdXN5IHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFVTUElfUlhfRU1QVFlfTUFTSyAgICAgICAgICAgKDB4MDJVTCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlggZW1wdHkgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgVVNQSV9SWF9GVUxMX01BU0sgICAgICAgICAgICAoMHgwNFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWCBmdWxsIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFVTUElfVFhfRU1QVFlfTUFTSyAgICAgICAgICAgKDB4MDhVTCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFggZW1wdHkgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgVVNQSV9UWF9GVUxMX01BU0sgICAgICAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWCBmdWxsIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFVTUElfU1NMSU5FX1NUU19NQVNLICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVVNDSV9TUElfU1MgbGluZSBzdGF0dXMgbWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfU1BJX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX1NQSV9FWFBPUlRFRF9GVU5DVElPTlMgVVNDSV9TUEkgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgc2xhdmUgMy13aXJlIG1vZGUuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfRElTQUJMRV8zV0lSRV9NT0RFKHVzcGkpICggKHVzcGkpLT5QUk9UQ1RMICY9IH5VU1BJX1BST1RDVExfU0xWM1dJUkVfTXNrICkKKworLyoqCisgICogQGJyaWVmICBFbmFibGUgc2xhdmUgMy13aXJlIG1vZGUuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfRU5BQkxFXzNXSVJFX01PREUodXNwaSkgKCAodXNwaSktPlBST1RDVEwgfD0gVVNQSV9QUk9UQ1RMX1NMVjNXSVJFX01zayApCisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBSeCBidWZmZXIgZW1wdHkgZmxhZy4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gUnggYnVmZmVyIGZsYWcKKyAgKiBAcmV0dmFsIDA6IFJ4IGJ1ZmZlciBpcyBub3QgZW1wdHkKKyAgKiBAcmV0dmFsIDE6IFJ4IGJ1ZmZlciBpcyBlbXB0eQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9HRVRfUlhfRU1QVFlfRkxBRyh1c3BpKSAoICgodXNwaSktPkJVRlNUUyAmIFVTUElfQlVGU1RTX1JYRU1QVFlfTXNrKSA9PSBVU1BJX0JVRlNUU19SWEVNUFRZX01zayA/IDE6MCApCisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBUeCBidWZmZXIgZW1wdHkgZmxhZy4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gVHggYnVmZmVyIGZsYWcKKyAgKiBAcmV0dmFsIDA6IFR4IGJ1ZmZlciBpcyBub3QgZW1wdHkKKyAgKiBAcmV0dmFsIDE6IFR4IGJ1ZmZlciBpcyBlbXB0eQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9HRVRfVFhfRU1QVFlfRkxBRyh1c3BpKSAoICgodXNwaSktPkJVRlNUUyAmIFVTUElfQlVGU1RTX1RYRU1QVFlfTXNrKSA9PSBVU1BJX0JVRlNUU19UWEVNUFRZX01zayA/IDE6MCApCisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBUeCBidWZmZXIgZnVsbCBmbGFnLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBUeCBidWZmZXIgZmxhZworICAqIEByZXR2YWwgMDogVHggYnVmZmVyIGlzIG5vdCBmdWxsCisgICogQHJldHZhbCAxOiBUeCBidWZmZXIgaXMgZnVsbAorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9HRVRfVFhfRlVMTF9GTEFHKHVzcGkpICggKCh1c3BpKS0+QlVGU1RTICYgVVNQSV9CVUZTVFNfVFhGVUxMX01zaykgPT0gVVNQSV9CVUZTVFNfVFhGVUxMX01zayA/IDE6MCApCisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBkYXR1bSByZWFkIGZyb20gUlggcmVnaXN0ZXIuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIGRhdGEgaW4gUnggcmVnaXN0ZXIKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfUkVBRF9SWCh1c3BpKSAoICh1c3BpKS0+UlhEQVQgKQorCisvKioKKyAgKiBAYnJpZWYgIFdyaXRlIGRhdHVtIHRvIFRYIHJlZ2lzdGVyLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVHhEYXRhIFRoZSBkYXR1bSB3aGljaCB1c2VyIGF0dGVtcHQgdG8gdHJhbnNmZXIgdGhyb3VnaCBVU0NJX1NQSSBidXMuCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX1dSSVRFX1RYKHVzcGksIHUzMlR4RGF0YSkgKCAodXNwaSktPlRYREFUID0gKHUzMlR4RGF0YSkgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgVVNDSV9TUElfU1MgcGluIHRvIGhpZ2ggc3RhdGUuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIERpc2FibGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbiBhbmQgc2V0IFVTQ0lfU1BJX1NTIHBpbiB0byBoaWdoIHN0YXRlLiBPbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfU0VUX1NTX0hJR0godXNwaSkgXAorICAgIGRveyBcCisgICAgICAgICh1c3BpKS0+TElORUNUTCAmPSB+VVNQSV9MSU5FQ1RMX0NUTE9JTlZfTXNrOyBcCisgICAgICAgICh1c3BpKS0+UFJPVENUTCA9ICgoKHVzcGkpLT5QUk9UQ1RMICYgflVTUElfUFJPVENUTF9BVVRPU1NfTXNrKSB8IFVTUElfUFJPVENUTF9TU19Nc2spOyBcCisgICAgfXdoaWxlKDApCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBVU0NJX1NQSV9TUyBwaW4gdG8gbG93IHN0YXRlLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBEaXNhYmxlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gYW5kIHNldCBVU0NJX1NQSV9TUyBwaW4gdG8gbG93IHN0YXRlLiBPbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfU0VUX1NTX0xPVyh1c3BpKSBcCisgICAgZG97IFwKKyAgICAgICAgKHVzcGkpLT5MSU5FQ1RMIHw9IFVTUElfTElORUNUTF9DVExPSU5WX01zazsgXAorICAgICAgICAodXNwaSktPlBST1RDVEwgPSAoKCh1c3BpKS0+UFJPVENUTCAmIH5VU1BJX1BST1RDVExfQVVUT1NTX01zaykgfCBVU1BJX1BST1RDVExfU1NfTXNrKTsgXAorICAgIH13aGlsZSgwKQorCisvKioKKyAgKiBAYnJpZWYgIFNldCB0aGUgbGVuZ3RoIG9mIHN1c3BlbmQgaW50ZXJ2YWwuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJTdXNwQ3ljbGUgRGVjaWRlIHRoZSBsZW5ndGggb2Ygc3VzcGVuZCBpbnRlcnZhbC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfU0VUX1NVU1BFTkRfQ1lDTEUodXNwaSwgdTMyU3VzcEN5Y2xlKSAoICh1c3BpKS0+UFJPVENUTCA9ICgodXNwaSktPlBST1RDVEwgJiB+VVNQSV9QUk9UQ1RMX1NVU1BJVFZfTXNrKSB8ICgodTMyU3VzcEN5Y2xlKSA8PCBVU1BJX1BST1RDVExfU1VTUElUVl9Qb3MpICkKKworLyoqCisgICogQGJyaWVmICBTZXQgdGhlIFVTQ0lfU1BJIHRyYW5zZmVyIHNlcXVlbmNlIHdpdGggTFNCIGZpcnN0LgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX1NFVF9MU0JfRklSU1QodXNwaSkgKCAodXNwaSktPkxJTkVDVEwgfD0gVVNQSV9MSU5FQ1RMX0xTQl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIFNldCB0aGUgVVNDSV9TUEkgdHJhbnNmZXIgc2VxdWVuY2Ugd2l0aCBNU0IgZmlyc3QuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfU0VUX01TQl9GSVJTVCh1c3BpKSAoICh1c3BpKS0+TElORUNUTCAmPSB+VVNQSV9MSU5FQ1RMX0xTQl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgIFNldCB0aGUgZGF0YSB3aWR0aCBvZiBhIFVTQ0lfU1BJIHRyYW5zYWN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyV2lkdGggVGhlIGRhdGEgd2lkdGgKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfU0VUX0RBVEFfV0lEVEgodXNwaSwgdTMyV2lkdGgpIFwKKyAgICBkb3sgXAorICAgICAgaWYoKHUzMldpZHRoKSA9PSAxNnVsKXsgXAorICAgICAgICAodXNwaSktPkxJTkVDVEwgPSAoKHVzcGkpLT5MSU5FQ1RMICYgflVTUElfTElORUNUTF9EV0lEVEhfTXNrKSB8ICgwIDw8IFVTUElfTElORUNUTF9EV0lEVEhfUG9zKTsgXAorICAgICAgfWVsc2UgeyBcCisgICAgICAgICh1c3BpKS0+TElORUNUTCA9ICgodXNwaSktPkxJTkVDVEwgJiB+VVNQSV9MSU5FQ1RMX0RXSURUSF9Nc2spIHwgKCh1MzJXaWR0aCkgPDwgVVNQSV9MSU5FQ1RMX0RXSURUSF9Qb3MpOyBcCisgICAgICB9IFwKKyAgICB9d2hpbGUoMCkKKworLyoqCisgICogQGJyaWVmICBHZXQgdGhlIFVTQ0lfU1BJIGJ1c3kgc3RhdGUuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIFVTQ0lfU1BJIGJ1c3kgc3RhdHVzCisgICogQHJldHZhbCAwOiBVU0NJX1NQSSBtb2R1bGUgaXMgbm90IGJ1c3kKKyAgKiBAcmV0dmFsIDE6IFVTQ0lfU1BJIG1vZHVsZSBpcyBidXN5CisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX0lTX0JVU1kodXNwaSkgKCAoKHVzcGkpLT5QUk9UU1RTICYgVVNQSV9QUk9UU1RTX0JVU1lfTXNrKSA9PSBVU1BJX1BST1RTVFNfQlVTWV9Nc2sgPyAxOjAgKQorCisvKioKKyAgKiBAYnJpZWYgR2V0IHRoZSBVU0NJX1NQSSB3YWtldXAgZmxhZy4KKyAgKiBAcGFyYW1baW5dIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBXYWtldXAgc3RhdHVzLgorICAqIEByZXR2YWwgMCBGbGFnIGlzIG5vdCBzZXQuCisgICogQHJldHZhbCAxIEZsYWcgaXMgc2V0LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9HRVRfV0FLRVVQX0ZMQUcodXNwaSkgKCAoKHVzcGkpLT5XS1NUUyAmIFVTUElfV0tTVFNfV0tGX01zaykgPT0gVVNQSV9XS1NUU19XS0ZfTXNrID8gMTowICkKKworLyoqCisgICogQGJyaWVmIENsZWFyIHRoZSBVU0NJX1NQSSB3YWtldXAgZmxhZy4KKyAgKiBAcGFyYW1baW5dIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX0NMUl9XQUtFVVBfRkxBRyh1c3BpKSAoICh1c3BpKS0+V0tTVFMgfD0gVVNQSV9XS1NUU19XS0ZfTXNrICkKKworLyoqCisgICogQGJyaWVmIEdldCBwcm90b2NvbCBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gVGhlIGludGVycnVwdCBmbGFnL3N0YXR1cyBvZiBwcm90b2NvbCBzdGF0dXMgcmVnaXN0ZXIuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX0dFVF9QUk9UX1NUQVRVUyh1c3BpKSAoICh1c3BpKS0+UFJPVFNUUyApCisKKy8qKgorICAqIEBicmllZiBDbGVhciBzcGVjaWZpZWQgcHJvdG9jb2wgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMySW50VHlwZUZsYWcgSW50ZXJydXB0IFR5cGUgRmxhZywgc2hvdWxkIGJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVFNUU19TU0FDVElGX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1BST1RTVFNfU1NJTkFJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9UU1RTX1NMVkJFSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVFNUU19TTFZUT0lGX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1BST1RTVFNfUlhFTkRJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9UU1RTX1JYU1RJRl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9UU1RTX1RYRU5ESUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVFNUU19UWFNUSUZfTXNrCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX0NMUl9QUk9UX0lOVF9GTEFHKHVzcGksIHUzMkludFR5cGVGbGFnKSAoICh1c3BpKS0+UFJPVFNUUyA9ICh1MzJJbnRUeXBlRmxhZykgKQorCisvKioKKyAgKiBAYnJpZWYgR2V0IGJ1ZmZlciBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gVGhlIGludGVycnVwdCBmbGFnL3N0YXR1cyBvZiBidWZmZXIgc3RhdHVzIHJlZ2lzdGVyLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9HRVRfQlVGX1NUQVRVUyh1c3BpKSAoICh1c3BpKS0+QlVGU1RTICkKKworLyoqCisgICogQGJyaWVmIENsZWFyIHNwZWNpZmllZCBidWZmZXIgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMySW50VHlwZUZsYWcgSW50ZXJydXB0IFR5cGUgRmxhZywgc2hvdWxkIGJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfQlVGU1RTX1RYVURSSUZfTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfQlVGU1RTX1JYT1ZJRl9Nc2sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFVTUElfQ0xSX0JVRl9JTlRfRkxBRyh1c3BpLCB1MzJJbnRUeXBlRmxhZykgKCAodXNwaSktPkJVRlNUUyA9ICh1MzJJbnRUeXBlRmxhZykgKQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIHNwZWNpZmllZCBwcm90b2NvbCBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMySW50U2VsIEludGVycnVwdCBUeXBlLCBzaG91bGQgYmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9USUVOX1NMVkJFSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1BST1RJRU5fU0xWVE9JRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVElFTl9TU0FDVElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9USUVOX1NTSU5BSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9FTkFCTEVfUFJPVF9JTlQodXNwaSwgdTMySW50U2VsKSAoICh1c3BpKS0+UFJPVElFTiB8PSAodTMySW50U2VsKSApCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIHNwZWNpZmllZCBwcm90b2NvbCBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMySW50U2VsIEludGVycnVwdCBUeXBlLCBzaG91bGQgYmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9USUVOX1NMVkJFSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1BST1RJRU5fU0xWVE9JRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfUFJPVElFTl9TU0FDVElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9QUk9USUVOX1NTSU5BSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9ESVNBQkxFX1BST1RfSU5UKHVzcGksIHUzMkludFNlbCkgKCAodXNwaSktPlBST1RJRU4gJj0gfiAodTMySW50U2VsKSApCisKKy8qKgorICAqIEBicmllZiBFbmFibGUgc3BlY2lmaWVkIGJ1ZmZlciBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMySW50U2VsIEludGVycnVwdCBUeXBlLCBzaG91bGQgYmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9CVUZDVExfUlhPVklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9CVUZDVExfVFhVRFJJRU5fTXNrCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX0VOQUJMRV9CVUZfSU5UKHVzcGksIHUzMkludFNlbCkgKCAodXNwaSktPkJVRkNUTCB8PSAodTMySW50U2VsKSApCisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIHNwZWNpZmllZCBidWZmZXIgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkludFNlbCBJbnRlcnJ1cHQgVHlwZSwgc2hvdWxkIGJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfQlVGQ1RMX1JYT1ZJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfQlVGQ1RMX1RYVURSSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9ESVNBQkxFX0JVRl9JTlQodXNwaSwgdTMySW50U2VsKSAoICh1c3BpKS0+QlVGQ1RMICY9IH4gKHUzMkludFNlbCkgKQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIHNwZWNpZmllZCB0cmFuc2ZlciBpbnRlcnJ1cHQuCisgICogQHBhcmFtW2luXSB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMySW50U2VsIEludGVycnVwdCBUeXBlLCBzaG91bGQgYmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9JTlRFTl9SWEVORElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9JTlRFTl9SWFNUSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX0lOVEVOX1RYRU5ESUVOX01zaworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX0lOVEVOX1RYU1RJRU5fTXNrCisgICogQHJldHVybiBOb25lCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBVU1BJX0VOQUJMRV9UUkFOU19JTlQodXNwaSwgdTMySW50U2VsKSAoICh1c3BpKS0+SU5URU4gfD0gKHUzMkludFNlbCkgKQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBzcGVjaWZpZWQgdHJhbnNmZXIgaW50ZXJydXB0LgorICAqIEBwYXJhbVtpbl0gdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkludFNlbCBJbnRlcnJ1cHQgVHlwZSwgc2hvdWxkIGJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfSU5URU5fUlhFTkRJRU5fTXNrCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfSU5URU5fUlhTVElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9JTlRFTl9UWEVORElFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9JTlRFTl9UWFNUSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgVVNQSV9ESVNBQkxFX1RSQU5TX0lOVCh1c3BpLCB1MzJJbnRTZWwpICggKHVzcGkpLT5JTlRFTiAmPSB+ICh1MzJJbnRTZWwpICkKKworLyoqCisgICogQGJyaWVmICAgICAgVHJpZ2dlciBSWCBQRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgUlhQRE1BRU4gYml0IG9mIFVTUElfUERNQUNUTCByZWdpc3RlciB0byBlbmFibGUgUlggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgVVNQSV9UUklHR0VSX1JYX1BETUEodXNwaSkgKCAodXNwaSktPlBETUFDVEwgfD0gVVNQSV9QRE1BQ1RMX1JYUERNQUVOX01zayB8IFVTUElfUERNQUNUTF9QRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgVHJpZ2dlciBUWCBQRE1BIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZS4KKyAgKiBAZGV0YWlscyAgICBTZXQgVFhQRE1BRU4gYml0IG9mIFVTUElfUERNQUNUTCByZWdpc3RlciB0byBlbmFibGUgVFggUERNQSB0cmFuc2ZlciBmdW5jdGlvbi4KKyAgKi8KKyNkZWZpbmUgVVNQSV9UUklHR0VSX1RYX1BETUEodXNwaSkgKCAodXNwaSktPlBETUFDVEwgfD0gVVNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayB8IFVTUElfUERNQUNUTF9QRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgVHJpZ2dlciBUWCBhbmQgUlggUERNQSBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgU2V0IFRYUERNQUVOIGJpdCBhbmQgUlhQRE1BRU4gYml0IG9mIFVTUElfUERNQUNUTCByZWdpc3RlciB0byBlbmFibGUgVFggYW5kIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFVTUElfVFJJR0dFUl9UWF9SWF9QRE1BKHVzcGkpICggKHVzcGkpLT5QRE1BQ1RMIHw9IFVTUElfUERNQUNUTF9UWFBETUFFTl9Nc2sgfCBVU1BJX1BETUFDVExfUlhQRE1BRU5fTXNrIHwgVVNQSV9QRE1BQ1RMX1BETUFFTl9Nc2sgKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFJYIFBETUEgdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lLgorICAqIEBkZXRhaWxzICAgIENsZWFyIFJYUERNQUVOIGJpdCBvZiBVU1BJX1BETUFDVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBSWCBQRE1BIHRyYW5zZmVyIGZ1bmN0aW9uLgorICAqLworI2RlZmluZSBVU1BJX0RJU0FCTEVfUlhfUERNQSh1c3BpKSAoICh1c3BpKS0+UERNQUNUTCAmPSB+VVNQSV9QRE1BQ1RMX1JYUERNQUVOX01zayApCisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgVFggUERNQSB0cmFuc2Zlci4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgVFhQRE1BRU4gYml0IG9mIFVTUElfUERNQUNUTCByZWdpc3RlciB0byBkaXNhYmxlIFRYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFVTUElfRElTQUJMRV9UWF9QRE1BKHVzcGkpICggKHVzcGkpLT5QRE1BQ1RMICY9IH5VU1BJX1BETUFDVExfVFhQRE1BRU5fTXNrICkKKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUWCBhbmQgUlggUERNQSB0cmFuc2Zlci4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUuCisgICogQGRldGFpbHMgICAgQ2xlYXIgVFhQRE1BRU4gYml0IGFuZCBSWFBETUFFTiBiaXQgb2YgVVNQSV9QRE1BQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgVFggYW5kIFJYIFBETUEgdHJhbnNmZXIgZnVuY3Rpb24uCisgICovCisjZGVmaW5lIFVTUElfRElTQUJMRV9UWF9SWF9QRE1BKHVzcGkpICggKHVzcGkpLT5QRE1BQ1RMICY9IH4oVVNQSV9QRE1BQ1RMX1RYUERNQUVOX01zayB8IFVTUElfUERNQUNUTF9SWFBETUFFTl9Nc2spICkKKwordWludDMyX3QgVVNQSV9PcGVuKFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzdGVyU2xhdmUsIHVpbnQzMl90IHUzMlNQSU1vZGUsICB1aW50MzJfdCB1MzJEYXRhV2lkdGgsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKTsKK3ZvaWQgVVNQSV9DbG9zZShVU1BJX1QgKnVzcGkpOwordm9pZCBVU1BJX0NsZWFyUnhCdWYoVVNQSV9UICp1c3BpKTsKK3ZvaWQgVVNQSV9DbGVhclR4QnVmKFVTUElfVCAqdXNwaSk7Cit2b2lkIFVTUElfRGlzYWJsZUF1dG9TUyhVU1BJX1QgKnVzcGkpOwordm9pZCBVU1BJX0VuYWJsZUF1dG9TUyhVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMlNTUGluTWFzaywgdWludDMyX3QgdTMyQWN0aXZlTGV2ZWwpOwordWludDMyX3QgVVNQSV9TZXRCdXNDbG9jayhVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKTsKK3VpbnQzMl90IFVTUElfR2V0QnVzQ2xvY2soVVNQSV9UICp1c3BpKTsKK3ZvaWQgVVNQSV9FbmFibGVJbnQoVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgVVNQSV9EaXNhYmxlSW50KFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit1aW50MzJfdCBVU1BJX0dldEludEZsYWcoVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgVVNQSV9DbGVhckludEZsYWcoVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJNYXNrKTsKK3VpbnQzMl90IFVTUElfR2V0U3RhdHVzKFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzayk7Cit2b2lkIFVTUElfRW5hYmxlV2FrZXVwKFVTUElfVCAqdXNwaSk7Cit2b2lkIFVTUElfRGlzYWJsZVdha2V1cChVU1BJX1QgKnVzcGkpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNDSV9TUElfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNDSV9TUElfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1VTQ0lfU1BJX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91c2NpX3VhcnQuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3VzY2lfdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTZmN2EKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy91c2NpX3VhcnQuaApAQCAtMCwwICsxLDQ0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHVzY2lfdWFydC5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgVVNDSSBVQVJUIChVVUFSVCkgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VU0NJX1VBUlRfSF9fCisjZGVmaW5lIF9fVVNDSV9VQVJUX0hfXworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX1VBUlRfRHJpdmVyIFVTQ0lfVUFSVCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0NJX1VBUlRfRVhQT1JURURfQ09OU1RBTlRTIFVTQ0lfVUFSVCBFeHBvcnRlZCBDb25zdGFudHMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVVQVJUX0xJTkVDVEwgY29uc3RhbnRzIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVVVBUlRfV09SRF9MRU5fNiAgICAgKDZVTCA8PCBVVUFSVF9MSU5FQ1RMX0RXSURUSF9Qb3MpIC8qITwgVVVBUlRfTElORUNUTCBzZXR0aW5nIHRvIHNldCBVQVJUIHdvcmQgbGVuZ3RoIHRvIDYgYml0cyAqLworI2RlZmluZSBVVUFSVF9XT1JEX0xFTl83ICAgICAoN1VMIDw8IFVVQVJUX0xJTkVDVExfRFdJRFRIX1BvcykgLyohPCBVVUFSVF9MSU5FQ1RMIHNldHRpbmcgdG8gc2V0IFVBUlQgd29yZCBsZW5ndGggdG8gNyBiaXRzICovCisjZGVmaW5lIFVVQVJUX1dPUkRfTEVOXzggICAgICg4VUwgPDwgVVVBUlRfTElORUNUTF9EV0lEVEhfUG9zKSAvKiE8IFVVQVJUX0xJTkVDVEwgc2V0dGluZyB0byBzZXQgVUFSVCB3b3JkIGxlbmd0aCB0byA4IGJpdHMgKi8KKyNkZWZpbmUgVVVBUlRfV09SRF9MRU5fOSAgICAgKDlVTCA8PCBVVUFSVF9MSU5FQ1RMX0RXSURUSF9Qb3MpIC8qITwgVVVBUlRfTElORUNUTCBzZXR0aW5nIHRvIHNldCBVQVJUIHdvcmQgbGVuZ3RoIHRvIDkgYml0cyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVVUFSVF9QUk9UQ1RMIGNvbnN0YW50cyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVVQVJUX1BBUklUWV9OT05FICAgICgweDBVTCA8PCBVVUFSVF9QUk9UQ1RMX1BBUklUWUVOX1BvcykgICAgLyohPCBVVUFSVF9QUk9UQ1RMIHNldHRpbmcgdG8gc2V0IFVBUlQgYXMgbm8gcGFyaXR5ICovCisjZGVmaW5lIFVVQVJUX1BBUklUWV9PREQgICAgICgweDFVTCA8PCBVVUFSVF9QUk9UQ1RMX1BBUklUWUVOX1BvcykgICAgLyohPCBVVUFSVF9QUk9UQ1RMIHNldHRpbmcgdG8gc2V0IFVBUlQgYXMgb2RkIHBhcml0eSAqLworI2RlZmluZSBVVUFSVF9QQVJJVFlfRVZFTiAgICAoMHgzVUwgPDwgVVVBUlRfUFJPVENUTF9QQVJJVFlFTl9Qb3MpICAgIC8qITwgVVVBUlRfUFJPVENUTCBzZXR0aW5nIHRvIHNldCBVQVJUIGFzIGV2ZW4gcGFyaXR5ICovCisKKyNkZWZpbmUgVVVBUlRfU1RPUF9CSVRfMSAgICAgKDB4MFVMKSAvKiE8IFVVQVJUX1BST1RDVEwgc2V0dGluZyBmb3Igb25lIHN0b3AgYml0ICovCisjZGVmaW5lIFVVQVJUX1NUT1BfQklUXzIgICAgICgweDFVTCkgLyohPCBVVUFSVF9QUk9UQ1RMIHNldHRpbmcgZm9yIHR3byBzdG9wIGJpdCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVU0NJIFVBUlQgaW50ZXJydXB0IG1hc2sgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVVVBUlRfQUJSX0lOVF9NQVNLICAgICAgKDB4MDAyVUwpIC8qITwgQXV0by1iYXVkIHJhdGUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVVBUlRfUkxTX0lOVF9NQVNLICAgICAgKDB4MDA0VUwpIC8qITwgUmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVVUFSVF9CVUZfUlhPVl9JTlRfTUFTSyAoMHgwMDhVTCkgLyohPCBCdWZmZXIgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVVUFSVF9UWFNUX0lOVF9NQVNLICAgICAoMHgwMTBVTCkgLyohPCBUWCBzdGFydCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVVUFSVF9UWEVORF9JTlRfTUFTSyAgICAoMHgwMjBVTCkgLyohPCBUeCBlbmQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVVBUlRfUlhTVF9JTlRfTUFTSyAgICAgKDB4MDQwVUwpIC8qITwgUlggc3RhcnQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVVBUlRfUlhFTkRfSU5UX01BU0sgICAgKDB4MDgwVUwpIC8qITwgUlggZW5kIGludGVycnVwdCBtYXNrICovCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0NJX1VBUlRfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgVVNDSV9VQVJUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgV3JpdGUgVVNDSV9VQVJUIGRhdGEKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHU4RGF0YSAgRGF0YSBieXRlIHRvIHRyYW5zbWl0LgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyB3cml0ZSBEYXRhIHRvIFR4IGRhdGEgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgVVVBUlRfV1JJVEUodXVhcnQsIHU4RGF0YSkgICAgKCh1dWFydCktPlRYREFUID0gKHU4RGF0YSkpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFJlYWQgVVNDSV9VQVJUIGRhdGEKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR1cm4gICAgICAgVGhlIG9sZGVzdCBkYXRhIGJ5dGUgaW4gUlggYnVmZmVyLgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyByZWFkIFJ4IGRhdGEgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgVVVBUlRfUkVBRCh1dWFydCkgICAgKCh1dWFydCktPlJYREFUKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBHZXQgVHggZW1wdHkKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCAgIFR4IGJ1ZmZlciBpcyBub3QgZW1wdHkKKyAqICAgIEByZXR2YWwgICAgICAgPj0xIFR4IGJ1ZmZlciBpcyBlbXB0eQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBnZXQgVHJhbnNtaXR0ZXIgYnVmZmVyIGVtcHR5IHJlZ2lzdGVyIHZhbHVlLgorICovCisjZGVmaW5lIFVVQVJUX0dFVF9UWF9FTVBUWSh1dWFydCkgICAgKCh1dWFydCktPkJVRlNUUyAmIFVVQVJUX0JVRlNUU19UWEVNUFRZX01zaykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IFJ4IGVtcHR5CisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICBSeCBidWZmZXIgaXMgbm90IGVtcHR5CisgKiAgICBAcmV0dmFsICAgICAgID49MSBSeCBidWZmZXIgaXMgZW1wdHkKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IFJlY2VpdmVyIGJ1ZmZlciBlbXB0eSByZWdpc3RlciB2YWx1ZS4KKyAqLworI2RlZmluZSBVVUFSVF9HRVRfUlhfRU1QVFkodXVhcnQpICAgICgodXVhcnQpLT5CVUZTVFMgJiBVVUFSVF9CVUZTVFNfUlhFTVBUWV9Nc2spCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENoZWNrIHNwZWNpZmllZCB1c2NpX3VhcnQgcG9ydCB0cmFuc21pc3Npb24gaXMgb3Zlci4KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCBUeCB0cmFuc21pc3Npb24gaXMgbm90IG92ZXIKKyAqICAgIEByZXR2YWwgICAgICAgMSBUeCB0cmFuc21pc3Npb24gaXMgb3ZlcgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyByZXR1cm4gVHJhbnNtaXR0ZXIgRW1wdHkgRmxhZyByZWdpc3RlciBiaXQgdmFsdWUuIFxuCisgKiAgICAgICAgICAgICAgICAgIEl0IGluZGljYXRlcyBpZiBzcGVjaWZpZWQgdXNjaV91YXJ0IHBvcnQgdHJhbnNtaXNzaW9uIGlzIG92ZXIgbm9yIG5vdC4KKyAqLworI2RlZmluZSBVVUFSVF9JU19UWF9FTVBUWSh1dWFydCkgICAgKCgodXVhcnQpLT5CVUZTVFMgJiBVVUFSVF9CVUZTVFNfVFhFTVBUWV9Nc2spID4+IFVVQVJUX0JVRlNUU19UWEVNUFRZX1BvcykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgQ2hlY2sgc3BlY2lmaWVkIHVzY2lfdWFydCBwb3J0IHJlY2VpdmVyIGlzIGVtcHR5LgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAwIFJ4IHJlY2VpdmVyIGlzIG5vdCBlbXB0eQorICogICAgQHJldHZhbCAgICAgICAxIFJ4IHJlY2VpdmVyIGlzIGVtcHR5CisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIHJldHVybiBSZWNlaXZlIEVtcHR5IEZsYWcgcmVnaXN0ZXIgYml0IHZhbHVlLiBcbgorICogICAgICAgICAgICAgICAgICBJdCBpbmRpY2F0ZXMgaWYgc3BlY2lmaWVkIHVzY2lfdWFydCBwb3J0IHJlY2VpdmVyIGlzIGVtcHR5IG5vciBub3QuCisgKi8KKyNkZWZpbmUgVVVBUlRfSVNfUlhfRU1QVFkodXVhcnQpICAgICgoKHV1YXJ0KS0+QlVGU1RTICYgVVVBUlRfQlVGU1RTX1JYRU1QVFlfTXNrKSA+PiBVVUFSVF9CVUZTVFNfUlhFTVBUWV9Qb3MpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFdhaXQgc3BlY2lmaWVkIHVzY2lfdWFydCBwb3J0IHRyYW5zbWlzc2lvbiBpcyBvdmVyCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gd2FpdCBzcGVjaWZpZWQgdXNjaV91YXJ0IHBvcnQgdHJhbnNtaXNzaW9uIGlzIG92ZXIuCisgKi8KKyNkZWZpbmUgVVVBUlRfV0FJVF9UWF9FTVBUWSh1dWFydCkgICAgd2hpbGUoISgoKCh1dWFydCktPkJVRlNUUykgJiBVVUFSVF9CVUZTVFNfVFhFTVBUWV9Nc2spID4+IFVVQVJUX0JVRlNUU19UWEVNUFRZX1BvcykpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENoZWNrIFRYIGJ1ZmZlciBpcyBmdWxsIG9yIG5vdAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAxIFRYIGJ1ZmZlciBpcyBmdWxsCisgKiAgICBAcmV0dmFsICAgICAgIDAgVFggYnVmZmVyIGlzIG5vdCBmdWxsCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGNoZWNrIFRYIGJ1ZmZlciBpcyBmdWxsIG9yIG5vdC4KKyAqLworI2RlZmluZSBVVUFSVF9JU19UWF9GVUxMKHV1YXJ0KSAgICAoKCh1dWFydCktPkJVRlNUUyAmIFVVQVJUX0JVRlNUU19UWEZVTExfTXNrKT4+VVVBUlRfQlVGU1RTX1RYRlVMTF9Qb3MpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENoZWNrIFJYIGJ1ZmZlciBpcyBmdWxsIG9yIG5vdAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKgorICogICAgQHJldHZhbCAgICAgICAxIFJYIGJ1ZmZlciBpcyBmdWxsCisgKiAgICBAcmV0dmFsICAgICAgIDAgUlggYnVmZmVyIGlzIG5vdCBmdWxsCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGNoZWNrIFJYIGJ1ZmZlciBpcyBmdWxsIG9yIG5vdC4KKyAqLworI2RlZmluZSBVVUFSVF9JU19SWF9GVUxMKHV1YXJ0KSAgICAoKCh1dWFydCktPkJVRlNUUyAmIFVVQVJUX0JVRlNUU19SWEZVTExfTXNrKT4+VVVBUlRfQlVGU1RTX1JYRlVMTF9Qb3MpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBUeCBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICBUeCBidWZmZXIgaXMgbm90IGZ1bGwuCisgKiAgICBAcmV0dmFsICAgICAgID49MSBUeCBidWZmZXIgaXMgZnVsbC4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IFR4IGZ1bGwgcmVnaXN0ZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUgVVVBUlRfR0VUX1RYX0ZVTEwodXVhcnQpICAgICgodXVhcnQpLT5CVUZTVFMgJiBVVUFSVF9CVUZTVFNfVFhGVUxMX01zaykKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IFJ4IGZ1bGwgcmVnaXN0ZXIgdmFsdWUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR2YWwgICAgICAgMCAgIFJ4IGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAqICAgIEByZXR2YWwgICAgICAgPj0xIFJ4IGJ1ZmZlciBpcyBmdWxsLgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBnZXQgUnggZnVsbCByZWdpc3RlciB2YWx1ZS4KKyAqLworI2RlZmluZSBVVUFSVF9HRVRfUlhfRlVMTCh1dWFydCkgICAgKCh1dWFydCktPkJVRlNUUyAmIFVVQVJUX0JVRlNUU19SWEZVTExfTXNrKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBFbmFibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBwcm90b2NvbCBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkludFNlbCAgSW50ZXJydXB0IHR5cGUgc2VsZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RJRU5fUkxTSUVOX01zayAgIDogUnggTGluZSBzdGF0dXMgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RJRU5fQUJSSUVOX01zayAgIDogQXV0by1iYXVkIHJhdGUgaW50ZXJydXB0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGVuYWJsZSBzcGVjaWZpZWQgVVNDSV9VQVJUIHByb3RvY29sIGludGVycnVwdC4KKyAqLworI2RlZmluZSBVVUFSVF9FTkFCTEVfUFJPVF9JTlQodXVhcnQsIHUzMkludFNlbCkgICAgKCh1dWFydCktPlBST1RJRU4gfD0gKHUzMkludFNlbCkpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIERpc2FibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBwcm90b2NvbCBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkludFNlbCAgSW50ZXJydXB0IHR5cGUgc2VsZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RJRU5fUkxTSUVOX01zayAgIDogUnggTGluZSBzdGF0dXMgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RJRU5fQUJSSUVOX01zayAgIDogQXV0by1iYXVkIHJhdGUgaW50ZXJydXB0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGRpc2FibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBwcm90b2NvbCBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgVVVBUlRfRElTQUJMRV9QUk9UX0lOVCh1dWFydCwgdTMySW50U2VsKSAgICAoKHV1YXJ0KS0+UFJPVElFTiAmPSB+KHUzMkludFNlbCkpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEVuYWJsZSBzcGVjaWZpZWQgVVNDSV9VQVJUIGJ1ZmZlciBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkludFNlbCAgSW50ZXJydXB0IHR5cGUgc2VsZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0JVRkNUTF9SWE9WSUVOX01zayAgICAgOiBSZWNlaXZlIGJ1ZmZlciBvdmVycnVuIGVycm9yIGludGVycnVwdAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBlbmFibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBidWZmZXIgaW50ZXJydXB0LgorICovCisjZGVmaW5lIFVVQVJUX0VOQUJMRV9CVUZfSU5UKHV1YXJ0LCB1MzJJbnRTZWwpICAgICgodXVhcnQpLT5CVUZDVEwgfD0gKHUzMkludFNlbCkpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIERpc2FibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBidWZmZXIgaW50ZXJydXB0CisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRTZWwgIEludGVycnVwdCB0eXBlIHNlbGVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9CVUZDVExfUlhPVklFTl9Nc2sgICAgIDogUmVjZWl2ZSBidWZmZXIgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZGlzYWJsZSBzcGVjaWZpZWQgVVNDSV9VQVJUIGJ1ZmZlciBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgVVVBUlRfRElTQUJMRV9CVUZfSU5UKHV1YXJ0LCB1MzJJbnRTZWwpICAgICgodXVhcnQpLT5CVUZDVEwgJj0gfiAodTMySW50U2VsKSkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRW5hYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgdHJhbnNmZXIgaW50ZXJydXB0CisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRTZWwgIEludGVycnVwdCB0eXBlIHNlbGVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9JTlRFTl9SWEVORElFTl9Nc2sgIDogUmVjZWl2ZSBlbmQgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0lOVEVOX1JYU1RJRU5fTXNrICAgOiBSZWNlaXZlIHN0YXJ0IGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9JTlRFTl9UWEVORElFTl9Nc2sgIDogVHJhbnNtaXQgZW5kIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9JTlRFTl9UWFNUSUVOX01zayAgIDogVHJhbnNtaXQgc3RhcnQgaW50ZXJydXB0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGVuYWJsZSBzcGVjaWZpZWQgVVNDSV9VQVJUIHRyYW5zZmVyIGludGVycnVwdC4KKyAqLworI2RlZmluZSBVVUFSVF9FTkFCTEVfVFJBTlNfSU5UKHV1YXJ0LCB1MzJJbnRTZWwpICAgICgodXVhcnQpLT5JTlRFTiB8PSAodTMySW50U2VsKSkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRGlzYWJsZSBzcGVjaWZpZWQgVVNDSV9VQVJUIHRyYW5zZmVyIGludGVycnVwdAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50U2VsICBJbnRlcnJ1cHQgdHlwZSBzZWxlY3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfSU5URU5fUlhFTkRJRU5fTXNrICA6IFJlY2VpdmUgZW5kIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9JTlRFTl9SWFNUSUVOX01zayAgIDogUmVjZWl2ZSBzdGFydCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfSU5URU5fVFhFTkRJRU5fTXNrICA6IFRyYW5zbWl0IGVuZCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfSU5URU5fVFhTVElFTl9Nc2sgICA6IFRyYW5zbWl0IHN0YXJ0IGludGVycnVwdAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBkaXNhYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgdHJhbnNmZXIgaW50ZXJydXB0LgorICovCisjZGVmaW5lIFVVQVJUX0RJU0FCTEVfVFJBTlNfSU5UKHV1YXJ0LCB1MzJJbnRTZWwpICAgICgodXVhcnQpLT5JTlRFTiAmPSB+KHUzMkludFNlbCkpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCBwcm90b2NvbCBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIFRoZSBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMgb2YgcHJvdG9jb2wgc3RhdHVzIHJlZ2lzdGVyLgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBnZXQgcHJvdG9jb2wgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlLgorICovCisjZGVmaW5lIFVVQVJUX0dFVF9QUk9UX1NUQVRVUyh1dWFydCkgICAgKCh1dWFydCktPlBST1RTVFMpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENsZWFyIHNwZWNpZmllZCBwcm90b2NvbCBpbnRlcnJ1cHQgZmxhZworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRUeXBlRmxhZyAgSW50ZXJydXB0IFR5cGUgRmxhZywgc2hvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUFJPVFNUU19BQkVSUlNUU19Nc2sgICAgOiBBdXRvLWJhdWQgUmF0ZSBFcnJvciBJbnRlcnJ1cHQgSW5kaWNhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUFJPVFNUU19BQlJERVRJRl9Nc2sgICAgOiBBdXRvLWJhdWQgUmF0ZSBEZXRlY3RlZCBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RTVFNfQlJFQUtfTXNrICAgICAgIDogQnJlYWsgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RTVFNfRlJNRVJSX01zayAgICAgIDogRnJhbWluZyBFcnJvciBGbGFnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUFJPVFNUU19QQVJJVFlFUlJfTXNrICAgOiBQYXJpdHkgRXJyb3IgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RTVFNfUlhFTkRJRl9Nc2sgICAgIDogUmVjZWl2ZSBFbmQgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9UU1RTX1JYU1RJRl9Nc2sgICAgICA6IFJlY2VpdmUgU3RhcnQgSW50ZXJydXB0IEZsYWcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9UU1RTX1RYRU5ESUZfTXNrICAgICA6IFRyYW5zbWl0IEVuZCBJbnRlcnJ1cHQgRmxhZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BST1RTVFNfVFhTVElGX01zayAgICAgIDogVHJhbnNtaXQgU3RhcnQgSW50ZXJydXB0IEZsYWcKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gY2xlYXIgc3BlY2lmaWVkIHByb3RvY29sIGludGVycnVwdCBmbGFnLgorICovCisjZGVmaW5lIFVVQVJUX0NMUl9QUk9UX0lOVF9GTEFHKHV1YXJ0LHUzMkludFR5cGVGbGFnKSAgICAoKHV1YXJ0KS0+UFJPVFNUUyA9ICh1MzJJbnRUeXBlRmxhZykpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEdldCB0cmFuc21pdC9yZWNlaXZlIGJ1ZmZlciBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIFRoZSBpbnRlcnJ1cHQgZmxhZy9zdGF0dXMgb2YgYnVmZmVyIHN0YXR1cyByZWdpc3Rlci4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IGJ1ZmZlciBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUgVVVBUlRfR0VUX0JVRl9TVEFUVVModXVhcnQpICAgICgodXVhcnQpLT5CVUZTVFMpCisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENsZWFyIHNwZWNpZmllZCBidWZmZXIgaW50ZXJydXB0IGZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50VHlwZUZsYWcgIEludGVycnVwdCBUeXBlIEZsYWcsIHNob3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0JVRlNUU19SWE9WSUZfTXNrIDogUmVjZWl2ZSBCdWZmZXIgT3Zlci1ydW4gRXJyb3IgIEludGVycnVwdCBJbmRpY2F0b3IKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gY2xlYXIgc3BlY2lmaWVkIGJ1ZmZlciBpbnRlcnJ1cHQgZmxhZy4KKyAqLworI2RlZmluZSBVVUFSVF9DTFJfQlVGX0lOVF9GTEFHKHV1YXJ0LHUzMkludFR5cGVGbGFnKSAgICAoKHV1YXJ0KS0+QlVGU1RTID0gKHUzMkludFR5cGVGbGFnKSkKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IHdha2V1cCBmbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqCisgKiAgICBAcmV0dmFsICAgICAgIDAgICAgICAgQ2hpcCBkaWQgbm90IHdha2UgdXAgZnJvbSBwb3dlci1kb3duIG1vZGUuCisgKiAgICBAcmV0dmFsICAgICAgIDEgICAgICAgQ2hpcCB3YWtlZCB1cCBmcm9tIHBvd2VyLWRvd24gbW9kZS4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgbWFjcm8gZ2V0IHdha2V1cCBmbGFnLgorICovCisjZGVmaW5lIFVVQVJUX0dFVF9XQUtFVVBfRkxBRyh1dWFydCkgICAgKCh1dWFydCktPldLU1RTICYgVVVBUlRfV0tTVFNfV0tGX01zayA/IDE6IDAgKQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDbGVhciB3YWtldXAgZmxhZworICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBjbGVhciB3YWtldXAgZmxhZy4KKyAqLworI2RlZmluZSBVVUFSVF9DTFJfV0FLRVVQX0ZMQUcodXVhcnQpICAgICgodXVhcnQpLT5XS1NUUyA9IFVVQVJUX1dLU1RTX1dLRl9Nc2spCisKKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgRW5hYmxlIHNwZWNpZmllZCBVU0NJX1VBUlQgUERNQSBmdW5jdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyRnVuY1NlbCBDb21iaW5hdGlvbiBvZiBmb2xsb3dpbmcgZnVuY3Rpb25zCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BETUFDVExfVFhQRE1BRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BETUFDVExfUlhQRE1BRU5fTXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BETUFDVExfUERNQUVOX01zaworICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBtYWNybyBlbmFibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBQRE1BIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIFVVQVJUX1BETUFfRU5BQkxFKHV1YXJ0LCB1MzJGdW5jU2VsKSAgICgodXVhcnQpLT5QRE1BQ1RMIHw9ICh1MzJGdW5jU2VsKSkKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIERpc2FibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBQRE1BIGZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZQorICogICAgQHBhcmFtW2luXSAgICB1MzJGdW5jU2VsIENvbWJpbmF0aW9uIG9mIGZvbGxvd2luZyBmdW5jdGlvbnMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUERNQUNUTF9UWFBETUFFTl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUERNQUNUTF9SWFBETUFFTl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUERNQUNUTF9QRE1BRU5fTXNrCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIG1hY3JvIGRpc2FibGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBQRE1BIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIFVVQVJUX1BETUFfRElTQUJMRSh1dWFydCwgdTMyRnVuY1NlbCkgICAoKHV1YXJ0KS0+UERNQUNUTCAmPSB+KHUzMkZ1bmNTZWwpKQorCisKK3ZvaWQgVVVBUlRfQ2xlYXJJbnRGbGFnKFVVQVJUX1QqIHV1YXJ0LCB1aW50MzJfdCB1MzJNYXNrKTsKK3VpbnQzMl90IFVVQVJUX0dldEludEZsYWcoVVVBUlRfVCogdXVhcnQsIHVpbnQzMl90IHUzMk1hc2spOwordm9pZCBVVUFSVF9DbG9zZShVVUFSVF9UKiB1dWFydCk7Cit2b2lkIFVVQVJUX0Rpc2FibGVJbnQoVVVBUlRfVCogIHV1YXJ0LCB1aW50MzJfdCB1MzJNYXNrKTsKK3ZvaWQgVVVBUlRfRW5hYmxlSW50KFVVQVJUX1QqICB1dWFydCwgdWludDMyX3QgdTMyTWFzayk7Cit1aW50MzJfdCBVVUFSVF9PcGVuKFVVQVJUX1QqIHV1YXJ0LCB1aW50MzJfdCB1MzJiYXVkcmF0ZSk7Cit1aW50MzJfdCBVVUFSVF9SZWFkKFVVQVJUX1QqIHV1YXJ0LCB1aW50OF90IHB1OFJ4QnVmW10sIHVpbnQzMl90IHUzMlJlYWRCeXRlcyk7Cit1aW50MzJfdCBVVUFSVF9TZXRMaW5lX0NvbmZpZyhVVUFSVF9UKiB1dWFydCwgdWludDMyX3QgdTMyYmF1ZHJhdGUsIHVpbnQzMl90IHUzMmRhdGFfd2lkdGgsIHVpbnQzMl90IHUzMnBhcml0eSwgdWludDMyX3QgdTMyc3RvcF9iaXRzKTsKK3VpbnQzMl90IFVVQVJUX1dyaXRlKFVVQVJUX1QqIHV1YXJ0LCB1aW50OF90IHB1OFR4QnVmW10sIHVpbnQzMl90IHUzMldyaXRlQnl0ZXMpOwordm9pZCBVVUFSVF9FbmFibGVXYWtldXAoVVVBUlRfVCogdXVhcnQsIHVpbnQzMl90IHUzMldha2V1cE1vZGUpOwordm9pZCBVVUFSVF9EaXNhYmxlV2FrZXVwKFVVQVJUX1QqIHV1YXJ0KTsKK3ZvaWQgVVVBUlRfRW5hYmxlRmxvd0N0cmwoVVVBUlRfVCogdXVhcnQpOwordm9pZCBVVUFSVF9EaXNhYmxlRmxvd0N0cmwoVVVBUlRfVCogdXVhcnQpOworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNDSV9VQVJUX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfVUFSVF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVVNDSV9VQVJUX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy93ZHQuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3dkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NDVlYTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy93ZHQuaApAQCAtMCwwICsxLDIxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHdkdC5oCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBXYXRjaGRvZyBUaW1lcihXRFQpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fV0RUX0hfXworI2RlZmluZSBfX1dEVF9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFdEVF9Ecml2ZXIgV0RUIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFdEVF9FWFBPUlRFRF9DT05TVEFOVFMgV0RUIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBXRFQgVGltZS1vdXQgSW50ZXJ2YWwgUGVyaW9kIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0RUX1RJTUVPVVRfMlBPVzQgICAgICAgICAgICgwVUwgPDwgV0RUX0NUTF9UT1VUU0VMX1BvcykgLyohPCBTZXR0aW5nIFdEVCB0aW1lLW91dCBpbnRlcnZhbCB0byAyXjQgKiBXRFQgY2xvY2tzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV0RUX1RJTUVPVVRfMlBPVzYgICAgICAgICAgICgxVUwgPDwgV0RUX0NUTF9UT1VUU0VMX1BvcykgLyohPCBTZXR0aW5nIFdEVCB0aW1lLW91dCBpbnRlcnZhbCB0byAyXjYgKiBXRFQgY2xvY2tzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV0RUX1RJTUVPVVRfMlBPVzggICAgICAgICAgICgyVUwgPDwgV0RUX0NUTF9UT1VUU0VMX1BvcykgLyohPCBTZXR0aW5nIFdEVCB0aW1lLW91dCBpbnRlcnZhbCB0byAyXjggKiBXRFQgY2xvY2tzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV0RUX1RJTUVPVVRfMlBPVzEwICAgICAgICAgICgzVUwgPDwgV0RUX0NUTF9UT1VUU0VMX1BvcykgLyohPCBTZXR0aW5nIFdEVCB0aW1lLW91dCBpbnRlcnZhbCB0byAyXjEwICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdEVF9USU1FT1VUXzJQT1cxMiAgICAgICAgICAoNFVMIDw8IFdEVF9DVExfVE9VVFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgdGltZS1vdXQgaW50ZXJ2YWwgdG8gMl4xMiAqIFdEVCBjbG9ja3MgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXRFRfVElNRU9VVF8yUE9XMTQgICAgICAgICAgKDVVTCA8PCBXRFRfQ1RMX1RPVVRTRUxfUG9zKSAvKiE8IFNldHRpbmcgV0RUIHRpbWUtb3V0IGludGVydmFsIHRvIDJeMTQgKiBXRFQgY2xvY2tzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV0RUX1RJTUVPVVRfMlBPVzE2ICAgICAgICAgICg2VUwgPDwgV0RUX0NUTF9UT1VUU0VMX1BvcykgLyohPCBTZXR0aW5nIFdEVCB0aW1lLW91dCBpbnRlcnZhbCB0byAyXjE2ICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdEVF9USU1FT1VUXzJQT1cxOCAgICAgICAgICAoN1VMIDw8IFdEVF9DVExfVE9VVFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgdGltZS1vdXQgaW50ZXJ2YWwgdG8gMl4xOCAqIFdEVCBjbG9ja3MgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgV0RUICBSZXNldCBEZWxheSBQZXJpb2QgQ29uc3RhbnQgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdEVF9SRVNFVF9ERUxBWV8xMDI2Q0xLICAgICAoMFVMIDw8IFdEVF9BTFRDVExfUlNURFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgcmVzZXQgZGVsYXkgcGVyaW9kIHRvIDEwMjYgKiBXRFQgY2xvY2tzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV0RUX1JFU0VUX0RFTEFZXzEzMENMSyAgICAgICgxVUwgPDwgV0RUX0FMVENUTF9SU1REU0VMX1BvcykgLyohPCBTZXR0aW5nIFdEVCByZXNldCBkZWxheSBwZXJpb2QgdG8gMTMwICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdEVF9SRVNFVF9ERUxBWV8xOENMSyAgICAgICAoMlVMIDw8IFdEVF9BTFRDVExfUlNURFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgcmVzZXQgZGVsYXkgcGVyaW9kIHRvIDE4ICogV0RUIGNsb2NrcyBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdEVF9SRVNFVF9ERUxBWV8zQ0xLICAgICAgICAoM1VMIDw8IFdEVF9BTFRDVExfUlNURFNFTF9Qb3MpIC8qITwgU2V0dGluZyBXRFQgcmVzZXQgZGVsYXkgcGVyaW9kIHRvIDMgKiBXRFQgY2xvY2tzIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIFdEVCBGcmVlIFJlc2V0IENvdW50ZXIgS2V5d29yZCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXRFRfUkVTRVRfQ09VTlRFUl9LRVlXT1JEICAgKDB4MDAwMDVBQTVVTCkgICAgLyohPCBGaWxsIHRoaXMgdmFsdWUgdG8gV0RUX1JTVENOVCByZWdpc3RlciB0byBmcmVlIHJlc2V0IFdEVCBjb3VudGVyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBXRFRfRVhQT1JURURfQ09OU1RBTlRTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFdEVF9FWFBPUlRFRF9GVU5DVElPTlMgV0RUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgV0RUIFJlc2V0IFN5c3RlbSBGbGFnCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGNsZWFycyBXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBXRFRfQ0xFQVJfUkVTRVRfRkxBRygpICAgICAgICAgIChXRFQtPkNUTCA9IChXRFQtPkNUTCAmIH4oV0RUX0NUTF9JRl9Nc2sgfCBXRFRfQ1RMX1dLRl9Nc2spKSB8IFdEVF9DVExfUlNURl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFdEVCBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBjbGVhcnMgV0RUIHRpbWUtb3V0IGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgV0RUX0NMRUFSX1RJTUVPVVRfSU5UX0ZMQUcoKSAgICAoV0RULT5DVEwgPSAoV0RULT5DVEwgJiB+KFdEVF9DVExfUlNURl9Nc2sgfCBXRFRfQ1RMX1dLRl9Nc2spKSB8IFdEVF9DVExfSUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBXRFQgV2FrZS11cCBGbGFnCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGNsZWFycyBXRFQgdGltZS1vdXQgd2FrZS11cCBzeXN0ZW0gZmxhZy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdEVF9DTEVBUl9USU1FT1VUX1dBS0VVUF9GTEFHKCkgKFdEVC0+Q1RMID0gKFdEVC0+Q1RMICYgfihXRFRfQ1RMX1JTVEZfTXNrIHwgV0RUX0NUTF9JRl9Nc2spKSB8IFdEVF9DVExfV0tGX01zaykKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFdEVCBUaW1lLW91dCBSZXNldCBGbGFnCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgV0RUIHRpbWUtb3V0IHJlc2V0IHN5c3RlbSBkaWQgbm90IG9jY3VyCisgICogQHJldHZhbCAgICAgMSAgIFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gb2NjdXJyZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaW5kaWNhdGVzIHN5c3RlbSBoYXMgYmVlbiByZXNldCBieSBXRFQgdGltZS1vdXQgcmVzZXQgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgV0RUX0dFVF9SRVNFVF9GTEFHKCkgICAgICAgICAgICAoKFdEVC0+Q1RMICYgV0RUX0NUTF9SU1RGX01zayk/IDFVTCA6IDBVTCkKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFdEVCBUaW1lLW91dCBJbnRlcnJ1cHQgRmxhZworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHZhbCAgICAgMCAgIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICAqIEByZXR2YWwgICAgIDEgICBXRFQgdGltZS1vdXQgaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGluZGljYXRlcyBXRFQgdGltZS1vdXQgaW50ZXJydXB0IG9jY3VycmVkIG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdEVF9HRVRfVElNRU9VVF9JTlRfRkxBRygpICAgICAgKChXRFQtPkNUTCAmIFdEVF9DVExfSUZfTXNrKT8gMVVMIDogMFVMKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgV0RUIFRpbWUtb3V0IFdha2UtdXAgRmxhZworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHZhbCAgICAgMCAgIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgZG9lcyBub3QgY2F1c2UgQ1BVIHdha2UtdXAKKyAgKiBAcmV0dmFsICAgICAxICAgV0RUIHRpbWUtb3V0IGludGVycnVwdCBldmVudCBjYXVzZSBDUFUgd2FrZS11cAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpbmRpY2F0ZXMgV0RUIHRpbWUtb3V0IGludGVycnVwdCBldmVudCBoYXMgd2FrZWQgdXAgc3lzdGVtIG9yIG5vdC4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdEVF9HRVRfVElNRU9VVF9XQUtFVVBfRkxBRygpICAgKChXRFQtPkNUTCAmIFdEVF9DVExfV0tGX01zayk/IDFVTCA6IDBVTCkKKworLyoqCisgICogQGJyaWVmICAgICAgUmVzZXQgV0RUIENvdW50ZXIKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZXNldCB0aGUgaW50ZXJuYWwgMTgtYml0IFdEVCB1cCBjb3VudGVyIHZhbHVlLgorICAgICAgICBJZiBXRFQgaXMgYWN0aXZhdGVkIGFuZCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZnVuY3Rpb24gaXMgZW5hYmxlZCBhbHNvLCB1c2VyIHNob3VsZCBcbgorICAqICAgICAgICAgICAgIHJlc2V0IHRoZSAxOC1iaXQgV0RUIHVwIGNvdW50ZXIgdmFsdWUgdG8gYXZvaWQgZ2VuZXJhdGUgV0RUIHRpbWUtb3V0IHJlc2V0IHNpZ25hbCB0byBcbgorICAqICAgICAgICAgICAgIHJlc2V0IHN5c3RlbSBiZWZvcmUgdGhlIFdEVCB0aW1lLW91dCByZXNldCBkZWxheSBwZXJpb2QgZXhwaXJlcy4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdEVF9SRVNFVF9DT1VOVEVSKCkgICAgICAgICAgICAgKFdEVC0+UlNUQ05UID0gV0RUX1JFU0VUX0NPVU5URVJfS0VZV09SRCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBEZWNsYXJlIHRoZXNlIGlubGluZSBmdW5jdGlvbnMgaGVyZSB0byBhdm9pZCBNSVNSQSBDIDIwMDQgcnVsZSA4LjEgZXJyb3IgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFdEVF9DbG9zZSh2b2lkKTsKK19fU1RBVElDX0lOTElORSB2b2lkIFdEVF9FbmFibGVJbnQodm9pZCk7CitfX1NUQVRJQ19JTkxJTkUgdm9pZCBXRFRfRGlzYWJsZUludCh2b2lkKTsKKworLyoqCisgICogQGJyaWVmICAgICAgU3RvcCBXRFQgQ291bnRpbmcKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9wIFdEVCBjb3VudGluZyBhbmQgZGlzYWJsZSBXRFQgbW9kdWxlLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgV0RUX0Nsb3NlKHZvaWQpCit7CisgICAgV0RULT5DVEwgPSAwVUw7CisgICAgd2hpbGUoV0RULT5DVEwgJiBXRFRfQ1RMX1NZTkNfTXNrKSB7fSAvKiBXYWl0IGRpc2FibGUgV0RURU4gYml0IGNvbXBsZXRlZCwgaXQgbmVlZHMgMiAqIFdEVF9DTEsuICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBXRFQgVGltZS1vdXQgSW50ZXJydXB0CisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlIHRoZSBXRFQgdGltZS1vdXQgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgV0RUX0VuYWJsZUludCh2b2lkKQoreworICAgIFdEVC0+Q1RMIHw9IFdEVF9DVExfSU5URU5fTXNrOworICAgIHdoaWxlKFdEVC0+Q1RMICYgV0RUX0NUTF9TWU5DX01zaykge30gLyogV2FpdCBlbmFibGUgV0RURU4gYml0IGNvbXBsZXRlZCwgaXQgbmVlZHMgMiAqIFdEVF9DTEsuICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgV0RUIFRpbWUtb3V0IEludGVycnVwdAorICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FibGUgdGhlIFdEVCB0aW1lLW91dCBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBXRFRfRGlzYWJsZUludCh2b2lkKQoreworICAgIC8qIERvIG5vdCB0b3VjaCBhbm90aGVyIHdyaXRlIDEgY2xlYXIgYml0cyAqLworICAgIFdEVC0+Q1RMICY9IH4oV0RUX0NUTF9JTlRFTl9Nc2sgfCBXRFRfQ1RMX1JTVEZfTXNrIHwgV0RUX0NUTF9JRl9Nc2sgfCBXRFRfQ1RMX1dLRl9Nc2spOworfQorCit2b2lkIFdEVF9PcGVuKHVpbnQzMl90IHUzMlRpbWVvdXRJbnRlcnZhbCwgdWludDMyX3QgdTMyUmVzZXREZWxheSwgdWludDMyX3QgdTMyRW5hYmxlUmVzZXQsIHVpbnQzMl90IHUzMkVuYWJsZVdha2V1cCk7CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgV0RUX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFdEVF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fV0RUX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy93d2R0LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL2luYy93d2R0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlZjEzNwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvaW5jL3d3ZHQuaApAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHd3ZHQuaAorICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgV2luZG93IFdhdGNoZG9nIFRpbWVyKFdXRFQpIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fV1dEVF9IX18KKyNkZWZpbmUgX19XV0RUX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgV1dEVF9Ecml2ZXIgV1dEVCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBXV0RUX0VYUE9SVEVEX0NPTlNUQU5UUyBXV0RUIEV4cG9ydGVkIENvbnN0YW50cworICBAeworKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBXV0RUIFByZXNjYWxlIFBlcmlvZCBDb25zdGFudCBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfMSAgICAgICAgKDAgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gMSAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl8yICAgICAgICAoMSA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byAyICogKDY0KldXRFRfQ0xLKSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdXRFRfUFJFU0NBTEVSXzQgICAgICAgICgyIDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpICAvKiE8IFNlbGVjdCBtYXggdGltZS1vdXQgcGVyaW9kIHRvIDQgKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfOCAgICAgICAgKDMgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gOCAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl8xNiAgICAgICAoNCA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byAxNiAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl8zMiAgICAgICAoNSA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byAzMiAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl82NCAgICAgICAoNiA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byA2NCAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl8xMjggICAgICAoNyA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byAxMjggKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfMTkyICAgICAgKDggPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gMTkyICogKDY0KldXRFRfQ0xLKSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdXRFRfUFJFU0NBTEVSXzI1NiAgICAgICg5IDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpICAvKiE8IFNlbGVjdCBtYXggdGltZS1vdXQgcGVyaW9kIHRvIDI1NiAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl8zODQgICAgICAoMTAgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byAzODQgKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfNTEyICAgICAgKDExIDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gNTEyICogKDY0KldXRFRfQ0xLKSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdXRFRfUFJFU0NBTEVSXzc2OCAgICAgICgxMiA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAvKiE8IFNlbGVjdCBtYXggdGltZS1vdXQgcGVyaW9kIHRvIDc2OCAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworI2RlZmluZSBXV0RUX1BSRVNDQUxFUl8xMDI0ICAgICAoMTMgPDwgV1dEVF9DVExfUFNDU0VMX1BvcykgLyohPCBTZWxlY3QgbWF4IHRpbWUtb3V0IHBlcmlvZCB0byAxMDI0ICogKDY0KldXRFRfQ0xLKSBcaGlkZWluaXRpYWxpemVyICovCisjZGVmaW5lIFdXRFRfUFJFU0NBTEVSXzE1MzYgICAgICgxNCA8PCBXV0RUX0NUTF9QU0NTRUxfUG9zKSAvKiE8IFNlbGVjdCBtYXggdGltZS1vdXQgcGVyaW9kIHRvIDE1MzYgKiAoNjQqV1dEVF9DTEspIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKyNkZWZpbmUgV1dEVF9QUkVTQ0FMRVJfMjA0OCAgICAgKDE1IDw8IFdXRFRfQ1RMX1BTQ1NFTF9Qb3MpIC8qITwgU2VsZWN0IG1heCB0aW1lLW91dCBwZXJpb2QgdG8gMjA0OCAqICg2NCpXV0RUX0NMSykgXGhpZGVpbml0aWFsaXplciAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgV1dEVCBSZWxvYWQgQ291bnRlciBLZXl3b3JkIENvbnN0YW50IERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdXRFRfUkVMT0FEX1dPUkQgICAgICAgICgweDAwMDA1QUE1KSAgICAgICAgICAgICAgICAvKiE8IEZpbGwgdGhpcyB2YWx1ZSB0byBXV0RUX1JMRENOVCByZWdpc3RlciB0byByZWxvYWQgV1dEVCBjb3VudGVyIFxoaWRlaW5pdGlhbGl6ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBXV0RUX0VYUE9SVEVEX0NPTlNUQU5UUyAqLworCisKKy8qKiBAYWRkdG9ncm91cCBXV0RUX0VYUE9SVEVEX0ZVTkNUSU9OUyBXV0RUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgV1dEVCBSZXNldCBTeXN0ZW0gRmxhZworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNsZWFyIFdXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGZsYWcuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBXV0RUX0NMRUFSX1JFU0VUX0ZMQUcoKSAgICAgKFdXRFQtPlNUQVRVUyA9IFdXRFRfU1RBVFVTX1dXRFRSRl9Nc2spCisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIFdXRFQgQ29tcGFyZWQgTWF0Y2ggSW50ZXJydXB0IEZsYWcKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjbGVhciBXV0RUIGNvbXBhcmVkIG1hdGNoIGludGVycnVwdCBmbGFnLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgV1dEVF9DTEVBUl9JTlRfRkxBRygpICAgICAgIChXV0RULT5TVEFUVVMgPSBXV0RUX1NUQVRVU19XV0RUSUZfTXNrKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgV1dEVCBSZXNldCBTeXN0ZW0gRmxhZworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHZhbCAgICAgMCAgIFdXRFQgdGltZS1vdXQgcmVzZXQgc3lzdGVtIGRpZCBub3Qgb2NjdXIKKyAgKiBAcmV0dmFsICAgICAxICAgV1dEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gb2NjdXJyZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBpbmRpY2F0ZSBzeXN0ZW0gaGFzIGJlZW4gcmVzZXQgYnkgV1dEVCB0aW1lLW91dCByZXNldCBvciBub3QuCisgICogXGhpZGVpbml0aWFsaXplcgorICAqLworI2RlZmluZSBXV0RUX0dFVF9SRVNFVF9GTEFHKCkgICAgICAgKChXV0RULT5TVEFUVVMgJiBXV0RUX1NUQVRVU19XV0RUUkZfTXNrKT8gMSA6IDApCisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBXV0RUIENvbXBhcmVkIE1hdGNoIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgV1dEVCBjb21wYXJlIG1hdGNoIGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgICogQHJldHZhbCAgICAgMSAgIFdXRFQgY29tcGFyZSBtYXRjaCBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBpbmRpY2F0ZSBXV0RUIGNvdW50ZXIgdmFsdWUgbWF0Y2hlcyBDTVBEQVQgdmFsdWUgb3Igbm90LgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgV1dEVF9HRVRfSU5UX0ZMQUcoKSAgICAgICAgICgoV1dEVC0+U1RBVFVTICYgV1dEVF9TVEFUVVNfV1dEVElGX01zayk/IDEgOiAwKQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgV1dEVCBDb3VudGVyCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBXV0RUIENvdW50ZXIgVmFsdWUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gcmVmbGVjdHMgdGhlIGN1cnJlbnQgV1dEVCBjb3VudGVyIHZhbHVlLgorICAqIFxoaWRlaW5pdGlhbGl6ZXIKKyAgKi8KKyNkZWZpbmUgV1dEVF9HRVRfQ09VTlRFUigpICAgICAgICAgIChXV0RULT5DTlQpCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlbG9hZCBXV0RUIENvdW50ZXIKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZWxvYWQgdGhlIFdXRFQgY291bnRlciB2YWx1ZSB0byAweDNGLgorICAgICAgICBVc2VyIGNhbiBvbmx5IHdyaXRlIFdXRFRfUkxEQ05UIHJlZ2lzdGVyIHRvIHJlbG9hZCBXV0RUIGNvdW50ZXIgdmFsdWUgd2hlbiBjdXJyZW50IFdXRFQgY291bnRlciB2YWx1ZSBcbgorICAqICAgICAgICAgICAgIGJldHdlZW4gMCBhbmQgQ01QREFUIHZhbHVlLiBJZiB1c2VyIHdyaXRlcyBXV0RUX1JMRENOVCB3aGVuIGN1cnJlbnQgV1dEVCBjb3VudGVyIHZhbHVlIGlzIGxhcmdlciB0aGFuIENNUERBVCwgXG4KKyAgKiAgICAgICAgICAgICBXV0RUIHJlc2V0IHNpZ25hbCB3aWxsIGdlbmVyYXRlIGltbWVkaWF0ZWx5IHRvIHJlc2V0IHN5c3RlbS4KKyAgKiBcaGlkZWluaXRpYWxpemVyCisgICovCisjZGVmaW5lIFdXRFRfUkVMT0FEX0NPVU5URVIoKSAgICAgICAoV1dEVC0+UkxEQ05UID0gV1dEVF9SRUxPQURfV09SRCkKKwordm9pZCBXV0RUX09wZW4odWludDMyX3QgdTMyUHJlU2NhbGUsIHVpbnQzMl90IHUzMkNtcFZhbHVlLCB1aW50MzJfdCB1MzJFbmFibGVJbnQpOworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFdXRFRfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgV1dEVF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fV1dEVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvYWNtcC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvYWNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZGFiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9hY21wLmMKQEAgLTAsMCArMSw4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGFjbXAuYworICogQHZlcnNpb24gIFYzLjAwCisgKiAkUmV2aXNpb246IDEgJAorICogJERhdGU6IDE2LzA3LzA3IDc6NTBwICQKKyAqIEBicmllZiAgICBBbmFsb2cgQ29tcGFyYXRvcihBQ01QKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk0yMzUxLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQUNNUF9Ecml2ZXIgQUNNUCBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIEFDTVBfRVhQT1JURURfRlVOQ1RJT05TIEFDTVAgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBzcGVjaWZpZWQgQUNNUCBtb2R1bGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIGFjbXAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyQ2hOdW0gIENvbXBhcmF0b3IgbnVtYmVyLgorICAqIEBwYXJhbVtpbl0gIHUzMk5lZ1NyYyBDb21wYXJhdG9yIG5lZ2F0aXZlIGlucHV0IHNlbGVjdGlvbi4gIEluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9ORUdTRUxfUElOCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgQUNNUF9DVExfTkVHU0VMX0NSVgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX05FR1NFTF9WQkcKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBBQ01QX0NUTF9ORUdTRUxfREFDCisgICogQHBhcmFtW2luXSAgdTMySHlzU2VsIFRoZSBoeXN0ZXJlc2lzIGZ1bmN0aW9uIG9wdGlvbi4gSW5jbHVkaW5nOgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0hZU1RFUkVTSVNfMzBNVgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0hZU1RFUkVTSVNfMjBNVgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0hZU1RFUkVTSVNfMTBNVgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEFDTVBfQ1RMX0hZU1RFUkVTSVNfRElTQUJMRQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgQ29uZmlndXJlIGh5c3RlcmVzaXMgZnVuY3Rpb24sIHNlbGVjdCB0aGUgc291cmNlIG9mIG5lZ2F0aXZlIGlucHV0IGFuZCBlbmFibGUgYW5hbG9nIGNvbXBhcmF0b3IuCisgICovCit2b2lkIEFDTVBfT3BlbihBQ01QX1QgKmFjbXAsIHVpbnQzMl90IHUzMkNoTnVtLCB1aW50MzJfdCB1MzJOZWdTcmMsIHVpbnQzMl90IHUzMkh5c1NlbCkKK3sKKyAgICBhY21wLT5DVExbdTMyQ2hOdW1dID0gKGFjbXAtPkNUTFt1MzJDaE51bV0gJiAofihBQ01QX0NUTF9ORUdTRUxfTXNrIHwgQUNNUF9DVExfSFlTU0VMX01zaykpKSB8ICh1MzJOZWdTcmMgfCB1MzJIeXNTZWwgfCBBQ01QX0NUTF9BQ01QRU5fTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICBDbG9zZSBhbmFsb2cgY29tcGFyYXRvcgorICAqCisgICogQHBhcmFtW2luXSAgYWNtcCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEFDTVAgbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyQ2hOdW0gQ29tcGFyYXRvciBudW1iZXIuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIEFDTVBFTiBiaXQgb2YgQUNNUF9DVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBhbmFsb2cgY29tcGFyYXRvci4KKyAgKi8KK3ZvaWQgQUNNUF9DbG9zZShBQ01QX1QgKmFjbXAsIHVpbnQzMl90IHUzMkNoTnVtKQoreworICAgIGFjbXAtPkNUTFt1MzJDaE51bV0gJj0gKH5BQ01QX0NUTF9BQ01QRU5fTXNrKTsKK30KKworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQUNNUF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBBQ01QX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9icHdtLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9icHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlN2M1ZAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2Jwd20uYwpAQCAtMCwwICsxLDcxMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGJwd20uYworICogQHZlcnNpb24gIFYxLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIEJQV00gZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQlBXTV9Ecml2ZXIgQlBXTSBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIEJQV01fRVhQT1JURURfRlVOQ1RJT05TIEJQV00gRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAqIEBicmllZiBDb25maWd1cmUgQlBXTSBjYXB0dXJlIGFuZCBnZXQgdGhlIG5lYXJlc3QgdW5pdCB0aW1lLgorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMlVuaXRUaW1lTnNlYyBUaGUgdW5pdCB0aW1lIG9mIGNvdW50ZXIKKyAqIEBwYXJhbVtpbl0gdTMyQ2FwdHVyZUVkZ2UgVGhlIGNvbmRpdGlvbiB0byBsYXRjaCB0aGUgY291bnRlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQKKyAqIEByZXR1cm4gVGhlIG5lYXJlc3QgdW5pdCB0aW1lIGluIG5hbm8gc2Vjb25kLgorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIENvbmZpZ3VyZSBCUFdNIGNhcHR1cmUgYW5kIGdldCB0aGUgbmVhcmVzdCB1bml0IHRpbWUuCisgKi8KK3VpbnQzMl90IEJQV01fQ29uZmlnQ2FwdHVyZUNoYW5uZWwoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJVbml0VGltZU5zZWMsIHVpbnQzMl90IHUzMkNhcHR1cmVFZGdlKQoreworICAgIHVpbnQzMl90IHUzMlBXTUNsb2NrU3JjOworICAgIHVpbnQzMl90IHUzMk5lYXJlc3RVbml0VGltZU5zZWMgPSAwVTsKKyAgICB1aW50MzJfdCB1MzJQcmVzY2FsZSA9IDFVLCB1MzJDTlIgPSAweEZGRkZVOworICAgIHVpbnQ4X3QgdThCcmVha0xvb3AgPSAwVTsKKworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgKHZvaWQpdTMyQ2FwdHVyZUVkZ2U7CisgICAgLyogY2xvY2sgc291cmNlIGlzIGZyb20gUENMSyAqLworICAgIGlmKCgoKHVpbnQzMl90KWJwd20pID09IEJQV00wX0JBU0UpIHx8ICgoKHVpbnQzMl90KWJwd20pID09IEJQV00wX0JBU0UgKyBOU19PRkZTRVQpKQorICAgIHsKKyAgICAgICAgdTMyUFdNQ2xvY2tTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorICAgIGVsc2UvKiBpZigoYnB3bSA9PSBCUFdNMSl8fChicHdtID09IEJQV00xX05TKSkgKi8KKyAgICB7CisgICAgICAgIHUzMlBXTUNsb2NrU3JjID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKworICAgIHUzMlBXTUNsb2NrU3JjIC89IDEwMDBVTDsKKyAgICBmb3IodTMyUHJlc2NhbGUgPSAxVTsgdTMyUHJlc2NhbGUgPD0gMHgxMDAwVUw7IHUzMlByZXNjYWxlKyspCisgICAgeworICAgICAgICB1MzJOZWFyZXN0VW5pdFRpbWVOc2VjID0gKDEwMDAwMDBVTCAqIHUzMlByZXNjYWxlKSAvIHUzMlBXTUNsb2NrU3JjOworICAgICAgICBpZih1MzJOZWFyZXN0VW5pdFRpbWVOc2VjIDwgdTMyVW5pdFRpbWVOc2VjKQorICAgICAgICB7CisgICAgICAgICAgICBpZih1MzJQcmVzY2FsZSA9PSAweDEwMDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGxpbWl0IHRvIHRoZSBtYXhpbXVtIHVuaXQgdGltZShuYW5vIHNlY29uZCkgKi8KKyAgICAgICAgICAgICAgICB1OEJyZWFrTG9vcCA9IDFVOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISgoMTAwMDAwMFVMICogKHUzMlByZXNjYWxlICsgMVVMKSA+ICh1MzJOZWFyZXN0VW5pdFRpbWVOc2VjICogdTMyUFdNQ2xvY2tTcmMpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdThCcmVha0xvb3AgPSAxVTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHU4QnJlYWtMb29wID0gMVU7CisgICAgICAgIH0KKyAgICAgICAgaWYodThCcmVha0xvb3ApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogY29udmVydCB0byByZWFsIHJlZ2lzdGVyIHZhbHVlICovCisgICAgdTMyUHJlc2NhbGUgPSB1MzJQcmVzY2FsZSAtIDFVOworICAgIC8qIGFsbCBjaGFubmVscyBzaGFyZSBhIHByZXNjYWxlciAqLworICAgIEJQV01fU0VUX1BSRVNDQUxFUihicHdtLCB1MzJDaGFubmVsTnVtLCB1MzJQcmVzY2FsZSk7CisKKyAgICAvKiBzZXQgQlBXTSB0byBkb3duIGNvdW50IHR5cGUoZWRnZSBhbGlnbmVkKSAqLworICAgIChicHdtKS0+Q1RMMSA9ICgxVUwpOworCisgICAgQlBXTV9TRVRfQ05SKGJwd20sIHUzMkNoYW5uZWxOdW0sIHUzMkNOUik7CisKKyAgICByZXR1cm4gKHUzMk5lYXJlc3RVbml0VGltZU5zZWMpOworfQorCisvKioKKyAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIENvbmZpZ3VyZSBCUFdNIGdlbmVyYXRvciBhbmQgZ2V0IHRoZSBuZWFyZXN0IGZyZXF1ZW5jeSBpbiBlZGdlIGFsaWduZWQodXAgY291bnRlciB0eXBlKSBhdXRvLXJlbG9hZCBtb2RlCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyRnJlcXVlbmN5IFRhcmdldCBnZW5lcmF0b3IgZnJlcXVlbmN5CisgKiBAcGFyYW1baW5dIHUzMkR1dHlDeWNsZSBUYXJnZXQgZ2VuZXJhdG9yIGR1dHkgY3ljbGUgcGVyY2VudGFnZS4gVmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMCB+IDEwMC4gMTAgbWVhbnMgMTAlLCAyMCBtZWFucyAyMCUuLi4KKyAqIEByZXR1cm4gTmVhcmVzdCBmcmVxdWVuY3kgY2xvY2sgaW4gbmFubyBzZWNvbmQKKyBTaW5jZSBhbGwgY2hhbm5lbHMgc2hhcmVzIGEgcHJlc2NhbGVyLiBDYWxsIHRoaXMgQVBJIHRvIGNvbmZpZ3VyZSBCUFdNIGZyZXF1ZW5jeSBtYXkgYWZmZWN0CisgKiAgICAgICBleGlzdGluZyBmcmVxdWVuY3kgb2Ygb3RoZXIgY2hhbm5lbC4KKyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGluaXRpYWwgc3RhZ2UuCisgKiAgICAgICBUbyBjaGFuZ2UgZHV0eSBjeWNsZSBsYXRlciwgaXQgc2hvdWxkIGdldCB0aGUgY29uZmlndXJlZCBwZXJpb2QgdmFsdWUgYW5kIGNhbGN1bGF0ZSB0aGUgbmV3IGNvbXBhcmF0b3IgdmFsdWUuCisgKi8KK3VpbnQzMl90IEJQV01fQ29uZmlnT3V0cHV0Q2hhbm5lbChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkZyZXF1ZW5jeSwgdWludDMyX3QgdTMyRHV0eUN5Y2xlKQoreworICAgIHVpbnQzMl90IHUzMlBXTUNsb2NrU3JjOworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgdTMyUHJlc2NhbGUgPSAxVSwgdTMyQ05SID0gMHhGRkZGVTsKKworICAgIC8qIGNsb2NrIHNvdXJjZSBpcyBmcm9tIFBDTEsgKi8KKyAgICBpZigoKHVpbnQzMl90KWJwd20gPT0gQlBXTTBfQkFTRSkgfHwgKCh1aW50MzJfdClicHdtID09IEJQV00wX0JBU0UgKyBOU19PRkZTRVQpKQorICAgIHsKKyAgICAgICAgdTMyUFdNQ2xvY2tTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorICAgIGVsc2UvKiBpZigoYnB3bSA9PSBCUFdNMSl8fChicHdtID09IEJQV00xX05TKSkgKi8KKyAgICB7CisgICAgICAgIHUzMlBXTUNsb2NrU3JjID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKworICAgIGZvcih1MzJQcmVzY2FsZSA9IDFVOyB1MzJQcmVzY2FsZSA8IDB4RkZGVTsgdTMyUHJlc2NhbGUrKykvKiBwcmVzY2FsZSBjb3VsZCBiZSAwfjB4RkZGICovCisgICAgeworICAgICAgICBpID0gKHUzMlBXTUNsb2NrU3JjIC8gdTMyRnJlcXVlbmN5KSAvIHUzMlByZXNjYWxlOworICAgICAgICAvKiBJZiB0YXJnZXQgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gQ05SLCBuZWVkIHRvIHVzZSBhIGxhcmdlciBwcmVzY2FsZXIgKi8KKyAgICAgICAgaWYoaSA8PSAoMHgxMDAwMFUpKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDTlIgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogU3RvcmUgcmV0dXJuIHZhbHVlIGhlcmUgJ2NvcyB3ZSdyZSBnb25uYSBjaGFuZ2UgdTMyUHJlc2NhbGUgJiB1MzJDTlIgdG8gdGhlIHJlYWwgdmFsdWUgdG8gZmlsbCBpbnRvIHJlZ2lzdGVyICovCisgICAgaSA9IHUzMlBXTUNsb2NrU3JjIC8gKHUzMlByZXNjYWxlICogdTMyQ05SKTsKKworICAgIC8qIGNvbnZlcnQgdG8gcmVhbCByZWdpc3RlciB2YWx1ZSAqLworICAgIHUzMlByZXNjYWxlID0gdTMyUHJlc2NhbGUgLSAxVTsKKyAgICAvKiBhbGwgY2hhbm5lbHMgc2hhcmUgYSBwcmVzY2FsZXIgKi8KKyAgICBCUFdNX1NFVF9QUkVTQ0FMRVIoYnB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyUHJlc2NhbGUpOworICAgIC8qIHNldCBCUFdNIHRvIHVwIGNvdW50ZXIgdHlwZShlZGdlIGFsaWduZWQpICovCisgICAgKGJwd20pLT5DVEwxID0gQlBXTV9VUF9DT1VOVEVSOworCisgICAgdTMyQ05SID0gdTMyQ05SIC0gMVU7CisgICAgQlBXTV9TRVRfQ05SKGJwd20sIHUzMkNoYW5uZWxOdW0sIHUzMkNOUik7CisgICAgQlBXTV9TRVRfQ01SKGJwd20sIHUzMkNoYW5uZWxOdW0sIHUzMkR1dHlDeWNsZSAqICh1MzJDTlIgKyAxVUwpIC8gMTAwVUwpOworCisKKyAgICAoYnB3bSktPldHQ1RMMCA9ICgoYnB3bSktPldHQ1RMMCAmIH4oKEJQV01fV0dDVEwwX1BSRFBDVEwwX01zayB8IEJQV01fV0dDVEwwX1pQQ1RMMF9Nc2spIDw8ICh1MzJDaGFubmVsTnVtIDw8IDEpKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAoQlBXTV9PVVRQVVRfSElHSCA8PCAodTMyQ2hhbm5lbE51bSA8PCAxVUwgPDwgQlBXTV9XR0NUTDBfWlBDVEwwX1BvcykpOworICAgIChicHdtKS0+V0dDVEwxID0gKChicHdtKS0+V0dDVEwxICYgfigoQlBXTV9XR0NUTDFfQ01QRENUTDBfTXNrIHwgQlBXTV9XR0NUTDFfQ01QVUNUTDBfTXNrKSA8PCAodTMyQ2hhbm5lbE51bSA8PCAxKSkpIHwgXAorICAgICAgICAgICAgICAgICAgICAgKEJQV01fT1VUUFVUX0xPVyA8PCAodTMyQ2hhbm5lbE51bSA8PCAxVUwgPDwgQlBXTV9XR0NUTDFfQ01QVUNUTDBfUG9zKSk7CisKKyAgICByZXR1cm4oaSk7Cit9CisKKy8qKgorICogQGJyaWVmIFN0YXJ0IEJQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0YXJ0IEJQV00gbW9kdWxlLgorIEFsbCBjaGFubmVscyBzaGFyZSBvbmUgY291bnRlci4KKyAqLwordm9pZCBCUFdNX1N0YXJ0KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spCit7CisgICAgKHZvaWQpdTMyQ2hhbm5lbE1hc2s7CisgICAgKGJwd20pLT5DTlRFTiA9IEJQV01fQ05URU5fQ05URU4wX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgU3RvcCBCUFdNIG1vZHVsZQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdG9wIEJQV00gbW9kdWxlLgorIEFsbCBjaGFubmVscyBzaGFyZSBvbmUgcGVyaW9kLgorICovCit2b2lkIEJQV01fU3RvcChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxNYXNrOworICAgIChicHdtKS0+UEVSSU9EID0gMFVMOworfQorCisvKioKKyAqIEBicmllZiBTdG9wIEJQV00gZ2VuZXJhdGlvbiBpbW1lZGlhdGVseSBieSBjbGVhciBjaGFubmVsIGVuYWJsZSBiaXQKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RvcCBCUFdNIGdlbmVyYXRpb24gaW1tZWRpYXRlbHkgYnkgY2xlYXIgY2hhbm5lbCBlbmFibGUgYml0LgorIEFsbCBjaGFubmVscyBzaGFyZSBvbmUgY291bnRlci4KKyAqLwordm9pZCBCUFdNX0ZvcmNlU3RvcChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxNYXNrOworICAgIChicHdtKS0+Q05URU4gJj0gfkJQV01fQ05URU5fQ05URU4wX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIHNlbGVjdGVkIGNoYW5uZWwgdG8gdHJpZ2dlciBBREMKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJDb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byB0cmlnZ2VyIEFEQy4gQ29tYmluYXRpb24gb2YgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBCUFdNX1RSSUdHRVJfQURDX0VWRU5fWkVST19QT0lOVAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9UUklHR0VSX0FEQ19FVkVOX1BFUklPRF9QT0lOVAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9UUklHR0VSX0FEQ19FVkVOX1pFUk9fT1JfUEVSSU9EX1BPSU5UCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBCUFdNX1RSSUdHRVJfQURDX0VWRU5fQ01QX1VQX0NPVU5UX1BPSU5UCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBCUFdNX1RSSUdHRVJfQURDX0VWRU5fQ01QX0RPV05fQ09VTlRfUE9JTlQKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEJQV01fVFJJR0dFUl9BRENfT0REX0NNUF9VUF9DT1VOVF9QT0lOVAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9UUklHR0VSX0FEQ19PRERfQ01QX0RPV05fQ09VTlRfUE9JTlQKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgQURDCisgKi8KK3ZvaWQgQlBXTV9FbmFibGVBRENUcmlnZ2VyKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ29uZGl0aW9uKQoreworICAgIGlmKHUzMkNoYW5uZWxOdW0gPCA0VUwpCisgICAgeworICAgICAgICAoYnB3bSktPkVBRENUUzAgJj0gfigoQlBXTV9FQURDVFMwX1RSR1NFTDBfTXNrKSA8PCAodTMyQ2hhbm5lbE51bSA8PCAzKSk7CisgICAgICAgIChicHdtKS0+RUFEQ1RTMCB8PSAoKEJQV01fRUFEQ1RTMF9UUkdFTjBfTXNrIHwgdTMyQ29uZGl0aW9uKSA8PCAodTMyQ2hhbm5lbE51bSA8PCAzKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIChicHdtKS0+RUFEQ1RTMSAmPSB+KChCUFdNX0VBRENUUzFfVFJHU0VMNF9Nc2spIDw8ICgodTMyQ2hhbm5lbE51bSAtIDRVTCkgPDwgMykpOworICAgICAgICAoYnB3bSktPkVBRENUUzEgfD0gKChCUFdNX0VBRENUUzFfVFJHRU40X01zayB8IHUzMkNvbmRpdGlvbikgPDwgKCh1MzJDaGFubmVsTnVtIC0gNFVMKSA8PCAzKSk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIHNlbGVjdGVkIGNoYW5uZWwgdG8gdHJpZ2dlciBBREMKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+MworICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgQURDCisgKi8KK3ZvaWQgQlBXTV9EaXNhYmxlQURDVHJpZ2dlcihCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgaWYodTMyQ2hhbm5lbE51bSA8IDRVTCkKKyAgICB7CisgICAgICAgIChicHdtKS0+RUFEQ1RTMCAmPSB+KEJQV01fRUFEQ1RTMF9UUkdFTjBfTXNrIDw8ICh1MzJDaGFubmVsTnVtIDw8IDMpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKGJwd20pLT5FQURDVFMxICY9IH4oQlBXTV9FQURDVFMxX1RSR0VONF9Nc2sgPDwgKCh1MzJDaGFubmVsTnVtIC0gNFVMKSA8PCAzKSk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBDbGVhciBzZWxlY3RlZCBjaGFubmVsIHRyaWdnZXIgQURDIGZsYWcKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJDb25kaXRpb24gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIHNlbGVjdGVkIGNoYW5uZWwgdHJpZ2dlciBBREMgZmxhZworICovCit2b2lkIEJQV01fQ2xlYXJBRENUcmlnZ2VyRmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNvbmRpdGlvbikKK3sKKyAgICAodm9pZCl1MzJDb25kaXRpb247CisgICAgKGJwd20pLT5TVEFUVVMgPSAoQlBXTV9TVEFUVVNfRUFEQ1RSRzBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBHZXQgc2VsZWN0ZWQgY2hhbm5lbCB0cmlnZ2VyIEFEQyBmbGFnCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR2YWwgMCBUaGUgc3BlY2lmaWVkIGNoYW5uZWwgdHJpZ2dlciBBREMgdG8gc3RhcnQgb2YgY29udmVyc2lvbiBmbGFnIGlzIG5vdCBzZXQKKyAqIEByZXR2YWwgMSBUaGUgc3BlY2lmaWVkIGNoYW5uZWwgdHJpZ2dlciBBREMgdG8gc3RhcnQgb2YgY29udmVyc2lvbiBmbGFnIGlzIHNldAorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBCUFdNIHRyaWdnZXIgQURDIHRvIHN0YXJ0IG9mIGNvbnZlcnNpb24gZmxhZyBmb3Igc3BlY2lmaWVkIGNoYW5uZWwKKyAqLwordWludDMyX3QgQlBXTV9HZXRBRENUcmlnZ2VyRmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgcmV0dXJuICgoKGJwd20pLT5TVEFUVVMgJiAoQlBXTV9TVEFUVVNfRUFEQ1RSRzBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBjYXB0dXJlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgY2hhbm5lbCAwLCBiaXQgMSBpcyBjaGFubmVsIDEuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBjYXB0dXJlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqLwordm9pZCBCUFdNX0VuYWJsZUNhcHR1cmUoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAoYnB3bSktPkNBUElORU4gfD0gdTMyQ2hhbm5lbE1hc2s7CisgICAgKGJwd20pLT5DQVBDVEwgfD0gdTMyQ2hhbm5lbE1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgY2FwdHVyZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIGNoYW5uZWwgMCwgYml0IDEgaXMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGNhcHR1cmUgb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICovCit2b2lkIEJQV01fRGlzYWJsZUNhcHR1cmUoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAoYnB3bSktPkNBUElORU4gJj0gfnUzMkNoYW5uZWxNYXNrOworICAgIChicHdtKS0+Q0FQQ1RMICY9IH51MzJDaGFubmVsTWFzazsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlcyBCUFdNIG91dHB1dCBnZW5lcmF0aW9uIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IGJpdCAwIHRvIDEgZW5hYmxlcyBjaGFubmVsIDAgb3V0cHV0LCBzZXQgYml0IDEgdG8gMSBlbmFibGVzIGNoYW5uZWwgMSBvdXRwdXQuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZXMgQlBXTSBvdXRwdXQgZ2VuZXJhdGlvbiBvZiBzZWxlY3RlZCBjaGFubmVsKHMpCisgKi8KK3ZvaWQgQlBXTV9FbmFibGVPdXRwdXQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAoYnB3bSktPlBPRU4gfD0gdTMyQ2hhbm5lbE1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGVzIEJQV00gb3V0cHV0IGdlbmVyYXRpb24gb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBiaXQgMCB0byAxIGRpc2FibGVzIGNoYW5uZWwgMCBvdXRwdXQsIHNldCBiaXQgMSB0byAxIGRpc2FibGVzIGNoYW5uZWwgMSBvdXRwdXQuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGVzIEJQV00gb3V0cHV0IGdlbmVyYXRpb24gb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICovCit2b2lkIEJQV01fRGlzYWJsZU91dHB1dChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgIChicHdtKS0+UE9FTiAmPSB+dTMyQ2hhbm5lbE1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkVkZ2UgUmlzaW5nIG9yIGZhbGxpbmcgZWRnZSB0byBsYXRjaCBjb3VudGVyLgorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0NBUFRVUkVfSU5UX1JJU0lOR19MQVRDSAorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0NBUFRVUkVfSU5UX0ZBTExJTkdfTEFUQ0gKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEJQV01fRW5hYmxlQ2FwdHVyZUludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkVkZ2UpCit7CisgICAgKGJwd20pLT5DQVBJRU4gfD0gKHUzMkVkZ2UgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJFZGdlIFJpc2luZyBvciBmYWxsaW5nIGVkZ2UgdG8gbGF0Y2ggY291bnRlci4KKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9DQVBUVVJFX0lOVF9SSVNJTkdfTEFUQ0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9DQVBUVVJFX0lOVF9GQUxMSU5HX0xBVENICisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGNhcHR1cmUgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgQlBXTV9EaXNhYmxlQ2FwdHVyZUludChCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkVkZ2UpCit7CisgICAgKGJwd20pLT5DQVBJRU4gJj0gfih1MzJFZGdlIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkVkZ2UgUmlzaW5nIG9yIGZhbGxpbmcgZWRnZSB0byBsYXRjaCBjb3VudGVyLgorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0NBUFRVUkVfSU5UX1JJU0lOR19MQVRDSAorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0NBUFRVUkVfSU5UX0ZBTExJTkdfTEFUQ0gKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIGNhcHR1cmUgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgQlBXTV9DbGVhckNhcHR1cmVJbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyRWRnZSkKK3sKKyAgICAoYnB3bSktPkNBUElGID0gKHUzMkVkZ2UgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dmFsIDAgTm8gY2FwdHVyZSBpbnRlcnJ1cHQKKyAqIEByZXR2YWwgMSBSaXNpbmcgZWRnZSBsYXRjaCBpbnRlcnJ1cHQKKyAqIEByZXR2YWwgMiBGYWxsaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0CisgKiBAcmV0dmFsIDMgUmlzaW5nIGFuZCBmYWxsaW5nIGxhdGNoIGludGVycnVwdAorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit1aW50MzJfdCBCUFdNX0dldENhcHR1cmVJbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICB1aW50MzJfdCB1MzJDYXBJZiA9IDBVTDsKKworICAgIHUzMkNhcElmID0gKCgoKGJwd20pLT5DQVBJRiAmIChCWVRFMV9Nc2sgPDwgdTMyQ2hhbm5lbE51bSkpID8gMVVMIDogMFVMKSA8PCAxKTsKKyAgICB1MzJDYXBJZiB8PSAoKChicHdtKS0+Q0FQSUYgJiAoQllURTBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSA/IDFVTCA6IDBVTCk7CisgICAgcmV0dXJuIHUzMkNhcElmOworfQorLyoqCisgKiBAYnJpZWYgRW5hYmxlIGR1dHkgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJJbnREdXR5VHlwZSBEdXR5IGludGVycnVwdCB0eXBlLCBjb3VsZCBiZSBlaXRoZXIKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9EVVRZX0lOVF9ET1dOX0NPVU5UX01BVENIX0NNUAorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0RVVFlfSU5UX1VQX0NPVU5UX01BVENIX0NNUAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGR1dHkgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgQlBXTV9FbmFibGVEdXR5SW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMySW50RHV0eVR5cGUpCit7CisgICAgKGJwd20pLT5JTlRFTiB8PSAodTMySW50RHV0eVR5cGUgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgZHV0eSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGR1dHkgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqLwordm9pZCBCUFdNX0Rpc2FibGVEdXR5SW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoYnB3bSktPklOVEVOICY9IH4odWludDMyX3QpKChCUFdNX0RVVFlfSU5UX0RPV05fQ09VTlRfTUFUQ0hfQ01QIHwgQlBXTV9EVVRZX0lOVF9VUF9DT1VOVF9NQVRDSF9DTVApIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciBkdXR5IGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgZHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsCisgKi8KK3ZvaWQgQlBXTV9DbGVhckR1dHlJbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoYnB3bSktPklOVFNUUyA9IChCWVRFMl9Nc2sgfCBCWVRFM19Nc2spIDw8IHUzMkNoYW5uZWxOdW07Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBkdXR5IGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBEdXR5IGludGVycnVwdCBmbGFnIG9mIHNwZWNpZmllZCBjaGFubmVsCisgKiBAcmV0dmFsIDAgRHV0eSBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICogQHJldHZhbCAxIER1dHkgaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGR1dHkgaW50ZXJydXB0IGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICovCit1aW50MzJfdCBCUFdNX0dldER1dHlJbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICByZXR1cm4gKCgoKGJwd20pLT5JTlRTVFMgJiAoKEJZVEUyX01zayB8IEJZVEUzX01zaykgPDwgdTMyQ2hhbm5lbE51bSkpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcGFyYW1baW5dIHUzMkludFBlcmlvZFR5cGUgUGVyaW9kIGludGVycnVwdCB0eXBlLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKi8KK3ZvaWQgQlBXTV9FbmFibGVQZXJpb2RJbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCAgdWludDMyX3QgdTMySW50UGVyaW9kVHlwZSkKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgICh2b2lkKXUzMkludFBlcmlvZFR5cGU7CisgICAgKGJwd20pLT5JTlRFTiB8PSBCUFdNX0lOVEVOX1BJRU4wX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHBlcmlvZCBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgY2hhbm5lbCAwJ3Mgc2V0dGluZy4KKyAqLwordm9pZCBCUFdNX0Rpc2FibGVQZXJpb2RJbnQoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgKGJwd20pLT5JTlRFTiAmPSB+QlBXTV9JTlRFTl9QSUVOMF9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmIENsZWFyIHBlcmlvZCBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIHBlcmlvZCBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorIEFsbCBjaGFubmVscyBzaGFyZSBjaGFubmVsIDAncyBzZXR0aW5nLgorICovCit2b2lkIEJQV01fQ2xlYXJQZXJpb2RJbnRGbGFnKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgIChicHdtKS0+SU5UU1RTID0gQlBXTV9JTlRTVFNfUElGMF9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIFBlcmlvZCBpbnRlcnJ1cHQgZmxhZyBvZiBzcGVjaWZpZWQgY2hhbm5lbAorICogQHJldHZhbCAwIFBlcmlvZCBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICogQHJldHZhbCAxIFBlcmlvZCBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKi8KK3VpbnQzMl90IEJQV01fR2V0UGVyaW9kSW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKHZvaWQpdTMyQ2hhbm5lbE51bTsKKyAgICByZXR1cm4gKCgoYnB3bSktPklOVFNUUyAmIEJQV01fSU5UU1RTX1BJRjBfTXNrKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgQWxsIGNoYW5uZWxzIHNoYXJlIGNoYW5uZWwgMCdzIHNldHRpbmcuCisgKi8KK3ZvaWQgQlBXTV9FbmFibGVaZXJvSW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgIChicHdtKS0+SU5URU4gfD0gQlBXTV9JTlRFTl9aSUVOMF9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgY2hhbm5lbCAwJ3Mgc2V0dGluZy4KKyAqLwordm9pZCBCUFdNX0Rpc2FibGVaZXJvSW50KEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAodm9pZCl1MzJDaGFubmVsTnVtOworICAgIChicHdtKS0+SU5URU4gJj0gfkJQV01fSU5URU5fWklFTjBfTXNrOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgY2hhbm5lbCAwJ3Mgc2V0dGluZy4KKyAqLwordm9pZCBCUFdNX0NsZWFyWmVyb0ludEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgKGJwd20pLT5JTlRTVFMgPSBCUFdNX0lOVFNUU19aSUYwX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gYnB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEJQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEJQV00wIDogQlBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEJQV00xIDogQlBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gQlBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIHplcm8gaW50ZXJydXB0IGZsYWcgb2Ygc3BlY2lmaWVkIGNoYW5uZWwKKyAqIEByZXR2YWwgMCB6ZXJvIGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgKiBAcmV0dmFsIDEgemVybyBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgY2hhbm5lbCAwJ3Mgc2V0dGluZy4KKyAqLwordWludDMyX3QgQlBXTV9HZXRaZXJvSW50RmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKHZvaWQpdTMyQ2hhbm5lbE51bTsKKyAgICByZXR1cm4gKCgoYnB3bSktPklOVFNUUyAmIEJQV01fSU5UU1RTX1pJRjBfTXNrKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBsb2FkIG1vZGUgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkxvYWRNb2RlIEJQV00gY291bnRlciBsb2FkaW5nIG1vZGUuCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fTE9BRF9NT0RFX0lNTUVESUFURQorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0xPQURfTU9ERV9DRU5URVIKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBsb2FkIG1vZGUgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBCUFdNX0VuYWJsZUxvYWRNb2RlKEJQV01fVCAqYnB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyTG9hZE1vZGUpCit7CisgICAgKGJwd20pLT5DVEwwIHw9ICh1MzJMb2FkTW9kZSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBsb2FkIG1vZGUgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkxvYWRNb2RlIEJQV00gY291bnRlciBsb2FkaW5nIG1vZGUuCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fTE9BRF9NT0RFX0lNTUVESUFURQorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0xPQURfTU9ERV9DRU5URVIKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgbG9hZCBtb2RlIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgQlBXTV9EaXNhYmxlTG9hZE1vZGUoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJMb2FkTW9kZSkKK3sKKyAgICAoYnB3bSktPkNUTDAgJj0gfih1MzJMb2FkTW9kZSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgU2V0IEJQV00gY2xvY2sgc291cmNlCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHBhcmFtW2luXSB1MzJDbGtTcmNTZWwgQlBXTSBleHRlcm5hbCBjbG9jayBzb3VyY2UuCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fQ0xLU1JDX0JQV01fQ0xLCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fQ0xLU1JDX1RJTUVSMAorICogICAgICAgICAgICAgIC0gXHJlZiBCUFdNX0NMS1NSQ19USU1FUjEKKyAqICAgICAgICAgICAgICAtIFxyZWYgQlBXTV9DTEtTUkNfVElNRVIyCisgKiAgICAgICAgICAgICAgLSBccmVmIEJQV01fQ0xLU1JDX1RJTUVSMworICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IEJQV00gY2xvY2sgc291cmNlLgorIEFsbCBjaGFubmVscyBzaGFyZSBjaGFubmVsIDAncyBzZXR0aW5nLgorICovCit2b2lkIEJQV01fU2V0Q2xvY2tTb3VyY2UoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJDbGtTcmNTZWwpCit7CisgICAgKHZvaWQpdTMyQ2hhbm5lbE51bTsKKyAgICAoYnB3bSktPkNMS1NSQyA9ICh1MzJDbGtTcmNTZWwpOworfQorCisvKioKKyAqIEBicmllZiBHZXQgdGhlIHRpbWUtYmFzZSBjb3VudGVyIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGJwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBCUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBCUFdNMCA6IEJQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBCUFdNMSA6IEJQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEJQV00gY2hhbm5lbCBudW1iZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLgorICogQHJldHVybiBDb3VudCB0byBtYXggaW50ZXJydXB0IGZsYWcgb2Ygc3BlY2lmaWVkIGNoYW5uZWwKKyAqIEByZXR2YWwgMCBDb3VudCB0byBtYXggaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAqIEByZXR2YWwgMSBDb3VudCB0byBtYXggaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgY2hhbm5lbCAwJ3Mgc2V0dGluZy4KKyAqLwordWludDMyX3QgQlBXTV9HZXRXcmFwQXJvdW5kRmxhZyhCUFdNX1QgKmJwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKHZvaWQpdTMyQ2hhbm5lbE51bTsKKyAgICByZXR1cm4gKCgoYnB3bSktPlNUQVRVUyAmIEJQV01fU1RBVFVTX0NOVE1BWDBfTXNrKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIENsZWFyIHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBicHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgQlBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTAgOiBCUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gQlBXTTEgOiBCUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBCUFdNIGNoYW5uZWwgbnVtYmVyLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyBBbGwgY2hhbm5lbHMgc2hhcmUgY2hhbm5lbCAwJ3Mgc2V0dGluZy4KKyAqLwordm9pZCBCUFdNX0NsZWFyV3JhcEFyb3VuZEZsYWcoQlBXTV9UICpicHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgKGJwd20pLT5TVEFUVVMgPSBCUFdNX1NUQVRVU19DTlRNQVgwX01zazsKK30KKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEJQV01fRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQlBXTV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvY2FuLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9jYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDM5YmM0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvY2FuLmMKQEAgLTAsMCArMSwxMTkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY2FuLmMKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIENBTiBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk0yMzUxLmgiCisKKyNpZiBkZWZpbmVkKF9fSUNDQVJNX18pCisjIHByYWdtYSBkaWFnX3N1cHByZXNzPVBtMDczLCBQbTE0MyAgICAgICAgLyogTWlzcmEgQyBydWxlIDE0LjcgKi8KKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ0FOX0RyaXZlciBDQU4gRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgQ0FOX0VYUE9SVEVEX0ZVTkNUSU9OUyBDQU4gRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKiogQGNvbmQgSElEREVOX1NZTUJPTFMgKi8KKworI2lmIGRlZmluZWQoQ0FOMSkKK3N0YXRpYyB1aW50OF90IGd1OExvY2tDYW5JZlsyXVsyXSA9IHt7MFV9fTsgICAgLyogVGhlIGNoaXAgaGFzIHR3byBDQU5zLiAqLworI2VsaWYgZGVmaW5lZChDQU4wKSB8fCBkZWZpbmVkKENBTikKK3N0YXRpYyB1aW50OF90IGd1OExvY2tDYW5JZlsxXVsyXSA9IHt7MFV9fTsgICAgLyogVGhlIGNoaXAgb25seSBoYXMgb25lIENBTi4gKi8KKyNlbmRpZgorCisjZGVmaW5lIFJFVFJZX0NPVU5UUyAgICAoMHgxMDAwMDAwMFVMKQorCisjZGVmaW5lIFRTRUcxX01JTiAyCisjZGVmaW5lIFRTRUcxX01BWCAxNgorI2RlZmluZSBUU0VHMl9NSU4gMQorI2RlZmluZSBUU0VHMl9NQVggOAorI2RlZmluZSBCUlBfTUlOICAgMQorI2RlZmluZSBCUlBfTUFYICAgMTAyNCAgLyogNi1iaXQgQlJQIGZpZWxkICsgNC1iaXQgQlJQRSBmaWVsZCovCisjZGVmaW5lIFNKV19NQVggICA0VUwKKyNkZWZpbmUgQlJQX0lOQyAgIDEKKworLyogI2RlZmluZSBERUJVR19QUklOVEYgcHJpbnRmICovCisjZGVmaW5lIERFQlVHX1BSSU5URiguLi4pCisKKworc3RhdGljIHVpbnQzMl90IExvY2tJRihDQU5fVCAqdENBTik7CitzdGF0aWMgdWludDMyX3QgTG9ja0lGX1RMKENBTl9UICp0Q0FOKTsKK3N0YXRpYyB2b2lkIFJlbGVhc2VJRihDQU5fVCAqdENBTiwgdWludDMyX3QgdTMySWZObyk7CitzdGF0aWMgaW50IGNhbl91cGRhdGVfc3B0KGludCBzYW1wbF9wdCwgaW50IHRzZWcsIGludCAqdHNlZzEsIGludCAqdHNlZzIpOworCisvKioKKyAgKiBAYnJpZWYgQ2hlY2sgaWYgYW55IGludGVyZmFjZSBpcyBhdmFpbGFibGUgdGhlbiBsb2NrIGl0IGZvciB1c2FnZS4KKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHJldHZhbCAwIElGMCBpcyBmcmVlCisgICogQHJldHZhbCAxIElGMSBpcyBmcmVlCisgICogQHJldHZhbCAyIE5vIElGIGlzIGZyZWUKKyAgKiBAZGV0YWlscyBTZWFyY2ggdGhlIGZpcnN0IGZyZWUgbWVzc2FnZSBpbnRlcmZhY2UsIHN0YXJ0aW5nIGZyb20gMC4gSWYgYSBpbnRlcmZhY2UgaXMKKyAgKiAgICAgICAgICBhdmFpbGFibGUsIHNldCBhIGZsYWcgdG8gbG9jayB0aGUgaW50ZXJmYWNlLgorICAqLworc3RhdGljIHVpbnQzMl90IExvY2tJRihDQU5fVCAqdENBTikKK3sKKyAgICB1aW50MzJfdCB1MzJDYW5ObzsKKyAgICB1aW50MzJfdCB1MzJGcmVlSWZObzsKKyAgICB1aW50MzJfdCB1MzJJbnRNYXNrOworCisjaWYgZGVmaW5lZChDQU4xKQorICAgIHUzMkNhbk5vID0gKHRDQU4gPT0gQ0FOMSkgPyAxIDogMDsKKyNlbHNlIC8vIGRlZmluZWQoQ0FOMCkgfHwgZGVmaW5lZChDQU4pCisgICAgdTMyQ2FuTm8gPSAwVTsKKyNlbmRpZgorCisgICAgdTMyRnJlZUlmTm8gPSAyVTsKKworICAgIC8qIERpc2FibGUgQ0FOIGludGVycnVwdCAqLworICAgIHUzMkludE1hc2sgPSB0Q0FOLT5DT04gJiAoQ0FOX0NPTl9JRV9Nc2sgfCBDQU5fQ09OX1NJRV9Nc2sgfCBDQU5fQ09OX0VJRV9Nc2spOworICAgIHRDQU4tPkNPTiA9IHRDQU4tPkNPTiAmIH4oQ0FOX0NPTl9JRV9Nc2sgfCBDQU5fQ09OX1NJRV9Nc2sgfCBDQU5fQ09OX0VJRV9Nc2spOworCisgICAgLyogQ2hlY2sgaW50ZXJmYWNlIDEgaXMgYXZhaWxhYmxlIG9yIG5vdCAqLworICAgIGlmKCh0Q0FOLT5JRlswXS5DUkVRICYgQ0FOX0lGX0NSRVFfQlVTWV9Nc2spID09IDBVKQorICAgIHsKKyAgICAgICAgaWYoZ3U4TG9ja0NhbklmW3UzMkNhbk5vXVswXSA9PSAodWludDhfdClGQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgZ3U4TG9ja0NhbklmW3UzMkNhbk5vXVswXSA9ICh1aW50OF90KVRSVUU7CisgICAgICAgICAgICB1MzJGcmVlSWZObyA9IDBVOworICAgICAgICB9CisgICAgfQorCisgICAgLyogT3IgY2hlY2sgaW50ZXJmYWNlIDIgaXMgYXZhaWxhYmxlIG9yIG5vdCAqLworICAgIGlmKHUzMkZyZWVJZk5vID09IDJVKQorICAgIHsKKyAgICAgICAgaWYoKHRDQU4tPklGWzFdLkNSRVEgJiBDQU5fSUZfQ1JFUV9CVVNZX01zaykgPT0gMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGd1OExvY2tDYW5JZlt1MzJDYW5Ob11bMV0gPT0gKHVpbnQ4X3QpRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ3U4TG9ja0NhbklmW3UzMkNhbk5vXVsxXSA9ICh1aW50OF90KVRSVUU7CisgICAgICAgICAgICAgICAgdTMyRnJlZUlmTm8gPSAxVTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEVuYWJsZSBDQU4gaW50ZXJydXB0ICovCisgICAgdENBTi0+Q09OIHw9IHUzMkludE1hc2s7CisKKyAgICByZXR1cm4gdTMyRnJlZUlmTm87Cit9CisKKy8qKgorICAqIEBicmllZiBDaGVjayBpZiBhbnkgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZSBpbiBhIHRpbWUgbGltaXRhdGlvbiB0aGVuIGxvY2sgaXQgZm9yIHVzYWdlLgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcmV0dmFsIDAgSUYwIGlzIGZyZWUKKyAgKiBAcmV0dmFsIDEgSUYxIGlzIGZyZWUKKyAgKiBAcmV0dmFsIDIgTm8gSUYgaXMgZnJlZQorICAqIEBkZXRhaWxzIFNlYXJjaCB0aGUgZmlyc3QgZnJlZSBtZXNzYWdlIGludGVyZmFjZSwgc3RhcnRpbmcgZnJvbSAwLiBJZiBubyBpbnRlcmZhY2UgaXMKKyAgKiAgICAgICAgICBpdCB3aWxsIHRyeSBhZ2FpbiB1bnRpbCB0aW1lIG91dC4gSWYgYSBpbnRlcmZhY2UgaXMgYXZhaWxhYmxlLCAgc2V0IGEgZmxhZyB0bworICAqICAgICAgICAgIGxvY2sgdGhlIGludGVyZmFjZS4KKyAgKi8KK3N0YXRpYyB1aW50MzJfdCBMb2NrSUZfVEwoQ0FOX1QgKnRDQU4pCit7CisgICAgdWludDMyX3QgdTMyQ291bnQ7CisgICAgdWludDMyX3QgdTMyRnJlZUlmTm8gPSAwVTsKKworICAgIGZvcih1MzJDb3VudCA9IDBVOyB1MzJDb3VudCA8ICh1aW50MzJfdClSRVRSWV9DT1VOVFM7IHUzMkNvdW50KyspCisgICAgeworICAgICAgICBpZigodTMyRnJlZUlmTm8gPSBMb2NrSUYodENBTikpICE9IDJVKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB1MzJGcmVlSWZObzsKK30KKworLyoqCisgICogQGJyaWVmIFJlbGVhc2UgbG9ja2VkIGludGVyZmFjZS4KKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJJbmZvIFRoZSBpbnRlcmZhY2UgbnVtYmVyLCAwIG9yIDEuCisgICogQHJldHVybiBub25lCisgICogQGRldGFpbHMgUmVsZWFzZSB0aGUgbG9ja2VkIGludGVyZmFjZS4KKyAgKi8KK3N0YXRpYyB2b2lkIFJlbGVhc2VJRihDQU5fVCAqdENBTiwgdWludDMyX3QgdTMySWZObykKK3sKKyAgICB1aW50MzJfdCB1MzJJbnRNYXNrOworICAgIHVpbnQzMl90IHUzMkNhbk5vOworCisgICAgaWYodTMySWZObyA8IDJVKQorICAgIHsKKworI2lmIGRlZmluZWQoQ0FOMSkKKyAgICAgICAgdTMyQ2FuTm8gPSAodENBTiA9PSBDQU4xKSA/IDFVIDogMFU7CisjZWxzZSAvLyBkZWZpbmVkKENBTjApIHx8IGRlZmluZWQoQ0FOKQorICAgICAgICB1MzJDYW5ObyA9IDBVOworI2VuZGlmCisKKyAgICAgICAgLyogRGlzYWJsZSBDQU4gaW50ZXJydXB0ICovCisgICAgICAgIHUzMkludE1hc2sgPSB0Q0FOLT5DT04gJiAoQ0FOX0NPTl9JRV9Nc2sgfCBDQU5fQ09OX1NJRV9Nc2sgfCBDQU5fQ09OX0VJRV9Nc2spOworICAgICAgICB0Q0FOLT5DT04gPSB0Q0FOLT5DT04gJiB+KENBTl9DT05fSUVfTXNrIHwgQ0FOX0NPTl9TSUVfTXNrIHwgQ0FOX0NPTl9FSUVfTXNrKTsKKworICAgICAgICBndThMb2NrQ2FuSWZbdTMyQ2FuTm9dW3UzMklmTm9dID0gKHVpbnQ4X3QpRkFMU0U7CisKKyAgICAgICAgLyogRW5hYmxlIENBTiBpbnRlcnJ1cHQgKi8KKyAgICAgICAgdENBTi0+Q09OIHw9IHUzMkludE1hc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgRW50ZXIgaW5pdGlhbGl6YXRpb24gbW9kZQorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIEZvbGxvd2luZyB2YWx1ZXMgY2FuIGJlIHVzZWQuCisgICogICAgICAgICAgICBccmVmIENBTl9DT05fREFSX01zayBEaXNhYmxlIGF1dG9tYXRpYyByZXRyYW5zbWlzc2lvbi4KKyAgKiAgICAgICAgICAgIFxyZWYgQ0FOX0NPTl9FSUVfTXNrIEVuYWJsZSBlcnJvciBpbnRlcnJ1cHQuCisgICogICAgICAgICAgICBccmVmIENBTl9DT05fU0lFX01zayBFbmFibGUgc3RhdHVzIGludGVycnVwdC4KKyAgKiAgICAgICAgICAgIFxyZWYgQ0FOX0NPTl9JRV9Nc2sgQ0FOIGludGVycnVwdC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IENBTiB0byBlbnRlciBpbml0aWFsaXphdGlvbiBtb2RlIGFuZCBlbmFibGUgYWNjZXNzIGJpdCB0aW1pbmcKKyAgKiAgICAgICAgICByZWdpc3Rlci4gQWZ0ZXIgYml0IHRpbWluZyBjb25maWd1cmF0aW9uIHJlYWR5LCB1c2VyIG11c3QgY2FsbCBDQU5fTGVhdmVJbml0TW9kZSgpCisgICogICAgICAgICAgdG8gbGVhdmUgaW5pdGlhbGl6YXRpb24gbW9kZSBhbmQgbG9jayBiaXQgdGltaW5nIHJlZ2lzdGVyIHRvIGxldCBuZXcgY29uZmlndXJhdGlvbgorICAqICAgICAgICAgIHRha2UgZWZmZWN0LgorICAqLwordm9pZCBDQU5fRW50ZXJJbml0TW9kZShDQU5fVCAqdENBTiwgdWludDhfdCB1OE1hc2spCit7CisgICAgdENBTi0+Q09OID0gdThNYXNrIHwgKENBTl9DT05fSU5JVF9Nc2sgfCBDQU5fQ09OX0NDRV9Nc2spOworfQorCisKKy8qKgorICAqIEBicmllZiBMZWF2ZSBpbml0aWFsaXphdGlvbiBtb2RlCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgQ0FOIHRvIGxlYXZlIGluaXRpYWxpemF0aW9uIG1vZGUgdG8gbGV0CisgICogICAgICAgICAgYml0IHRpbWluZyBjb25maWd1cmF0aW9uIHRha2UgZWZmZWN0IGFmdGVyIGNvbmZpZ3VyYXRpb24gcmVhZHkuCisgICovCit2b2lkIENBTl9MZWF2ZUluaXRNb2RlKENBTl9UICp0Q0FOKQoreworICAgIHRDQU4tPkNPTiAmPSAofihDQU5fQ09OX0lOSVRfTXNrIHwgQ0FOX0NPTl9DQ0VfTXNrKSk7CisgICAgd2hpbGUodENBTi0+Q09OICYgQ0FOX0NPTl9JTklUX01zaykge30gLyogQ2hlY2sgSU5JVCBiaXQgaXMgcmVsZWFzZWQgKi8KK30KKworLyoqCisgICogQGJyaWVmIFdhaXQgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgYnVmZmVyIGluIGJhc2ljIG1vZGUuCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB3YWl0IG1lc3NhZ2UgaW50byBtZXNzYWdlIGJ1ZmZlciBpbiBiYXNpYyBtb2RlLiBQbGVhc2Ugbm90aWNlIHRoZQorICAqICAgICAgICAgIGZ1bmN0aW9uIGlzIHBvbGxpbmcgTkVXREFUIGJpdCBvZiBNQ09OIHJlZ2lzdGVyIGJ5IHdoaWxlIGxvb3AgYW5kIGl0IGlzIHVzZWQgaW4gYmFzaWMgbW9kZS4KKyAgKi8KK3ZvaWQgQ0FOX1dhaXRNc2coQ0FOX1QgKnRDQU4pCit7CisgICAgdENBTi0+U1RBVFVTID0gMHgwVTsgLyogY2xyIHN0YXR1cyAqLworCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgICAgIGlmKHRDQU4tPklGWzFdLk1DT04gJiBDQU5fSUZfTUNPTl9ORVdEQVRfTXNrKSAgIC8qIGNoZWNrIG5ldyBkYXRhICovCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERFQlVHX1BSSU5URigiTmV3IERhdGEgSU5cbiIpOyAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZih0Q0FOLT5TVEFUVVMgJiBDQU5fU1RBVFVTX1JYT0tfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBERUJVR19QUklOVEYoIlJ4IE9LXG4iKTsgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmKHRDQU4tPlNUQVRVUyAmIENBTl9TVEFUVVNfTEVDX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgLyogREVCVUdfUFJJTlRGKCJFcnJvclxuIik7ICovCisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiBHZXQgY3VycmVudCBiaXQgcmF0ZQorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcmV0dXJuIEN1cnJlbnQgQml0LVJhdGUgKGtpbG8gYml0IHBlciBzZWNvbmQpCisgICogQGRldGFpbHMgUmV0dXJuIGN1cnJlbnQgQ0FOIGJpdCByYXRlIGFjY29yZGluZyB0byB0aGUgdXNlciBiaXQtdGltaW5nIHBhcmFtZXRlciBzZXR0aW5ncworICAqLwordWludDMyX3QgQ0FOX0dldENBTkJpdFJhdGUoQ0FOX1QgKnRDQU4pCit7CisgICAgdWludDhfdCB1OFRzZWcxLCB1OFRzZWcyOworICAgIHVpbnQzMl90IHUzMkJwcjsKKworICAgIHU4VHNlZzEgPSAodWludDhfdCkoKHRDQU4tPkJUSU1FICYgQ0FOX0JUSU1FX1RTRUcxX01zaykgPj4gQ0FOX0JUSU1FX1RTRUcxX1Bvcyk7CisgICAgdThUc2VnMiA9ICh1aW50OF90KSgodENBTi0+QlRJTUUgJiBDQU5fQlRJTUVfVFNFRzJfTXNrKSA+PiBDQU5fQlRJTUVfVFNFRzJfUG9zKTsKKyAgICB1MzJCcHIgPSAodENBTi0+QlRJTUUgJiBDQU5fQlRJTUVfQlJQX01zayk7CisgICAgdTMyQnByIHw9ICh0Q0FOLT5CUlBFIDw8IDYpOworCisKKyAgICByZXR1cm4gKFN5c3RlbUNvcmVDbG9jayAvICh1MzJCcHIgKyAxVSkgLyAoKHVpbnQzMl90KXU4VHNlZzEgKyAodWludDMyX3QpdThUc2VnMiArIDNVKSk7Cit9CisKKy8qKgorICAqIEBicmllZiBTd2l0Y2ggdGhlIENBTiBpbnRvIHRlc3QgbW9kZS4KKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1OFRlc3RNYXNrIFNwZWNpZmllcyB0aGUgY29uZmlndXJhdGlvbiBpbiB0ZXN0IG1vZGVzCisgICogICAgICAgICAgICAgICAgICAgICAgIFxyZWYgQ0FOX1RFU1RfQkFTSUNfTXNrIEVuYWJsZSBiYXNpYyBtb2RlIG9mIHRlc3QgbW9kZQorICAqICAgICAgICAgICAgICAgICAgICAgICBccmVmIENBTl9URVNUX1NJTEVOVF9Nc2sgRW5hYmxlIHNpbGVudCBtb2RlIG9mIHRlc3QgbW9kZQorICAqICAgICAgICAgICAgICAgICAgICAgICBccmVmIENBTl9URVNUX0xCQUNLX01zayBFbmFibGUgTG9vcCBCYWNrIE1vZGUgb2YgdGVzdCBtb2RlCisgICogICAgICAgICAgICAgICAgICAgICAgIFxyZWYgQ0FOX1RFU1RfVFgwX01zayAvIFxyZWYgQ0FOX1RFU1RfVFgxX01zayBDb250cm9sIENBTl9UWCBwaW4gYml0IGZpZWxkCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgU3dpdGNoIHRoZSBDQU4gaW50byB0ZXN0IG1vZGUuIFRoZXJlIGFyZSBmb3VyIHRlc3QgbW9kZSAoQkFTSUMvU0lMRU5UL0xPT1BCQUNLLworICAqICAgICAgICAgIExPT1BCQUNLIGNvbWJpbmVkIFNJTEVOVC9DT05UUk9MX1RYX1BJTiljb3VsZCBiZSBzZWxlY3RlZC4gQWZ0ZXIgc2V0dGluZyB0ZXN0IG1vZGUsdXNlcgorICAqICAgICAgICAgIG11c3QgY2FsbCBDQU5fTGVhdmVJbml0TW9kZSgpIHRvIGxldCB0aGUgc2V0dGluZyB0YWtlIGVmZmVjdC4KKyAgKi8KK3ZvaWQgQ0FOX0VudGVyVGVzdE1vZGUoQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThUZXN0TWFzaykKK3sKKyAgICB0Q0FOLT5DT04gfD0gQ0FOX0NPTl9URVNUX01zazsKKyAgICB0Q0FOLT5URVNUID0gdThUZXN0TWFzazsKK30KKworCisvKioKKyAgKiBAYnJpZWYgTGVhdmUgdGhlIHRlc3QgbW9kZQorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcmV0dXJuICAgTm9uZQorICAqIEBkZXRhaWxzICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gTGVhdmUgdGhlIHRlc3QgbW9kZSAoc3dpdGNoIGludG8gbm9ybWFsIG1vZGUpLgorICAqLwordm9pZCBDQU5fTGVhdmVUZXN0TW9kZShDQU5fVCAqdENBTikKK3sKKyAgICB0Q0FOLT5DT04gfD0gQ0FOX0NPTl9URVNUX01zazsKKyAgICB0Q0FOLT5URVNUICY9IH4oQ0FOX1RFU1RfTEJBQ0tfTXNrIHwgQ0FOX1RFU1RfU0lMRU5UX01zayB8IENBTl9URVNUX0JBU0lDX01zayk7CisgICAgdENBTi0+Q09OICY9ICh+Q0FOX0NPTl9URVNUX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIHdhaXRpbmcgc3RhdHVzIG9mIGEgcmVjZWl2ZWQgbWVzc2FnZS4KKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1OE1zZ09iaiBTcGVjaWZpZXMgdGhlIE1lc3NhZ2Ugb2JqZWN0IG51bWJlciwgZnJvbSAwIHRvIDMxLgorICAqIEByZXR2YWwgbm9uLXplcm8gVGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSBvYmplY3QgaGFzIGEgbmV3IGRhdGEgYml0IGlzIHNldC4KKyAgKiBAcmV0dmFsIDAgTm8gbWVzc2FnZSBvYmplY3QgaGFzIG5ldyBkYXRhLgorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHdhaXRpbmcgc3RhdHVzIG9mIGEgcmVjZWl2ZWQgbWVzc2FnZS4KKyAgKi8KK3VpbnQzMl90IENBTl9Jc05ld0RhdGFSZWNlaXZlZChDQU5fVCAqdENBTiwgdWludDhfdCB1OE1zZ09iaikKK3sKKyAgICB1aW50MzJfdCByZXQ7CisKKyAgICBpZigodWludDMyX3QpdThNc2dPYmogPCAxNlUpCisgICAgeworICAgICAgICByZXQgPSB0Q0FOLT5OREFUMSAmICgxVUwgPDwgdThNc2dPYmopOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXQgPSB0Q0FOLT5OREFUMiAmICgxVUwgPDwgKHU4TXNnT2JqIC0gMTZVKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworCisvKioKKyAgKiBAYnJpZWYgU2VuZCBDQU4gbWVzc2FnZSBpbiBCQVNJQyBtb2RlIG9mIHRlc3QgbW9kZQorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHBDYW5Nc2cgUG9pbnRlciB0byB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBkYXRhIHRvIHRyYW5zbWl0LgorICAqIEByZXR1cm4gVFJVRTogIFRyYW5zbWlzc2lvbiBPSworICAqICAgICAgICAgRkFMU0U6IENoZWNrIGJ1c3kgZmxhZyBvZiBpbnRlcmZhY2UgMCBpcyB0aW1lb3V0CisgICogQGRldGFpbHMgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2VuZCBDQU4gbWVzc2FnZSBpbiBCQVNJQyBtb2RlIG9mIHRlc3QgbW9kZS4gQmVmb3JlIGNhbGwgdGhlIEFQSSwKKyAgKiAgICAgICAgICB0aGUgdXNlciBzaG91bGQgYmUgY2FsbCBDQU5fRW50ZXJUZXN0TW9kZShDQU5fVEVTVF9CQVNJQykgYW5kIGxldCBDQU4gY29udHJvbGxlciBlbnRlcgorICAqICAgICAgICAgIGJhc2ljIG1vZGUgb2YgdGVzdCBtb2RlLiBQbGVhc2Ugbm90aWNlIElGMSBSZWdpc3RlcnMgdXNlZCBhcyBUeCBCdWZmZXIgaW4gYmFzaWMgbW9kZS4KKyAgKi8KK2ludDMyX3QgQ0FOX0Jhc2ljU2VuZE1zZyhDQU5fVCAqdENBTiwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKQoreworICAgIHVpbnQzMl90IGkgPSAwVUw7CisgICAgd2hpbGUodENBTi0+SUZbMF0uQ1JFUSAmIENBTl9JRl9DUkVRX0JVU1lfTXNrKSB7fQorCisKKyAgICB0Q0FOLT5TVEFUVVMgJj0gKH5DQU5fU1RBVFVTX1RYT0tfTXNrKTsKKworICAgIGlmKHBDYW5Nc2ctPklkVHlwZSA9PSBDQU5fU1REX0lEKQorICAgIHsKKyAgICAgICAgLyogc3RhbmRhcmQgSUQqLworICAgICAgICB0Q0FOLT5JRlswXS5BUkIxID0gMFVMOworICAgICAgICB0Q0FOLT5JRlswXS5BUkIyID0gKCgocENhbk1zZy0+SWQpICYgMHg3RkZVTCkgPDwgMikgOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBleHRlbmRlZCBJRCovCisgICAgICAgIHRDQU4tPklGWzBdLkFSQjEgPSAocENhbk1zZy0+SWQpICYgMHhGRkZGVUw7CisgICAgICAgIHRDQU4tPklGWzBdLkFSQjIgPSAoKChwQ2FuTXNnLT5JZCkgJiAweDFGRkYwMDAwVUwpID4+IDE2KSAgfCBDQU5fSUZfQVJCMl9YVERfTXNrOworCisgICAgfQorCisgICAgaWYocENhbk1zZy0+RnJhbWVUeXBlKQorICAgIHsKKyAgICAgICAgdENBTi0+SUZbMF0uQVJCMiB8PSBDQU5fSUZfQVJCMl9ESVJfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0Q0FOLT5JRlswXS5BUkIyICY9ICh+Q0FOX0lGX0FSQjJfRElSX01zayk7CisgICAgfQorCisgICAgdENBTi0+SUZbMF0uTUNPTiA9ICh0Q0FOLT5JRlswXS5NQ09OICYgKH5DQU5fSUZfTUNPTl9ETENfTXNrKSkgfCBwQ2FuTXNnLT5ETEM7CisgICAgdENBTi0+SUZbMF0uREFUX0ExID0gKCh1aW50MzJfdClwQ2FuTXNnLT5EYXRhWzFdIDw8IDgpIHwgcENhbk1zZy0+RGF0YVswXTsKKyAgICB0Q0FOLT5JRlswXS5EQVRfQTIgPSAoKHVpbnQzMl90KXBDYW5Nc2ctPkRhdGFbM10gPDwgOCkgfCBwQ2FuTXNnLT5EYXRhWzJdOworICAgIHRDQU4tPklGWzBdLkRBVF9CMSA9ICgodWludDMyX3QpcENhbk1zZy0+RGF0YVs1XSA8PCA4KSB8IHBDYW5Nc2ctPkRhdGFbNF07CisgICAgdENBTi0+SUZbMF0uREFUX0IyID0gKCh1aW50MzJfdClwQ2FuTXNnLT5EYXRhWzddIDw8IDgpIHwgcENhbk1zZy0+RGF0YVs2XTsKKworICAgIC8qIHJlcXVlc3QgdHJhbnNtaXNzaW9uKi8KKyAgICB0Q0FOLT5JRlswXS5DUkVRICY9ICh+Q0FOX0lGX0NSRVFfQlVTWV9Nc2spOworICAgIGlmKHRDQU4tPklGWzBdLkNSRVEgJiBDQU5fSUZfQ1JFUV9CVVNZX01zaykKKyAgICB7CisgICAgICAgIC8qIERFQlVHX1BSSU5URigiQ2Fubm90IGNsZWFyIGJ1c3kgZm9yIHNlbmRpbmcgLi4uXG4iKTsgKi8KKyAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgIH0KKworICAgIHRDQU4tPklGWzBdLkNSRVEgfD0gQ0FOX0lGX0NSRVFfQlVTWV9Nc2s7IC8qIHNlbmRpbmcgKi8KKworICAgIGZvcihpID0gMFVMOyBpIDwgMHhGRkZGRlVMOyBpKyspCisgICAgeworICAgICAgICBpZigodENBTi0+SUZbMF0uQ1JFUSAmIENBTl9JRl9DUkVRX0JVU1lfTXNrKSA9PSAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoaSA+PSAweEZGRkZGVUwpCisgICAgeworICAgICAgICAvKiBERUJVR19QUklOVEYoIkNhbm5vdCBzZW5kIG91dC4uLlxuIik7ICovCisgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICB9CisKKworICAgIHJldHVybiAoaW50MzJfdClUUlVFOworfQorCisvKioKKyAgKiBAYnJpZWYgR2V0IGEgbWVzc2FnZSBpbmZvcm1hdGlvbiBpbiBCQVNJQyBtb2RlLgorICAqCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gcENhbk1zZyBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIHN0cnVjdHVyZSB3aGVyZSByZWNlaXZlZCBkYXRhIGlzIGNvcGllZC4KKyAgKgorICAqIEByZXR1cm4gRkFMU0UgTm8gYW55IG1lc3NhZ2UgcmVjZWl2ZWQuCisgICogICAgICAgICBUUlVFIFJlY2VpdmUgYSBtZXNzYWdlIHN1Y2Nlc3MuCisgICoKKyAgKi8KK2ludDMyX3QgQ0FOX0Jhc2ljUmVjZWl2ZU1zZyhDQU5fVCAqdENBTiwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKQoreworCisgICAgaWYoKHRDQU4tPklGWzFdLk1DT04gJiBDQU5fSUZfTUNPTl9ORVdEQVRfTXNrKSA9PSAwVUwpICAgLyogSW4gYmFzaWMgbW9kZSwgcmVjZWl2ZSBkYXRhIGFsd2F5cyBzYXZlIGluIElGMiAqLworICAgIHsKKyAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgIH0KKworICAgIHRDQU4tPlNUQVRVUyAmPSAofkNBTl9TVEFUVVNfUlhPS19Nc2spOworCisgICAgdENBTi0+SUZbMV0uQ01BU0sgPSBDQU5fSUZfQ01BU0tfQVJCX01zaworICAgICAgICAgICAgICAgICAgICAgICAgfCBDQU5fSUZfQ01BU0tfQ09OVFJPTF9Nc2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgQ0FOX0lGX0NNQVNLX0RBVEFBX01zaworICAgICAgICAgICAgICAgICAgICAgICAgfCBDQU5fSUZfQ01BU0tfREFUQUJfTXNrOworCisgICAgaWYoKHRDQU4tPklGWzFdLkFSQjIgJiBDQU5fSUZfQVJCMl9YVERfTXNrKSA9PSAwVUwpCisgICAgeworICAgICAgICAvKiBzdGFuZGFyZCBJRCovCisgICAgICAgIHBDYW5Nc2ctPklkVHlwZSA9IENBTl9TVERfSUQ7CisgICAgICAgIHBDYW5Nc2ctPklkID0gKHRDQU4tPklGWzFdLkFSQjIgPj4gMikgJiAweDA3RkZVTDsKKworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBleHRlbmRlZCBJRCovCisgICAgICAgIHBDYW5Nc2ctPklkVHlwZSA9IENBTl9FWFRfSUQ7CisgICAgICAgIHBDYW5Nc2ctPklkICA9ICh0Q0FOLT5JRlsxXS5BUkIyICYgMHgxRkZGVUwpIDw8IDE2OworICAgICAgICBwQ2FuTXNnLT5JZCB8PSAodWludDMyX3QpdENBTi0+SUZbMV0uQVJCMTsKKyAgICB9CisKKyAgICAvKgorICAgIHBDYW5Nc2ctPkZyYW1lVHlwZSA9ICh1aW50MzJfdCkoISh1aW50MzJfdCkoKHRDQU4tPklGWzFdLkFSQjIgJiAodWludDMyX3QpQ0FOX0lGX0FSQjJfRElSX01zaykgPj4gKHVpbnQzMl90KUNBTl9JRl9BUkIyX0RJUl9Qb3MpKTsKKyAgICAqLworCisgICAgcENhbk1zZy0+RnJhbWVUeXBlID0gKHRDQU4tPklGWzFdLkFSQjIgJiBDQU5fSUZfQVJCMl9ESVJfTXNrKSA/IDBVTCA6IDFVTDsKKworICAgIHBDYW5Nc2ctPkRMQyAgICAgPSAodWludDhfdCkodENBTi0+SUZbMV0uTUNPTiAmIENBTl9JRl9NQ09OX0RMQ19Nc2spOworICAgIHBDYW5Nc2ctPkRhdGFbMF0gPSAodWludDhfdCkodENBTi0+SUZbMV0uREFUX0ExICYgQ0FOX0lGX0RBVF9BMV9EQVRBMF9Nc2spOworICAgIHBDYW5Nc2ctPkRhdGFbMV0gPSAodWludDhfdCkoKHRDQU4tPklGWzFdLkRBVF9BMSAmIENBTl9JRl9EQVRfQTFfREFUQTFfTXNrKSA+PiBDQU5fSUZfREFUX0ExX0RBVEExX1Bvcyk7CisgICAgcENhbk1zZy0+RGF0YVsyXSA9ICh1aW50OF90KSh0Q0FOLT5JRlsxXS5EQVRfQTIgJiBDQU5fSUZfREFUX0EyX0RBVEEyX01zayk7CisgICAgcENhbk1zZy0+RGF0YVszXSA9ICh1aW50OF90KSgodENBTi0+SUZbMV0uREFUX0EyICYgQ0FOX0lGX0RBVF9BMl9EQVRBM19Nc2spID4+IENBTl9JRl9EQVRfQTJfREFUQTNfUG9zKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzRdID0gKHVpbnQ4X3QpKHRDQU4tPklGWzFdLkRBVF9CMSAmIENBTl9JRl9EQVRfQjFfREFUQTRfTXNrKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzVdID0gKHVpbnQ4X3QpKCh0Q0FOLT5JRlsxXS5EQVRfQjEgJiBDQU5fSUZfREFUX0IxX0RBVEE1X01zaykgPj4gQ0FOX0lGX0RBVF9CMV9EQVRBNV9Qb3MpOworICAgIHBDYW5Nc2ctPkRhdGFbNl0gPSAodWludDhfdCkodENBTi0+SUZbMV0uREFUX0IyICYgQ0FOX0lGX0RBVF9CMl9EQVRBNl9Nc2spOworICAgIHBDYW5Nc2ctPkRhdGFbN10gPSAodWludDhfdCkoKHRDQU4tPklGWzFdLkRBVF9CMiAmIENBTl9JRl9EQVRfQjJfREFUQTdfTXNrKSA+PiBDQU5fSUZfREFUX0IyX0RBVEE3X1Bvcyk7CisKKyAgICByZXR1cm4gKGludDMyX3QpVFJVRTsKK30KKworLyoqCisgICogQGJyaWVmIFNldCBSeCBtZXNzYWdlIG9iamVjdCwgaW5jbHVkZSBJRCBtYXNrLgorICAqIEBwYXJhbVtpbl0gdThNc2dPYmogU3BlY2lmaWVzIHRoZSBNZXNzYWdlIG9iamVjdCBudW1iZXIsIGZyb20gMCB0byAzMS4KKyAgKiBAcGFyYW1baW5dIHU4aWRUeXBlIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB0eXBlIG9mIHRoZSBmcmFtZXMgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkCisgICogICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgICAgICAgICAgXHJlZiBDQU5fU1REX0lEIChzdGFuZGFyZCBJRCwgMTEtYml0KQorICAqICAgICAgICAgICAgICAgICAgICAgXHJlZiBDQU5fRVhUX0lEIChleHRlbmRlZCBJRCwgMjktYml0KQorICAqIEBwYXJhbVtpbl0gdTMyaWQgU3BlY2lmaWVzIHRoZSBpZGVudGlmaWVyIHVzZWQgZm9yIGFjY2VwdGFuY2UgZmlsdGVyaW5nLgorICAqIEBwYXJhbVtpbl0gdThzaW5nbGVPckZpZm9MYXN0IFNwZWNpZmllcyB0aGUgZW5kLW9mLWJ1ZmZlciBpbmRpY2F0b3IuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFOiBmb3IgYSBzaW5nbGUgcmVjZWl2ZSBvYmplY3Qgb3IgYSBGSUZPIHJlY2VpdmUgb2JqZWN0IHRoYXQgaXMgdGhlIGxhc3Qgb25lIG9mIHRoZSBGSUZPLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFOiBmb3IgYSBGSUZPIHJlY2VpdmUgb2JqZWN0IHRoYXQgaXMgbm90IHRoZSBsYXN0IG9uZS4KKyAgKiBAcmV0dmFsIFRSVUUgU1VDQ0VTUworICAqIEByZXR2YWwgRkFMU0UgTm8gdXNlZnVsIGludGVyZmFjZQorICAqIEBkZXRhaWxzIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBhIHJlY2VpdmUgbWVzc2FnZSBvYmplY3QuCisgICovCitpbnQzMl90IENBTl9TZXRSeE1zZ09iakFuZE1zayhDQU5fVCAqdENBTiwgdWludDhfdCB1OE1zZ09iaiwgdWludDhfdCB1OGlkVHlwZSwgdWludDMyX3QgdTMyaWQsIHVpbnQzMl90IHUzMmlkbWFzaywgdWludDhfdCB1OHNpbmdsZU9yRmlmb0xhc3QpCit7CisgICAgdWludDhfdCB1OE1zZ0lmTnVtOworCisgICAgLyogR2V0IGFuZCBsb2NrIGEgZnJlZSBpbnRlcmZhY2UgKi8KKyAgICBpZigodThNc2dJZk51bSA9ICh1aW50OF90KUxvY2tJRl9UTCh0Q0FOKSkgPT0gMlUpCisgICAgeworICAgICAgICByZXR1cm4gKGludDMyX3QpRkFMU0U7CisgICAgfQorCisgICAgLyogQ29tbWFuZCBTZXR0aW5nICovCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQ01BU0sgPSBDQU5fSUZfQ01BU0tfV1JSRF9Nc2sgfCBDQU5fSUZfQ01BU0tfTUFTS19Nc2sgfCBDQU5fSUZfQ01BU0tfQVJCX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5fSUZfQ01BU0tfQ09OVFJPTF9Nc2sgfCBDQU5fSUZfQ01BU0tfREFUQUFfTXNrIHwgQ0FOX0lGX0NNQVNLX0RBVEFCX01zazsKKworICAgIGlmKHU4aWRUeXBlID09IENBTl9TVERfSUQpICAgIC8qIEFjY29yZGluZyBTVEQvRVhUIElEIGZvcm1hdCxDb25maWd1cmUgTWFzayBhbmQgQXJiaXRyYXRpb24gcmVnaXN0ZXIgKi8KKyAgICB7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjEgPSAwVTsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMiA9IENBTl9JRl9BUkIyX01TR1ZBTF9Nc2sgfCAodTMyaWQgJiAweDdGRlVMKSA8PCAyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5BUkIxID0gdTMyaWQgJiAweEZGRkZVTDsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMiA9IENBTl9JRl9BUkIyX01TR1ZBTF9Nc2sgfCBDQU5fSUZfQVJCMl9YVERfTXNrIHwgKHUzMmlkICYgMHgxRkZGMDAwMFVMKSA+PiAxNjsKKyAgICB9CisKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5NQVNLMSA9ICh1MzJpZG1hc2sgJiAweEZGRkZVTCk7CisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uTUFTSzIgPSAodTMyaWRtYXNrID4+IDE2KSAmIDB4RkZGRlVMOworCisKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5NQ09OID0gQ0FOX0lGX01DT05fVU1BU0tfTXNrIHwgQ0FOX0lGX01DT05fUlhJRV9Nc2s7CisgICAgaWYodThzaW5nbGVPckZpZm9MYXN0KQorICAgIHsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uTUNPTiB8PSBDQU5fSUZfTUNPTl9FT0JfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5NQ09OICY9ICh+Q0FOX0lGX01DT05fRU9CX01zayk7CisgICAgfQorCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uREFUX0ExICA9IDBVOworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9BMiAgPSAwVTsKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQjEgID0gMFU7CisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uREFUX0IyICA9IDBVOworCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQ1JFUSA9IDFVTCArIHU4TXNnT2JqOworICAgIFJlbGVhc2VJRih0Q0FOLCAodWludDMyX3QpdThNc2dJZk51bSk7CisKKyAgICByZXR1cm4gKGludDMyX3QpVFJVRTsKK30KKworLyoqCisgICogQGJyaWVmIFNldCBSeCBtZXNzYWdlIG9iamVjdAorICAqIEBwYXJhbVtpbl0gdThNc2dPYmogU3BlY2lmaWVzIHRoZSBNZXNzYWdlIG9iamVjdCBudW1iZXIsIGZyb20gMCB0byAzMS4KKyAgKiBAcGFyYW1baW5dIHU4aWRUeXBlIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB0eXBlIG9mIHRoZSBmcmFtZXMgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkCisgICogICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgICAgICAgICAgXHJlZiBDQU5fU1REX0lEIChzdGFuZGFyZCBJRCwgMTEtYml0KQorICAqICAgICAgICAgICAgICAgICAgICAgXHJlZiBDQU5fRVhUX0lEIChleHRlbmRlZCBJRCwgMjktYml0KQorICAqIEBwYXJhbVtpbl0gdTMyaWQgU3BlY2lmaWVzIHRoZSBpZGVudGlmaWVyIHVzZWQgZm9yIGFjY2VwdGFuY2UgZmlsdGVyaW5nLgorICAqIEBwYXJhbVtpbl0gdThzaW5nbGVPckZpZm9MYXN0IFNwZWNpZmllcyB0aGUgZW5kLW9mLWJ1ZmZlciBpbmRpY2F0b3IuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFOiBmb3IgYSBzaW5nbGUgcmVjZWl2ZSBvYmplY3Qgb3IgYSBGSUZPIHJlY2VpdmUgb2JqZWN0IHRoYXQgaXMgdGhlIGxhc3Qgb25lIG9mIHRoZSBGSUZPLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFOiBmb3IgYSBGSUZPIHJlY2VpdmUgb2JqZWN0IHRoYXQgaXMgbm90IHRoZSBsYXN0IG9uZS4KKyAgKiBAcmV0dmFsIFRSVUUgU1VDQ0VTUworICAqIEByZXR2YWwgRkFMU0UgTm8gdXNlZnVsIGludGVyZmFjZQorICAqIEBkZXRhaWxzIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBhIHJlY2VpdmUgbWVzc2FnZSBvYmplY3QuCisgICovCitpbnQzMl90IENBTl9TZXRSeE1zZ09iaihDQU5fVCAqdENBTiwgdWludDhfdCB1OE1zZ09iaiwgdWludDhfdCB1OGlkVHlwZSwgdWludDMyX3QgdTMyaWQsIHVpbnQ4X3QgdThzaW5nbGVPckZpZm9MYXN0KQoreworICAgIHVpbnQ4X3QgdThNc2dJZk51bTsKKworICAgIC8qIEdldCBhbmQgbG9jayBhIGZyZWUgaW50ZXJmYWNlICovCisgICAgaWYoKHU4TXNnSWZOdW0gPSAodWludDhfdClMb2NrSUZfVEwodENBTikpID09IDJVKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgIH0KKworICAgIC8qIENvbW1hbmQgU2V0dGluZyAqLworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNNQVNLID0gQ0FOX0lGX0NNQVNLX1dSUkRfTXNrIHwgQ0FOX0lGX0NNQVNLX01BU0tfTXNrIHwgQ0FOX0lGX0NNQVNLX0FSQl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOX0lGX0NNQVNLX0NPTlRST0xfTXNrIHwgQ0FOX0lGX0NNQVNLX0RBVEFBX01zayB8IENBTl9JRl9DTUFTS19EQVRBQl9Nc2s7CisKKyAgICBpZih1OGlkVHlwZSA9PSBDQU5fU1REX0lEKSAgICAvKiBBY2NvcmRpbmcgU1REL0VYVCBJRCBmb3JtYXQsQ29uZmlndXJlIE1hc2sgYW5kIEFyYml0cmF0aW9uIHJlZ2lzdGVyICovCisgICAgeworICAgICAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5BUkIxID0gMFU7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIgPSBDQU5fSUZfQVJCMl9NU0dWQUxfTXNrIHwgKHUzMmlkICYgMHg3RkZVTCkgPDwgMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMSA9IHUzMmlkICYgMHhGRkZGVUw7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIgPSBDQU5fSUZfQVJCMl9NU0dWQUxfTXNrIHwgQ0FOX0lGX0FSQjJfWFREX01zayB8ICh1MzJpZCAmIDB4MUZGRjAwMDBVTCkgPj4gMTY7CisgICAgfQorCisKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5NQ09OID0gQ0FOX0lGX01DT05fVU1BU0tfTXNrIHwgQ0FOX0lGX01DT05fUlhJRV9Nc2s7CisgICAgaWYodThzaW5nbGVPckZpZm9MYXN0KQorICAgIHsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uTUNPTiB8PSBDQU5fSUZfTUNPTl9FT0JfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5NQ09OICY9ICh+Q0FOX0lGX01DT05fRU9CX01zayk7CisgICAgfQorCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uREFUX0ExICA9IDBVOworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9BMiAgPSAwVTsKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQjEgID0gMFU7CisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uREFUX0IyICA9IDBVOworCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQ1JFUSA9IDFVTCArIHU4TXNnT2JqOworICAgIFJlbGVhc2VJRih0Q0FOLCAodWludDMyX3QpdThNc2dJZk51bSk7CisKKyAgICByZXR1cm4gKGludDMyX3QpVFJVRTsKK30KKworLyoqCisgICogQGJyaWVmIEdldHMgdGhlIG1lc3NhZ2UKKyAgKiBAcGFyYW1baW5dIHU4TXNnT2JqIFNwZWNpZmllcyB0aGUgTWVzc2FnZSBvYmplY3QgbnVtYmVyLCBmcm9tIDAgdG8gMzEuCisgICogQHBhcmFtW2luXSB1OFJlbGVhc2UgU3BlY2lmaWVzIHRoZSBtZXNzYWdlIHJlbGVhc2UgaW5kaWNhdG9yLgorICAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICAgICAgICAgICAgVFJVRTogdGhlIG1lc3NhZ2Ugb2JqZWN0IGlzIHJlbGVhc2VkIHdoZW4gZ2V0dGluZyB0aGUgZGF0YS4KKyAgKiAgICAgICAgICAgICAgICAgICAgICBGQUxTRTp0aGUgbWVzc2FnZSBvYmplY3QgaXMgbm90IHJlbGVhc2VkLgorICAqIEBwYXJhbVtpbl0gcENhbk1zZyBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIHN0cnVjdHVyZSB3aGVyZSByZWNlaXZlZCBkYXRhIGlzIGNvcGllZC4KKyAgKiBAcmV0dmFsIFRSVUUgU3VjY2VzcworICAqIEByZXR2YWwgRkFMU0UgTm8gYW55IG1lc3NhZ2UgcmVjZWl2ZWQKKyAgKiBAZGV0YWlscyBHZXRzIHRoZSBtZXNzYWdlLCBpZiByZWNlaXZlZC4KKyAgKi8KK2ludDMyX3QgQ0FOX1JlYWRNc2dPYmooQ0FOX1QgKnRDQU4sIHVpbnQ4X3QgdThNc2dPYmosIHVpbnQ4X3QgdThSZWxlYXNlLCBTVFJfQ0FOTVNHX1QqIHBDYW5Nc2cpCit7CisgICAgdWludDhfdCB1OE1zZ0lmTnVtOworICAgIHVpbnQzMl90IHUzMlRtcDsKKworICAgIGlmKCFDQU5fSXNOZXdEYXRhUmVjZWl2ZWQodENBTiwgdThNc2dPYmopKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgIH0KKworICAgIC8qIEdldCBhbmQgbG9jayBhIGZyZWUgaW50ZXJmYWNlICovCisgICAgaWYoKHU4TXNnSWZOdW0gPSAodWludDhfdClMb2NrSUZfVEwodENBTikpID09IDJVKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgIH0KKworICAgIHRDQU4tPlNUQVRVUyAmPSAofkNBTl9TVEFUVVNfUlhPS19Nc2spOworCisgICAgLyogcmVhZCB0aGUgbWVzc2FnZSBjb250ZW50cyovCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQ01BU0sgPSBDQU5fSUZfQ01BU0tfTUFTS19Nc2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ0FOX0lGX0NNQVNLX0FSQl9Nc2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ0FOX0lGX0NNQVNLX0NPTlRST0xfTXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENBTl9JRl9DTUFTS19DTFJJTlRQTkRfTXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICh1OFJlbGVhc2UgPyBDQU5fSUZfQ01BU0tfVFhSUVNUTkVXREFUX01zayA6IDBVTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ0FOX0lGX0NNQVNLX0RBVEFBX01zaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDQU5fSUZfQ01BU0tfREFUQUJfTXNrOworCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQ1JFUSA9IDFVTCArIHU4TXNnT2JqOworCisgICAgd2hpbGUodENBTi0+SUZbdThNc2dJZk51bV0uQ1JFUSAmIENBTl9JRl9DUkVRX0JVU1lfTXNrKQorICAgIHsKKyAgICAgICAgLypXYWl0Ki8KKyAgICB9CisKKyAgICBpZigodENBTi0+SUZbdThNc2dJZk51bV0uQVJCMiAmIENBTl9JRl9BUkIyX1hURF9Nc2spID09IDBVKQorICAgIHsKKyAgICAgICAgLyogc3RhbmRhcmQgSUQqLworICAgICAgICBwQ2FuTXNnLT5JZFR5cGUgPSBDQU5fU1REX0lEOworICAgICAgICBwQ2FuTXNnLT5JZCAgICAgPSAodENBTi0+SUZbdThNc2dJZk51bV0uQVJCMiAmIENBTl9JRl9BUkIyX0lEX01zaykgPj4gMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogZXh0ZW5kZWQgSUQqLworICAgICAgICBwQ2FuTXNnLT5JZFR5cGUgPSBDQU5fRVhUX0lEOworCisgICAgICAgIHUzMlRtcCA9ICgoKHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIpICYgMHgxRkZGVUwpIDw8IDE2KTsKKyAgICAgICAgdTMyVG1wIHw9IHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjE7CisKKyAgICAgICAgcENhbk1zZy0+SWQgID0gdTMyVG1wOworICAgIH0KKworICAgIHBDYW5Nc2ctPkRMQyAgICAgPSAodWludDhfdCkodENBTi0+SUZbdThNc2dJZk51bV0uTUNPTiAmIENBTl9JRl9NQ09OX0RMQ19Nc2spOworICAgIHBDYW5Nc2ctPkRhdGFbMF0gPSAodWludDhfdCkodENBTi0+SUZbdThNc2dJZk51bV0uREFUX0ExICYgQ0FOX0lGX0RBVF9BMV9EQVRBMF9Nc2spOworICAgIHBDYW5Nc2ctPkRhdGFbMV0gPSAodWludDhfdCkoKHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9BMSAmIENBTl9JRl9EQVRfQTFfREFUQTFfTXNrKSA+PiBDQU5fSUZfREFUX0ExX0RBVEExX1Bvcyk7CisgICAgcENhbk1zZy0+RGF0YVsyXSA9ICh1aW50OF90KSh0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQTIgJiBDQU5fSUZfREFUX0EyX0RBVEEyX01zayk7CisgICAgcENhbk1zZy0+RGF0YVszXSA9ICh1aW50OF90KSgodENBTi0+SUZbdThNc2dJZk51bV0uREFUX0EyICYgQ0FOX0lGX0RBVF9BMl9EQVRBM19Nc2spID4+IENBTl9JRl9EQVRfQTJfREFUQTNfUG9zKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzRdID0gKHVpbnQ4X3QpKHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9CMSAmIENBTl9JRl9EQVRfQjFfREFUQTRfTXNrKTsKKyAgICBwQ2FuTXNnLT5EYXRhWzVdID0gKHVpbnQ4X3QpKCh0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQjEgJiBDQU5fSUZfREFUX0IxX0RBVEE1X01zaykgPj4gQ0FOX0lGX0RBVF9CMV9EQVRBNV9Qb3MpOworICAgIHBDYW5Nc2ctPkRhdGFbNl0gPSAodWludDhfdCkodENBTi0+SUZbdThNc2dJZk51bV0uREFUX0IyICYgQ0FOX0lGX0RBVF9CMl9EQVRBNl9Nc2spOworICAgIHBDYW5Nc2ctPkRhdGFbN10gPSAodWludDhfdCkoKHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9CMiAmIENBTl9JRl9EQVRfQjJfREFUQTdfTXNrKSA+PiBDQU5fSUZfREFUX0IyX0RBVEE3X1Bvcyk7CisKKyAgICBSZWxlYXNlSUYodENBTiwgKHVpbnQzMl90KXU4TXNnSWZOdW0pOworICAgIHJldHVybiAoaW50MzJfdClUUlVFOworfQorCitzdGF0aWMgaW50IGNhbl91cGRhdGVfc3B0KGludCBzYW1wbF9wdCwgaW50IHRzZWcsIGludCAqdHNlZzEsIGludCAqdHNlZzIpCit7CisgICAgKnRzZWcyID0gdHNlZyArIDEgLSAoc2FtcGxfcHQgKiAodHNlZyArIDEpKSAvIDEwMDA7CisgICAgaWYoKnRzZWcyIDwgVFNFRzJfTUlOKQorICAgIHsKKyAgICAgICAgKnRzZWcyID0gVFNFRzJfTUlOOworICAgIH0KKyAgICBpZigqdHNlZzIgPiBUU0VHMl9NQVgpCisgICAgeworICAgICAgICAqdHNlZzIgPSBUU0VHMl9NQVg7CisgICAgfQorCisgICAgKnRzZWcxID0gdHNlZyAtICp0c2VnMjsKKworICAgIGlmKCp0c2VnMSA+IFRTRUcxX01BWCkKKyAgICB7CisgICAgICAgICp0c2VnMSA9IFRTRUcxX01BWDsKKyAgICAgICAgKnRzZWcyID0gdHNlZyAtICp0c2VnMTsKKyAgICB9CisgICAgcmV0dXJuIDEwMDAgKiAodHNlZyArIDEgLSAqdHNlZzIpIC8gKHRzZWcgKyAxKTsKK30KKworLyoqIEBlbmRjb25kIEhJRERFTl9TWU1CT0xTICovCisKKy8qKgorICAqIEBicmllZiBTZXQgYnVzIGJhdWQtcmF0ZS4KKyAgKgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHUzMkJhdWRSYXRlIFRoZSB0YXJnZXQgQ0FOIGJhdWQtcmF0ZS4gVGhlIHJhbmdlIG9mIHUzMkJhdWRSYXRlIGlzIDF+MTAwMEtIei4KKyAgKgorICAqIEByZXR1cm4gdTMyQ3VycmVudEJpdFJhdGUgIFJlYWwgYmF1ZC1yYXRlIHZhbHVlLgorICAqCisgICogQGRldGFpbHMgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IGJ1cyB0aW1pbmcgcGFyYW1ldGVyIGFjY29yZGluZyBjdXJyZW50IGNsb2NrIGFuZCB0YXJnZXQgYmF1ZC1yYXRlLgorICAqLwordWludDMyX3QgQ0FOX1NldEJhdWRSYXRlKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJCYXVkUmF0ZSkKK3sKKyAgICBsb25nIHJhdGU7CisgICAgbG9uZyBiZXN0X2Vycm9yID0gMTAwMDAwMDAwMCwgZXJyb3IgPSAwOworICAgIGludCBiZXN0X3RzZWcgPSAwLCBiZXN0X2JycCA9IDAsIGJycCA9IDA7CisgICAgaW50IHRzZWdhbGwsIHRzZWcgPSAwLCB0c2VnMSA9IDAsIHRzZWcyID0gMDsKKyAgICBpbnQgc3B0X2Vycm9yID0gMTAwMCwgc3B0ID0gMCwgc2FtcGxfcHQ7CisgICAgaW50NjRfdCBjbG9ja19mcmVxID0gMDsKKyAgICB1aW50MzJfdCBzancgPSAxVUw7CisKKyAgICBDQU5fRW50ZXJJbml0TW9kZSh0Q0FOLCAwVSk7CisKKyAgICBjbG9ja19mcmVxID0gKGludDY0X3QpQ0xLX0dldFBDTEswRnJlcSgpOworCisgICAgaWYodTMyQmF1ZFJhdGUgPj0gMTAwMDAwMFVMKQorICAgIHsKKyAgICAgICAgdTMyQmF1ZFJhdGUgPSAxMDAwMDAwVUw7CisgICAgfQorCisgICAgLyogVXNlIENJQSByZWNvbW1lbmRlZCBzYW1wbGUgcG9pbnRzICovCisgICAgaWYodTMyQmF1ZFJhdGUgPiA4MDAwMDBVTCkKKyAgICB7CisgICAgICAgIHNhbXBsX3B0ID0gNzUwOworICAgIH0KKyAgICBlbHNlIGlmKHUzMkJhdWRSYXRlID4gNTAwMDAwVUwpCisgICAgeworICAgICAgICBzYW1wbF9wdCA9IDgwMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2FtcGxfcHQgPSA4NzU7CisgICAgfQorCisgICAgLyogdHNlZyBldmVuID0gcm91bmQgZG93biwgb2RkID0gcm91bmQgdXAgKi8KKyAgICBmb3IodHNlZyA9IChUU0VHMV9NQVggKyBUU0VHMl9NQVgpICogMiArIDE7IHRzZWcgPj0gKFRTRUcxX01JTiArIFRTRUcyX01JTikgKiAyOyB0c2VnLS0pCisgICAgeworICAgICAgICB0c2VnYWxsID0gMSArIHRzZWcgLyAyOworICAgICAgICAvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzErdHNlZzIpICovCisKKyAgICAgICAgLyogYnJwID0gKGludDMyX3QpKGNsb2NrX2ZyZXEgLyAodHNlZ2FsbCAqIHUzMkJhdWRSYXRlKSkgKyAodHNlZyAlIDIpOyAqLworICAgICAgICBicnAgPSAoaW50MzJfdCkoY2xvY2tfZnJlcSAvICgoaW50NjRfdCl0c2VnYWxsICogKGludDMyX3QpdTMyQmF1ZFJhdGUpKSArICh0c2VnICUgMik7CisKKworICAgICAgICAvKiBjaG9zZSBicnAgc3RlcCB3aGljaCBpcyBwb3NzaWJsZSBpbiBzeXN0ZW0gKi8KKyAgICAgICAgYnJwID0gKGJycCAvIEJSUF9JTkMpICogQlJQX0lOQzsKKworICAgICAgICBpZigoYnJwID49IEJSUF9NSU4pICYmIChicnAgPD0gQlJQX01BWCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJhdGUgPSAoaW50MzJfdCkoY2xvY2tfZnJlcSAvICgoaW50NjRfdClicnAgKiB0c2VnYWxsKSk7CisKKyAgICAgICAgICAgIGVycm9yID0gKGludDMyX3QpdTMyQmF1ZFJhdGUgLSByYXRlOworCisgICAgICAgICAgICAvKiB0c2VnIGJycCBiaXRlcnJvciAqLworICAgICAgICAgICAgaWYoZXJyb3IgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yID0gLWVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZihlcnJvciA8PSBiZXN0X2Vycm9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJlc3RfZXJyb3IgPSBlcnJvcjsKKyAgICAgICAgICAgICAgICBpZihlcnJvciA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3B0ID0gY2FuX3VwZGF0ZV9zcHQoc2FtcGxfcHQsIHRzZWcgLyAyLCAmdHNlZzEsICZ0c2VnMik7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gc2FtcGxfcHQgLSBzcHQ7CisgICAgICAgICAgICAgICAgICAgIGlmKGVycm9yIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAtZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoZXJyb3IgPD0gc3B0X2Vycm9yKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcHRfZXJyb3IgPSBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfdHNlZyA9IHRzZWcgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9icnAgPSBicnA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihlcnJvciA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJlc3RfdHNlZyA9IHRzZWcgLyAyOworICAgICAgICAgICAgICAgICAgICBiZXN0X2JycCA9IGJycDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzcHQgPSBjYW5fdXBkYXRlX3NwdChzYW1wbF9wdCwgYmVzdF90c2VnLCAmdHNlZzEsICZ0c2VnMik7CisKKyAgICAvKiBjaGVjayBmb3Igc2p3IHVzZXIgc2V0dGluZ3MgKi8KKyAgICAvKiBidC0+c2p3IGlzIGF0IGxlYXN0IDEgLT4gc2FuaXRpemUgdXBwZXIgYm91bmQgdG8gc2p3X21heCAqLworICAgIGlmKHNqdyA+IFNKV19NQVgpCisgICAgeworICAgICAgICBzancgPSBTSldfTUFYOworICAgIH0KKyAgICAvKiBidC0+c2p3IG11c3Qgbm90IGJlIGhpZ2hlciB0aGFuIHRzZWcyICovCisgICAgaWYodHNlZzIgPCAoaW50MzJfdClzancpCisgICAgeworICAgICAgICBzancgPSAodWludDMyX3QpdHNlZzI7CisgICAgfQorCisgICAgLyogcmVhbCBiaXQtcmF0ZSAqLworICAgIHUzMkJhdWRSYXRlID0gKHVpbnQzMl90KShpbnQzMl90KShjbG9ja19mcmVxIC8gKGludDMyX3QpKGJlc3RfYnJwICogKHRzZWcxICsgdHNlZzIgKyAxKSkpOworCisgICAgdENBTi0+QlRJTUUgPSAoKCh1aW50MzJfdCl0c2VnMiAtIDFVTCkgPDwgQ0FOX0JUSU1FX1RTRUcyX1BvcykgfCAoKCh1aW50MzJfdCl0c2VnMSAtIDFVTCkgPDwgQ0FOX0JUSU1FX1RTRUcxX1BvcykgfAorICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpYmVzdF9icnAgLSAxVUwpICYgQ0FOX0JUSU1FX0JSUF9Nc2spIHwgKHNqdyA8PCBDQU5fQlRJTUVfU0pXX1Bvcyk7CisKKworICAgIHRDQU4tPkJSUEUgID0gKCgodWludDMyX3QpYmVzdF9icnAgLSAxVUwpID4+IDYpICYgMHgwRlVMOworCisgICAgLyogREVCVUdfUFJJTlRGKCJcbiBiaXRyYXRlID0gJWQgXG4iLCBDQU5fR2V0Q0FOQml0UmF0ZSh0Q0FOKSk7ICovCisKKyAgICBDQU5fTGVhdmVJbml0TW9kZSh0Q0FOKTsKKworICAgIHJldHVybiB1MzJCYXVkUmF0ZTsKK30KKworLyoqCisgICogQGJyaWVmIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgYWxsIENBTiBpbnRlcnJ1cHQuCisgICoKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICoKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzIE5vIFN0YXR1cyBDaGFuZ2UgSW50ZXJydXB0IGFuZCBFcnJvciBTdGF0dXMgSW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICAqLworCisKK3ZvaWQgQ0FOX0Nsb3NlKENBTl9UICp0Q0FOKQoreworICAgIENBTl9EaXNhYmxlSW50KHRDQU4sIChDQU5fQ09OX0lFX01zayB8IENBTl9DT05fU0lFX01zayB8IENBTl9DT05fRUlFX01zaykpOworfQorCisKKworLyoqCisgICogQGJyaWVmIFNldCBDQU4gb3BlcmF0aW9uIG1vZGUgYW5kIHRhcmdldCBiYXVkLXJhdGUuCisgICoKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJCYXVkUmF0ZSBUaGUgdGFyZ2V0IENBTiBiYXVkLXJhdGUuIFRoZSByYW5nZSBvZiB1MzJCYXVkUmF0ZSBpcyAxfjEwMDBLSHouCisgICogQHBhcmFtW2luXSB1MzJNb2RlIFRoZSBDQU4gb3BlcmF0aW9uIG1vZGUuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDQU5fTk9STUFMX01PREUgTm9ybWFsIG9wZXJhdGlvbi4KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIENBTl9CQVNJQ19NT0RFIEJhc2ljIG1vZGUuCisgICogQHJldHVybiB1MzJDdXJyZW50Qml0UmF0ZSAgUmVhbCBiYXVkLXJhdGUgdmFsdWUuCisgICoKKyAgKiBAZGV0YWlscyBTZXQgYnVzIHRpbWluZyBwYXJhbWV0ZXIgYWNjb3JkaW5nIGN1cnJlbnQgY2xvY2sgYW5kIHRhcmdldCBiYXVkLXJhdGUuCisgICogICAgICAgICAgSW4gQmFzaWMgbW9kZSwgSUYxIFJlZ2lzdGVycyB1c2VkIGFzIFR4IEJ1ZmZlciwgSUYyIFJlZ2lzdGVycyB1c2VkIGFzIFJ4IEJ1ZmZlci4KKyAgKi8KK3VpbnQzMl90IENBTl9PcGVuKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJCYXVkUmF0ZSwgdWludDMyX3QgdTMyTW9kZSkKK3sKKyAgICB1aW50MzJfdCB1MzJDdXJyZW50Qml0UmF0ZTsKKworICAgIHUzMkN1cnJlbnRCaXRSYXRlID0gQ0FOX1NldEJhdWRSYXRlKHRDQU4sIHUzMkJhdWRSYXRlKTsKKworICAgIGlmKHUzMk1vZGUgPT0gQ0FOX0JBU0lDX01PREUpCisgICAgeworICAgICAgICBDQU5fRW50ZXJUZXN0TW9kZSh0Q0FOLCAodWludDhfdClDQU5fVEVTVF9CQVNJQ19Nc2spOworICAgIH0KKworICAgIHJldHVybiB1MzJDdXJyZW50Qml0UmF0ZTsKK30KKworLyoqCisgICogQGJyaWVmIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBhIHRyYW5zbWl0IG9iamVjdC4KKyAgKgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHUzMk1zZ051bSBTcGVjaWZpZXMgdGhlIE1lc3NhZ2Ugb2JqZWN0IG51bWJlciwgZnJvbSAwIHRvIDMxLgorICAqIEBwYXJhbVtpbl0gcENhbk1zZyBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIHN0cnVjdHVyZSB3aGVyZSByZWNlaXZlZCBkYXRhIGlzIGNvcGllZC4KKyAgKgorICAqIEByZXR2YWwgRkFMU0UgTm8gdXNlZnVsIGludGVyZmFjZS4KKyAgKiBAcmV0dmFsIFRSVUUgQ29uZmlnIG1lc3NhZ2Ugb2JqZWN0IHN1Y2Nlc3MuCisgICoKKyAgKiBAZGV0YWlscyBUaGUgdHdvIHNldHMgb2YgaW50ZXJmYWNlIHJlZ2lzdGVycyAoSUYxIGFuZCBJRjIpIGNvbnRyb2wgdGhlIHNvZnR3YXJlIGFjY2VzcyB0byB0aGUgTWVzc2FnZSBSQU0uCisgICogICAgICAgICAgVGhleSBidWZmZXIgdGhlIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgdG8gYW5kIGZyb20gdGhlIFJBTSwgYXZvaWRpbmcgY29uZmxpY3RzIGJldHdlZW4gc29mdHdhcmUgYWNjZXNzZXMgYW5kIG1lc3NhZ2UgcmVjZXB0aW9uL3RyYW5zbWlzc2lvbi4KKyAgKi8KK2ludDMyX3QgQ0FOX1NldFR4TXNnKENBTl9UICp0Q0FOLCB1aW50MzJfdCB1MzJNc2dOdW0sIFNUUl9DQU5NU0dfVCogcENhbk1zZykKK3sKKyAgICB1aW50OF90IHU4TXNnSWZOdW07CisKKyAgICBpZigodThNc2dJZk51bSA9ICh1aW50OF90KUxvY2tJRl9UTCh0Q0FOKSkgPT0gMlUpCisgICAgeworICAgICAgICByZXR1cm4gKGludDMyX3QpRkFMU0U7CisgICAgfQorCisgICAgLyogdXBkYXRlIHRoZSBjb250ZW50cyBuZWVkZWQgZm9yIHRyYW5zbWlzc2lvbiovCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQ01BU0sgPSBDQU5fSUZfQ01BU0tfV1JSRF9Nc2sgfCBDQU5fSUZfQ01BU0tfTUFTS19Nc2sgfCBDQU5fSUZfQ01BU0tfQVJCX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5fSUZfQ01BU0tfQ09OVFJPTF9Nc2sgfCBDQU5fSUZfQ01BU0tfREFUQUFfTXNrICB8IENBTl9JRl9DTUFTS19EQVRBQl9Nc2s7CisKKyAgICBpZihwQ2FuTXNnLT5JZFR5cGUgPT0gQ0FOX1NURF9JRCkKKyAgICB7CisgICAgICAgIC8qIHN0YW5kYXJkIElEKi8KKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMSA9IDBVTDsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMiA9ICgoKHBDYW5Nc2ctPklkKSAmIDB4N0ZGVUwpIDw8IDIpIHwgQ0FOX0lGX0FSQjJfRElSX01zayB8IENBTl9JRl9BUkIyX01TR1ZBTF9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIGV4dGVuZGVkIElEKi8KKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMSA9IChwQ2FuTXNnLT5JZCkgJiAweEZGRkZVTDsKKyAgICAgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQVJCMiA9ICgoKHBDYW5Nc2ctPklkKSAmIDB4MUZGRjAwMDBVTCkgPj4gMTYpIHwgQ0FOX0lGX0FSQjJfRElSX01zayB8IENBTl9JRl9BUkIyX1hURF9Nc2sgfCBDQU5fSUZfQVJCMl9NU0dWQUxfTXNrOworICAgIH0KKworICAgIGlmKHBDYW5Nc2ctPkZyYW1lVHlwZSkKKyAgICB7CisgICAgICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkFSQjIgfD0gICBDQU5fSUZfQVJCMl9ESVJfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5BUkIyICY9ICh+Q0FOX0lGX0FSQjJfRElSX01zayk7CisgICAgfQorCisKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQTEgPSAoKHVpbnQzMl90KXBDYW5Nc2ctPkRhdGFbMV0gPDwgOCkgfCAodWludDMyX3QpcENhbk1zZy0+RGF0YVswXTsKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQTIgPSAoKHVpbnQzMl90KXBDYW5Nc2ctPkRhdGFbM10gPDwgOCkgfCAodWludDMyX3QpcENhbk1zZy0+RGF0YVsyXTsKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5EQVRfQjEgPSAoKHVpbnQzMl90KXBDYW5Nc2ctPkRhdGFbNV0gPDwgOCkgfCBwQ2FuTXNnLT5EYXRhWzRdOworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkRBVF9CMiA9ICgodWludDMyX3QpcENhbk1zZy0+RGF0YVs3XSA8PCA4KSB8IHBDYW5Nc2ctPkRhdGFbNl07CisKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5NQ09OICAgPSAgQ0FOX0lGX01DT05fTkVXREFUX01zayB8IHBDYW5Nc2ctPkRMQyB8IENBTl9JRl9NQ09OX1RYSUVfTXNrIHwgQ0FOX0lGX01DT05fRU9CX01zazsKKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5DUkVRICAgPSAxVUwgKyB1MzJNc2dOdW07CisKKyAgICBSZWxlYXNlSUYodENBTiwgKHVpbnQzMl90KXU4TXNnSWZOdW0pOworCisgICAgcmV0dXJuIChpbnQzMl90KVRSVUU7Cit9CisKKy8qKgorICAqIEBicmllZiBTZXQgdHJhbnNtaXQgcmVxdWVzdCBiaXQuCisgICoKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJNc2dOdW0gU3BlY2lmaWVzIHRoZSBNZXNzYWdlIG9iamVjdCBudW1iZXIsIGZyb20gMCB0byAzMS4KKyAgKgorICAqIEByZXR1cm4gVFJVRTogU3RhcnQgdHJhbnNtaXQgbWVzc2FnZS4KKyAgKgorICAqIEBkZXRhaWxzIElmIGEgdHJhbnNtaXNzaW9uIGlzIHJlcXVlc3RlZCBieSBwcm9ncmFtbWluZyBiaXQgVHhScXN0L05ld0RhdCAoSUZuX0NNQVNLWzJdKSwgdGhlIFR4UnFzdCAoSUZuX01DT05bOF0pIHdpbGwgYmUgaWdub3JlZC4KKyAgKi8KK2ludDMyX3QgQ0FOX1RyaWdnZXJUeE1zZyhDQU5fVCAgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSkKK3sKKyAgICB1aW50OF90IHU4TXNnSWZOdW07CisKKyAgICBpZigodThNc2dJZk51bSA9ICh1aW50OF90KUxvY2tJRl9UTCh0Q0FOKSkgPT0gMlUpCisgICAgeworICAgICAgICByZXR1cm4gKGludDMyX3QpRkFMU0U7CisgICAgfQorCisgICAgdENBTi0+U1RBVFVTICY9ICh+Q0FOX1NUQVRVU19UWE9LX01zayk7CisKKyAgICAvKiByZWFkIHRoZSBtZXNzYWdlIGNvbnRlbnRzKi8KKyAgICB0Q0FOLT5JRlt1OE1zZ0lmTnVtXS5DTUFTSyA9IENBTl9JRl9DTUFTS19DTFJJTlRQTkRfTXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENBTl9JRl9DTUFTS19UWFJRU1RORVdEQVRfTXNrOworCisgICAgdENBTi0+SUZbdThNc2dJZk51bV0uQ1JFUSA9IDFVTCArIHUzMk1zZ051bTsKKworICAgIHdoaWxlKHRDQU4tPklGW3U4TXNnSWZOdW1dLkNSRVEgJiBDQU5fSUZfQ1JFUV9CVVNZX01zaykKKyAgICB7CisgICAgICAgIC8qV2FpdCovCisgICAgfQorICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNNQVNLICA9IENBTl9JRl9DTUFTS19XUlJEX01zayB8IENBTl9JRl9DTUFTS19UWFJRU1RORVdEQVRfTXNrOworICAgIHRDQU4tPklGW3U4TXNnSWZOdW1dLkNSRVEgID0gMVVMICsgdTMyTXNnTnVtOworCisgICAgUmVsZWFzZUlGKHRDQU4sICh1aW50MzJfdCl1OE1zZ0lmTnVtKTsKKworICAgIHJldHVybiAoaW50MzJfdClUUlVFOworfQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIENBTiBpbnRlcnJ1cHQuCisgICoKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIEludGVycnVwdCBNYXNrLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0FOX0NPTl9JRV9Nc2sgTW9kdWxlIGludGVycnVwdCBlbmFibGUuCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDQU5fQ09OX1NJRV9Nc2sgU3RhdHVzIGNoYW5nZSBpbnRlcnJ1cHQgZW5hYmxlLgorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ0FOX0NPTl9FSUVfTXNrIEVycm9yIGludGVycnVwdCBlbmFibGUuCisgICoKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzIFRoZSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSBoYXMgdHdvIHBvc3NpYmlsaXRpZXMgdG8gZm9sbG93IHRoZSBzb3VyY2Ugb2YgYSBtZXNzYWdlIGludGVycnVwdC4KKyAgKiAgICAgICAgICBGaXJzdCwgaXQgY2FuIGZvbGxvdyB0aGUgSW50SWQgaW4gdGhlIEludGVycnVwdCBSZWdpc3RlciBhbmQgc2Vjb25kIGl0IGNhbiBwb2xsIHRoZSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlci4KKyAgKi8KK3ZvaWQgQ0FOX0VuYWJsZUludChDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICB0Q0FOLT5DT04gPSAodENBTi0+Q09OICYgfihDQU5fQ09OX0lFX01zayB8IENBTl9DT05fU0lFX01zayB8IENBTl9DT05fRUlFX01zaykpIHwKKyAgICAgICAgICAgICAgICAodTMyTWFzayAmIChDQU5fQ09OX0lFX01zayB8IENBTl9DT05fU0lFX01zayB8IENBTl9DT05fRUlFX01zaykpOworfQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBDQU4gaW50ZXJydXB0LgorICAqCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBJbnRlcnJ1cHQgTWFzay4gKENBTl9DT05fSUVfTXNrIC8gQ0FOX0NPTl9TSUVfTXNrIC8gQ0FOX0NPTl9FSUVfTXNrKS4KKyAgKgorICAqIEByZXR1cm4gTm9uZQorICAqCisgICogQGRldGFpbHMgVGhlIGludGVycnVwdCByZW1haW5zIGFjdGl2ZSB1bnRpbCB0aGUgSW50ZXJydXB0IFJlZ2lzdGVyIGlzIGJhY2sgdG8gdmFsdWUgemVybyAodGhlIGNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQgaXMgcmVzZXQpIG9yIHVudGlsIElFIGlzIHJlc2V0LgorICAqLwordm9pZCBDQU5fRGlzYWJsZUludChDQU5fVCAqdENBTiwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICB0Q0FOLT5DT04gPSB0Q0FOLT5DT04gJiB+KCh1MzJNYXNrICYgKENBTl9DT05fSUVfTXNrIHwgQ0FOX0NPTl9TSUVfTXNrIHwgQ0FOX0NPTl9FSUVfTXNrKSkpOworfQorCisKKy8qKgorICAqIEBicmllZiBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgYSByZWNlaXZlIG1lc3NhZ2Ugb2JqZWN0LgorICAqCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyTXNnTnVtIFNwZWNpZmllcyB0aGUgTWVzc2FnZSBvYmplY3QgbnVtYmVyLCBmcm9tIDAgdG8gMzEuCisgICogQHBhcmFtW2luXSB1MzJJRFR5cGUgU3BlY2lmaWVzIHRoZSBpZGVudGlmaWVyIHR5cGUgb2YgdGhlIGZyYW1lcyB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENBTl9TVERfSUQgVGhlIDExLWJpdCBpZGVudGlmaWVyLgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDQU5fRVhUX0lEIFRoZSAyOS1iaXQgaWRlbnRpZmllci4KKyAgKiBAcGFyYW1baW5dIHUzMklEIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgKgorICAqIEByZXR2YWwgRkFMU0UgTm8gdXNlZnVsIGludGVyZmFjZS4KKyAgKiBAcmV0dmFsIFRSVUUgQ29uZmlndXJlIGEgcmVjZWl2ZSBtZXNzYWdlIG9iamVjdCBzdWNjZXNzLgorICAqCisgICogQGRldGFpbHMgSWYgdGhlIFJ4SUUgYml0IChDQU5fSUZuX01DT05bMTBdKSBpcyBzZXQsIHRoZSBJbnRQbmQgYml0IChDQU5fSUZuX01DT05bMTNdKQorICAqICAgICAgICAgIHdpbGwgYmUgc2V0IHdoZW4gYSByZWNlaXZlZCBEYXRhIEZyYW1lIGlzIGFjY2VwdGVkIGFuZCBzdG9yZWQgaW4gdGhlIE1lc3NhZ2UgT2JqZWN0LgorICAqLworaW50MzJfdCBDQU5fU2V0UnhNc2coQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgdWludDMyX3QgdTMySURUeXBlLCB1aW50MzJfdCB1MzJJRCkKK3sKKyAgICB1aW50MzJfdCB1MzJUaW1lT3V0Q291bnQgPSAwVUw7CisKKyAgICB3aGlsZShDQU5fU2V0UnhNc2dPYmoodENBTiwgKHVpbnQ4X3QpdTMyTXNnTnVtLCAodWludDhfdCl1MzJJRFR5cGUsIHUzMklELCAodWludDhfdClUUlVFKSA9PSAoaW50MzJfdClGQUxTRSkKKyAgICB7CisgICAgICAgIGlmKCsrdTMyVGltZU91dENvdW50ID49IFJFVFJZX0NPVU5UUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIChpbnQzMl90KVRSVUU7Cit9CisKKy8qKgorICAqIEBicmllZiBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgYSByZWNlaXZlIG1lc3NhZ2Ugb2JqZWN0LgorICAqCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyTXNnTnVtIFNwZWNpZmllcyB0aGUgTWVzc2FnZSBvYmplY3QgbnVtYmVyLCBmcm9tIDAgdG8gMzEuCisgICogQHBhcmFtW2luXSB1MzJJRFR5cGUgU3BlY2lmaWVzIHRoZSBpZGVudGlmaWVyIHR5cGUgb2YgdGhlIGZyYW1lcyB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENBTl9TVERfSUQgVGhlIDExLWJpdCBpZGVudGlmaWVyLgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDQU5fRVhUX0lEIFRoZSAyOS1iaXQgaWRlbnRpZmllci4KKyAgKiBAcGFyYW1baW5dIHUzMklEIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgKiBAcGFyYW1baW5dIHUzMklETWFzayBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIgbWFzayB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgKgorICAqIEByZXR2YWwgRkFMU0UgTm8gdXNlZnVsIGludGVyZmFjZS4KKyAgKiBAcmV0dmFsIFRSVUUgQ29uZmlndXJlIGEgcmVjZWl2ZSBtZXNzYWdlIG9iamVjdCBzdWNjZXNzLgorICAqCisgICogQGRldGFpbHMgSWYgdGhlIFJ4SUUgYml0IChDQU5fSUZuX01DT05bMTBdKSBpcyBzZXQsIHRoZSBJbnRQbmQgYml0IChDQU5fSUZuX01DT05bMTNdKQorICAqICAgICAgICAgIHdpbGwgYmUgc2V0IHdoZW4gYSByZWNlaXZlZCBEYXRhIEZyYW1lIGlzIGFjY2VwdGVkIGFuZCBzdG9yZWQgaW4gdGhlIE1lc3NhZ2UgT2JqZWN0LgorICAqLworaW50MzJfdCBDQU5fU2V0UnhNc2dBbmRNc2soQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgdWludDMyX3QgdTMySURUeXBlLCB1aW50MzJfdCB1MzJJRCwgdWludDMyX3QgdTMySURNYXNrKQoreworICAgIHVpbnQzMl90IHUzMlRpbWVPdXRDb3VudCA9IDBVTDsKKworICAgIHdoaWxlKENBTl9TZXRSeE1zZ09iakFuZE1zayh0Q0FOLCAodWludDhfdCl1MzJNc2dOdW0sICh1aW50OF90KXUzMklEVHlwZSwgdTMySUQsIHUzMklETWFzaywgKHVpbnQ4X3QpVFJVRSkgPT0gKGludDMyX3QpRkFMU0UpCisgICAgeworICAgICAgICBpZigrK3UzMlRpbWVPdXRDb3VudCA+PSBSRVRSWV9DT1VOVFMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoaW50MzJfdClUUlVFOworfQorCisvKioKKyAgKiBAYnJpZWYgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIHNldmVyYWwgcmVjZWl2ZSBtZXNzYWdlIG9iamVjdHMuCisgICoKKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJNc2dOdW0gVGhlIHN0YXJ0aW5nIE1TRyBSQU0gbnVtYmVyKDAgfiAzMSkuCisgICogQHBhcmFtW2luXSB1MzJNc2dDb3VudCB0aGUgbnVtYmVyIG9mIE1TRyBSQU0gb2YgdGhlIEZJRk8uCisgICogQHBhcmFtW2luXSB1MzJJRFR5cGUgU3BlY2lmaWVzIHRoZSBpZGVudGlmaWVyIHR5cGUgb2YgdGhlIGZyYW1lcyB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENBTl9TVERfSUQgVGhlIDExLWJpdCBpZGVudGlmaWVyLgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDQU5fRVhUX0lEIFRoZSAyOS1iaXQgaWRlbnRpZmllci4KKyAgKiBAcGFyYW1baW5dIHUzMklEIFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB1c2VkIGZvciBhY2NlcHRhbmNlIGZpbHRlcmluZy4KKyAgKgorICAqIEByZXR2YWwgRkFMU0UgTm8gdXNlZnVsIGludGVyZmFjZS4KKyAgKiBAcmV0dmFsIFRSVUUgQ29uZmlndXJlIHJlY2VpdmUgbWVzc2FnZSBvYmplY3RzIHN1Y2Nlc3MuCisgICoKKyAgKiBAZGV0YWlscyBUaGUgSW50ZXJmYWNlIFJlZ2lzdGVycyBhdm9pZCBjb25mbGljdCBiZXR3ZWVuIHRoZSBDUFUgYWNjZXNzZXMgdG8gdGhlIE1lc3NhZ2UgUkFNIGFuZCBDQU4gbWVzc2FnZSByZWNlcHRpb24KKyAgKiAgICAgICAgICBhbmQgdHJhbnNtaXNzaW9uIGJ5IGJ1ZmZlcmluZyB0aGUgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZC4KKyAgKi8KK2ludDMyX3QgQ0FOX1NldE11bHRpUnhNc2coQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgdWludDMyX3QgdTMyTXNnQ291bnQsIHVpbnQzMl90IHUzMklEVHlwZSwgdWludDMyX3QgdTMySUQpCit7CisgICAgdWludDMyX3QgaSA9IDBVTDsKKyAgICB1aW50MzJfdCB1MzJUaW1lT3V0Q291bnQ7CisgICAgdWludDMyX3QgdTMyRU9CX0ZsYWcgPSAwVUw7CisKKyAgICBmb3IoaSA9IDFVTDsgaSA8IHUzMk1zZ0NvdW50OyBpKyspCisgICAgeworICAgICAgICB1MzJUaW1lT3V0Q291bnQgPSAwVUw7CisKKyAgICAgICAgdTMyTXNnTnVtICs9IChpIC0gMVVMKTsKKworICAgICAgICBpZihpID09IHUzMk1zZ0NvdW50KQorICAgICAgICB7CisgICAgICAgICAgICB1MzJFT0JfRmxhZyA9IDFVTDsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlKENBTl9TZXRSeE1zZ09iaih0Q0FOLCAodWludDhfdCl1MzJNc2dOdW0sICh1aW50OF90KXUzMklEVHlwZSwgdTMySUQsICh1aW50OF90KXUzMkVPQl9GbGFnKSA9PSAoaW50MzJfdClGQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKyt1MzJUaW1lT3V0Q291bnQgPj0gUkVUUllfQ09VTlRTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoaW50MzJfdClGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoaW50MzJfdClUUlVFOworfQorCisKKy8qKgorICAqIEBicmllZiBTZW5kIENBTiBtZXNzYWdlLgorICAqIEBwYXJhbVtpbl0gdENBTiBUaGUgcG9pbnRlciB0byBDQU4gbW9kdWxlIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHUzMk1zZ051bSBTcGVjaWZpZXMgdGhlIE1lc3NhZ2Ugb2JqZWN0IG51bWJlciwgZnJvbSAwIHRvIDMxLgorICAqIEBwYXJhbVtpbl0gcENhbk1zZyBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIHN0cnVjdHVyZSB3aGVyZSByZWNlaXZlZCBkYXRhIGlzIGNvcGllZC4KKyAgKgorICAqIEByZXR2YWwgRkFMU0UgMS4gV2hlbiBvcGVyYXRpb24gaW4gYmFzaWMgbW9kZTogVHJhbnNtaXQgbWVzc2FnZSB0aW1lIG91dC4gXG4KKyAgKiAgICAgICAgICAgICAgIDIuIFdoZW4gb3BlcmF0aW9uIGluIG5vcm1hbCBtb2RlOiBObyB1c2VmdWwgaW50ZXJmYWNlLiBcbgorICAqIEByZXR2YWwgVFJVRSBUcmFuc21pdCBNZXNzYWdlIHN1Y2Nlc3MuCisgICoKKyAgKiBAZGV0YWlscyBUaGUgcmVjZWl2ZS90cmFuc21pdCBwcmlvcml0eSBmb3IgdGhlIE1lc3NhZ2UgT2JqZWN0cyBpcyBhdHRhY2hlZCB0byB0aGUgbWVzc2FnZSBudW1iZXIuCisgICogICAgICAgICAgTWVzc2FnZSBPYmplY3QgMSBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHksIHdoaWxlIE1lc3NhZ2UgT2JqZWN0IDMyIGhhcyB0aGUgbG93ZXN0IHByaW9yaXR5LgorICAqLworaW50MzJfdCBDQU5fVHJhbnNtaXQoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKQoreworICAgIHVpbnQzMl90IGNvbmQwLCBjb25kMTsKKworICAgIGNvbmQwID0gdENBTi0+Q09OICYgQ0FOX0NPTl9URVNUX01zazsKKyAgICBjb25kMSA9IHRDQU4tPlRFU1QgJiBDQU5fVEVTVF9CQVNJQ19Nc2s7CisgICAgaWYoY29uZDAgJiYgY29uZDEpCisgICAgeworICAgICAgICByZXR1cm4gKENBTl9CYXNpY1NlbmRNc2codENBTiwgcENhbk1zZykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZihDQU5fU2V0VHhNc2codENBTiwgdTMyTXNnTnVtLCBwQ2FuTXNnKSA9PSAoaW50MzJfdClGQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChpbnQzMl90KUZBTFNFOworICAgICAgICB9CisgICAgICAgIENBTl9UcmlnZ2VyVHhNc2codENBTiwgdTMyTXNnTnVtKTsKKyAgICB9CisKKyAgICByZXR1cm4gKGludDMyX3QpVFJVRTsKK30KKworCisvKioKKyAgKiBAYnJpZWYgR2V0cyB0aGUgbWVzc2FnZSwgaWYgcmVjZWl2ZWQuCisgICogQHBhcmFtW2luXSB0Q0FOIFRoZSBwb2ludGVyIHRvIENBTiBtb2R1bGUgYmFzZSBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyTXNnTnVtIFNwZWNpZmllcyB0aGUgTWVzc2FnZSBvYmplY3QgbnVtYmVyLCBmcm9tIDAgdG8gMzEuCisgICogQHBhcmFtW2luXSBwQ2FuTXNnIFBvaW50ZXIgdG8gdGhlIG1lc3NhZ2Ugc3RydWN0dXJlIHdoZXJlIHJlY2VpdmVkIGRhdGEgaXMgY29waWVkLgorICAqCisgICogQHJldHZhbCBGQUxTRSBObyBhbnkgbWVzc2FnZSByZWNlaXZlZC4KKyAgKiBAcmV0dmFsIFRSVUUgUmVjZWl2ZSBNZXNzYWdlIHN1Y2Nlc3MuCisgICoKKyAgKiBAZGV0YWlscyBUaGUgSW50ZXJmYWNlIFJlZ2lzdGVycyBhdm9pZCBjb25mbGljdCBiZXR3ZWVuIHRoZSBDUFUgYWNjZXNzZXMgdG8gdGhlIE1lc3NhZ2UgUkFNIGFuZCBDQU4gbWVzc2FnZSByZWNlcHRpb24KKyAgKiAgICAgICAgICBhbmQgdHJhbnNtaXNzaW9uIGJ5IGJ1ZmZlcmluZyB0aGUgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZC4KKyAgKi8KK2ludDMyX3QgQ0FOX1JlY2VpdmUoQ0FOX1QgKnRDQU4sIHVpbnQzMl90IHUzMk1zZ051bSwgU1RSX0NBTk1TR19UKiBwQ2FuTXNnKQoreworICAgIHVpbnQzMl90IGNvbmQwLCBjb25kMTsKKworICAgIGNvbmQwID0gdENBTi0+Q09OICYgQ0FOX0NPTl9URVNUX01zazsKKyAgICBjb25kMSA9IHRDQU4tPlRFU1QgJiBDQU5fVEVTVF9CQVNJQ19Nc2s7CisKKyAgICBpZihjb25kMCAmJiBjb25kMSkKKyAgICB7CisgICAgICAgIHJldHVybiAoQ0FOX0Jhc2ljUmVjZWl2ZU1zZyh0Q0FOLCBwQ2FuTXNnKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBDQU5fUmVhZE1zZ09iaih0Q0FOLCAodWludDhfdCl1MzJNc2dOdW0sICh1aW50OF90KVRSVUUsIHBDYW5Nc2cpOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmIENsZWFyIGludGVycnVwdCBwZW5kaW5nIGJpdC4KKyAgKiBAcGFyYW1baW5dIHRDQU4gVGhlIHBvaW50ZXIgdG8gQ0FOIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisgICogQHBhcmFtW2luXSB1MzJNc2dOdW0gU3BlY2lmaWVzIHRoZSBNZXNzYWdlIG9iamVjdCBudW1iZXIsIGZyb20gMCB0byAzMS4KKyAgKgorICAqIEByZXR1cm4gTm9uZQorICAqCisgICogQGRldGFpbHMgQW4gaW50ZXJydXB0IHJlbWFpbnMgcGVuZGluZyB1bnRpbCB0aGUgYXBwbGljYXRpb24gc29mdHdhcmUgaGFzIGNsZWFyZWQgaXQuCisgICovCit2b2lkIENBTl9DTFJfSU5UX1BFTkRJTkdfQklUKENBTl9UICp0Q0FOLCB1aW50OF90IHUzMk1zZ051bSkKK3sKKyAgICB1aW50MzJfdCB1MzJNc2dJZk51bTsKKworICAgIGlmKCh1MzJNc2dJZk51bSA9IExvY2tJRl9UTCh0Q0FOKSkgPT0gMlVMKQorICAgIHsKKyAgICAgICAgdTMyTXNnSWZOdW0gPSAwVUw7CisgICAgfQorCisgICAgdENBTi0+SUZbdTMyTXNnSWZOdW1dLkNNQVNLID0gQ0FOX0lGX0NNQVNLX0NMUklOVFBORF9Nc2sgfCBDQU5fSUZfQ01BU0tfVFhSUVNUTkVXREFUX01zazsKKyAgICB0Q0FOLT5JRlt1MzJNc2dJZk51bV0uQ1JFUSA9IDFVTCArIHUzMk1zZ051bTsKKworICAgIFJlbGVhc2VJRih0Q0FOLCB1MzJNc2dJZk51bSk7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ0FOX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENBTl9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvY2xrLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9jbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ViZDIzCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvY2xrLmMKQEAgLTAsMCArMSwxMjM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY2xrLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBDbG9jayBDb250cm9sbGVyIChDTEspIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBDTEtfRHJpdmVyIENMSyBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIENMS19FWFBPUlRFRF9GVU5DVElPTlMgQ0xLIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIGZyZXF1ZW5jeSBvdXRwdXQgZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSBmcmVxdWVuY3kgb3V0cHV0IGZ1bmN0aW9uLgorICAqLwordm9pZCBDTEtfRGlzYWJsZUNLTyh2b2lkKQoreworICAgIC8qIERpc2FibGUgQ0tPIGNsb2NrIHNvdXJjZSAqLworICAgIENMSy0+QVBCQ0xLMCAmPSAofkNMS19BUEJDTEswX0NMS09DS0VOX01zayk7Cit9CisKKworLyoqCisgICogQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBlbmFibGUgZnJlcXVlbmN5IGRpdmlkZXIgbW9kdWxlIGNsb2NrLgorICAqICAgICAgICAgICAgIGVuYWJsZSBmcmVxdWVuY3kgZGl2aWRlciBjbG9jayBmdW5jdGlvbiBhbmQgY29uZmlndXJlIGZyZXF1ZW5jeSBkaXZpZGVyLgorICAqIEBwYXJhbVtpbl0gIHUzMkNsa1NyYyBpcyBmcmVxdWVuY3kgZGl2aWRlciBmdW5jdGlvbiBjbG9jayBzb3VyY2UuIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwxX0NMS09TRUxfSFhUCisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwxX0NMS09TRUxfTFhUCisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwxX0NMS09TRUxfSENMSworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMV9DTEtPU0VMX0hJUkMKKyAgKiBAcGFyYW1baW5dICB1MzJDbGtEaXYgaXMgZGl2aWRlciBvdXRwdXQgZnJlcXVlbmN5IHNlbGVjdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1MzJDbGtEaXZCeTFFbiBpcyBmcmVxdWVuY3kgZGl2aWRlZCBieSBvbmUgZW5hYmxlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIE91dHB1dCBzZWxlY3RlZCBjbG9jayB0byBDS08uIFRoZSBvdXRwdXQgY2xvY2sgZnJlcXVlbmN5IGlzIGRpdmlkZWQgYnkgdTMyQ2xrRGl2LgorICAqICAgICAgICAgICAgIFRoZSBmb3JtdWxhIGlzOgorICAqICAgICAgICAgICAgICAgICBDS08gZnJlcXVlbmN5ID0gKENsb2NrIHNvdXJjZSBmcmVxdWVuY3kpIC8gMl4odTMyQ2xrRGl2ICsgMSkKKyAgKiAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGp1c3QgdXNlZCB0byBzZXQgQ0tPIGNsb2NrLgorICAqICAgICAgICAgICAgIFVzZXIgbXVzdCBlbmFibGUgSS9PIGZvciBDS08gY2xvY2sgb3V0cHV0IHBpbiBieSB0aGVtc2VsdmVzLgorICAqLwordm9pZCBDTEtfRW5hYmxlQ0tPKHVpbnQzMl90IHUzMkNsa1NyYywgdWludDMyX3QgdTMyQ2xrRGl2LCB1aW50MzJfdCB1MzJDbGtEaXZCeTFFbikKK3sKKyAgICAvKiBDS08gPSBjbG9jayBzb3VyY2UgLyAyXih1MzJDbGtEaXYgKyAxKSAqLworICAgIENMSy0+Q0xLT0NUTCA9IENMS19DTEtPQ1RMX0NMS09FTl9Nc2sgfCB1MzJDbGtEaXYgfCAodTMyQ2xrRGl2QnkxRW4gPDwgQ0xLX0NMS09DVExfRElWMUVOX1Bvcyk7CisKKyAgICAvKiBFbmFibGUgQ0tPIGNsb2NrIHNvdXJjZSAqLworICAgIENMSy0+QVBCQ0xLMCB8PSBDTEtfQVBCQ0xLMF9DTEtPQ0tFTl9Nc2s7CisKKyAgICAvKiBTZWxlY3QgQ0tPIGNsb2NrIHNvdXJjZSAqLworICAgIENMSy0+Q0xLU0VMMSA9IChDTEstPkNMS1NFTDEgJiAofkNMS19DTEtTRUwxX0NMS09TRUxfTXNrKSkgfCAodTMyQ2xrU3JjKTsKKworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbnRlciB0byBQb3dlci1kb3duIG1vZGUKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsZXQgc3lzdGVtIGVudGVyIHRvIFBvd2VyLWRvd24gbW9kZS4gXG4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIENMS19Qb3dlckRvd24odm9pZCkKK3sKKyAgICAvKiBTZXQgdGhlIHByb2Nlc3NvciB1c2VzIGRlZXAgc2xlZXAgYXMgaXRzIGxvdyBwb3dlciBtb2RlICovCisgICAgU0NCLT5TQ1IgfD0gU0NCX1NDUl9TTEVFUERFRVBfTXNrOworCisgICAgLyogU2V0IHN5c3RlbSBQb3dlci1kb3duIGVuYWJsZWQqLworICAgIENMSy0+UFdSQ1RMIHw9IENMS19QV1JDVExfUERFTl9Nc2s7CisKKyAgICAvKiBDaGlwIGVudGVyIFBvd2VyLWRvd24gbW9kZSBhZnRlciBDUFUgcnVuIFdGSSBpbnN0cnVjdGlvbiAqLworICAgIF9fV0ZJKCk7Cit9CisKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBFbnRlciB0byBJZGxlIG1vZGUKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gbGV0IHN5c3RlbSBlbnRlciB0byBJZGxlIG1vZGUuIFxuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBDTEtfSWRsZSh2b2lkKQoreworICAgIC8qIFNldCB0aGUgcHJvY2Vzc29yIHVzZXMgc2xlZXAgYXMgaXRzIGxvdyBwb3dlciBtb2RlICovCisgICAgU0NCLT5TQ1IgJj0gflNDQl9TQ1JfU0xFRVBERUVQX01zazsKKworICAgIC8qIFNldCBjaGlwIGluIGlkbGUgbW9kZSBiZWNhdXNlIG9mIFdGSSBjb21tYW5kICovCisgICAgQ0xLLT5QV1JDVEwgJj0gfkNMS19QV1JDVExfUERFTl9Nc2s7CisKKyAgICAvKiBDaGlwIGVudGVyIGlkbGUgbW9kZSBhZnRlciBDUFUgcnVuIFdGSSBpbnN0cnVjdGlvbiAqLworICAgIF9fV0ZJKCk7Cit9CisKKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IGV4dGVybmFsIGhpZ2ggc3BlZWQgY3J5c3RhbCBjbG9jayBmcmVxdWVuY3kKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgRXh0ZXJuYWwgaGlnaCBmcmVxdWVuY3kgY3J5c3RhbCBmcmVxdWVuY3kKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGdldCBleHRlcm5hbCBoaWdoIGZyZXF1ZW5jeSBjcnlzdGFsIGZyZXF1ZW5jeS4gVGhlIGZyZXF1ZW5jeSB1bml0IGlzIEh6LgorICAqLworX19OT05TRUNVUkVfRU5UUllfV0VBSwordWludDMyX3QgQ0xLX0dldEhYVEZyZXEodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1MzJGcmVxID0gMFVMOworICAgIHVpbnQzMl90IHUzMkhYVEVOID0gQ0xLLT5QV1JDVEwgJiBDTEtfUFdSQ1RMX0hYVEVOX01zazsKKworICAgIGlmKHUzMkhYVEVOKQorICAgIHsKKyAgICAgICAgdTMyRnJlcSA9IF9fSFhUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJGcmVxID0gMFVMOworICAgIH0KKworICAgIHJldHVybiB1MzJGcmVxOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgZXh0ZXJuYWwgbG93IHNwZWVkIGNyeXN0YWwgY2xvY2sgZnJlcXVlbmN5CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIEV4dGVybmFsIGxvdyBzcGVlZCBjcnlzdGFsIGNsb2NrIGZyZXF1ZW5jeQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZ2V0IGV4dGVybmFsIGxvdyBmcmVxdWVuY3kgY3J5c3RhbCBmcmVxdWVuY3kuIFRoZSBmcmVxdWVuY3kgdW5pdCBpcyBIei4KKyAgKi8KKworX19OT05TRUNVUkVfRU5UUllfV0VBSwordWludDMyX3QgQ0xLX0dldExYVEZyZXEodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1MzJGcmVxID0gMFVMOworICAgIHVpbnQzMl90IHUzMkxYVEVOID0gQ0xLLT5QV1JDVEwgJiBDTEtfUFdSQ1RMX0xYVEVOX01zazsKKworICAgIGlmKHUzMkxYVEVOKQorICAgIHsKKyAgICAgICAgdTMyRnJlcSA9IF9fTFhUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJGcmVxID0gMFVMOworICAgIH0KKworICAgIHJldHVybiB1MzJGcmVxOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgSENMSyBmcmVxdWVuY3kKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgSENMSyBmcmVxdWVuY3kKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGdldCBIQ0xLIGZyZXF1ZW5jeS4gVGhlIGZyZXF1ZW5jeSB1bml0IGlzIEh6LgorICAqLworCitfX05PTlNFQ1VSRV9FTlRSWV9XRUFLCit1aW50MzJfdCBDTEtfR2V0SENMS0ZyZXEodm9pZCkKK3sKKyAgICBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUoKTsKKyAgICByZXR1cm4gU3lzdGVtQ29yZUNsb2NrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUENMSzAgZnJlcXVlbmN5CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIFBDTEswIGZyZXF1ZW5jeQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZ2V0IFBDTEswIGZyZXF1ZW5jeS4gVGhlIGZyZXF1ZW5jeSB1bml0IGlzIEh6LgorICAqLworCitfX05PTlNFQ1VSRV9FTlRSWV9XRUFLCit1aW50MzJfdCBDTEtfR2V0UENMSzBGcmVxKHZvaWQpCit7CisgICAgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCk7CisgICAgcmV0dXJuIChTeXN0ZW1Db3JlQ2xvY2sgPj4gKChDTEstPlBDTEtESVYgJiBDTEtfUENMS0RJVl9BUEIwRElWX01zaykgPj4gQ0xLX1BDTEtESVZfQVBCMERJVl9Qb3MpKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFBDTEsxIGZyZXF1ZW5jeQorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBQQ0xLMSBmcmVxdWVuY3kKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGdldCBQQ0xLMSBmcmVxdWVuY3kuIFRoZSBmcmVxdWVuY3kgdW5pdCBpcyBIei4KKyAgKi8KKworX19OT05TRUNVUkVfRU5UUllfV0VBSwordWludDMyX3QgQ0xLX0dldFBDTEsxRnJlcSh2b2lkKQoreworICAgIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSgpOworICAgIHJldHVybiAoU3lzdGVtQ29yZUNsb2NrID4+ICgoQ0xLLT5QQ0xLRElWICYgQ0xLX1BDTEtESVZfQVBCMURJVl9Nc2spID4+IENMS19QQ0xLRElWX0FQQjFESVZfUG9zKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBDUFUgZnJlcXVlbmN5CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIENQVSBmcmVxdWVuY3kKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGdldCBDUFUgZnJlcXVlbmN5LiBUaGUgZnJlcXVlbmN5IHVuaXQgaXMgSHouCisgICovCisKK19fTk9OU0VDVVJFX0VOVFJZX1dFQUsKK3VpbnQzMl90IENMS19HZXRDUFVGcmVxKHZvaWQpCit7CisgICAgdWludDMyX3QgdTMyRnJlcSwgdTMySGNsa1NyYywgdTMySGNsa0RpdjsKKyAgICB1aW50MzJfdCBhdTMyQ2xrVGJsW10gPSB7X19IWFQsIF9fTFhULCAwVUwsIF9fTElSQywgMFVMLCBfX0hJUkM0OCwgMFVMLCBfX0hJUkN9OworICAgIHVpbnQzMl90IHUzMlBsbFJlZywgdTMyRklOLCB1MzJORiwgdTMyTlIsIHUzMk5POworICAgIHVpbnQ4X3QgYXU4Tm9UYmxbNF0gPSB7MVUsIDJVLCAyVSwgNFV9OworICAgIHVpbnQzMl90IHUzMlJUQ0NLRU4gPSBDTEstPkFQQkNMSzAgJiBDTEtfQVBCQ0xLMF9SVENDS0VOX01zazsKKworICAgIC8qIFVwZGF0ZSBQTEwgQ2xvY2sgKi8KKyAgICB1MzJQbGxSZWcgPSBDTEstPlBMTENUTDsKKworICAgIGlmKHUzMlBsbFJlZyAmIChDTEtfUExMQ1RMX1BEX01zayB8IENMS19QTExDVExfT0VfTXNrKSkKKyAgICB7CisgICAgICAgIFBsbENsb2NrID0gMFVMOyAgICAgICAgICAgLyogUExMIGlzIGluIHBvd2VyIGRvd24gbW9kZSBvciBmaXggbG93ICovCisgICAgfQorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAvKiBQTEwgaXMgaW4gbm9ybWFsIG1vZGUgKi8KKyAgICB7CisKKyAgICAgICAgLyogUExMIHNvdXJjZSBjbG9jayAqLworICAgICAgICBpZih1MzJQbGxSZWcgJiBDTEtfUExMQ1RMX1BMTFNSQ19Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZJTiA9IF9fSElSQzsgICAgLyogUExMIHNvdXJjZSBjbG9jayBmcm9tIEhJUkMgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZJTiA9IF9fSFhUOyAgICAgLyogUExMIHNvdXJjZSBjbG9jayBmcm9tIEhYVCAqLworICAgICAgICB9CisKKyAgICAgICAgLyogQ2FsY3VsYXRlIFBMTCBmcmVxdWVuY3kgKi8KKyAgICAgICAgaWYodTMyUGxsUmVnICYgQ0xLX1BMTENUTF9CUF9Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIFBsbENsb2NrID0gdTMyRklOOyAgLyogUExMIGlzIGluIGJ5cGFzcyBtb2RlICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBQTEwgaXMgb3V0cHV0IGVuYWJsZWQgaW4gbm9ybWFsIHdvcmsgbW9kZSAqLworICAgICAgICAgICAgdTMyTk8gPSBhdThOb1RibFsoKHUzMlBsbFJlZyAmIENMS19QTExDVExfT1VURElWX01zaykgPj4gQ0xLX1BMTENUTF9PVVRESVZfUG9zKV07CisgICAgICAgICAgICB1MzJORiA9ICgodTMyUGxsUmVnICYgQ0xLX1BMTENUTF9GQkRJVl9Nc2spID4+IENMS19QTExDVExfRkJESVZfUG9zKSArIDJVTDsKKyAgICAgICAgICAgIHUzMk5SID0gKCh1MzJQbGxSZWcgJiBDTEtfUExMQ1RMX0lORElWX01zaykgPj4gQ0xLX1BMTENUTF9JTkRJVl9Qb3MpICsgMVVMOworCisgICAgICAgICAgICAvKiB1MzJGSU4gaXMgc2hpZnRlZCAyIGJpdHMgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgIFBsbENsb2NrID0gKCgodTMyRklOID4+IDIpICogKHUzMk5GIDw8IDEpKSAvICh1MzJOUiAqIHUzMk5PKSA8PCAyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEhDTEsgY2xvY2sgc291cmNlICovCisgICAgdTMySGNsa1NyYyA9IENMSy0+Q0xLU0VMMCAmIENMS19DTEtTRUwwX0hDTEtTRUxfTXNrOworCisgICAgaWYodTMySGNsa1NyYyA9PSBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0xYVCkKKyAgICB7CisKKyAgICAgICAgaWYodTMyUlRDQ0tFTiA9PSAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIENMSy0+QVBCQ0xLMCB8PSBDTEtfQVBCQ0xLMF9SVENDS0VOX01zazsgLyogRW5hYmxlIFJUQyBjbG9jayB0byBnZXQgTFhUIGNsb2NrIHNvdXJjZSAqLworICAgICAgICB9CisKKyAgICAgICAgaWYoUlRDLT5MWFRDVEwgJiBSVENfTFhUQ1RMX0MzMktTX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IF9fTElSQzMyOyAvKiBMWFQgY2xvY2sgc291cmNlIGlzIExJUkMzMiAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IF9fTFhUOyAgICAvKiBMWFQgY2xvY2sgc291cmNlIGlzIGV4dGVybmFsIExYVCAqLworICAgICAgICB9CisKKyAgICAgICAgaWYodTMyUlRDQ0tFTiA9PSAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIENMSy0+QVBCQ0xLMCAmPSAofkNMS19BUEJDTEswX1JUQ0NLRU5fTXNrKTsgLyogRGlzYWJsZSBSVEMgY2xvY2sgaWYgaXQgaXMgZGlzYWJsZWQgYmVmb3JlICovCisgICAgICAgIH0KKworICAgIH0KKyAgICBlbHNlIGlmKHUzMkhjbGtTcmMgPT0gQ0xLX0NMS1NFTDBfSENMS1NFTF9QTEwpCisgICAgeworICAgICAgICB1MzJGcmVxID0gUGxsQ2xvY2s7LyogVXNlIFBMTCBjbG9jayAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJGcmVxID0gYXUzMkNsa1RibFt1MzJIY2xrU3JjXTsgLyogVXNlIHRoZSBjbG9jayBzb3VyY2VzIGRpcmVjdGx5ICovCisgICAgfQorCisgICAgLyogSENMSyBjbG9jayBzb3VyY2UgZGl2aWRlciAqLworICAgIHUzMkhjbGtEaXYgPSAoQ0xLLT5DTEtESVYwICYgQ0xLX0NMS0RJVjBfSENMS0RJVl9Nc2spICsgMVVMOworCisgICAgLyogVXBkYXRlIFN5c3RlbSBDb3JlIENsb2NrICovCisgICAgU3lzdGVtQ29yZUNsb2NrID0gdTMyRnJlcSAvIHUzMkhjbGtEaXY7CisKKyAgICAvKiBVcGRhdGUgQ3ljbGVzIHBlciBtaWNybyBzZWNvbmQgKi8KKyAgICBDeWNsZXNQZXJVcyA9IChTeXN0ZW1Db3JlQ2xvY2sgKyA1MDAwMDBVTCkgLyAxMDAwMDAwVUw7CisKKyAgICByZXR1cm4gU3lzdGVtQ29yZUNsb2NrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgSENMSyBmcmVxdWVuY3kKKyAgKiBAcGFyYW1baW5dICB1MzJIY2xrIGlzIEhDTEsgZnJlcXVlbmN5LgorICAqICAgICAgICAgICAgIFRoZSByYW5nZSBvZiB1MzJIY2xrIGlzIDI0IE1IeiB+IDY0IE1IeiBpZiBwb3dlciBsZXZlbCBpcyBQTDAuCisgICogICAgICAgICAgICAgVGhlIHJhbmdlIG9mIHUzMkhjbGsgaXMgMjQgTUh6IH4gNDggTUh6IGlmIHBvd2VyIGxldmVsIGlzIFBMMS4KKyAgKiBAcmV0dXJuICAgICBIQ0xLIGZyZXF1ZW5jeQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgSENMSyBmcmVxdWVuY3kuIFRoZSBmcmVxdWVuY3kgdW5pdCBpcyBIei4gXG4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit1aW50MzJfdCBDTEtfU2V0Q29yZUNsb2NrKHVpbnQzMl90IHUzMkhjbGspCit7CisgICAgdWludDMyX3QgdTMySElSQ1NUQiwgdTMyUExTVEFUVVM7CisKKyAgICAvKiBSZWFkIEhJUkMgY2xvY2sgc291cmNlIHN0YWJsZSBmbGFnICovCisgICAgdTMySElSQ1NUQiA9IENMSy0+U1RBVFVTICYgQ0xLX1NUQVRVU19ISVJDU1RCX01zazsKKworICAgIC8qIFJlYWQgcG93ZXIgbGV2ZWwgc3RhdHVzICovCisgICAgdTMyUExTVEFUVVMgPSBTWVMtPlBMU1RTICYgU1lTX1BMU1RTX1BMU1RBVFVTX01zazsKKworICAgIC8qIENoZWNrIEhDTEsgZnJlcXVlbmN5IHJhbmdlICovCisgICAgaWYoKHUzMlBMU1RBVFVTID09IFNZU19QTFNUU19QTFNUQVRVU19QTDApICYmICh1MzJIY2xrID4gRlJFUV82NE1IWikpCisgICAgeworICAgICAgICB1MzJIY2xrID0gRlJFUV82NE1IWjsKKyAgICB9CisgICAgZWxzZSBpZigodTMyUExTVEFUVVMgPT0gU1lTX1BMU1RTX1BMU1RBVFVTX1BMMSkgJiYgKHUzMkhjbGsgPiBGUkVRXzQ4TUhaKSkKKyAgICB7CisgICAgICAgIHUzMkhjbGsgPSBGUkVRXzQ4TUhaOworICAgIH0KKyAgICBlbHNlIGlmKHUzMkhjbGsgPCBGUkVRXzI0TUhaKQorICAgIHsKKyAgICAgICAgdTMySGNsayA9IEZSRVFfMjRNSFo7CisgICAgfQorCisgICAgLyogU3dpdGNoIEhDTEsgY2xvY2sgc291cmNlIHRvIEhJUkMgY2xvY2sgZm9yIHNhZmUgKi8KKyAgICBDTEstPlBXUkNUTCB8PSBDTEtfUFdSQ1RMX0hJUkNFTl9Nc2s7CisgICAgQ0xLX1dhaXRDbG9ja1JlYWR5KENMS19TVEFUVVNfSElSQ1NUQl9Nc2spOworICAgIENMSy0+Q0xLU0VMMCB8PSBDTEtfQ0xLU0VMMF9IQ0xLU0VMX01zazsKKyAgICBDTEstPkNMS0RJVjAgJj0gKH5DTEtfQ0xLRElWMF9IQ0xLRElWX01zayk7CisKKyAgICAvKiBFbmFibGUgRmxhc2ggYWNjZXNzIGN5Y2xlIGF1dG8tdHVuaW5nIGZ1bmN0aW9uICovCisgICAgRk1DLT5DWUNDVEwgJj0gKH5GTUNfQ1lDQ1RMX0ZBRElTX01zayk7CisKKyAgICAvKiBDb25maWd1cmUgUExMIHNldHRpbmcgaWYgSFhUIGNsb2NrIGlzIHN0YWJsZSAqLworICAgIGlmKENMSy0+U1RBVFVTICYgQ0xLX1NUQVRVU19IWFRTVEJfTXNrKQorICAgIHsKKyAgICAgICAgdTMySGNsayA9IENMS19FbmFibGVQTEwoQ0xLX1BMTENUTF9QTExTUkNfSFhULCB1MzJIY2xrKTsKKyAgICB9CisgICAgLyogQ29uZmlndXJlIFBMTCBzZXR0aW5nIGlmIEhYVCBjbG9jayBpcyBub3Qgc3RhYmxlICovCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMySGNsayA9IENMS19FbmFibGVQTEwoQ0xLX1BMTENUTF9QTExTUkNfSElSQywgdTMySGNsayk7CisKKyAgICAgICAgLyogUmVhZCBISVJDIGNsb2NrIHNvdXJjZSBzdGFibGUgZmxhZyAqLworICAgICAgICB1MzJISVJDU1RCID0gQ0xLLT5TVEFUVVMgJiBDTEtfU1RBVFVTX0hJUkNTVEJfTXNrOworICAgIH0KKworICAgIC8qIFNlbGVjdCBIQ0xLIGNsb2NrIHNvdXJjZSB0byBQTEwsCisgICAgICAgU2VsZWN0IEhDTEsgY2xvY2sgc291cmNlIGRpdmlkZXIgYXMgMQorICAgICAgIGFuZCB1cGRhdGUgc3lzdGVtIGNvcmUgY2xvY2sKKyAgICAqLworICAgIENMS19TZXRIQ0xLKENMS19DTEtTRUwwX0hDTEtTRUxfUExMLCBDTEtfQ0xLRElWMF9IQ0xLKDFVTCkpOworCisgICAgLyogRGlzYWJsZSBISVJDIGlmIEhJUkMgaXMgZGlzYWJsZWQgYmVmb3JlIHNldHRpbmcgY29yZSBjbG9jayAqLworICAgIGlmKHUzMkhJUkNTVEIgPT0gMFVMKQorICAgIHsKKyAgICAgICAgQ0xLLT5QV1JDVEwgJj0gfkNMS19QV1JDVExfSElSQ0VOX01zazsKKyAgICB9CisKKyAgICAvKiBSZXR1cm4gYWN0dWFsbHkgSENMSyBmcmVxdWVuY3kgaXMgUExMIGZyZXF1ZW5jeSBkaXZpZGUgMSAqLworICAgIHJldHVybiB1MzJIY2xrOworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBIQ0xLIGNsb2NrIHNvdXJjZSBhbmQgSENMSyBjbG9jayBkaXZpZGVyCisgICogQHBhcmFtW2luXSAgdTMyQ2xrU3JjIGlzIEhDTEsgY2xvY2sgc291cmNlLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0hYVAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0xYVAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9IQ0xLU0VMX1BMTAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0xJUkMKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfSENMS1NFTF9ISVJDNDgKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfSENMS1NFTF9ISVJDCisgICogQHBhcmFtW2luXSAgdTMyQ2xrRGl2IGlzIEhDTEsgY2xvY2sgZGl2aWRlci4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS0RJVjBfSENMSyh4KQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHNldCBIQ0xLIGNsb2NrIHNvdXJjZSBhbmQgSENMSyBjbG9jayBkaXZpZGVyLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgQ0xLX1NldEhDTEsodWludDMyX3QgdTMyQ2xrU3JjLCB1aW50MzJfdCB1MzJDbGtEaXYpCit7CisgICAgdWludDMyX3QgdTMySElSQ1NUQjsKKworICAgIC8qIFJlYWQgSElSQyBjbG9jayBzb3VyY2Ugc3RhYmxlIGZsYWcgKi8KKyAgICB1MzJISVJDU1RCID0gQ0xLLT5TVEFUVVMgJiBDTEtfU1RBVFVTX0hJUkNTVEJfTXNrOworCisgICAgLyogU3dpdGNoIHRvIEhJUkMgZm9yIFNhZmUuIEF2b2lkIEhDTEsgdG9vIGhpZ2ggd2hlbiBhcHBseWluZyBuZXcgZGl2aWRlci4gKi8KKyAgICBDTEstPlBXUkNUTCB8PSBDTEtfUFdSQ1RMX0hJUkNFTl9Nc2s7CisgICAgQ0xLX1dhaXRDbG9ja1JlYWR5KENMS19TVEFUVVNfSElSQ1NUQl9Nc2spOworICAgIENMSy0+Q0xLU0VMMCA9IChDTEstPkNMS1NFTDAgJiAofkNMS19DTEtTRUwwX0hDTEtTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0hJUkM7CisKKyAgICAvKiBFbmFibGUgRmxhc2ggYWNjZXNzIGN5Y2xlIGF1dG8tdHVuaW5nIGZ1bmN0aW9uICovCisgICAgRk1DLT5DWUNDVEwgJj0gKH5GTUNfQ1lDQ1RMX0ZBRElTX01zayk7CisKKyAgICAvKiBBcHBseSBuZXcgRGl2aWRlciAqLworICAgIENMSy0+Q0xLRElWMCA9IChDTEstPkNMS0RJVjAgJiAofkNMS19DTEtESVYwX0hDTEtESVZfTXNrKSkgfCB1MzJDbGtEaXY7CisKKyAgICAvKiBEaXNhYmxlIEZsYXNoIGFjY2VzcyBjeWNsZSBhdXRvLXR1bmluZyBmdW5jdGlvbiBhbmQgc2V0IEZsYXNoIGFjY2VzcyBjeWNsZSBpZiBIQ0xLIHN3aXRjaGVzIHRvIEhJUkM0OCAqLworICAgIGlmKHUzMkNsa1NyYyA9PSBDTEtfQ0xLU0VMMF9IQ0xLU0VMX0hJUkM0OCkKKyAgICB7CisgICAgICAgIEZNQy0+Q1lDQ1RMID0gKEZNQy0+Q1lDQ1RMICYgKH5GTUNfQ1lDQ1RMX0NZQ0xFX01zaykpIHwgRk1DX0NZQ0NUTF9GQURJU19Nc2sgfCAoM1VMKTsKKyAgICB9CisKKyAgICAvKiBTd2l0Y2ggSENMSyB0byBuZXcgSENMSyBzb3VyY2UgKi8KKyAgICBDTEstPkNMS1NFTDAgPSAoQ0xLLT5DTEtTRUwwICYgKH5DTEtfQ0xLU0VMMF9IQ0xLU0VMX01zaykpIHwgdTMyQ2xrU3JjOworCisgICAgLyogVXBkYXRlIFN5c3RlbSBDb3JlIENsb2NrICovCisgICAgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCk7CisKKyAgICAvKiBEaXNhYmxlIEhJUkMgaWYgSElSQyBpcyBkaXNhYmxlZCBiZWZvcmUgc3dpdGNoaW5nIEhDTEsgc291cmNlICovCisgICAgaWYodTMySElSQ1NUQiA9PSAwVUwpCisgICAgeworICAgICAgICBDTEstPlBXUkNUTCAmPSB+Q0xLX1BXUkNUTF9ISVJDRU5fTXNrOworICAgIH0KK30KKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gc2V0IHNlbGVjdGVkIG1vZHVsZSBjbG9jayBzb3VyY2UgYW5kIG1vZHVsZSBjbG9jayBkaXZpZGVyCisgICogQHBhcmFtW2luXSAgdTMyTW9kdWxlSWR4IGlzIG1vZHVsZSBpbmRleC4KKyAgKiBAcGFyYW1baW5dICB1MzJDbGtTcmMgaXMgbW9kdWxlIGNsb2NrIHNvdXJjZS4KKyAgKiBAcGFyYW1baW5dICB1MzJDbGtEaXYgaXMgbW9kdWxlIGNsb2NrIGRpdmlkZXIuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFZhbGlkIHBhcmFtZXRlciBjb21iaW5hdGlvbnMgbGlzdGVkIGluIGZvbGxvd2luZyB0YWJsZToKKyAgKgorICAqIHxNb2R1bGUgaW5kZXggICAgICAgIHxDbG9jayBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgIHxEaXZpZGVyICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8IDotLS0tLS0tLS0tLS0tLS0tICB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8CisgICogfFxyZWYgU0RIMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDBfU0RIMFNFTF9IWFQgICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfU0RIMCh4KSAgfAorICAqIHxccmVmIFNESDBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwwX1NESDBTRUxfUExMICAgICAgICAgIHxccmVmIENMS19DTEtESVYwX1NESDAoeCkgIHwKKyAgKiB8XHJlZiBTREgwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMF9TREgwU0VMX0hDTEsgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9TREgwKHgpICB8CisgICogfFxyZWYgU0RIMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDBfU0RIMFNFTF9ISVJDICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfU0RIMCh4KSAgfAorICAqIHxccmVmIFdEVF9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwxX1dEVFNFTF9MWFQgICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBXRFRfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMMV9XRFRTRUxfSENMS19ESVYyMDQ4ICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgV0RUX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDFfV0RUU0VMX0xJUkMgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIEVBRENfTU9EVUxFICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxccmVmIENMS19DTEtESVYwX0VBREMoeCkgIHwKKyAgKiB8XHJlZiBUTVIwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIwU0VMX0hYVCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMFNFTF9MWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjBTRUxfUENMSzAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIwU0VMX0VYVF9UUkcgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMFNFTF9MSVJDICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjBTRUxfSElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIxX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIxU0VMX0hYVCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMV9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMVNFTF9MWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjFfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjFTRUxfUENMSzAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIxX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIxU0VMX0VYVF9UUkcgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMV9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMVNFTF9MSVJDICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjFfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjFTRUxfSElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIyX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIyU0VMX0hYVCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMl9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMlNFTF9MWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjJfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjJTRUxfUENMSzEgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIyX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIyU0VMX0VYVF9UUkcgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SMl9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SMlNFTF9MSVJDICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjJfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjJTRUxfSElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIzX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIzU0VMX0hYVCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SM19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SM1NFTF9MWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjNfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjNTRUxfUENMSzEgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBUTVIzX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9UTVIzU0VMX0VYVF9UUkcgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgVE1SM19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfVE1SM1NFTF9MSVJDICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFRNUjNfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1RNUjNTRUxfSElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBVQVJUMF9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMMV9VQVJUMFNFTF9IWFQgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9VQVJUMCh4KSB8CisgICogfFxyZWYgVUFSVDBfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDFfVUFSVDBTRUxfUExMICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVUFSVDAoeCkgfAorICAqIHxccmVmIFVBUlQwX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwxX1VBUlQwU0VMX0xYVCAgICAgICAgIHxccmVmIENMS19DTEtESVYwX1VBUlQwKHgpIHwKKyAgKiB8XHJlZiBVQVJUMF9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMMV9VQVJUMFNFTF9ISVJDICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9VQVJUMCh4KSB8CisgICogfFxyZWYgVUFSVDFfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDFfVUFSVDFTRUxfSFhUICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVUFSVDEoeCkgfAorICAqIHxccmVmIFVBUlQxX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwxX1VBUlQxU0VMX1BMTCAgICAgICAgIHxccmVmIENMS19DTEtESVYwX1VBUlQxKHgpIHwKKyAgKiB8XHJlZiBVQVJUMV9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMMV9VQVJUMVNFTF9MWFQgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9VQVJUMSh4KSB8CisgICogfFxyZWYgVUFSVDFfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDFfVUFSVDFTRUxfSElSQyAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVUFSVDEoeCkgfAorICAqIHxccmVmIFVBUlQyX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQyU0VMX0hYVCAgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQyKHgpIHwKKyAgKiB8XHJlZiBVQVJUMl9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUMlNFTF9QTEwgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUMih4KSB8CisgICogfFxyZWYgVUFSVDJfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDJTRUxfTFhUICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDIoeCkgfAorICAqIHxccmVmIFVBUlQyX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQyU0VMX0hJUkMgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQyKHgpIHwKKyAgKiB8XHJlZiBVQVJUM19NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUM1NFTF9IWFQgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUMyh4KSB8CisgICogfFxyZWYgVUFSVDNfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDNTRUxfUExMICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDMoeCkgfAorICAqIHxccmVmIFVBUlQzX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQzU0VMX0xYVCAgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQzKHgpIHwKKyAgKiB8XHJlZiBVQVJUM19NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUM1NFTF9ISVJDICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUMyh4KSB8CisgICogfFxyZWYgVUFSVDRfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDRTRUxfSFhUICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDQoeCkgfAorICAqIHxccmVmIFVBUlQ0X01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQ0U0VMX1BMTCAgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQ0KHgpIHwKKyAgKiB8XHJlZiBVQVJUNF9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUNFNFTF9MWFQgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUNCh4KSB8CisgICogfFxyZWYgVUFSVDRfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDRTRUxfSElSQyAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDQoeCkgfAorICAqIHxccmVmIFVBUlQ1X01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQ1U0VMX0hYVCAgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQ1KHgpIHwKKyAgKiB8XHJlZiBVQVJUNV9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMM19VQVJUNVNFTF9QTEwgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWNF9VQVJUNSh4KSB8CisgICogfFxyZWYgVUFSVDVfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDNfVUFSVDVTRUxfTFhUICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjRfVUFSVDUoeCkgfAorICAqIHxccmVmIFVBUlQ1X01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwzX1VBUlQ1U0VMX0hJUkMgICAgICAgIHxccmVmIENMS19DTEtESVY0X1VBUlQ1KHgpIHwKKyAgKiB8XHJlZiBDTEtPX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9DTEtPU0VMX0hYVCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgQ0xLT19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfQ0xLT1NFTF9MWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIENMS09fTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX0NMS09TRUxfSENMSyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBDTEtPX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMV9DTEtPU0VMX0hJUkMgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgV1dEVF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDFfV1dEVFNFTF9IQ0xLX0RJVjIwNDggfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFdXRFRfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwxX1dXRFRTRUxfTElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBSVENfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMM19SVENTRUxfTFhUICAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgUlRDX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfUlRDU0VMX0xJUkMgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIEkyUzBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwzX0kyUzBTRUxfSFhUICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBJMlMwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMM19JMlMwU0VMX1BMTCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgSTJTMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDNfSTJTMFNFTF9QQ0xLMCAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIEkyUzBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwzX0kyUzBTRUxfSElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBRU1BJMF9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9IWFQgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgUVNQSTBfTU9EVUxFICAgfFxyZWYgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUExMICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFFTUEkwX01PRFVMRSAgIHxccmVmIENMS19DTEtTRUwyX1FTUEkwU0VMX1BDTEswICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBRU1BJMF9NT0RVTEUgICB8XHJlZiBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9ISVJDICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJMFNFTF9IWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTBfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTBTRUxfUExMICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkwX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BDTEsxICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJMF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJMFNFTF9ISVJDICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTFfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTFTRUxfSFhUICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkxX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BMTCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJMV9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJMVNFTF9QQ0xLMCAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTFfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTFTRUxfSElSQyAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkyX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkyU0VMX0hYVCAgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJMl9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJMlNFTF9QTEwgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTJfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTJTRUxfUENMSzEgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkyX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkyU0VMX0hJUkMgICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJM19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJM1NFTF9IWFQgICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNQSTNfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwyX1NQSTNTRUxfUExMICAgICAgICAgIHwgeCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKiB8XHJlZiBTUEkzX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BDTEswICAgICAgICB8IHggICAgICAgICAgICAgICAgICAgICAgICB8CisgICogfFxyZWYgU1BJM19NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDJfU1BJM1NFTF9ISVJDICAgICAgICAgfCB4ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAqIHxccmVmIFNDMF9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwzX1NDMFNFTF9IWFQgICAgICAgICAgIHxccmVmIENMS19DTEtESVYxX1NDMCh4KSAgIHwKKyAgKiB8XHJlZiBTQzBfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMM19TQzBTRUxfUExMICAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMV9TQzAoeCkgICB8CisgICogfFxyZWYgU0MwX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfU0MwU0VMX1BDTEswICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjFfU0MwKHgpICAgfAorICAqIHxccmVmIFNDMF9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwzX1NDMFNFTF9ISVJDICAgICAgICAgIHxccmVmIENMS19DTEtESVYxX1NDMCh4KSAgIHwKKyAgKiB8XHJlZiBTQzFfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMM19TQzFTRUxfSFhUICAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMV9TQzEoeCkgICB8CisgICogfFxyZWYgU0MxX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfU0MxU0VMX1BMTCAgICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjFfU0MxKHgpICAgfAorICAqIHxccmVmIFNDMV9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwzX1NDMVNFTF9QQ0xLMSAgICAgICAgIHxccmVmIENMS19DTEtESVYxX1NDMSh4KSAgIHwKKyAgKiB8XHJlZiBTQzFfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMM19TQzFTRUxfSElSQyAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMV9TQzEoeCkgICB8CisgICogfFxyZWYgU0MyX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfU0MyU0VMX0hYVCAgICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjFfU0MyKHgpICAgfAorICAqIHxccmVmIFNDMl9NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwzX1NDMlNFTF9QTEwgICAgICAgICAgIHxccmVmIENMS19DTEtESVYxX1NDMih4KSAgIHwKKyAgKiB8XHJlZiBTQzJfTU9EVUxFICAgICB8XHJlZiBDTEtfQ0xLU0VMM19TQzJTRUxfUENMSzAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMV9TQzIoeCkgICB8CisgICogfFxyZWYgU0MyX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDNfU0MyU0VMX0hJUkMgICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjFfU0MyKHgpICAgfAorICAqIHxccmVmIFVTQkhfTU9EVUxFICAgIHxccmVmIENMS19DTEtTRUwwX1VTQlNFTF9ISVJDNDggICAgICAgIHxccmVmIENMS19DTEtESVYwX1VTQih4KSAgIHwKKyAgKiB8XHJlZiBVU0JIX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMF9VU0JTRUxfUExMICAgICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9VU0IoeCkgICB8CisgICogfFxyZWYgT1RHX01PRFVMRSAgICAgfFxyZWYgQ0xLX0NMS1NFTDBfVVNCU0VMX0hJUkM0OCAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVVNCKHgpICAgfAorICAqIHxccmVmIE9UR19NT0RVTEUgICAgIHxccmVmIENMS19DTEtTRUwwX1VTQlNFTF9QTEwgICAgICAgICAgIHxccmVmIENMS19DTEtESVYwX1VTQih4KSAgIHwKKyAgKiB8XHJlZiBVU0JEX01PRFVMRSAgICB8XHJlZiBDTEtfQ0xLU0VMMF9VU0JTRUxfSElSQzQ4ICAgICAgICB8XHJlZiBDTEtfQ0xLRElWMF9VU0IoeCkgICB8CisgICogfFxyZWYgVVNCRF9NT0RVTEUgICAgfFxyZWYgQ0xLX0NMS1NFTDBfVVNCU0VMX1BMTCAgICAgICAgICAgfFxyZWYgQ0xLX0NMS0RJVjBfVVNCKHgpICAgfAorICAqLwordm9pZCBDTEtfU2V0TW9kdWxlQ2xvY2sodWludDMyX3QgdTMyTW9kdWxlSWR4LCB1aW50MzJfdCB1MzJDbGtTcmMsIHVpbnQzMl90IHUzMkNsa0RpdikKK3sKKyAgICB1aW50MzJfdCB1MzJTZWwgPSAwVUwsIHUzMkRpdiA9IDBVTDsKKyAgICB1aW50MzJfdCBhdTMyU2VsVGJsWzRdID0gezB4MFVMLCAweDRVTCwgMHg4VUwsIDB4Q1VMfTsKKyAgICB1aW50MzJfdCBhdTMyRGl2VGJsWzRdID0gezB4MFVMLCAweDRVTCwgMHg4VUwsIDB4MTBVTH07CisKKyAgICBpZihNT0RVTEVfQ0xLRElWX01zayh1MzJNb2R1bGVJZHgpICE9IE1PRFVMRV9Ob01zaykKKyAgICB7CisgICAgICAgIC8qIEdldCBjbG9jayBkaXZpZGVyIGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyAqLworICAgICAgICB1MzJEaXYgPSAodWludDMyX3QpJkNMSy0+Q0xLRElWMCArIChhdTMyRGl2VGJsW01PRFVMRV9DTEtESVYodTMyTW9kdWxlSWR4KV0pOworICAgICAgICAvKiBBcHBseSBuZXcgZGl2aWRlciAqLworICAgICAgICBNMzIodTMyRGl2KSA9IChNMzIodTMyRGl2KSAmICh+KE1PRFVMRV9DTEtESVZfTXNrKHUzMk1vZHVsZUlkeCkgPDwgTU9EVUxFX0NMS0RJVl9Qb3ModTMyTW9kdWxlSWR4KSkpKSB8IHUzMkNsa0RpdjsKKyAgICB9CisKKyAgICBpZihNT0RVTEVfQ0xLU0VMX01zayh1MzJNb2R1bGVJZHgpICE9IE1PRFVMRV9Ob01zaykKKyAgICB7CisgICAgICAgIC8qIEdldCBjbG9jayBzZWxlY3QgY29udHJvbCByZWdpc3RlciBhZGRyZXNzICovCisgICAgICAgIHUzMlNlbCA9ICh1aW50MzJfdCkmQ0xLLT5DTEtTRUwwICsgKGF1MzJTZWxUYmxbTU9EVUxFX0NMS1NFTCh1MzJNb2R1bGVJZHgpXSk7CisgICAgICAgIC8qIFNldCBuZXcgY2xvY2sgc2VsZWN0aW9uIHNldHRpbmcgKi8KKyAgICAgICAgTTMyKHUzMlNlbCkgPSAoTTMyKHUzMlNlbCkgJiAofihNT0RVTEVfQ0xLU0VMX01zayh1MzJNb2R1bGVJZHgpIDw8IE1PRFVMRV9DTEtTRUxfUG9zKHUzMk1vZHVsZUlkeCkpKSkgfCB1MzJDbGtTcmM7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgU3lzVGljayBjbG9jayBzb3VyY2UKKyAgKiBAcGFyYW1baW5dICB1MzJDbGtTcmMgaXMgbW9kdWxlIGNsb2NrIHNvdXJjZS4gSW5jbHVkaW5nOgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9TVENMS1NFTF9IWFQKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfTFhUCisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hYVF9ESVYyCisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hDTEtfRElWMgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9TVENMS1NFTF9ISVJDX0RJVjIKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBzZXQgU3lzVGljayBjbG9jayBzb3VyY2UuIFxuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBDTEtfU2V0U3lzVGlja0Nsb2NrU3JjKHVpbnQzMl90IHUzMkNsa1NyYykKK3sKKyAgICBDTEstPkNMS1NFTDAgPSAoQ0xLLT5DTEtTRUwwICYgfkNMS19DTEtTRUwwX1NUQ0xLU0VMX01zaykgfCB1MzJDbGtTcmM7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBjbG9jayBzb3VyY2UKKyAgKiBAcGFyYW1baW5dICB1MzJDbGtNYXNrIGlzIGNsb2NrIHNvdXJjZSBtYXNrLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUFdSQ1RMX0hYVEVOX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUFdSQ1RMX0xYVEVOX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUFdSQ1RMX0hJUkNFTl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BXUkNUTF9MSVJDRU5fTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19QV1JDVExfSElSQzQ4RU5fTXNrCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlIGNsb2NrIHNvdXJjZS4gXG4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIENMS19FbmFibGVYdGFsUkModWludDMyX3QgdTMyQ2xrTWFzaykKK3sKKyAgICBDTEstPlBXUkNUTCB8PSB1MzJDbGtNYXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIGNsb2NrIHNvdXJjZQorICAqIEBwYXJhbVtpbl0gIHUzMkNsa01hc2sgaXMgY2xvY2sgc291cmNlIG1hc2suIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIENMS19QV1JDVExfSFhURU5fTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19QV1JDVExfTFhURU5fTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19QV1JDVExfSElSQ0VOX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUFdSQ1RMX0xJUkNFTl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BXUkNUTF9ISVJDNDhFTl9Nc2sKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIGNsb2NrIHNvdXJjZS4gXG4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIENMS19EaXNhYmxlWHRhbFJDKHVpbnQzMl90IHUzMkNsa01hc2spCit7CisgICAgQ0xLLT5QV1JDVEwgJj0gfnUzMkNsa01hc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlIG1vZHVsZSBjbG9jaworICAqIEBwYXJhbVtpbl0gIHUzMk1vZHVsZUlkeCBpcyBtb2R1bGUgaW5kZXguIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIFBETUEwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBQRE1BMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgSVNQX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBFQklfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNESDBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIENSQ19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ1JQVF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRk1DSURMRV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVVNCSF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgV0RUX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBXV0RUX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBSVENfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFRNUjBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFRNUjFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFRNUjJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFRNUjNfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIENMS09fTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEFDTVAwMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgSTJDMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgSTJDMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgSTJDMl9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUVNQSTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNQSTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNQSTFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNQSTJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNQSTNfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQzX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUNF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDVfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIENBTjBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIE9UR19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVVNCRF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRUFEQ19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgSTJTMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNDMl9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVVNDSTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQ0kxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBEQUNfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVQV00wX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBFUFdNMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQlBXTTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEJQV00xX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBRRUkwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBRRUkxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBRRUkwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBUUk5HX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBFQ0FQMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRUNBUDFfTU9EVUxFCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlIG1vZHVsZSBjbG9jay4KKyAgKi8KK3ZvaWQgQ0xLX0VuYWJsZU1vZHVsZUNsb2NrKHVpbnQzMl90IHUzMk1vZHVsZUlkeCkKK3sKKyAgICB1aW50MzJfdCB1MzJUbXBWYWwgPSAwVUwsIHUzMlRtcEFkZHIgPSAwVUw7CisKKyAgICB1MzJUbXBWYWwgPSAoMVVMIDw8IE1PRFVMRV9JUF9FTl9Qb3ModTMyTW9kdWxlSWR4KSk7CisgICAgdTMyVG1wQWRkciA9ICh1aW50MzJfdCkmQ0xLLT5BSEJDTEs7CisgICAgdTMyVG1wQWRkciArPSAoKE1PRFVMRV9BUEJDTEsodTMyTW9kdWxlSWR4KSAqIDRVTCkpOworCisgICAgKih2b2xhdGlsZSB1aW50MzJfdCAqKXUzMlRtcEFkZHIgfD0gdTMyVG1wVmFsOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGUgbW9kdWxlIGNsb2NrCisgICogQHBhcmFtW2luXSAgdTMyTW9kdWxlSWR4IGlzIG1vZHVsZSBpbmRleAorICAqICAgICAgICAgICAgIC0gXHJlZiBQRE1BMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUERNQTFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIElTUF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRUJJX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTREgwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBDUkNfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIENSUFRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEZNQ0lETEVfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQkhfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFdEVF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgV1dEVF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUlRDX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIzX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtPX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBBQ01QMDFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEkyQzBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEkyQzFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEkyQzJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFFTUEkwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkzX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQyX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUM19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQ1X01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBDQU4wX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBPVEdfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQkRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVBRENfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEkyUzBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNDMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MxX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQ0kwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0NJMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgREFDX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBFUFdNMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRVBXTTFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEJQV00wX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBCUFdNMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUUVJMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUUVJMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUUVJMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVFJOR19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRUNBUDBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVDQVAxX01PRFVMRQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGUgbW9kdWxlIGNsb2NrLgorICAqLwordm9pZCBDTEtfRGlzYWJsZU1vZHVsZUNsb2NrKHVpbnQzMl90IHUzMk1vZHVsZUlkeCkKK3sKKyAgICB1aW50MzJfdCB1MzJUbXBWYWwgPSAwVUwsIHUzMlRtcEFkZHIgPSAwVUw7CisKKyAgICB1MzJUbXBWYWwgPSB+KDFVTCA8PCBNT0RVTEVfSVBfRU5fUG9zKHUzMk1vZHVsZUlkeCkpOworICAgIHUzMlRtcEFkZHIgPSAodWludDMyX3QpJkNMSy0+QUhCQ0xLOworICAgIHUzMlRtcEFkZHIgKz0gKChNT0RVTEVfQVBCQ0xLKHUzMk1vZHVsZUlkeCkgKiA0VUwpKTsKKworICAgICoodWludDMyX3QgKil1MzJUbXBBZGRyICY9IHUzMlRtcFZhbDsKK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgUExMIGZyZXF1ZW5jeQorICAqIEBwYXJhbVtpbl0gIHUzMlBsbENsa1NyYyBpcyBQTEwgY2xvY2sgc291cmNlLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUExMQ1RMX1BMTFNSQ19IWFQKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BMTENUTF9QTExTUkNfSElSQworICAqIEBwYXJhbVtpbl0gIHUzMlBsbEZyZXEgaXMgUExMIGZyZXF1ZW5jeS4gVGhlIHJhbmdlIG9mIHUzMlBsbEZyZXEgaXMgMjQgTUh6IH4gMTQ0IE1Iei4KKyAgKiBAcmV0dXJuICAgICBQTEwgZnJlcXVlbmN5CisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBQTExDVEwgcmVnaXN0ZXIgdG8gc2V0IHNwZWNpZmllZCBQTEwgZnJlcXVlbmN5LiBcbgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3VpbnQzMl90IENMS19FbmFibGVQTEwodWludDMyX3QgdTMyUGxsQ2xrU3JjLCB1aW50MzJfdCB1MzJQbGxGcmVxKQoreworICAgIHVpbnQzMl90IHUzMlBsbFNyY0NsaywgdTMyTlIsIHUzMk5GLCB1MzJOTywgdTMyUGxsQ2xrOworICAgIHVpbnQzMl90IHUzMlRtcCwgdTMyVG1wMiwgdTMyVG1wMywgdTMyTWluLCB1MzJNaW5ORiwgdTMyTWluTlI7CisKKyAgICAvKiBEaXNhYmxlIFBMTCBmaXJzdCB0byBhdm9pZCB1bnN0YWJsZSB3aGVuIHNldHRpbmcgUExMICovCisgICAgQ0xLX0Rpc2FibGVQTEwoKTsKKworICAgIC8qIFBMTCBzb3VyY2UgY2xvY2sgaXMgZnJvbSBIWFQgKi8KKyAgICBpZih1MzJQbGxDbGtTcmMgPT0gQ0xLX1BMTENUTF9QTExTUkNfSFhUKQorICAgIHsKKworICAgICAgICAvKiBFbmFibGUgSFhUIGNsb2NrICovCisgICAgICAgIENMSy0+UFdSQ1RMIHw9IENMS19QV1JDVExfSFhURU5fTXNrOworCisgICAgICAgIC8qIFdhaXQgZm9yIEhYVCBjbG9jayByZWFkeSAqLworICAgICAgICBDTEtfV2FpdENsb2NrUmVhZHkoQ0xLX1NUQVRVU19IWFRTVEJfTXNrKTsKKworICAgICAgICAvKiBTZWxlY3QgUExMIHNvdXJjZSBjbG9jayBmcm9tIEhYVCAqLworICAgICAgICB1MzJQbGxTcmNDbGsgPSBfX0hYVDsKKyAgICB9CisKKyAgICAvKiBQTEwgc291cmNlIGNsb2NrIGlzIGZyb20gSElSQyAqLworICAgIGVsc2UKKyAgICB7CisKKyAgICAgICAgLyogRW5hYmxlIEhJUkMgY2xvY2sgKi8KKyAgICAgICAgQ0xLLT5QV1JDVEwgfD0gQ0xLX1BXUkNUTF9ISVJDRU5fTXNrOworCisgICAgICAgIC8qIFdhaXQgZm9yIEhJUkMgY2xvY2sgcmVhZHkgKi8KKyAgICAgICAgQ0xLX1dhaXRDbG9ja1JlYWR5KENMS19TVEFUVVNfSElSQ1NUQl9Nc2spOworCisgICAgICAgIC8qIFNlbGVjdCBQTEwgc291cmNlIGNsb2NrIGZyb20gSElSQyAqLworICAgICAgICB1MzJQbGxTcmNDbGsgPSBfX0hJUkM7CisgICAgfQorCisgICAgLyogQ2hlY2sgUExMIGZyZXF1ZW5jeSByYW5nZSAqLworICAgIGlmKCh1MzJQbGxGcmVxIDw9IEZSRVFfMTQ0TUhaKSAmJiAodTMyUGxsRnJlcSA+PSBGUkVRXzI0TUhaKSkKKyAgICB7CisKKyAgICAgICAgLyogU2VsZWN0ICJOTyIgYWNjb3JkaW5nIHRvIHJlcXVlc3QgZnJlcXVlbmN5ICovCisgICAgICAgIGlmKCh1MzJQbGxGcmVxIDwgRlJFUV80OE1IWikgJiYgKHUzMlBsbEZyZXEgPj0gRlJFUV8yNE1IWikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMk5PID0gM1VMOworICAgICAgICAgICAgdTMyUGxsRnJlcSA9IHUzMlBsbEZyZXEgPDwgMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCh1MzJQbGxGcmVxIDwgRlJFUV85Nk1IWikgJiYgKHUzMlBsbEZyZXEgPj0gRlJFUV80OE1IWikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMk5PID0gMVVMOworICAgICAgICAgICAgdTMyUGxsRnJlcSA9IHUzMlBsbEZyZXEgPDwgMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMk5PID0gMFVMOworICAgICAgICB9CisKKyAgICAgICAgLyogdTMyTlIgc3RhcnQgZnJvbSAzIHRvIGF2b2lkIGNhbGN1bGF0aW9uIG92ZXJmbG93ICovCisgICAgICAgIHUzMk5SID0gM1VMOworCisgICAgICAgIC8qIEZpbmQgYmVzdCBzb2x1dGlvbiAqLworICAgICAgICB1MzJNaW4gPSAodWludDMyX3QpIC0gMTsKKyAgICAgICAgdTMyTWluTlIgPSAwVUw7CisgICAgICAgIHUzMk1pbk5GID0gMFVMOworCisgICAgICAgIGZvcig7IHUzMk5SIDw9IDMyVUw7IHUzMk5SKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlRtcCA9IHUzMlBsbFNyY0NsayAvIHUzMk5SOworICAgICAgICAgICAgaWYoKHUzMlRtcCA+PSBGUkVRXzJNSFopICYmICh1MzJUbXAgPD0gRlJFUV84TUhaKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IodTMyTkYgPSAyVUw7IHUzMk5GIDw9IDUxM1VMOyB1MzJORisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyVG1wMiA9ICh1MzJUbXAgKiB1MzJORikgPDwgMTsKKyAgICAgICAgICAgICAgICAgICAgaWYoKHUzMlRtcDIgPj0gRlJFUV85Nk1IWikgJiYgKHUzMlRtcDIgPD0gRlJFUV8yMDBNSFopKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1MzJUbXAzID0gKHUzMlRtcDIgPiB1MzJQbGxGcmVxKSA/IHUzMlRtcDIgLSB1MzJQbGxGcmVxIDogdTMyUGxsRnJlcSAtIHUzMlRtcDI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih1MzJUbXAzIDwgdTMyTWluKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMk1pbiA9IHUzMlRtcDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyTWluTlIgPSB1MzJOUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzJNaW5ORiA9IHUzMk5GOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnJlYWsgd2hlbiBnZXQgZ29vZCByZXN1bHRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodTMyTWluID09IDBVTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIEVuYWJsZSBhbmQgYXBwbHkgbmV3IFBMTCBzZXR0aW5nLiAqLworICAgICAgICBDTEstPlBMTENUTCA9IHUzMlBsbENsa1NyYyB8ICh1MzJOTyA8PCAxNCkgfCAoKHUzMk1pbk5SIC0gMVVMKSA8PCA5KSB8ICh1MzJNaW5ORiAtIDJVTCk7CisKKyAgICAgICAgLyogQWN0dWFsIFBMTCBvdXRwdXQgY2xvY2sgZnJlcXVlbmN5ICovCisgICAgICAgIHUzMlBsbENsayA9IHUzMlBsbFNyY0NsayAvICgodTMyTk8gKyAxVUwpICogdTMyTWluTlIpICogKHUzMk1pbk5GIDw8IDEpOworCisgICAgfQorICAgIGVsc2UKKyAgICB7CisKKyAgICAgICAgLyogV3JvbmcgZnJlcXVlbmN5IHJlcXVlc3QuIEp1c3QgcmV0dXJuIGRlZmF1bHQgc2V0dGluZy4gKi8KKyAgICAgICAgaWYoKFNZUy0+UExTVFMgJiBTWVNfUExTVFNfUExTVEFUVVNfTXNrKSA9PSBTWVNfUExDVExfUExTRUxfUEwwKQorICAgICAgICB7CisKKyAgICAgICAgICAgIC8qIEFwcGx5IGRlZmF1bHQgUExMIHNldHRpbmcgYW5kIHJldHVybiAqLworICAgICAgICAgICAgQ0xLLT5QTExDVEwgPSB1MzJQbGxDbGtTcmMgfCBDTEtfUExMQ1RMXzY0TUh6X0hYVDsKKworICAgICAgICAgICAgLyogQWN0dWFsIFBMTCBvdXRwdXQgY2xvY2sgZnJlcXVlbmN5ICovCisgICAgICAgICAgICB1MzJQbGxDbGsgPSBGUkVRXzY0TUhaOworCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisKKyAgICAgICAgICAgIC8qIEFwcGx5IGRlZmF1bHQgUExMIHNldHRpbmcgYW5kIHJldHVybiAqLworICAgICAgICAgICAgQ0xLLT5QTExDVEwgPSB1MzJQbGxDbGtTcmMgfCBDTEtfUExMQ1RMXzQ4TUh6X0hYVDsKKworICAgICAgICAgICAgLyogQWN0dWFsIFBMTCBvdXRwdXQgY2xvY2sgZnJlcXVlbmN5ICovCisgICAgICAgICAgICB1MzJQbGxDbGsgPSBGUkVRXzQ4TUhaOworICAgICAgICB9CisKKyAgICB9CisKKyAgICAvKiBXYWl0IGZvciBQTEwgY2xvY2sgc3RhYmxlICovCisgICAgQ0xLX1dhaXRDbG9ja1JlYWR5KENMS19TVEFUVVNfUExMU1RCX01zayk7CisKKyAgICAvKiBSZXR1cm4gYWN0dWFsIFBMTCBvdXRwdXQgY2xvY2sgZnJlcXVlbmN5ICovCisgICAgcmV0dXJuIHUzMlBsbENsazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBQTEwKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gc2V0IFBMTCBpbiBQb3dlci1kb3duIG1vZGUuIFxuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBDTEtfRGlzYWJsZVBMTCh2b2lkKQoreworICAgIENMSy0+UExMQ1RMIHw9IENMS19QTExDVExfUERfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrIHNlbGVjdGVkIGNsb2NrIHNvdXJjZSBzdGF0dXMKKyAgKiBAcGFyYW1baW5dICB1MzJDbGtNYXNrIGlzIHNlbGVjdGVkIGNsb2NrIHNvdXJjZS4gSW5jbHVkaW5nIDoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NUQVRVU19IWFRTVEJfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19TVEFUVVNfTFhUU1RCX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1RBVFVTX0hJUkNTVEJfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19TVEFUVVNfTElSQ1NUQl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NUQVRVU19QTExTVEJfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIENMS19TVEFUVVNfSElSQzQ4U1RCX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1RBVFVTX0VYVExYVFNUQl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NUQVRVU19MSVJDMzJTVEJfTXNrCisgICogQHJldHZhbCAgICAgMCAgY2xvY2sgaXMgbm90IHN0YWJsZQorICAqIEByZXR2YWwgICAgIDEgIGNsb2NrIGlzIHN0YWJsZQorICAqIEBkZXRhaWxzICAgIFRvIHdhaXQgZm9yIGNsb2NrIHJlYWR5IGJ5IHNwZWNpZmllZCBjbG9jayBzb3VyY2Ugc3RhYmxlIGZsYWcgb3IgdGltZW91dCAofjMwMG1zKQorICAqLwordWludDMyX3QgQ0xLX1dhaXRDbG9ja1JlYWR5KHVpbnQzMl90IHUzMkNsa01hc2spCit7CisgICAgaW50MzJfdCBpMzJUaW1lT3V0Q250ID0gMjQwMDAwMDsKKyAgICB1aW50MzJfdCB1MzJSZXQgPSAxVTsKKworICAgIHdoaWxlKChDTEstPlNUQVRVUyAmIHUzMkNsa01hc2spICE9IHUzMkNsa01hc2spCisgICAgeworICAgICAgICBpZihpMzJUaW1lT3V0Q250LS0gPD0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyUmV0ID0gMFU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdTMyUmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgU3lzdGVtIFRpY2sgY291bnRlcgorICAqIEBwYXJhbVtpbl0gIHUzMkNsa1NyYyBpcyBTeXN0ZW0gVGljayBjbG9jayBzb3VyY2UuIEluY2x1ZGluZzoKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSFhUCisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwwX1NUQ0xLU0VMX0xYVAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9TVENMS1NFTF9IWFRfRElWMgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfQ0xLU0VMMF9TVENMS1NFTF9IQ0xLX0RJVjIKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX0NMS1NFTDBfU1RDTEtTRUxfSElSQ19ESVYyCisgICogICAgICAgICAgICAgLSBccmVmIENMS19DTEtTRUwwX1NUQ0xLU0VMX0hDTEsKKyAgKiBAcGFyYW1baW5dICB1MzJDb3VudCBpcyBTeXN0ZW0gVGljayByZWxvYWQgdmFsdWUuIEl0IGNvdWxkIGJlIDB+MHhGRkZGRkYuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gc2V0IFN5c3RlbSBUaWNrIGNsb2NrIHNvdXJjZSwgcmVsb2FkIHZhbHVlLCBlbmFibGUgU3lzdGVtIFRpY2sgY291bnRlciBhbmQgaW50ZXJydXB0LiBcbgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgQ0xLX0VuYWJsZVN5c1RpY2sodWludDMyX3QgdTMyQ2xrU3JjLCB1aW50MzJfdCB1MzJDb3VudCkKK3sKKyAgICAvKiBTZXQgU3lzdGVtIFRpY2sgY291bnRlciBkaXNhYmxlZCAqLworICAgIFN5c1RpY2stPkNUUkwgPSAwVUw7CisKKyAgICAvKiBTZXQgU3lzdGVtIFRpY2sgY2xvY2sgc291cmNlICovCisgICAgaWYodTMyQ2xrU3JjID09IENMS19DTEtTRUwwX1NUQ0xLU0VMX0hDTEspCisgICAgeworICAgICAgICBTeXNUaWNrLT5DVFJMIHw9IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBDTEstPkNMS1NFTDAgPSAoQ0xLLT5DTEtTRUwwICYgfkNMS19DTEtTRUwwX1NUQ0xLU0VMX01zaykgfCB1MzJDbGtTcmM7CisgICAgfQorCisgICAgLyogU2V0IFN5c3RlbSBUaWNrIHJlbG9hZCB2YWx1ZSAqLworICAgIFN5c1RpY2stPkxPQUQgPSB1MzJDb3VudDsKKworICAgIC8qIENsZWFyIFN5c3RlbSBUaWNrIGN1cnJlbnQgdmFsdWUgYW5kIGNvdW50ZXIgZmxhZyAqLworICAgIFN5c1RpY2stPlZBTCA9IDBVTDsKKworICAgIC8qIFNldCBTeXN0ZW0gVGljayBpbnRlcnJ1cHQgZW5hYmxlZCBhbmQgY291bnRlciBlbmFibGVkICovCisgICAgU3lzVGljay0+Q1RSTCB8PSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgfCBTeXNUaWNrX0NUUkxfRU5BQkxFX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBTeXN0ZW0gVGljayBjb3VudGVyCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGUgU3lzdGVtIFRpY2sgY291bnRlci4KKyAgKi8KK3ZvaWQgQ0xLX0Rpc2FibGVTeXNUaWNrKHZvaWQpCit7CisgICAgLyogU2V0IFN5c3RlbSBUaWNrIGNvdW50ZXIgZGlzYWJsZWQgKi8KKyAgICBTeXNUaWNrLT5DVFJMID0gMFVMOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBQb3dlci1kb3duIG1vZGUgc2VsZWN0ZWQKKyAgKiBAcGFyYW1baW5dICB1MzJQRE1vZGUgaXMgcG93ZXIgZG93biBtb2RlIGluZGV4LiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1BETVNFTF9QRAorICAqICAgICAgICAgICAgIC0gXHJlZiBDTEtfUE1VQ1RMX1BETVNFTF9MTFBECisgICogICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfUERNU0VMX0ZXUEQKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BNVUNUTF9QRE1TRUxfVUxMUEQKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLX1BNVUNUTF9QRE1TRUxfU1BECisgICogICAgICAgICAgICAgLSBccmVmIENMS19QTVVDVExfUERNU0VMX0RQRAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHBvd2VyLWRvd24gbW9kZS4KKyAgKi8KK3ZvaWQgQ0xLX1NldFBvd2VyRG93bk1vZGUodWludDMyX3QgdTMyUERNb2RlKQoreworICAgIENMSy0+UE1VQ1RMID0gKENMSy0+UE1VQ1RMICYgKH5DTEtfUE1VQ1RMX1BETVNFTF9Nc2spKSB8ICh1MzJQRE1vZGUpOworfQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgV2FrZS11cCBwaW4gdHJpZ2dlciB0eXBlIGF0IERlZXAgUG93ZXIgZG93biBtb2RlCisgKiBAcGFyYW1baW5dICAgdTMyVHJpZ2dlclR5cGUgV2FrZS11cCBwaW4gdHJpZ2dlciB0eXBlCisgKiAgICAgICAgICAgICAgLSBccmVmIENMS19EUERXS1BJTl9SSVNJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgQ0xLX0RQRFdLUElOX0ZBTExJTkcKKyAqICAgICAgICAgICAgICAtIFxyZWYgQ0xLX0RQRFdLUElOX0JPVEhFREdFCisgKiBAcmV0dXJuICAgICAgTm9uZQorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgV2FrZS11cCBwaW4gdHJpZ2dlciB0eXBlLgorICovCisKK3ZvaWQgQ0xLX0VuYWJsZURQRFdLUGluKHVpbnQzMl90IHUzMlRyaWdnZXJUeXBlKQoreworICAgIENMSy0+UE1VQ1RMID0gKENMSy0+UE1VQ1RMICYgKH5DTEtfUE1VQ1RMX1dLUElORU5fTXNrKSkgfCAodTMyVHJpZ2dlclR5cGUpOworfQorCisvKioKKyAqIEBicmllZiAgICAgICBHZXQgcG93ZXIgbWFuYWdlciB3YWtlIHVwIHNvdXJjZQorICogQHBhcmFtW2luXSAgIE5vbmUKKyAqIEByZXR1cm4gICAgICBOb25lCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBnZXQgcG93ZXIgbWFuYWdlciB3YWtlIHVwIHNvdXJjZS4KKyAqLworCit1aW50MzJfdCBDTEtfR2V0UE1VV0tTcmModm9pZCkKK3sKKyAgICByZXR1cm4gKENMSy0+UE1VU1RTKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IHNwZWNpZmllZCBHUElPIGFzIHdha2UgdXAgc291cmNlIGF0IFN0YW5kYnkgUG93ZXItZG93biBtb2RlCisgKiBAcGFyYW1baW5dICAgdTMyUG9ydCBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIDB+My4KKyAqIEBwYXJhbVtpbl0gICB1MzJQaW4gIFRoZSBwaW4gb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgMCB+IDE1LgorICogQHBhcmFtW2luXSAgIHUzMlRyaWdnZXJUeXBlIFdha2UtdXAgcGluIHRyaWdnZXIgdHlwZQorICogICAgICAgICAgICAgIC0gXHJlZiBDTEtfU1BEV0tQSU5fUklTSU5HCisgKiAgICAgICAgICAgICAgLSBccmVmIENMS19TUERXS1BJTl9GQUxMSU5HCisgKiBAcGFyYW1baW5dICAgdTMyRGVib3VuY2VFbiBTdGFuZGJ5IFBvd2VyLWRvd24gbW9kZSB3YWtlLXVwIHBpbiBkZS1ib3VuY2UgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NQRFdLUElOX0RFQk9VTkNFRU4KKyAqICAgICAgICAgICAgICAtIFxyZWYgQ0xLX1NQRFdLUElOX0RFQk9VTkNFRElTCisgKiBAcmV0dXJuICAgICAgTm9uZQorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgc3BlY2lmaWVkIEdQSU8gYXMgd2FrZSB1cCBzb3VyY2UgYXQgU3RhbmRieSBQb3dlci1kb3duIG1vZGUuCisgKi8KKwordm9pZCBDTEtfRW5hYmxlU1BEV0tQaW4odWludDMyX3QgdTMyUG9ydCwgdWludDMyX3QgdTMyUGluLCB1aW50MzJfdCB1MzJUcmlnZ2VyVHlwZSwgdWludDMyX3QgdTMyRGVib3VuY2VFbikKK3sKKyAgICB1aW50MzJfdCB1MzJUbXBBZGRyID0gMFVMOworICAgIHVpbnQzMl90IHUzMlRtcFZhbCA9IDBVTDsKKworICAgIC8qIEdQeCBTdGFuZC1ieSBQb3dlci1kb3duIFdha2UtdXAgUGluIFNlbGVjdCAqLworICAgIHUzMlRtcEFkZHIgPSAodWludDMyX3QpJkNMSy0+UEFTV0tDVEw7CisgICAgdTMyVG1wQWRkciArPSAoMHg0VUwgKiB1MzJQb3J0KTsKKworICAgIHUzMlRtcFZhbCA9IGlucHcoKHVpbnQzMl90ICopdTMyVG1wQWRkcik7CisgICAgdTMyVG1wVmFsID0gKHUzMlRtcFZhbCAmIH4oQ0xLX1BBU1dLQ1RMX1dLUFNFTF9Nc2sgfCBDTEtfUEFTV0tDVExfUFJXS0VOX01zayB8IENMS19QQVNXS0NUTF9QRldLRU5fTXNrIHwgQ0xLX1BBU1dLQ1RMX0RCRU5fTXNrIHwgQ0xLX1BBU1dLQ1RMX1dLRU5fTXNrKSkgfAorICAgICAgICAgICAgICAgICh1MzJQaW4gPDwgQ0xLX1BBU1dLQ1RMX1dLUFNFTF9Qb3MpIHwgdTMyVHJpZ2dlclR5cGUgfCB1MzJEZWJvdW5jZUVuIHwgQ0xLX1NQRFdLUElOX0VOQUJMRTsKKyAgICBvdXRwdygodWludDMyX3QgKil1MzJUbXBBZGRyLCB1MzJUbXBWYWwpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgUExMIGNsb2NrIGZyZXF1ZW5jeQorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBQTEwgZnJlcXVlbmN5CisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBnZXQgUExMIGZyZXF1ZW5jeS4gVGhlIGZyZXF1ZW5jeSB1bml0IGlzIEh6LgorICAqLworCitfX05PTlNFQ1VSRV9FTlRSWV9XRUFLCit1aW50MzJfdCBDTEtfR2V0UExMQ2xvY2tGcmVxKHZvaWQpCit7CisgICAgdWludDMyX3QgdTMyUGxsRnJlcSA9IDBVTCwgdTMyUGxsUmVnOworICAgIHVpbnQzMl90IHUzMkZJTiwgdTMyTkYsIHUzMk5SLCB1MzJOTzsKKyAgICB1aW50OF90IGF1OE5vVGJsWzRdID0gezFVLCAyVSwgMlUsIDRVfTsKKworICAgIHUzMlBsbFJlZyA9IENMSy0+UExMQ1RMOworCisgICAgaWYodTMyUGxsUmVnICYgKENMS19QTExDVExfUERfTXNrIHwgQ0xLX1BMTENUTF9PRV9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyUGxsRnJlcSA9IDBVTDsgICAgICAgICAgLyogUExMIGlzIGluIHBvd2VyIGRvd24gbW9kZSBvciBmaXggbG93ICovCisgICAgfQorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAvKiBQTEwgaXMgaW4gbm9ybWFsIG1vZGUgKi8KKyAgICB7CisKKyAgICAgICAgLyogUExMIHNvdXJjZSBjbG9jayAqLworICAgICAgICBpZih1MzJQbGxSZWcgJiBDTEtfUExMQ1RMX1BMTFNSQ19Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZJTiA9IF9fSElSQzsgICAgLyogUExMIHNvdXJjZSBjbG9jayBmcm9tIEhJUkMgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZJTiA9IF9fSFhUOyAgICAgLyogUExMIHNvdXJjZSBjbG9jayBmcm9tIEhYVCAqLworICAgICAgICB9CisKKyAgICAgICAgLyogQ2FsY3VsYXRlIFBMTCBmcmVxdWVuY3kgKi8KKyAgICAgICAgaWYodTMyUGxsUmVnICYgQ0xLX1BMTENUTF9CUF9Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlBsbEZyZXEgPSB1MzJGSU47ICAvKiBQTEwgaXMgaW4gYnlwYXNzIG1vZGUgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFBMTCBpcyBvdXRwdXQgZW5hYmxlZCBpbiBub3JtYWwgd29yayBtb2RlICovCisgICAgICAgICAgICB1MzJOTyA9IGF1OE5vVGJsWygodTMyUGxsUmVnICYgQ0xLX1BMTENUTF9PVVRESVZfTXNrKSA+PiBDTEtfUExMQ1RMX09VVERJVl9Qb3MpXTsKKyAgICAgICAgICAgIHUzMk5GID0gKCh1MzJQbGxSZWcgJiBDTEtfUExMQ1RMX0ZCRElWX01zaykgPj4gQ0xLX1BMTENUTF9GQkRJVl9Qb3MpICsgMlVMOworICAgICAgICAgICAgdTMyTlIgPSAoKHUzMlBsbFJlZyAmIENMS19QTExDVExfSU5ESVZfTXNrKSA+PiBDTEtfUExMQ1RMX0lORElWX1BvcykgKyAxVUw7CisKKyAgICAgICAgICAgIC8qIHUzMkZJTiBpcyBzaGlmdGVkIDIgYml0cyB0byBhdm9pZCBvdmVyZmxvdyAqLworICAgICAgICAgICAgdTMyUGxsRnJlcSA9ICgoKHUzMkZJTiA+PiAyKSAqICh1MzJORiA8PCAxKSkgLyAodTMyTlIgKiB1MzJOTykgPDwgMik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyUGxsRnJlcTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHNlbGVjdGVkIG1vZHVsZSBjbG9jayBzb3VyY2UKKyAgKiBAcGFyYW1baW5dICB1MzJNb2R1bGVJZHggaXMgbW9kdWxlIGluZGV4LgorICAqICAgICAgICAgICAgIC0gXHJlZiBTREgwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0JIX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBXRFRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFdXRFRfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFJUQ19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SMl9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVE1SM19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ0xLT19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUVNQSTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNQSTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNQSTFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNQSTJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNQSTNfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQzX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUNF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDVfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIE9UR19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVVNCRF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgSTJTMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNDMl9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRVBXTTBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIEVQV00xX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBCUFdNMF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQlBXTTFfTU9EVUxFCisgICogQHJldHVybiAgICAgU2VsZWN0ZWQgbW9kdWxlIGNsb2NrIHNvdXJjZSBzZXR0aW5nCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBnZXQgc2VsZWN0ZWQgbW9kdWxlIGNsb2NrIHNvdXJjZS4KKyAgKi8KKworX19OT05TRUNVUkVfRU5UUllfV0VBSwordWludDMyX3QgQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKHVpbnQzMl90IHUzMk1vZHVsZUlkeCkKK3sKKyAgICB1aW50MzJfdCB1MzJUbXBWYWwgPSAwVUwsIHUzMlRtcEFkZHIgPSAwVUw7CisgICAgdWludDMyX3QgYXUzMlNlbFRibFs0XSA9IHsweDBVTCwgMHg0VUwsIDB4OFVMLCAweENVTH07CisKKyAgICAvKiBHZXQgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBzZXR0aW5nICovCisgICAgaWYodTMyTW9kdWxlSWR4ID09IEVQV00wX01PRFVMRSkKKyAgICB7CisgICAgICAgIHUzMlRtcFZhbCA9ICgoQ0xLLT5DTEtTRUwyICYgQ0xLX0NMS1NFTDJfRVBXTTBTRUxfTXNrKSA+PiBDTEtfQ0xLU0VMMl9FUFdNMFNFTF9Qb3MpOworICAgIH0KKyAgICBlbHNlIGlmKHUzMk1vZHVsZUlkeCA9PSBFUFdNMV9NT0RVTEUpCisgICAgeworICAgICAgICB1MzJUbXBWYWwgPSAoKENMSy0+Q0xLU0VMMiAmIENMS19DTEtTRUwyX0VQV00xU0VMX01zaykgPj4gQ0xLX0NMS1NFTDJfRVBXTTFTRUxfUG9zKTsKKyAgICB9CisgICAgZWxzZSBpZih1MzJNb2R1bGVJZHggPT0gQlBXTTBfTU9EVUxFKQorICAgIHsKKyAgICAgICAgdTMyVG1wVmFsID0gKChDTEstPkNMS1NFTDIgJiBDTEtfQ0xLU0VMMl9CUFdNMFNFTF9Nc2spID4+IENMS19DTEtTRUwyX0JQV00wU0VMX1Bvcyk7CisgICAgfQorICAgIGVsc2UgaWYodTMyTW9kdWxlSWR4ID09IEJQV00xX01PRFVMRSkKKyAgICB7CisgICAgICAgIHUzMlRtcFZhbCA9ICgoQ0xLLT5DTEtTRUwyICYgQ0xLX0NMS1NFTDJfQlBXTTFTRUxfTXNrKSA+PiBDTEtfQ0xLU0VMMl9CUFdNMVNFTF9Qb3MpOworICAgIH0KKyAgICBlbHNlIGlmKE1PRFVMRV9DTEtTRUxfTXNrKHUzMk1vZHVsZUlkeCkgIT0gTU9EVUxFX05vTXNrKQorICAgIHsKKyAgICAgICAgLyogR2V0IGNsb2NrIHNlbGVjdCBjb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyAgICAgICAgdTMyVG1wQWRkciA9ICh1aW50MzJfdCkmQ0xLLT5DTEtTRUwwICsgKGF1MzJTZWxUYmxbTU9EVUxFX0NMS1NFTCh1MzJNb2R1bGVJZHgpXSk7CisKKyAgICAgICAgLyogR2V0IGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gc2V0dGluZyAqLworICAgICAgICB1MzJUbXBWYWwgPSAoKGlucHcoKHVpbnQzMl90ICopdTMyVG1wQWRkcikgJiAoTU9EVUxFX0NMS1NFTF9Nc2sodTMyTW9kdWxlSWR4KSA8PCBNT0RVTEVfQ0xLU0VMX1Bvcyh1MzJNb2R1bGVJZHgpKSkgPj4gTU9EVUxFX0NMS1NFTF9Qb3ModTMyTW9kdWxlSWR4KSk7CisgICAgfQorCisgICAgcmV0dXJuIHUzMlRtcFZhbDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IHNlbGVjdGVkIG1vZHVsZSBjbG9jayBkaXZpZGVyIG51bWJlcgorICAqIEBwYXJhbVtpbl0gIHUzMk1vZHVsZUlkeCBpcyBtb2R1bGUgaW5kZXguCisgICogICAgICAgICAgICAgLSBccmVmIFNESDBfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVTQkhfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMV9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDJfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQzX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUNF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDVfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIE9UR19NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVVNCRF9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MwX01PRFVMRQorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzFfTU9EVUxFCisgICogICAgICAgICAgICAgLSBccmVmIFNDMl9NT0RVTEUKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRUFEQ19NT0RVTEUKKyAgKiBAcmV0dXJuICAgICBTZWxlY3RlZCBtb2R1bGUgY2xvY2sgZGl2aWRlciBudW1iZXIgc2V0dGluZworICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZ2V0IHNlbGVjdGVkIG1vZHVsZSBjbG9jayBkaXZpZGVyIG51bWJlci4KKyAgKi8KKworX19OT05TRUNVUkVfRU5UUllfV0VBSwordWludDMyX3QgQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcih1aW50MzJfdCB1MzJNb2R1bGVJZHgpCit7CisgICAgdWludDMyX3QgdTMyVG1wVmFsID0gMFVMLCB1MzJUbXBBZGRyID0gMFVMOworICAgIHVpbnQzMl90IGF1MzJEaXZUYmxbNF0gPSB7MHgwVUwsIDB4NFVMLCAweDhVTCwgMHgxMFVMfTsKKworICAgIGlmKE1PRFVMRV9DTEtESVZfTXNrKHUzMk1vZHVsZUlkeCkgIT0gTU9EVUxFX05vTXNrKQorICAgIHsKKyAgICAgICAgLyogR2V0IGNsb2NrIGRpdmlkZXIgY29udHJvbCByZWdpc3RlciBhZGRyZXNzICovCisgICAgICAgIHUzMlRtcEFkZHIgPSAodWludDMyX3QpJkNMSy0+Q0xLRElWMCArIChhdTMyRGl2VGJsW01PRFVMRV9DTEtESVYodTMyTW9kdWxlSWR4KV0pOworICAgICAgICAvKiBHZXQgY2xvY2sgZGl2aWRlciBudW1iZXIgc2V0dGluZyAqLworICAgICAgICB1MzJUbXBWYWwgPSAoKGlucHcoKHVpbnQzMl90ICopdTMyVG1wQWRkcikgJiAoTU9EVUxFX0NMS0RJVl9Nc2sodTMyTW9kdWxlSWR4KSA8PCBNT0RVTEVfQ0xLRElWX1Bvcyh1MzJNb2R1bGVJZHgpKSkgPj4gTU9EVUxFX0NMS0RJVl9Qb3ModTMyTW9kdWxlSWR4KSk7CisgICAgfQorCisgICAgcmV0dXJuIHUzMlRtcFZhbDsKK30KKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENMS19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTEtfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2NyYy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvY3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0MzNjZgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2NyYy5jCkBAIC0wLDAgKzEsMTE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY3JjLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIEN5Y2xpYyBSZWR1bmRhbmN5IENoZWNrKENSQykgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBDUkNfRHJpdmVyIENSQyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBDUkNfRVhQT1JURURfRlVOQ1RJT05TIENSQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIENSQyBPcGVuCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJNb2RlICAgICAgICAgQ1JDIG9wZXJhdGlvbiBwb2x5bm9taWFsIG1vZGUuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUkNfQ0NJVFQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENSQ184CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUkNfMTYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENSQ18zMgorICAqIEBwYXJhbVtpbl0gIHUzMkF0dHJpYnV0ZSAgICBDUkMgb3BlcmF0aW9uIGRhdGEgYXR0cmlidXRlLiBWYWxpZCB2YWx1ZXMgYXJlIGNvbWJpbmVkIHdpdGg6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUkNfQ0hFQ0tTVU1fQ09NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUkNfQ0hFQ0tTVU1fUlZTCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUkNfV0RBVEFfQ09NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBDUkNfV0RBVEFfUlZTCisgICogQHBhcmFtW2luXSAgdTMyU2VlZCAgICAgICAgIFNlZWQgdmFsdWUuCisgICogQHBhcmFtW2luXSAgdTMyRGF0YUxlbiAgICAgIENQVSBXcml0ZSBEYXRhIExlbmd0aC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIENSQ19DUFVfV0RBVEFfOAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JDX0NQVV9XREFUQV8xNgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgQ1JDX0NQVV9XREFUQV8zMgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSB0aGUgQ1JDIGNvbnRyb2xsZXIgYnkgc3BlY2lmeSBDUkMgb3BlcmF0aW9uIG1vZGUsIGF0dHJpYnV0ZSwgaW5pdGlhbCBzZWVkIGFuZCB3cml0ZSBkYXRhIGxlbmd0aC4gXG4KKyAgKiAgICAgICAgICAgICBBZnRlciB0aGF0LCB1c2VyIGNhbiBzdGFydCB0byBwZXJmb3JtIENSQyBjYWxjdWxhdGUgYnkgY2FsbGluZyBDUkNfV1JJVEVfREFUQSBtYWNybyBvciBDUkNfREFUIHJlZ2lzdGVyIGRpcmVjdGx5LgorICAqLwordm9pZCBDUkNfT3Blbih1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJBdHRyaWJ1dGUsIHVpbnQzMl90IHUzMlNlZWQsIHVpbnQzMl90IHUzMkRhdGFMZW4pCit7CisgICAgQ1JDX1QgKnBDUkM7CisKKyAgICBpZigoX19QQygpJk5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgcENSQyA9IENSQ19OUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcENSQyA9IENSQzsKKyAgICB9CisKKyAgICBwQ1JDLT5TRUVEID0gdTMyU2VlZDsKKyAgICBwQ1JDLT5DVEwgPSB1MzJNb2RlIHwgdTMyQXR0cmlidXRlIHwgdTMyRGF0YUxlbiB8IENSQ19DVExfQ1JDRU5fTXNrOworCisgICAgLyogU2V0dGluZyBDSEtTSU5JVCBiaXQgd2lsbCByZWxvYWQgdGhlIGluaXRpYWwgc2VlZCB2YWx1ZShDUkNfU0VFRCByZWdpc3RlcikgdG8gQ1JDIGNvbnRyb2xsZXIgKi8KKyAgICBwQ1JDLT5DVEwgfD0gQ1JDX0NUTF9DSEtTSU5JVF9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEdldCBDUkMgQ2hlY2tzdW0KKyAgKgorICAqIEBwYXJhbVtpbl0gIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIENoZWNrc3VtIFJlc3VsdAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBtYWNybyBnZXRzIHRoZSBDUkMgY2hlY2tzdW0gcmVzdWx0IGJ5IGN1cnJlbnQgQ1JDIHBvbHlub21pYWwgbW9kZS4KKyAgKi8KK3VpbnQzMl90IENSQ19HZXRDaGVja3N1bSh2b2lkKQoreworICAgIENSQ19UICpwQ1JDOworICAgIHVpbnQzMl90IHUzMkNoZWNrc3VtID0gMFVMOworCisgICAgaWYoKF9fUEMoKSZOU19PRkZTRVQpID09IE5TX09GRlNFVCkKKyAgICB7CisgICAgICAgIHBDUkMgPSBDUkNfTlM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBDUkMgPSBDUkM7CisgICAgfQorCisgICAgc3dpdGNoKHBDUkMtPkNUTCAmIENSQ19DVExfQ1JDTU9ERV9Nc2spCisgICAgeworICAgICAgICBjYXNlIENSQ19DQ0lUVDoKKyAgICAgICAgY2FzZSBDUkNfMTY6CisgICAgICAgICAgICB1MzJDaGVja3N1bSA9IChwQ1JDLT5DSEVDS1NVTSAmIDB4RkZGRlVMKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1JDXzMyOgorICAgICAgICAgICAgdTMyQ2hlY2tzdW0gPSBwQ1JDLT5DSEVDS1NVTTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1JDXzg6CisgICAgICAgICAgICB1MzJDaGVja3N1bSA9IChwQ1JDLT5DSEVDS1NVTSAmIDB4RkZVTCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkNoZWNrc3VtOworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENSQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDUkNfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2NyeXB0by5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmOWFmYQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2NyeXB0by5jCkBAIC0wLDAgKzEsMzQ4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNyeXB0by5jCisgKiBAdmVyc2lvbiAgVjEuMTAKKyAqIEBicmllZiAgQ3J5cHRvZ3JhcGhpYyBBY2NlbGVyYXRvciBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNy0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJNMjM1MS5oIgorCisjZGVmaW5lIEVOQUJMRV9ERUJVRyAgICAwCisjZGVmaW5lIFhPTV9TVVBQT1JUICAgICAwCisKKyNpZiBFTkFCTEVfREVCVUcKKyNkZWZpbmUgQ1JQVF9EQkdNU0cgICBwcmludGYKKyNlbHNlCisjZGVmaW5lIENSUFRfREJHTVNHKC4uLikgICBkbyB7IH0gd2hpbGUgKDApICAgICAgIC8qIGRpc2FibGUgZGVidWcgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0lDQ0FSTV9fKQorIyBwcmFnbWEgZGlhZ19zdXBwcmVzcz1QbTA3MywgUG0xNDMgICAgICAgIC8qIE1pc3JhIEMgcnVsZSAxNC43ICovCisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIENSWVBUT19Ecml2ZXIgQ1JZUFRPIERyaXZlcgorICBAeworKi8KKworCisvKiogQGFkZHRvZ3JvdXAgQ1JZUFRPX0VYUE9SVEVEX0ZVTkNUSU9OUyBDUllQVE8gRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKiAvLyBAY29uZCBISURERU5fU1lNQk9MUyAqLworCitzdGF0aWMgdWludDMyX3QgZ19BRVNfQ1RMWzRdOworc3RhdGljIHVpbnQzMl90IGdfVERFU19DVExbNF07CisKK3N0YXRpYyBjaGFyICBoZXhfY2hhcl90YmxbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKworc3RhdGljIHZvaWQgZHVtcF9lY2NfcmVnKGNoYXIgKnN0ciwgdWludDMyX3Qgdm9sYXRpbGUgcmVnc1tdLCBpbnQzMl90IGNvdW50KTsKK3N0YXRpYyBjaGFyIGdldF9OdGhfbmliYmxlX2NoYXIodWludDMyX3QgdmFsMzIsIHVpbnQzMl90IGlkeCk7CitzdGF0aWMgdm9pZCBIZXgyUmVnKGNoYXIgaW5wdXRbXSwgdWludDMyX3Qgdm9sYXRpbGUgcmVnW10pOworc3RhdGljIHZvaWQgUmVnMkhleChpbnQzMl90IGNvdW50LCB1aW50MzJfdCB2b2xhdGlsZSByZWdbXSwgY2hhciBvdXRwdXRbXSk7CitzdGF0aWMgY2hhciBjaDJoZXgoY2hhciBjaCk7CitzdGF0aWMgdm9pZCBIZXgyUmVnRXgoY2hhciBpbnB1dFtdLCB1aW50MzJfdCB2b2xhdGlsZSByZWdbXSwgaW50IHNoaWZ0KTsKK3N0YXRpYyBpbnQgIGdldF9uaWJibGVfdmFsdWUoY2hhciBjKTsKKworLyogLy8gQGVuZGNvbmQgSElEREVOX1NZTUJPTFMgKi8KKworLyoqCisgICogQGJyaWVmICBPcGVuIFBSTkcgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMktleVNpemUgICBpdCBpcyBQUk5HIGtleSBzaXplLCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgUFJOR19LRVlfU0laRV82NAorICAqICAgICAgICAgLSBccmVmIFBSTkdfS0VZX1NJWkVfMTI4CisgICogICAgICAgICAtIFxyZWYgUFJOR19LRVlfU0laRV8xOTIKKyAgKiAgICAgICAgIC0gXHJlZiBQUk5HX0tFWV9TSVpFXzI1NgorICAqIEBwYXJhbVtpbl0gIHUzMlNlZWRSZWxvYWQgaXMgUFJORyBzZWVkIHJlbG9hZCBvciBub3QsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBQUk5HX1NFRURfQ09OVAorICAqICAgICAgICAgLSBccmVmIFBSTkdfU0VFRF9SRUxPQUQKKyAgKiBAcGFyYW1baW5dICB1MzJTZWVkICBUaGUgbmV3IHNlZWQuIE9ubHkgdmFsaWQgd2hlbiB1MzJTZWVkUmVsb2FkIGlzIFBSTkdfU0VFRF9SRUxPQUQuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFBSTkdfT3BlbihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMktleVNpemUsIHVpbnQzMl90IHUzMlNlZWRSZWxvYWQsIHVpbnQzMl90IHUzMlNlZWQpCit7CisgICAgaWYodTMyU2VlZFJlbG9hZCkKKyAgICB7CisgICAgICAgIGNycHQtPlBSTkdfU0VFRCA9IHUzMlNlZWQ7CisgICAgfQorCisgICAgY3JwdC0+UFJOR19DVEwgPSAodTMyS2V5U2l6ZSA8PCBDUlBUX1BSTkdfQ1RMX0tFWVNaX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgKHUzMlNlZWRSZWxvYWQgPDwgQ1JQVF9QUk5HX0NUTF9TRUVEUkxEX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU3RhcnQgdG8gZ2VuZXJhdGUgb25lIFBSTkcga2V5LgorICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFBSTkdfU3RhcnQoQ1JQVF9UICpjcnB0KQoreworICAgIGNycHQtPlBSTkdfQ1RMIHw9IENSUFRfUFJOR19DVExfU1RBUlRfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJlYWQgdGhlIFBSTkcga2V5LgorICAqIEBwYXJhbVtpbl0gICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtvdXRdICB1MzJSYW5kS2V5ICBUaGUga2V5IGJ1ZmZlciB0byBzdG9yZSBuZXdseSBnZW5lcmF0ZWQgUFJORyBrZXkuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFBSTkdfUmVhZChDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMlJhbmRLZXlbXSkKK3sKKyAgICB1aW50MzJfdCAgaSwgd2NudDsKKworICAgIHdjbnQgPSAoKChjcnB0LT5QUk5HX0NUTCAmIENSUFRfUFJOR19DVExfS0VZU1pfTXNrKSA+PiBDUlBUX1BSTkdfQ1RMX0tFWVNaX1BvcykgKyAxVSkgKiAyVTsKKworICAgIGZvcihpID0gMFU7IGkgPCB3Y250OyBpKyspCisgICAgeworICAgICAgICB1MzJSYW5kS2V5W2ldID0gY3JwdC0+UFJOR19LRVlbaV07CisgICAgfQorCisgICAgY3JwdC0+UFJOR19DVEwgJj0gfkNSUFRfUFJOR19DVExfU0VFRFJMRF9Nc2s7Cit9CisKKworLyoqCisgICogQGJyaWVmICBPcGVuIEFFUyBlbmNyeXB0L2RlY3J5cHQgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMkVuY0RlYyAgICAxOiBBRVMgZW5jb2RlOyAgMDogQUVTIGRlY29kZQorICAqIEBwYXJhbVtpbl0gIHUzMk9wTW9kZSAgICBBRVMgb3BlcmF0aW9uIG1vZGUsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9FQ0IKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DQkMKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DRkIKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9PRkIKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DVFIKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DQkNfQ1MxCisgICogICAgICAgICAtIFxyZWYgQUVTX01PREVfQ0JDX0NTMgorICAqICAgICAgICAgLSBccmVmIEFFU19NT0RFX0NCQ19DUzMKKyAgKiBAcGFyYW1baW5dICB1MzJLZXlTaXplIGlzIEFFUyBrZXkgc2l6ZSwgaW5jbHVkaW5nOgorICAqICAgICAgICAgLSBccmVmIEFFU19LRVlfU0laRV8xMjgKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMTkyCisgICogICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzI1NgorICAqIEBwYXJhbVtpbl0gIHUzMlN3YXBUeXBlIGlzIEFFUyBpbnB1dC9vdXRwdXQgZGF0YSBzd2FwIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfTk9fU1dBUAorICAqICAgICAgICAgLSBccmVmIEFFU19PVVRfU1dBUAorICAqICAgICAgICAgLSBccmVmIEFFU19JTl9TV0FQCisgICogICAgICAgICAtIFxyZWYgQUVTX0lOX09VVF9TV0FQCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIEFFU19PcGVuKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyRW5jRGVjLAorICAgICAgICAgICAgICB1aW50MzJfdCB1MzJPcE1vZGUsIHVpbnQzMl90IHUzMktleVNpemUsIHVpbnQzMl90IHUzMlN3YXBUeXBlKQoreworICAgIGNycHQtPkFFU19DVEwgPSAodTMyQ2hhbm5lbCA8PCBDUlBUX0FFU19DVExfQ0hBTk5FTF9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgKHUzMkVuY0RlYyA8PCBDUlBUX0FFU19DVExfRU5DUlBUX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAodTMyT3BNb2RlIDw8IENSUFRfQUVTX0NUTF9PUE1PREVfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICh1MzJLZXlTaXplIDw8IENSUFRfQUVTX0NUTF9LRVlTWl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgKHUzMlN3YXBUeXBlIDw8IENSUFRfQUVTX0NUTF9PVVRTV0FQX1Bvcyk7CisgICAgZ19BRVNfQ1RMW3UzMkNoYW5uZWxdID0gY3JwdC0+QUVTX0NUTDsKK30KKworLyoqCisgICogQGJyaWVmICBTdGFydCBBRVMgZW5jcnlwdC9kZWNyeXB0CisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIEFFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICB1MzJETUFNb2RlICBBRVMgRE1BIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX09ORV9TSE9UICAgT25lIHNob3AgQUVTIGVuY3J5cHQvZGVjcnlwdC4KKyAgKiAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX0NPTlRJTlVFICAgQ29udGludW91cyBBRVMgZW5jcnlwdC9kZWNyeXB0LgorICAqICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfTEFTVCAgICAgICBMYXN0IEFFUyBlbmNyeXB0L2RlY3J5cHQgb2YgYSBzZXJpZXMgb2YgQUVTX1N0YXJ0LgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBBRVNfU3RhcnQoQ1JQVF9UICpjcnB0LCBpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkRNQU1vZGUpCit7CisgICAgY3JwdC0+QUVTX0NUTCA9IGdfQUVTX0NUTFt1MzJDaGFubmVsXTsKKyAgICBjcnB0LT5BRVNfQ1RMIHw9IENSUFRfQUVTX0NUTF9TVEFSVF9Nc2sgfCAodTMyRE1BTW9kZSA8PCBDUlBUX0FFU19DVExfRE1BTEFTVF9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFNldCBBRVMga2V5cworICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBBRVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgYXUzMktleXMgICAgQW4gd29yZCBhcnJheSBjb250YWlucyBBRVMga2V5cy4KKyAgKiBAcGFyYW1baW5dICB1MzJLZXlTaXplIGlzIEFFUyBrZXkgc2l6ZSwgaW5jbHVkaW5nOgorICAqICAgICAgICAgLSBccmVmIEFFU19LRVlfU0laRV8xMjgKKyAgKiAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMTkyCisgICogICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzI1NgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBBRVNfU2V0S2V5KENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgYXUzMktleXNbXSwgdWludDMyX3QgdTMyS2V5U2l6ZSkKK3sKKyAgICB1aW50MzJfdCAgaSwgd2NudCwga2V5X3JlZ19hZGRyOworCisgICAga2V5X3JlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5BRVMwX0tFWVswXSArICh1MzJDaGFubmVsICogMHgzQ1VMKTsKKyAgICB3Y250ID0gNFVMICsgdTMyS2V5U2l6ZSAqIDJVTDsKKworICAgIGZvcihpID0gMFU7IGkgPCB3Y250OyBpKyspCisgICAgeworICAgICAgICBvdXRwdyhrZXlfcmVnX2FkZHIsIGF1MzJLZXlzW2ldKTsKKyAgICAgICAga2V5X3JlZ19hZGRyICs9IDRVTDsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0IEFFUyBpbml0aWFsIHZlY3RvcnMKKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIGF1MzJJViAgICAgIEEgZm91ciBlbnRyeSB3b3JkIGFycmF5IGNvbnRhaW5zIEFFUyBpbml0aWFsIHZlY3RvcnMuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIEFFU19TZXRJbml0VmVjdChDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IGF1MzJJVltdKQoreworICAgIHVpbnQzMl90ICBpLCBrZXlfcmVnX2FkZHI7CisKKyAgICBrZXlfcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPkFFUzBfSVZbMF0gKyAodTMyQ2hhbm5lbCAqIDB4M0NVTCk7CisKKyAgICBmb3IoaSA9IDBVOyBpIDwgNFU7IGkrKykKKyAgICB7CisgICAgICAgIG91dHB3KGtleV9yZWdfYWRkciwgYXUzMklWW2ldKTsKKyAgICAgICAga2V5X3JlZ19hZGRyICs9IDRVTDsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0IEFFUyBETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbi4KKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgICBBRVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuCisgICogQHBhcmFtW2luXSAgdTMyU3JjQWRkciAgIEFFUyBETUEgc291cmNlIGFkZHJlc3MKKyAgKiBAcGFyYW1baW5dICB1MzJEc3RBZGRyICAgQUVTIERNQSBkZXN0aW5hdGlvbiBhZGRyZXNzCisgICogQHBhcmFtW2luXSAgdTMyVHJhbnNDbnQgIEFFUyBETUEgdHJhbnNmZXIgYnl0ZSBjb3VudAorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBBRVNfU2V0RE1BVHJhbnNmZXIoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJTcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyRHN0QWRkciwgdWludDMyX3QgdTMyVHJhbnNDbnQpCit7CisgICAgdWludDMyX3QgIHJlZ19hZGRyOworCisgICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPkFFUzBfU0FERFIgKyAodTMyQ2hhbm5lbCAqIDB4M0NVTCk7CisgICAgb3V0cHcocmVnX2FkZHIsIHUzMlNyY0FkZHIpOworCisgICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPkFFUzBfREFERFIgKyAodTMyQ2hhbm5lbCAqIDB4M0NVTCk7CisgICAgb3V0cHcocmVnX2FkZHIsIHUzMkRzdEFkZHIpOworCisgICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPkFFUzBfQ05UICsgKHUzMkNoYW5uZWwgKiAweDNDVUwpOworICAgIG91dHB3KHJlZ19hZGRyLCB1MzJUcmFuc0NudCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgT3BlbiBUREVTIGVuY3J5cHQvZGVjcnlwdCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgICBUREVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMkVuY0RlYyAgICAxOiBUREVTIGVuY29kZTsgMDogVERFUyBkZWNvZGUKKyAgKiBAcGFyYW1baW5dICBJczNERVMgICAgICAgMTogVERFUzsgMDogREVTCisgICogQHBhcmFtW2luXSAgSXMzS2V5ICAgICAgIDE6IFRERVMgMyBrZXkgbW9kZTsgMDogVERFUyAyIGtleSBtb2RlCisgICogQHBhcmFtW2luXSAgdTMyT3BNb2RlICAgIFRERVMgb3BlcmF0aW9uIG1vZGUsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBUREVTX01PREVfRUNCCisgICogICAgICAgICAtIFxyZWYgVERFU19NT0RFX0NCQworICAqICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9DRkIKKyAgKiAgICAgICAgIC0gXHJlZiBUREVTX01PREVfT0ZCCisgICogICAgICAgICAtIFxyZWYgVERFU19NT0RFX0NUUgorICAqIEBwYXJhbVtpbl0gIHUzMlN3YXBUeXBlIGlzIFRERVMgaW5wdXQvb3V0cHV0IGRhdGEgc3dhcCBjb250cm9sIGFuZCB3b3JkIHN3YXAgY29udHJvbCwgaW5jbHVkaW5nOgorICAqICAgICAgICAgLSBccmVmIFRERVNfTk9fU1dBUAorICAqICAgICAgICAgLSBccmVmIFRERVNfV0hMX1NXQVAKKyAgKiAgICAgICAgIC0gXHJlZiBUREVTX09VVF9TV0FQCisgICogICAgICAgICAtIFxyZWYgVERFU19PVVRfV0hMX1NXQVAKKyAgKiAgICAgICAgIC0gXHJlZiBUREVTX0lOX1NXQVAKKyAgKiAgICAgICAgIC0gXHJlZiBUREVTX0lOX1dITF9TV0FQCisgICogICAgICAgICAtIFxyZWYgVERFU19JTl9PVVRfU1dBUAorICAqICAgICAgICAgLSBccmVmIFRERVNfSU5fT1VUX1dITF9TV0FQCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFRERVNfT3BlbihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkVuY0RlYywgaW50MzJfdCBJczNERVMsIGludDMyX3QgSXMzS2V5LAorICAgICAgICAgICAgICAgdWludDMyX3QgdTMyT3BNb2RlLCB1aW50MzJfdCB1MzJTd2FwVHlwZSkKK3sKKyAgICAodm9pZCljcnB0OworICAgIGdfVERFU19DVExbdTMyQ2hhbm5lbF0gPSAodTMyQ2hhbm5lbCA8PCBDUlBUX1RERVNfQ1RMX0NIQU5ORUxfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJFbmNEZWMgPDwgQ1JQVF9UREVTX0NUTF9FTkNSUFRfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMk9wTW9kZSB8ICh1MzJTd2FwVHlwZSA8PCBDUlBUX1RERVNfQ1RMX0JMS1NXQVBfUG9zKTsKKyAgICBpZihJczNERVMpCisgICAgeworICAgICAgICBnX1RERVNfQ1RMW3UzMkNoYW5uZWxdIHw9IENSUFRfVERFU19DVExfVE1PREVfTXNrOworICAgIH0KKyAgICBpZihJczNLZXkpCisgICAgeworICAgICAgICBnX1RERVNfQ1RMW3UzMkNoYW5uZWxdIHw9IENSUFRfVERFU19DVExfM0tFWVNfTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICBTdGFydCBUREVTIGVuY3J5cHQvZGVjcnlwdAorICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBUREVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMkRNQU1vZGUgIFRERVMgRE1BIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX09ORV9TSE9UICAgT25lIHNob3AgVERFUyBlbmNyeXB0L2RlY3J5cHQuCisgICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9DT05USU5VRSAgIENvbnRpbnVvdXMgVERFUyBlbmNyeXB0L2RlY3J5cHQuCisgICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9MQVNUICAgICAgIExhc3QgVERFUyBlbmNyeXB0L2RlY3J5cHQgb2YgYSBzZXJpZXMgb2YgVERFU19TdGFydC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVERFU19TdGFydChDUlBUX1QgKmNycHQsIGludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyRE1BTW9kZSkKK3sKKyAgICBnX1RERVNfQ1RMW3UzMkNoYW5uZWxdIHw9IENSUFRfVERFU19DVExfU1RBUlRfTXNrIHwgKHUzMkRNQU1vZGUgPDwgQ1JQVF9UREVTX0NUTF9ETUFMQVNUX1Bvcyk7CisgICAgY3JwdC0+VERFU19DVEwgPSBnX1RERVNfQ1RMW3UzMkNoYW5uZWxdOworfQorCisvKioKKyAgKiBAYnJpZWYgIFNldCBUREVTIGtleXMKKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4KKyAgKiBAcGFyYW1baW5dICBhdTMyS2V5cyAgICBUaGUgVERFUyBrZXlzLiBhdTMyS2V5c1swXVswXSBpcyBLZXkwIGhpZ2ggd29yZCBhbmQgYXUzMktleXNbMF1bMV0gaXMga2V5MCBsb3cgd29yZC4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVERFU19TZXRLZXkoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCBhdTMyS2V5c1szXVsyXSkKK3sKKyAgICB1aW50MzJfdCAgIGksIHJlZ19hZGRyOworCisgICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPlRERVMwX0tFWTFIICsgKDB4NDBVTCAqIHUzMkNoYW5uZWwpOworCisgICAgZm9yKGkgPSAwVTsgaSA8IDNVOyBpKyspCisgICAgeworICAgICAgICBvdXRwdyhyZWdfYWRkciwgYXUzMktleXNbaV1bMF0pOyAgIC8qIFRERVNuX0tFWXhIICovCisgICAgICAgIHJlZ19hZGRyICs9IDRVTDsKKyAgICAgICAgb3V0cHcocmVnX2FkZHIsIGF1MzJLZXlzW2ldWzFdKTsgICAvKiBUREVTbl9LRVl4TCAqLworICAgICAgICByZWdfYWRkciArPSA0VUw7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIFNldCBUREVTIGluaXRpYWwgdmVjdG9ycworICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBUREVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMklWSCAgICAgIFRERVMgaW5pdGlhbCB2ZWN0b3IgaGlnaCB3b3JkLgorICAqIEBwYXJhbVtpbl0gIHUzMklWTCAgICAgIFRERVMgaW5pdGlhbCB2ZWN0b3IgbG93IHdvcmQuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFRERVNfU2V0SW5pdFZlY3QoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJJVkgsIHVpbnQzMl90IHUzMklWTCkKK3sKKyAgICB1aW50MzJfdCAgcmVnX2FkZHI7CisKKyAgICByZWdfYWRkciA9ICh1aW50MzJfdCkmY3JwdC0+VERFUzBfSVZIICsgKHUzMkNoYW5uZWwgKiAweDQwVUwpOworICAgIG91dHB3KHJlZ19hZGRyLCB1MzJJVkgpOworCisgICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPlRERVMwX0lWTCArICh1MzJDaGFubmVsICogMHg0MFVMKTsKKyAgICBvdXRwdyhyZWdfYWRkciwgdTMySVZMKTsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgVERFUyBETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbi4KKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgICBUREVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLgorICAqIEBwYXJhbVtpbl0gIHUzMlNyY0FkZHIgICBUREVTIERNQSBzb3VyY2UgYWRkcmVzcworICAqIEBwYXJhbVtpbl0gIHUzMkRzdEFkZHIgICBUREVTIERNQSBkZXN0aW5hdGlvbiBhZGRyZXNzCisgICogQHBhcmFtW2luXSAgdTMyVHJhbnNDbnQgIFRERVMgRE1BIHRyYW5zZmVyIGJ5dGUgY291bnQKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVERFU19TZXRETUFUcmFuc2ZlcihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMlNyY0FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyRHN0QWRkciwgdWludDMyX3QgdTMyVHJhbnNDbnQpCit7CisgICAgdWludDMyX3QgIHJlZ19hZGRyOworCisgICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPlRERVMwX1NBRERSICsgKHUzMkNoYW5uZWwgKiAweDQwVUwpOworICAgIG91dHB3KHJlZ19hZGRyLCB1MzJTcmNBZGRyKTsKKworICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5UREVTMF9EQUREUiArICh1MzJDaGFubmVsICogMHg0MFVMKTsKKyAgICBvdXRwdyhyZWdfYWRkciwgdTMyRHN0QWRkcik7CisKKyAgICByZWdfYWRkciA9ICh1aW50MzJfdCkmY3JwdC0+VERFUzBfQ05UICsgKHUzMkNoYW5uZWwgKiAweDQwVUwpOworICAgIG91dHB3KHJlZ19hZGRyLCB1MzJUcmFuc0NudCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgT3BlbiBTSEEgZW5jcnlwdCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyT3BNb2RlICAgU0hBIG9wZXJhdGlvbiBtb2RlLCBpbmNsdWRpbmc6CisgICogICAgICAgICAtIFxyZWYgU0hBX01PREVfU0hBMQorICAqICAgICAgICAgLSBccmVmIFNIQV9NT0RFX1NIQTIyNAorICAqICAgICAgICAgLSBccmVmIFNIQV9NT0RFX1NIQTI1NgorICAqIEBwYXJhbVtpbl0gIHUzMlN3YXBUeXBlIGlzIFNIQSBpbnB1dC9vdXRwdXQgZGF0YSBzd2FwIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBTSEFfTk9fU1dBUAorICAqICAgICAgICAgLSBccmVmIFNIQV9PVVRfU1dBUAorICAqICAgICAgICAgLSBccmVmIFNIQV9JTl9TV0FQCisgICogICAgICAgICAtIFxyZWYgU0hBX0lOX09VVF9TV0FQCisgICogQHBhcmFtW2luXSAgaG1hY19rZXlfbGVuICAgSE1BQyBrZXkgYnl0ZSBjb3VudAorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBTSEFfT3BlbihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMk9wTW9kZSwgdWludDMyX3QgdTMyU3dhcFR5cGUsIHVpbnQzMl90IGhtYWNfa2V5X2xlbikKK3sKKyAgICBjcnB0LT5ITUFDX0NUTCA9ICh1MzJPcE1vZGUgPDwgQ1JQVF9ITUFDX0NUTF9PUE1PREVfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAodTMyU3dhcFR5cGUgPDwgQ1JQVF9ITUFDX0NUTF9PVVRTV0FQX1Bvcyk7CisKKyAgICBpZihobWFjX2tleV9sZW4gIT0gMFVMKQorICAgIHsKKyAgICAgICAgY3JwdC0+SE1BQ19LRVlDTlQgPSBobWFjX2tleV9sZW47CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIFN0YXJ0IFNIQSBlbmNyeXB0CisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIHUzMkRNQU1vZGUgIFRERVMgRE1BIGNvbnRyb2wsIGluY2x1ZGluZzoKKyAgKiAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX09ORV9TSE9UICAgT25lIHNob3AgU0hBIGVuY3J5cHQuCisgICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9DT05USU5VRSAgIENvbnRpbnVvdXMgU0hBIGVuY3J5cHQuCisgICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9MQVNUICAgICAgIExhc3QgU0hBIGVuY3J5cHQgb2YgYSBzZXJpZXMgb2YgU0hBX1N0YXJ0LgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBTSEFfU3RhcnQoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJETUFNb2RlKQoreworICAgIGNycHQtPkhNQUNfQ1RMICY9IH4oMHg3VUwgPDwgQ1JQVF9ITUFDX0NUTF9ETUFMQVNUX1Bvcyk7CisgICAgY3JwdC0+SE1BQ19DVEwgfD0gQ1JQVF9ITUFDX0NUTF9TVEFSVF9Nc2sgfCAodTMyRE1BTW9kZSA8PCBDUlBUX0hNQUNfQ1RMX0RNQUxBU1RfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgU0hBIERNQSB0cmFuc2ZlcgorICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyU3JjQWRkciAgIFNIQSBETUEgc291cmNlIGFkZHJlc3MKKyAgKiBAcGFyYW1baW5dICB1MzJUcmFuc0NudCAgU0hBIERNQSB0cmFuc2ZlciBieXRlIGNvdW50CisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFNIQV9TZXRETUFUcmFuc2ZlcihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMlNyY0FkZHIsIHVpbnQzMl90IHUzMlRyYW5zQ250KQoreworICAgIGNycHQtPkhNQUNfU0FERFIgPSB1MzJTcmNBZGRyOworICAgIGNycHQtPkhNQUNfRE1BQ05UID0gdTMyVHJhbnNDbnQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmVhZCB0aGUgU0hBIGRpZ2VzdC4KKyAgKiBAcGFyYW1baW5dICAgY3JwdCAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW291dF0gIHUzMkRpZ2VzdCAgVGhlIFNIQSBlbmNyeXB0IG91dHB1dCBkaWdlc3QuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFNIQV9SZWFkKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyRGlnZXN0W10pCit7CisgICAgdWludDMyX3QgIGksIHdjbnQsIHJlZ19hZGRyOworCisgICAgaSA9IChjcnB0LT5ITUFDX0NUTCAmIENSUFRfSE1BQ19DVExfT1BNT0RFX01zaykgPj4gQ1JQVF9ITUFDX0NUTF9PUE1PREVfUG9zOworCisgICAgaWYoaSA9PSBTSEFfTU9ERV9TSEExKQorICAgIHsKKyAgICAgICAgd2NudCA9IDVVTDsKKyAgICB9CisgICAgZWxzZSBpZihpID09IFNIQV9NT0RFX1NIQTIyNCkKKyAgICB7CisgICAgICAgIHdjbnQgPSA3VUw7CisgICAgfQorICAgIGVsc2UgaWYoaSA9PSBTSEFfTU9ERV9TSEEyNTYpCisgICAgeworICAgICAgICB3Y250ID0gOFVMOworICAgIH0KKyAgICBlbHNlIGlmKGkgPT0gU0hBX01PREVfU0hBMzg0KQorICAgIHsKKyAgICAgICAgd2NudCA9IDEyVUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFNIQV9NT0RFX1NIQTUxMiAqLworICAgICAgICB3Y250ID0gMTZVTDsKKyAgICB9CisKKyAgICByZWdfYWRkciA9ICh1aW50MzJfdCkgJiAoY3JwdC0+SE1BQ19ER1NUWzBdKTsKKyAgICBmb3IoaSA9IDBVTDsgaSA8IHdjbnQ7IGkrKykKKyAgICB7CisgICAgICAgIHUzMkRpZ2VzdFtpXSA9IGlucHcocmVnX2FkZHIpOworICAgICAgICByZWdfYWRkciArPSA0VUw7CisgICAgfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBFQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgRUNDT1BfUE9JTlRfTVVMICAgICAoMHgwVUwgPDwgQ1JQVF9FQ0NfQ1RMX0VDQ09QX1BvcykKKyNkZWZpbmUgRUNDT1BfTU9EVUxFICAgICAgICAoMHgxVUwgPDwgQ1JQVF9FQ0NfQ1RMX0VDQ09QX1BvcykKKyNkZWZpbmUgRUNDT1BfUE9JTlRfQUREICAgICAoMHgyVUwgPDwgQ1JQVF9FQ0NfQ1RMX0VDQ09QX1BvcykKKyNkZWZpbmUgRUNDT1BfUE9JTlRfRE9VQkxFICAoMHgwVUwgPDwgQ1JQVF9FQ0NfQ1RMX0VDQ09QX1BvcykKKworI2RlZmluZSBNT0RPUF9ESVYgICAgICAgICAgICgweDBVTCA8PCBDUlBUX0VDQ19DVExfTU9ET1BfUG9zKQorI2RlZmluZSBNT0RPUF9NVUwgICAgICAgICAgICgweDFVTCA8PCBDUlBUX0VDQ19DVExfTU9ET1BfUG9zKQorI2RlZmluZSBNT0RPUF9BREQgICAgICAgICAgICgweDJVTCA8PCBDUlBUX0VDQ19DVExfTU9ET1BfUG9zKQorI2RlZmluZSBNT0RPUF9TVUIgICAgICAgICAgICgweDNVTCA8PCBDUlBUX0VDQ19DVExfTU9ET1BfUG9zKQorCitlbnVtCit7CisgICAgQ1VSVkVfR0ZfUCwKKyAgICBDVVJWRV9HRl8yTSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIERlZmluZSBlbGxpcHRpYyBjdXJ2ZSAoRUMpOiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAhWE9NX1NVUFBPUlQgLy8gUmVwbGFjZSB3aXRoIFhPTSByZWFkeSBjdXJ2ZSB0YWJsZQorc3RhdGljIGNvbnN0IEVDQ19DVVJWRSBfQ3VydmVbXSA9Cit7CisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBQLTE5MiA6IHleMj14XjMtYXgrYiAobW9kIHApICovCisgICAgICAgIENVUlZFX1BfMTkyLAorICAgICAgICA0OCwgICAgIC8qIEVjaGFyICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkMiLCAgIC8qICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMiICovCisgICAgICAgICI2NDIxMDUxOWU1OWM4MGU3MGZhN2U5YWI3MjI0MzA0OWZlYjhkZWVjYzE0NmI5YjEiLAorICAgICAgICAiMTg4ZGE4MGViMDMwOTBmNjdjYmYyMGViNDNhMTg4MDBmNGZmMGFmZDgyZmYxMDEyIiwKKyAgICAgICAgIjA3MTkyYjk1ZmZjOGRhNzg2MzEwMTFlZDZiMjRjZGQ1NzNmOTc3YTExZTc5NDgxMSIsCisgICAgICAgIDU4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkYiLCAgIC8qICI2Mjc3MTAxNzM1Mzg2NjgwNzYzODM1Nzg5NDIzMjA3NjY2NDE2MDgzOTA4NzAwMzkwMzI0OTYxMjc5IiAqLworICAgICAgICA1OCwgICAgIC8qIEVvbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOTlERUY4MzYxNDZCQzlCMUI0RDIyODMxIiwgICAvKiAiNjI3NzEwMTczNTM4NjY4MDc2MzgzNTc4OTQyMzE3NjA1OTAxMzc2NzE5NDc3MzE4Mjg0MjI4NDA4MSIgKi8KKyAgICAgICAgMTkyLCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDcsCisgICAgICAgIDIsCisgICAgICAgIDEsCisgICAgICAgIENVUlZFX0dGX1AKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogTklTVDogQ3VydmUgUC0yMjQgOiB5XjI9eF4zLWF4K2IgKG1vZCBwKSAqLworICAgICAgICBDVVJWRV9QXzIyNCwKKyAgICAgICAgNTYsICAgICAvKiBFY2hhciAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkUiLCAgLyogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzIiAqLworICAgICAgICAiYjQwNTBhODUwYzA0YjNhYmY1NDEzMjU2NTA0NGIwYjdkN2JmZDhiYTI3MGIzOTQzMjM1NWZmYjQiLAorICAgICAgICAiYjcwZTBjYmQ2YmI0YmY3ZjMyMTM5MGI5NGEwM2MxZDM1NmMyMTEyMjM0MzI4MGQ2MTE1YzFkMjEiLAorICAgICAgICAiYmQzNzYzODhiNWY3MjNmYjRjMjJkZmU2Y2Q0Mzc1YTA1YTA3NDc2NDQ0ZDU4MTk5ODUwMDdlMzQiLAorICAgICAgICA3MCwgICAgIC8qIEVwbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjAwMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovCisgICAgICAgIDcwLCAgICAgLyogRW9sICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTZBMkUwQjhGMDNFMTNERDI5NDU1QzVDMkEzRCIsICAvKiAiMDAyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYyNTk0MDQ1NzgwNzcxNDQyNDM5MTcyMTY4MjcyMjM2ODA2MSIgKi8KKyAgICAgICAgMjI0LCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDksCisgICAgICAgIDgsCisgICAgICAgIDMsCisgICAgICAgIENVUlZFX0dGX1AKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogTklTVDogQ3VydmUgUC0yNTYgOiB5XjI9eF4zLWF4K2IgKG1vZCBwKSAqLworICAgICAgICBDVVJWRV9QXzI1NiwKKyAgICAgICAgNjQsICAgICAvKiBFY2hhciAqLworICAgICAgICAiRkZGRkZGRkYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQyIsICAvKiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyIgKi8KKyAgICAgICAgIjVhYzYzNWQ4YWEzYTkzZTdiM2ViYmQ1NTc2OTg4NmJjNjUxZDA2YjBjYzUzYjBmNjNiY2UzYzNlMjdkMjYwNGIiLAorICAgICAgICAiNmIxN2QxZjJlMTJjNDI0N2Y4YmNlNmU1NjNhNDQwZjI3NzAzN2Q4MTJkZWIzM2EwZjRhMTM5NDVkODk4YzI5NiIsCisgICAgICAgICI0ZmUzNDJlMmZlMWE3ZjliOGVlN2ViNGE3YzBmOWUxNjJiY2UzMzU3NmIzMTVlY2VjYmI2NDA2ODM3YmY1MWY1IiwKKyAgICAgICAgNzgsICAgICAvKiBFcGwgKi8KKyAgICAgICAgIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiLCAgLyogIjExNTc5MjA4OTIxMDM1NjI0ODc2MjY5NzQ0Njk0OTQwNzU3MzUzMDA4NjE0MzQxNTI5MDMxNDE5NTUzMzYzMTMwODg2NzA5Nzg1Mzk1MSIgKi8KKyAgICAgICAgNzgsICAgICAvKiBFb2wgKi8KKyAgICAgICAgIkZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQkNFNkZBQURBNzE3OUU4NEYzQjlDQUMyRkM2MzI1NTEiLCAgLyogIjExNTc5MjA4OTIxMDM1NjI0ODc2MjY5NzQ0Njk0OTQwNzU3MzUyOTk5Njk1NTIyNDEzNTc2MDM0MjQyMjI1OTA2MTA2ODUxMjA0NDM2OSIgKi8KKyAgICAgICAgMjU2LCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDEwLAorICAgICAgICA1LAorICAgICAgICAyLAorICAgICAgICBDVVJWRV9HRl9QCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIFAtMzg0IDogeV4yPXheMy1heCtiIChtb2QgcCkgKi8KKyAgICAgICAgQ1VSVkVfUF8zODQsCisgICAgICAgIDk2LCAgICAgLyogRWNoYXIgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGQyIsICAvKiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzIiAqLworICAgICAgICAiYjMzMTJmYTdlMjNlZTdlNDk4OGUwNTZiZTNmODJkMTkxODFkOWM2ZWZlODE0MTEyMDMxNDA4OGY1MDEzODc1YWM2NTYzOThkOGEyZWQxOWQyYTg1YzhlZGQzZWMyYWVmIiwKKyAgICAgICAgImFhODdjYTIyYmU4YjA1Mzc4ZWIxYzcxZWYzMjBhZDc0NmUxZDNiNjI4YmE3OWI5ODU5Zjc0MWUwODI1NDJhMzg1NTAyZjI1ZGJmNTUyOTZjM2E1NDVlMzg3Mjc2MGFiNyIsCisgICAgICAgICIzNjE3ZGU0YTk2MjYyYzZmNWQ5ZTk4YmY5MjkyZGMyOWY4ZjQxZGJkMjg5YTE0N2NlOWRhMzExM2I1ZjBiOGMwMGE2MGIxY2UxZDdlODE5ZDdhNDMxZDdjOTBlYTBlNWYiLAorICAgICAgICAxMTYsICAgIC8qIEVwbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGIiwgIC8qICIzOTQwMjAwNjE5NjM5NDQ3OTIxMjI3OTA0MDEwMDE0MzYxMzgwNTA3OTczOTI3MDQ2NTQ0NjY2Nzk0ODI5MzQwNDI0NTcyMTc3MTQ5Njg3MDMyOTA0NzI2NjA4ODI1ODkzODAwMTg2MTYwNjk3MzExMjMxOSIgKi8KKyAgICAgICAgMTE2LCAgICAvKiBFb2wgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkM3NjM0RDgxRjQzNzJEREY1ODFBMERCMjQ4QjBBNzdBRUNFQzE5NkFDQ0M1Mjk3MyIsICAvKiAiMzk0MDIwMDYxOTYzOTQ0NzkyMTIyNzkwNDAxMDAxNDM2MTM4MDUwNzk3MzkyNzA0NjU0NDY2Njc5NDY5MDUyNzk2Mjc2NTkzOTkxMTMyNjM1NjkzOTg5NTYzMDgxNTIyOTQ5MTM1NTQ0MzM2NTM5NDI2NDMiICovCisgICAgICAgIDM4NCwgICAgLyoga2V5X2xlbiAqLworICAgICAgICAxMiwKKyAgICAgICAgMywKKyAgICAgICAgMiwKKyAgICAgICAgQ1VSVkVfR0ZfUAorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBQLTUyMSA6IHleMj14XjMtYXgrYiAobW9kIHApKi8KKyAgICAgICAgQ1VSVkVfUF81MjEsCisgICAgICAgIDEzMSwgICAgLyogRWNoYXIgKi8KKyAgICAgICAgIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDIiwgIC8qICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyIgKi8KKyAgICAgICAgIjA1MTk1M2ViOTYxOGUxYzlhMWY5MjlhMjFhMGI2ODU0MGVlYTJkYTcyNWI5OWIzMTVmM2I4YjQ4OTkxOGVmMTA5ZTE1NjE5Mzk1MWVjN2U5MzdiMTY1MmMwYmQzYmIxYmYwNzM1NzNkZjg4M2QyYzM0ZjFlZjQ1MWZkNDZiNTAzZjAwIiwKKyAgICAgICAgIjBjNjg1OGUwNmI3MDQwNGU5Y2Q5ZTNlY2I2NjIzOTViNDQyOWM2NDgxMzkwNTNmYjUyMWY4MjhhZjYwNmI0ZDNkYmFhMTRiNWU3N2VmZTc1OTI4ZmUxZGMxMjdhMmZmYThkZTMzNDhiM2MxODU2YTQyOWJmOTdlN2UzMWMyZTViZDY2IiwKKyAgICAgICAgIjExODM5Mjk2YTc4OWEzYmMwMDQ1YzhhNWZiNDJjN2QxYmQ5OThmNTQ0NDk1NzliNDQ2ODE3YWZiZDE3MjczZTY2MmM5N2VlNzI5OTVlZjQyNjQwYzU1MGI5MDEzZmFkMDc2MTM1M2M3MDg2YTI3MmMyNDA4OGJlOTQ3NjlmZDE2NjUwIiwKKyAgICAgICAgMTU3LCAgICAvKiBFcGwgKi8KKyAgICAgICAgIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgIC8qICI2ODY0Nzk3NjYwMTMwNjA5NzE0OTgxOTAwNzk5MDgxMzkzMjE3MjY5NDM1MzAwMTQzMzA1NDA5Mzk0NDYzNDU5MTg1NTQzMTgzMzk3NjU2MDUyMTIyNTU5NjQwNjYxNDU0NTU0OTc3Mjk2MzExMzkxNDgwODU4MDM3MTIxOTg3OTk5NzE2NjQzODEyNTc0MDI4MjkxMTE1MDU3MTUxIiAqLworICAgICAgICAxNTcsICAgIC8qIEVvbCAqLworICAgICAgICAiMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTUxODY4NzgzQkYyRjk2NkI3RkNDMDE0OEY3MDlBNUQwM0JCNUM5Qjg4OTlDNDdBRUJCNkZCNzFFOTEzODY0MDkiLCAgLyogIjY4NjQ3OTc2NjAxMzA2MDk3MTQ5ODE5MDA3OTkwODEzOTMyMTcyNjk0MzUzMDAxNDMzMDU0MDkzOTQ0NjM0NTkxODU1NDMxODMzOTc2NTUzOTQyNDUwNTc3NDYzMzMyMTcxOTc1MzI5NjM5OTYzNzEzNjMzMjExMTM4NjQ3Njg2MTI0NDAzODAzNDAzNzI4MDg4OTI3MDcwMDU0NDkiICovCisgICAgICAgIDUyMSwgICAgLyoga2V5X2xlbiAqLworICAgICAgICAzMiwKKyAgICAgICAgMzIsCisgICAgICAgIDMyLAorICAgICAgICBDVVJWRV9HRl9QCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIEItMTYzIDogeV4yK3h5PXheMytheF4yK2IgKi8KKyAgICAgICAgQ1VSVkVfQl8xNjMsCisgICAgICAgIDQxLCAgICAgLyogRWNoYXIgKi8KKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKKyAgICAgICAgIjIwYTYwMTkwN2I4Yzk1M2NhMTQ4MWViMTA1MTJmNzg3NDRhMzIwNWZkIiwKKyAgICAgICAgIjNmMGViYTE2Mjg2YTJkNTdlYTA5OTExNjhkNDk5NDYzN2U4MzQzZTM2IiwKKyAgICAgICAgIjBkNTFmYmM2YzcxYTAwOTRmYTJjZGQ1NDViMTFjNWMwYzc5NzMyNGYxIiwKKyAgICAgICAgNjgsICAgICAvKiBFcGwgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgIC8qICIyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYzMDY3MzU1NzkxNjI2MDAyNjMwODE0MzUxMDA2NjI5ODg4MSIgKi8KKyAgICAgICAgNDksICAgICAvKiBFb2wgKi8KKyAgICAgICAgIjQwMDAwMDAwMDAwMDAwMDAwMDAwMjkyRkU3N0U3MEMxMkE0MjM0QzMzIiwgICAvKiAiNTg0NjAwNjU0OTMyMzYxMTY3MjgxNDc0MjQ0Mjg3NjM5MDY4OTI1Njg0MzIwMTU4NyIgKi8KKyAgICAgICAgMTYzLCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDcsCisgICAgICAgIDYsCisgICAgICAgIDMsCisgICAgICAgIENVUlZFX0dGXzJNCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIEItMjMzIDogeV4yK3h5PXheMytheF4yK2IgKi8KKyAgICAgICAgQ1VSVkVfQl8yMzMsCisgICAgICAgIDU5LCAgICAgLyogRWNoYXIgNTkgKi8KKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKKyAgICAgICAgIjA2NjY0N2VkZTZjMzMyYzdmOGMwOTIzYmI1ODIxM2IzMzNiMjBlOWNlNDI4MWZlMTE1ZjdkOGY5MGFkIiwKKyAgICAgICAgIjBmYWM5ZGZjYmFjODMxM2JiMjEzOWYxYmI3NTVmZWY2NWJjMzkxZjhiMzZmOGY4ZWI3MzcxZmQ1NThiIiwKKyAgICAgICAgIjEwMDZhMDhhNDE5MDMzNTA2NzhlNTg1MjhiZWJmOGEwYmVmZjg2N2E3Y2EzNjcxNmY3ZTAxZjgxMDUyIiwKKyAgICAgICAgNjgsICAgICAvKiBFcGwgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgIC8qICIyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYzMDY3MzU1NzkxNjI2MDAyNjMwODE0MzUxMDA2NjI5ODg4MSIgKi8KKyAgICAgICAgNzAsICAgICAvKiBFb2wgKi8KKyAgICAgICAgIjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTNFOTc0RTcyRjhBNjkyMjAzMUQyNjAzQ0ZFMEQ3IiwgIC8qICI2OTAxNzQ2MzQ2NzkwNTYzNzg3NDM0NzU1ODYyMjc3MDI1NTU1ODM5ODEyNzM3MzQ1MDEzNTU1Mzc5MzgzNjM0NDg1NDYzIiAqLworICAgICAgICAyMzMsICAgIC8qIGtleV9sZW4gKi8KKyAgICAgICAgNzQsCisgICAgICAgIDc0LAorICAgICAgICA3NCwKKyAgICAgICAgQ1VSVkVfR0ZfMk0KKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogTklTVDogQ3VydmUgQi0yODMgOiB5XjIreHk9eF4zK2F4XjIrYiAqLworICAgICAgICBDVVJWRV9CXzI4MywKKyAgICAgICAgNzEsICAgICAvKiBFY2hhciAqLworICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorICAgICAgICAiMjdiNjgwYWM4Yjg1OTZkYTVhNGFmOGExOWEwMzAzZmNhOTdmZDc2NDUzMDlmYTJhNTgxNDg1YWY2MjYzZTMxM2I3OWEyZjUiLAorICAgICAgICAiNWY5MzkyNThkYjdkZDkwZTE5MzRmOGM3MGIwZGZlYzJlZWQyNWI4NTU3ZWFjOWM4MGUyZTE5OGY4Y2RiZWNkODZiMTIwNTMiLAorICAgICAgICAiMzY3Njg1NGZlMjQxNDFjYjk4ZmU2ZDRiMjBkMDJiNDUxNmZmNzAyMzUwZWRkYjA4MjY3NzljODEzZjBkZjQ1YmU4MTEyZjQiLAorICAgICAgICA2OCwgICAgIC8qIEVwbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLworICAgICAgICA4NSwgICAgIC8qIEVvbCAqLworICAgICAgICAiM0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRjkwMzk5NjYwRkM5MzhBOTAxNjVCMDQyQTdDRUZBREIzMDciLCAgLyogIjc3NzA2NzU1Njg5MDI5MTYyODM2Nzc4NDc2MjcyOTQwNzU2MjY1Njk2MjU5MjQzNzY5MDQ4ODkxMDkxOTY1MjY3NzAwNDQyNzc3ODczNzg2OTI4NzEiICovCisgICAgICAgIDI4MywgICAgLyoga2V5X2xlbiAqLworICAgICAgICAxMiwKKyAgICAgICAgNywKKyAgICAgICAgNSwKKyAgICAgICAgQ1VSVkVfR0ZfMk0KKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogTklTVDogQ3VydmUgQi00MDkgOiB5XjIreHk9eF4zK2F4XjIrYiAqLworICAgICAgICBDVVJWRV9CXzQwOSwKKyAgICAgICAgMTAzLCAgICAvKiBFY2hhciAqLworICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICIwMjFhNWMyYzhlZTlmZWI1YzRiOWE3NTNiN2I0NzZiN2ZkNjQyMmVmMWYzZGQ2NzQ3NjFmYTk5ZDZhYzI3YzhhOWExOTdiMjcyODIyZjZjZDU3YTU1YWE0ZjUwYWUzMTdiMTM1NDVmIiwKKyAgICAgICAgIjE1ZDQ4NjBkMDg4ZGRiMzQ5NmIwYzYwNjQ3NTYyNjA0NDFjZGU0YWYxNzcxZDRkYjAxZmZlNWIzNGU1OTcwM2RjMjU1YTg2OGExMTgwNTE1NjAzYWVhYjYwNzk0ZTU0YmI3OTk2YTciLAorICAgICAgICAiMDYxYjFjZmFiNmJlNWYzMmJiZmE3ODMyNGVkMTA2YTc2MzZiOWM1YTdiZDE5OGQwMTU4YWE0ZjU0ODhkMDhmMzg1MTRmMWZkZjRiNGY0MGQyMTgxYjM2ODFjMzY0YmEwMjczYzcwNiIsCisgICAgICAgIDY4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovCisgICAgICAgIDEyMywgICAgLyogRW9sICovCisgICAgICAgICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUyQUFENkE2MTJGMzMzMDdCRTVGQTQ3QzNDOUUwNTJGODM4MTY0Q0QzN0Q5QTIxMTczIiwgIC8qICI2NjEwNTU5Njg3OTAyNDg1OTg5NTE5MTUzMDgwMzI3NzEwMzk4Mjg0MDQ2ODI5NjQyODEyMTkyODQ2NDg3OTgzMDQxNTc3NzQ4MjczNzQ4MDUyMDgxNDM3MjM3NjIxNzkxMTA5NjU5Nzk4NjcyODgzNjY1Njc1MjY3NzEiICovCisgICAgICAgIDQwOSwgICAgLyoga2V5X2xlbiAqLworICAgICAgICA4NywKKyAgICAgICAgODcsCisgICAgICAgIDg3LAorICAgICAgICBDVVJWRV9HRl8yTQorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBCLTU3MSA6IHleMit4eT14XjMrYXheMitiICovCisgICAgICAgIENVUlZFX0JfNTcxLAorICAgICAgICAxNDMsICAgIC8qIEVjaGFyICovCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICIyZjQwZTdlMjIyMWYyOTVkZTI5NzExN2I3ZjNkNjJmNWM2YTk3ZmZjYjhjZWZmMWNkNmJhOGNlNGE5YTE4YWQ4NGZmYWJiZDhlZmE1OTMzMmJlN2FkNjc1NmE2NmUyOTRhZmQxODVhNzhmZjEyYWE1MjBlNGRlNzM5YmFjYTBjN2ZmZWZmN2YyOTU1NzI3YSIsCisgICAgICAgICIzMDMwMDFkMzRiODU2Mjk2YzE2YzBkNDBkM2NkNzc1MGE5M2QxZDI5NTVmYTgwYWE1ZjQwZmM4ZGI3YjJhYmRiZGU1Mzk1MGY0YzBkMjkzY2RkNzExYTM1YjY3ZmIxNDk5YWU2MDAzODYxNGYxMzk0YWJmYTNiNGM4NTBkOTI3ZTFlNzc2OWM4ZWVjMmQxOSIsCisgICAgICAgICIzN2JmMjczNDJkYTYzOWI2ZGNjZmZmZWI3M2Q2OWQ3OGM2YzI3YTYwMDljYmJjYTE5ODBmODUzMzkyMWU4YTY4NDQyM2U0M2JhYjA4YTU3NjI5MWFmOGY0NjFiYjJhOGIzNTMxZDJmMDQ4NWMxOWIxNmUyZjE1MTZlMjNkZDNjMWE0ODI3YWYxYjhhYzE1YiIsCisgICAgICAgIDY4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovCisgICAgICAgIDE3MiwgICAgLyogRW9sICovCisgICAgICAgICIzRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkU2NjFDRTE4RkY1NTk4NzMwODA1OUIxODY4MjM4NTFFQzdERDlDQTExNjFERTkzRDUxNzRENjZFODM4MkU5QkIyRkU4NEU0NyIsICAvKiAiMzg2NDUzNzUyMzAxNzI1ODM0NDY5NTM1MTg5MDkzMTk4NzM0NDI5ODkyNzMyOTcwNjQzNDk5ODY1NzIzNTI1MTQ1MTUxOTE0MjI4OTU2MDQyNDUzNjE0Mzk5OTM4OTQxNTc3MzA4MzEzMzg4MTEyMTkyNjk0NDQ4NjI0Njg3MjQ2MjgxNjgxMzA3MDIzNDUyODI4ODMwMzMzMjQxMTM5MzE5MTEwNTI4NTcwMyIgKi8KKyAgICAgICAgNTcxLCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDEwLAorICAgICAgICA1LAorICAgICAgICAyLAorICAgICAgICBDVVJWRV9HRl8yTQorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBLLTE2MyA6IHleMit4eT14XjMrYXheMitiICovCisgICAgICAgIENVUlZFX0tfMTYzLAorICAgICAgICA0MSwgICAgIC8qIEVjaGFyICovCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICIyZmUxM2MwNTM3YmJjMTFhY2FhMDdkNzkzZGU0ZTZkNWU1Yzk0ZWVlOCIsCisgICAgICAgICIyODkwNzBmYjA1ZDM4ZmY1ODMyMWYyZTgwMDUzNmQ1MzhjY2RhYTNkOSIsCisgICAgICAgIDY4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovCisgICAgICAgIDQ5LCAgICAgLyogRW9sICovCisgICAgICAgICI0MDAwMDAwMDAwMDAwMDAwMDAwMDIwMTA4QTJFMENDMEQ5OUY4QTVFRiIsICAvKiAiNTg0NjAwNjU0OTMyMzYxMTY3MjgxNDc0MTc1MzU5ODQ0ODM0ODMyOTExODU3NDA2MyIgKi8KKyAgICAgICAgMTYzLCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDcsCisgICAgICAgIDYsCisgICAgICAgIDMsCisgICAgICAgIENVUlZFX0dGXzJNCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIEstMjMzIDogeV4yK3h5PXheMytheF4yK2IgKi8KKyAgICAgICAgQ1VSVkVfS18yMzMsCisgICAgICAgIDU5LCAgICAgLyogRWNoYXIgNTkgKi8KKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKKyAgICAgICAgIjE3MjMyYmE4NTNhN2U3MzFhZjEyOWYyMmZmNDE0OTU2M2E0MTljMjZiZjUwYTRjOWQ2ZWVmYWQ2MTI2IiwKKyAgICAgICAgIjFkYjUzN2RlY2U4MTliN2Y3MGY1NTVhNjdjNDI3YThjZDliZjE4YWViOWI1NmUwYzExMDU2ZmFlNmEzIiwKKyAgICAgICAgNjgsICAgICAvKiBFcGwgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgICAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLworICAgICAgICA3MCwgICAgIC8qIEVvbCAqLworICAgICAgICAiODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OUQ1QkI5MTVCQ0Q0NkVGQjFBRDVGMTczQUJERiIsICAvKiAiMzQ1MDg3MzE3MzM5NTI4MTg5MzcxNzM3NzkzMTEzODUxMjc2MDU3MDk0MDk4ODg2MjI1MjEyNjMyODA4NzAyNDc0MTM0MyIgKi8KKyAgICAgICAgMjMzLCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDc0LAorICAgICAgICA3NCwKKyAgICAgICAgNzQsCisgICAgICAgIENVUlZFX0dGXzJNCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIEstMjgzIDogeV4yK3h5PXheMytheF4yK2IgKi8KKyAgICAgICAgQ1VSVkVfS18yODMsCisgICAgICAgIDcxLCAgICAgLyogRWNoYXIgKi8KKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKKyAgICAgICAgIjUwMzIxM2Y3OGNhNDQ4ODNmMWEzYjgxNjJmMTg4ZTU1M2NkMjY1ZjIzYzE1NjdhMTY4NzY5MTNiMGMyYWMyNDU4NDkyODM2IiwKKyAgICAgICAgIjFjY2RhMzgwZjFjOWUzMThkOTBmOTVkMDdlNTQyNmZlODdlNDVjMGU4MTg0Njk4ZTQ1OTYyMzY0ZTM0MTE2MTc3ZGQyMjU5IiwKKyAgICAgICAgNjgsICAgICAvKiBFcGwgKi8KKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgIC8qICIyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYzMDY3MzU1NzkxNjI2MDAyNjMwODE0MzUxMDA2NjI5ODg4MSIgKi8KKyAgICAgICAgODUsICAgICAvKiBFb2wgKi8KKyAgICAgICAgIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTlBRTJFRDA3NTc3MjY1REZGN0Y5NDQ1MUUwNjFFMTYzQzYxIiwgIC8qICIzODg1MzM3Nzg0NDUxNDU4MTQxODM4OTIzODEzNjQ3MDM3ODEzMjg0ODExNzMzNzkzMDYxMzI0Mjk1ODc0OTk3NTI5ODE1ODI5NzA0NDIyNjAzODczIiAqLworICAgICAgICAyODMsICAgIC8qIGtleV9sZW4gKi8KKyAgICAgICAgMTIsCisgICAgICAgIDcsCisgICAgICAgIDUsCisgICAgICAgIENVUlZFX0dGXzJNCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIE5JU1Q6IEN1cnZlIEstNDA5IDogeV4yK3h5PXheMytheF4yK2IgKi8KKyAgICAgICAgQ1VSVkVfS180MDksCisgICAgICAgIDEwMywgICAgLyogRWNoYXIgKi8KKyAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAorICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICIwNjBmMDVmNjU4ZjQ5YzFhZDNhYjE4OTBmNzE4NDIxMGVmZDA5ODdlMzA3Yzg0YzI3YWNjZmI4ZjlmNjdjYzJjNDYwMTg5ZWI1YWFhYTYyZWUyMjJlYjFiMzU1NDBjZmU5MDIzNzQ2IiwKKyAgICAgICAgIjFlMzY5MDUwYjdjNGU0MmFjYmExZGFjYmYwNDI5OWMzNDYwNzgyZjkxOGVhNDI3ZTYzMjUxNjVlOWVhMTBlM2RhNWY2YzQyZTljNTUyMTVhYTljYTI3YTU4NjNlYzQ4ZDhlMDI4NmIiLAorICAgICAgICA2OCwgICAgIC8qIEVwbCAqLworICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLworICAgICAgICAxMjMsICAgIC8qIEVvbCAqLworICAgICAgICAiN0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTVGODNCMkQ0RUEyMDQwMEVDNDU1N0Q1RUQzRTNFN0NBNUI0QjVDODNCOEUwMUU1RkNGIiwgIC8qICIzMzA1Mjc5ODQzOTUxMjQyOTk0NzU5NTc2NTQwMTYzODU1MTk5MTQyMDIzNDE0ODIxNDA2MDk2NDIzMjQzOTUwMjI4ODA3MTEyODkyNDkxOTEwNTA2NzMyNTg0NTc3Nzc0NTgwMTQwOTYzNjY1OTA2MTc3MzEzNTg2NzEiICovCisgICAgICAgIDQwOSwgICAgLyoga2V5X2xlbiAqLworICAgICAgICA4NywKKyAgICAgICAgODcsCisgICAgICAgIDg3LAorICAgICAgICBDVVJWRV9HRl8yTQorICAgIH0sCisgICAgeworICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBLLTU3MSA6IHleMit4eT14XjMrYXheMitiICovCisgICAgICAgIENVUlZFX0tfNTcxLAorICAgICAgICAxNDMsICAgIC8qIEVjaGFyICovCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCisgICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICIyNmViN2E4NTk5MjNmYmM4MjE4OTYzMWY4MTAzZmU0YWM5Y2EyOTcwMDEyZDVkNDYwMjQ4MDQ4MDE4NDFjYTQ0MzcwOTU4NDkzYjIwNWU2NDdkYTMwNGRiNGNlYjA4Y2JiZDFiYTM5NDk0Nzc2ZmI5ODhiNDcxNzRkY2E4OGM3ZTI5NDUyODNhMDFjODk3MiIsCisgICAgICAgICIzNDlkYzgwN2Y0ZmJmMzc0ZjRhZWFkZTNiY2E5NTMxNGRkNThjZWM5ZjMwN2E1NGZmYzYxZWZjMDA2ZDhhMmM5ZDQ5NzljMGFjNDRhZWE3NGZiZWJiYjlmNzcyYWVkY2I2MjBiMDFhN2JhN2FmMWIzMjA0MzBjODU5MTk4NGY2MDFjZDRjMTQzZWYxYzdhMyIsCisgICAgICAgIDY4LCAgICAgLyogRXBsICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovCisgICAgICAgIDE3MiwgICAgLyogRW9sICovCisgICAgICAgICIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzMTg1MEUxRjE5QTYzRTRCMzkxQThEQjkxN0Y0MTM4QjYzMEQ4NEJFNUQ2MzkzODFFOTFERUI0NUNGRTc3OEY2MzdDMTAwMSIsICAvKiAiMTkzMjI2ODc2MTUwODYyOTE3MjM0NzY3NTk0NTQ2NTk5MzY3MjE0OTQ2MzY2NDg1MzIxNzQ5OTMyODYxNzYyNTcyNTc1OTU3MTE0NDc4MDIxMjI2ODEzMzk3ODUyMjcwNjcxMTgzNDcwNjcxMjgwMDgyNTM1MTQ2MTI3MzY3NDk3NDA2NjYxNzMxMTkyOTY4MjQyMTYxNzA5MjUwMzU1NTczMzY4NTI3NjY3MyIgKi8KKyAgICAgICAgNTcxLCAgICAvKiBrZXlfbGVuICovCisgICAgICAgIDEwLAorICAgICAgICA1LAorICAgICAgICAyLAorICAgICAgICBDVVJWRV9HRl8yTQorICAgIH0sCit9OworI2VuZGlmCisKKworc3RhdGljIEVDQ19DVVJWRSAgKnBDdXJ2ZTsKK3N0YXRpYyBFQ0NfQ1VSVkUgIEN1cnZlX0NvcHk7CisKK3N0YXRpYyBFQ0NfQ1VSVkUgKiBnZXRfY3VydmUoRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlKTsKK3N0YXRpYyBpbnQzMl90IGVjY19pbml0X2N1cnZlKENSUFRfVCAqY3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlKTsKK3N0YXRpYyB2b2lkIHJ1bl9lY2NfY29kZWMoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCBtb2RlKTsKKworc3RhdGljIGNoYXIgIHRlbXBfaGV4X3N0clsxNjBdOworCitzdGF0aWMgdm9sYXRpbGUgdWludDMyX3QgZ19FQ0NfZG9uZSwgZ19FQ0NFUlJfZG9uZTsKKwordm9pZCBFQ0NfRHJpdmVySVNSKENSUFRfVCAqY3JwdCkKK3sKKyAgICBpZihjcnB0LT5JTlRTVFMgJiBDUlBUX0lOVFNUU19FQ0NJRl9Nc2spCisgICAgeworICAgICAgICBnX0VDQ19kb25lID0gMVVMOworICAgICAgICBjcnB0LT5JTlRTVFMgPSBDUlBUX0lOVFNUU19FQ0NJRl9Nc2s7CisgICAgICAgIC8qIHByaW50ZigiRUNDIGRvbmUgSVJRLlxuIik7ICovCisgICAgfQorCisgICAgaWYoY3JwdC0+SU5UU1RTICYgQ1JQVF9JTlRTVFNfRUNDRUlGX01zaykKKyAgICB7CisgICAgICAgIGdfRUNDRVJSX2RvbmUgPSAxVUw7CisgICAgICAgIGNycHQtPklOVFNUUyA9IENSUFRfSU5UU1RTX0VDQ0VJRl9Nc2s7CisgICAgICAgIC8qIHByaW50ZigiRUNDRVJSSUYgaXMgc2V0ISFcbiIpOyAqLworICAgIH0KK30KKworCisjaWYgRU5BQkxFX0RFQlVHCitzdGF0aWMgdm9pZCBkdW1wX2VjY19yZWcoY2hhciAqc3RyLCB1aW50MzJfdCB2b2xhdGlsZSByZWdzW10sIGludDMyX3QgY291bnQpCit7CisgICAgaW50MzJfdCAgaTsKKworICAgIHByaW50ZigiJXMgPT4gIiwgc3RyKTsKKyAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIweCUwOHggIiwgcmVnc1tpXSk7CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBkdW1wX2VjY19yZWcoY2hhciAqc3RyLCB1aW50MzJfdCB2b2xhdGlsZSByZWdzW10sIGludDMyX3QgY291bnQpIHsgKHZvaWQpc3RyOyAodm9pZClyZWdzOyAodm9pZCljb3VudDsgfQorI2VuZGlmCitzdGF0aWMgY2hhciAgY2gyaGV4KGNoYXIgY2gpCit7CisgICAgaWYoY2ggPD0gJzknKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoIC0gJzAnOworICAgIH0KKyAgICBlbHNlIGlmKChjaCA8PSAneicpICYmIChjaCA+PSAnYScpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoIC0gJ2EnICsgMTBVOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gY2ggLSAnQScgKyAxMFU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBIZXgyUmVnKGNoYXIgaW5wdXRbXSwgdWludDMyX3Qgdm9sYXRpbGUgcmVnW10pCit7CisgICAgY2hhciAgICAgIGhleDsKKyAgICBpbnQgICAgICAgc2ksIHJpOworICAgIHVpbnQzMl90ICBpLCB2YWwzMjsKKworICAgIHNpID0gKGludClzdHJsZW4oaW5wdXQpIC0gMTsKKyAgICByaSA9IDA7CisKKyAgICB3aGlsZShzaSA+PSAwKQorICAgIHsKKyAgICAgICAgdmFsMzIgPSAwVUw7CisgICAgICAgIGZvcihpID0gMFVMOyAoaSA8IDhVTCkgJiYgKHNpID49IDApOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGhleCA9IGNoMmhleChpbnB1dFtzaV0pOworICAgICAgICAgICAgdmFsMzIgfD0gKHVpbnQzMl90KWhleCA8PCAoaSAqIDRVTCk7CisgICAgICAgICAgICBzaS0tOworICAgICAgICB9CisgICAgICAgIHJlZ1tyaSsrXSA9IHZhbDMyOworICAgIH0KK30KKworc3RhdGljIHZvaWQgSGV4MlJlZ0V4KGNoYXIgaW5wdXRbXSwgdWludDMyX3Qgdm9sYXRpbGUgcmVnW10sIGludCBzaGlmdCkKK3sKKyAgICB1aW50MzJfdCAgaGV4LCBjYXJyeTsKKyAgICBpbnQgICAgICAgc2ksIHJpOworICAgIHVpbnQzMl90ICBpLCB2YWwzMjsKKworICAgIHNpID0gKGludClzdHJsZW4oaW5wdXQpIC0gMTsKKyAgICByaSA9IDA7CisgICAgY2FycnkgPSAwVTsKKyAgICB3aGlsZShzaSA+PSAwKQorICAgIHsKKyAgICAgICAgdmFsMzIgPSAwVUw7CisgICAgICAgIGZvcihpID0gMFVMOyAoaSA8IDhVTCkgJiYgKHNpID49IDApOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGhleCA9ICh1aW50MzJfdCljaDJoZXgoaW5wdXRbc2ldKTsKKyAgICAgICAgICAgIGhleCA8PD0gc2hpZnQ7CisKKyAgICAgICAgICAgIHZhbDMyIHw9ICh1aW50MzJfdCkoKGhleCAmIDB4RlUpIHwgY2FycnkpIDw8IChpICogNFVMKTsKKyAgICAgICAgICAgIGNhcnJ5ID0gKGhleCA+PiA0KSAmIDB4RlU7CisgICAgICAgICAgICBzaS0tOworICAgICAgICB9CisgICAgICAgIHJlZ1tyaSsrXSA9IHZhbDMyOworICAgIH0KKyAgICBpZihjYXJyeSAhPSAwVSkKKyAgICB7CisgICAgICAgIHJlZ1tyaV0gPSBjYXJyeTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgRXh0cmFjdCBzcGVjaWZpZWQgbmliYmxlIGZyb20gYW4gdW5zaWduZWQgd29yZCBpbiBjaGFyYWN0ZXIgZm9ybWF0LgorICAqICAgICAgICAgRm9yIGV4YW1wbGU6CisgICogICAgICAgICAgICAgICAgU3VwcG9zZSB2YWwzMiBpcyAweDc4NjU0MzIxMCwgZ2V0X050aF9uaWJibGVfY2hhcih2YWwzMiwgMykgd2lsbCByZXR1cm4gYSAnMycuCisgICogQHBhcmFtW2luXSAgdmFsMzIgICBUaGUgaW5wdXQgdW5zaWduZWQgd29yZAorICAqIEBwYXJhbVtpbl0gIGlkeCAgICAgVGhlIE50aCBuaWJibGUgdG8gYmUgZXh0cmFjdGVkLgorICAqIEByZXR1cm4gIFRoZSBuaWJibGUgaW4gY2hhcmFjdGVyIGZvcm1hdC4KKyAgKi8KK3N0YXRpYyBjaGFyIGdldF9OdGhfbmliYmxlX2NoYXIodWludDMyX3QgdmFsMzIsIHVpbnQzMl90IGlkeCkKK3sKKyAgICByZXR1cm4gaGV4X2NoYXJfdGJsWyh2YWwzMiA+PiAoaWR4ICogNFUpKSAmIDB4ZlUgXTsKK30KKworCitzdGF0aWMgdm9pZCBSZWcySGV4KGludDMyX3QgY291bnQsIHVpbnQzMl90IHZvbGF0aWxlIHJlZ1tdLCBjaGFyIG91dHB1dFtdKQoreworICAgIGludDMyX3QgICAgaWR4LCByaTsKKyAgICB1aW50MzJfdCAgIGk7CisKKyAgICBvdXRwdXRbY291bnRdID0gMFU7CisgICAgaWR4ID0gY291bnQgLSAxOworCisgICAgZm9yKHJpID0gMDsgaWR4ID49IDA7IHJpKyspCisgICAgeworICAgICAgICBmb3IoaSA9IDBVTDsgKGkgPCA4VUwpICYmIChpZHggPj0gMCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0W2lkeF0gPSBnZXRfTnRoX25pYmJsZV9jaGFyKHJlZ1tyaV0sIGkpOworICAgICAgICAgICAgaWR4LS07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IGVjY19pbml0X2N1cnZlKENSUFRfVCAqY3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlKQoreworICAgIGludDMyX3QgIGksIHJldCA9IDA7CisKKyAgICBwQ3VydmUgPSBnZXRfY3VydmUoZWNjX2N1cnZlKTsKKyAgICBpZihwQ3VydmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIENSUFRfREJHTVNHKCJDYW5ub3QgZmluZCBjdXJ2ZSAlZCEhXG4iLCBlY2NfY3VydmUpOworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19BW2ldID0gMFVMOworICAgICAgICAgICAgY3JwdC0+RUNDX0JbaV0gPSAwVUw7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWDFbaV0gPSAwVUw7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSAwVUw7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsKKyAgICAgICAgfQorCisgICAgICAgIEhleDJSZWcocEN1cnZlLT5FYSwgY3JwdC0+RUNDX0EpOworICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RWIsIGNycHQtPkVDQ19CKTsKKyAgICAgICAgSGV4MlJlZyhwQ3VydmUtPlB4LCBjcnB0LT5FQ0NfWDEpOworICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+UHksIGNycHQtPkVDQ19ZMSk7CisKKyAgICAgICAgQ1JQVF9EQkdNU0coIktleSBsZW5ndGggPSAlZFxuIiwgcEN1cnZlLT5rZXlfbGVuKTsKKyAgICAgICAgZHVtcF9lY2NfcmVnKCJDUlBUX0VDQ19DVVJWRV9BIiwgY3JwdC0+RUNDX0EsIDEwKTsKKyAgICAgICAgZHVtcF9lY2NfcmVnKCJDUlBUX0VDQ19DVVJWRV9CIiwgY3JwdC0+RUNDX0IsIDEwKTsKKyAgICAgICAgZHVtcF9lY2NfcmVnKCJDUlBUX0VDQ19QT0lOVF9YMSIsIGNycHQtPkVDQ19YMSwgMTApOworICAgICAgICBkdW1wX2VjY19yZWcoIkNSUFRfRUNDX1BPSU5UX1kxIiwgY3JwdC0+RUNDX1kxLCAxMCk7CisKKyAgICAgICAgaWYocEN1cnZlLT5HRiA9PSAoaW50KUNVUlZFX0dGXzJNKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTlswXSA9IDB4MVVMOworICAgICAgICAgICAgY3JwdC0+RUNDX05bKHBDdXJ2ZS0+a2V5X2xlbikgLyAzMl0gfD0gKDFVTCA8PCAoKHBDdXJ2ZS0+a2V5X2xlbikgJSAzMikpOworICAgICAgICAgICAgY3JwdC0+RUNDX05bKHBDdXJ2ZS0+aXJyZWR1Y2libGVfazEpIC8gMzJdIHw9ICgxVUwgPDwgKChwQ3VydmUtPmlycmVkdWNpYmxlX2sxKSAlIDMyKSk7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTlsocEN1cnZlLT5pcnJlZHVjaWJsZV9rMikgLyAzMl0gfD0gKDFVTCA8PCAoKHBDdXJ2ZS0+aXJyZWR1Y2libGVfazIpICUgMzIpKTsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OWyhwQ3VydmUtPmlycmVkdWNpYmxlX2szKSAvIDMyXSB8PSAoMVVMIDw8ICgocEN1cnZlLT5pcnJlZHVjaWJsZV9rMykgJSAzMikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgSGV4MlJlZyhwQ3VydmUtPlBwLCBjcnB0LT5FQ0NfTik7CisgICAgICAgIH0KKyAgICB9CisgICAgZHVtcF9lY2NfcmVnKCJDUlBUX0VDQ19DVVJWRV9OIiwgY3JwdC0+RUNDX04sIDEwKTsKKyAgICByZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgIGdldF9uaWJibGVfdmFsdWUoY2hhciBjKQoreworICAgIGNoYXIgY2g7CisKKyAgICBpZigoYyA+PSAnMCcpICYmIChjIDw9ICc5JykpCisgICAgeworICAgICAgICBjaCA9ICcwJzsKKyAgICAgICAgcmV0dXJuICgoaW50KWMgLSAoaW50KWNoKTsKKyAgICB9CisKKyAgICBpZigoYyA+PSAnYScpICYmIChjIDw9ICdmJykpCisgICAgeworICAgICAgICBjaCA9ICdhJzsKKyAgICAgICAgcmV0dXJuICgoaW50KWMgLSAoaW50KWNoICsgMTApOworICAgIH0KKworICAgIGlmKChjID49ICdBJykgJiYgKGMgPD0gJ0YnKSkKKyAgICB7CisgICAgICAgIGNoID0gJ0EnOworICAgICAgICByZXR1cm4gKChpbnQpYyAtIChpbnQpY2ggKyAxMCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIHByaXZhdGUga2V5IGlzIGxvY2F0ZWQgaW4gdmFsaWQgcmFuZ2Ugb2YgY3VydmUuCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIGVjY19jdXJ2ZSAgIFRoZSBwcmUtZGVmaW5lZCBFQ0MgY3VydmUuCisgICogQHBhcmFtW2luXSAgcHJpdmF0ZV9rICAgVGhlIGlucHV0IHByaXZhdGUga2V5LgorICAqIEByZXR1cm4gIDEgICAgSXMgdmFsaWQuCisgICogQHJldHVybiAgMCAgICBJcyBub3QgdmFsaWQuCisgICogQHJldHVybiAgLTEgICBJbnZhbGlkIGN1cnZlLgorICAqLworaW50IEVDQ19Jc1ByaXZhdGVLZXlWYWxpZChDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgIGNoYXIgcHJpdmF0ZV9rW10pCit7CisgICAgdWludDMyX3QgIGk7CisKKyAgICAodm9pZCljcnB0OworICAgIHBDdXJ2ZSA9IGdldF9jdXJ2ZShlY2NfY3VydmUpOworICAgIGlmKHBDdXJ2ZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmKHN0cmxlbihwcml2YXRlX2spIDwgc3RybGVuKHBDdXJ2ZS0+RW9yZGVyKSkKKyAgICB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmKHN0cmxlbihwcml2YXRlX2spID4gc3RybGVuKHBDdXJ2ZS0+RW9yZGVyKSkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGZvcihpID0gMFU7IGkgPCBzdHJsZW4ocHJpdmF0ZV9rKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYoZ2V0X25pYmJsZV92YWx1ZShwcml2YXRlX2tbaV0pIDwgZ2V0X25pYmJsZV92YWx1ZShwQ3VydmUtPkVvcmRlcltpXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgaWYoZ2V0X25pYmJsZV92YWx1ZShwcml2YXRlX2tbaV0pID4gZ2V0X25pYmJsZV92YWx1ZShwQ3VydmUtPkVvcmRlcltpXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKy8qKgorICAqIEBicmllZiAgR2l2ZW4gYSBwcml2YXRlIGtleSBhbmQgY3VydmUgdG8gZ2VuZXJhdGUgdGhlIHB1YmxpYyBrZXkgcGFpci4KKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgcHJpdmF0ZV9rICAgVGhlIGlucHV0IHByaXZhdGUga2V5LgorICAqIEBwYXJhbVtpbl0gIGVjY19jdXJ2ZSAgIFRoZSBwcmUtZGVmaW5lZCBFQ0MgY3VydmUuCisgICogQHBhcmFtW291dF0gcHVibGljX2sxICAgVGhlIG91dHB1dCBwdWJsaWNrIGtleSAxLgorICAqIEBwYXJhbVtvdXRdIHB1YmxpY19rMiAgIFRoZSBvdXRwdXQgcHVibGljayBrZXkgMi4KKyAgKiBAcmV0dXJuICAwICAgIFN1Y2Nlc3MuCisgICogQHJldHVybiAgLTEgICAiZWNjX2N1cnZlIiB2YWx1ZSBpcyBpbnZhbGlkLgorICAqLworaW50MzJfdCAgRUNDX0dlbmVyYXRlUHVibGljS2V5KENSUFRfVCAqY3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlLCBjaGFyICpwcml2YXRlX2ssIGNoYXIgcHVibGljX2sxW10sIGNoYXIgcHVibGljX2syW10pCit7CisgICAgaW50MzJfdCAgcmV0ID0gMCwgaTsKKyAgICB1aW50MzJfdCB1MzJUbXA7CisKKyAgICBpZihlY2NfaW5pdF9jdXJ2ZShjcnB0LCBlY2NfY3VydmUpICE9IDApCisgICAgeworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19LW2ldID0gMFVMOworICAgICAgICB9CisKKyAgICAgICAgSGV4MlJlZyhwcml2YXRlX2ssIGNycHQtPkVDQ19LKTsKKworICAgICAgICAvKiBzZXQgRlNFTCAoRmllbGQgc2VsZWN0aW9uKSAqLworICAgICAgICBpZihwQ3VydmUtPkdGID09IChpbnQpQ1VSVkVfR0ZfMk0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19DVEwgPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAgICAgICAgICAgLyogIENVUlZFX0dGX1AgKi8KKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX0NUTCA9IENSUFRfRUNDX0NUTF9GU0VMX01zazsKKyAgICAgICAgfQorCisgICAgICAgIGdfRUNDX2RvbmUgPSBnX0VDQ0VSUl9kb25lID0gMFVMOworICAgICAgICBjcnB0LT5FQ0NfQ1RMIHw9ICgodWludDMyX3QpcEN1cnZlLT5rZXlfbGVuIDw8IENSUFRfRUNDX0NUTF9DVVJWRU1fUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgRUNDT1BfUE9JTlRfTVVMIHwgQ1JQVF9FQ0NfQ1RMX1NUQVJUX01zazsKKworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICB1MzJUbXAgPSBnX0VDQ19kb25lOworICAgICAgICAgICAgdTMyVG1wIHw9IGdfRUNDRVJSX2RvbmU7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUodTMyVG1wID09IDBVTCk7CisKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCBjcnB0LT5FQ0NfWDEsIHB1YmxpY19rMSk7CisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1kxLCBwdWJsaWNfazIpOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKworLyoqCisgICogQGJyaWVmICBHaXZlbiBhIGN1cnZlIHBhcmFtZXRlciwgdGhlIG90aGVyIHBhcnR5J3MgcHVibGljIGtleSwgYW5kIG9uZSdzIG93biBwcml2YXRlIGtleSB0byBnZW5lcmF0ZSB0aGUgc2VjcmV0IFouCisgICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZQorICAqIEBwYXJhbVtpbl0gIGVjY19jdXJ2ZSAgIFRoZSBwcmUtZGVmaW5lZCBFQ0MgY3VydmUuCisgICogQHBhcmFtW2luXSAgcHJpdmF0ZV9rICAgT25lJ3Mgb3duIHByaXZhdGUga2V5LgorICAqIEBwYXJhbVtpbl0gIHB1YmxpY19rMSAgIFRoZSBvdGhlciBwYXJ0eSdzIHB1YmxpY2sga2V5IDEuCisgICogQHBhcmFtW2luXSAgcHVibGljX2syICAgVGhlIG90aGVyIHBhcnR5J3MgcHVibGljayBrZXkgMi4KKyAgKiBAcGFyYW1bb3V0XSBzZWNyZXRfeiAgICBUaGUgRUNDIENESCBzZWNyZXQgWi4KKyAgKiBAcmV0dXJuICAwICAgIFN1Y2Nlc3MuCisgICogQHJldHVybiAgLTEgICAiZWNjX2N1cnZlIiB2YWx1ZSBpcyBpbnZhbGlkLgorICAqLworaW50MzJfdCAgRUNDX0dlbmVyYXRlU2VjcmV0WihDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqcHJpdmF0ZV9rLCBjaGFyIHB1YmxpY19rMVtdLCBjaGFyIHB1YmxpY19rMltdLCBjaGFyIHNlY3JldF96W10pCit7CisgICAgaW50MzJfdCAgaSwgcmV0ID0gMDsKKyAgICB1aW50MzJfdCB1MzJUbXA7CisKKyAgICBpZihlY2NfaW5pdF9jdXJ2ZShjcnB0LCBlY2NfY3VydmUpICE9IDApCisgICAgeworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19LW2ldID0gMFVMOworICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gMFVMOworICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOworICAgICAgICB9CisKKyAgICAgICAgaWYoKGVjY19jdXJ2ZSA9PSBDVVJWRV9CXzE2MykgfHwgKGVjY19jdXJ2ZSA9PSBDVVJWRV9CXzIzMykgfHwgKGVjY19jdXJ2ZSA9PSBDVVJWRV9CXzI4MykgfHwKKyAgICAgICAgICAgICAgICAoZWNjX2N1cnZlID09IENVUlZFX0JfNDA5KSB8fCAoZWNjX2N1cnZlID09IENVUlZFX0JfNTcxKSB8fCAoZWNjX2N1cnZlID09IENVUlZFX0tfMTYzKSkKKyAgICAgICAgeworICAgICAgICAgICAgSGV4MlJlZ0V4KHByaXZhdGVfaywgY3JwdC0+RUNDX0ssIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKGVjY19jdXJ2ZSA9PSBDVVJWRV9LXzIzMykgfHwgKGVjY19jdXJ2ZSA9PSBDVVJWRV9LXzI4MykgfHwKKyAgICAgICAgICAgICAgICAoZWNjX2N1cnZlID09IENVUlZFX0tfNDA5KSB8fCAoZWNjX2N1cnZlID09IENVUlZFX0tfNTcxKSkKKyAgICAgICAgeworICAgICAgICAgICAgSGV4MlJlZ0V4KHByaXZhdGVfaywgY3JwdC0+RUNDX0ssIDIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgSGV4MlJlZyhwcml2YXRlX2ssIGNycHQtPkVDQ19LKTsKKyAgICAgICAgfQorCisgICAgICAgIEhleDJSZWcocHVibGljX2sxLCBjcnB0LT5FQ0NfWDEpOworICAgICAgICBIZXgyUmVnKHB1YmxpY19rMiwgY3JwdC0+RUNDX1kxKTsKKworICAgICAgICAvKiBzZXQgRlNFTCAoRmllbGQgc2VsZWN0aW9uKSAqLworICAgICAgICBpZihwQ3VydmUtPkdGID09IChpbnQpQ1VSVkVfR0ZfMk0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19DVEwgPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAgICAgICAgICAgLyogIENVUlZFX0dGX1AgKi8KKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX0NUTCA9IENSUFRfRUNDX0NUTF9GU0VMX01zazsKKyAgICAgICAgfQorICAgICAgICBnX0VDQ19kb25lID0gZ19FQ0NFUlJfZG9uZSA9IDBVTDsKKyAgICAgICAgY3JwdC0+RUNDX0NUTCB8PSAoKHVpbnQzMl90KXBDdXJ2ZS0+a2V5X2xlbiA8PCBDUlBUX0VDQ19DVExfQ1VSVkVNX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgICAgIEVDQ09QX1BPSU5UX01VTCB8IENSUFRfRUNDX0NUTF9TVEFSVF9Nc2s7CisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgdTMyVG1wID0gZ19FQ0NfZG9uZTsKKyAgICAgICAgICAgIHUzMlRtcCB8PSBnX0VDQ0VSUl9kb25lOworICAgICAgICB9CisgICAgICAgIHdoaWxlKHUzMlRtcCA9PSAwVUwpOworCisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1gxLCBzZWNyZXRfeik7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcnVuX2VjY19jb2RlYyhDUlBUX1QgKmNycHQsIHVpbnQzMl90IG1vZGUpCit7CisgICAgdWludDMyX3QgdTMyVG1wOworCisgICAgaWYoKG1vZGUgJiBDUlBUX0VDQ19DVExfRUNDT1BfTXNrKSA9PSBFQ0NPUF9NT0RVTEUpCisgICAgeworICAgICAgICBjcnB0LT5FQ0NfQ1RMID0gQ1JQVF9FQ0NfQ1RMX0ZTRUxfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZihwQ3VydmUtPkdGID09IChpbnQpQ1VSVkVfR0ZfMk0pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHBvaW50ICovCisgICAgICAgICAgICBjcnB0LT5FQ0NfQ1RMID0gMFVMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ1VSVkVfR0ZfUCAqLworICAgICAgICAgICAgY3JwdC0+RUNDX0NUTCA9IENSUFRfRUNDX0NUTF9GU0VMX01zazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdfRUNDX2RvbmUgPSBnX0VDQ0VSUl9kb25lID0gMFVMOworICAgIGNycHQtPkVDQ19DVEwgfD0gKCh1aW50MzJfdClwQ3VydmUtPmtleV9sZW4gPDwgQ1JQVF9FQ0NfQ1RMX0NVUlZFTV9Qb3MpIHwgbW9kZSB8IENSUFRfRUNDX0NUTF9TVEFSVF9Nc2s7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgdTMyVG1wID0gZ19FQ0NfZG9uZTsKKyAgICAgICAgdTMyVG1wIHw9IGdfRUNDRVJSX2RvbmU7CisgICAgfQorICAgIHdoaWxlKHUzMlRtcCA9PSAwVUwpOworCisgICAgd2hpbGUoY3JwdC0+RUNDX1NUUyAmIENSUFRfRUNDX1NUU19CVVNZX01zaykgeyB9Cit9CisKKy8qKgorICAqIEBicmllZiAgRUNEU0EgZGlnaXRhbCBzaWduYXR1cmUgZ2VuZXJhdGlvbi4KKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgZWNjX2N1cnZlICAgVGhlIHByZS1kZWZpbmVkIEVDQyBjdXJ2ZS4KKyAgKiBAcGFyYW1baW5dICBtZXNzYWdlICAgICBUaGUgaGFzaCB2YWx1ZSBvZiBzb3VyY2UgY29udGV4dC4KKyAgKiBAcGFyYW1baW5dICBkICAgICAgICAgICBUaGUgcHJpdmF0ZSBrZXkuCisgICogQHBhcmFtW2luXSAgayAgICAgICAgICAgVGhlIHNlbGVjdGVkIHJhbmRvbSBpbnRlZ2VyLgorICAqIEBwYXJhbVtvdXRdIFIgICAgICAgICAgIFIgb2YgdGhlIChSLFMpIHBhaXIgZGlnaXRhbCBzaWduYXR1cmUKKyAgKiBAcGFyYW1bb3V0XSBTICAgICAgICAgICBTIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlCisgICogQHJldHVybiAgMCAgICBTdWNjZXNzLgorICAqIEByZXR1cm4gIC0xICAgImVjY19jdXJ2ZSIgdmFsdWUgaXMgaW52YWxpZC4KKyAgKi8KK2ludDMyX3QgIEVDQ19HZW5lcmF0ZVNpZ25hdHVyZShDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkLCBjaGFyICprLCBjaGFyICpSLCBjaGFyICpTKQoreworICAgIHVpbnQzMl90IHZvbGF0aWxlIHRlbXBfcmVzdWx0MVsxOF0sIHRlbXBfcmVzdWx0MlsxOF07CisgICAgaW50MzJfdCAgaSwgcmV0ID0gMDsKKworICAgIGlmKGVjY19pbml0X2N1cnZlKGNycHQsIGVjY19jdXJ2ZSkgIT0gMCkKKyAgICB7CisgICAgICAgIHJldCA9IC0xOworICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKworICAgICAgICAvKgorICAgICAgICAgKiAgIDEuIENhbGN1bGF0ZSBlID0gSEFTSChtKSwgd2hlcmUgSEFTSCBpcyBhIGNyeXB0b2dyYXBoaWMgaGFzaGluZyBhbGdvcml0aG0sIChpLmUuIFNIQS0xKQorICAgICAgICAgKiAgICAgICgxKSBVc2UgU0hBIHRvIGNhbGN1bGF0ZSBlCisgICAgICAgICAqLworCisgICAgICAgIC8qICAgMi4gU2VsZWN0IGEgcmFuZG9tIGludGVnZXIgayBmb3JtIFsxLCBuLTFdCisgICAgICAgICAqICAgICAgKDEpIE5vdGljZSB0aGF0IG4gaXMgb3JkZXIsIG5vdCBwcmltZSBtb2R1bHVzIG9yIGlycmVkdWNpYmxlIHBvbHlub21pYWwgZnVuY3Rpb24KKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogICAzLiBDb21wdXRlIHIgPSB4MSAobW9kIG4pLCB3aGVyZSAoeDEsIHkxKSA9IGsgKiBHLiBJZiByID0gMCwgZ28gdG8gc3RlcCAyCisgICAgICAgICAqICAgICAgKDEpIFdyaXRlIHRoZSBjdXJ2ZSBwYXJhbWV0ZXIgQSwgQiwgYW5kIGN1cnZlIGxlbmd0aCBNIHRvIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDIpIFdyaXRlIHRoZSBwcmltZSBtb2R1bHVzIG9yIGlycmVkdWNpYmxlIHBvbHlub21pYWwgZnVuY3Rpb24gdG8gTiByZWdpc3RlcnMgYWNjb3JkaW5nCisgICAgICAgICAqICAgICAgKDMpIFdyaXRlIHRoZSBwb2ludCBHKHgsIHkpIHRvIFgxLCBZMSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoNCkgV3JpdGUgdGhlIHJhbmRvbSBpbnRlZ2VyIGsgdG8gSyByZWdpc3RlcgorICAgICAgICAgKiAgICAgICg1KSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMAorICAgICAgICAgKiAgICAgICg2KSBTZXQgRlNFTChDUlBUX0VDQ19DVExbOF0pIGFjY29yZGluZyB0byB1c2VkIGN1cnZlIG9mIHByaW1lIGZpZWxkIG9yIGJpbmFyeSBmaWVsZAorICAgICAgICAgKiAgICAgICg3KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDgpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDkpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzIGFjY29yZGluZworICAgICAgICAgKiAgICAgICgxMCkgV3JpdGUgMHgwIHRvIFkxIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgxMSkgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDEKKyAgICAgICAgICogICAgICAoMTIpIFNldCBNT1BPUChDUlBUX0VDQ19DVExbMTI6MTFdKSB0byAxMAorICAgICAgICAgKiAgICAgICgxMykgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMSAgICAgICAgICoKKyAgICAgICAgICogICAgICAoMTQpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDE1KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgcgorICAgICAgICAgKi8KKworICAgICAgICAvKiAzLSg0KSBXcml0ZSB0aGUgcmFuZG9tIGludGVnZXIgayB0byBLIHJlZ2lzdGVyICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19LW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcoaywgY3JwdC0+RUNDX0spOworCisgICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfUE9JTlRfTVVMKTsKKworICAgICAgICAvKiAgMy0oOSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIHRvIE4gcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcocEN1cnZlLT5Fb3JkZXIsIGNycHQtPkVDQ19OKTsKKworICAgICAgICAvKiAzLSgxMCkgV3JpdGUgMHgwIHRvIFkxIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSAwVUw7CisgICAgICAgIH0KKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX0FERCk7CisKKyAgICAgICAgLyogMy0oMTUpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCByICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBfcmVzdWx0MVtpXSA9IGNycHQtPkVDQ19YMVtpXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF9yZXN1bHQxLCBSKTsKKworICAgICAgICAvKgorICAgICAgICAgKiAgIDQuIENvbXB1dGUgcyA9IGsgPyAxIKHRIChlICsgZCCh0SByKShtb2QgbikuIElmIHMgPSAwLCBnbyB0byBzdGVwIDIKKyAgICAgICAgICogICAgICAoMSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIHRvIE4gcmVnaXN0ZXJzIGFjY29yZGluZworICAgICAgICAgKiAgICAgICgyKSBXcml0ZSAweDEgdG8gWTEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDMpIFdyaXRlIHRoZSByYW5kb20gaW50ZWdlciBrIHRvIFgxIHJlZ2lzdGVycyBhY2NvcmRpbmcKKyAgICAgICAgICogICAgICAoNCkgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDEKKyAgICAgICAgICogICAgICAoNSkgU2V0IE1PUE9QKENSUFRfRUNDX0NUTFsxMjoxMV0pIHRvIDAwCisgICAgICAgICAqICAgICAgKDYpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEKKyAgICAgICAgICogICAgICAoNykgV2FpdCBmb3IgQlVTWShDUlBUX0VDQ19TVFNbMF0pIGJlIGNsZWFyZWQKKyAgICAgICAgICogICAgICAoOCkgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IGteLTEKKyAgICAgICAgICogICAgICAoOSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMTApIFdyaXRlIHIsIGQgdG8gWDEsIFkxIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgxMSkgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDEKKyAgICAgICAgICogICAgICAoMTIpIFNldCBNT1BPUChDUlBUX0VDQ19DVExbMTI6MTFdKSB0byAwMQorICAgICAgICAgKiAgICAgICgxMykgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQorICAgICAgICAgKiAgICAgICgxNCkgV2FpdCBmb3IgQlVTWShDUlBUX0VDQ19TVFNbMF0pIGJlIGNsZWFyZWQKKyAgICAgICAgICogICAgICAoMTUpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciB0byBOIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgxNikgV3JpdGUgZSB0byBZMSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMTcpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxCisgICAgICAgICAqICAgICAgKDE4KSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMTAKKyAgICAgICAgICogICAgICAoMTkpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEKKyAgICAgICAgICogICAgICAoMjApIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDIxKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgyMikgV3JpdGUga14tMSB0byBZMSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMjMpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxCisgICAgICAgICAqICAgICAgKDI0KSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMDEKKyAgICAgICAgICogICAgICAoMjUpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEKKyAgICAgICAgICogICAgICAoMjYpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDI3KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgcworICAgICAgICAgKi8KKworICAgICAgICAvKiBTL1c6IEdGcF9hZGRfbW9kX29yZGVyKHBDdXJ2ZS0+a2V5X2xlbisyLCAwLCB4MSwgYSwgUik7ICovCisKKyAgICAgICAgLyogIDQtKDEpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciB0byBOIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7CisKKyAgICAgICAgLyogIDQtKDIpIFdyaXRlIDB4MSB0byBZMSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIGNycHQtPkVDQ19ZMVswXSA9IDB4MVVMOworCisgICAgICAgIC8qICA0LSgzKSBXcml0ZSB0aGUgcmFuZG9tIGludGVnZXIgayB0byBYMSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcoaywgY3JwdC0+RUNDX1gxKTsKKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX0RJVik7CisKKyNpZiBFTkFCTEVfREVCVUcKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCBjcnB0LT5FQ0NfWDEsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCIoNykgb3V0cHV0ID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisjZW5kaWYKKworICAgICAgICAvKiAgNC0oOCkgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IGteLTEgKi8KKworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wX3Jlc3VsdDJbaV0gPSBjcnB0LT5FQ0NfWDFbaV07CisgICAgICAgIH0KKworI2lmIEVOQUJMRV9ERUJVRworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MiwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coImteLTEgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsKKyNlbmRpZgorCisgICAgICAgIC8qICA0LSg5KSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7CisKKyAgICAgICAgLyogIDQtKDEwKSBXcml0ZSByLCBkIHRvIFgxLCBZMSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gdGVtcF9yZXN1bHQxW2ldOworICAgICAgICB9CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcoZCwgY3JwdC0+RUNDX1kxKTsKKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX01VTCk7CisKKyNpZiBFTkFCTEVfREVCVUcKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCBjcnB0LT5FQ0NfWDEsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCIoMTQpIG91dHB1dCA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworI2VuZGlmCisKKyAgICAgICAgLyogIDQtKDE1KSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgdG8gTiByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkVvcmRlciwgY3JwdC0+RUNDX04pOworCisgICAgICAgIC8qICA0LSgxNikgV3JpdGUgZSB0byBZMSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOworICAgICAgICB9CisKKyAgICAgICAgSGV4MlJlZyhtZXNzYWdlLCBjcnB0LT5FQ0NfWTEpOworCisgICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfTU9EVUxFIHwgTU9ET1BfQUREKTsKKworI2lmIEVOQUJMRV9ERUJVRworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIGNycHQtPkVDQ19YMSwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIigyMCkgb3V0cHV0ID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisjZW5kaWYKKworICAgICAgICAvKiAgNC0oMjEpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcocEN1cnZlLT5Fb3JkZXIsIGNycHQtPkVDQ19OKTsKKworICAgICAgICAvKiAgNC0oMjIpIFdyaXRlIGteLTEgdG8gWTEgcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IHRlbXBfcmVzdWx0MltpXTsKKyAgICAgICAgfQorCisgICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfTU9EVUxFIHwgTU9ET1BfTVVMKTsKKworICAgICAgICAvKiAgNC0oMjcpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCBzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBfcmVzdWx0MltpXSA9IGNycHQtPkVDQ19YMVtpXTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF9yZXN1bHQyLCBTKTsKKworICAgIH0gIC8qIHJldCA9PSAwICovCisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgIEVDRFNBIGRvZ290YWwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi4KKyAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlCisgICogQHBhcmFtW2luXSAgZWNjX2N1cnZlICAgVGhlIHByZS1kZWZpbmVkIEVDQyBjdXJ2ZS4KKyAgKiBAcGFyYW1baW5dICBtZXNzYWdlICAgICBUaGUgaGFzaCB2YWx1ZSBvZiBzb3VyY2UgY29udGV4dC4KKyAgKiBAcGFyYW1baW5dICBwdWJsaWNfazEgICBUaGUgcHVibGljIGtleSAxLgorICAqIEBwYXJhbVtpbl0gIHB1YmxpY19rMiAgIFRoZSBwdWJsaWMga2V5IDIuCisgICogQHBhcmFtW2luXSAgUiAgICAgICAgICAgUiBvZiB0aGUgKFIsUykgcGFpciBkaWdpdGFsIHNpZ25hdHVyZQorICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgIFMgb2YgdGhlIChSLFMpIHBhaXIgZGlnaXRhbCBzaWduYXR1cmUKKyAgKiBAcmV0dXJuICAwICAgIFN1Y2Nlc3MuCisgICogQHJldHVybiAgLTEgICAiZWNjX2N1cnZlIiB2YWx1ZSBpcyBpbnZhbGlkLgorICAqIEByZXR1cm4gIC0yICAgVmVyaWZpY2F0aW9uIGZhaWxlZC4KKyAgKi8KK2ludDMyX3QgIEVDQ19WZXJpZnlTaWduYXR1cmUoQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnB1YmxpY19rMSwgY2hhciAqcHVibGljX2syLCBjaGFyICpSLCBjaGFyICpTKQoreworICAgIHVpbnQzMl90ICB0ZW1wX3Jlc3VsdDFbMThdLCB0ZW1wX3Jlc3VsdDJbMThdOworICAgIHVpbnQzMl90ICB0ZW1wX3hbMThdLCB0ZW1wX3lbMThdOworICAgIGludDMyX3QgICBpLCByZXQgPSAwOworCisgICAgLyoKKyAgICAgKiAgIDEuIFZlcmlmeSB0aGF0IHIgYW5kIHMgYXJlIGludGVnZXJzIGluIHRoZSBpbnRlcnZhbCBbMSwgbi0xXS4gSWYgbm90LCB0aGUgc2lnbmF0dXJlIGlzIGludmFsaWQKKyAgICAgKiAgIDIuIENvbXB1dGUgZSA9IEhBU0ggKG0pLCB3aGVyZSBIQVNIIGlzIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBpbiBzaWduYXR1cmUgZ2VuZXJhdGlvbgorICAgICAqICAgICAgKDEpIFVzZSBTSEEgdG8gY2FsY3VsYXRlIGUKKyAgICAgKi8KKworICAgIC8qCisgICAgICogICAzLiBDb21wdXRlIHcgPSBzXi0xIChtb2QgbikKKyAgICAgKiAgICAgICgxKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgdG8gTiByZWdpc3RlcnMKKyAgICAgKiAgICAgICgyKSBXcml0ZSAweDEgdG8gWTEgcmVnaXN0ZXJzCisgICAgICogICAgICAoMykgV3JpdGUgcyB0byBYMSByZWdpc3RlcnMKKyAgICAgKiAgICAgICg0KSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMQorICAgICAqICAgICAgKDUpIFNldCBNT1BPUChDUlBUX0VDQ19DVExbMTI6MTFdKSB0byAwMAorICAgICAqICAgICAgKDYpIFNldCBGU0VMKENSUFRfRUNDX0NUTFs4XSkgYWNjb3JkaW5nIHRvIHVzZWQgY3VydmUgb2YgcHJpbWUgZmllbGQgb3IgYmluYXJ5IGZpZWxkCisgICAgICogICAgICAoNykgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQorICAgICAqICAgICAgKDgpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICogICAgICAoOSkgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHcKKyAgICAgKi8KKworICAgIGlmKGVjY19pbml0X2N1cnZlKGNycHQsIGVjY19jdXJ2ZSkgIT0gMCkKKyAgICB7CisgICAgICAgIHJldCA9IC0xOworICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKworICAgICAgICAvKiAgMy0oMSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIHRvIE4gcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcocEN1cnZlLT5Fb3JkZXIsIGNycHQtPkVDQ19OKTsKKworICAgICAgICAvKiAgMy0oMikgV3JpdGUgMHgxIHRvIFkxIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgY3JwdC0+RUNDX1kxWzBdID0gMHgxVUw7CisKKyAgICAgICAgLyogIDMtKDMpIFdyaXRlIHMgdG8gWDEgcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIENSUFQtPkVDQ19YMVtpXSA9IDBVTDsKKyAgICAgICAgfQorICAgICAgICBIZXgyUmVnKFMsIGNycHQtPkVDQ19YMSk7CisKKyAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9ESVYpOworCisgICAgICAgIC8qICAzLSg5KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgdyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wX3Jlc3VsdDJbaV0gPSBjcnB0LT5FQ0NfWDFbaV07CisgICAgICAgIH0KKworI2lmIEVOQUJMRV9ERUJVRworICAgICAgICBDUlBUX0RCR01TRygiZSA9ICVzXG4iLCBtZXNzYWdlKTsKKyAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3Jlc3VsdDIsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCJ3ID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIENSUFRfREJHTVNHKCJvID0gJXMgKG9yZGVyKVxuIiwgcEN1cnZlLT5Fb3JkZXIpOworI2VuZGlmCisKKyAgICAgICAgLyoKKyAgICAgICAgICogICA0LiBDb21wdXRlIHUxID0gZSCh0SB3IChtb2QgbikgYW5kIHUyID0gciCh0SB3IChtb2QgbikKKyAgICAgICAgICogICAgICAoMSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMikgV3JpdGUgZSwgdyB0byBYMSwgWTEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDMpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxCisgICAgICAgICAqICAgICAgKDQpIFNldCBNT1BPUChDUlBUX0VDQ19DVExbMTI6MTFdKSB0byAwMQorICAgICAgICAgKiAgICAgICg1KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDYpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDcpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCB1MQorICAgICAgICAgKiAgICAgICg4KSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICg5KSBXcml0ZSByLCB3IHRvIFgxLCBZMSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMTApIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxCisgICAgICAgICAqICAgICAgKDExKSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMDEKKyAgICAgICAgICogICAgICAoMTIpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEKKyAgICAgICAgICogICAgICAoMTMpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDE0KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgdTIKKyAgICAgICAgICovCisKKyAgICAgICAgLyogIDQtKDEpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19OW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcocEN1cnZlLT5Fb3JkZXIsIGNycHQtPkVDQ19OKTsKKworICAgICAgICAvKiA0LSgyKSBXcml0ZSBlLCB3IHRvIFgxLCBZMSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gMFVMOworICAgICAgICB9CisgICAgICAgIEhleDJSZWcobWVzc2FnZSwgY3JwdC0+RUNDX1gxKTsKKworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSB0ZW1wX3Jlc3VsdDJbaV07CisgICAgICAgIH0KKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX01VTCk7CisKKyAgICAgICAgLyogIDQtKDcpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCB1MSAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wX3Jlc3VsdDFbaV0gPSBjcnB0LT5FQ0NfWDFbaV07CisgICAgICAgIH0KKworI2lmIEVOQUJMRV9ERUJVRworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MSwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coInUxID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisjZW5kaWYKKworICAgICAgICAvKiAgNC0oOCkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkVvcmRlciwgY3JwdC0+RUNDX04pOworCisgICAgICAgIC8qIDQtKDkpIFdyaXRlIHIsIHcgdG8gWDEsIFkxIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWDFbaV0gPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgSGV4MlJlZyhSLCBjcnB0LT5FQ0NfWDEpOworCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IHRlbXBfcmVzdWx0MltpXTsKKyAgICAgICAgfQorCisgICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfTU9EVUxFIHwgTU9ET1BfTVVMKTsKKworICAgICAgICAvKiAgNC0oMTQpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCB1MiAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wX3Jlc3VsdDJbaV0gPSBjcnB0LT5FQ0NfWDFbaV07CisgICAgICAgIH0KKworI2lmIEVOQUJMRV9ERUJVRworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MiwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coInUyID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisjZW5kaWYKKworICAgICAgICAvKgorICAgICAgICAgKiAgIDUuIENvbXB1dGUgWKGmICh4MaGmLCB5MaGmKSA9IHUxICogRyArIHUyICogUQorICAgICAgICAgKiAgICAgICgxKSBXcml0ZSB0aGUgY3VydmUgcGFyYW1ldGVyIEEsIEIsIE4sIGFuZCBjdXJ2ZSBsZW5ndGggTSB0byBjb3JyZXNwb25kaW5nIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgyKSBXcml0ZSB0aGUgcG9pbnQgRyh4LCB5KSB0byBYMSwgWTEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDMpIFdyaXRlIHUxIHRvIEsgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDQpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAwCisgICAgICAgICAqICAgICAgKDUpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEKKyAgICAgICAgICogICAgICAoNikgV2FpdCBmb3IgQlVTWShDUlBUX0VDQ19TVFNbMF0pIGJlIGNsZWFyZWQKKyAgICAgICAgICogICAgICAoNykgUmVhZCBYMSwgWTEgcmVnaXN0ZXJzIHRvIGdldCB1MSpHCisgICAgICAgICAqICAgICAgKDgpIFdyaXRlIHRoZSBjdXJ2ZSBwYXJhbWV0ZXIgQSwgQiwgTiwgYW5kIGN1cnZlIGxlbmd0aCBNIHRvIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDkpIFdyaXRlIHRoZSBwdWJsaWMga2V5IFEoeCx5KSB0byBYMSwgWTEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDEwKSBXcml0ZSB1MiB0byBLIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgxMSkgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDAKKyAgICAgICAgICogICAgICAoMTIpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEKKyAgICAgICAgICogICAgICAoMTMpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDE0KSBXcml0ZSB0aGUgY3VydmUgcGFyYW1ldGVyIEEsIEIsIE4sIGFuZCBjdXJ2ZSBsZW5ndGggTSB0byBjb3JyZXNwb25kaW5nIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgxNSkgV3JpdGUgdGhlIHJlc3VsdCBkYXRhIHUxKkcgdG8gWDIsIFkyIHJlZ2lzdGVycworICAgICAgICAgKiAgICAgICgxNikgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMTAKKyAgICAgICAgICogICAgICAoMTcpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEKKyAgICAgICAgICogICAgICAoMTgpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkCisgICAgICAgICAqICAgICAgKDE5KSBSZWFkIFgxLCBZMSByZWdpc3RlcnMgdG8gZ2V0IFihpih4MaGmLCB5MaGmKQorICAgICAgICAgKiAgICAgICgyMCkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMKKyAgICAgICAgICogICAgICAoMjEpIFdyaXRlIHgxoaYgdG8gWDEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDIyKSBXcml0ZSAweDAgdG8gWTEgcmVnaXN0ZXJzCisgICAgICAgICAqICAgICAgKDIzKSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMQorICAgICAgICAgKiAgICAgICgyNCkgU2V0IE1PUE9QKENSUFRfRUNDX0NUTFsxMjoxMV0pIHRvIDEwCisgICAgICAgICAqICAgICAgKDI1KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxCisgICAgICAgICAqICAgICAgKDI2KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZAorICAgICAgICAgKiAgICAgICgyNykgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHgxoaYgKG1vZCBuKQorICAgICAgICAgKgorICAgICAgICAgKiAgIDYuIFRoZSBzaWduYXR1cmUgaXMgdmFsaWQgaWYgeDGhpiA9IHIsIG90aGVyd2lzZSBpdCBpcyBpbnZhbGlkCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqICAoMSkgV3JpdGUgdGhlIGN1cnZlIHBhcmFtZXRlciBBLCBCLCBOLCBhbmQgY3VydmUgbGVuZ3RoIE0gdG8gY29ycmVzcG9uZGluZyByZWdpc3RlcnMKKyAgICAgICAgICogICgyKSBXcml0ZSB0aGUgcG9pbnQgRyh4LCB5KSB0byBYMSwgWTEgcmVnaXN0ZXJzCisgICAgICAgICAqLworICAgICAgICBlY2NfaW5pdF9jdXJ2ZShjcnB0LCBlY2NfY3VydmUpOworCisgICAgICAgIC8qICgzKSBXcml0ZSB1MSB0byBLIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfS1tpXSA9IHRlbXBfcmVzdWx0MVtpXTsKKyAgICAgICAgfQorCisgICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfUE9JTlRfTVVMKTsKKworICAgICAgICAvKiAoNykgUmVhZCBYMSwgWTEgcmVnaXN0ZXJzIHRvIGdldCB1MSpHICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBfeFtpXSA9IGNycHQtPkVDQ19YMVtpXTsKKyAgICAgICAgICAgIHRlbXBfeVtpXSA9IGNycHQtPkVDQ19ZMVtpXTsKKyAgICAgICAgfQorCisjaWYgRU5BQkxFX0RFQlVHCisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF94LCB0ZW1wX2hleF9zdHIpOworICAgICAgICBDUlBUX0RCR01TRygiNS0oNykgdTEqRywgeCA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfeSwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIjUtKDcpIHUxKkcsIHkgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsKKyNlbmRpZgorCisgICAgICAgIC8qICg4KSBXcml0ZSB0aGUgY3VydmUgcGFyYW1ldGVyIEEsIEIsIE4sIGFuZCBjdXJ2ZSBsZW5ndGggTSB0byBjb3JyZXNwb25kaW5nIHJlZ2lzdGVycyAqLworICAgICAgICBlY2NfaW5pdF9jdXJ2ZShjcnB0LCBlY2NfY3VydmUpOworCisgICAgICAgIC8qICg5KSBXcml0ZSB0aGUgcHVibGljIGtleSBRKHgseSkgdG8gWDEsIFkxIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWDFbaV0gPSAwVUw7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSAwVUw7CisgICAgICAgIH0KKworICAgICAgICBIZXgyUmVnKHB1YmxpY19rMSwgY3JwdC0+RUNDX1gxKTsKKyAgICAgICAgSGV4MlJlZyhwdWJsaWNfazIsIGNycHQtPkVDQ19ZMSk7CisKKyAgICAgICAgLyogKDEwKSBXcml0ZSB1MiB0byBLIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfS1tpXSA9IHRlbXBfcmVzdWx0MltpXTsKKyAgICAgICAgfQorCisgICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfUE9JTlRfTVVMKTsKKworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wX3Jlc3VsdDFbaV0gPSBjcnB0LT5FQ0NfWDFbaV07CisgICAgICAgICAgICB0ZW1wX3Jlc3VsdDJbaV0gPSBjcnB0LT5FQ0NfWTFbaV07CisgICAgICAgIH0KKworI2lmIEVOQUJMRV9ERUJVRworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MSwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIjUtKDEzKSB1MipRLCB4ID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF9yZXN1bHQyLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBDUlBUX0RCR01TRygiNS0oMTMpIHUyKlEsIHkgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsKKyNlbmRpZgorCisgICAgICAgIC8qICgxNCkgV3JpdGUgdGhlIGN1cnZlIHBhcmFtZXRlciBBLCBCLCBOLCBhbmQgY3VydmUgbGVuZ3RoIE0gdG8gY29ycmVzcG9uZGluZyByZWdpc3RlcnMgKi8KKyAgICAgICAgZWNjX2luaXRfY3VydmUoY3JwdCwgZWNjX2N1cnZlKTsKKworICAgICAgICAvKiBXcml0ZSB0aGUgcmVzdWx0IGRhdGEgdTIqUSB0byBYMSwgWTEgcmVnaXN0ZXJzICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IHRlbXBfcmVzdWx0MVtpXTsKKyAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IHRlbXBfcmVzdWx0MltpXTsKKyAgICAgICAgfQorCisgICAgICAgIC8qICgxNSkgV3JpdGUgdGhlIHJlc3VsdCBkYXRhIHUxKkcgdG8gWDIsIFkyIHJlZ2lzdGVycyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjcnB0LT5FQ0NfWDJbaV0gPSB0ZW1wX3hbaV07CisgICAgICAgICAgICBjcnB0LT5FQ0NfWTJbaV0gPSB0ZW1wX3lbaV07CisgICAgICAgIH0KKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX1BPSU5UX0FERCk7CisKKyAgICAgICAgLyogKDE5KSBSZWFkIFgxLCBZMSByZWdpc3RlcnMgdG8gZ2V0IFihpih4MaGmLCB5MaGmKSAqLworICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wX3hbaV0gPSBjcnB0LT5FQ0NfWDFbaV07CisgICAgICAgICAgICB0ZW1wX3lbaV0gPSBjcnB0LT5FQ0NfWTFbaV07CisgICAgICAgIH0KKworI2lmIEVOQUJMRV9ERUJVRworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfeCwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIjUtKDE5KSB4JyA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfeSwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIjUtKDE5KSB5JyA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworI2VuZGlmCisKKyAgICAgICAgLyogICgyMCkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMgKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7CisgICAgICAgIH0KKyAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkVvcmRlciwgY3JwdC0+RUNDX04pOworCisgICAgICAgIC8qCisgICAgICAgICAqICAoMjEpIFdyaXRlIHgxoaYgdG8gWDEgcmVnaXN0ZXJzCisgICAgICAgICAqICAoMjIpIFdyaXRlIDB4MCB0byBZMSByZWdpc3RlcnMKKyAgICAgICAgICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IHRlbXBfeFtpXTsKKyAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsKKyAgICAgICAgfQorCisjaWYgRU5BQkxFX0RFQlVHCisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1gxLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBDUlBUX0RCR01TRygiNS0oMjEpIHgnID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisgICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1kxLCB0ZW1wX2hleF9zdHIpOworICAgICAgICBDUlBUX0RCR01TRygiNS0oMjIpIHknID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7CisjZW5kaWYKKworICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX0FERCk7CisKKyAgICAgICAgLyogICgyNykgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHgxoaYgKG1vZCBuKSAqLworICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIGNycHQtPkVDQ19YMSwgdGVtcF9oZXhfc3RyKTsKKyAgICAgICAgQ1JQVF9EQkdNU0coIjUtKDI3KSB4MScgKG1vZCBuKSA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOworCisgICAgICAgIC8qIDYuIFRoZSBzaWduYXR1cmUgaXMgdmFsaWQgaWYgeDGhpiA9IHIsIG90aGVyd2lzZSBpdCBpcyBpbnZhbGlkICovCisKKyAgICAgICAgLyogQ29tcGFyZSB3aXRoIHRlc3QgcGF0dGVybiB0byBjaGVjayBpZiByIGlzIGNvcnJlY3Qgb3Igbm90ICovCisgICAgICAgIGlmKHN0cmNhc2VjbXAodGVtcF9oZXhfc3RyLCBSKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBDUlBUX0RCR01TRygieDEnIChtb2QgbikgIT0gUiBUZXN0IGZpbGVkISFcbiIpOworICAgICAgICAgICAgQ1JQVF9EQkdNU0coIlNpZ25hdHVyZSBSIFslc10gaXMgbm90IG1hdGNoZWQgd2l0aCBleHBlY3RlZCBSIFslc10hXG4iLCB0ZW1wX2hleF9zdHIsIFIpOworICAgICAgICAgICAgcmV0ID0gLTI7CisgICAgICAgIH0KKyAgICB9ICAvKiByZXQgPT0gMCAqLworCisgICAgcmV0dXJuIHJldDsKK30KKworI2lmIFhPTV9TVVBQT1JUIC8vIFRvIHN1cHBvcnQgWE9NIHJlYWR5IGN1cnZlIHRhYmxlCisKK3N0YXRpYyBpbnQzMl90IEN1cnZlQ3B5KHVuc2lnbmVkIGludCAqcDMyLCBFX0VDQ19DVVJWRSBpZCkKK3sKKyAgICBpbnQzMl90IGk7CisKKyAgICBzd2l0Y2goaWQpCisgICAgeworICAgICAgICBjYXNlIENVUlZFX1BfMTkyOgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDAwOworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDMwOworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDg7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbICA5XSA9IDB4NDU0NjQ2NDY7CisgICAgICAgICAgICBwMzJbIDEwXSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbIDExXSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbIDEyXSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbIDEzXSA9IDB4NDM0NjQ2NDY7CisgICAgICAgICAgICBmb3IoaSA9IDE0OyBpIDw9IDM3OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyAzOF0gPSAweDMxMzIzNDM2OworICAgICAgICAgICAgcDMyWyAzOV0gPSAweDM5MzEzNTMwOworICAgICAgICAgICAgcDMyWyA0MF0gPSAweDYzMzkzNTY1OworICAgICAgICAgICAgcDMyWyA0MV0gPSAweDM3NjUzMDM4OworICAgICAgICAgICAgcDMyWyA0Ml0gPSAweDM3NjE2NjMwOworICAgICAgICAgICAgcDMyWyA0M10gPSAweDYyNjEzOTY1OworICAgICAgICAgICAgcDMyWyA0NF0gPSAweDM0MzIzMjM3OworICAgICAgICAgICAgcDMyWyA0NV0gPSAweDM5MzQzMDMzOworICAgICAgICAgICAgcDMyWyA0Nl0gPSAweDM4NjI2NTY2OworICAgICAgICAgICAgcDMyWyA0N10gPSAweDYzNjU2NTY0OworICAgICAgICAgICAgcDMyWyA0OF0gPSAweDM2MzQzMTYzOworICAgICAgICAgICAgcDMyWyA0OV0gPSAweDMxNjIzOTYyOworICAgICAgICAgICAgZm9yKGkgPSA1MDsgaSA8PSA3MzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgNzRdID0gMHg2NDM4MzgzMTsKKyAgICAgICAgICAgIHAzMlsgNzVdID0gMHg2NTMwMzg2MTsKKyAgICAgICAgICAgIHAzMlsgNzZdID0gMHgzMDMzMzA2MjsKKyAgICAgICAgICAgIHAzMlsgNzddID0gMHgzNjY2MzAzOTsKKyAgICAgICAgICAgIHAzMlsgNzhdID0gMHg2NjYyNjMzNzsKKyAgICAgICAgICAgIHAzMlsgNzldID0gMHg2MjY1MzAzMjsKKyAgICAgICAgICAgIHAzMlsgODBdID0gMHgzMTYxMzMzNDsKKyAgICAgICAgICAgIHAzMlsgODFdID0gMHgzMDMwMzgzODsKKyAgICAgICAgICAgIHAzMlsgODJdID0gMHg2NjY2MzQ2NjsKKyAgICAgICAgICAgIHAzMlsgODNdID0gMHg2NDY2NjEzMDsKKyAgICAgICAgICAgIHAzMlsgODRdID0gMHg2NjY2MzIzODsKKyAgICAgICAgICAgIHAzMlsgODVdID0gMHgzMjMxMzAzMTsKKyAgICAgICAgICAgIGZvcihpID0gODY7IGkgPD0gMTA5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzExMF0gPSAweDM5MzEzNzMwOworICAgICAgICAgICAgcDMyWzExMV0gPSAweDM1Mzk2MjMyOworICAgICAgICAgICAgcDMyWzExMl0gPSAweDM4NjM2NjY2OworICAgICAgICAgICAgcDMyWzExM10gPSAweDM4Mzc2MTY0OworICAgICAgICAgICAgcDMyWzExNF0gPSAweDMwMzEzMzM2OworICAgICAgICAgICAgcDMyWzExNV0gPSAweDY0NjUzMTMxOworICAgICAgICAgICAgcDMyWzExNl0gPSAweDM0MzI2MjM2OworICAgICAgICAgICAgcDMyWzExN10gPSAweDM1NjQ2NDYzOworICAgICAgICAgICAgcDMyWzExOF0gPSAweDM5NjYzMzM3OworICAgICAgICAgICAgcDMyWzExOV0gPSAweDMxNjEzNzM3OworICAgICAgICAgICAgcDMyWzEyMF0gPSAweDM5Mzc2NTMxOworICAgICAgICAgICAgcDMyWzEyMV0gPSAweDMxMzEzODM0OworICAgICAgICAgICAgZm9yKGkgPSAxMjI7IGkgPD0gMTQ1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDNhOworICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTUzOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWzE1NF0gPSAweDQ1NDY0NjQ2OworICAgICAgICAgICAgZm9yKGkgPSAxNTU7IGkgPD0gMTU4OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgZm9yKGkgPSAxNTk7IGkgPD0gMTkwOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDNhOworICAgICAgICAgICAgZm9yKGkgPSAxOTI7IGkgPD0gMTk3OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWzE5OF0gPSAweDQ1NDQzOTM5OworICAgICAgICAgICAgcDMyWzE5OV0gPSAweDM2MzMzODQ2OworICAgICAgICAgICAgcDMyWzIwMF0gPSAweDQyMzYzNDMxOworICAgICAgICAgICAgcDMyWzIwMV0gPSAweDMxNDIzOTQzOworICAgICAgICAgICAgcDMyWzIwMl0gPSAweDMyNDQzNDQyOworICAgICAgICAgICAgcDMyWzIwM10gPSAweDMxMzMzODMyOworICAgICAgICAgICAgZm9yKGkgPSAyMDQ7IGkgPD0gMjM1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMGMwOworICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDA3OworICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDAyOworICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDAxOworICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAwOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgQ1VSVkVfUF8yMjQ6CisgICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMDE7CisgICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwMzg7CisgICAgICAgICAgICBmb3IoaSA9IDI7IGkgPD0gODsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsgIDldID0gMHg0NTQ2NDY0NjsKKyAgICAgICAgICAgIGZvcihpID0gMTA7IGkgPD0gMTQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbIDE1XSA9IDB4NDU0NjQ2NDY7CisgICAgICAgICAgICBmb3IoaSA9IDE2OyBpIDw9IDM3OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyAzOF0gPSAweDM1MzAzNDYyOworICAgICAgICAgICAgcDMyWyAzOV0gPSAweDM1Mzg2MTMwOworICAgICAgICAgICAgcDMyWyA0MF0gPSAweDM0MzA2MzMwOworICAgICAgICAgICAgcDMyWyA0MV0gPSAweDYyNjEzMzYyOworICAgICAgICAgICAgcDMyWyA0Ml0gPSAweDMxMzQzNTY2OworICAgICAgICAgICAgcDMyWyA0M10gPSAweDM2MzUzMjMzOworICAgICAgICAgICAgcDMyWyA0NF0gPSAweDM0MzQzMDM1OworICAgICAgICAgICAgcDMyWyA0NV0gPSAweDM3NjIzMDYyOworICAgICAgICAgICAgcDMyWyA0Nl0gPSAweDY2NjIzNzY0OworICAgICAgICAgICAgcDMyWyA0N10gPSAweDYxNjIzODY0OworICAgICAgICAgICAgcDMyWyA0OF0gPSAweDYyMzAzNzMyOworICAgICAgICAgICAgcDMyWyA0OV0gPSAweDMzMzQzOTMzOworICAgICAgICAgICAgcDMyWyA1MF0gPSAweDM1MzUzMzMyOworICAgICAgICAgICAgcDMyWyA1MV0gPSAweDM0NjI2NjY2OworICAgICAgICAgICAgZm9yKGkgPSA1MjsgaSA8PSA3MzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgNzRdID0gMHg2NTMwMzc2MjsKKyAgICAgICAgICAgIHAzMlsgNzVdID0gMHg2NDYyNjMzMDsKKyAgICAgICAgICAgIHAzMlsgNzZdID0gMHgzNDYyNjIzNjsKKyAgICAgICAgICAgIHAzMlsgNzddID0gMHg2NjM3NjY2MjsKKyAgICAgICAgICAgIHAzMlsgNzhdID0gMHgzMzMxMzIzMzsKKyAgICAgICAgICAgIHAzMlsgNzldID0gMHgzOTYyMzAzOTsKKyAgICAgICAgICAgIHAzMlsgODBdID0gMHgzMzMwNjEzNDsKKyAgICAgICAgICAgIHAzMlsgODFdID0gMHgzMzY0MzE2MzsKKyAgICAgICAgICAgIHAzMlsgODJdID0gMHgzMjYzMzYzNTsKKyAgICAgICAgICAgIHAzMlsgODNdID0gMHgzMjMyMzEzMTsKKyAgICAgICAgICAgIHAzMlsgODRdID0gMHgzMjMzMzQzMzsKKyAgICAgICAgICAgIHAzMlsgODVdID0gMHgzNjY0MzAzODsKKyAgICAgICAgICAgIHAzMlsgODZdID0gMHg2MzM1MzEzMTsKKyAgICAgICAgICAgIHAzMlsgODddID0gMHgzMTMyNjQzMTsKKyAgICAgICAgICAgIGZvcihpID0gODg7IGkgPD0gMTA5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzExMF0gPSAweDM3MzM2NDYyOworICAgICAgICAgICAgcDMyWzExMV0gPSAweDM4MzgzMzM2OworICAgICAgICAgICAgcDMyWzExMl0gPSAweDM3NjYzNTYyOworICAgICAgICAgICAgcDMyWzExM10gPSAweDYyNjYzMzMyOworICAgICAgICAgICAgcDMyWzExNF0gPSAweDMyMzI2MzM0OworICAgICAgICAgICAgcDMyWzExNV0gPSAweDM2NjU2NjY0OworICAgICAgICAgICAgcDMyWzExNl0gPSAweDMzMzQ2NDYzOworICAgICAgICAgICAgcDMyWzExN10gPSAweDMwNjEzNTM3OworICAgICAgICAgICAgcDMyWzExOF0gPSAweDM3MzA2MTM1OworICAgICAgICAgICAgcDMyWzExOV0gPSAweDM0MzYzNzM0OworICAgICAgICAgICAgcDMyWzEyMF0gPSAweDM1NjQzNDM0OworICAgICAgICAgICAgcDMyWzEyMV0gPSAweDM5MzkzMTM4OworICAgICAgICAgICAgcDMyWzEyMl0gPSAweDMwMzAzNTM4OworICAgICAgICAgICAgcDMyWzEyM10gPSAweDM0MzM2NTM3OworICAgICAgICAgICAgZm9yKGkgPSAxMjQ7IGkgPD0gMTQ1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDQ2OworICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTU0OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgZm9yKGkgPSAxNTU7IGkgPD0gMTU5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzE2MF0gPSAweDMxMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAxNjE7IGkgPD0gMTkwOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDQ2OworICAgICAgICAgICAgZm9yKGkgPSAxOTI7IGkgPD0gMTk4OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWzE5OV0gPSAweDMyNDEzNjMxOworICAgICAgICAgICAgcDMyWzIwMF0gPSAweDM4NDIzMDQ1OworICAgICAgICAgICAgcDMyWzIwMV0gPSAweDQ1MzMzMDQ2OworICAgICAgICAgICAgcDMyWzIwMl0gPSAweDQ0NDQzMzMxOworICAgICAgICAgICAgcDMyWzIwM10gPSAweDM1MzQzOTMyOworICAgICAgICAgICAgcDMyWzIwNF0gPSAweDQzMzU0MzM1OworICAgICAgICAgICAgcDMyWzIwNV0gPSAweDQ0MzM0MTMyOworICAgICAgICAgICAgZm9yKGkgPSAyMDY7IGkgPD0gMjM1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMGUwOworICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDA5OworICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDA4OworICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDAzOworICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAwOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgQ1VSVkVfUF8yNTY6CisgICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMDI7CisgICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwNDA7CisgICAgICAgICAgICBwMzJbICAyXSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbICAzXSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbICA0XSA9IDB4MzAzMDMwMzA7CisgICAgICAgICAgICBwMzJbICA1XSA9IDB4MzEzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDY7IGkgPD0gMTE7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBmb3IoaSA9IDEyOyBpIDw9IDE2OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWyAxN10gPSAweDQzNDY0NjQ2OworICAgICAgICAgICAgZm9yKGkgPSAxODsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzNjYzNjEzNTsKKyAgICAgICAgICAgIHAzMlsgMzldID0gMHgzODY0MzUzMzsKKyAgICAgICAgICAgIHAzMlsgNDBdID0gMHg2MTMzNjE2MTsKKyAgICAgICAgICAgIHAzMlsgNDFdID0gMHgzNzY1MzMzOTsKKyAgICAgICAgICAgIHAzMlsgNDJdID0gMHg2MjY1MzM2MjsKKyAgICAgICAgICAgIHAzMlsgNDNdID0gMHgzNTM1NjQ2MjsKKyAgICAgICAgICAgIHAzMlsgNDRdID0gMHgzODM5MzYzNzsKKyAgICAgICAgICAgIHAzMlsgNDVdID0gMHg2MzYyMzYzODsKKyAgICAgICAgICAgIHAzMlsgNDZdID0gMHg2NDMxMzUzNjsKKyAgICAgICAgICAgIHAzMlsgNDddID0gMHgzMDYyMzYzMDsKKyAgICAgICAgICAgIHAzMlsgNDhdID0gMHgzMzM1NjM2MzsKKyAgICAgICAgICAgIHAzMlsgNDldID0gMHgzNjY2MzA2MjsKKyAgICAgICAgICAgIHAzMlsgNTBdID0gMHg2NTYzNjIzMzsKKyAgICAgICAgICAgIHAzMlsgNTFdID0gMHg2NTMzNjMzMzsKKyAgICAgICAgICAgIHAzMlsgNTJdID0gMHgzMjY0MzczMjsKKyAgICAgICAgICAgIHAzMlsgNTNdID0gMHg2MjM0MzAzNjsKKyAgICAgICAgICAgIGZvcihpID0gNTQ7IGkgPD0gNzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzczMTYyMzY7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4MzI2NjMxNjQ7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4NjMzMjMxNjU7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzczNDMyMzQ7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4NjM2MjM4NjY7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4MzU2NTM2NjU7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzQ2MTMzMzY7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzI2NjMwMzQ7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzMzMDM3Mzc7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzEzODY0Mzc7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4NjI2NTY0MzI7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4MzA2MTMzMzM7CisgICAgICAgICAgICBwMzJbIDg2XSA9IDB4MzE2MTM0NjY7CisgICAgICAgICAgICBwMzJbIDg3XSA9IDB4MzUzNDM5MzM7CisgICAgICAgICAgICBwMzJbIDg4XSA9IDB4MzgzOTM4NjQ7CisgICAgICAgICAgICBwMzJbIDg5XSA9IDB4MzYzOTMyNjM7CisgICAgICAgICAgICBmb3IoaSA9IDkwOyBpIDw9IDEwOTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzMzY1NjYzNDsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzMjY1MzIzNDsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHg2MTMxNjU2NjsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHg2MjM5NjYzNzsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzNzY1NjUzODsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHg2MTM0NjI2NTsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHg2NjMwNjMzNzsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzNjMxNjUzOTsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHg2NTYzNjIzMjsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHgzNzM1MzMzMzsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzMTMzNjIzNjsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHg2NTYzNjUzNTsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzNjYyNjI2MzsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHgzODM2MzAzNDsKKyAgICAgICAgICAgIHAzMlsxMjRdID0gMHg2NjYyMzczMzsKKyAgICAgICAgICAgIHAzMlsxMjVdID0gMHgzNTY2MzEzNTsKKyAgICAgICAgICAgIGZvcihpID0gMTI2OyBpIDw9IDE0NTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0ZTsKKyAgICAgICAgICAgIHAzMlsxNDddID0gMHg0NjQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsxNDhdID0gMHg0NjQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsxNDldID0gMHgzMDMwMzAzMDsKKyAgICAgICAgICAgIHAzMlsxNTBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTUxOyBpIDw9IDE1NjsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU3OyBpIDw9IDE2MjsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTYzOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA0ZTsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHg0NjQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsxOTNdID0gMHg0NjQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsxOTRdID0gMHgzMDMwMzAzMDsKKyAgICAgICAgICAgIHAzMlsxOTVdID0gMHgzMDMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTk2OyBpIDw9IDE5OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsyMDBdID0gMHgzNjQ1NDM0MjsKKyAgICAgICAgICAgIHAzMlsyMDFdID0gMHg0NDQxNDE0NjsKKyAgICAgICAgICAgIHAzMlsyMDJdID0gMHgzNzMxMzc0MTsKKyAgICAgICAgICAgIHAzMlsyMDNdID0gMHgzNDM4NDUzOTsKKyAgICAgICAgICAgIHAzMlsyMDRdID0gMHgzOTQyMzM0NjsKKyAgICAgICAgICAgIHAzMlsyMDVdID0gMHgzMjQzNDE0MzsKKyAgICAgICAgICAgIHAzMlsyMDZdID0gMHgzMzM2NDM0NjsKKyAgICAgICAgICAgIHAzMlsyMDddID0gMHgzMTM1MzUzMjsKKyAgICAgICAgICAgIGZvcihpID0gMjA4OyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDEwMDsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwYTsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwNTsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwMjsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX1BfMzg0OgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDAzOworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDYwOworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDE2OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWyAxN10gPSAweDQ1NDY0NjQ2OworICAgICAgICAgICAgcDMyWyAxOF0gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgcDMyWyAxOV0gPSAweDQ2NDY0NjQ2OworICAgICAgICAgICAgZm9yKGkgPSAyMDsgaSA8PSAyMzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgMjRdID0gMHg0NjQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsgMjVdID0gMHg0MzQ2NDY0NjsKKyAgICAgICAgICAgIGZvcihpID0gMjY7IGkgPD0gMzc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzEzMzMzNjI7CisgICAgICAgICAgICBwMzJbIDM5XSA9IDB4Mzc2MTY2MzI7CisgICAgICAgICAgICBwMzJbIDQwXSA9IDB4NjUzMzMyNjU7CisgICAgICAgICAgICBwMzJbIDQxXSA9IDB4MzQ2NTM3NjU7CisgICAgICAgICAgICBwMzJbIDQyXSA9IDB4NjUzODM4Mzk7CisgICAgICAgICAgICBwMzJbIDQzXSA9IDB4NjIzNjM1MzA7CisgICAgICAgICAgICBwMzJbIDQ0XSA9IDB4Mzg2NjMzNjU7CisgICAgICAgICAgICBwMzJbIDQ1XSA9IDB4MzkzMTY0MzI7CisgICAgICAgICAgICBwMzJbIDQ2XSA9IDB4NjQzMTM4MzE7CisgICAgICAgICAgICBwMzJbIDQ3XSA9IDB4NjUzNjYzMzk7CisgICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MzEzODY1NjY7CisgICAgICAgICAgICBwMzJbIDQ5XSA9IDB4MzIzMTMxMzQ7CisgICAgICAgICAgICBwMzJbIDUwXSA9IDB4MzQzMTMzMzA7CisgICAgICAgICAgICBwMzJbIDUxXSA9IDB4NjYzODM4MzA7CisgICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzMzMTMwMzU7CisgICAgICAgICAgICBwMzJbIDUzXSA9IDB4NjEzNTM3Mzg7CisgICAgICAgICAgICBwMzJbIDU0XSA9IDB4MzYzNTM2NjM7CisgICAgICAgICAgICBwMzJbIDU1XSA9IDB4NjQzODM5MzM7CisgICAgICAgICAgICBwMzJbIDU2XSA9IDB4NjUzMjYxMzg7CisgICAgICAgICAgICBwMzJbIDU3XSA9IDB4NjQzOTMxNjQ7CisgICAgICAgICAgICBwMzJbIDU4XSA9IDB4MzUzODYxMzI7CisgICAgICAgICAgICBwMzJbIDU5XSA9IDB4NjQ2NTM4NjM7CisgICAgICAgICAgICBwMzJbIDYwXSA9IDB4NjM2NTMzNjQ7CisgICAgICAgICAgICBwMzJbIDYxXSA9IDB4NjY2NTYxMzI7CisgICAgICAgICAgICBmb3IoaSA9IDYyOyBpIDw9IDczOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDM3Mzg2MTYxOworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDMyMzI2MTYzOworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDYyMzg2NTYyOworICAgICAgICAgICAgcDMyWyA3N10gPSAweDM3MzMzNTMwOworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDMxNjI2NTM4OworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDY1MzEzNzYzOworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDMwMzIzMzY2OworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDM0Mzc2NDYxOworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDY0MzE2NTM2OworICAgICAgICAgICAgcDMyWyA4M10gPSAweDMyMzY2MjMzOworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDM3NjE2MjM4OworICAgICAgICAgICAgcDMyWyA4NV0gPSAweDM4Mzk2MjM5OworICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDM3NjYzOTM1OworICAgICAgICAgICAgcDMyWyA4N10gPSAweDMwNjUzMTM0OworICAgICAgICAgICAgcDMyWyA4OF0gPSAweDM0MzUzMjM4OworICAgICAgICAgICAgcDMyWyA4OV0gPSAweDM4MzM2MTMyOworICAgICAgICAgICAgcDMyWyA5MF0gPSAweDMyMzAzNTM1OworICAgICAgICAgICAgcDMyWyA5MV0gPSAweDY0MzUzMjY2OworICAgICAgICAgICAgcDMyWyA5Ml0gPSAweDM1MzU2NjYyOworICAgICAgICAgICAgcDMyWyA5M10gPSAweDYzMzYzOTMyOworICAgICAgICAgICAgcDMyWyA5NF0gPSAweDM0MzU2MTMzOworICAgICAgICAgICAgcDMyWyA5NV0gPSAweDM4MzM2NTM1OworICAgICAgICAgICAgcDMyWyA5Nl0gPSAweDM2MzczMjM3OworICAgICAgICAgICAgcDMyWyA5N10gPSAweDM3NjI2MTMwOworICAgICAgICAgICAgZm9yKGkgPSA5ODsgaSA8PSAxMDk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzczMTM2MzM7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4NjEzNDY1NjQ7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzYzMjM2Mzk7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4NjYzNjYzMzI7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjUzOTY0MzU7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4NjY2MjM4Mzk7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzIzOTMyMzk7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzkzMjYzNjQ7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4MzQ2NjM4NjY7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4NjQ2MjY0MzE7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4NjEzOTM4MzI7CisgICAgICAgICAgICBwMzJbMTIxXSA9IDB4NjMzNzM0MzE7CisgICAgICAgICAgICBwMzJbMTIyXSA9IDB4NjE2NDM5NjU7CisgICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzMzMTMxMzM7CisgICAgICAgICAgICBwMzJbMTI0XSA9IDB4MzA2NjM1NjI7CisgICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzA2MzM4NjI7CisgICAgICAgICAgICBwMzJbMTI2XSA9IDB4MzAzNjYxMzA7CisgICAgICAgICAgICBwMzJbMTI3XSA9IDB4NjU2MzMxNjI7CisgICAgICAgICAgICBwMzJbMTI4XSA9IDB4NjUzNzY0MzE7CisgICAgICAgICAgICBwMzJbMTI5XSA9IDB4NjQzOTMxMzg7CisgICAgICAgICAgICBwMzJbMTMwXSA9IDB4MzMzNDYxMzc7CisgICAgICAgICAgICBwMzJbMTMxXSA9IDB4NjMzNzY0MzE7CisgICAgICAgICAgICBwMzJbMTMyXSA9IDB4NjE2NTMwMzk7CisgICAgICAgICAgICBwMzJbMTMzXSA9IDB4NjYzNTY1MzA7CisgICAgICAgICAgICBmb3IoaSA9IDEzNDsgaSA8PSAxNDU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNzQ7CisgICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNjE7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbMTYyXSA9IDB4NDU0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMTYzXSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMTY0XSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBmb3IoaSA9IDE2NTsgaSA8PSAxNjg7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTY5XSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBwMzJbMTcwXSA9IDB4NDY0NjQ2NDY7CisgICAgICAgICAgICBmb3IoaSA9IDE3MTsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwNzQ7CisgICAgICAgICAgICBmb3IoaSA9IDE5MjsgaSA8PSAyMDM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBwMzJbMjA0XSA9IDB4MzMzNjM3NDM7CisgICAgICAgICAgICBwMzJbMjA1XSA9IDB4MzEzODQ0MzQ7CisgICAgICAgICAgICBwMzJbMjA2XSA9IDB4MzczMzM0NDY7CisgICAgICAgICAgICBwMzJbMjA3XSA9IDB4NDY0NDQ0MzI7CisgICAgICAgICAgICBwMzJbMjA4XSA9IDB4NDEzMTM4MzU7CisgICAgICAgICAgICBwMzJbMjA5XSA9IDB4MzI0MjQ0MzA7CisgICAgICAgICAgICBwMzJbMjEwXSA9IDB4MzA0MjM4MzQ7CisgICAgICAgICAgICBwMzJbMjExXSA9IDB4NDEzNzM3NDE7CisgICAgICAgICAgICBwMzJbMjEyXSA9IDB4NDM0NTQzNDU7CisgICAgICAgICAgICBwMzJbMjEzXSA9IDB4NDEzNjM5MzE7CisgICAgICAgICAgICBwMzJbMjE0XSA9IDB4MzU0MzQzNDM7CisgICAgICAgICAgICBwMzJbMjE1XSA9IDB4MzMzNzM5MzI7CisgICAgICAgICAgICBmb3IoaSA9IDIxNjsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAxODA7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMGM7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDM7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDI7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDA7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9QXzUyMToKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwNDsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA4MzsKKyAgICAgICAgICAgIHAzMlsgIDJdID0gMHg0NjQ2NDYzMTsKKyAgICAgICAgICAgIGZvcihpID0gMzsgaSA8PSAzMzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsgMzRdID0gMHgwMDQzNDY0NjsKKyAgICAgICAgICAgIHAzMlsgMzVdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsgMzZdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsgMzddID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzOTMxMzUzMDsKKyAgICAgICAgICAgIHAzMlsgMzldID0gMHg2MjY1MzMzNTsKKyAgICAgICAgICAgIHAzMlsgNDBdID0gMHgzODMxMzYzOTsKKyAgICAgICAgICAgIHAzMlsgNDFdID0gMHgzOTYzMzE2NTsKKyAgICAgICAgICAgIHAzMlsgNDJdID0gMHgzOTY2MzE2MTsKKyAgICAgICAgICAgIHAzMlsgNDNdID0gMHgzMjYxMzkzMjsKKyAgICAgICAgICAgIHAzMlsgNDRdID0gMHg2MjMwNjEzMTsKKyAgICAgICAgICAgIHAzMlsgNDVdID0gMHgzNDM1MzgzNjsKKyAgICAgICAgICAgIHAzMlsgNDZdID0gMHg2MTY1NjUzMDsKKyAgICAgICAgICAgIHAzMlsgNDddID0gMHgzNzYxNjQzMjsKKyAgICAgICAgICAgIHAzMlsgNDhdID0gMHgzOTYyMzUzMjsKKyAgICAgICAgICAgIHAzMlsgNDldID0gMHgzMTMzNjIzOTsKKyAgICAgICAgICAgIHAzMlsgNTBdID0gMHg2MjMzNjYzNTsKKyAgICAgICAgICAgIHAzMlsgNTFdID0gMHgzODM0NjIzODsKKyAgICAgICAgICAgIHAzMlsgNTJdID0gMHgzODMxMzkzOTsKKyAgICAgICAgICAgIHAzMlsgNTNdID0gMHgzMDMxNjY2NTsKKyAgICAgICAgICAgIHAzMlsgNTRdID0gMHgzNTMxNjUzOTsKKyAgICAgICAgICAgIHAzMlsgNTVdID0gMHgzMzM5MzEzNjsKKyAgICAgICAgICAgIHAzMlsgNTZdID0gMHg2NTMxMzUzOTsKKyAgICAgICAgICAgIHAzMlsgNTddID0gMHgzOTY1Mzc2MzsKKyAgICAgICAgICAgIHAzMlsgNThdID0gMHgzMTYyMzczMzsKKyAgICAgICAgICAgIHAzMlsgNTldID0gMHg2MzMyMzUzNjsKKyAgICAgICAgICAgIHAzMlsgNjBdID0gMHgzMzY0NjIzMDsKKyAgICAgICAgICAgIHAzMlsgNjFdID0gMHg2MjMxNjI2MjsKKyAgICAgICAgICAgIHAzMlsgNjJdID0gMHgzMzM3MzA2NjsKKyAgICAgICAgICAgIHAzMlsgNjNdID0gMHg2NDMzMzczNTsKKyAgICAgICAgICAgIHAzMlsgNjRdID0gMHgzMzM4Mzg2NjsKKyAgICAgICAgICAgIHAzMlsgNjVdID0gMHgzMzYzMzI2NDsKKyAgICAgICAgICAgIHAzMlsgNjZdID0gMHg2NTMxNjYzNDsKKyAgICAgICAgICAgIHAzMlsgNjddID0gMHgzMTM1MzQ2NjsKKyAgICAgICAgICAgIHAzMlsgNjhdID0gMHgzNjM0NjQ2NjsKKyAgICAgICAgICAgIHAzMlsgNjldID0gMHgzMzMwMzU2MjsKKyAgICAgICAgICAgIHAzMlsgNzBdID0gMHgwMDMwMzA2NjsKKyAgICAgICAgICAgIHAzMlsgNzFdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsgNzJdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsgNzNdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsgNzRdID0gMHgzODM2NjMzMDsKKyAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzMDY1MzgzNTsKKyAgICAgICAgICAgIHAzMlsgNzZdID0gMHgzMDM3NjIzNjsKKyAgICAgICAgICAgIHAzMlsgNzddID0gMHg2NTM0MzAzNDsKKyAgICAgICAgICAgIHAzMlsgNzhdID0gMHgzOTY0NjMzOTsKKyAgICAgICAgICAgIHAzMlsgNzldID0gMHg2MzY1MzM2NTsKKyAgICAgICAgICAgIHAzMlsgODBdID0gMHgzMjM2MzY2MjsKKyAgICAgICAgICAgIHAzMlsgODFdID0gMHg2MjM1MzkzMzsKKyAgICAgICAgICAgIHAzMlsgODJdID0gMHgzOTMyMzQzNDsKKyAgICAgICAgICAgIHAzMlsgODNdID0gMHgzODM0MzY2MzsKKyAgICAgICAgICAgIHAzMlsgODRdID0gMHgzMDM5MzMzMTsKKyAgICAgICAgICAgIHAzMlsgODVdID0gMHg2MjY2MzMzNTsKKyAgICAgICAgICAgIHAzMlsgODZdID0gMHg2NjMxMzIzNTsKKyAgICAgICAgICAgIHAzMlsgODddID0gMHg2MTM4MzIzODsKKyAgICAgICAgICAgIHAzMlsgODhdID0gMHgzNjMwMzY2NjsKKyAgICAgICAgICAgIHAzMlsgODldID0gMHgzMzY0MzQ2MjsKKyAgICAgICAgICAgIHAzMlsgOTBdID0gMHg2MTYxNjI2NDsKKyAgICAgICAgICAgIHAzMlsgOTFdID0gMHgzNTYyMzQzMTsKKyAgICAgICAgICAgIHAzMlsgOTJdID0gMHg2NTM3Mzc2NTsKKyAgICAgICAgICAgIHAzMlsgOTNdID0gMHgzNTM3NjU2NjsKKyAgICAgICAgICAgIHAzMlsgOTRdID0gMHg2NjM4MzIzOTsKKyAgICAgICAgICAgIHAzMlsgOTVdID0gMHg2MzY0MzE2NTsKKyAgICAgICAgICAgIHAzMlsgOTZdID0gMHg2MTM3MzIzMTsKKyAgICAgICAgICAgIHAzMlsgOTddID0gMHg2MTY2NjYzMjsKKyAgICAgICAgICAgIHAzMlsgOThdID0gMHgzMzY1NjQzODsKKyAgICAgICAgICAgIHAzMlsgOTldID0gMHg2MjM4MzQzMzsKKyAgICAgICAgICAgIHAzMlsxMDBdID0gMHgzODMxNjMzMzsKKyAgICAgICAgICAgIHAzMlsxMDFdID0gMHgzNDYxMzYzNTsKKyAgICAgICAgICAgIHAzMlsxMDJdID0gMHg2NjYyMzkzMjsKKyAgICAgICAgICAgIHAzMlsxMDNdID0gMHgzNzY1MzczOTsKKyAgICAgICAgICAgIHAzMlsxMDRdID0gMHg2MzMxMzM2NTsKKyAgICAgICAgICAgIHAzMlsxMDVdID0gMHg2MjM1NjUzMjsKKyAgICAgICAgICAgIHAzMlsxMDZdID0gMHgwMDM2MzY2NDsKKyAgICAgICAgICAgIHAzMlsxMDddID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsxMDhdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsxMDldID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzMzM4MzEzMTsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzNjM5MzIzOTsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzOTM4Mzc2MTsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHg2MzYyMzM2MTsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzNTM0MzAzMDsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzNTYxMzg2MzsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzMjM0NjI2NjsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzMTY0Mzc2MzsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHgzOTM5NjQ2MjsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHgzNDM1NjYzODsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzNTM5MzQzNDsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHgzNDYyMzkzNzsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzMTM4MzYzNDsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHg2MjY2NjEzNzsKKyAgICAgICAgICAgIHAzMlsxMjRdID0gMHgzMjM3MzE2NDsKKyAgICAgICAgICAgIHAzMlsxMjVdID0gMHgzNjY1MzMzNzsKKyAgICAgICAgICAgIHAzMlsxMjZdID0gMHgzOTYzMzIzNjsKKyAgICAgICAgICAgIHAzMlsxMjddID0gMHgzNzY1NjUzNzsKKyAgICAgICAgICAgIHAzMlsxMjhdID0gMHgzNTM5MzkzMjsKKyAgICAgICAgICAgIHAzMlsxMjldID0gMHgzMjM0NjY2NTsKKyAgICAgICAgICAgIHAzMlsxMzBdID0gMHg2MzMwMzQzNjsKKyAgICAgICAgICAgIHAzMlsxMzFdID0gMHg2MjMwMzUzNTsKKyAgICAgICAgICAgIHAzMlsxMzJdID0gMHgzMzMxMzAzOTsKKyAgICAgICAgICAgIHAzMlsxMzNdID0gMHgzMDY0NjE2NjsKKyAgICAgICAgICAgIHAzMlsxMzRdID0gMHgzMzMxMzYzNzsKKyAgICAgICAgICAgIHAzMlsxMzVdID0gMHgzNzYzMzMzNTsKKyAgICAgICAgICAgIHAzMlsxMzZdID0gMHg2MTM2MzgzMDsKKyAgICAgICAgICAgIHAzMlsxMzddID0gMHg2MzMyMzczMjsKKyAgICAgICAgICAgIHAzMlsxMzhdID0gMHgzODMwMzQzMjsKKyAgICAgICAgICAgIHAzMlsxMzldID0gMHgzOTY1NjIzODsKKyAgICAgICAgICAgIHAzMlsxNDBdID0gMHgzOTM2MzczNDsKKyAgICAgICAgICAgIHAzMlsxNDFdID0gMHgzNjMxNjQ2NjsKKyAgICAgICAgICAgIHAzMlsxNDJdID0gMHgwMDMwMzUzNjsKKyAgICAgICAgICAgIHAzMlsxNDNdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsxNDRdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsxNDVdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA5ZDsKKyAgICAgICAgICAgIHAzMlsxNDddID0gMHg0NjQ2NDYzMTsKKyAgICAgICAgICAgIGZvcihpID0gMTQ4OyBpIDw9IDE3ODsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsxNzldID0gMHgwMDQ2NDY0NjsKKyAgICAgICAgICAgIGZvcihpID0gMTgwOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA5ZDsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHg0NjQ2NDYzMTsKKyAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDIwNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsyMDhdID0gMHgzNTQxNDY0NjsKKyAgICAgICAgICAgIHAzMlsyMDldID0gMHgzODM2MzgzMTsKKyAgICAgICAgICAgIHAzMlsyMTBdID0gMHg0MjMzMzgzNzsKKyAgICAgICAgICAgIHAzMlsyMTFdID0gMHgzOTQ2MzI0NjsKKyAgICAgICAgICAgIHAzMlsyMTJdID0gMHgzNzQyMzYzNjsKKyAgICAgICAgICAgIHAzMlsyMTNdID0gMHgzMDQzNDM0NjsKKyAgICAgICAgICAgIHAzMlsyMTRdID0gMHg0NjM4MzQzMTsKKyAgICAgICAgICAgIHAzMlsyMTVdID0gMHg0MTM5MzAzNzsKKyAgICAgICAgICAgIHAzMlsyMTZdID0gMHgzMzMwNDQzNTsKKyAgICAgICAgICAgIHAzMlsyMTddID0gMHg0MzM1NDI0MjsKKyAgICAgICAgICAgIHAzMlsyMThdID0gMHgzODM4NDIzOTsKKyAgICAgICAgICAgIHAzMlsyMTldID0gMHgzNDQzMzkzOTsKKyAgICAgICAgICAgIHAzMlsyMjBdID0gMHg0MjQ1NDEzNzsKKyAgICAgICAgICAgIHAzMlsyMjFdID0gMHg0MjQ2MzY0MjsKKyAgICAgICAgICAgIHAzMlsyMjJdID0gMHgzOTQ1MzEzNzsKKyAgICAgICAgICAgIHAzMlsyMjNdID0gMHgzNjM4MzMzMTsKKyAgICAgICAgICAgIHAzMlsyMjRdID0gMHgwMDM5MzAzNDsKKyAgICAgICAgICAgIGZvcihpID0gMjI1OyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDIwOTsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAyMDsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAyMDsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAyMDsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX0JfMTYzOgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDBhOworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDI5OworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDExOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyAxMl0gPSAweDAwMDAwMDMxOworICAgICAgICAgICAgZm9yKGkgPSAxMzsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzNjYxMzAzMjsKKyAgICAgICAgICAgIHAzMlsgMzldID0gMHgzMDM5MzEzMDsKKyAgICAgICAgICAgIHAzMlsgNDBdID0gMHg2MzM4NjIzNzsKKyAgICAgICAgICAgIHAzMlsgNDFdID0gMHg2MzMzMzUzOTsKKyAgICAgICAgICAgIHAzMlsgNDJdID0gMHgzODM0MzE2MTsKKyAgICAgICAgICAgIHAzMlsgNDNdID0gMHgzMTYyNjUzMTsKKyAgICAgICAgICAgIHAzMlsgNDRdID0gMHgzMjMxMzUzMDsKKyAgICAgICAgICAgIHAzMlsgNDVdID0gMHgzNzM4Mzc2NjsKKyAgICAgICAgICAgIHAzMlsgNDZdID0gMHgzMzYxMzQzNDsKKyAgICAgICAgICAgIHAzMlsgNDddID0gMHg2NjM1MzAzMjsKKyAgICAgICAgICAgIHAzMlsgNDhdID0gMHgwMDAwMDA2NDsKKyAgICAgICAgICAgIGZvcihpID0gNDk7IGkgPD0gNzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4NjUzMDY2MzM7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4MzYzMTYxNjI7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4NjEzNjM4MzI7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzczNTY0MzI7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4MzkzMDYxNjU7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4MzYzMTMxMzk7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzkzNDY0Mzg7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzMzNjM0Mzk7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzMzODY1Mzc7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzM2NTMzMzQ7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4MDAwMDAwMzY7CisgICAgICAgICAgICBmb3IoaSA9IDg1OyBpIDw9IDEwOTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzMTM1NjQzMDsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzNjYzNjI2NjsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHg2MTMxMzc2MzsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHgzNDM5MzAzMDsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHg2MzMyNjE2NjsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzNDM1NjQ2NDsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzMTMxNjIzNTsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzMDYzMzU2MzsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHgzNzM5Mzc2MzsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHg2NjM0MzIzMzsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHgwMDAwMDAzMTsKKyAgICAgICAgICAgIGZvcihpID0gMTIxOyBpIDw9IDE0NTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDAzMTsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHgzMDMwMzAzNDsKKyAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDE5NjsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxOTddID0gMHg0NjMyMzkzMjsKKyAgICAgICAgICAgIHAzMlsxOThdID0gMHg0NTM3Mzc0NTsKKyAgICAgICAgICAgIHAzMlsxOTldID0gMHgzMTQzMzAzNzsKKyAgICAgICAgICAgIHAzMlsyMDBdID0gMHgzMjM0NDEzMjsKKyAgICAgICAgICAgIHAzMlsyMDFdID0gMHgzMzQzMzQzMzsKKyAgICAgICAgICAgIHAzMlsyMDJdID0gMHgwMDAwMDAzMzsKKyAgICAgICAgICAgIGZvcihpID0gMjAzOyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDBhMzsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwNzsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwNjsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwMzsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX0JfMjMzOgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDBiOworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDNiOworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDE1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyAxNl0gPSAweDAwMzEzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAxNzsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzNjM2MzYzMDsKKyAgICAgICAgICAgIHAzMlsgMzldID0gMHg2NDY1MzczNDsKKyAgICAgICAgICAgIHAzMlsgNDBdID0gMHgzMzYzMzY2NTsKKyAgICAgICAgICAgIHAzMlsgNDFdID0gMHgzNzYzMzIzMzsKKyAgICAgICAgICAgIHAzMlsgNDJdID0gMHgzMDYzMzg2NjsKKyAgICAgICAgICAgIHAzMlsgNDNdID0gMHg2MjMzMzIzOTsKKyAgICAgICAgICAgIHAzMlsgNDRdID0gMHgzMjM4MzU2MjsKKyAgICAgICAgICAgIHAzMlsgNDVdID0gMHgzMzYyMzMzMTsKKyAgICAgICAgICAgIHAzMlsgNDZdID0gMHgzMjYyMzMzMzsKKyAgICAgICAgICAgIHAzMlsgNDddID0gMHg2MzM5NjUzMDsKKyAgICAgICAgICAgIHAzMlsgNDhdID0gMHgzODMyMzQ2NTsKKyAgICAgICAgICAgIHAzMlsgNDldID0gMHgzMTY1NjYzMTsKKyAgICAgICAgICAgIHAzMlsgNTBdID0gMHgzNzY2MzUzMTsKKyAgICAgICAgICAgIHAzMlsgNTFdID0gMHgzOTY2Mzg2NDsKKyAgICAgICAgICAgIHAzMlsgNTJdID0gMHgwMDY0NjEzMDsKKyAgICAgICAgICAgIGZvcihpID0gNTM7IGkgPD0gNzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4NjM2MTY2MzA7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4NjM2NjY0Mzk7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4Mzg2MzYxNjI7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4NjIzMzMxMzM7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4MzMzMTMyNjI7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4NjIzMTY2Mzk7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzUzNTM3NjI7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzY2NjY1NjY7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzM2MzYyMzU7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4Mzg2NjMxMzk7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4NjYzNjMzNjI7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4NjUzODY2Mzg7CisgICAgICAgICAgICBwMzJbIDg2XSA9IDB4MzczMzM3NjI7CisgICAgICAgICAgICBwMzJbIDg3XSA9IDB4MzU2NDY2MzE7CisgICAgICAgICAgICBwMzJbIDg4XSA9IDB4MDA2MjM4MzU7CisgICAgICAgICAgICBmb3IoaSA9IDg5OyBpIDw9IDEwOTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzNjMwMzAzMTsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHg2MTM4MzA2MTsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzMDM5MzEzNDsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHgzMDM1MzMzMzsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHg2NTM4MzczNjsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzMjM1MzgzNTsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHg2MjY1NjIzODsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzMDYxMzg2NjsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHg2NjY2NjU2MjsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHg2MTM3MzYzODsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzMzYxNjMzNzsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHgzNjMxMzczNjsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzMDY1Mzc2NjsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHgzMTM4NjYzMTsKKyAgICAgICAgICAgIHAzMlsxMjRdID0gMHgwMDMyMzUzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTI1OyBpIDw9IDE0NTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA0NjsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHgzMDMwMzAzMTsKKyAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDE5ODsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxOTldID0gMHg0NTMzMzEzMDsKKyAgICAgICAgICAgIHAzMlsyMDBdID0gMHg0NTM0MzczOTsKKyAgICAgICAgICAgIHAzMlsyMDFdID0gMHgzODQ2MzIzNzsKKyAgICAgICAgICAgIHAzMlsyMDJdID0gMHgzMjM5MzY0MTsKKyAgICAgICAgICAgIHAzMlsyMDNdID0gMHgzMTMzMzAzMjsKKyAgICAgICAgICAgIHAzMlsyMDRdID0gMHgzMDM2MzI0NDsKKyAgICAgICAgICAgIHAzMlsyMDVdID0gMHg0NTQ2NDMzMzsKKyAgICAgICAgICAgIHAzMlsyMDZdID0gMHgwMDM3NDQzMDsKKyAgICAgICAgICAgIGZvcihpID0gMjA3OyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDBlOTsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDA0YTsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDA0YTsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDA0YTsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX0JfMjgzOgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDBjOworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDQ3OworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDE4OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyAxOV0gPSAweDAwMzEzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAyMDsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzNjYyMzczMjsKKyAgICAgICAgICAgIHAzMlsgMzldID0gMHg2MzYxMzAzODsKKyAgICAgICAgICAgIHAzMlsgNDBdID0gMHgzNTM4NjIzODsKKyAgICAgICAgICAgIHAzMlsgNDFdID0gMHg2MTY0MzYzOTsKKyAgICAgICAgICAgIHAzMlsgNDJdID0gMHg2MTM0NjEzNTsKKyAgICAgICAgICAgIHAzMlsgNDNdID0gMHgzMTYxMzg2NjsKKyAgICAgICAgICAgIHAzMlsgNDRdID0gMHgzMzMwNjEzOTsKKyAgICAgICAgICAgIHAzMlsgNDVdID0gMHg2MzY2MzMzMDsKKyAgICAgICAgICAgIHAzMlsgNDZdID0gMHg2NjM3Mzk2MTsKKyAgICAgICAgICAgIHAzMlsgNDddID0gMHgzNDM2Mzc2NDsKKyAgICAgICAgICAgIHAzMlsgNDhdID0gMHgzOTMwMzMzNTsKKyAgICAgICAgICAgIHAzMlsgNDldID0gMHg2MTMyNjE2NjsKKyAgICAgICAgICAgIHAzMlsgNTBdID0gMHgzNDMxMzgzNTsKKyAgICAgICAgICAgIHAzMlsgNTFdID0gMHg2NjYxMzUzODsKKyAgICAgICAgICAgIHAzMlsgNTJdID0gMHgzMzM2MzIzNjsKKyAgICAgICAgICAgIHAzMlsgNTNdID0gMHgzMzMxMzM2NTsKKyAgICAgICAgICAgIHAzMlsgNTRdID0gMHg2MTM5Mzc2MjsKKyAgICAgICAgICAgIHAzMlsgNTVdID0gMHgwMDM1NjYzMjsKKyAgICAgICAgICAgIGZvcihpID0gNTY7IGkgPD0gNzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzMzOTY2MzU7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4MzgzNTMyMzk7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4NjQzNzYyNjQ7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4NjUzMDM5NjQ7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4MzQzMzM5MzE7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4Mzc2MzM4NjY7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4NjQzMDYyMzA7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzI2MzY1NjY7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzI2NDY1NjU7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzUzODYyMzU7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4NjE2NTM3MzU7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4Mzg2MzM5NjM7CisgICAgICAgICAgICBwMzJbIDg2XSA9IDB4NjUzMjY1MzA7CisgICAgICAgICAgICBwMzJbIDg3XSA9IDB4NjYzODM5MzE7CisgICAgICAgICAgICBwMzJbIDg4XSA9IDB4NjI2NDYzMzg7CisgICAgICAgICAgICBwMzJbIDg5XSA9IDB4Mzg2NDYzNjU7CisgICAgICAgICAgICBwMzJbIDkwXSA9IDB4MzIzMTYyMzY7CisgICAgICAgICAgICBwMzJbIDkxXSA9IDB4MDAzMzM1MzA7CisgICAgICAgICAgICBmb3IoaSA9IDkyOyBpIDw9IDEwOTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzNjM3MzYzMzsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHg2NjM0MzUzODsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzMTM0MzI2NTsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHg2MjYzMzEzNDsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHg2NTY2MzgzOTsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHg2MjM0NjQzNjsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzMDY0MzAzMjsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzNTM0NjIzMjsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHg2NjY2MzYzMTsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHgzMzMyMzAzNzsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHg2NDY1MzAzNTsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHgzODMwNjI2NDsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzNzM3MzYzMjsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHgzMTM4NjMzOTsKKyAgICAgICAgICAgIHAzMlsxMjRdID0gMHg2NDMwNjYzMzsKKyAgICAgICAgICAgIHAzMlsxMjVdID0gMHg2MjM1MzQ2NjsKKyAgICAgICAgICAgIHAzMlsxMjZdID0gMHgzMTMxMzg2NTsKKyAgICAgICAgICAgIHAzMlsxMjddID0gMHgwMDM0NjYzMjsKKyAgICAgICAgICAgIGZvcihpID0gMTI4OyBpIDw9IDE0NTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA1NTsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHg0NjQ2NDYzMzsKKyAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDE5OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsyMDBdID0gMHg0NTQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsyMDFdID0gMHgzMzMwMzk0NjsKKyAgICAgICAgICAgIHAzMlsyMDJdID0gMHgzNjM2MzkzOTsKKyAgICAgICAgICAgIHAzMlsyMDNdID0gMHgzOTQzNDYzMDsKKyAgICAgICAgICAgIHAzMlsyMDRdID0gMHgzOTQxMzgzMzsKKyAgICAgICAgICAgIHAzMlsyMDVdID0gMHgzNTM2MzEzMDsKKyAgICAgICAgICAgIHAzMlsyMDZdID0gMHgzMjM0MzA0MjsKKyAgICAgICAgICAgIHAzMlsyMDddID0gMHg0NTQzMzc0MTsKKyAgICAgICAgICAgIHAzMlsyMDhdID0gMHg0MjQ0NDE0NjsKKyAgICAgICAgICAgIHAzMlsyMDldID0gMHgwMDM3MzAzMzsKKyAgICAgICAgICAgIGZvcihpID0gMjEwOyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDExYjsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwYzsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwNzsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwNTsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX0JfNDA5OgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDBkOworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDY3OworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDI2OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyAyN10gPSAweDAwMzEzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAyODsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgMzhdID0gMHg2MTMxMzIzMDsKKyAgICAgICAgICAgIHAzMlsgMzldID0gMHg2MzMyNjMzNTsKKyAgICAgICAgICAgIHAzMlsgNDBdID0gMHgzOTY1NjUzODsKKyAgICAgICAgICAgIHAzMlsgNDFdID0gMHgzNTYyNjU2NjsKKyAgICAgICAgICAgIHAzMlsgNDJdID0gMHgzOTYyMzQ2MzsKKyAgICAgICAgICAgIHAzMlsgNDNdID0gMHgzMzM1Mzc2MTsKKyAgICAgICAgICAgIHAzMlsgNDRdID0gMHgzNDYyMzc2MjsKKyAgICAgICAgICAgIHAzMlsgNDVdID0gMHgzNzYyMzYzNzsKKyAgICAgICAgICAgIHAzMlsgNDZdID0gMHgzNDM2NjQ2NjsKKyAgICAgICAgICAgIHAzMlsgNDddID0gMHg2NjY1MzIzMjsKKyAgICAgICAgICAgIHAzMlsgNDhdID0gMHg2NDMzNjYzMTsKKyAgICAgICAgICAgIHAzMlsgNDldID0gMHgzNDM3MzY2NDsKKyAgICAgICAgICAgIHAzMlsgNTBdID0gMHg2NjMxMzYzNzsKKyAgICAgICAgICAgIHAzMlsgNTFdID0gMHg2NDM5Mzk2MTsKKyAgICAgICAgICAgIHAzMlsgNTJdID0gMHgzMjYzNjEzNjsKKyAgICAgICAgICAgIHAzMlsgNTNdID0gMHg2MTM4NjMzNzsKKyAgICAgICAgICAgIHAzMlsgNTRdID0gMHgzOTMxNjEzOTsKKyAgICAgICAgICAgIHAzMlsgNTVdID0gMHgzNzMyNjIzNzsKKyAgICAgICAgICAgIHAzMlsgNTZdID0gMHgzMjMyMzgzMjsKKyAgICAgICAgICAgIHAzMlsgNTddID0gMHg2NDYzMzY2NjsKKyAgICAgICAgICAgIHAzMlsgNThdID0gMHgzNTYxMzczNTsKKyAgICAgICAgICAgIHAzMlsgNTldID0gMHgzNDYxNjEzNTsKKyAgICAgICAgICAgIHAzMlsgNjBdID0gMHg2MTMwMzU2NjsKKyAgICAgICAgICAgIHAzMlsgNjFdID0gMHgzNzMxMzM2NTsKKyAgICAgICAgICAgIHAzMlsgNjJdID0gMHgzNTMzMzE2MjsKKyAgICAgICAgICAgIHAzMlsgNjNdID0gMHgwMDY2MzUzNDsKKyAgICAgICAgICAgIGZvcihpID0gNjQ7IGkgPD0gNzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzQ2NDM1MzE7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4NjQzMDM2Mzg7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4NjQzODM4MzA7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzQzMzYyNjQ7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4MzA2MjM2Mzk7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4MzYzMDM2NjM7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzYzNTM3MzQ7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzQzMDM2MzI7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4NjQ2MzMxMzQ7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4NjY2MTM0NjU7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4MzEzNzM3MzE7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4NjI2NDM0NjQ7CisgICAgICAgICAgICBwMzJbIDg2XSA9IDB4NjY2NjMxMzA7CisgICAgICAgICAgICBwMzJbIDg3XSA9IDB4MzM2MjM1NjU7CisgICAgICAgICAgICBwMzJbIDg4XSA9IDB4MzkzNTY1MzQ7CisgICAgICAgICAgICBwMzJbIDg5XSA9IDB4NjQzMzMwMzc7CisgICAgICAgICAgICBwMzJbIDkwXSA9IDB4MzUzNTMyNjM7CisgICAgICAgICAgICBwMzJbIDkxXSA9IDB4MzgzNjM4NjE7CisgICAgICAgICAgICBwMzJbIDkyXSA9IDB4MzgzMTMxNjE7CisgICAgICAgICAgICBwMzJbIDkzXSA9IDB4MzUzMTM1MzA7CisgICAgICAgICAgICBwMzJbIDk0XSA9IDB4NjEzMzMwMzY7CisgICAgICAgICAgICBwMzJbIDk1XSA9IDB4MzY2MjYxNjU7CisgICAgICAgICAgICBwMzJbIDk2XSA9IDB4MzQzOTM3MzA7CisgICAgICAgICAgICBwMzJbIDk3XSA9IDB4NjIzNDM1NjU7CisgICAgICAgICAgICBwMzJbIDk4XSA9IDB4MzkzOTM3NjI7CisgICAgICAgICAgICBwMzJbIDk5XSA9IDB4MDAzNzYxMzY7CisgICAgICAgICAgICBmb3IoaSA9IDEwMDsgaSA8PSAxMDk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4NjIzMTM2MzA7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4NjE2NjYzMzE7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4NjU2MjM2NjI7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzIzMzY2MzU7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjE2NjYyNjI7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4MzIzMzM4Mzc7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzE2NDY1MzQ7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4Mzc2MTM2MzA7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4NjIzNjMzMzY7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4NjEzNTYzMzk7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4MzE2NDYyMzc7CisgICAgICAgICAgICBwMzJbMTIxXSA9IDB4MzA2NDM4Mzk7CisgICAgICAgICAgICBwMzJbMTIyXSA9IDB4NjEzODM1MzE7CisgICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzU2NjM0NjE7CisgICAgICAgICAgICBwMzJbMTI0XSA9IDB4NjQzODM4MzQ7CisgICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzM2NjM4MzA7CisgICAgICAgICAgICBwMzJbMTI2XSA9IDB4MzQzMTM1Mzg7CisgICAgICAgICAgICBwMzJbMTI3XSA9IDB4NjQ2NjMxNjY7CisgICAgICAgICAgICBwMzJbMTI4XSA9IDB4MzQ2MjM0NjY7CisgICAgICAgICAgICBwMzJbMTI5XSA9IDB4NjQzMDM0NjY7CisgICAgICAgICAgICBwMzJbMTMwXSA9IDB4MzEzODMxMzI7CisgICAgICAgICAgICBwMzJbMTMxXSA9IDB4MzgzNjMzNjI7CisgICAgICAgICAgICBwMzJbMTMyXSA9IDB4MzYzMzYzMzE7CisgICAgICAgICAgICBwMzJbMTMzXSA9IDB4MzA2MTYyMzQ7CisgICAgICAgICAgICBwMzJbMTM0XSA9IDB4NjMzMzM3MzI7CisgICAgICAgICAgICBwMzJbMTM1XSA9IDB4MDAzNjMwMzc7CisgICAgICAgICAgICBmb3IoaSA9IDEzNjsgaSA8PSAxNDU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7CisgICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwN2I7CisgICAgICAgICAgICBwMzJbMTkyXSA9IDB4MzAzMDMwMzE7CisgICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAyMDQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMjA1XSA9IDB4NDEzMjQ1MzE7CisgICAgICAgICAgICBwMzJbMjA2XSA9IDB4NDEzNjQ0NDE7CisgICAgICAgICAgICBwMzJbMjA3XSA9IDB4NDYzMjMxMzY7CisgICAgICAgICAgICBwMzJbMjA4XSA9IDB4MzAzMzMzMzM7CisgICAgICAgICAgICBwMzJbMjA5XSA9IDB4MzU0NTQyMzc7CisgICAgICAgICAgICBwMzJbMjEwXSA9IDB4MzczNDQxNDY7CisgICAgICAgICAgICBwMzJbMjExXSA9IDB4Mzk0MzMzNDM7CisgICAgICAgICAgICBwMzJbMjEyXSA9IDB4MzIzNTMwNDU7CisgICAgICAgICAgICBwMzJbMjEzXSA9IDB4MzgzMzM4NDY7CisgICAgICAgICAgICBwMzJbMjE0XSA9IDB4NDMzNDM2MzE7CisgICAgICAgICAgICBwMzJbMjE1XSA9IDB4NDQzNzMzNDQ7CisgICAgICAgICAgICBwMzJbMjE2XSA9IDB4MzEzMjQxMzk7CisgICAgICAgICAgICBwMzJbMjE3XSA9IDB4MDAzMzM3MzE7CisgICAgICAgICAgICBmb3IoaSA9IDIxODsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAxOTk7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwNTc7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwNTc7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwNTc7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9CXzU3MToKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwZTsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA4ZjsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAzNjsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgMzddID0gMHgwMDMxMzAzMDsKKyAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzMDM0NjYzMjsKKyAgICAgICAgICAgIHAzMlsgMzldID0gMHgzMjY1Mzc2NTsKKyAgICAgICAgICAgIHAzMlsgNDBdID0gMHg2NjMxMzIzMjsKKyAgICAgICAgICAgIHAzMlsgNDFdID0gMHg2NDM1MzkzMjsKKyAgICAgICAgICAgIHAzMlsgNDJdID0gMHgzNzM5MzI2NTsKKyAgICAgICAgICAgIHAzMlsgNDNdID0gMHg2MjM3MzEzMTsKKyAgICAgICAgICAgIHAzMlsgNDRdID0gMHg2NDMzNjYzNzsKKyAgICAgICAgICAgIHAzMlsgNDVdID0gMHgzNTY2MzIzNjsKKyAgICAgICAgICAgIHAzMlsgNDZdID0gMHgzOTYxMzY2MzsKKyAgICAgICAgICAgIHAzMlsgNDddID0gMHg2MzY2NjYzNzsKKyAgICAgICAgICAgIHAzMlsgNDhdID0gMHg2NTYzMzg2MjsKKyAgICAgICAgICAgIHAzMlsgNDldID0gMHg2MzMxNjY2NjsKKyAgICAgICAgICAgIHAzMlsgNTBdID0gMHg2MTYyMzY2NDsKKyAgICAgICAgICAgIHAzMlsgNTFdID0gMHgzNDY1NjMzODsKKyAgICAgICAgICAgIHAzMlsgNTJdID0gMHgzMTYxMzk2MTsKKyAgICAgICAgICAgIHAzMlsgNTNdID0gMHgzODY0NjEzODsKKyAgICAgICAgICAgIHAzMlsgNTRdID0gMHg2MTY2NjYzNDsKKyAgICAgICAgICAgIHAzMlsgNTVdID0gMHgzODY0NjI2MjsKKyAgICAgICAgICAgIHAzMlsgNTZdID0gMHgzNTYxNjY2NTsKKyAgICAgICAgICAgIHAzMlsgNTddID0gMHgzMjMzMzMzOTsKKyAgICAgICAgICAgIHAzMlsgNThdID0gMHg2MTM3NjU2MjsKKyAgICAgICAgICAgIHAzMlsgNTldID0gMHgzNTM3MzY2NDsKKyAgICAgICAgICAgIHAzMlsgNjBdID0gMHgzNjM2NjEzNjsKKyAgICAgICAgICAgIHAzMlsgNjFdID0gMHgzNDM5MzI2NTsKKyAgICAgICAgICAgIHAzMlsgNjJdID0gMHgzMTY0NjY2MTsKKyAgICAgICAgICAgIHAzMlsgNjNdID0gMHgzNzYxMzUzODsKKyAgICAgICAgICAgIHAzMlsgNjRdID0gMHgzMTY2NjYzODsKKyAgICAgICAgICAgIHAzMlsgNjVdID0gMHgzNTYxNjEzMjsKKyAgICAgICAgICAgIHAzMlsgNjZdID0gMHgzNDY1MzAzMjsKKyAgICAgICAgICAgIHAzMlsgNjddID0gMHgzMzM3NjU2NDsKKyAgICAgICAgICAgIHAzMlsgNjhdID0gMHg2MzYxNjIzOTsKKyAgICAgICAgICAgIHAzMlsgNjldID0gMHgzNzYzMzA2MTsKKyAgICAgICAgICAgIHAzMlsgNzBdID0gMHg2NjY1NjY2NjsKKyAgICAgICAgICAgIHAzMlsgNzFdID0gMHgzMjY2Mzc2NjsKKyAgICAgICAgICAgIHAzMlsgNzJdID0gMHgzNzM1MzUzOTsKKyAgICAgICAgICAgIHAzMlsgNzNdID0gMHgwMDYxMzczMjsKKyAgICAgICAgICAgIHAzMlsgNzRdID0gMHgzMDMzMzAzMzsKKyAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzMzY0MzEzMDsKKyAgICAgICAgICAgIHAzMlsgNzZdID0gMHgzNTM4NjIzNDsKKyAgICAgICAgICAgIHAzMlsgNzddID0gMHgzNjM5MzIzNjsKKyAgICAgICAgICAgIHAzMlsgNzhdID0gMHg2MzM2MzE2MzsKKyAgICAgICAgICAgIHAzMlsgNzldID0gMHgzMDM0NjQzMDsKKyAgICAgICAgICAgIHAzMlsgODBdID0gMHg2NDYzMzM2NDsKKyAgICAgICAgICAgIHAzMlsgODFdID0gMHgzMDM1MzczNzsKKyAgICAgICAgICAgIHAzMlsgODJdID0gMHg2NDMzMzk2MTsKKyAgICAgICAgICAgIHAzMlsgODNdID0gMHgzOTMyNjQzMTsKKyAgICAgICAgICAgIHAzMlsgODRdID0gMHg2MTY2MzUzNTsKKyAgICAgICAgICAgIHAzMlsgODVdID0gMHg2MTYxMzAzODsKKyAgICAgICAgICAgIHAzMlsgODZdID0gMHgzMDM0NjYzNTsKKyAgICAgICAgICAgIHAzMlsgODddID0gMHg2NDM4NjM2NjsKKyAgICAgICAgICAgIHAzMlsgODhdID0gMHgzMjYyMzc2MjsKKyAgICAgICAgICAgIHAzMlsgODldID0gMHg2MjY0NjI2MTsKKyAgICAgICAgICAgIHAzMlsgOTBdID0gMHgzMzM1NjU2NDsKKyAgICAgICAgICAgIHAzMlsgOTFdID0gMHg2NjMwMzUzOTsKKyAgICAgICAgICAgIHAzMlsgOTJdID0gMHg2NDMwNjMzNDsKKyAgICAgICAgICAgIHAzMlsgOTNdID0gMHg2MzMzMzkzMjsKKyAgICAgICAgICAgIHAzMlsgOTRdID0gMHgzMTM3NjQ2NDsKKyAgICAgICAgICAgIHAzMlsgOTVdID0gMHgzNTMzNjEzMTsKKyAgICAgICAgICAgIHAzMlsgOTZdID0gMHg2NjM3MzY2MjsKKyAgICAgICAgICAgIHAzMlsgOTddID0gMHgzOTM0MzE2MjsKKyAgICAgICAgICAgIHAzMlsgOThdID0gMHgzNjY1NjEzOTsKKyAgICAgICAgICAgIHAzMlsgOTldID0gMHgzODMzMzAzMDsKKyAgICAgICAgICAgIHAzMlsxMDBdID0gMHg2NjM0MzEzNjsKKyAgICAgICAgICAgIHAzMlsxMDFdID0gMHgzNDM5MzMzMTsKKyAgICAgICAgICAgIHAzMlsxMDJdID0gMHg2MTY2NjI2MTsKKyAgICAgICAgICAgIHAzMlsxMDNdID0gMHg2MzM0NjIzMzsKKyAgICAgICAgICAgIHAzMlsxMDRdID0gMHg2NDMwMzUzODsKKyAgICAgICAgICAgIHAzMlsxMDVdID0gMHg2NTM3MzIzOTsKKyAgICAgICAgICAgIHAzMlsxMDZdID0gMHgzNzM3NjUzMTsKKyAgICAgICAgICAgIHAzMlsxMDddID0gMHgzODYzMzkzNjsKKyAgICAgICAgICAgIHAzMlsxMDhdID0gMHgzMjYzNjU2NTsKKyAgICAgICAgICAgIHAzMlsxMDldID0gMHgwMDM5MzE2NDsKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHg2NjYyMzczMzsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzNDMzMzczMjsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzNjYxNjQzMjsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHgzNjYyMzkzMzsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHg2NjYzNjM2NDsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHg2MjY1NjY2NjsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzNjY0MzMzNzsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHgzODM3NjQzOTsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHgzMjYzMzY2MzsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHgzMDM2NjEzNzsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHg2MjYzMzkzMDsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHgzMTYxNjM2MjsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHg2NjMwMzgzOTsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHgzMzMzMzUzODsKKyAgICAgICAgICAgIHAzMlsxMjRdID0gMHg2NTMxMzIzOTsKKyAgICAgICAgICAgIHAzMlsxMjVdID0gMHgzODM2NjEzODsKKyAgICAgICAgICAgIHAzMlsxMjZdID0gMHgzMzMyMzQzNDsKKyAgICAgICAgICAgIHAzMlsxMjddID0gMHg2MjMzMzQ2NTsKKyAgICAgICAgICAgIHAzMlsxMjhdID0gMHgzODMwNjI2MTsKKyAgICAgICAgICAgIHAzMlsxMjldID0gMHgzNjM3MzU2MTsKKyAgICAgICAgICAgIHAzMlsxMzBdID0gMHg2MTMxMzkzMjsKKyAgICAgICAgICAgIHAzMlsxMzFdID0gMHgzNDY2Mzg2NjsKKyAgICAgICAgICAgIHAzMlsxMzJdID0gMHg2MjYyMzEzNjsKKyAgICAgICAgICAgIHAzMlsxMzNdID0gMHg2MjM4NjEzMjsKKyAgICAgICAgICAgIHAzMlsxMzRdID0gMHgzMTMzMzUzMzsKKyAgICAgICAgICAgIHAzMlsxMzVdID0gMHgzMDY2MzI2NDsKKyAgICAgICAgICAgIHAzMlsxMzZdID0gMHg2MzM1MzgzNDsKKyAgICAgICAgICAgIHAzMlsxMzddID0gMHgzMTYyMzkzMTsKKyAgICAgICAgICAgIHAzMlsxMzhdID0gMHg2NjMyNjUzNjsKKyAgICAgICAgICAgIHAzMlsxMzldID0gMHgzNjMxMzUzMTsKKyAgICAgICAgICAgIHAzMlsxNDBdID0gMHg2NDMzMzI2NTsKKyAgICAgICAgICAgIHAzMlsxNDFdID0gMHgzMTYzMzM2NDsKKyAgICAgICAgICAgIHAzMlsxNDJdID0gMHgzMjM4MzQ2MTsKKyAgICAgICAgICAgIHAzMlsxNDNdID0gMHgzMTY2NjEzNzsKKyAgICAgICAgICAgIHAzMlsxNDRdID0gMHg2MzYxMzg2MjsKKyAgICAgICAgICAgIHAzMlsxNDVdID0gMHgwMDYyMzUzMTsKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDBhYzsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHg0NjQ2NDYzMzsKKyAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDIwODsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsyMDldID0gMHg0NTQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsyMTBdID0gMHg0MzMxMzYzNjsKKyAgICAgICAgICAgIHAzMlsyMTFdID0gMHg0NjM4MzE0NTsKKyAgICAgICAgICAgIHAzMlsyMTJdID0gMHgzOTM1MzU0NjsKKyAgICAgICAgICAgIHAzMlsyMTNdID0gMHgzMDMzMzczODsKKyAgICAgICAgICAgIHAzMlsyMTRdID0gMHgzOTM1MzAzODsKKyAgICAgICAgICAgIHAzMlsyMTVdID0gMHgzNjM4MzE0MjsKKyAgICAgICAgICAgIHAzMlsyMTZdID0gMHgzODMzMzIzODsKKyAgICAgICAgICAgIHAzMlsyMTddID0gMHg0MzQ1MzEzNTsKKyAgICAgICAgICAgIHAzMlsyMThdID0gMHgzOTQ0NDQzNzsKKyAgICAgICAgICAgIHAzMlsyMTldID0gMHgzMTMxNDE0MzsKKyAgICAgICAgICAgIHAzMlsyMjBdID0gMHg0NTQ0MzEzNjsKKyAgICAgICAgICAgIHAzMlsyMjFdID0gMHgzNTQ0MzMzOTsKKyAgICAgICAgICAgIHAzMlsyMjJdID0gMHg0NDM0MzczMTsKKyAgICAgICAgICAgIHAzMlsyMjNdID0gMHgzODQ1MzYzNjsKKyAgICAgICAgICAgIHAzMlsyMjRdID0gMHg0NTMyMzgzMzsKKyAgICAgICAgICAgIHAzMlsyMjVdID0gMHgzMjQyNDIzOTsKKyAgICAgICAgICAgIHAzMlsyMjZdID0gMHgzNDM4NDU0NjsKKyAgICAgICAgICAgIHAzMlsyMjddID0gMHgwMDM3MzQ0NTsKKyAgICAgICAgICAgIGZvcihpID0gMjI4OyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDIzYjsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwYTsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwNTsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwMjsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX0tfMTYzOgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDA1OworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDI5OworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDExOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyAxMl0gPSAweDAwMDAwMDMxOworICAgICAgICAgICAgZm9yKGkgPSAxMzsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIGZvcihpID0gMzg7IGkgPD0gNDc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MDAwMDAwMzE7CisgICAgICAgICAgICBmb3IoaSA9IDQ5OyBpIDw9IDczOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDMxNjU2NjMyOworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDM1MzA2MzMzOworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDYyNjIzNzMzOworICAgICAgICAgICAgcDMyWyA3N10gPSAweDYxMzEzMTYzOworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDMwNjE2MTYzOworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM5Mzc2NDM3OworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM0NjU2NDMzOworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDM1NjQzNjY1OworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDM5NjMzNTY1OworICAgICAgICAgICAgcDMyWyA4M10gPSAweDY1NjU2NTM0OworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDAwMDAwMDM4OworICAgICAgICAgICAgZm9yKGkgPSA4NTsgaSA8PSAxMDk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzAzOTM4MzI7CisgICAgICAgICAgICBwMzJbMTExXSA9IDB4NjI2NjMwMzc7CisgICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzM2NDM1MzA7CisgICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzU2NjY2Mzg7CisgICAgICAgICAgICBwMzJbMTE0XSA9IDB4MzEzMjMzMzg7CisgICAgICAgICAgICBwMzJbMTE1XSA9IDB4Mzg2NTMyNjY7CisgICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzMzNTMwMzA7CisgICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzMzNTY0MzY7CisgICAgICAgICAgICBwMzJbMTE4XSA9IDB4NjQ2MzYzMzg7CisgICAgICAgICAgICBwMzJbMTE5XSA9IDB4NjQzMzYxNjE7CisgICAgICAgICAgICBwMzJbMTIwXSA9IDB4MDAwMDAwMzk7CisgICAgICAgICAgICBmb3IoaSA9IDEyMTsgaSA8PSAxNDU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7CisgICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2OworCisgICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwMzE7CisgICAgICAgICAgICBwMzJbMTkyXSA9IDB4MzAzMDMwMzQ7CisgICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAxOTY7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbMTk3XSA9IDB4MzAzMTMwMzI7CisgICAgICAgICAgICBwMzJbMTk4XSA9IDB4NDUzMjQxMzg7CisgICAgICAgICAgICBwMzJbMTk5XSA9IDB4MzA0MzQzMzA7CisgICAgICAgICAgICBwMzJbMjAwXSA9IDB4NDYzOTM5NDQ7CisgICAgICAgICAgICBwMzJbMjAxXSA9IDB4NDUzNTQxMzg7CisgICAgICAgICAgICBwMzJbMjAyXSA9IDB4MDAwMDAwNDY7CisgICAgICAgICAgICBmb3IoaSA9IDIwMzsgaSA8PSAyMzU7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAwYTM7CisgICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMDc7CisgICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDY7CisgICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDM7CisgICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBDVVJWRV9LXzIzMzoKKyAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwNjsKKyAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDAzYjsKKyAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgMTZdID0gMHgwMDMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTc7IGkgPD0gMzc7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBmb3IoaSA9IDM4OyBpIDw9IDUxOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyA1Ml0gPSAweDAwMzEzMDMwOworICAgICAgICAgICAgZm9yKGkgPSA1MzsgaSA8PSA3MzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsgNzRdID0gMHgzMzMyMzczMTsKKyAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzODYxNjIzMjsKKyAgICAgICAgICAgIHAzMlsgNzZdID0gMHgzNzYxMzMzNTsKKyAgICAgICAgICAgIHAzMlsgNzddID0gMHgzMTMzMzc2NTsKKyAgICAgICAgICAgIHAzMlsgNzhdID0gMHgzMjMxNjY2MTsKKyAgICAgICAgICAgIHAzMlsgNzldID0gMHgzMjMyNjYzOTsKKyAgICAgICAgICAgIHAzMlsgODBdID0gMHgzMTM0NjY2NjsKKyAgICAgICAgICAgIHAzMlsgODFdID0gMHgzNjM1MzkzNDsKKyAgICAgICAgICAgIHAzMlsgODJdID0gMHgzMTM0NjEzMzsKKyAgICAgICAgICAgIHAzMlsgODNdID0gMHgzNjMyNjMzOTsKKyAgICAgICAgICAgIHAzMlsgODRdID0gMHgzMDM1NjY2MjsKKyAgICAgICAgICAgIHAzMlsgODVdID0gMHgzOTYzMzQ2MTsKKyAgICAgICAgICAgIHAzMlsgODZdID0gMHg2NTY1MzY2NDsKKyAgICAgICAgICAgIHAzMlsgODddID0gMHgzNjY0NjE2NjsKKyAgICAgICAgICAgIHAzMlsgODhdID0gMHgwMDM2MzIzMTsKKyAgICAgICAgICAgIGZvcihpID0gODk7IGkgPD0gMTA5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzExMF0gPSAweDM1NjI2NDMxOworICAgICAgICAgICAgcDMyWzExMV0gPSAweDY1NjQzNzMzOworICAgICAgICAgICAgcDMyWzExMl0gPSAweDMxMzg2NTYzOworICAgICAgICAgICAgcDMyWzExM10gPSAweDY2Mzc2MjM5OworICAgICAgICAgICAgcDMyWzExNF0gPSAweDM1NjYzMDM3OworICAgICAgICAgICAgcDMyWzExNV0gPSAweDM2NjEzNTM1OworICAgICAgICAgICAgcDMyWzExNl0gPSAweDMyMzQ2MzM3OworICAgICAgICAgICAgcDMyWzExN10gPSAweDYzMzg2MTM3OworICAgICAgICAgICAgcDMyWzExOF0gPSAweDY2NjIzOTY0OworICAgICAgICAgICAgcDMyWzExOV0gPSAweDY1NjEzODMxOworICAgICAgICAgICAgcDMyWzEyMF0gPSAweDM1NjIzOTYyOworICAgICAgICAgICAgcDMyWzEyMV0gPSAweDYzMzA2NTM2OworICAgICAgICAgICAgcDMyWzEyMl0gPSAweDM1MzAzMTMxOworICAgICAgICAgICAgcDMyWzEyM10gPSAweDY1NjE2NjM2OworICAgICAgICAgICAgcDMyWzEyNF0gPSAweDAwMzM2MTM2OworICAgICAgICAgICAgZm9yKGkgPSAxMjU7IGkgPD0gMTQ1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDQ0OworICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTU0OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgZm9yKGkgPSAxNTU7IGkgPD0gMTU5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzE2MF0gPSAweDMxMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAxNjE7IGkgPD0gMTkwOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDQ2OworICAgICAgICAgICAgcDMyWzE5Ml0gPSAweDMwMzAzMDM4OworICAgICAgICAgICAgZm9yKGkgPSAxOTM7IGkgPD0gMTk4OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzE5OV0gPSAweDQ0MzkzNjMwOworICAgICAgICAgICAgcDMyWzIwMF0gPSAweDM5NDI0MjM1OworICAgICAgICAgICAgcDMyWzIwMV0gPSAweDQzNDIzNTMxOworICAgICAgICAgICAgcDMyWzIwMl0gPSAweDQ1MzYzNDQ0OworICAgICAgICAgICAgcDMyWzIwM10gPSAweDQxMzE0MjQ2OworICAgICAgICAgICAgcDMyWzIwNF0gPSAweDMxNDYzNTQ0OworICAgICAgICAgICAgcDMyWzIwNV0gPSAweDQyNDEzMzM3OworICAgICAgICAgICAgcDMyWzIwNl0gPSAweDAwMDA0NjQ0OworICAgICAgICAgICAgZm9yKGkgPSAyMDc7IGkgPD0gMjM1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMGU5OworICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDRhOworICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDRhOworICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDRhOworICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgQ1VSVkVfS18yODM6CisgICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMDc7CisgICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwNDc7CisgICAgICAgICAgICBmb3IoaSA9IDI7IGkgPD0gMTg7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbIDE5XSA9IDB4MDAzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDIwOyBpIDw9IDM3OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgZm9yKGkgPSAzODsgaSA8PSA1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsgNTVdID0gMHgwMDMxMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gNTY7IGkgPD0gNzM7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOworCisgICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzIzMzMwMzU7CisgICAgICAgICAgICBwMzJbIDc1XSA9IDB4Mzc2NjMzMzE7CisgICAgICAgICAgICBwMzJbIDc2XSA9IDB4MzQ2MTYzMzg7CisgICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzMzODM4MzQ7CisgICAgICAgICAgICBwMzJbIDc4XSA9IDB4MzM2MTMxNjY7CisgICAgICAgICAgICBwMzJbIDc5XSA9IDB4MzYzMTM4NjI7CisgICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzgzMTY2MzI7CisgICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzUzNTY1Mzg7CisgICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzI2NDYzMzM7CisgICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzI2NjM1MzY7CisgICAgICAgICAgICBwMzJbIDg0XSA9IDB4MzUzMTYzMzM7CisgICAgICAgICAgICBwMzJbIDg1XSA9IDB4MzE2MTM3MzY7CisgICAgICAgICAgICBwMzJbIDg2XSA9IDB4MzYzNzM4MzY7CisgICAgICAgICAgICBwMzJbIDg3XSA9IDB4NjIzMzMxMzk7CisgICAgICAgICAgICBwMzJbIDg4XSA9IDB4NjEzMjYzMzA7CisgICAgICAgICAgICBwMzJbIDg5XSA9IDB4MzUzNDMyNjM7CisgICAgICAgICAgICBwMzJbIDkwXSA9IDB4MzIzOTM0Mzg7CisgICAgICAgICAgICBwMzJbIDkxXSA9IDB4MDAzNjMzMzg7CisgICAgICAgICAgICBmb3IoaSA9IDkyOyBpIDw9IDEwOTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxMTBdID0gMHg2NDYzNjMzMTsKKyAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzMDM4MzM2MTsKKyAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzOTYzMzE2NjsKKyAgICAgICAgICAgIHAzMlsxMTNdID0gMHgzODMxMzM2NTsKKyAgICAgICAgICAgIHAzMlsxMTRdID0gMHg2NjMwMzk2NDsKKyAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzMDY0MzUzOTsKKyAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzNDM1NjUzNzsKKyAgICAgICAgICAgIHAzMlsxMTddID0gMHg2NTY2MzYzMjsKKyAgICAgICAgICAgIHAzMlsxMThdID0gMHgzNDY1MzczODsKKyAgICAgICAgICAgIHAzMlsxMTldID0gMHg2NTMwNjMzNTsKKyAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzNDM4MzEzODsKKyAgICAgICAgICAgIHAzMlsxMjFdID0gMHg2NTM4MzkzNjsKKyAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzNjM5MzUzNDsKKyAgICAgICAgICAgIHAzMlsxMjNdID0gMHgzNDM2MzMzMjsKKyAgICAgICAgICAgIHAzMlsxMjRdID0gMHgzMTM0MzM2NTsKKyAgICAgICAgICAgIHAzMlsxMjVdID0gMHgzNzMxMzYzMTsKKyAgICAgICAgICAgIHAzMlsxMjZdID0gMHgzMjY0NjQzNzsKKyAgICAgICAgICAgIHAzMlsxMjddID0gMHgwMDM5MzUzMjsKKyAgICAgICAgICAgIGZvcihpID0gMTI4OyBpIDw9IDE0NTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsKKyAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7CisKKyAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsKKyAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA1NTsKKyAgICAgICAgICAgIHAzMlsxOTJdID0gMHg0NjQ2NDYzMTsKKyAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDE5OTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7CisKKyAgICAgICAgICAgIHAzMlsyMDBdID0gMHg0NTQ2NDY0NjsKKyAgICAgICAgICAgIHAzMlsyMDFdID0gMHgzMjQ1NDEzOTsKKyAgICAgICAgICAgIHAzMlsyMDJdID0gMHgzNzMwNDQ0NTsKKyAgICAgICAgICAgIHAzMlsyMDNdID0gMHgzMjM3MzczNTsKKyAgICAgICAgICAgIHAzMlsyMDRdID0gMHg0NjQ0MzUzNjsKKyAgICAgICAgICAgIHAzMlsyMDVdID0gMHgzOTQ2Mzc0NjsKKyAgICAgICAgICAgIHAzMlsyMDZdID0gMHgzMTM1MzQzNDsKKyAgICAgICAgICAgIHAzMlsyMDddID0gMHgzMTM2MzA0NTsKKyAgICAgICAgICAgIHAzMlsyMDhdID0gMHgzMzM2MzE0NTsKKyAgICAgICAgICAgIHAzMlsyMDldID0gMHgwMDMxMzY0MzsKKyAgICAgICAgICAgIGZvcihpID0gMjEwOyBpIDw9IDIzNTsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDExYjsKKyAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwYzsKKyAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwNzsKKyAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwNTsKKyAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENVUlZFX0tfNDA5OgorICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDA4OworICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDY3OworICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDI2OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyAyN10gPSAweDAwMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAyODsgaSA8PSAzNzsgaSsrKQorICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgICAgIGZvcihpID0gMzg7IGkgPD0gNjI7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbIDYzXSA9IDB4MDAzMTMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDY0OyBpIDw9IDczOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDY2MzAzNjMwOworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDM2NjYzNTMwOworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDM0NjYzODM1OworICAgICAgICAgICAgcDMyWyA3N10gPSAweDYxMzE2MzM5OworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDYyNjEzMzY0OworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDMwMzkzODMxOworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM4MzEzNzY2OworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDMwMzEzMjM0OworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMwNjQ2NjY1OworICAgICAgICAgICAgcDMyWyA4M10gPSAweDY1MzczODM5OworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDYzMzczMDMzOworICAgICAgICAgICAgcDMyWyA4NV0gPSAweDMyNjMzNDM4OworICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDYzNjM2MTM3OworICAgICAgICAgICAgcDMyWyA4N10gPSAweDY2Mzg2MjY2OworICAgICAgICAgICAgcDMyWyA4OF0gPSAweDM3MzY2NjM5OworICAgICAgICAgICAgcDMyWyA4OV0gPSAweDYzMzI2MzYzOworICAgICAgICAgICAgcDMyWyA5MF0gPSAweDMxMzAzNjM0OworICAgICAgICAgICAgcDMyWyA5MV0gPSAweDYyNjUzOTM4OworICAgICAgICAgICAgcDMyWyA5Ml0gPSAweDYxNjE2MTM1OworICAgICAgICAgICAgcDMyWyA5M10gPSAweDY1MzIzNjYxOworICAgICAgICAgICAgcDMyWyA5NF0gPSAweDMyMzIzMjY1OworICAgICAgICAgICAgcDMyWyA5NV0gPSAweDYyMzE2MjY1OworICAgICAgICAgICAgcDMyWyA5Nl0gPSAweDM0MzUzNTMzOworICAgICAgICAgICAgcDMyWyA5N10gPSAweDY1NjY2MzMwOworICAgICAgICAgICAgcDMyWyA5OF0gPSAweDMzMzIzMDM5OworICAgICAgICAgICAgcDMyWyA5OV0gPSAweDAwMzYzNDM3OworICAgICAgICAgICAgZm9yKGkgPSAxMDA7IGkgPD0gMTA5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzExMF0gPSAweDM2MzM2NTMxOworICAgICAgICAgICAgcDMyWzExMV0gPSAweDMwMzUzMDM5OworICAgICAgICAgICAgcDMyWzExMl0gPSAweDM0NjMzNzYyOworICAgICAgICAgICAgcDMyWzExM10gPSAweDYxMzIzNDY1OworICAgICAgICAgICAgcDMyWzExNF0gPSAweDMxNjE2MjYzOworICAgICAgICAgICAgcDMyWzExNV0gPSAweDYyNjM2MTY0OworICAgICAgICAgICAgcDMyWzExNl0gPSAweDMyMzQzMDY2OworICAgICAgICAgICAgcDMyWzExN10gPSAweDMzNjMzOTM5OworICAgICAgICAgICAgcDMyWzExOF0gPSAweDM3MzAzNjM0OworICAgICAgICAgICAgcDMyWzExOV0gPSAweDM5NjYzMjM4OworICAgICAgICAgICAgcDMyWzEyMF0gPSAweDYxNjUzODMxOworICAgICAgICAgICAgcDMyWzEyMV0gPSAweDY1MzczMjM0OworICAgICAgICAgICAgcDMyWzEyMl0gPSAweDM1MzIzMzM2OworICAgICAgICAgICAgcDMyWzEyM10gPSAweDY1MzUzNjMxOworICAgICAgICAgICAgcDMyWzEyNF0gPSAweDMxNjE2NTM5OworICAgICAgICAgICAgcDMyWzEyNV0gPSAweDY0MzM2NTMwOworICAgICAgICAgICAgcDMyWzEyNl0gPSAweDM2NjYzNTYxOworICAgICAgICAgICAgcDMyWzEyN10gPSAweDY1MzIzNDYzOworICAgICAgICAgICAgcDMyWzEyOF0gPSAweDM1MzU2MzM5OworICAgICAgICAgICAgcDMyWzEyOV0gPSAweDYxMzUzMTMyOworICAgICAgICAgICAgcDMyWzEzMF0gPSAweDYxNjMzOTYxOworICAgICAgICAgICAgcDMyWzEzMV0gPSAweDM1NjEzNzMyOworICAgICAgICAgICAgcDMyWzEzMl0gPSAweDY1MzMzNjM4OworICAgICAgICAgICAgcDMyWzEzM10gPSAweDY0MzgzNDYzOworICAgICAgICAgICAgcDMyWzEzNF0gPSAweDMyMzA2NTM4OworICAgICAgICAgICAgcDMyWzEzNV0gPSAweDAwNjIzNjM4OworICAgICAgICAgICAgZm9yKGkgPSAxMzY7IGkgPD0gMTQ1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDQ0OworICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTU0OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgZm9yKGkgPSAxNTU7IGkgPD0gMTU5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzE2MF0gPSAweDMxMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAxNjE7IGkgPD0gMTkwOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDdiOworICAgICAgICAgICAgcDMyWzE5Ml0gPSAweDQ2NDY0NjM3OworICAgICAgICAgICAgZm9yKGkgPSAxOTM7IGkgPD0gMjAzOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgcDMyWzIwNF0gPSAweDQ1NDY0NjQ2OworICAgICAgICAgICAgcDMyWzIwNV0gPSAweDMzMzg0NjM1OworICAgICAgICAgICAgcDMyWzIwNl0gPSAweDM0NDQzMjQyOworICAgICAgICAgICAgcDMyWzIwN10gPSAweDMwMzI0MTQ1OworICAgICAgICAgICAgcDMyWzIwOF0gPSAweDQ1MzAzMDM0OworICAgICAgICAgICAgcDMyWzIwOV0gPSAweDM1MzUzNDQzOworICAgICAgICAgICAgcDMyWzIxMF0gPSAweDQ1MzU0NDM3OworICAgICAgICAgICAgcDMyWzIxMV0gPSAweDMzNDUzMzQ0OworICAgICAgICAgICAgcDMyWzIxMl0gPSAweDQxNDMzNzQ1OworICAgICAgICAgICAgcDMyWzIxM10gPSAweDQyMzQ0MjM1OworICAgICAgICAgICAgcDMyWzIxNF0gPSAweDMzMzg0MzM1OworICAgICAgICAgICAgcDMyWzIxNV0gPSAweDMwNDUzODQyOworICAgICAgICAgICAgcDMyWzIxNl0gPSAweDQ2MzU0NTMxOworICAgICAgICAgICAgcDMyWzIxN10gPSAweDAwMDA0NjQzOworICAgICAgICAgICAgZm9yKGkgPSAyMTg7IGkgPD0gMjM1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMTk5OworICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDU3OworICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDU3OworICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDU3OworICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgQ1VSVkVfS181NzE6CisgICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMDk7CisgICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwOGY7CisgICAgICAgICAgICBmb3IoaSA9IDI7IGkgPD0gMzY7IGkrKykKKyAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOworCisgICAgICAgICAgICBwMzJbIDM3XSA9IDB4MDAzMDMwMzA7CisgICAgICAgICAgICBmb3IoaSA9IDM4OyBpIDw9IDcyOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWyA3M10gPSAweDAwMzEzMDMwOworICAgICAgICAgICAgcDMyWyA3NF0gPSAweDYyNjUzNjMyOworICAgICAgICAgICAgcDMyWyA3NV0gPSAweDM1Mzg2MTM3OworICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDMzMzIzOTM5OworICAgICAgICAgICAgcDMyWyA3N10gPSAweDM4NjM2MjY2OworICAgICAgICAgICAgcDMyWyA3OF0gPSAweDM5MzgzMTMyOworICAgICAgICAgICAgcDMyWyA3OV0gPSAweDY2MzEzMzM2OworICAgICAgICAgICAgcDMyWyA4MF0gPSAweDMzMzAzMTM4OworICAgICAgICAgICAgcDMyWyA4MV0gPSAweDYxMzQ2NTY2OworICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDYxNjMzOTYzOworICAgICAgICAgICAgcDMyWyA4M10gPSAweDMwMzczOTMyOworICAgICAgICAgICAgcDMyWyA4NF0gPSAweDY0MzIzMTMwOworICAgICAgICAgICAgcDMyWyA4NV0gPSAweDM2MzQ2NDM1OworICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDM4MzQzMjMwOworICAgICAgICAgICAgcDMyWyA4N10gPSAweDMwMzgzNDMwOworICAgICAgICAgICAgcDMyWyA4OF0gPSAweDMxMzQzODMxOworICAgICAgICAgICAgcDMyWyA4OV0gPSAweDM0MzQ2MTYzOworICAgICAgICAgICAgcDMyWyA5MF0gPSAweDM5MzAzNzMzOworICAgICAgICAgICAgcDMyWyA5MV0gPSAweDM5MzQzODM1OworICAgICAgICAgICAgcDMyWyA5Ml0gPSAweDMwMzI2MjMzOworICAgICAgICAgICAgcDMyWyA5M10gPSAweDM0MzY2NTM1OworICAgICAgICAgICAgcDMyWyA5NF0gPSAweDMzNjE2NDM3OworICAgICAgICAgICAgcDMyWyA5NV0gPSAweDYyNjQzNDMwOworICAgICAgICAgICAgcDMyWyA5Nl0gPSAweDYyNjU2MzM0OworICAgICAgICAgICAgcDMyWyA5N10gPSAweDYyNjMzODMwOworICAgICAgICAgICAgcDMyWyA5OF0gPSAweDYyMzE2NDYyOworICAgICAgICAgICAgcDMyWyA5OV0gPSAweDM0MzkzMzYxOworICAgICAgICAgICAgcDMyWzEwMF0gPSAweDM3MzczNDM5OworICAgICAgICAgICAgcDMyWzEwMV0gPSAweDM5NjI2NjM2OworICAgICAgICAgICAgcDMyWzEwMl0gPSAweDM0NjIzODM4OworICAgICAgICAgICAgcDMyWzEwM10gPSAweDM0MzczMTM3OworICAgICAgICAgICAgcDMyWzEwNF0gPSAweDM4NjE2MzY0OworICAgICAgICAgICAgcDMyWzEwNV0gPSAweDY1Mzc2MzM4OworICAgICAgICAgICAgcDMyWzEwNl0gPSAweDM1MzQzOTMyOworICAgICAgICAgICAgcDMyWzEwN10gPSAweDYxMzMzODMyOworICAgICAgICAgICAgcDMyWzEwOF0gPSAweDM4NjMzMTMwOworICAgICAgICAgICAgcDMyWzEwOV0gPSAweDAwMzIzNzM5OworICAgICAgICAgICAgcDMyWzExMF0gPSAweDY0MzkzNDMzOworICAgICAgICAgICAgcDMyWzExMV0gPSAweDM3MzAzODYzOworICAgICAgICAgICAgcDMyWzExMl0gPSAweDYyNjYzNDY2OworICAgICAgICAgICAgcDMyWzExM10gPSAweDM0MzczMzY2OworICAgICAgICAgICAgcDMyWzExNF0gPSAweDY1NjEzNDY2OworICAgICAgICAgICAgcDMyWzExNV0gPSAweDMzNjU2NDYxOworICAgICAgICAgICAgcDMyWzExNl0gPSAweDM5NjE2MzYyOworICAgICAgICAgICAgcDMyWzExN10gPSAweDM0MzEzMzM1OworICAgICAgICAgICAgcDMyWzExOF0gPSAweDM4MzU2NDY0OworICAgICAgICAgICAgcDMyWzExOV0gPSAweDM5NjM2NTYzOworICAgICAgICAgICAgcDMyWzEyMF0gPSAweDM3MzAzMzY2OworICAgICAgICAgICAgcDMyWzEyMV0gPSAweDY2MzQzNTYxOworICAgICAgICAgICAgcDMyWzEyMl0gPSAweDMxMzY2MzY2OworICAgICAgICAgICAgcDMyWzEyM10gPSAweDMwNjM2NjY1OworICAgICAgICAgICAgcDMyWzEyNF0gPSAweDM4NjQzNjMwOworICAgICAgICAgICAgcDMyWzEyNV0gPSAweDM5NjMzMjYxOworICAgICAgICAgICAgcDMyWzEyNl0gPSAweDM3MzkzNDY0OworICAgICAgICAgICAgcDMyWzEyN10gPSAweDYxMzA2MzM5OworICAgICAgICAgICAgcDMyWzEyOF0gPSAweDYxMzQzNDYzOworICAgICAgICAgICAgcDMyWzEyOV0gPSAweDM0Mzc2MTY1OworICAgICAgICAgICAgcDMyWzEzMF0gPSAweDYyNjU2MjY2OworICAgICAgICAgICAgcDMyWzEzMV0gPSAweDY2Mzk2MjYyOworICAgICAgICAgICAgcDMyWzEzMl0gPSAweDYxMzIzNzM3OworICAgICAgICAgICAgcDMyWzEzM10gPSAweDYyNjM2NDY1OworICAgICAgICAgICAgcDMyWzEzNF0gPSAweDYyMzAzMjM2OworICAgICAgICAgICAgcDMyWzEzNV0gPSAweDM3NjEzMTMwOworICAgICAgICAgICAgcDMyWzEzNl0gPSAweDYxMzc2MTYyOworICAgICAgICAgICAgcDMyWzEzN10gPSAweDMzNjIzMTY2OworICAgICAgICAgICAgcDMyWzEzOF0gPSAweDMzMzQzMDMyOworICAgICAgICAgICAgcDMyWzEzOV0gPSAweDM1Mzg2MzMwOworICAgICAgICAgICAgcDMyWzE0MF0gPSAweDM4MzkzMTM5OworICAgICAgICAgICAgcDMyWzE0MV0gPSAweDMwMzY2NjM0OworICAgICAgICAgICAgcDMyWzE0Ml0gPSAweDM0NjQ2MzMxOworICAgICAgICAgICAgcDMyWzE0M10gPSAweDMzMzQzMTYzOworICAgICAgICAgICAgcDMyWzE0NF0gPSAweDYzMzE2NjY1OworICAgICAgICAgICAgcDMyWzE0NV0gPSAweDAwMzM2MTM3OworICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDQ0OworICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTU0OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsKKworICAgICAgICAgICAgZm9yKGkgPSAxNTU7IGkgPD0gMTU5OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzE2MF0gPSAweDMxMzAzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAxNjE7IGkgPD0gMTkwOyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMGFjOworICAgICAgICAgICAgcDMyWzE5Ml0gPSAweDMwMzAzMDMyOworICAgICAgICAgICAgZm9yKGkgPSAxOTM7IGkgPD0gMjA4OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsKKworICAgICAgICAgICAgcDMyWzIwOV0gPSAweDMxMzAzMDMwOworICAgICAgICAgICAgcDMyWzIxMF0gPSAweDM1MzgzMTMzOworICAgICAgICAgICAgcDMyWzIxMV0gPSAweDQ2MzE0NTMwOworICAgICAgICAgICAgcDMyWzIxMl0gPSAweDM2NDEzOTMxOworICAgICAgICAgICAgcDMyWzIxM10gPSAweDQyMzQ0NTMzOworICAgICAgICAgICAgcDMyWzIxNF0gPSAweDQxMzEzOTMzOworICAgICAgICAgICAgcDMyWzIxNV0gPSAweDM5NDI0NDM4OworICAgICAgICAgICAgcDMyWzIxNl0gPSAweDM0NDYzNzMxOworICAgICAgICAgICAgcDMyWzIxN10gPSAweDQyMzgzMzMxOworICAgICAgICAgICAgcDMyWzIxOF0gPSAweDQ0MzAzMzM2OworICAgICAgICAgICAgcDMyWzIxOV0gPSAweDQ1NDIzNDM4OworICAgICAgICAgICAgcDMyWzIyMF0gPSAweDMzMzY0NDM1OworICAgICAgICAgICAgcDMyWzIyMV0gPSAweDMxMzgzMzM5OworICAgICAgICAgICAgcDMyWzIyMl0gPSAweDQ0MzEzOTQ1OworICAgICAgICAgICAgcDMyWzIyM10gPSAweDM1MzQ0MjQ1OworICAgICAgICAgICAgcDMyWzIyNF0gPSAweDM3NDU0NjQzOworICAgICAgICAgICAgcDMyWzIyNV0gPSAweDM2NDYzODM3OworICAgICAgICAgICAgcDMyWzIyNl0gPSAweDMxNDMzNzMzOworICAgICAgICAgICAgcDMyWzIyN10gPSAweDAwMzEzMDMwOworICAgICAgICAgICAgZm9yKGkgPSAyMjg7IGkgPD0gMjM1OyBpKyspCisgICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsKKworICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMjNiOworICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDBhOworICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDA1OworICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDAyOworICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisKKworc3RhdGljIEVDQ19DVVJWRSAqIGdldF9jdXJ2ZShFX0VDQ19DVVJWRSBlY2NfY3VydmUpCit7CisgICAgaWYoQ3VydmVDcHkoKHVuc2lnbmVkIGludCAqKSZDdXJ2ZV9Db3B5LCBlY2NfY3VydmUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAmQ3VydmVfQ29weTsKKworfQorCisKKyNlbHNlCitzdGF0aWMgRUNDX0NVUlZFICogZ2V0X2N1cnZlKEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSkKK3sKKyAgICB1aW50MzJfdCAgIGk7CisgICAgRUNDX0NVUlZFICAqcmV0ID0gTlVMTDsKKworICAgIGZvcihpID0gMFVMOyBpIDwgc2l6ZW9mKF9DdXJ2ZSkgLyBzaXplb2YoRUNDX0NVUlZFKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYoZWNjX2N1cnZlID09IF9DdXJ2ZVtpXS5jdXJ2ZV9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KChjaGFyICopJkN1cnZlX0NvcHksICZfQ3VydmVbaV0sIHNpemVvZihFQ0NfQ1VSVkUpKTsKKyAgICAgICAgICAgIHJldCA9ICZDdXJ2ZV9Db3B5OyAgIC8qIChFQ0NfQ1VSVkUgKikmX0N1cnZlW2ldOyAqLworICAgICAgICB9CisgICAgICAgIGlmKHJldCAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDUllQVE9fRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ1JZUFRPX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9kYWMuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2RhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOTQ5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9kYWMuYwpAQCAtMCwwICsxLDkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZGFjLmMKKyAqIEB2ZXJzaW9uICBWMS4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBEQUMgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgREFDX0RyaXZlciBEQUMgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgREFDX0VYUE9SVEVEX0ZVTkNUSU9OUyBEQUMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBtYWtlIERBQyBtb2R1bGUgYmUgcmVhZHkgdG8gY29udmVydC4KKyAgKiBAcGFyYW1baW5dIGRhYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIERBQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJDaCBOb3QgdXNlZCBpbiBNMjM1MSBTZXJpZXMgREFDLgorICAqIEBwYXJhbVtpbl0gdTMyVHJnU3JjIERlY2lkZXMgdGhlIHRyaWdnZXIgc291cmNlLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBEQUNfV1JJVEVfREFUX1RSSUdHRVIgICAgICAgICAgICAgOldyaXRlIERBQ19EQVQgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBEQUNfU09GVFdBUkVfVFJJR0dFUiAgICAgICAgICAgICAgOlNvZnR3YXJlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgREFDX0xPV19MRVZFTF9UUklHR0VSICAgICAgICAgICAgIDpTVERBQyBwaW4gbG93IGxldmVsIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgREFDX0hJR0hfTEVWRUxfVFJJR0dFUiAgICAgICAgICAgIDpTVERBQyBwaW4gaGlnaCBsZXZlbCB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19GQUxMSU5HX0VER0VfVFJJR0dFUiAgICAgICAgICA6U1REQUMgcGluIGZhbGxpbmcgZWRnZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19SSVNJTkdfRURHRV9UUklHR0VSICAgICAgICAgICA6U1REQUMgcGluIHJpc2luZyBlZGdlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgREFDX1RJTUVSMF9UUklHR0VSICAgICAgICAgICAgICAgIDpUaW1lciAwIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgREFDX1RJTUVSMV9UUklHR0VSICAgICAgICAgICAgICAgIDpUaW1lciAxIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgREFDX1RJTUVSMl9UUklHR0VSICAgICAgICAgICAgICAgIDpUaW1lciAyIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgREFDX1RJTUVSM19UUklHR0VSICAgICAgICAgICAgICAgIDpUaW1lciAzIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgREFDX0VQV00wX1RSSUdHRVIgICAgICAgICAgICAgICAgIDpFUFdNMCB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgLSBccmVmIERBQ19FUFdNMV9UUklHR0VSICAgICAgICAgICAgICAgICA6RVBXTTEgdHJpZ2dlcgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoZSBEQUMgY29udmVyc2lvbiBjYW4gYmUgc3RhcnRlZCBieSB3cml0aW5nIERBQ19EQVQsIHNvZnR3YXJlIHRyaWdnZXIgb3IgaGFyZHdhcmUgdHJpZ2dlci4KKyAgKiAgICAgICAgIFdoZW4gVFJHRU4gKERBQ19DVExbNF0pIGlzIDAsIHRoZSBkYXRhIGNvbnZlcnNpb24gaXMgc3RhcnRlZCBieSB3cml0aW5nIERBQ19EQVQgcmVnaXN0ZXIuCisgICogICAgICAgICBXaGVuIFRSR0VOIChEQUNfQ1RMWzRdKSBpcyAxLCB0aGUgZGF0YSBjb252ZXJzaW9uIGlzIHN0YXJ0ZWQgYnkgU1dUUkcgKERBQ19TV1RSR1swXSkgaXMgc2V0IHRvIDEsCisgICogICAgICAgICBleHRlcm5hbCBTVERBQyBwaW4sIHRpbWVyIGV2ZW50LCBvciBFUFdNIGV2ZW50LgorICAqLwordm9pZCBEQUNfT3BlbihEQUNfVCAqZGFjLAorICAgICAgICAgICAgICB1aW50MzJfdCB1MzJDaCwKKyAgICAgICAgICAgICAgdWludDMyX3QgdTMyVHJnU3JjKQoreworICAgICh2b2lkKXUzMkNoOworICAgIGRhYy0+Q1RMICY9IH4oREFDX0NUTF9FVFJHU0VMX01zayB8IERBQ19DVExfVFJHU0VMX01zayB8IERBQ19DVExfVFJHRU5fTXNrKTsKKworICAgIGRhYy0+Q1RMIHw9ICh1MzJUcmdTcmMgfCBEQUNfQ1RMX0RBQ0VOX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIERBQyBhbmFsb2cgcG93ZXIuCisgICogQHBhcmFtW2luXSBkYWMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBEQUMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyQ2ggTm90IHVzZWQgaW4gTTIzNTEgU2VyaWVzIERBQy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBEaXNhYmxlIERBQyBhbmFsb2cgcG93ZXIgZm9yIHNhdmluZyBwb3dlciBjb25zdW1wdGlvbi4KKyAgKi8KK3ZvaWQgREFDX0Nsb3NlKERBQ19UICpkYWMsIHVpbnQzMl90IHUzMkNoKQoreworICAgICh2b2lkKXUzMkNoOworICAgIGRhYy0+Q1RMICY9ICh+REFDX0NUTF9EQUNFTl9Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgU2V0IGRlbGF5IHRpbWUgZm9yIERBQyB0byBiZWNvbWUgc3RhYmxlLgorICAqIEBwYXJhbVtpbl0gZGFjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgREFDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkRlbGF5IERlY2lkZXMgdGhlIERBQyBjb252ZXJzaW9uIHNldHRsaW5nIHRpbWUsIHRoZSByYW5nZSBpcyBmcm9tIDB+KDEwMjMvUENMSzEqMTAwMDAwMCkgbWljcm8gc2Vjb25kcy4KKyAgKiBAcmV0dXJuIFJlYWwgREFDIGNvbnZlcnNpb24gc2V0dGxpbmcgdGltZSAobWljcm8gc2Vjb25kKS4KKyAgKiBAZGV0YWlscyBGb3IgZXhhbXBsZSwgREFDIGNvbnRyb2xsZXIgY2xvY2sgc3BlZWQgaXMgNjRNSHogYW5kIERBQyBjb252ZXJzaW9uIHNldHRpbmcgdGltZSBpcyAxIHVzLCBTRVRUTEVUIChEQUNfVENUTFs5OjBdKSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAweDQwLgorICBVc2VyIG5lZWRzIHRvIHdyaXRlIGFwcHJvcHJpYXRlIHZhbHVlIHRvIG1lZXQgREFDIGNvbnZlcnNpb24gc2V0dGxpbmcgdGltZSBiYXNlIG9uIFBDTEsgKEFQQiBjbG9jaykgc3BlZWQuCisgICovCit1aW50MzJfdCBEQUNfU2V0RGVsYXlUaW1lKERBQ19UICpkYWMsIHVpbnQzMl90IHUzMkRlbGF5KQoreworCisgICAgZGFjLT5UQ1RMID0gKChDTEtfR2V0UENMSzFGcmVxKCkgKiB1MzJEZWxheSAvIDEwMDAwMDBVTCkgJiAweDNGRlVMKTsKKworICAgIHJldHVybiAoKGRhYy0+VENUTCkgKiAxMDAwMDAwVUwgLyBDTEtfR2V0UENMSzFGcmVxKCkpOworfQorCisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBEQUNfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgREFDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lYWRjLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lYWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkMjFlMgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2VhZGMuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGVhZGMuYworICogQHZlcnNpb24gIFYyLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIEVBREMgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUFEQ19Ecml2ZXIgRUFEQyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBFQURDX0VYUE9SVEVEX0ZVTkNUSU9OUyBFQURDIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gbWFrZSBFQURDX21vZHVsZSBiZSByZWFkeSB0byBjb252ZXJ0LgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMySW5wdXRNb2RlIERlY2lkZXMgdGhlIGlucHV0IG1vZGUuCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX0NUTF9ESUZGRU5fU0lOR0xFX0VORCAgICAgIDpTaW5nbGUgZW5kIGlucHV0IG1vZGUuCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX0NUTF9ESUZGRU5fRElGRkVSRU5USUFMICAgIDpEaWZmZXJlbnRpYWwgaW5wdXQgdHlwZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IGFuYWxvZyBpbnB1dCBtb2RlIGFuZCBlbmFibGUgQS9EIENvbnZlcnRlci4KKyAgKiAgICAgICAgIEJlZm9yZSBzdGFydGluZyBBL0QgY29udmVyc2lvbiBmdW5jdGlvbiwgQURDRU4gYml0IChFQURDX0NUTFswXSkgc2hvdWxkIGJlIHNldCB0byAxLgorIAorICAqLwordm9pZCBFQURDX09wZW4oRUFEQ19UICplYWRjLCB1aW50MzJfdCB1MzJJbnB1dE1vZGUpCit7CisgICAgZWFkYy0+Q1RMICY9ICh+KEVBRENfQ1RMX0RJRkZFTl9Nc2spKTsKKworICAgIGVhZGMtPkNUTCB8PSAodTMySW5wdXRNb2RlIHwgRUFEQ19DVExfQURDRU5fTXNrKTsKKworICAgIHdoaWxlKCEoZWFkYy0+UFdSTSAmIEVBRENfUFdSTV9QV1VQUkRZX01zaykpIHt9Cit9CisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIEVBRENfbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIENsZWFyIEFEQ0VOIGJpdCAoRUFEQ19DVExbMF0pIHRvIGRpc2FibGUgQS9EIGNvbnZlcnRlciBhbmFsb2cgY2lyY3VpdCBwb3dlciBjb25zdW1wdGlvbi4KKyAgKi8KK3ZvaWQgRUFEQ19DbG9zZShFQURDX1QgKmVhZGMpCit7CisgICAgZWFkYy0+Q1RMICY9IH5FQURDX0NUTF9BRENFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiBDb25maWd1cmUgdGhlIHNhbXBsZSBjb250cm9sIGxvZ2ljIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIGVhZGMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFQURDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1vZHVsZU51bSBEZWNpZGVzIHRoZSBzYW1wbGUgbW9kdWxlIG51bWJlciwgdmFsaWQgdmFsdWUgYXJlIGZyb20gMCB0byAxNS4KKyAgKiBAcGFyYW1baW5dIHUzMlRyaWdnZXJTcmMgRGVjaWRlcyB0aGUgdHJpZ2dlciBzb3VyY2UuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfU09GVFdBUkVfVFJJR0dFUiAgICAgICAgICAgICAgOiBEaXNhYmxlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19GQUxMSU5HX0VER0VfVFJJR0dFUiAgICAgICAgICA6IFNUQURDIHBpbiBmYWxsaW5nIGVkZ2UgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX1JJU0lOR19FREdFX1RSSUdHRVIgICAgICAgICAgIDogU1RBREMgcGluIHJpc2luZyBlZGdlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19GQUxMSU5HX1JJU0lOR19FREdFX1RSSUdHRVIgICA6IFNUQURDIHBpbiBib3RoIGZhbGxpbmcgYW5kIHJpc2luZyBlZGdlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19BRElOVDBfVFJJR0dFUiAgICAgICAgICAgICAgICA6IEFEQyBBRElOVDAgaW50ZXJydXB0IEVPQyBwdWxzZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfQURJTlQxX1RSSUdHRVIgICAgICAgICAgICAgICAgOiBBREMgQURJTlQxIGludGVycnVwdCBFT0MgcHVsc2UgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX1RJTUVSMF9UUklHR0VSICAgICAgICAgICAgICAgIDogVGltZXIwIG92ZXJmbG93IHB1bHNlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19USU1FUjFfVFJJR0dFUiAgICAgICAgICAgICAgICA6IFRpbWVyMSBvdmVyZmxvdyBwdWxzZSB0cmlnZ2VyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVBRENfVElNRVIyX1RSSUdHRVIgICAgICAgICAgICAgICAgOiBUaW1lcjIgb3ZlcmZsb3cgcHVsc2UgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX1RJTUVSM19UUklHR0VSICAgICAgICAgICAgICAgIDogVGltZXIzIG92ZXJmbG93IHB1bHNlIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00wVEcwX1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00wVEcwIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00wVEcxX1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00wVEcxIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00wVEcyX1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00wVEcyIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00wVEczX1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00wVEczIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00wVEc0X1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00wVEc0IHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00wVEc1X1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00wVEc1IHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00xVEcwX1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00xVEcwIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00xVEcxX1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00xVEcxIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00xVEcyX1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00xVEcyIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00xVEczX1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00xVEczIHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00xVEc0X1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00xVEc0IHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19QV00xVEc1X1RSSUdHRVIgICAgICAgICAgICAgICA6IEVQV00xVEc1IHRyaWdnZXIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUFEQ19CUFdNMFRHX1RSSUdHRVIgICAgICAgICAgICAgICA6IEJQV00wVEcgdHJpZ2dlcgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX0JQV00xVEdfVFJJR0dFUiAgICAgICAgICAgICAgIDogQlBXTTFURyB0cmlnZ2VyCisgICogQHBhcmFtW2luXSB1MzJDaGFubmVsIFNwZWNpZmllcyB0aGUgc2FtcGxlIG1vZHVsZSBjaGFubmVsLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE1LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIEVhY2ggb2YgQURDIGNvbnRyb2wgbG9naWMgbW9kdWxlcyAwfjE1IHdoaWNoIGlzIGNvbmZpZ3VyYWJsZSBmb3IgQURDIGNvbnZlcnRlciBjaGFubmVsIEVBRENfQ0gwfjE1IGFuZCB0cmlnZ2VyIHNvdXJjZS4KKyAgKiAgICAgICAgIHNhbXBsZSBtb2R1bGUgMTZ+MTggaXMgZml4ZWQgZm9yIEFEQyBjaGFubmVsIDE2LCAxNywgMTggaW5wdXQgc291cmNlcyBhcyBiYW5kLWdhcCB2b2x0YWdlLCB0ZW1wZXJhdHVyZSBzZW5zb3IsIGFuZCBiYXR0ZXJ5IHBvd2VyIChWQkFUKS4KKyAgKi8KK3ZvaWQgRUFEQ19Db25maWdTYW1wbGVNb2R1bGUoRUFEQ19UICplYWRjLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMk1vZHVsZU51bSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJUcmlnZ2VyU3JjLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMkNoYW5uZWwpCit7CisgICAgZWFkYy0+U0NUTFt1MzJNb2R1bGVOdW1dICY9IH4oRUFEQ19TQ1RMX0VYVEZFTl9Nc2sgfCBFQURDX1NDVExfRVhUUkVOX01zayB8IEVBRENfU0NUTF9UUkdTRUxfTXNrIHwgRUFEQ19TQ1RMX0NIU0VMX01zayk7CisgICAgZWFkYy0+U0NUTFt1MzJNb2R1bGVOdW1dIHw9ICh1MzJUcmlnZ2VyU3JjIHwgdTMyQ2hhbm5lbCk7Cit9CisKKworLyoqCisgICogQGJyaWVmIFNldCB0cmlnZ2VyIGRlbGF5IHRpbWUuCisgICogQHBhcmFtW2luXSBlYWRjIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRUFEQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNb2R1bGVOdW0gRGVjaWRlcyB0aGUgc2FtcGxlIG1vZHVsZSBudW1iZXIsIHZhbGlkIHZhbHVlIGFyZSBmcm9tIDAgdG8gMTUuCisgICogQHBhcmFtW2luXSB1MzJUcmlnZ2VyRGVsYXlUaW1lIERlY2lkZXMgdGhlIHRyaWdnZXIgZGVsYXkgdGltZSwgdmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMH4weEZGLgorICAqIEBwYXJhbVtpbl0gdTMyRGVsYXlDbG9ja0RpdmlkZXIgRGVjaWRlcyB0aGUgdHJpZ2dlciBkZWxheSBjbG9jayBkaXZpZGVyLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX1NDVExfVFJHRExZRElWX0RJVklERVJfMSAgICA6IFRyaWdnZXIgZGVsYXkgY2xvY2sgZnJlcXVlbmN5IGlzIEFEQ19DTEsvMQorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX1NDVExfVFJHRExZRElWX0RJVklERVJfMiAgICA6IFRyaWdnZXIgZGVsYXkgY2xvY2sgZnJlcXVlbmN5IGlzIEFEQ19DTEsvMgorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX1NDVExfVFJHRExZRElWX0RJVklERVJfNCAgICA6IFRyaWdnZXIgZGVsYXkgY2xvY2sgZnJlcXVlbmN5IGlzIEFEQ19DTEsvNAorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQURDX1NDVExfVFJHRExZRElWX0RJVklERVJfMTYgICA6IFRyaWdnZXIgZGVsYXkgY2xvY2sgZnJlcXVlbmN5IGlzIEFEQ19DTEsvMTYKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBVc2VyIGNhbiBjb25maWd1cmUgdGhlIHRyaWdnZXIgZGVsYXkgdGltZSBieSBzZXR0aW5nIFRSR0RMWUNOVCAoRUFEQ19TQ1RMblsxNTo4XSwgbj0wfjE1KSBhbmQgVFJHRExZRElWIChFQURDX1NDVExuWzc6Nl0sIG49MH4xNSkuCisgICogICAgICAgICBUcmlnZ2VyIGRlbGF5IHRpbWUgPSAodTMyVHJpZ2dlckRlbGF5VGltZSkgeCBUcmlnZ2VyIGRlbGF5IGNsb2NrIHBlcmlvZC4KKyAgKi8KK3ZvaWQgRUFEQ19TZXRUcmlnZ2VyRGVsYXlUaW1lKEVBRENfVCAqZWFkYywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyTW9kdWxlTnVtLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJUcmlnZ2VyRGVsYXlUaW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJEZWxheUNsb2NrRGl2aWRlcikKK3sKKyAgICBlYWRjLT5TQ1RMW3UzMk1vZHVsZU51bV0gJj0gfihFQURDX1NDVExfVFJHRExZRElWX01zayB8IEVBRENfU0NUTF9UUkdETFlDTlRfTXNrKTsKKyAgICBlYWRjLT5TQ1RMW3UzMk1vZHVsZU51bV0gfD0gKCh1MzJUcmlnZ2VyRGVsYXlUaW1lIDw8IEVBRENfU0NUTF9UUkdETFlDTlRfUG9zKSB8IHUzMkRlbGF5Q2xvY2tEaXZpZGVyKTsKK30KKworLyoqCisgICogQGJyaWVmIFNldCBBREMgZXh0ZW5kIHNhbXBsZSB0aW1lLgorICAqIEBwYXJhbVtpbl0gZWFkYyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVBREMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTW9kdWxlTnVtIERlY2lkZXMgdGhlIHNhbXBsZSBtb2R1bGUgbnVtYmVyLCB2YWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDE4LgorICAqIEBwYXJhbVtpbl0gdTMyRXh0ZW5kU2FtcGxlVGltZSBEZWNpZGVzIHRoZSBleHRlbmQgc2FtcGxpbmcgdGltZSwgdGhlIHJhbmdlIGlzIGZyb20gMH4yNTUgQURDIGNsb2NrLiBWYWxpZCB2YWx1ZSBhcmUgZnJvbSAwIHRvIDB4RkYuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgV2hlbiBBL0QgY29udmVydGluZyBhdCBoaWdoIGNvbnZlcnNpb24gcmF0ZSwgdGhlIHNhbXBsaW5nIHRpbWUgb2YgYW5hbG9nIGlucHV0IHZvbHRhZ2UgbWF5IG5vdCBlbm91Z2ggaWYgaW5wdXQgY2hhbm5lbCBsb2FkaW5nIGlzIGhlYXZ5LAorICAqICAgICAgICAgdXNlciBjYW4gZXh0ZW5kIEEvRCBzYW1wbGluZyB0aW1lIGFmdGVyIHRyaWdnZXIgc291cmNlIGlzIGNvbWluZyB0byBnZXQgZW5vdWdoIHNhbXBsaW5nIHRpbWUuCisgICovCit2b2lkIEVBRENfU2V0RXh0ZW5kU2FtcGxlVGltZShFQURDX1QgKmVhZGMsIHVpbnQzMl90IHUzMk1vZHVsZU51bSwgdWludDMyX3QgdTMyRXh0ZW5kU2FtcGxlVGltZSkKK3sKKyAgICBlYWRjLT5TQ1RMW3UzMk1vZHVsZU51bV0gJj0gfkVBRENfU0NUTF9FWFRTTVBUX01zazsKKworICAgIGVhZGMtPlNDVExbdTMyTW9kdWxlTnVtXSB8PSAodTMyRXh0ZW5kU2FtcGxlVGltZSA8PCBFQURDX1NDVExfRVhUU01QVF9Qb3MpOworCit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUFEQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQURDX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lYmkuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2ViaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWI0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lYmkuYwpAQCAtMCwwICsxLDIzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGViaS5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlKEVCSSkgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBFQklfRHJpdmVyIEVCSSBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBFQklfRVhQT1JURURfRlVOQ1RJT05TIEVCSSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIEluaXRpYWxpemUgRUJJIGZvciBzcGVjaWZ5IEJhbmsKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkJhbmsgICAgICAgICAgICAgQmFuayBudW1iZXIgZm9yIEVCSS4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0JBTkswCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9CQU5LMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfQkFOSzIKKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhV2lkdGggICAgICAgIERhdGEgYnVzIHdpZHRoLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfQlVTV0lEVEhfOEJJVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfQlVTV0lEVEhfMTZCSVQKKyAgKiBAcGFyYW1baW5dICB1MzJUaW1pbmdDbGFzcyAgICAgIERlZmF1bHQgdGltaW5nIGNvbmZpZ3VyYXRpb24uIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9USU1JTkdfRkFTVEVTVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfVElNSU5HX1ZFUllGQVNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9USU1JTkdfRkFTVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfVElNSU5HX05PUk1BTAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfVElNSU5HX1NMT1cKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX1RJTUlOR19WRVJZU0xPVworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfVElNSU5HX1NMT1dFU1QKKyAgKiBAcGFyYW1baW5dICB1MzJCdXNNb2RlICAgICAgICAgIFNldCBFQkkgYnVzIG9wZXJhdGUgbW9kZS4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX09QTU9ERV9OT1JNQUwKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX09QTU9ERV9DQUNDRVNTCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9PUE1PREVfQURTRVBBUkFURQorICAqIEBwYXJhbVtpbl0gIHUzMkNTQWN0aXZlTGV2ZWwgICAgQ1MgaXMgYWN0aXZlIEhpZ2gvTG93LiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfQ1NfQUNUSVZFX0hJR0gKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0NTX0FDVElWRV9MT1cKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBvcGVuIHNwZWNpZnkgRUJJIGJhbmsgd2l0aCBkaWZmZXJlbnQgYnVzIHdpZHRoLCB0aW1pbmcgc2V0dGluZyBhbmQgXG4KKyAgKiAgICAgICAgICAgICBhY3RpdmUgbGV2ZWwgb2YgQ1MgcGluIHRvIGFjY2VzcyBFQkkgZGV2aWNlLgorICAgICAgICBXcml0ZSBCdWZmZXIgRW5hYmxlKFdCVUZFTikgYW5kIEV4dGVuZCBUaW1lIE9mIEFMRShUQUxFKSBhcmUgb25seSBhdmFpbGFibGUgaW4gRUJJIGJhbmswIGNvbnRyb2wgcmVnaXN0ZXIuCisgICovCit2b2lkIEVCSV9PcGVuKHVpbnQzMl90IHUzMkJhbmssIHVpbnQzMl90IHUzMkRhdGFXaWR0aCwgdWludDMyX3QgdTMyVGltaW5nQ2xhc3MsIHVpbnQzMl90IHUzMkJ1c01vZGUsIHVpbnQzMl90IHUzMkNTQWN0aXZlTGV2ZWwpCit7CisgICAgdWludDMyX3QgdTMySW5kZXgwID0gKHVpbnQzMl90KSZFQkktPkNUTDAgKyAodWludDMyX3QpdTMyQmFuayAqIDB4MTBVOworICAgIHVpbnQzMl90IHUzMkluZGV4MSA9ICh1aW50MzJfdCkmRUJJLT5UQ1RMMCArICh1aW50MzJfdCl1MzJCYW5rICogMHgxMFU7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKnB1MzJFQklDVEwsICpwdTMyRUJJVENUTDsKKyAgICB1aW50MzJfdCBwdTMySW5kZXgwLCBwdTMySW5kZXgxOworCisgICAgaWYoKF9fUEMoKSZOU19PRkZTRVQpID09IE5TX09GRlNFVCkKKyAgICB7CisgICAgICAgIHB1MzJJbmRleDAgPSAodTMySW5kZXgwIHwgTlNfT0ZGU0VUKTsKKyAgICAgICAgcHUzMkluZGV4MSA9ICh1MzJJbmRleDEgfCBOU19PRkZTRVQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwdTMySW5kZXgwID0gdTMySW5kZXgwOworICAgICAgICBwdTMySW5kZXgxID0gdTMySW5kZXgxOworICAgIH0KKworICAgIHB1MzJFQklDVEwgID0gKHVpbnQzMl90ICopKHB1MzJJbmRleDApOworICAgIHB1MzJFQklUQ1RMID0gKHVpbnQzMl90ICopKHB1MzJJbmRleDEpOworCisgICAgaWYodTMyRGF0YVdpZHRoID09IEVCSV9CVVNXSURUSF84QklUKQorICAgIHsKKyAgICAgICAgKnB1MzJFQklDVEwgJj0gfkVCSV9DVExfRFcxNl9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpwdTMyRUJJQ1RMIHw9IEVCSV9DVExfRFcxNl9Nc2s7CisgICAgfQorCisgICAgKnB1MzJFQklDVEwgfD0gdTMyQnVzTW9kZTsKKworICAgIHN3aXRjaCh1MzJUaW1pbmdDbGFzcykKKyAgICB7CisgICAgICAgIGNhc2UgRUJJX1RJTUlOR19GQVNURVNUOgorICAgICAgICAgICAgKnB1MzJFQklDVEwgPSAoKnB1MzJFQklDVEwgJiB+KEVCSV9DVExfTUNMS0RJVl9Nc2sgfCBFQklfQ1RMX1RBTEVfTXNrKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoRUJJX01DTEtESVZfMSA8PCBFQklfQ1RMX01DTEtESVZfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJDU0FjdGl2ZUxldmVsIDw8IEVCSV9DVExfQ1NQT0xJTlZfUG9zKSB8IEVCSV9DVExfRU5fTXNrOworICAgICAgICAgICAgKnB1MzJFQklUQ1RMID0gMHgwVTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRUJJX1RJTUlOR19WRVJZRkFTVDoKKyAgICAgICAgICAgICpwdTMyRUJJQ1RMID0gKCpwdTMyRUJJQ1RMICYgfihFQklfQ1RMX01DTEtESVZfTXNrIHwgRUJJX0NUTF9UQUxFX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEVCSV9NQ0xLRElWXzEgPDwgRUJJX0NUTF9NQ0xLRElWX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyQ1NBY3RpdmVMZXZlbCA8PCBFQklfQ1RMX0NTUE9MSU5WX1BvcykgfCBFQklfQ1RMX0VOX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICgweDNVIDw8IEVCSV9DVExfVEFMRV9Qb3MpIDsKKyAgICAgICAgICAgICpwdTMyRUJJVENUTCA9IDB4MDMwMDMzMThVOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFQklfVElNSU5HX0ZBU1Q6CisgICAgICAgICAgICAqcHUzMkVCSUNUTCA9ICgqcHUzMkVCSUNUTCAmIH4oRUJJX0NUTF9NQ0xLRElWX01zayB8IEVCSV9DVExfVEFMRV9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIChFQklfTUNMS0RJVl8yIDw8IEVCSV9DVExfTUNMS0RJVl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMkNTQWN0aXZlTGV2ZWwgPDwgRUJJX0NUTF9DU1BPTElOVl9Qb3MpIHwgRUJJX0NUTF9FTl9Nc2s7CisgICAgICAgICAgICAqcHUzMkVCSVRDVEwgPSAweDBVOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFQklfVElNSU5HX05PUk1BTDoKKyAgICAgICAgICAgICpwdTMyRUJJQ1RMID0gKCpwdTMyRUJJQ1RMICYgfihFQklfQ1RMX01DTEtESVZfTXNrIHwgRUJJX0NUTF9UQUxFX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEVCSV9NQ0xLRElWXzIgPDwgRUJJX0NUTF9NQ0xLRElWX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyQ1NBY3RpdmVMZXZlbCA8PCBFQklfQ1RMX0NTUE9MSU5WX1BvcykgfCBFQklfQ1RMX0VOX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICgweDNVIDw8IEVCSV9DVExfVEFMRV9Qb3MpIDsKKyAgICAgICAgICAgICpwdTMyRUJJVENUTCA9IDB4MDMwMDMzMThVOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFQklfVElNSU5HX1NMT1c6CisgICAgICAgICAgICAqcHUzMkVCSUNUTCA9ICgqcHUzMkVCSUNUTCAmIH4oRUJJX0NUTF9NQ0xLRElWX01zayB8IEVCSV9DVExfVEFMRV9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIChFQklfTUNMS0RJVl8yIDw8IEVCSV9DVExfTUNMS0RJVl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMkNTQWN0aXZlTGV2ZWwgPDwgRUJJX0NUTF9DU1BPTElOVl9Qb3MpIHwgRUJJX0NUTF9FTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3VSA8PCBFQklfQ1RMX1RBTEVfUG9zKSA7CisgICAgICAgICAgICAqcHUzMkVCSVRDVEwgPSAweDA3MDA3NzM4VTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRUJJX1RJTUlOR19WRVJZU0xPVzoKKyAgICAgICAgICAgICpwdTMyRUJJQ1RMID0gKCpwdTMyRUJJQ1RMICYgfihFQklfQ1RMX01DTEtESVZfTXNrIHwgRUJJX0NUTF9UQUxFX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEVCSV9NQ0xLRElWXzQgPDwgRUJJX0NUTF9NQ0xLRElWX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyQ1NBY3RpdmVMZXZlbCA8PCBFQklfQ1RMX0NTUE9MSU5WX1BvcykgfCBFQklfQ1RMX0VOX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdVIDw8IEVCSV9DVExfVEFMRV9Qb3MpIDsKKyAgICAgICAgICAgICpwdTMyRUJJVENUTCA9IDB4MDcwMDc3MzhVOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFQklfVElNSU5HX1NMT1dFU1Q6CisgICAgICAgICAgICAqcHUzMkVCSUNUTCA9ICgqcHUzMkVCSUNUTCAmIH4oRUJJX0NUTF9NQ0xLRElWX01zayB8IEVCSV9DVExfVEFMRV9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIChFQklfTUNMS0RJVl84IDw8IEVCSV9DVExfTUNMS0RJVl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMkNTQWN0aXZlTGV2ZWwgPDwgRUJJX0NUTF9DU1BPTElOVl9Qb3MpIHwgRUJJX0NUTF9FTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3VSA8PCBFQklfQ1RMX1RBTEVfUG9zKSA7CisgICAgICAgICAgICAqcHUzMkVCSVRDVEwgPSAweDA3MDA3NzM4VTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqcHUzMkVCSUNUTCAmPSB+RUJJX0NUTF9FTl9Nc2s7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgRUJJIG9uIHNwZWNpZnkgQmFuaworICAqCisgICogQHBhcmFtW2luXSAgdTMyQmFuayAgICAgQmFuayBudW1iZXIgZm9yIEVCSS4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9CQU5LMAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0JBTksxCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfQkFOSzIKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbG9zZSBzcGVjaWZ5IEVCSSBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgRUJJX0Nsb3NlKHVpbnQzMl90IHUzMkJhbmspCit7CisgICAgdWludDMyX3QgdTMySW5kZXggPSAodWludDMyX3QpJkVCSS0+Q1RMMCArIHUzMkJhbmsgKiAweDEwVTsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqcHUzMkVCSUNUTDsKKyAgICB1aW50MzJfdCBwdTMySW5kZXg7CisKKyAgICBpZigoX19QQygpJk5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgcHUzMkluZGV4ID0gKHUzMkluZGV4IHwgTlNfT0ZGU0VUKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHUzMkluZGV4ID0gdTMySW5kZXg7CisgICAgfQorCisgICAgcHUzMkVCSUNUTCAgPSAodWludDMyX3QgKikocHUzMkluZGV4KTsKKworICAgICpwdTMyRUJJQ1RMICY9IH5FQklfQ1RMX0VOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IEVCSSBCdXMgVGltaW5nIGZvciBzcGVjaWZ5IEJhbmsKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkJhbmsgICAgICAgICAgICAgQmFuayBudW1iZXIgZm9yIEVCSS4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX0JBTkswCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9CQU5LMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfQkFOSzIKKyAgKiBAcGFyYW1baW5dICB1MzJUaW1pbmdDb25maWcgICAgIENvbmZpZ3VyZSBFQkkgdGltaW5nIHNldHRpbmdzLCBpbmNsdWRlcyBUQUNDLCBUQUhELCBXMlggYW5kIFIyUiBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHUzMk1jbGtEaXYgICAgICAgICAgRGl2aWRlciBmb3IgTUNMSy4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX01DTEtESVZfMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfTUNMS0RJVl8yCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVCSV9NQ0xLRElWXzQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgRUJJX01DTEtESVZfOAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfTUNMS0RJVl8xNgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfTUNMS0RJVl8zMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfTUNMS0RJVl82NAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQklfTUNMS0RJVl8xMjgKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgc3BlY2lmeSBFQkkgYnVzIHRpbWluZyBmb3IgYWNjZXNzIEVCSSBkZXZpY2UuCisgICovCit2b2lkIEVCSV9TZXRCdXNUaW1pbmcodWludDMyX3QgdTMyQmFuaywgdWludDMyX3QgdTMyVGltaW5nQ29uZmlnLCB1aW50MzJfdCB1MzJNY2xrRGl2KQoreworICAgIHVpbnQzMl90IHUzMkluZGV4MCA9ICh1aW50MzJfdCkmRUJJLT5DVEwwICsgKHVpbnQzMl90KXUzMkJhbmsgKiAweDEwVTsKKyAgICB1aW50MzJfdCB1MzJJbmRleDEgPSAodWludDMyX3QpJkVCSS0+VENUTDAgKyAodWludDMyX3QpdTMyQmFuayAqIDB4MTBVOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpwdTMyRUJJQ1RMLCAqcHUzMkVCSVRDVEw7CisgICAgdWludDMyX3QgcHUzMkluZGV4MCwgcHUzMkluZGV4MTsKKworICAgIGlmKChfX1BDKCkmTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpCisgICAgeworICAgICAgICBwdTMySW5kZXgwID0gKHUzMkluZGV4MCB8IE5TX09GRlNFVCk7CisgICAgICAgIHB1MzJJbmRleDEgPSAodTMySW5kZXgxIHwgTlNfT0ZGU0VUKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHUzMkluZGV4MCA9IHUzMkluZGV4MDsKKyAgICAgICAgcHUzMkluZGV4MSA9IHUzMkluZGV4MTsKKyAgICB9CisKKyAgICBwdTMyRUJJQ1RMICA9ICh1aW50MzJfdCAqKShwdTMySW5kZXgwKTsKKyAgICBwdTMyRUJJVENUTCA9ICh1aW50MzJfdCAqKShwdTMySW5kZXgxKTsKKworICAgICpwdTMyRUJJQ1RMID0gKCpwdTMyRUJJQ1RMICYgfkVCSV9DVExfTUNMS0RJVl9Nc2spIHwgKHUzMk1jbGtEaXYgPDwgRUJJX0NUTF9NQ0xLRElWX1Bvcyk7CisgICAgKnB1MzJFQklUQ1RMID0gdTMyVGltaW5nQ29uZmlnOworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVCSV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQklfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2VjYXAuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2VjYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDY1MjI1Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZWNhcC5jCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgZWNhcC5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKworICogQGJyaWVmICAgIEVuaGFuY2VkIElucHV0IENhcHR1cmUgVGltZXIgKEVDQVApIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTTIzNTEuaCIKKworCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRUNBUF9Ecml2ZXIgRUNBUCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBFQ0FQX0VYUE9SVEVEX0ZVTkNUSU9OUyBFQ0FQIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEVDQVAgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBlY2FwICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVDQVAgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkZ1bmNNYXNrIElucHV0IGNhcHR1cmUgZnVuY3Rpb24gc2VsZWN0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfRElTQUJMRV9DT01QQVJFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ09NUEFSRV9GVU5DVElPTgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGVuYWJsZSBpbnB1dCBjYXB0dXJlIGZ1bmN0aW9uIGFuZCBzZWxlY3QgY29tcGFyZSBhbmQgcmVsb2FkIGZ1bmN0aW9uLgorICAqLwordm9pZCBFQ0FQX09wZW4oRUNBUF9UKiBlY2FwLCB1aW50MzJfdCB1MzJGdW5jTWFzaykKK3sKKyAgICAvKiBDbGVhciBJbnB1dCBjYXB0dXJlIG1vZGUqLworICAgIGVjYXAtPkNUTDAgPSBlY2FwLT5DVEwwICYgfihFQ0FQX0NUTDBfQ01QRU5fTXNrKTsKKworICAgIC8qIEVuYWJsZSBJbnB1dCBDYXB0dXJlIGFuZCBzZXQgbW9kZSAqLworICAgIGVjYXAtPkNUTDAgfD0gRUNBUF9DVEwwX0NBUEVOX01zayB8ICh1MzJGdW5jTWFzayk7Cit9CisKKworCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIEVDQVAgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBlY2FwICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVDQVAgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIG1hY3JvIGRpc2FibGUgaW5wdXQgY2FwdHVyZSBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgRUNBUF9DbG9zZShFQ0FQX1QqIGVjYXApCit7CisgICAgLyogRGlzYWJsZSBJbnB1dCBDYXB0dXJlKi8KKyAgICBlY2FwLT5DVEwwICY9IH5FQ0FQX0NUTDBfQ0FQRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGVuYWJsZSBpbnB1dCBjaGFubmVsIGludGVycnVwdAorICAqIEBwYXJhbVtpbl0gZWNhcCAgICAgIFNwZWNpZnkgRUNBUCBwb3J0CisgICogQHBhcmFtW2luXSB1MzJNYXNrICBUaGUgaW5wdXQgY2hhbm5lbCBNYXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX0NBUElFTjBfTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX0NBUElFTjFfTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX0NBUElFTjJfTXNrCisgICogICAgICAgICAgICAgICAgICAtIFxyZWYgRUNBUF9DVEwwX09WSUVOX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DTVBJRU5fTXNrCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBtYWNybyB3aWxsIGVuYWJsZSB0aGUgaW5wdXQgY2hhbm5lbF9uIGludGVycnVwdC4KKyAgKi8KK3ZvaWQgRUNBUF9FbmFibGVJTlQoRUNBUF9UKiBlY2FwLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIC8qIEVuYWJsZSBpbnB1dCBjaGFubmVsIGludGVycnVwdCAqLworICAgIGVjYXAtPkNUTDAgfD0gKHUzMk1hc2spOworCisgICAgLyogRW5hYmxlIE5WSUMgRUNBUCBJUlEgKi8KKyAgICBpZigoZWNhcCA9PSBFQ0FQMCkgfHwgKGVjYXAgPT0gRUNBUDBfTlMpKQorICAgIHsKKyAgICAgICAgTlZJQ19FbmFibGVJUlEoRUNBUDBfSVJRbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE5WSUNfRW5hYmxlSVJRKEVDQVAxX0lSUW4pOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkaXNhYmxlIGlucHV0IGNoYW5uZWwgaW50ZXJydXB0CisgICogQHBhcmFtW2luXSBlY2FwICAgICAgU3BlY2lmeSBFQ0FQIHBvcnQKKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgIFRoZSBpbnB1dCBjaGFubmVsIG51bWJlcgorICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DQVBJRU4wX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DQVBJRU4xX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9DQVBJRU4yX01zaworICAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVDQVBfQ1RMMF9PVklFTl9Nc2sKKyAgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFQ0FQX0NUTDBfQ01QSUVOX01zaworICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgbWFjcm8gd2lsbCBkaXNhYmxlIHRoZSBpbnB1dCBjaGFubmVsX24gaW50ZXJydXB0LgorICAqLwordm9pZCBFQ0FQX0Rpc2FibGVJTlQoRUNBUF9UKiBlY2FwLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIC8qIERpc2FibGUgaW5wdXQgY2hhbm5lbCBpbnRlcnJ1cHQgKi8KKyAgICAoZWNhcC0+Q1RMMCkgJj0gfih1MzJNYXNrKTsKKworICAgIC8qIERpc2FibGUgTlZJQyBFQ0FQIElSUSAqLworICAgIGlmKChlY2FwID09IEVDQVAwKSB8fCAoZWNhcCA9PSBFQ0FQMF9OUykpCisgICAgeworICAgICAgICBOVklDX0Rpc2FibGVJUlEoRUNBUDBfSVJRbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE5WSUNfRGlzYWJsZUlSUShFQ0FQMV9JUlFuKTsKKyAgICB9Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRUNBUF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFQ0FQX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lcHdtLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9lcHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2MmRiYgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2Vwd20uYwpAQCAtMCwwICsxLDEzOTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBlcHdtLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBFUFdNIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEVQV01fRHJpdmVyIEVQV00gRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBFUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyBFUFdNIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiBAYnJpZWYgQ29uZmlndXJlIEVQV00gY2FwdHVyZSBhbmQgZ2V0IHRoZSBuZWFyZXN0IHVuaXQgdGltZS4KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJVbml0VGltZU5zZWMgVGhlIHVuaXQgdGltZSBvZiBjb3VudGVyCisgKiBAcGFyYW1baW5dIHUzMkNhcHR1cmVFZGdlIFRoZSBjb25kaXRpb24gdG8gbGF0Y2ggdGhlIGNvdW50ZXIuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkCisgKiBAcmV0dXJuIFRoZSBuZWFyZXN0IHVuaXQgdGltZSBpbiBuYW5vIHNlY29uZC4KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBDb25maWd1cmUgRVBXTSBjYXB0dXJlIGFuZCBnZXQgdGhlIG5lYXJlc3QgdW5pdCB0aW1lLgorICovCit1aW50MzJfdCBFUFdNX0NvbmZpZ0NhcHR1cmVDaGFubmVsKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyVW5pdFRpbWVOc2VjLCB1aW50MzJfdCB1MzJDYXB0dXJlRWRnZSkKK3sKKyAgICB1aW50MzJfdCB1MzJQV01DbG9ja1NyYzsKKyAgICB1aW50MzJfdCB1MzJOZWFyZXN0VW5pdFRpbWVOc2VjID0gMFU7CisgICAgdWludDMyX3QgdTMyUHJlc2NhbGUgPSAxVSwgdTMyQ05SID0gMHhGRkZGVTsKKyAgICB1aW50OF90IHU4QnJlYWtMb29wID0gMFU7CisKKyAgICAodm9pZCl1MzJDYXB0dXJlRWRnZTsKKyAgICAvKiBjbG9jayBzb3VyY2UgaXMgZnJvbSBQQ0xLICovCisgICAgaWYoKGVwd20gPT0gRVBXTTApIHx8IChlcHdtID09IEVQV00wX05TKSkKKyAgICB7CisgICAgICAgIHUzMlBXTUNsb2NrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKyAgICBlbHNlIC8qIGlmKChlcHdtID09IEVQV00xKXx8KGVwd20gPT0gRVBXTTFfTlMpKSAqLworICAgIHsKKyAgICAgICAgdTMyUFdNQ2xvY2tTcmMgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorCisgICAgdTMyUFdNQ2xvY2tTcmMgLz0gMTAwMFVMOworICAgIGZvcih1MzJQcmVzY2FsZSA9IDFVOyB1MzJQcmVzY2FsZSA8PSAweDEwMDBVOyB1MzJQcmVzY2FsZSsrKQorICAgIHsKKyAgICAgICAgdTMyTmVhcmVzdFVuaXRUaW1lTnNlYyA9ICgxMDAwMDAwVUwgKiB1MzJQcmVzY2FsZSkgLyB1MzJQV01DbG9ja1NyYzsKKyAgICAgICAgaWYodTMyTmVhcmVzdFVuaXRUaW1lTnNlYyA8IHUzMlVuaXRUaW1lTnNlYykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodTMyUHJlc2NhbGUgPT0gMHgxMDAwVSkgIC8qIGxpbWl0IHRvIHRoZSBtYXhpbXVtIHVuaXQgdGltZShuYW5vIHNlY29uZCkgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1OEJyZWFrTG9vcCA9IDFVOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISgoMTAwMDAwMFVMICogKHUzMlByZXNjYWxlICsgMVVMKSA+ICh1MzJOZWFyZXN0VW5pdFRpbWVOc2VjICogdTMyUFdNQ2xvY2tTcmMpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdThCcmVha0xvb3AgPSAxVTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHU4QnJlYWtMb29wID0gMVU7CisgICAgICAgIH0KKyAgICAgICAgaWYodThCcmVha0xvb3ApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogY29udmVydCB0byByZWFsIHJlZ2lzdGVyIHZhbHVlICovCisgICAgdTMyUHJlc2NhbGUgPSB1MzJQcmVzY2FsZSAtIDFVOworICAgIC8qIGV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZSBhIHByZXNjYWxlciAqLworICAgIEVQV01fU0VUX1BSRVNDQUxFUihlcHdtLCB1MzJDaGFubmVsTnVtLCB1MzJQcmVzY2FsZSk7CisKKyAgICAvKiBzZXQgRVBXTSB0byBkb3duIGNvdW50IHR5cGUoZWRnZSBhbGlnbmVkKSAqLworICAgIChlcHdtKS0+Q1RMMSA9ICgoZXB3bSktPkNUTDEgJiB+KEVQV01fQ1RMMV9DTlRUWVBFMF9Nc2sgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMSkpKSB8ICgxVUwgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMSkpOworICAgIC8qIHNldCBFUFdNIHRvIGF1dG8tcmVsb2FkIG1vZGUgKi8KKyAgICAoZXB3bSktPkNUTDEgJj0gfihFUFdNX0NUTDFfQ05UTU9ERTBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pOworICAgIEVQV01fU0VUX0NOUihlcHdtLCB1MzJDaGFubmVsTnVtLCB1MzJDTlIpOworCisgICAgcmV0dXJuICh1MzJOZWFyZXN0VW5pdFRpbWVOc2VjKTsKK30KKworLyoqCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBDb25maWd1cmUgRVBXTSBnZW5lcmF0b3IgYW5kIGdldCB0aGUgbmVhcmVzdCBmcmVxdWVuY3kgaW4gZWRnZSBhbGlnbmVkKHVwIGNvdW50ZXIgdHlwZSkgYXV0by1yZWxvYWQgbW9kZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkZyZXF1ZW5jeSBUYXJnZXQgZ2VuZXJhdG9yIGZyZXF1ZW5jeQorICogQHBhcmFtW2luXSB1MzJEdXR5Q3ljbGUgVGFyZ2V0IGdlbmVyYXRvciBkdXR5IGN5Y2xlIHBlcmNlbnRhZ2UuIFZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDAgfiAxMDAuIDEwIG1lYW5zIDEwJSwgMjAgbWVhbnMgMjAlLi4uCisgKiBAcmV0dXJuIE5lYXJlc3QgZnJlcXVlbmN5IGNsb2NrIGluIG5hbm8gc2Vjb25kCisgU2luY2UgZXZlcnkgdHdvIGNoYW5uZWxzLCAoMCAmIDEpLCAoMiAmIDMpLCBzaGFyZXMgYSBwcmVzY2FsZXIuIENhbGwgdGhpcyBBUEkgdG8gY29uZmlndXJlIEVQV00gZnJlcXVlbmN5IG1heSBhZmZlY3QKKyAqICAgICAgIGV4aXN0aW5nIGZyZXF1ZW5jeSBvZiBvdGhlciBjaGFubmVsLgorIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgaW5pdGlhbCBzdGFnZS4KKyAqICAgICAgIFRvIGNoYW5nZSBkdXR5IGN5Y2xlIGxhdGVyLCBpdCBzaG91bGQgZ2V0IHRoZSBjb25maWd1cmVkIHBlcmlvZCB2YWx1ZSBhbmQgY2FsY3VsYXRlIHRoZSBuZXcgY29tcGFyYXRvciB2YWx1ZS4KKyAqLwordWludDMyX3QgRVBXTV9Db25maWdPdXRwdXRDaGFubmVsKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyRnJlcXVlbmN5LCB1aW50MzJfdCB1MzJEdXR5Q3ljbGUpCit7CisgICAgdWludDMyX3QgdTMyUFdNQ2xvY2tTcmM7CisgICAgdWludDMyX3QgaTsKKyAgICB1aW50MzJfdCB1MzJQcmVzY2FsZSA9IDFVLCB1MzJDTlIgPSAweEZGRkZVOworCisgICAgLyogY2xvY2sgc291cmNlIGlzIGZyb20gUENMSyAqLworICAgIGlmKChlcHdtID09IEVQV00wKSB8fCAoZXB3bSA9PSBFUFdNMF9OUykpCisgICAgeworICAgICAgICB1MzJQV01DbG9ja1NyYyA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICB9CisgICAgZWxzZSAvKiBpZigoZXB3bSA9PSBFUFdNMSl8fChlcHdtID09IEVQV00xX05TKSkgKi8KKyAgICB7CisgICAgICAgIHUzMlBXTUNsb2NrU3JjID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKworICAgIGZvcih1MzJQcmVzY2FsZSA9IDFVOyB1MzJQcmVzY2FsZSA8IDB4RkZGVTsgdTMyUHJlc2NhbGUrKykvKiBwcmVzY2FsZSBjb3VsZCBiZSAwfjB4RkZGICovCisgICAgeworICAgICAgICBpID0gKHUzMlBXTUNsb2NrU3JjIC8gdTMyRnJlcXVlbmN5KSAvIHUzMlByZXNjYWxlOworICAgICAgICAvKiBJZiB0YXJnZXQgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gQ05SLCBuZWVkIHRvIHVzZSBhIGxhcmdlciBwcmVzY2FsZXIgKi8KKyAgICAgICAgaWYoaSA8PSAoMHgxMDAwMFUpKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDTlIgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogU3RvcmUgcmV0dXJuIHZhbHVlIGhlcmUgJ2NvcyB3ZSdyZSBnb25uYSBjaGFuZ2UgdTMyUHJlc2NhbGUgJiB1MzJDTlIgdG8gdGhlIHJlYWwgdmFsdWUgdG8gZmlsbCBpbnRvIHJlZ2lzdGVyICovCisgICAgaSA9IHUzMlBXTUNsb2NrU3JjIC8gKHUzMlByZXNjYWxlICogdTMyQ05SKTsKKworICAgIC8qIGNvbnZlcnQgdG8gcmVhbCByZWdpc3RlciB2YWx1ZSAqLworICAgIHUzMlByZXNjYWxlID0gdTMyUHJlc2NhbGUgLSAxVTsKKyAgICAvKiBldmVyeSB0d28gY2hhbm5lbHMgc2hhcmUgYSBwcmVzY2FsZXIgKi8KKyAgICBFUFdNX1NFVF9QUkVTQ0FMRVIoZXB3bSwgdTMyQ2hhbm5lbE51bSwgdTMyUHJlc2NhbGUpOworICAgIC8qIHNldCBFUFdNIHRvIHVwIGNvdW50ZXIgdHlwZShlZGdlIGFsaWduZWQpIGFuZCBhdXRvLXJlbG9hZCBtb2RlICovCisgICAgKGVwd20pLT5DVEwxID0gKChlcHdtKS0+Q1RMMSAmIH4oKEVQV01fQ1RMMV9DTlRUWVBFMF9Nc2sgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMSkpIHwgKEVQV01fQ1RMMV9DTlRNT0RFMF9Nc2sgPDwgdTMyQ2hhbm5lbE51bSkpKTsKKworICAgIHUzMkNOUiA9IHUzMkNOUiAtIDFVOworICAgIEVQV01fU0VUX0NOUihlcHdtLCB1MzJDaGFubmVsTnVtLCB1MzJDTlIpOworICAgIEVQV01fU0VUX0NNUihlcHdtLCB1MzJDaGFubmVsTnVtLCB1MzJEdXR5Q3ljbGUgKiAodTMyQ05SICsgMVVMKSAvIDEwMFVMKTsKKworICAgIChlcHdtKS0+V0dDVEwwID0gKChlcHdtKS0+V0dDVEwwICYgfigoRVBXTV9XR0NUTDBfUFJEUENUTDBfTXNrIHwgRVBXTV9XR0NUTDBfWlBDVEwwX01zaykgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMSkpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgIChFUFdNX09VVFBVVF9ISUdIIDw8ICh1MzJDaGFubmVsTnVtIDw8IDFVTCA8PCBFUFdNX1dHQ1RMMF9aUENUTDBfUG9zKSk7CisgICAgKGVwd20pLT5XR0NUTDEgPSAoKGVwd20pLT5XR0NUTDEgJiB+KChFUFdNX1dHQ1RMMV9DTVBEQ1RMMF9Nc2sgfCBFUFdNX1dHQ1RMMV9DTVBVQ1RMMF9Nc2spIDw8ICh1MzJDaGFubmVsTnVtIDw8IDEpKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAoRVBXTV9PVVRQVVRfTE9XIDw8ICh1MzJDaGFubmVsTnVtIDw8IDFVTCA8PCBFUFdNX1dHQ1RMMV9DTVBVQ1RMMF9Qb3MpKTsKKworICAgIHJldHVybihpKTsKK30KKworLyoqCisgKiBAYnJpZWYgU3RhcnQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgY2hhbm5lbCAwLCBiaXQgMSBpcyBjaGFubmVsIDEuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0YXJ0IEVQV00gbW9kdWxlLgorICovCit2b2lkIEVQV01fU3RhcnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAoZXB3bSktPkNOVEVOIHw9IHUzMkNoYW5uZWxNYXNrOworfQorCisvKioKKyAqIEBicmllZiBTdG9wIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIGNoYW5uZWwgMCwgYml0IDEgaXMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdG9wIEVQV00gbW9kdWxlLgorICovCit2b2lkIEVQV01fU3RvcChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgIHVpbnQzMl90IGk7CisgICAgZm9yKGkgPSAwVUw7IGkgPCBFUFdNX0NIQU5ORUxfTlVNOyBpICsrKQorICAgIHsKKyAgICAgICAgaWYodTMyQ2hhbm5lbE1hc2sgJiAoMVVMIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICAoZXB3bSktPlBFUklPRFtpXSA9IDBVTDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgU3RvcCBFUFdNIGdlbmVyYXRpb24gaW1tZWRpYXRlbHkgYnkgY2xlYXIgY2hhbm5lbCBlbmFibGUgYml0CisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwIGlzIGNoYW5uZWwgMCwgYml0IDEgaXMgY2hhbm5lbCAxLi4uCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdG9wIEVQV00gZ2VuZXJhdGlvbiBpbW1lZGlhdGVseSBieSBjbGVhciBjaGFubmVsIGVuYWJsZSBiaXQuCisgKi8KK3ZvaWQgRVBXTV9Gb3JjZVN0b3AoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTWFzaykKK3sKKyAgICAoZXB3bSktPkNOVEVOICY9IH51MzJDaGFubmVsTWFzazsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIHNlbGVjdGVkIGNoYW5uZWwgdG8gdHJpZ2dlciBBREMKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJDb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byB0cmlnZ2VyIEFEQy4gQ29tYmluYXRpb24gb2YgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfRVZFTl9aRVJPCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfRVZFTl9QRVJJT0QKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19FVkVOX1pFUk9fUEVSSU9ECisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfRVZFTl9DT01QQVJFX1VQCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfRVZFTl9DT01QQVJFX0RPV04KKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19PRERfWkVSTworICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX09ERF9QRVJJT0QKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19PRERfWkVST19QRVJJT0QKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19PRERfQ09NUEFSRV9VUAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX09ERF9DT01QQVJFX0RPV04KKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19DSF8wX0ZSRUVfQ01QX1VQCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfQ0hfMF9GUkVFX0NNUF9ET1dOCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSR19BRENfQ0hfMl9GUkVFX0NNUF9VUAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX0NIXzJfRlJFRV9DTVBfRE9XTgorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUkdfQURDX0NIXzRfRlJFRV9DTVBfVVAKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fVFJHX0FEQ19DSF80X0ZSRUVfQ01QX0RPV04KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgQURDLgorICovCit2b2lkIEVQV01fRW5hYmxlQURDVHJpZ2dlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNvbmRpdGlvbikKK3sKKyAgICBpZih1MzJDaGFubmVsTnVtIDwgNFVMKQorICAgIHsKKyAgICAgICAgKGVwd20pLT5FQURDVFMwICY9IH4oKEVQV01fRUFEQ1RTMF9UUkdTRUwwX01zaykgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMykpOworICAgICAgICAoZXB3bSktPkVBRENUUzAgfD0gKChFUFdNX0VBRENUUzBfVFJHRU4wX01zayB8IHUzMkNvbmRpdGlvbikgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAoZXB3bSktPkVBRENUUzEgJj0gfigoRVBXTV9FQURDVFMxX1RSR1NFTDRfTXNrKSA8PCAoKHUzMkNoYW5uZWxOdW0gLSA0VUwpIDw8IDMpKTsKKyAgICAgICAgKGVwd20pLT5FQURDVFMxIHw9ICgoRVBXTV9FQURDVFMxX1RSR0VONF9Nc2sgfCB1MzJDb25kaXRpb24pIDw8ICgodTMyQ2hhbm5lbE51bSAtIDRVTCkgPDwgMykpOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgQURDCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgc2VsZWN0ZWQgY2hhbm5lbCB0byB0cmlnZ2VyIEFEQy4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVBRENUcmlnZ2VyKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICBpZih1MzJDaGFubmVsTnVtIDwgNFVMKQorICAgIHsKKyAgICAgICAgKGVwd20pLT5FQURDVFMwICY9IH4oRVBXTV9FQURDVFMwX1RSR0VOMF9Nc2sgPDwgKHUzMkNoYW5uZWxOdW0gPDwgMykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAoZXB3bSktPkVBRENUUzEgJj0gfihFUFdNX0VBRENUUzFfVFJHRU40X01zayA8PCAoKHUzMkNoYW5uZWxOdW0gLSA0VUwpIDw8IDMpKTsKKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmIENsZWFyIHNlbGVjdGVkIGNoYW5uZWwgdHJpZ2dlciBBREMgZmxhZworICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkNvbmRpdGlvbiBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgc2VsZWN0ZWQgY2hhbm5lbCB0cmlnZ2VyIEFEQyBmbGFnLgorICovCit2b2lkIEVQV01fQ2xlYXJBRENUcmlnZ2VyRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkNvbmRpdGlvbikKK3sKKyAgICAodm9pZCl1MzJDb25kaXRpb247CisgICAgKGVwd20pLT5TVEFUVVMgPSAoRVBXTV9TVEFUVVNfRUFEQ1RSR0YwX01zayA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IHNlbGVjdGVkIGNoYW5uZWwgdHJpZ2dlciBBREMgZmxhZworICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dmFsIDAgVGhlIHNwZWNpZmllZCBjaGFubmVsIHRyaWdnZXIgQURDIHRvIHN0YXJ0IG9mIGNvbnZlcnNpb24gZmxhZyBpcyBub3Qgc2V0CisgKiBAcmV0dmFsIDEgVGhlIHNwZWNpZmllZCBjaGFubmVsIHRyaWdnZXIgQURDIHRvIHN0YXJ0IG9mIGNvbnZlcnNpb24gZmxhZyBpcyBzZXQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgRVBXTSB0cmlnZ2VyIEFEQyB0byBzdGFydCBvZiBjb252ZXJzaW9uIGZsYWcgZm9yIHNwZWNpZmllZCBjaGFubmVsLgorICovCit1aW50MzJfdCBFUFdNX0dldEFEQ1RyaWdnZXJGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICByZXR1cm4gKCgoZXB3bSktPlNUQVRVUyAmIChFUFdNX1NUQVRVU19FQURDVFJHRjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgREFDCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyQ29uZGl0aW9uIFRoZSBjb25kaXRpb24gdG8gdHJpZ2dlciBEQUMuIENvbWJpbmF0aW9uIG9mIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUklHR0VSX0RBQ19aRVJPCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSSUdHRVJfREFDX1BFUklPRAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9UUklHR0VSX0RBQ19DT01QQVJFX1VQCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1RSSUdHRVJfREFDX0NPTVBBUkVfRE9XTgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHNlbGVjdGVkIGNoYW5uZWwgdG8gdHJpZ2dlciBEQUMuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVEQUNUcmlnZ2VyKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ29uZGl0aW9uKQoreworICAgIChlcHdtKS0+REFDVFJHRU4gfD0gKHUzMkNvbmRpdGlvbiA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBzZWxlY3RlZCBjaGFubmVsIHRvIHRyaWdnZXIgREFDCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgc2VsZWN0ZWQgY2hhbm5lbCB0byB0cmlnZ2VyIERBQy4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVEQUNUcmlnZ2VyKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPkRBQ1RSR0VOICY9IH4oKEVQV01fVFJJR0dFUl9EQUNfWkVSTyB8IEVQV01fVFJJR0dFUl9EQUNfUEVSSU9EIHwgRVBXTV9UUklHR0VSX0RBQ19DT01QQVJFX1VQIHwgRVBXTV9UUklHR0VSX0RBQ19DT01QQVJFX0RPV04pIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciBzZWxlY3RlZCBjaGFubmVsIHRyaWdnZXIgREFDIGZsYWcKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQKKyAqIEBwYXJhbVtpbl0gdTMyQ29uZGl0aW9uIFRoZSBjb25kaXRpb24gdG8gdHJpZ2dlciBEQUMuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBzZWxlY3RlZCBjaGFubmVsIHRyaWdnZXIgREFDIGZsYWcuCisgKi8KK3ZvaWQgRVBXTV9DbGVhckRBQ1RyaWdnZXJGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ29uZGl0aW9uKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgKHZvaWQpdTMyQ29uZGl0aW9uOworICAgIChlcHdtKS0+U1RBVFVTID0gRVBXTV9TVEFUVVNfREFDVFJHRl9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBzZWxlY3RlZCBjaGFubmVsIHRyaWdnZXIgREFDIGZsYWcKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQKKyAqIEByZXR2YWwgMCBUaGUgc3BlY2lmaWVkIGNoYW5uZWwgdHJpZ2dlciBEQUMgdG8gc3RhcnQgb2YgY29udmVyc2lvbiBmbGFnIGlzIG5vdCBzZXQKKyAqIEByZXR2YWwgMSBUaGUgc3BlY2lmaWVkIGNoYW5uZWwgdHJpZ2dlciBEQUMgdG8gc3RhcnQgb2YgY29udmVyc2lvbiBmbGFnIGlzIHNldAorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBzZWxlY3RlZCBjaGFubmVsIHRyaWdnZXIgREFDIGZsYWcuCisgKi8KK3VpbnQzMl90IEVQV01fR2V0REFDVHJpZ2dlckZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgICh2b2lkKXUzMkNoYW5uZWxOdW07CisgICAgcmV0dXJuICgoKGVwd20pLT5TVEFUVVMgJiBFUFdNX1NUQVRVU19EQUNUUkdGX01zaykgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGVuYWJsZSBmYXVsdCBicmFrZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwuCisgKiBAcGFyYW1baW5dIHUzMkxldmVsTWFzayBPdXRwdXQgaGlnaCBvciBsb3cgd2hpbGUgZmF1bHQgYnJha2Ugb2NjdXJzLCBlYWNoIGJpdCByZXByZXNlbnQgdGhlIGxldmVsIG9mIGEgY2hhbm5lbAorICogICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgZmF1bHQgYnJha2Ugb2NjdXJzLiBCaXQgMCByZXByZXNlbnRzIGNoYW5uZWwgMCwgYml0IDEgcmVwcmVzZW50cyBjaGFubmVsIDEuLi4KKyAqIEBwYXJhbVtpbl0gdTMyQnJha2VTb3VyY2UgRmF1bHQgYnJha2Ugc291cmNlLCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHNvdXJjZQorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFX0FEQ1JNCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0VER0VfQUNNUDAKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfRURHRV9BQ01QMQorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFX0JLUDAKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfRURHRV9CS1AxCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0VER0VfU1lTX0NTUworICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFX1NZU19CT0QKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfRURHRV9TWVNfUkFNCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0VER0VfU1lTX0NPUgorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9MRVZFTF9BRENSTQorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9MRVZFTF9BQ01QMAorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9MRVZFTF9BQ01QMQorICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9MRVZFTF9CS1AwCisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0xFVkVMX0JLUDEKKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUxfU1lTX0NTUworICogICAgICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9MRVZFTF9TWVNfQk9ECisgKiAgICAgICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0xFVkVMX1NZU19SQU0KKyAqICAgICAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUxfU1lTX0NPUgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGZhdWx0IGJyYWtlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykuCisgKiAgICAgICAgICBUaGUgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVGYXVsdEJyYWtlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2ssIHVpbnQzMl90IHUzMkxldmVsTWFzaywgdWludDMyX3QgdTMyQnJha2VTb3VyY2UpCit7CisgICAgdWludDMyX3QgaTsKKworICAgIGZvcihpID0gMFVMOyBpIDwgRVBXTV9DSEFOTkVMX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYodTMyQ2hhbm5lbE1hc2sgJiAoMVVMIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICBpZigodTMyQnJha2VTb3VyY2UgPT0gRVBXTV9GQl9FREdFX1NZU19DU1MpIHx8ICh1MzJCcmFrZVNvdXJjZSA9PSBFUFdNX0ZCX0VER0VfU1lTX0JPRCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAodTMyQnJha2VTb3VyY2UgPT0gRVBXTV9GQl9FREdFX1NZU19SQU0pIHx8ICh1MzJCcmFrZVNvdXJjZSA9PSBFUFdNX0ZCX0VER0VfU1lTX0NPUikgfHwgXAorICAgICAgICAgICAgICAgICAgICAodTMyQnJha2VTb3VyY2UgPT0gRVBXTV9GQl9MRVZFTF9TWVNfQ1NTKSB8fCAodTMyQnJha2VTb3VyY2UgPT0gRVBXTV9GQl9MRVZFTF9TWVNfQk9EKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICh1MzJCcmFrZVNvdXJjZSA9PSBFUFdNX0ZCX0xFVkVMX1NZU19SQU0pIHx8ICh1MzJCcmFrZVNvdXJjZSA9PSBFUFdNX0ZCX0xFVkVMX1NZU19DT1IpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIChlcHdtKS0+QlJLQ1RMW2kgPj4gMV0gfD0gKHUzMkJyYWtlU291cmNlICYgKEVQV01fQlJLQ1RMMF8xX1NZU0VCRU5fTXNrIHwgRVBXTV9CUktDVEwwXzFfU1lTTEJFTl9Nc2spKTsKKyAgICAgICAgICAgICAgICAoZXB3bSktPkZBSUxCUksgfD0gKHUzMkJyYWtlU291cmNlICYgMHhGVUwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIChlcHdtKS0+QlJLQ1RMW2kgPj4gMV0gfD0gdTMyQnJha2VTb3VyY2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZih1MzJMZXZlbE1hc2sgJiAoMVVMIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICBpZigoaSAmIDB4MVVMKSA9PSAwVUwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogc2V0IGJyYWtlIGFjdGlvbiBhcyBoaWdoIGxldmVsIGZvciBldmVuIGNoYW5uZWwgKi8KKyAgICAgICAgICAgICAgICAoZXB3bSktPkJSS0NUTFtpID4+IDFdICY9IH5FUFdNX0JSS0NUTDBfMV9CUktBRVZFTl9Nc2s7CisgICAgICAgICAgICAgICAgKGVwd20pLT5CUktDVExbaSA+PiAxXSB8PSAoKDNVTCkgPDwgRVBXTV9CUktDVEwwXzFfQlJLQUVWRU5fUG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBzZXQgYnJha2UgYWN0aW9uIGFzIGhpZ2ggbGV2ZWwgZm9yIG9kZCBjaGFubmVsICovCisgICAgICAgICAgICAgICAgKGVwd20pLT5CUktDVExbaSA+PiAxXSAmPSB+RVBXTV9CUktDVEwwXzFfQlJLQU9ERF9Nc2s7CisgICAgICAgICAgICAgICAgKGVwd20pLT5CUktDVExbaSA+PiAxXSB8PSAoKDNVTCkgPDwgRVBXTV9CUktDVEwwXzFfQlJLQU9ERF9Qb3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKGkgJiAweDFVTCkgPT0gMFVMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHNldCBicmFrZSBhY3Rpb24gYXMgbG93IGxldmVsIGZvciBldmVuIGNoYW5uZWwgKi8KKyAgICAgICAgICAgICAgICAoZXB3bSktPkJSS0NUTFtpID4+IDFdICY9IH5FUFdNX0JSS0NUTDBfMV9CUktBRVZFTl9Nc2s7CisgICAgICAgICAgICAgICAgKGVwd20pLT5CUktDVExbaSA+PiAxXSB8PSAoKDJVTCkgPDwgRVBXTV9CUktDVEwwXzFfQlJLQUVWRU5fUG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBzZXQgYnJha2UgYWN0aW9uIGFzIGxvdyBsZXZlbCBmb3Igb2RkIGNoYW5uZWwgKi8KKyAgICAgICAgICAgICAgICAoZXB3bSktPkJSS0NUTFtpID4+IDFdICY9IH5FUFdNX0JSS0NUTDBfMV9CUktBT0REX01zazsKKyAgICAgICAgICAgICAgICAoZXB3bSktPkJSS0NUTFtpID4+IDFdIHw9ICgoMlVMKSA8PCBFUFdNX0JSS0NUTDBfMV9CUktBT0REX1Bvcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBjYXB0dXJlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgY2hhbm5lbCAwLCBiaXQgMSBpcyBjaGFubmVsIDEuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBjYXB0dXJlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVDYXB0dXJlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spCit7CisgICAgKGVwd20pLT5DQVBJTkVOIHw9IHUzMkNoYW5uZWxNYXNrOworICAgIChlcHdtKS0+Q0FQQ1RMIHw9IHUzMkNoYW5uZWxNYXNrOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIGNhcHR1cmUgb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCBpcyBjaGFubmVsIDAsIGJpdCAxIGlzIGNoYW5uZWwgMS4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBjYXB0dXJlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlQ2FwdHVyZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgIChlcHdtKS0+Q0FQSU5FTiAmPSB+dTMyQ2hhbm5lbE1hc2s7CisgICAgKGVwd20pLT5DQVBDVEwgJj0gfnUzMkNoYW5uZWxNYXNrOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGVzIEVQV00gb3V0cHV0IGdlbmVyYXRpb24gb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgYml0IDAgdG8gMSBlbmFibGVzIGNoYW5uZWwgMCBvdXRwdXQsIHNldCBiaXQgMSB0byAxIGVuYWJsZXMgY2hhbm5lbCAxIG91dHB1dC4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIEVQV00gb3V0cHV0IGdlbmVyYXRpb24gb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKS4KKyAqLwordm9pZCBFUFdNX0VuYWJsZU91dHB1dChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgIChlcHdtKS0+UE9FTiB8PSB1MzJDaGFubmVsTWFzazsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZXMgRVBXTSBvdXRwdXQgZ2VuZXJhdGlvbiBvZiBzZWxlY3RlZCBjaGFubmVsKHMpCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTWFzayBDb21iaW5hdGlvbiBvZiBlbmFibGVkIGNoYW5uZWxzLiBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoYW5uZWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IGJpdCAwIHRvIDEgZGlzYWJsZXMgY2hhbm5lbCAwIG91dHB1dCwgc2V0IGJpdCAxIHRvIDEgZGlzYWJsZXMgY2hhbm5lbCAxIG91dHB1dC4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBFUFdNIG91dHB1dCBnZW5lcmF0aW9uIG9mIHNlbGVjdGVkIGNoYW5uZWwocykuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlT3V0cHV0KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE1hc2spCit7CisgICAgKGVwd20pLT5QT0VOICY9IH51MzJDaGFubmVsTWFzazsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlcyBQRE1BIHRyYW5zZmVyIG9mIHNlbGVjdGVkIGNoYW5uZWwgZm9yIEVQV00gY2FwdHVyZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtW2luXSB1MzJSaXNpbmdGaXJzdCBUaGUgY2FwdHVyZSBvcmRlciBpcyByaXNpbmcsIGZhbGxpbmcgZmlyc3QuIEV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZSB0aGUgc2FtZSBzZXR0aW5nLiBWYWxpZCB2YWx1ZXMgYXJlIFRSVUUgYW5kIEZBTFNFLgorICogQHBhcmFtW2luXSB1MzJNb2RlIENhcHR1cmVkIGRhdGEgdHJhbnNmZXJyZWQgYnkgUERNQSBpbnRlcnJ1cHQgdHlwZS4gSXQgY291bGQgYmUgZWl0aGVyCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0FQVFVSRV9QRE1BX1JJU0lOR19MQVRDSAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0NBUFRVUkVfUERNQV9GQUxMSU5HX0xBVENICisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0FQVFVSRV9QRE1BX1JJU0lOR19GQUxMSU5HX0xBVENICisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgUERNQSB0cmFuc2ZlciBvZiBzZWxlY3RlZCBjaGFubmVsKHMpIGZvciBFUFdNIGNhcHR1cmUuCisgVGhpcyBmdW5jdGlvbiBjYW4gb25seSBzZWxlY3RzIGV2ZW4gb3Igb2RkIGNoYW5uZWwgb2YgcGFpcnMgdG8gZG8gUERNQSB0cmFuc2Zlci4KKyAqLwordm9pZCBFUFdNX0VuYWJsZVBETUEoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJSaXNpbmdGaXJzdCwgdWludDMyX3QgdTMyTW9kZSkKK3sKKyAgICB1aW50MzJfdCB1MzJJc09kZENoOworICAgIHUzMklzT2RkQ2ggPSB1MzJDaGFubmVsTnVtICYgMHgxVUw7CisgICAgKGVwd20pLT5QRE1BQ1RMID0gKChlcHdtKS0+UERNQUNUTCAmIH4oKEVQV01fUERNQUNUTF9DSFNFTDBfMV9Nc2sgfCBFUFdNX1BETUFDVExfQ0FQT1JEMF8xX01zayB8IEVQV01fUERNQUNUTF9DQVBNT0QwXzFfTXNrKSA8PCAoKHUzMkNoYW5uZWxOdW0gPj4gMSkgPDwgMykpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKCh1MzJJc09kZENoIDw8IEVQV01fUERNQUNUTF9DSFNFTDBfMV9Qb3MpIHwgKHUzMlJpc2luZ0ZpcnN0IDw8IEVQV01fUERNQUNUTF9DQVBPUkQwXzFfUG9zKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMk1vZGUgfCBFUFdNX1BETUFDVExfQ0hFTjBfMV9Nc2spIDw8ICgodTMyQ2hhbm5lbE51bSA+PiAxKSA8PCAzKSk7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGVzIFBETUEgdHJhbnNmZXIgb2Ygc2VsZWN0ZWQgY2hhbm5lbCBmb3IgRVBXTSBjYXB0dXJlCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgUERNQSB0cmFuc2ZlciBvZiBzZWxlY3RlZCBjaGFubmVsKHMpIGZvciBFUFdNIGNhcHR1cmUuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlUERNQShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5QRE1BQ1RMICY9IH4oRVBXTV9QRE1BQ1RMX0NIRU4wXzFfTXNrIDw8ICgodTMyQ2hhbm5lbE51bSA+PiAxKSA8PCAzKSk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBEZWFkIHpvbmUgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkR1cmF0aW9uIERlYWQgem9uZSBsZW5ndGggaW4gRVBXTSBjbG9jayBjb3VudCwgdmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+MHhGRkYsIGJ1dCAwIG1lYW5zIHRoZXJlIGlzIG5vIERlYWQgem9uZS4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBEZWFkIHpvbmUgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqICAgICAgICAgIFRoZSB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyBFdmVyeSB0d28gY2hhbm5lbHMgc2hhcmUgdGhlIHNhbWUgc2V0dGluZy4KKyAqLwordm9pZCBFUFdNX0VuYWJsZURlYWRab25lKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyRHVyYXRpb24pCit7CisgICAgLyogZXZlcnkgdHdvIGNoYW5uZWxzIHNoYXJlIHRoZSBzYW1lIHNldHRpbmcgKi8KKyAgICAoZXB3bSktPkRUQ1RMWyh1MzJDaGFubmVsTnVtKSA+PiAxXSAmPSB+RVBXTV9EVENUTDBfMV9EVENOVF9Nc2s7CisgICAgKGVwd20pLT5EVENUTFsodTMyQ2hhbm5lbE51bSkgPj4gMV0gfD0gRVBXTV9EVENUTDBfMV9EVEVOX01zayB8IHUzMkR1cmF0aW9uOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIERlYWQgem9uZSBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgRGVhZCB6b25lIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKiAgICAgICAgICBUaGUgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlRGVhZFpvbmUoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIC8qIGV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZXMgdGhlIHNhbWUgc2V0dGluZyAqLworICAgIChlcHdtKS0+RFRDVExbKHUzMkNoYW5uZWxOdW0pID4+IDFdICY9IH5FUFdNX0RUQ1RMMF8xX0RURU5fTXNrOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJFZGdlIFJpc2luZyBvciBmYWxsaW5nIGVkZ2UgdG8gbGF0Y2ggY291bnRlci4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9DQVBUVVJFX0lOVF9SSVNJTkdfTEFUQ0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9DQVBUVVJFX0lOVF9GQUxMSU5HX0xBVENICisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0VuYWJsZUNhcHR1cmVJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJFZGdlKQoreworICAgIChlcHdtKS0+Q0FQSUVOIHw9ICh1MzJFZGdlIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIGNhcHR1cmUgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyRWRnZSBSaXNpbmcgb3IgZmFsbGluZyBlZGdlIHRvIGxhdGNoIGNvdW50ZXIuCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0FQVFVSRV9JTlRfUklTSU5HX0xBVENICisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0FQVFVSRV9JTlRfRkFMTElOR19MQVRDSAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRGlzYWJsZUNhcHR1cmVJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJFZGdlKQoreworICAgIChlcHdtKS0+Q0FQSUVOICY9IH4odTMyRWRnZSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJFZGdlIFJpc2luZyBvciBmYWxsaW5nIGVkZ2UgdG8gbGF0Y2ggY291bnRlci4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9DQVBUVVJFX0lOVF9SSVNJTkdfTEFUQ0gKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9DQVBUVVJFX0lOVF9GQUxMSU5HX0xBVENICisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBjYXB0dXJlIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fQ2xlYXJDYXB0dXJlSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkVkZ2UpCit7CisgICAgKGVwd20pLT5DQVBJRiA9ICh1MzJFZGdlIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBHZXQgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHZhbCAwIE5vIGNhcHR1cmUgaW50ZXJydXB0CisgKiBAcmV0dmFsIDEgUmlzaW5nIGVkZ2UgbGF0Y2ggaW50ZXJydXB0CisgKiBAcmV0dmFsIDIgRmFsbGluZyBlZGdlIGxhdGNoIGludGVycnVwdAorICogQHJldHZhbCAzIFJpc2luZyBhbmQgZmFsbGluZyBsYXRjaCBpbnRlcnJ1cHQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgY2FwdHVyZSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordWludDMyX3QgRVBXTV9HZXRDYXB0dXJlSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgdWludDMyX3QgdTMyQ2FwSWYgPSAwVUw7CisKKyAgICB1MzJDYXBJZiA9ICgoKChlcHdtKS0+Q0FQSUYgJiAoRVBXTV9DQVBJRl9DRkxJRjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSA/IDFVTCA6IDBVTCkgPDwgMSk7CisgICAgdTMyQ2FwSWYgfD0gKCgoZXB3bSktPkNBUElGICYgKEVQV01fQ0FQSUZfQ1JMSUYwX01zayA8PCB1MzJDaGFubmVsTnVtKSkgPyAxVUwgOiAwVUwpOworICAgIHJldHVybiB1MzJDYXBJZjsKK30KKy8qKgorICogQGJyaWVmIEVuYWJsZSBkdXR5IGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMySW50RHV0eVR5cGUgRHV0eSBpbnRlcnJ1cHQgdHlwZSwgY291bGQgYmUgZWl0aGVyCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRFVUWV9JTlRfRE9XTl9DT1VOVF9NQVRDSF9DTVAKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9EVVRZX0lOVF9VUF9DT1VOVF9NQVRDSF9DTVAKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBkdXR5IGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRW5hYmxlRHV0eUludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHUzMkludER1dHlUeXBlKQoreworICAgIChlcHdtKS0+SU5URU4wIHw9ICh1MzJJbnREdXR5VHlwZSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBkdXR5IGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgZHV0eSBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVEdXR5SW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPklOVEVOMCAmPSB+KChFUFdNX0RVVFlfSU5UX0RPV05fQ09VTlRfTUFUQ0hfQ01QIHwgRVBXTV9EVVRZX0lOVF9VUF9DT1VOVF9NQVRDSF9DTVApIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciBkdXR5IGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgZHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fQ2xlYXJEdXR5SW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5JTlRTVFMwID0gKEVQV01fSU5UU1RTMF9DTVBVSUYwX01zayB8IEVQV01fSU5UU1RTMF9DTVBESUYwX01zaykgPDwgdTMyQ2hhbm5lbE51bTsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IGR1dHkgaW50ZXJydXB0IGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIER1dHkgaW50ZXJydXB0IGZsYWcgb2Ygc3BlY2lmaWVkIGNoYW5uZWwKKyAqIEByZXR2YWwgMCBEdXR5IGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgKiBAcmV0dmFsIDEgRHV0eSBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgZHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit1aW50MzJfdCBFUFdNX0dldER1dHlJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICByZXR1cm4gKCgoKGVwd20pLT5JTlRTVFMwICYgKChFUFdNX0lOVFNUUzBfQ01QRElGMF9Nc2sgfCBFUFdNX0lOVFNUUzBfQ01QVUlGMF9Nc2spIDw8IHUzMkNoYW5uZWxOdW0pKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGVuYWJsZSBmYXVsdCBicmFrZSBpbnRlcnJ1cHQKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkJyYWtlU291cmNlIEZhdWx0IGJyYWtlIHNvdXJjZS4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUwKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBmYXVsdCBicmFrZSBpbnRlcnJ1cHQuCisgKiAgICAgICAgICBUaGUgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgRXZlcnkgdHdvIGNoYW5uZWxzIHNoYXJlIHRoZSBzYW1lIHNldHRpbmcuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVGYXVsdEJyYWtlSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VTb3VyY2UpCit7CisgICAgKGVwd20pLT5JTlRFTjEgfD0gKDB4N1VMIDw8IHUzMkJyYWtlU291cmNlKTsKK30KKworLyoqCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIGZhdWx0IGJyYWtlIGludGVycnVwdAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQnJha2VTb3VyY2UgRmF1bHQgYnJha2Ugc291cmNlLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0ZCX0VER0UKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9MRVZFTAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBmYXVsdCBicmFrZSBpbnRlcnJ1cHQuCisgKiAgICAgICAgICBUaGUgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgRXZlcnkgdHdvIGNoYW5uZWxzIHNoYXJlIHRoZSBzYW1lIHNldHRpbmcuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlRmF1bHRCcmFrZUludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKQoreworICAgIChlcHdtKS0+SU5URU4xICY9IH4oMHg3VUwgPDwgdTMyQnJha2VTb3VyY2UpOworfQorCisvKioKKyAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGNsZWFyIGZhdWx0IGJyYWtlIGludGVycnVwdCBvZiBzZWxlY3RlZCBzb3VyY2UKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiBAcGFyYW1baW5dIHUzMkJyYWtlU291cmNlIEZhdWx0IGJyYWtlIHNvdXJjZS4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUwKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIGZhdWx0IGJyYWtlIGludGVycnVwdCBvZiBzZWxlY3RlZCBzb3VyY2UuCisgKiAgICAgICAgICBUaGUgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgRVBXTV9DbGVhckZhdWx0QnJha2VJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VTb3VyY2UpCit7CisgICAgKGVwd20pLT5JTlRTVFMxID0gKDB4M2ZVTCA8PCB1MzJCcmFrZVNvdXJjZSk7Cit9CisKKy8qKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gZ2V0IGZhdWx0IGJyYWtlIGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIHNvdXJjZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gdTMyQnJha2VTb3VyY2UgRmF1bHQgYnJha2Ugc291cmNlLCBjb3VsZCBiZSBlaXRoZXIKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9GQl9FREdFCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fRkJfTEVWRUwKKyAqIEByZXR1cm4gRmF1bHQgYnJha2UgaW50ZXJydXB0IGZsYWcgb2Ygc3BlY2lmaWVkIHNvdXJjZQorICogQHJldHZhbCAwIEZhdWx0IGJyYWtlIGludGVycnVwdCBkaWQgbm90IG9jY3VycmVkCisgKiBAcmV0dmFsIDEgRmF1bHQgYnJha2UgaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGZhdWx0IGJyYWtlIGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIHNvdXJjZS4KKyAqLwordWludDMyX3QgRVBXTV9HZXRGYXVsdEJyYWtlSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKQoreworICAgIHJldHVybiAoKChlcHdtKS0+SU5UU1RTMSAmICgweDNmVUwgPDwgdTMyQnJha2VTb3VyY2UpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJJbnRQZXJpb2RUeXBlIFBlcmlvZCBpbnRlcnJ1cHQgdHlwZS4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRW5hYmxlUGVyaW9kSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgIHVpbnQzMl90IHUzMkludFBlcmlvZFR5cGUpCit7CisgICAgKHZvaWQpdTMySW50UGVyaW9kVHlwZTsKKyAgICAoZXB3bSktPklOVEVOMCB8PSAoRVBXTV9JTlRFTjBfUElFTjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIHBlcmlvZCBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHBlcmlvZCBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVQZXJpb2RJbnQoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIChlcHdtKS0+SU5URU4wICY9IH4oRVBXTV9JTlRFTjBfUElFTjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fQ2xlYXJQZXJpb2RJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPklOVFNUUzAgPSAoRVBXTV9JTlRTVFMwX1BJRjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBHZXQgcGVyaW9kIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gUGVyaW9kIGludGVycnVwdCBmbGFnIG9mIHNwZWNpZmllZCBjaGFubmVsCisgKiBAcmV0dmFsIDAgUGVyaW9kIGludGVycnVwdCBkaWQgbm90IG9jY3VyCisgKiBAcmV0dmFsIDEgUGVyaW9kIGludGVycnVwdCBvY2N1cnJlZAorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBwZXJpb2QgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3VpbnQzMl90IEVQV01fR2V0UGVyaW9kSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgcmV0dXJuICgoKChlcHdtKS0+SU5UU1RTMCAmIChFUFdNX0lOVFNUUzBfUElGMF9Nc2sgPDwgdTMyQ2hhbm5lbE51bSkpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRW5hYmxlWmVyb0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5JTlRFTjAgfD0gKEVQV01fSU5URU4wX1pJRU4wX01zayA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVaZXJvSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPklOVEVOMCAmPSB+KEVQV01fSU5URU4wX1pJRU4wX01zayA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgemVybyBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciB6ZXJvIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fQ2xlYXJaZXJvSW50RmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5JTlRTVFMwID0gKEVQV01fSU5UU1RTMF9aSUYwX01zayA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBaZXJvIGludGVycnVwdCBmbGFnIG9mIHNwZWNpZmllZCBjaGFubmVsCisgKiBAcmV0dmFsIDAgWmVybyBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cgorICogQHJldHZhbCAxIFplcm8gaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHplcm8gaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3VpbnQzMl90IEVQV01fR2V0WmVyb0ludEZsYWcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIHJldHVybiAoKCgoZXB3bSktPklOVFNUUzAgJiAoRVBXTV9JTlRTVFMwX1pJRjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgaW50ZXJydXB0IGZsYWcgYWNjdW11bGF0b3Igb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcGFyYW1baW5dIHUzMkludEZsYWdDbnQgSW50ZXJydXB0IGZsYWcgY291bnRlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NjU1MzUuCisgKiBAcGFyYW1baW5dIHUzMkludEFjY1NyYyBJbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBzb3VyY2Ugc2VsZWN0aW9uLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0lGQV9aRVJPX1BPSU5UCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fSUZBX1BFUklPRF9QT0lOVAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0lGQV9DT01QQVJFX1VQX0NPVU5UX1BPSU5UCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fSUZBX0NPTVBBUkVfRE9XTl9DT1VOVF9QT0lOVAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGludGVycnVwdCBmbGFnIGFjY3VtdWxhdG9yIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9FbmFibGVBY2MoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJJbnRGbGFnQ250LCB1aW50MzJfdCB1MzJJbnRBY2NTcmMpCit7CisgICAgKGVwd20pLT5JRkFbdTMyQ2hhbm5lbE51bV0gPSAoKChlcHdtKS0+SUZBW3UzMkNoYW5uZWxOdW1dICYgfigoRVBXTV9JRkEwX0lGQUNOVF9Nc2sgfCBFUFdNX0lGQTBfSUZBU0VMX01zaykpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRVBXTV9JRkEwX0lGQUVOX01zayB8ICh1MzJJbnRBY2NTcmMgPDwgRVBXTV9JRkEwX0lGQVNFTF9Qb3MpIHwgdTMySW50RmxhZ0NudCkpOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIGludGVycnVwdCBmbGFnIGFjY3VtdWxhdG9yIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRGlzYWJsZUFjYyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5JRkFbdTMyQ2hhbm5lbE51bV0gPSAoKGVwd20pLT5JRkFbdTMyQ2hhbm5lbE51bV0gJiB+KEVQV01fSUZBMF9JRkFFTl9Nc2spKTsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIGludGVycnVwdCBmbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0VuYWJsZUFjY0ludChFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5BSU5URU4gfD0gKDFVTCA8PCAodTMyQ2hhbm5lbE51bSkpOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIGludGVycnVwdCBmbGFnIGFjY3VtdWxhdG9yIGludGVycnVwdCBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgaW50ZXJydXB0IGZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlQWNjSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPkFJTlRFTiAmPSB+KDFVTCA8PCAodTMyQ2hhbm5lbE51bSkpOworfQorCisvKioKKyAqIEBicmllZiBDbGVhciBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordm9pZCBFUFdNX0NsZWFyQWNjSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPkFJTlRTVFMgPSAoMVVMIDw8ICh1MzJDaGFubmVsTnVtKSk7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCBpbnRlcnJ1cHQgZmxhZyBhY2N1bXVsYXRvciBpbnRlcnJ1cHQgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dmFsIDAgQWNjdW11bGF0b3IgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAqIEByZXR2YWwgMSBBY2N1bXVsYXRvciBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBHZXQgaW50ZXJydXB0IGZsYWcgYWNjdW11bGF0b3IgaW50ZXJydXB0IG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3VpbnQzMl90IEVQV01fR2V0QWNjSW50KEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICByZXR1cm4gKCgoZXB3bSktPkFJTlRTVFMgJiAoMVVMIDw8ICh1MzJDaGFubmVsTnVtKSkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIGFjY3VtdWxhdG9yIFBETUEgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgYWNjdW11bGF0b3IgaW50ZXJydXB0IHRyaWdnZXIgUERNQSBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRW5hYmxlQWNjUERNQShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgKGVwd20pLT5BUERNQUNUTCB8PSAoMVVMIDw8ICh1MzJDaGFubmVsTnVtKSk7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgYWNjdW11bGF0b3IgUERNQSBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgYWNjdW11bGF0b3IgaW50ZXJydXB0IHRyaWdnZXIgUERNQSBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRGlzYWJsZUFjY1BETUEoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtKQoreworICAgIChlcHdtKS0+QVBETUFDVEwgJj0gfigxVUwgPDwgKHUzMkNoYW5uZWxOdW0pKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgZnJlZSB0cmlnZ2VyIGR1dHkgaW50ZXJydXB0IGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBmcmVlIHRyaWdnZXIgZHV0eSBpbnRlcnJ1cHQgZmxhZyBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fQ2xlYXJGVER1dHlJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPkZUQ0kgPSAoKEVQV01fRlRDSV9GVENNVTBfTXNrIHwgRVBXTV9GVENJX0ZUQ01EMF9Nc2spIDw8ICh1MzJDaGFubmVsTnVtID4+IDEpKTsKK30KKworLyoqCisgKiBAYnJpZWYgR2V0IGZyZWUgdHJpZ2dlciBkdXR5IGludGVycnVwdCBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBEdXR5IGludGVycnVwdCBmbGFnIG9mIHNwZWNpZmllZCBjaGFubmVsCisgKiBAcmV0dmFsIDAgRnJlZSB0cmlnZ2VyIGR1dHkgaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAqIEByZXR2YWwgMSBGcmVlIHRyaWdnZXIgZHV0eSBpbnRlcnJ1cHQgb2NjdXJyZWQKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgZnJlZSB0cmlnZ2VyIGR1dHkgaW50ZXJydXB0IGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordWludDMyX3QgRVBXTV9HZXRGVER1dHlJbnRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICByZXR1cm4gKCgoZXB3bSktPkZUQ0kgJiAoKEVQV01fRlRDSV9GVENNVTBfTXNrIHwgRVBXTV9GVENJX0ZUQ01EMF9Nc2spIDw8ICh1MzJDaGFubmVsTnVtID4+IDEpKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgbG9hZCBtb2RlIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJMb2FkTW9kZSBFUFdNIGNvdW50ZXIgbG9hZGluZyBtb2RlLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xPQURfTU9ERV9JTU1FRElBVEUKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9MT0FEX01PREVfV0lORE9XCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTE9BRF9NT0RFX0NFTlRFUgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGxvYWQgbW9kZSBvZiBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIEVQV01fRW5hYmxlTG9hZE1vZGUoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJMb2FkTW9kZSkKK3sKKyAgICAoZXB3bSktPkNUTDAgfD0gKHUzMkxvYWRNb2RlIDw8IHUzMkNoYW5uZWxOdW0pOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIGxvYWQgbW9kZSBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyTG9hZE1vZGUgRVBXTSBjb3VudGVyIGxvYWRpbmcgbW9kZS4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9MT0FEX01PREVfSU1NRURJQVRFCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTE9BRF9NT0RFX1dJTkRPVworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xPQURfTU9ERV9DRU5URVIKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgbG9hZCBtb2RlIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlTG9hZE1vZGUoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJMb2FkTW9kZSkKK3sKKyAgICAoZXB3bSktPkNUTDAgJj0gfih1MzJMb2FkTW9kZSA8PCB1MzJDaGFubmVsTnVtKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ29uZmlndXJlIHN5bmNocm9uaXphdGlvbiBwaGFzZSBvZiBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDaGFubmVsTnVtIEVQV00gY2hhbm5lbCBudW1iZXIuIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAwfjUKKyAqIEBwYXJhbVtpbl0gdTMyU3luY1NyYyBFUFdNIHN5bmNocm9uaXplIHNvdXJjZSBzZWxlY3Rpb24uCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fU1lOQ19PVVRfRlJPTV9TWU5DSU5fU1dTWU5DCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fU1lOQ19PVVRfRlJPTV9DT1VOVF9UT19aRVJPCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fU1lOQ19PVVRfRlJPTV9DT1VOVF9UT19DT01QQVJBVE9SCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fU1lOQ19PVVRfRElTQUJMRQorICogQHBhcmFtW2luXSB1MzJEaXJlY3Rpb24gUGhhc2UgZGlyZWN0aW9uLiBDb250cm9sIEVQV00gY291bnRlciBjb3VudCBkZWNyZW1lbnQgb3IgaW5jcmVtZW50ICBhZnRlciBzeW5jaHJvbml6aW5nLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX1BIU19ESVJfREVDUkVNRU5UCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fUEhTX0RJUl9JTkNSRU1FTlQKKyAqIEBwYXJhbVtpbl0gdTMyU3RhcnRQaGFzZSBTeW5jaHJvbm91cyBzdGFydCBwaGFzZSB2YWx1ZS4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NjU1MzUuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgc3luY2hyb25pemF0aW9uIHBoYXNlIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgRXZlcnkgdHdvIGNoYW5uZWxzIHNoYXJlIHRoZSBzYW1lIHNldHRpbmcuCisgKi8KK3ZvaWQgRVBXTV9Db25maWdTeW5jUGhhc2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJTeW5jU3JjLCB1aW50MzJfdCB1MzJEaXJlY3Rpb24sIHVpbnQzMl90IHUzMlN0YXJ0UGhhc2UpCit7CisgICAgLyogZXZlcnkgdHdvIGNoYW5uZWxzIHNoYXJlcyB0aGUgc2FtZSBzZXR0aW5nICovCisgICAgdTMyQ2hhbm5lbE51bSA+Pj0gMTsKKyAgICAoZXB3bSktPlNZTkMgPSAoKChlcHdtKS0+U1lOQyAmIH4oKEVQV01fU1lOQ19TSU5TUkMwX01zayA8PCAodTMyQ2hhbm5lbE51bSA8PCAxKSkgfCAoRVBXTV9TWU5DX1BIU0RJUjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICh1MzJEaXJlY3Rpb24gPDwgRVBXTV9TWU5DX1BIU0RJUjBfUG9zIDw8IHUzMkNoYW5uZWxOdW0pIHwgKHUzMlN5bmNTcmMgPDwgRVBXTV9TWU5DX1NJTlNSQzBfUG9zKSA8PCAodTMyQ2hhbm5lbE51bSA8PCAxKSk7CisgICAgKGVwd20pLT5QSFNbKHUzMkNoYW5uZWxOdW0pXSA9IHUzMlN0YXJ0UGhhc2U7Cit9CisKKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIFNZTkMgcGhhc2Ugb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE1hc2sgQ29tYmluYXRpb24gb2YgZW5hYmxlZCBjaGFubmVscy4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCBpcyBjaGFubmVsIDAsIGJpdCAxIGlzIGNoYW5uZWwgMS4uLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIFNZTkMgcGhhc2Ugb2Ygc2VsZWN0ZWQgY2hhbm5lbChzKS4KKyBFdmVyeSB0d28gY2hhbm5lbHMgc2hhcmUgdGhlIHNhbWUgc2V0dGluZy4KKyAqLwordm9pZCBFUFdNX0VuYWJsZVN5bmNQaGFzZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgIHVpbnQzMl90IGk7CisgICAgZm9yKGkgPSAwVUw7IGkgPCBFUFdNX0NIQU5ORUxfTlVNOyBpICsrKQorICAgIHsKKyAgICAgICAgaWYodTMyQ2hhbm5lbE1hc2sgJiAoMVVMIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICAoZXB3bSktPlNZTkMgfD0gKEVQV01fU1lOQ19QSFNFTjBfTXNrIDw8IChpID4+IDEpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgRGlzYWJsZSBTWU5DIHBoYXNlIG9mIHNlbGVjdGVkIGNoYW5uZWwocykKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxNYXNrIENvbWJpbmF0aW9uIG9mIGVuYWJsZWQgY2hhbm5lbHMuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgY2hhbm5lbCAwLCBiaXQgMSBpcyBjaGFubmVsIDEuLi4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgU1lOQyBwaGFzZSBvZiBzZWxlY3RlZCBjaGFubmVsKHMpLgorIEV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZSB0aGUgc2FtZSBzZXR0aW5nLgorICovCit2b2lkIEVQV01fRGlzYWJsZVN5bmNQaGFzZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxNYXNrKQoreworICAgIHVpbnQzMl90IGk7CisgICAgZm9yKGkgPSAwVUw7IGkgPCBFUFdNX0NIQU5ORUxfTlVNOyBpICsrKQorICAgIHsKKyAgICAgICAgaWYodTMyQ2hhbm5lbE1hc2sgJiAoMVVMIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICAoZXB3bSktPlNZTkMgJj0gfihFUFdNX1NZTkNfUEhTRU4wX01zayA8PCAoaSA+PiAxKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBFUFdNIFNZTkNfSU4gbm9pc2UgZmlsdGVyIGZ1bmN0aW9uCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJDbGtDbnQgU1lOQyBFZGdlIERldGVjdG9yIEZpbHRlciBDb3VudC4gVGhpcyBjb250cm9scyB0aGUgY291bnRlciBudW1iZXIgb2YgZWRnZSBkZXRlY3Rvci4KKyAqICAgICAgICAgICAgVGhlIHZhbGlkIHZhbHVlIGlzIDB+Ny4KKyAqIEBwYXJhbVtpbl0gdTMyQ2xrRGl2U2VsIFNZTkMgRWRnZSBEZXRlY3RvciBGaWx0ZXIgQ2xvY2sgU2VsZWN0aW9uLgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX05GX0NMS19ESVZfMQorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX05GX0NMS19ESVZfMgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX05GX0NMS19ESVZfNAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX05GX0NMS19ESVZfOAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX05GX0NMS19ESVZfMTYKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzMyCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTkZfQ0xLX0RJVl82NAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX05GX0NMS19ESVZfMTI4CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgRVBXTSBTWU5DX0lOIG5vaXNlIGZpbHRlciBmdW5jdGlvbi4KKyAqLwordm9pZCBFUFdNX0VuYWJsZVN5bmNOb2lzZUZpbHRlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNsa0NudCwgdWludDMyX3QgdTMyQ2xrRGl2U2VsKQoreworICAgIChlcHdtKS0+U1lOQyA9ICgoZXB3bSktPlNZTkMgJiB+KEVQV01fU1lOQ19TRkxUQ05UX01zayB8IEVQV01fU1lOQ19TRkxUQ1NFTF9Nc2spKSB8IFwKKyAgICAgICAgICAgICAgICAgICAoKHUzMkNsa0NudCA8PCBFUFdNX1NZTkNfU0ZMVENOVF9Qb3MpIHwgKHUzMkNsa0RpdlNlbCA8PCBFUFdNX1NZTkNfU0ZMVENTRUxfUG9zKSB8IEVQV01fU1lOQ19TTkZMVEVOX01zayk7Cit9CisKKy8qKgorICogQGJyaWVmIERpc2FibGUgRVBXTSBTWU5DX0lOIG5vaXNlIGZpbHRlciBmdW5jdGlvbgorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIERpc2FibGUgRVBXTSBTWU5DX0lOIG5vaXNlIGZpbHRlciBmdW5jdGlvbi4KKyAqLwordm9pZCBFUFdNX0Rpc2FibGVTeW5jTm9pc2VGaWx0ZXIoRVBXTV9UICplcHdtKQoreworICAgIChlcHdtKS0+U1lOQyAmPSB+RVBXTV9TWU5DX1NORkxURU5fTXNrOworfQorCisvKioKKyAqIEBicmllZiBFbmFibGUgRVBXTSBTWU5DIGlucHV0IHBpbiBpbnZlcnNlIGZ1bmN0aW9uCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIEVQV00gU1lOQyBpbnB1dCBwaW4gaW52ZXJzZSBmdW5jdGlvbi4KKyAqLwordm9pZCBFUFdNX0VuYWJsZVN5bmNQaW5JbnZlcnNlKEVQV01fVCAqZXB3bSkKK3sKKyAgICAoZXB3bSktPlNZTkMgfD0gRVBXTV9TWU5DX1NJTlBJTlZfTXNrOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIEVQV00gU1lOQyBpbnB1dCBwaW4gaW52ZXJzZSBmdW5jdGlvbgorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIERpc2FibGUgRVBXTSBTWU5DIGlucHV0IHBpbiBpbnZlcnNlIGZ1bmN0aW9uLgorICovCit2b2lkIEVQV01fRGlzYWJsZVN5bmNQaW5JbnZlcnNlKEVQV01fVCAqZXB3bSkKK3sKKyAgICAoZXB3bSktPlNZTkMgJj0gKH5FUFdNX1NZTkNfU0lOUElOVl9Nc2spOworfQorCisvKioKKyAqIEBicmllZiBTZXQgRVBXTSBjbG9jayBzb3VyY2UKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHBhcmFtW2luXSB1MzJDbGtTcmNTZWwgRVBXTSBleHRlcm5hbCBjbG9jayBzb3VyY2UuCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0xLU1JDX0VQV01fQ0xLCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0xLU1JDX1RJTUVSMAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0NMS1NSQ19USU1FUjEKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9DTEtTUkNfVElNRVIyCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fQ0xLU1JDX1RJTUVSMworICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IEVQV00gY2xvY2sgc291cmNlLgorIEV2ZXJ5IHR3byBjaGFubmVscyBzaGFyZSB0aGUgc2FtZSBzZXR0aW5nLgorIElmIHRoZSBjbG9jayBzb3VyY2Ugb2YgRVBXTSBjb3VudGVyIGlzIHNlbGVjdGVkIGZyb20gVElNRVJuIGludGVycnVwdCBldmVudHMsIHRoZSBUUkdFUFdNKFRJTUVSbl9UUkdDVExbMV0sIG49MCwxLi4zKSBiaXQgbXVzdCBiZSBzZXQgYXMgMS4KKyAqLwordm9pZCBFUFdNX1NldENsb2NrU291cmNlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSwgdWludDMyX3QgdTMyQ2xrU3JjU2VsKQoreworICAgIChlcHdtKS0+Q0xLU1JDID0gKChlcHdtKS0+Q0xLU1JDICYgfihFUFdNX0NMS1NSQ19FQ0xLU1JDMF9Nc2sgPDwgKCh1MzJDaGFubmVsTnVtID4+IDEpIDw8IDMpKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAodTMyQ2xrU3JjU2VsIDw8ICgodTMyQ2hhbm5lbE51bSA+PiAxKSA8PCAzKSk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBFUFdNIGJyYWtlIG5vaXNlIGZpbHRlciBmdW5jdGlvbgorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQnJha2VQaW5OdW0gQnJha2UgcGluIHNlbGVjdGlvbi4gVmFsaWQgdmFsdWVzIGFyZSAwIG9yIDEuCisgKiBAcGFyYW1baW5dIHUzMkNsa0NudCBTWU5DIEVkZ2UgRGV0ZWN0b3IgRmlsdGVyIENvdW50LiBUaGlzIGNvbnRyb2xzIHRoZSBjb3VudGVyIG51bWJlciBvZiBlZGdlIGRldGVjdG9yCisgKiBAcGFyYW1baW5dIHUzMkNsa0RpdlNlbCBTWU5DIEVkZ2UgRGV0ZWN0b3IgRmlsdGVyIENsb2NrIFNlbGVjdGlvbi4KKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzEKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzIKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzQKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzgKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzE2CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTkZfQ0xLX0RJVl8zMgorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX05GX0NMS19ESVZfNjQKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9ORl9DTEtfRElWXzEyOAorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIEVQV00gYnJha2Ugbm9pc2UgZmlsdGVyIGZ1bmN0aW9uLgorICovCit2b2lkIEVQV01fRW5hYmxlQnJha2VOb2lzZUZpbHRlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlUGluTnVtLCB1aW50MzJfdCB1MzJDbGtDbnQsIHVpbnQzMl90IHUzMkNsa0RpdlNlbCkKK3sKKyAgICAoZXB3bSktPkJORiA9ICgoZXB3bSktPkJORiAmIH4oKEVQV01fQk5GX0JSSzBGQ05UX01zayB8IEVQV01fQk5GX0JSSzBORlNFTF9Nc2spIDw8ICh1MzJCcmFrZVBpbk51bSA8PCAzKSkpIHwgXAorICAgICAgICAgICAgICAgICAgKCgodTMyQ2xrQ250IDw8IEVQV01fQk5GX0JSSzBGQ05UX1BvcykgfCAodTMyQ2xrRGl2U2VsIDw8IEVQV01fQk5GX0JSSzBORlNFTF9Qb3MpIHwgRVBXTV9CTkZfQlJLME5GRU5fTXNrKSA8PCAodTMyQnJha2VQaW5OdW0gPDwgMykpOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIEVQV00gYnJha2Ugbm9pc2UgZmlsdGVyIGZ1bmN0aW9uCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJCcmFrZVBpbk51bSBCcmFrZSBwaW4gc2VsZWN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlIDAgb3IgMS4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgRVBXTSBicmFrZSBub2lzZSBmaWx0ZXIgZnVuY3Rpb24uCisgKi8KK3ZvaWQgRVBXTV9EaXNhYmxlQnJha2VOb2lzZUZpbHRlcihFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlUGluTnVtKQoreworICAgIChlcHdtKS0+Qk5GICY9IH4oRVBXTV9CTkZfQlJLME5GRU5fTXNrIDw8ICh1MzJCcmFrZVBpbk51bSA8PCAzKSk7Cit9CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBFUFdNIGJyYWtlIHBpbiBpbnZlcnNlIGZ1bmN0aW9uCisgKiBAcGFyYW1baW5dIGVwd20gVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBFUFdNIG1vZHVsZQorICogICAgICAgICAgICAgICAgLSBFUFdNMCA6IEVQV00gR3JvdXAgMAorICogICAgICAgICAgICAgICAgLSBFUFdNMSA6IEVQV00gR3JvdXAgMQorICogQHBhcmFtW2luXSB1MzJCcmFrZVBpbk51bSBCcmFrZSBwaW4gc2VsZWN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlIDAgb3IgMS4KKyAqIEByZXR1cm4gTm9uZQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBFUFdNIGJyYWtlIHBpbiBpbnZlcnNlIGZ1bmN0aW9uLgorICovCit2b2lkIEVQV01fRW5hYmxlQnJha2VQaW5JbnZlcnNlKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQnJha2VQaW5OdW0pCit7CisgICAgKGVwd20pLT5CTkYgfD0gKEVQV01fQk5GX0JSSzBQSU5WX01zayA8PCAodTMyQnJha2VQaW5OdW0gPDwgMykpOworfQorCisvKioKKyAqIEBicmllZiBEaXNhYmxlIEVQV00gYnJha2UgcGluIGludmVyc2UgZnVuY3Rpb24KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkJyYWtlUGluTnVtIEJyYWtlIHBpbiBzZWxlY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmUgMCBvciAxLgorICogQHJldHVybiBOb25lCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBFUFdNIGJyYWtlIHBpbiBpbnZlcnNlIGZ1bmN0aW9uLgorICovCit2b2lkIEVQV01fRGlzYWJsZUJyYWtlUGluSW52ZXJzZShFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkJyYWtlUGluTnVtKQoreworICAgIChlcHdtKS0+Qk5GICY9IH4oRVBXTV9CTkZfQlJLMFBJTlZfTXNrIDw8ICh1MzJCcmFrZVBpbk51bSAqICh1aW50MzJfdClFUFdNX0JORl9CUksxTkZFTl9Qb3MpKTsKK30KKworLyoqCisgKiBAYnJpZWYgU2V0IEVQV00gYnJha2UgcGluIHNvdXJjZQorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQnJha2VQaW5OdW0gQnJha2UgcGluIHNlbGVjdGlvbi4gVmFsaWQgdmFsdWVzIGFyZSAwIG9yIDEuCisgKiBAcGFyYW1baW5dIHUzMlNlbEFub3RoZXJNb2R1bGUgU2VsZWN0IHRvIGFub3RoZXIgbW9kdWxlLiBWYWxpZCB2YWx1ZXMgYXJlIFRSVUUgb3IgRkFMU0UuCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgRVBXTSBicmFrZSBwaW4gc291cmNlLgorICovCit2b2lkIEVQV01fU2V0QnJha2VQaW5Tb3VyY2UoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSwgdWludDMyX3QgdTMyU2VsQW5vdGhlck1vZHVsZSkKK3sKKyAgICAoZXB3bSktPkJORiA9ICgoZXB3bSktPkJORiAmIH4oRVBXTV9CTkZfQkswU1JDX01zayA8PCAodTMyQnJha2VQaW5OdW0gPDwgMykpKSB8ICh1MzJTZWxBbm90aGVyTW9kdWxlIDw8ICgodWludDMyX3QpRVBXTV9CTkZfQkswU1JDX1BvcyArICh1MzJCcmFrZVBpbk51bSA8PCAzKSkpOworfQorCisvKioKKyAqIEBicmllZiBTZXQgRVBXTSBsZWFkaW5nIGVkZ2UgYmxhbmtpbmcgZnVuY3Rpb24KKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMlRyaWdTcmNTZWwgTGVhZGluZyBlZGdlIGJsYW5raW5nIHNvdXJjZSBzZWxlY3Rpb24uCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTEVCQ1RMX1NSQ0VOMAorICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xFQkNUTF9TUkNFTjIKKyAqICAgICAgICAgICAgICAtIFxyZWYgRVBXTV9MRUJDVExfU1JDRU40CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTEVCQ1RMX1NSQ0VOMF8yCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTEVCQ1RMX1NSQ0VOMF80CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTEVCQ1RMX1NSQ0VOMl80CisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTEVCQ1RMX1NSQ0VOMF8yXzQKKyAqIEBwYXJhbVtpbl0gdTMyVHJpZ1R5cGUgIExlYWRpbmcgZWRnZSBibGFua2luZyB0cmlnZ2VyIHR5cGUuCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTEVCQ1RMX1RSR1RZUEVfUklTSU5HCisgKiAgICAgICAgICAgICAgLSBccmVmIEVQV01fTEVCQ1RMX1RSR1RZUEVfRkFMTElORworICogICAgICAgICAgICAgIC0gXHJlZiBFUFdNX0xFQkNUTF9UUkdUWVBFX1JJU0lOR19PUl9GQUxMSU5HCisgKiBAcGFyYW1baW5dIHUzMkJsYW5raW5nQ250ICBMZWFkaW5nIEVkZ2UgQmxhbmtpbmcgQ291bnRlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDF+NTEyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb3VudGVyIHZhbHVlIGRlY2lkZXMgbGVhZGluZyBlZGdlIGJsYW5raW5nIHdpbmRvdyBzaXplLCBhbmQgdGhpcyBjb3VudGVyIGNsb2NrIGJhc2UgaXMgRUNMSy4KKyAqIEBwYXJhbVtpbl0gdTMyQmxhbmtpbmdFbmFibGUgRW5hYmxlIEVQV00gbGVhZGluZyBlZGdlIGJsYW5raW5nIGZ1bmN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlIFRSVUUgKEVOQUJMRSkgb3IgRkFMU0UgKERJU0FCTEUpLgorICogICAgICAgICAgICAgIC0gXHJlZiBGQUxTRQorICogICAgICAgICAgICAgIC0gXHJlZiBUUlVFCisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb25maWd1cmUgRVBXTSBsZWFkaW5nIGVkZ2UgYmxhbmtpbmcgZnVuY3Rpb24gdGhhdCBibGFuayB0aGUgZmFsc2UgdHJpZ2dlciBmcm9tIEFDTVAgYnJha2Ugc291cmNlIHdoaWNoIG1heSBjYXVzZSBieSBFUFdNIG91dHB1dCB0cmFuc2l0aW9uLgorIEVQV00gbGVhZGluZyBlZGdlIGJsYW5raW5nIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBmb3IgYnJha2Ugc291cmNlIGZyb20gQUNNUC4KKyAqLwordm9pZCBFUFdNX1NldExlYWRpbmdFZGdlQmxhbmtpbmcoRVBXTV9UICplcHdtLCB1aW50MzJfdCB1MzJUcmlnU3JjU2VsLCB1aW50MzJfdCB1MzJUcmlnVHlwZSwgdWludDMyX3QgdTMyQmxhbmtpbmdDbnQsIHVpbnQzMl90IHUzMkJsYW5raW5nRW5hYmxlKQoreworICAgIChlcHdtKS0+TEVCQ1RMID0gKHUzMlRyaWdUeXBlKSB8ICh1MzJUcmlnU3JjU2VsKSB8ICh1MzJCbGFua2luZ0VuYWJsZSk7CisgICAgLyogQmxhbmtpbmcgd2luZG93IHNpemUgPSBMRUJDTlQgKyAxLCBzbyBMRUJDTlQgPSB1MzJCbGFua2luZ0NudCAtIDEgKi8KKyAgICAoZXB3bSktPkxFQkNOVCA9ICh1MzJCbGFua2luZ0NudCkgLSAxVUw7Cit9CisKKy8qKgorICogQGJyaWVmIEdldCB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gZXB3bSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEVQV00gbW9kdWxlCisgKiAgICAgICAgICAgICAgICAtIEVQV00wIDogRVBXTSBHcm91cCAwCisgKiAgICAgICAgICAgICAgICAtIEVQV00xIDogRVBXTSBHcm91cCAxCisgKiBAcGFyYW1baW5dIHUzMkNoYW5uZWxOdW0gRVBXTSBjaGFubmVsIG51bWJlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+NQorICogQHJldHVybiBDb3VudCB0byBtYXggaW50ZXJydXB0IGZsYWcgb2Ygc3BlY2lmaWVkIGNoYW5uZWwKKyAqIEByZXR2YWwgMCBDb3VudCB0byBtYXggaW50ZXJydXB0IGRpZCBub3Qgb2NjdXIKKyAqIEByZXR2YWwgMSBDb3VudCB0byBtYXggaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAqLwordWludDMyX3QgRVBXTV9HZXRXcmFwQXJvdW5kRmxhZyhFUFdNX1QgKmVwd20sIHVpbnQzMl90IHUzMkNoYW5uZWxOdW0pCit7CisgICAgcmV0dXJuICgoKGVwd20pLT5TVEFUVVMgJiAoRVBXTV9TVEFUVVNfQ05UTUFYRjBfTXNrIDw8IHUzMkNoYW5uZWxOdW0pKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICogQGJyaWVmIENsZWFyIHRoZSB0aW1lLWJhc2UgY291bnRlciByZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIGZsYWcgb2Ygc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSBlcHdtIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgRVBXTSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTAgOiBFUFdNIEdyb3VwIDAKKyAqICAgICAgICAgICAgICAgIC0gRVBXTTEgOiBFUFdNIEdyb3VwIDEKKyAqIEBwYXJhbVtpbl0gdTMyQ2hhbm5lbE51bSBFUFdNIGNoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMH41CisgKiBAcmV0dXJuIE5vbmUKKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciB0aGUgdGltZS1iYXNlIGNvdW50ZXIgcmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSBmbGFnIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgKi8KK3ZvaWQgRVBXTV9DbGVhcldyYXBBcm91bmRGbGFnKEVQV01fVCAqZXB3bSwgdWludDMyX3QgdTMyQ2hhbm5lbE51bSkKK3sKKyAgICAoZXB3bSktPlNUQVRVUyA9IChFUFdNX1NUQVRVU19DTlRNQVhGMF9Nc2sgPDwgdTMyQ2hhbm5lbE51bSk7Cit9CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBFUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEVQV01fRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2ZtYy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZm1jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4YmQzMAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL2ZtYy5jCkBAIC0wLDAgKzEsMTA1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGZtYy5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqICRSZXZpc2lvbjogMSAkCisgKiAkRGF0ZTogMTYvMDcvMDcgNzo1MHAgJAorICogQGJyaWVmICAgIE0yMzUxIFNlcmllcyBGbGFzaCBNZW1vcnkgQ29udHJvbGxlcihGTUMpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRk1DX0RyaXZlciBGTUMgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgRk1DX0VYUE9SVEVEX0ZVTkNUSU9OUyBGTUMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgUnVuIGZsYXNoIGFsbCBvbmUgdmVyaWZpY2F0aW9uIGFuZCBnZXQgcmVzdWx0LgorICAqCisgICogQHBhcmFtW2luXSB1MzJhZGRyICAgU3RhcnRpbmcgZmxhc2ggYWRkcmVzcy4gSXQgbXVzdCBiZSBhIHBhZ2UgYWxpZ25lZCBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gdTMyY291bnQgIEJ5dGUgY291bnQgb2YgZmxhc2ggdG8gYmUgY2FsY3VsYXRlZC4gSXQgbXVzdCBiZSBtdWx0aXBsZSBvZiA1MTIgYnl0ZXMuCisgICoKKyAgKiBAcmV0dmFsICAgUkVBRF9BTExPTkVfWUVTICAgICAgIFRoZSBjb250ZW50cyBvZiB2ZXJpZmllZCBmbGFzaCBhcmVhIGFyZSAweEExMUZGRkZGLgorICAqIEByZXR2YWwgICBSRUFEX0FMTE9ORV9OT1QgICAgICAgU29tZSBjb250ZW50cyBvZiB2ZXJpZmllZCBmbGFzaCBhcmVhIGFyZSBub3QgMHhBMTEwMDAwMC4KKyAgKiBAcmV0dmFsICAgUkVBRF9BTExPTkVfQ01EX0ZBSUwgIFVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQuCisgICoKKyAgKiBAZGV0YWlscyAgUnVuIElTUCBjaGVjayBhbGwgb25lIGNvbW1hbmQgdG8gY2hlY2sgc3BlY2lmeSBhcmVhIGlzIGFsbCBvbmUgb3Igbm90LgorICAqLwordWludDMyX3QgIEZNQ19DaGVja0FsbE9uZSh1aW50MzJfdCB1MzJhZGRyLCB1aW50MzJfdCB1MzJjb3VudCkKK3sKKyAgICB1aW50MzJfdCAgcmV0ID0gUkVBRF9BTExPTkVfQ01EX0ZBSUw7CisKKyAgICBGTUMtPklTUFNUUyA9IDB4ODBVTDsgICAvKiBjbGVhciBjaGVjayBhbGwgb25lIGJpdCAqLworCisgICAgRk1DLT5JU1BDTUQgICA9IEZNQ19JU1BDTURfUlVOX0FMTDE7CisgICAgRk1DLT5JU1BBRERSICA9IHUzMmFkZHI7CisgICAgRk1DLT5JU1BEQVQgICA9IHUzMmNvdW50OworICAgIEZNQy0+SVNQVFJHICAgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKworICAgIHdoaWxlKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BCVVNZX01zaykgeyB9CisKKyAgICBkbworICAgIHsKKyAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1JFQURfQUxMMTsKKyAgICAgICAgRk1DLT5JU1BBRERSICAgID0gdTMyYWRkcjsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEJVU1lfTXNrKSB7IH0KKyAgICB9CisgICAgd2hpbGUoRk1DLT5JU1BEQVQgPT0gMFVMKTsKKworICAgIGlmKEZNQy0+SVNQREFUID09IFJFQURfQUxMT05FX1lFUykKKyAgICB7CisgICAgICAgIHJldCA9IEZNQy0+SVNQREFUOworICAgIH0KKworICAgIGlmKEZNQy0+SVNQREFUID09IFJFQURfQUxMT05FX05PVCkKKyAgICB7CisgICAgICAgIHJldCA9IEZNQy0+SVNQREFUOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICBEaXNhYmxlIElTUCBGdW5jdGlvbnMKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBJU1BFTiBiaXQgb2YgSVNQQ09OIHRvIGRpc2FibGUgSVNQIGZ1bmN0aW9uCisgICoKKyAgKi8KK3ZvaWQgRk1DX0Nsb3NlKHZvaWQpCit7CisgICAgRk1DLT5JU1BDVEwgJj0gfkZNQ19JU1BDVExfSVNQRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgIENvbmZpZyBYT00gUmVnaW9uCisgICogQHBhcmFtW2luXSB1MzJYb21OdW0gICAgVGhlIFhPTSBudW1iZXIoMH4zKQorICAqIEBwYXJhbVtpbl0gdTMyWG9tQmFzZSAgIFRoZSBYT00gcmVnaW9uIGJhc2UgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHU4WG9tUGFnZSAgIFRoZSBYT00gcGFnZSBudW1iZXIgb2YgcmVnaW9uIHNpemUuCisgICoKKyAgKiBAcmV0dmFsICAgMCAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgMSAgIFhPTSBpcyBoYXMgYWxyZWFkeSBhY3RpdmVkLgorICAqIEByZXR2YWwgICAtMSAgUHJvZ3JhbSBmYWlsZWQuCisgICogQHJldHZhbCAgIC0yICBJbnZhbGlkIFhPTSBudW1iZXIuCisgICoKKyAgKiBAZGV0YWlscyAgUHJvZ3JhbSBYT00gYmFzZSBhZGRyZXNzIGFuZCBYT00gc2l6ZShwYWdlKQorICAqLworaW50MzJfdCBGTUNfQ29uZmlnWE9NKHVpbnQzMl90IHUzMlhvbU51bSwgdWludDMyX3QgdTMyWG9tQmFzZSwgdWludDhfdCB1OFhvbVBhZ2UpCit7CisgICAgaW50MzJfdCAgcmV0ID0gMDsKKworICAgIGlmKHUzMlhvbU51bSA+PSA0VUwpCisgICAgeworICAgICAgICByZXQgPSAtMjsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIHJldCA9IEZNQ19HZXRYT01TdGF0ZSh1MzJYb21OdW0pOworICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1BST0dSQU07CisgICAgICAgIEZNQy0+SVNQQUREUiA9IEZNQ19YT01fQkFTRSArICh1MzJYb21OdW0gKiAweDEwdSk7CisgICAgICAgIEZNQy0+SVNQREFUID0gdTMyWG9tQmFzZTsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykge30KKworICAgICAgICBpZihGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQRkZfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBGTUMtPklTUFNUUyB8PSBGTUNfSVNQU1RTX0lTUEZGX01zazsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICB9CisgICAgfQorCisgICAgaWYocmV0ID09IDApCisgICAgeworICAgICAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUFJPR1JBTTsKKyAgICAgICAgRk1DLT5JU1BBRERSID0gRk1DX1hPTV9CQVNFICsgKHUzMlhvbU51bSAqIDB4MTB1ICsgMHgwNHUpOworICAgICAgICBGTUMtPklTUERBVCA9IHU4WG9tUGFnZTsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykge30KKworICAgICAgICBpZihGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQRkZfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBGTUMtPklTUFNUUyB8PSBGTUNfSVNQU1RTX0lTUEZGX01zazsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICB9CisgICAgfQorCisgICAgaWYocmV0ID09IDApCisgICAgeworICAgICAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUFJPR1JBTTsKKyAgICAgICAgRk1DLT5JU1BBRERSID0gRk1DX1hPTV9CQVNFICsgKHUzMlhvbU51bSAqIDB4MTB1ICsgMHgwOHUpOworICAgICAgICBGTUMtPklTUERBVCA9IDB1OworICAgICAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworICAgICAgICB3aGlsZShGTUMtPklTUFRSRyAmIEZNQ19JU1BUUkdfSVNQR09fTXNrKSB7fQorCisgICAgICAgIGlmKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BGRl9Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIEZNQy0+SVNQU1RTIHw9IEZNQ19JU1BTVFNfSVNQRkZfTXNrOworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFeGVjdXRlIEZsYXNoIFBhZ2UgZXJhc2UKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlBhZ2VBZGRyIEFkZHJlc3Mgb2YgdGhlIGZsYXNoIHBhZ2UgdG8gYmUgZXJhc2VkLgorICAqICAgICAgICAgICAgIEl0IG11c3QgYmUgYSAyMDQ4IGJ5dGVzIGFsaWduZWQgYWRkcmVzcy4KKyAgKgorICAqIEByZXR1cm4gICAgIElTUCBwYWdlIGVyYXNlIHN1Y2Nlc3Mgb3Igbm90LgorICAqIEByZXR2YWwgICAgIDAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgRXJhc2UgZmFpbGVkCisgICoKKyAgKiBAZGV0YWlscyAgICBFeGVjdXRlIEZNQ19JU1BDTURfUEFHRV9FUkFTRSBjb21tYW5kIHRvIGVyYXNlIGEgZmxhc2ggcGFnZS4gVGhlIHBhZ2Ugc2l6ZSBpcyAyMDQ4IGJ5dGVzLgorICAqLworaW50MzJfdCBGTUNfRXJhc2UodWludDMyX3QgdTMyUGFnZUFkZHIpCit7CisgICAgaW50MzJfdCAgcmV0ID0gMDsKKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1BBR0VfRVJBU0U7CisgICAgICAgIEZNQy0+SVNQQUREUiA9IHUzMlBhZ2VBZGRyOworICAgICAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworCisgICAgICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHsgfQorCisgICAgICAgIGlmKEZNQy0+SVNQQ1RMICYgRk1DX0lTUENUTF9JU1BGRl9Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIEZNQy0+SVNQQ1RMIHw9IEZNQ19JU1BDVExfSVNQRkZfTXNrOworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRXhlY3V0ZSBGbGFzaCBCYW5rIGVyYXNlCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJCYW5rQWRkciBCYXNlIGFkZHJlc3Mgb2YgdGhlIGZsYXNoIGJhbmsgdG8gYmUgZXJhc2VkLgorICAqCisgICogQHJldHVybiAgICAgSVNQIGJhbmsgZXJhc2Ugc3VjY2VzcyBvciBub3QuCisgICogQHJldHZhbCAgICAgMCAgU3VjY2VzcworICAqIEByZXR2YWwgICAgIC0xICBFcmFzZSBmYWlsZWQKKyAgKgorICAqIEBkZXRhaWxzICBFeGVjdXRlIEZNQ19JU1BDTURfQkFOS19FUkFTRSBjb21tYW5kIHRvIGVyYXNlIGEgZmxhc2ggYmxvY2suCisgICovCitpbnQzMl90IEZNQ19FcmFzZV9CYW5rKHVpbnQzMl90IHUzMkJhbmtBZGRyKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfQkFOS19FUkFTRTsKKyAgICBGTUMtPklTUEFERFIgPSB1MzJCYW5rQWRkcjsKKyAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworCisgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykge30KKworICAgIGlmKEZNQy0+SVNQQ1RMICYgRk1DX0lTUENUTF9JU1BGRl9Nc2spCisgICAgeworICAgICAgICBGTUMtPklTUENUTCB8PSBGTUNfSVNQQ1RMX0lTUEZGX01zazsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEV4ZWN1dGUgRmxhc2ggQmxvY2sgZXJhc2UKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkJsb2NrQWRkciAgQWRkcmVzcyBvZiB0aGUgZmxhc2ggYmxvY2sgdG8gYmUgZXJhc2VkLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbXVzdCBiZSBhIDQgcGFnZXMgYWxpZ25lZCBhZGRyZXNzLgorICAqCisgICogQHJldHVybiAgICAgSVNQIGJsb2NrIGVyYXNlIHN1Y2Nlc3Mgb3Igbm90LgorICAqIEByZXR2YWwgICAgIDAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICAtMSAgRXJhc2UgZmFpbGVkCisgICoKKyAgKiBAZGV0YWlscyBFeGVjdXRlIEZNQ19JU1BDTURfQkxPQ0tfRVJBU0UgY29tbWFuZCB0byBlcmFzZSBhIGZsYXNoIGJsb2NrLiBUaGUgYmxvY2sgc2l6ZSBpcyA0IHBhZ2VzLgorICAqLworaW50MzJfdCBGTUNfRXJhc2VfQmxvY2sodWludDMyX3QgdTMyQmxvY2tBZGRyKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfQkxPQ0tfRVJBU0U7CisgICAgRk1DLT5JU1BBRERSID0gdTMyQmxvY2tBZGRyOworICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisKKyAgICB3aGlsZShGTUMtPklTUFRSRyAmIEZNQ19JU1BUUkdfSVNQR09fTXNrKSB7fQorCisgICAgaWYoRk1DLT5JU1BDVEwgJiBGTUNfSVNQQ1RMX0lTUEZGX01zaykKKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ1RMIHw9IEZNQ19JU1BDVExfSVNQRkZfTXNrOworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICBFeGVjdXRlIEVyYXNlIFhPTSBSZWdpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlhvbU51bSAgVGhlIFhPTVJuKG49MH4zKQorICAqCisgICogQHJldHVybiAgIFhPTSBlcmFzZSBzdWNjZXNzIG9yIG5vdC4KKyAgKiBAcmV0dmFsICAgIDAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgLTEgIEVyYXNlIGZhaWxlZAorICAqIEByZXR2YWwgICAtMiAgSW52YWxpZCBYT00gbnVtYmVyLgorICAqCisgICogQGRldGFpbHMgRXhlY3V0ZSBGTUNfSVNQQ01EX1BBR0VfRVJBU0UgY29tbWFuZCB0byBlcmFzZSBYT00uCisgICovCitpbnQzMl90IEZNQ19FcmFzZVhPTSh1aW50MzJfdCB1MzJYb21OdW0pCit7CisgICAgdWludDMyX3QgdTMyQWRkcjsKKyAgICBpbnQzMl90IGkzMkFjdGl2ZSwgZXJyID0gMDsKKworICAgIGlmKHUzMlhvbU51bSA+PSA0VUwpCisgICAgeworICAgICAgICBlcnIgPSAtMjsKKyAgICB9CisKKyAgICBpZihlcnIgPT0gMCkKKyAgICB7CisgICAgICAgIGkzMkFjdGl2ZSA9IEZNQ19HZXRYT01TdGF0ZSh1MzJYb21OdW0pOworCisgICAgICAgIGlmKGkzMkFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQWRkciA9ICggKCAodWludDMyX3QpKCZGTUMtPlhPTVIwU1RTKVt1MzJYb21OdW1dICkgJiAweEZGRkZGRjAwdSApID4+IDh1OworCisgICAgICAgICAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUEFHRV9FUkFTRTsKKyAgICAgICAgICAgIEZNQy0+SVNQQUREUiA9IHUzMkFkZHI7CisgICAgICAgICAgICBGTUMtPklTUERBVCA9IDB4NTVhYTAzdTsKKyAgICAgICAgICAgIEZNQy0+SVNQVFJHID0gMHgxdTsKKyNpZiBJU0JFTgorICAgICAgICAgICAgX19JU0IoKTsKKyNlbmRpZgorICAgICAgICAgICAgd2hpbGUoRk1DLT5JU1BUUkcpIHt9CisKKyAgICAgICAgICAgIC8qIENoZWNrIElTUEZGIGZsYWcgdG8ga25vdyB3aGV0aGVyIGVyYXNlIE9LIG9yIGZhaWwuICovCisgICAgICAgICAgICBpZihGTUMtPklTUENUTCAmIEZNQ19JU1BDVExfSVNQRkZfTXNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZNQy0+SVNQQ1RMIHw9IEZNQ19JU1BDVExfSVNQRkZfTXNrOworICAgICAgICAgICAgICAgIGVyciA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyID0gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGVycjsKK30KKworLyoqCisgICogQGJyaWVmICAgIEdldCB0aGUgY3VycmVudCBib290IHNvdXJjZQorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBUaGUgY3VycmVudCBib290IHNvdXJjZS4KKyAgKiBAcmV0dmFsICAgMCBUaGlzIGNoaXAgaXMgY3VycmVudGx5IGJvb3RpbmcgZnJvbSBBUFJPTQorICAqIEByZXR2YWwgICAxIFRoaXMgY2hpcCBpcyBjdXJyZW50bHkgYm9vdGluZyBmcm9tIExEUk9NCisgICoKKyAgICAgIFRoaXMgZnVuY3Rpb24gb25seSBzaG93IHRoZSBib290IHNvdXJjZS4KKyAgKiAgICAgICAgICAgVXNlciBuZWVkIHRvIHJlYWQgSVNQU1RBIHJlZ2lzdGVyIHRvIGtub3cgaWYgSUFQIG1vZGUgc3VwcG9ydGVkIG9yIG5vdCBpbiByZWxhdGl2ZSBib290LgorICAqLworaW50MzJfdCBGTUNfR2V0Qm9vdFNvdXJjZSh2b2lkKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBpZihGTUMtPklTUENUTCAmIEZNQ19JU1BDVExfQlNfTXNrKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgIFJ1biBDUkMzMiBjaGVja3N1bSBjYWxjdWxhdGlvbiBhbmQgZ2V0IHJlc3VsdC4KKyAgKgorICAqIEBwYXJhbVtpbl0gdTMyYWRkciAgIFN0YXJ0aW5nIGZsYXNoIGFkZHJlc3MuIEl0IG11c3QgYmUgYSBwYWdlIGFsaWduZWQgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dIHUzMmNvdW50ICBCeXRlIGNvdW50IG9mIGZsYXNoIHRvIGJlIGNhbGN1bGF0ZWQuIEl0IG11c3QgYmUgbXVsdGlwbGUgb2YgMjA0OGJ5dGVzLgorICAqCisgICogQHJldHVybiAgICBTdWNjZXNzIG9yIG5vdC4KKyAgKiBAcmV0dmFsICAgIDAgICAgICAgICAgIFN1Y2Nlc3MuCisgICogQHJldHZhbCAgICAweEZGRkZGRkZGICBJbnZhbGlkIHBhcmFtZXRlci4KKyAgKgorICAqIEBkZXRhaWxzICBSdW4gSVNQIENSQzMyIGNoZWNrc3VtIGNvbW1hbmQgdG8gY2FsY3VsYXRlIGNoZWNrc3VtIHRoZW4gZ2V0IGFuZCByZXR1cm4gY2hlY2tzdW0gZGF0YS4KKyAgKi8KK3VpbnQzMl90ICBGTUNfR2V0Q2hrU3VtKHVpbnQzMl90IHUzMmFkZHIsIHVpbnQzMl90IHUzMmNvdW50KQoreworICAgIHVpbnQzMl90ICAgcmV0OworCisgICAgaWYoKHUzMmFkZHIgJSAyMDQ4VUwpIHx8ICh1MzJjb3VudCAlIDIwNDhVTCkpCisgICAgeworICAgICAgICByZXQgPSAweEZGRkZGRkZGOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBGTUMtPklTUENNRCAgPSBGTUNfSVNQQ01EX1JVTl9DS1M7CisgICAgICAgIEZNQy0+SVNQQUREUiA9IHUzMmFkZHI7CisgICAgICAgIEZNQy0+SVNQREFUICA9IHUzMmNvdW50OworICAgICAgICBGTUMtPklTUFRSRyAgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKworICAgICAgICB3aGlsZShGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQQlVTWV9Nc2spIHsgfQorCisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9SRUFEX0NLUzsKKyAgICAgICAgRk1DLT5JU1BBRERSICAgID0gdTMyYWRkcjsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKworICAgICAgICB3aGlsZShGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQQlVTWV9Nc2spIHsgfQorCisgICAgICAgIHJldCA9IEZNQy0+SVNQREFUOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgdGhlIE9UUCBpcyBsb2NrZWQgb3Igbm90LgorICAqCisgICogQHBhcmFtW2luXSB1MzJPdHBOdW0gICAgVGhlIE9UUCBudW1iZXIuCisgICoKKyAgKiBAcmV0dmFsICAgMSAgIE9UUCBpcyBsb2NrZWQuCisgICogQHJldHZhbCAgIDAgICBPVFAgaXMgbm90IGxvY2tlZC4KKyAgKiBAcmV0dmFsICAgLTEgIEZhaWxlZCB0byByZWFkIE9UUCBsb2NrIGJpdHMuCisgICogQHJldHZhbCAgIC0yICBJbnZhbGlkIE9UUCBudW1iZXIuCisgICoKKyAgKiBAZGV0YWlscyBUbyBnZXQgc3BlY2lmeSBPVFAgbG9jayBzdGF0dXMKKyAgKi8KK2ludDMyX3QgRk1DX0lzX09UUF9Mb2NrZWQodWludDMyX3QgdTMyT3RwTnVtKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBpZih1MzJPdHBOdW0gPiAyNTVVTCkKKyAgICB7CisgICAgICAgIHJldCA9IC0yOworICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1JFQUQ7CisgICAgICAgIEZNQy0+SVNQQUREUiA9IEZNQ19PVFBfQkFTRSArIDB4ODAwVUwgKyB1MzJPdHBOdW0gKiA0VUw7CisgICAgICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykgeyB9CisKKyAgICAgICAgaWYoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEZGX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgRk1DLT5JU1BTVFMgfD0gRk1DX0lTUFNUU19JU1BGRl9Nc2s7CisgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKEZNQy0+SVNQREFUICE9IDB4RkZGRkZGRkZVTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSAxOyAgIC8qIExvY2sgd29yayB3YXMgcHJvZ3JtbWVkLiBPVFAgd2FzIGxvY2tlZC4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIHRoZSBYT00gaXMgYWN0aXZlZCBvciBub3QuCisgICoKKyAgKiBAcGFyYW1baW5dIHUzMlhvbU51bSAgICBUaGUgeG9tIG51bWJlcigwfjMpLgorICAqCisgICogQHJldHZhbCAgIDEgICBYT00gaXMgYWN0aXZlZC4KKyAgKiBAcmV0dmFsICAgMCAgIFhPTSBpcyBub3QgYWN0aXZlZC4KKyAgKiBAcmV0dmFsICAgLTIgIEludmFsaWQgWE9NIG51bWJlci4KKyAgKgorICAqIEBkZXRhaWxzIFRvIGdldCBzcGVjaWZ5IFhPTVJuKG49MH4zKSBhY3RpdmUgc3RhdHVzCisgICovCitpbnQzMl90IEZNQ19HZXRYT01TdGF0ZSh1aW50MzJfdCB1MzJYb21OdW0pCit7CisgICAgdWludDMyX3QgdTMyYWN0OworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBpZih1MzJYb21OdW0gPj0gNFVMKQorICAgIHsKKyAgICAgICAgcmV0ID0gLTI7CisgICAgfQorCisgICAgaWYocmV0ID49IDApCisgICAgeworICAgICAgICB1MzJhY3QgPSAoKChGTUMtPlhPTVNUUykgJiAweGZ1bCkgJiAoMXVsIDw8IHUzMlhvbU51bSkpID4+IHUzMlhvbU51bTsKKyAgICAgICAgcmV0ID0gKGludDMyX3QpdTMyYWN0OworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgIExvY2sgdGhlIHNwZWNpZmllZCBPVFAuCisgICoKKyAgKiBAcGFyYW1baW5dIHUzMk90cE51bSAgICBUaGUgT1RQIG51bWJlci4KKyAgKgorICAqIEByZXR2YWwgICAgMCAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgLTEgIEZhaWxlZCB0byB3cml0ZSBPVFAgbG9jayBiaXRzLgorICAqIEByZXR2YWwgICAtMiAgSW52YWxpZCBPVFAgbnVtYmVyLgorICAqCisgICogQGRldGFpbHMgIFRvIGxvY2sgc3BlY2lmaWVkIE9UUCBudW1iZXIKKyAgKi8KK2ludDMyX3QgRk1DX0xvY2tfT1RQKHVpbnQzMl90IHUzMk90cE51bSkKK3sKKyAgICBpbnQzMl90ICByZXQgPSAwOworCisgICAgaWYodTMyT3RwTnVtID4gMjU1VUwpCisgICAgeworICAgICAgICByZXQgPSAtMjsKKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9QUk9HUkFNOworICAgICAgICBGTUMtPklTUEFERFIgPSBGTUNfT1RQX0JBU0UgKyAweDgwMFVMICsgdTMyT3RwTnVtICogNFVMOworICAgICAgICBGTUMtPklTUERBVCA9IDBVTDsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSBGTUNfSVNQVFJHX0lTUEdPX01zazsKKworICAgICAgICB3aGlsZShGTUMtPklTUFRSRyAmIEZNQ19JU1BUUkdfSVNQR09fTXNrKSB7IH0KKworICAgICAgICBpZihGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQRkZfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBGTUMtPklTUFNUUyB8PSBGTUNfSVNQU1RTX0lTUEZGX01zazsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICBFbmFibGUgRk1DIElTUCBmdW5jdGlvbgorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgSVNQRU4gYml0IG9mIElTUENPTiBtdXN0IGJlIHNldCBiZWZvcmUgd2UgY2FuIHVzZSBJU1AgY29tbWFuZHMuCisgICogICAgICAgICAgIFRoZXJlZm9yZSwgVG8gdXNlIGFsbCBGTUMgZnVuY3Rpb24gQVBJcywgdXNlciBuZWVkcyB0byBjYWxsIEZNQ19PcGVuKCkgZmlyc3QgdG8gZW5hYmxlIElTUCBmdW5jdGlvbnMuCisgICoKKyAgICAgIElTUCBmdW5jdGlvbnMgYXJlIHdyaXRlLXByb3RlY3RlZC4gdXNlciBhbHNvIG5lZWRzIHRvIHVubG9jayBpdCBieSBjYWxsaW5nIFNZU19VbmxvY2tSZWcoKSBiZWZvcmUgdXNpbmcgYWxsIElTUCBmdW5jdGlvbnMuCisgICoKKyAgKi8KK3ZvaWQgRk1DX09wZW4odm9pZCkKK3sKKyAgICBGTUMtPklTUENUTCB8PSAgRk1DX0lTUENUTF9JU1BFTl9Nc2s7Cit9CisKKworLyoqCisgICogQGJyaWVmICAgICAgUmVhZCBhIHdvcmQgYnl0ZXMgZnJvbSBmbGFzaAorICAqCisgICogQHBhcmFtW2luXSAgdTMyQWRkciBBZGRyZXNzIG9mIHRoZSBmbGFzaCBsb2NhdGlvbiB0byBiZSByZWFkLgorICAqICAgICAgICAgICAgIEl0IG11c3QgYmUgYSB3b3JkIGFsaWduZWQgYWRkcmVzcy4KKyAgKgorICAqIEByZXR1cm4gICAgIFRoZSB3b3JkIGRhdGEgcmVhZCBmcm9tIHNwZWNpZmllZCBmbGFzaCBhZGRyZXNzLgorICAqCisgICogQGRldGFpbHMgICAgRXhlY3V0ZSBGTUNfSVNQQ01EX1JFQUQgY29tbWFuZCB0byByZWFkIGEgd29yZCBmcm9tIGZsYXNoLgorICAqLwordWludDMyX3QgRk1DX1JlYWQodWludDMyX3QgdTMyQWRkcikKK3sKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUkVBRDsKKyAgICBGTUMtPklTUEFERFIgPSB1MzJBZGRyOworICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykgeyB9CisKKyAgICByZXR1cm4gRk1DLT5JU1BEQVQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgYSBkb3VibGUtd29yZCBieXRlcyBmcm9tIGZsYXNoCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJhZGRyICAgQWRkcmVzcyBvZiB0aGUgZmxhc2ggbG9jYXRpb24gdG8gYmUgcmVhZC4KKyAgKiAgICAgICAgICAgICBJdCBtdXN0IGJlIGEgZG91YmxlLXdvcmQgYWxpZ25lZCBhZGRyZXNzLgorICAqCisgICogQHBhcmFtW291dF0gdTMyZGF0YTAgIFBsYWNlIGhvbGRlciBvZiB3b3JkIDAgcmVhZCBmcm9tIGZsYXNoIGFkZHJlc3MgdTMyYWRkci4KKyAgKiBAcGFyYW1bb3V0XSB1MzJkYXRhMSAgUGxhY2UgaG9sZGVyIG9mIHdvcmQgMCByZWFkIGZyb20gZmxhc2ggYWRkcmVzcyB1MzJhZGRyKzQuCisgICoKKyAgKiBAcmV0dXJuICAgICAwICAgU3VjY2VzcworICAqIEByZXR1cm4gICAgIC0xICBGYWlsZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIEV4ZWN1dGUgRk1DX0lTUENNRF9SRUFEXzY0IGNvbW1hbmQgdG8gcmVhZCBhIGRvdWJsZS13b3JkIGZyb20gZmxhc2guCisgICovCitpbnQzMl90IEZNQ19SZWFkXzY0KHVpbnQzMl90IHUzMmFkZHIsIHVpbnQzMl90ICogdTMyZGF0YTAsIHVpbnQzMl90ICogdTMyZGF0YTEpCit7CisgICAgaW50MzJfdCAgcmV0ID0gMDsKKworICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9SRUFEXzY0OworICAgIEZNQy0+SVNQQUREUiAgICA9IHUzMmFkZHI7CisgICAgRk1DLT5JU1BEQVQgPSAweDBVTDsKKyAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworCisgICAgd2hpbGUoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEJVU1lfTXNrKSB7IH0KKworICAgIGlmKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BGRl9Nc2spCisgICAgeworICAgICAgICBGTUMtPklTUFNUUyB8PSBGTUNfSVNQU1RTX0lTUEZGX01zazsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICp1MzJkYXRhMCA9IEZNQy0+TVBEQVQwOworICAgICAgICAqdTMyZGF0YTEgPSBGTUMtPk1QREFUMTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICBSZWFkIGRhdGEgZnJvbSBPVFAKKyAgKgorICAqIEBwYXJhbVtpbl0gdTMyT3RwTnVtICAgIFRoZSBPVFAgbnVtYmVyKDB+MjU1KS4KKyAgKiBAcGFyYW1baW5dIHUzMkxvd1dvcmQgICBMb3cgd29yZCBvZiB0aGUgNjQtYml0cyBkYXRhLgorICAqIEBwYXJhbVtpbl0gdTMySGlnaFdvcmQgICBIaWdoIHdvcmQgb2YgdGhlIDY0LWJpdHMgZGF0YS4KKyAgKgorICAqIEByZXR2YWwgICAgMCAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgLTEgIFJlYWQgZmFpbGVkLgorICAqIEByZXR2YWwgICAtMiAgSW52YWxpZCBPVFAgbnVtYmVyLgorICAqCisgICogQGRldGFpbHMgIFJlYWQgdGhlIDY0LWJpdHMgZGF0YSBmcm9tIHRoZSBzcGVjaWZpZWQgT1RQLgorICAqLworaW50MzJfdCBGTUNfUmVhZF9PVFAodWludDMyX3QgdTMyT3RwTnVtLCB1aW50MzJfdCAqdTMyTG93V29yZCwgdWludDMyX3QgKnUzMkhpZ2hXb3JkKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBpZih1MzJPdHBOdW0gPiAyNTVVTCkKKyAgICB7CisgICAgICAgIHJldCA9IC0yOworICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1JFQURfNjQ7CisgICAgICAgIEZNQy0+SVNQQUREUiAgICA9IEZNQ19PVFBfQkFTRSArIHUzMk90cE51bSAqIDhVTCA7CisgICAgICAgIEZNQy0+SVNQREFUID0gMHgwVUw7CisgICAgICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEJVU1lfTXNrKSB7fQorCisgICAgICAgIGlmKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BGRl9Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIEZNQy0+SVNQU1RTIHw9IEZNQ19JU1BTVFNfSVNQRkZfTXNrOworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqdTMyTG93V29yZCA9IEZNQy0+TVBEQVQwOworICAgICAgICAgICAgKnUzMkhpZ2hXb3JkID0gRk1DLT5NUERBVDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgIFJlYWQgdGhlIFVzZXIgQ29uZmlndXJhdGlvbiB3b3Jkcy4KKyAgKgorICAqIEBwYXJhbVtvdXRdICB1MzJDb25maWdbXSAgVGhlIHdvcmQgYnVmZmVyIHRvIHN0b3JlIHRoZSBVc2VyIENvbmZpZ3VyYXRpb24gZGF0YS4KKyAgKiBAcGFyYW1baW5dICAgdTMyQ291bnQgICBUaGUgd29yZCBjb3VudCB0byBiZSByZWFkLgorICAqCisgICogQHJldHVybiAgICAgIFN1Y2Nlc3Mgb3Igbm90LgorICAqIEByZXR2YWwgICAgICAgMCBTdWNjZXNzCisgICogQHJldHZhbCAgICAgIC0xIEZhaWxlZAorICAqCisgICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIHRoZSBzZXR0aW5ncyBvZiB1c2VyIGNvbmZpZ3VyYXRpb24uCisgICogICAgICAgICAgICAgIGlmIHUzMkNvdW50ID0gMSwgT25seSBDT05GSUcwIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgdTMyQ29uZmlnLgorICAqICAgICAgICAgICAgICBpZiB1MzJDb3VudCA9IDIsIEJvdGggQ09ORklHMCBhbmQgQ09ORklHMSB3aWxsIGJlIHJldHVybmVkLgorICAqLworaW50MzJfdCBGTUNfUmVhZENvbmZpZyh1aW50MzJfdCB1MzJDb25maWdbXSwgdWludDMyX3QgdTMyQ291bnQpCit7CisgICAgdWludDMyX3QgaTsKKworICAgIGZvcihpID0gMHU7IGkgPCB1MzJDb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdTMyQ29uZmlnW2ldID0gRk1DX1JlYWQoRk1DX0NPTkZJR19CQVNFICsgaSAqIDR1KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBib290IHNvdXJjZSBmcm9tIExEUk9NIG9yIEFQUk9NIGFmdGVyIG5leHQgc29mdHdhcmUgcmVzZXQKKyAgKgorICAqIEBwYXJhbVtpbl0gIGkzMkJvb3RTcmMKKyAgKiAgICAgICAgICAgICAgICAxOiBCb290IGZyb20gTERST00KKyAgKiAgICAgICAgICAgICAgICAwOiBCb290IGZyb20gQVBST00KKyAgKgorICAqIEByZXR1cm4gICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3dpdGNoIEFQUk9NIGJvb3Qgb3IgTERST00gYm9vdC4gVXNlciBuZWVkIHRvIGNhbGwKKyAgKiAgICAgICAgICAgIEZNQ19TZXRCb290U291cmNlIHRvIHNlbGVjdCBib290IHNvdXJjZSBmaXJzdCwgdGhlbiB1c2UgQ1BVIHJlc2V0IG9yCisgICogICAgICAgICAgICBTeXN0ZW0gUmVzZXQgUmVxdWVzdCB0byByZXNldCBzeXN0ZW0uCisgICoKKyAgKi8KK3ZvaWQgRk1DX1NldEJvb3RTb3VyY2UoaW50MzJfdCBpMzJCb290U3JjKQoreworICAgIGlmKGkzMkJvb3RTcmMpCisgICAgeworICAgICAgICBGTUMtPklTUENUTCB8PSBGTUNfSVNQQ1RMX0JTX01zazsgLyogQm9vdCBmcm9tIExEUk9NICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ1RMICY9IH5GTUNfSVNQQ1RMX0JTX01zazsvKiBCb290IGZyb20gQVBST00gKi8KKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICBFeGVjdXRlIFNlY3VyaXR5IEtleSBDb21wYXJpc29uLgorICAqCisgICogQHBhcmFtW2luXSBrZXkgIEtleSAwfjIgdG8gYmUgY29tcGFyZWQuCisgICoKKyAgKiBAcmV0dmFsICAgMCAgICAgS2V5IG1hdGNoZWQuCisgICogQHJldHZhbCAgIC0xICAgIEZvcmJpZGRlbi4gVGltZXMgb2Yga2V5IGNvbXBhcmlzb24gbWlzbWF0Y2ggcmVhY2ggdGhlIG1heGltdW0gY291bnQuCisgICogQHJldHZhbCAgIC0yICAgIEtleSBtaXNtYXRjaGVkLgorICAqIEByZXR2YWwgICAtMyAgICBObyBLUFJPTSBrZXkgbG9jay4gS2V5IGNvbXBhcmlzb24gaXMgbm90IHJlcXVpcmVkLgorICAqCisgICogQCBkZXRhaWxzICAgSW5wdXQgYSBrZXlzIHRvIGNvbXBhcmUgd2l0aCBzZWN1cml0eSBrZXkKKyAgKi8KK2ludDMyX3QgIEZNQ19Db21wYXJlU1BLZXkodWludDMyX3Qga2V5WzNdKQoreworICAgIHVpbnQzMl90ICB1MzJLZXlTdHM7CisgICAgaW50MzJfdCAgIHJldCA9IDA7CisKKyAgICBpZihGTUMtPktQS0VZU1RTICYgRk1DX0tQS0VZU1RTX0ZPUkJJRF9Nc2spCisgICAgeworICAgICAgICAvKiBGTUNfU0tleV9Db21wYXJlIC0gRk9SQklEISAgKi8KKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorCisgICAgaWYoIShGTUMtPktQS0VZU1RTICYgRk1DX0tQS0VZU1RTX0tFWUxPQ0tfTXNrKSkKKyAgICB7CisgICAgICAgIC8qIEZNQ19TS2V5X0NvbXBhcmUgLSBrZXkgaXMgbm90IGxvY2tlZCEgICovCisgICAgICAgIHJldCA9IC0zOworICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgRk1DLT5LUEtFWTAgPSBrZXlbMF07CisgICAgICAgIEZNQy0+S1BLRVkxID0ga2V5WzFdOworICAgICAgICBGTUMtPktQS0VZMiA9IGtleVsyXTsKKyAgICAgICAgRk1DLT5LUEtFWVRSRyA9IEZNQ19LUEtFWVRSR19LUEtFWUdPX01zayB8IEZNQ19LUEtFWVRSR19UQ0VOX01zazsKKworICAgICAgICB3aGlsZShGTUMtPktQS0VZU1RTICYgRk1DX0tQS0VZU1RTX0tFWUJVU1lfTXNrKSB7IH0KKworICAgICAgICB1MzJLZXlTdHMgPSBGTUMtPktQS0VZU1RTOworCisgICAgICAgIGlmKCEodTMyS2V5U3RzICYgRk1DX0tQS0VZU1RTX0tFWU1BVENIX01zaykpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEtleSBtaXNtYXRjaGVkISAqLworICAgICAgICAgICAgcmV0ID0gLTI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZih1MzJLZXlTdHMgJiBGTUNfS1BLRVlTVFNfS0VZTE9DS19Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEtleSBtYXRjaGVkLCBidXQgc3RpbGwgYmUgbG9ja2VkISAqLworICAgICAgICAgICAgcmV0ID0gLTI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgICogQGJyaWVmICAgIFNldHVwIFNlY3VyaXR5IEtleS4KKyAgKgorICAqIEBwYXJhbVtpbl0gYXUzMktleSAgICAgIEtleSAwfjIgdG8gYmUgc2V0dXAuCisgICogQHBhcmFtW2luXSB1MzJLcG1heCAgICBNYXhpbXVtIHVubWF0Y2hlZCBwb3dlci1vbiBjb3VudGluZyBudW1iZXIuCisgICogQHBhcmFtW2luXSB1MzJLZW1heCAgICBNYXhpbXVtIHVubWF0Y2hlZCBjb3VudGluZyBudW1iZXIuCisgICogQHBhcmFtW2luXSBpMzJMb2NrQ09ORklHICAgMTogU2VjdXJpdHkga2V5IGxvY2sgQ09ORklHIHRvIHdyaXRlLXByb3RlY3QuIDA6IERvbid0IGxvY2sgQ09ORklHLgorICAqIEBwYXJhbVtpbl0gaTMyTG9ja1NQUk9NICAgIDE6IFNlY3VyaXR5IGtleSBsb2NrIFNQUk9NIHRvIHdyaXRlLXByb3RlY3QuIDA6IERvbid0IGxvY2sgU1BST00uIChUaGlzIHBhcmFtIGlzIG5vdCBzdXBwb3J0ZWQgb24gTTIzNTEpCisgICoKKyAgKiBAcmV0dmFsICAgIDAgICAgU3VjY2Vzcy4KKyAgKiBAcmV0dmFsICAgLTEgICAgS2V5IGlzIGxvY2tlZC4gQ2Fubm90IG92ZXJ3cml0ZSB0aGUgY3VycmVudCBrZXkuCisgICogQHJldHZhbCAgIC0yICAgIEZhaWxlZCB0byBlcmFzZSBmbGFzaC4KKyAgKiBAcmV0dmFsICAgLTMgICAgRmFpbGVkIHRvIHByb2dyYW0ga2V5LgorICAqIEByZXR2YWwgICAtNCAgICBLZXkgbG9jayBmdW5jdGlvbiBmYWlsZWQuCisgICogQHJldHZhbCAgIC01ICAgIENPTkZJRyBsb2NrIGZ1bmN0aW9uIGZhaWxlZC4KKyAgKiBAcmV0dmFsICAgLTYgICAgU1BST00gbG9jayBmdW5jdGlvbiBmYWlsZWQuIChUaGlzIHN0YXR1cyBpcyBub3Qgc3VwcG9ydGVkIG9uIE0yMzUxKQorICAqIEByZXR2YWwgICAtNyAgICBLUE1BWCBmdW5jdGlvbiBmYWlsZWQuCisgICogQHJldHZhbCAgIC04ICAgIEtFTUFYIGZ1bmN0aW9uIGZhaWxlZC4KKyAgKgorICAqIEBkZXRhaWxzICBTZXQgc2VjdXJlIGtleXMgYW5kIHNldHVwIGtleSBjb21wYXJlIGNvdW50LiBUaGUgc2VjdXJlIGtleSBhbHNvIGNhbiBwcm90ZWN0IHVzZXIgY29uZmlnLgorICAqLworaW50MzJfdCAgRk1DX1NldFNQS2V5KHVpbnQzMl90IGF1MzJLZXlbM10sIHVpbnQzMl90IHUzMktwbWF4LCB1aW50MzJfdCB1MzJLZW1heCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IGkzMkxvY2tDT05GSUcsIGNvbnN0IGludDMyX3QgaTMyTG9ja1NQUk9NKQoreworICAgIHVpbnQzMl90ICBsb2NrX2N0cmwgPSAwVUw7CisgICAgdWludDMyX3QgIHUzMktleVN0czsKKyAgICBpbnQzMl90ICAgcmV0ID0gMDsKKworICAgIGlmKEZNQy0+S1BLRVlTVFMgIT0gMHgyMDBVTCkKKyAgICB7CisgICAgICAgIHJldCA9IC0xOworICAgIH0KKworICAgIGlmKEZNQ19FcmFzZShGTUNfS1BST01fQkFTRSkpCisgICAgeworICAgICAgICByZXQgPSAtMjsKKyAgICB9CisKKyAgICBpZihGTUNfRXJhc2UoRk1DX0tQUk9NX0JBU0UgKyAweDIwMFVMKSkKKyAgICB7CisgICAgICAgIHJldCA9IC0zOworICAgIH0KKworICAgIGlmKCFpMzJMb2NrQ09ORklHKQorICAgIHsKKyAgICAgICAgbG9ja19jdHJsIHw9IDB4MVVMOworICAgIH0KKworICAgIGlmKCFpMzJMb2NrU1BST00pCisgICAgeworICAgICAgICBsb2NrX2N0cmwgfD0gMHgyVUw7CisgICAgfQorCisgICAgaWYocmV0ID09IDApCisgICAgeworICAgICAgICBGTUNfV3JpdGUoRk1DX0tQUk9NX0JBU0UsIGF1MzJLZXlbMF0pOworICAgICAgICBGTUNfV3JpdGUoRk1DX0tQUk9NX0JBU0UgKyAweDRVTCwgYXUzMktleVsxXSk7CisgICAgICAgIEZNQ19Xcml0ZShGTUNfS1BST01fQkFTRSArIDB4OFVMLCBhdTMyS2V5WzJdKTsKKyAgICAgICAgRk1DX1dyaXRlKEZNQ19LUFJPTV9CQVNFICsgMHhDVUwsIHUzMktwbWF4KTsKKyAgICAgICAgRk1DX1dyaXRlKEZNQ19LUFJPTV9CQVNFICsgMHgxMFVMLCB1MzJLZW1heCk7CisgICAgICAgIEZNQ19Xcml0ZShGTUNfS1BST01fQkFTRSArIDB4MTRVTCwgbG9ja19jdHJsKTsKKworICAgICAgICB3aGlsZShGTUMtPktQS0VZU1RTICYgRk1DX0tQS0VZU1RTX0tFWUJVU1lfTXNrKSB7IH0KKworICAgICAgICB1MzJLZXlTdHMgPSBGTUMtPktQS0VZU1RTOworCisgICAgICAgIGlmKCEodTMyS2V5U3RzICYgRk1DX0tQS0VZU1RTX0tFWUxPQ0tfTXNrKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2VjdXJpdHkga2V5IGxvY2sgZmFpbGVkISAqLworICAgICAgICAgICAgcmV0ID0gLTQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoaTMyTG9ja0NPTkZJRyAmJiAoISh1MzJLZXlTdHMgJiBGTUNfS1BLRVlTVFNfQ0ZHRkxBR19Nc2spKSkgfHwKKyAgICAgICAgICAgICAgICAoKCFpMzJMb2NrQ09ORklHKSAmJiAodTMyS2V5U3RzICYgRk1DX0tQS0VZU1RTX0NGR0ZMQUdfTXNrKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENPTkZJRyBsb2NrIGZhaWxlZCEgKi8KKyAgICAgICAgICAgIHJldCA9IC01OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKChGTUMtPktQQ05UICYgRk1DX0tQQ05UX0tQTUFYX01zaykgPj4gRk1DX0tQQ05UX0tQTUFYX1BvcykgIT0gdTMyS3BtYXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEtQTUFYIGZhaWxlZCEgKi8KKyAgICAgICAgICAgIHJldCA9IC03OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKChGTUMtPktQS0VZQ05UICYgRk1DX0tQS0VZQ05UX0tQS0VNQVhfTXNrKSA+PiBGTUNfS1BLRVlDTlRfS1BLRU1BWF9Qb3MpICE9IHUzMktlbWF4KQorICAgICAgICB7CisgICAgICAgICAgICAvKiBLRU1BWCBmYWlsZWQhICovCisgICAgICAgICAgICByZXQgPSAtODsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSBhIHdvcmQgYnl0ZXMgdG8gZmxhc2guCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJBZGRyIEFkZHJlc3Mgb2YgdGhlIGZsYXNoIGxvY2F0aW9uIHRvIGJlIHByb2dyYW1tZWQuCisgICogICAgICAgICAgICAgSXQgbXVzdCBiZSBhIHdvcmQgYWxpZ25lZCBhZGRyZXNzLgorICAqIEBwYXJhbVtpbl0gIHUzMkRhdGEgVGhlIHdvcmQgZGF0YSB0byBiZSBwcm9ncmFtbWVkLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQCBkZXRhaWxzICAgRXhlY3V0ZSBJU1AgRk1DX0lTUENNRF9QUk9HUkFNIHRvIHByb2dyYW0gYSB3b3JkIHRvIGZsYXNoLgorICAqLwordm9pZCBGTUNfV3JpdGUodWludDMyX3QgdTMyQWRkciwgdWludDMyX3QgdTMyRGF0YSkKK3sKKyAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUFJPR1JBTTsKKyAgICBGTUMtPklTUEFERFIgPSB1MzJBZGRyOworICAgIEZNQy0+SVNQREFUID0gdTMyRGF0YTsKKyAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHsgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSBhIGRvdWJsZS13b3JkIGJ5dGVzIHRvIGZsYXNoCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJhZGRyIEFkZHJlc3Mgb2YgdGhlIGZsYXNoIGxvY2F0aW9uIHRvIGJlIHByb2dyYW1tZWQuCisgICogICAgICAgICAgICAgSXQgbXVzdCBiZSBhIGRvdWJsZS13b3JkIGFsaWduZWQgYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dICB1MzJkYXRhMCAgIFRoZSB3b3JkIGRhdGEgdG8gYmUgcHJvZ3JhbW1lZCB0byBmbGFzaCBhZGRyZXNzIHUzMmFkZHIuCisgICogQHBhcmFtW2luXSAgdTMyZGF0YTEgICBUaGUgd29yZCBkYXRhIHRvIGJlIHByb2dyYW1tZWQgdG8gZmxhc2ggYWRkcmVzcyB1MzJhZGRyKzQuCisgICoKKyAgKiBAcmV0dXJuICAgICAwICAgU3VjY2VzcworICAqIEByZXR1cm4gICAgIC0xICBGYWlsZWQKKyAgKgorICAqIEAgZGV0YWlscyAgIEV4ZWN1dGUgSVNQIEZNQ19JU1BDTURfUFJPR1JBTV82NCB0byBwcm9ncmFtIGEgZG91YmxlLXdvcmQgdG8gZmxhc2guCisgICovCitpbnQzMl90IEZNQ19Xcml0ZThCeXRlcyh1aW50MzJfdCB1MzJhZGRyLCB1aW50MzJfdCB1MzJkYXRhMCwgdWludDMyX3QgdTMyZGF0YTEpCit7CisgICAgaW50MzJfdCAgcmV0ID0gMDsKKworICAgIEZNQy0+SVNQQ01EICA9IEZNQ19JU1BDTURfUFJPR1JBTV82NDsKKyAgICBGTUMtPklTUEFERFIgPSB1MzJhZGRyOworICAgIEZNQy0+TVBEQVQwICA9IHUzMmRhdGEwOworICAgIEZNQy0+TVBEQVQxICA9IHUzMmRhdGExOworICAgIEZNQy0+SVNQVFJHICA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworCisgICAgd2hpbGUoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEJVU1lfTXNrKSB7IH0KKworICAgIGlmKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BGRl9Nc2spCisgICAgeworICAgICAgICBGTUMtPklTUFNUUyB8PSBGTUNfSVNQU1RTX0lTUEZGX01zazsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICBXcml0ZSBVc2VyIENvbmZpZ3VyYXRpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIGF1MzJDb25maWdbXSBUaGUgd29yZCBidWZmZXIgdG8gc3RvcmUgdGhlIFVzZXIgQ29uZmlndXJhdGlvbiBkYXRhLgorICAqIEBwYXJhbVtpbl0gIHUzMkNvdW50IFRoZSB3b3JkIGNvdW50IHRvIHByb2dyYW0gdG8gVXNlciBDb25maWd1cmF0aW9uLgorICAqCisgICogQHJldHZhbCAgICAgMCBTdWNjZXNzCisgICogQHJldHZhbCAgICAtMSBGYWlsZWQKKyAgKgorICAqIEBkZXRhaWxzICBVc2VyIG11c3QgZW5hYmxlIFVzZXIgQ29uZmlndXJhdGlvbiB1cGRhdGUgYmVmb3JlIHdyaXRpbmcgaXQuCisgICogICAgICAgICAgIFVzZXIgbXVzdCBlcmFzZSBVc2VyIENvbmZpZ3VyYXRpb24gYmVmb3JlIHdyaXRpbmcgaXQuCisgICogICAgICAgICAgIFVzZXIgQ29uZmlndXJhdGlvbiBpcyBhbHNvIGJlIHBhZ2UgZXJhc2UuIFVzZXIgbmVlZHMgdG8gYmFja3VwIG5lY2Vzc2FyeSBkYXRhCisgICogICAgICAgICAgIGJlZm9yZSBlcmFzZSBVc2VyIENvbmZpZ3VyYXRpb24uCisgICovCitpbnQzMl90IEZNQ19Xcml0ZUNvbmZpZyh1aW50MzJfdCBhdTMyQ29uZmlnW10sIHVpbnQzMl90IHUzMkNvdW50KQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisgICAgdWludDMyX3QgaTsKKworICAgIEZNQ19FTkFCTEVfQ0ZHX1VQREFURSgpOworICAgIGZvcihpID0gMHU7IGkgPCB1MzJDb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgRk1DX1dyaXRlKEZNQ19DT05GSUdfQkFTRSArIGkgKiA0dSwgYXUzMkNvbmZpZ1tpXSk7CisgICAgICAgIGlmKEZNQ19SZWFkKEZNQ19DT05GSUdfQkFTRSArIGkgKiA0dSkgIT0gYXUzMkNvbmZpZ1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgRk1DX0RJU0FCTEVfQ0ZHX1VQREFURSgpOworICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIE11bHRpLVdvcmQgYnl0ZXMgdG8gZmxhc2gKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkFkZHIgICAgU3RhcnQgZmxhc2ggYWRkcmVzcyBpbiBBUFJPTSB3aGVyZSB0aGUgZGF0YSBjaHVuayB0byBiZSBwcm9ncmFtbWVkIGludG8uCisgICogICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFkZHJlc3MgbXVzdCBiZSA4LWJ5dGVzIGFsaWduZWQgdG8gZmxhc2ggYWRkcmVzcy4KKyAgKiBAcGFyYW1baW5dICBwdTMyQnVmICAgIEJ1ZmZlciB0aGF0IGNhcnJ5IHRoZSBkYXRhIGNodW5rLgorICAqIEBwYXJhbVtpbl0gIHUzMkxlbiAgICAgTGVuZ3RoIG9mIHRoZSBkYXRhIGNodW5rIGluIGJ5dGVzLgorICAqCisgICogQHJldHZhbCAgICAgPj0wICBOdW1iZXIgb2YgZGF0YSBieXRlcyB3ZXJlIHByb2dyYW1tZWQuCisgICogQHJldHVybiAgICAgLTEgICBJbnZhbGlkIGFkZHJlc3MuCisgICoKKyAgKiBAZGV0YWlscyAgICAgUHJvZ3JhbSBNdWx0aS1Xb3JkIGRhdGEgaW50byBzcGVjaWZpZWQgYWRkcmVzcyBvZiBmbGFzaC4KKyAgKi8KKworaW50MzJfdCBGTUNfV3JpdGVNdWx0aXBsZSh1aW50MzJfdCB1MzJBZGRyLCB1aW50MzJfdCBwdTMyQnVmW10sIHVpbnQzMl90IHUzMkxlbikKK3sKKworICAgIHVpbnQzMl90IGksIGlkeCwgdTMyT25Qcm9nOworICAgIGludDMyX3QgZXJyLCByZXR2YWwgPSAwOworCisgICAgaWYoKHUzMkFkZHIgPj0gRk1DX0FQUk9NX0VORCkgfHwgKCh1MzJBZGRyICUgOCkgIT0gMCkpCisgICAgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWR4ID0gMHU7CisgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1BST0dSQU1fTVVMOworICAgIEZNQy0+SVNQQUREUiA9IHUzMkFkZHI7CisgICAgcmV0dmFsICs9IDE2OworICAgIGRvCisgICAgeworICAgICAgICBlcnIgPSAwOworICAgICAgICB1MzJPblByb2cgPSAxdTsKKyAgICAgICAgRk1DLT5NUERBVDAgPSBwdTMyQnVmW2lkeCArIDB1XTsKKyAgICAgICAgRk1DLT5NUERBVDEgPSBwdTMyQnVmW2lkeCArIDF1XTsKKyAgICAgICAgRk1DLT5NUERBVDIgPSBwdTMyQnVmW2lkeCArIDJ1XTsKKyAgICAgICAgRk1DLT5NUERBVDMgPSBwdTMyQnVmW2lkeCArIDN1XTsKKyAgICAgICAgRk1DLT5JU1BUUkcgPSAweDF1OworICAgICAgICBpZHggKz0gNHU7CisKKyAgICAgICAgZm9yKGkgPSBpZHg7IGkgPCAodTMyTGVuIC8gNHUpOyBpICs9IDR1KSAvKiBNYXggZGF0YSBsZW5ndGggaXMgMjU2IGJ5dGVzICg1MTIvNCB3b3JkcykqLworICAgICAgICB7CisgICAgICAgICAgICBfX3NldF9QUklNQVNLKDF1KTsgLyogTWFzayBpbnRlcnJ1cHQgdG8gYXZvaWQgc3RhdHVzIGNoZWNrIGNvaGVyZW5jZSBlcnJvciovCisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKChGTUMtPk1QU1RTICYgRk1DX01QU1RTX01QQlVTWV9Nc2spID09IDB1KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX19zZXRfUFJJTUFTSygwdSk7CisKKyAgICAgICAgICAgICAgICAgICAgRk1DLT5JU1BBRERSID0gRk1DLT5NUEFERFIgJiAofjB4ZnVsKTsKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gKEZNQy0+SVNQQUREUiAtIHUzMkFkZHIpIC8gNHU7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlKChGTUMtPk1QU1RTICYgKDN1IDw8IEZNQ19NUFNUU19EMF9Qb3MpKSAmJiAoZXJyID09IDApKTsKKworICAgICAgICAgICAgaWYoZXJyID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dmFsICs9IDg7CisKKyAgICAgICAgICAgICAgICAvKiBVcGRhdGUgbmV3IGRhdGEgZm9yIEQwICovCisgICAgICAgICAgICAgICAgRk1DLT5NUERBVDAgPSBwdTMyQnVmW2ldOworICAgICAgICAgICAgICAgIEZNQy0+TVBEQVQxID0gcHUzMkJ1ZltpICsgMXVdOworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZigoRk1DLT5NUFNUUyAmIEZNQ19NUFNUU19NUEJVU1lfTXNrKSA9PSAwdSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgX19zZXRfUFJJTUFTSygwdSk7CisgICAgICAgICAgICAgICAgICAgICAgICBGTUMtPklTUEFERFIgPSBGTUMtPk1QQUREUiAmICh+MHhmdWwpOworICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gKEZNQy0+SVNQQUREUiAtIHUzMkFkZHIpIC8gNHU7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSgoRk1DLT5NUFNUUyAmICgzdSA8PCBGTUNfTVBTVFNfRDJfUG9zKSkgJiYgKGVyciA9PSAwKSk7CisKKyAgICAgICAgICAgICAgICBpZihlcnIgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHZhbCArPSA4OworCisgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBuZXcgZGF0YSBmb3IgRDIqLworICAgICAgICAgICAgICAgICAgICBGTUMtPk1QREFUMiA9IHB1MzJCdWZbaSArIDJ1XTsKKyAgICAgICAgICAgICAgICAgICAgRk1DLT5NUERBVDMgPSBwdTMyQnVmW2kgKyAzdV07CisgICAgICAgICAgICAgICAgICAgIF9fc2V0X1BSSU1BU0soMHUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoZXJyIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihlcnIgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyT25Qcm9nID0gMHU7CisgICAgICAgICAgICB3aGlsZShGTUMtPklTUFNUUyAmIEZNQ19JU1BTVFNfSVNQQlVTWV9Nc2spIHt9CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUodTMyT25Qcm9nKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgV3JpdGUgZGF0YSB0byBPVFAKKyAgKgorICAqIEBwYXJhbVtpbl0gdTMyT3RwTnVtICAgIFRoZSBPVFAgbnVtYmVyKDB+MjU1KS4KKyAgKiBAcGFyYW1baW5dIHUzMkxvd1dvcmQgICBMb3cgd29yZCBvZiB0aGUgNjQtYml0cyBkYXRhLgorICAqIEBwYXJhbVtpbl0gdTMySGlnaFdvcmQgICBIaWdoIHdvcmQgb2YgdGhlIDY0LWJpdHMgZGF0YS4KKyAgKgorICAqIEByZXR2YWwgICAgMCAgIFN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgIC0xICBQcm9ncmFtIGZhaWxlZC4KKyAgKiBAcmV0dmFsICAgIC0yICBJbnZhbGlkIE9UUCBudW1iZXIuCisgICoKKyAgKiBAZGV0YWlscyAgUHJvZ3JhbSBhIDY0LWJpdHMgZGF0YSB0byB0aGUgc3BlY2lmaWVkIE9UUC4KKyAgKi8KK2ludDMyX3QgRk1DX1dyaXRlX09UUCh1aW50MzJfdCB1MzJPdHBOdW0sIHVpbnQzMl90IHUzMkxvd1dvcmQsIHVpbnQzMl90IHUzMkhpZ2hXb3JkKQoreworICAgIGludDMyX3QgIHJldCA9IDA7CisKKyAgICBpZih1MzJPdHBOdW0gPiAyNTVVTCkKKyAgICB7CisgICAgICAgIHJldCA9IC0yOworICAgIH0KKworICAgIGlmKHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgRk1DLT5JU1BDTUQgPSBGTUNfSVNQQ01EX1BST0dSQU07CisgICAgICAgIEZNQy0+SVNQQUREUiA9IEZNQ19PVFBfQkFTRSArIHUzMk90cE51bSAqIDhVTDsKKyAgICAgICAgRk1DLT5JU1BEQVQgPSB1MzJMb3dXb3JkOworICAgICAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworCisgICAgICAgIHdoaWxlKEZNQy0+SVNQVFJHICYgRk1DX0lTUFRSR19JU1BHT19Nc2spIHsgfQorCisgICAgICAgIGlmKEZNQy0+SVNQU1RTICYgRk1DX0lTUFNUU19JU1BGRl9Nc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIEZNQy0+SVNQU1RTIHw9IEZNQ19JU1BTVFNfSVNQRkZfTXNrOworICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZihyZXQgPT0gMCkKKyAgICB7CisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9QUk9HUkFNOworICAgICAgICBGTUMtPklTUEFERFIgPSBGTUNfT1RQX0JBU0UgKyB1MzJPdHBOdW0gKiA4VUwgKyA0VUw7CisgICAgICAgIEZNQy0+SVNQREFUID0gdTMySGlnaFdvcmQ7CisgICAgICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisKKyAgICAgICAgd2hpbGUoRk1DLT5JU1BUUkcgJiBGTUNfSVNQVFJHX0lTUEdPX01zaykgeyB9CisKKyAgICAgICAgaWYoRk1DLT5JU1BTVFMgJiBGTUNfSVNQU1RTX0lTUEZGX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgRk1DLT5JU1BTVFMgfD0gRk1DX0lTUFNUU19JU1BGRl9Nc2s7CisgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgRk1DX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEZNQ19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZ3Bpby5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNmRhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9ncGlvLmMKQEAgLTAsMCArMSwxODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBncGlvLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBHZW5lcmFsIFB1cnBvc2UgSS9PIChHUElPKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEdQSU9fRHJpdmVyIEdQSU8gRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgR1BJT19FWFBPUlRFRF9GVU5DVElPTlMgR1BJTyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBHUElPIG9wZXJhdGlvbiBtb2RlCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluTWFzayAgVGhlIHNpbmdsZSBvciBtdWx0aXBsZSBwaW5zIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMyBmb3IgUEMuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE0IGZvciBQRC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTEgZm9yIFBGLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDIgfiBCSVQzLCBCSVQ5IH4gQklUMTUgZm9yIFBHLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDQgfiBCSVQxMSBmb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyTW9kZSAgICAgT3BlcmF0aW9uIG1vZGUuIEl0IGNvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fTU9ERV9JTlBVVAorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX01PREVfT1VUUFVUCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fTU9ERV9PUEVOX0RSQUlOCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fTU9ERV9RVUFTSQorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgc3BlY2lmaWVkIEdQSU8gb3BlcmF0aW9uIG1vZGUuCisgKi8KK3ZvaWQgR1BJT19TZXRNb2RlKEdQSU9fVCAqcG9ydCwgdWludDMyX3QgdTMyUGluTWFzaywgdWludDMyX3QgdTMyTW9kZSkKK3sKKyAgICB1aW50MzJfdCB1MzJJZHg7CisKKyAgICBmb3IodTMySWR4ID0gMHVsOyB1MzJJZHggPCBHUElPX1BJTl9NQVg7IHUzMklkeCsrKQorICAgIHsKKyAgICAgICAgaWYoKHUzMlBpbk1hc2sgJiAoMXVsIDw8IHUzMklkeCkpID09ICgxdWwgPDwgdTMySWR4KSkKKyAgICAgICAgeworICAgICAgICAgICAgcG9ydC0+TU9ERSA9IChwb3J0LT5NT0RFICYgfigweDN1bCA8PCAodTMySWR4IDw8IDEpKSkgfCAodTMyTW9kZSA8PCAodTMySWR4IDw8IDEpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgRW5hYmxlIEdQSU8gaW50ZXJydXB0CisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgICAgICBHUElPIHBvcnQuIEl0IGNvdWxkIGJlIFBBLCBQQiwgUEMsIFBELCBQRSwgUEYsIFBHIG9yIFBILgorICogQHBhcmFtW2luXSAgIHUzMlBpbiAgICAgICAgICBUaGUgcGluIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMCB+IDEzIGZvciBQQyBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxNCBmb3IgUEQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTEgZm9yIFBGIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgMiB+IDQsIDkgfiAxNSBmb3IgUEcgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSA0IH4gMTEgZm9yIFBIIEdQSU8gcG9ydC4KKyAqIEBwYXJhbVtpbl0gICB1MzJJbnRBdHRyaWJzICAgVGhlIGludGVycnVwdCBhdHRyaWJ1dGUgb2Ygc3BlY2lmaWVkIEdQSU8gcGluLiBJdCBjb3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19JTlRfUklTSU5HCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0lOVF9GQUxMSU5HCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX0lOVF9CT1RIX0VER0UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fSU5UX0hJR0gKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fSU5UX0xPVworICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgc3BlY2lmaWVkIEdQSU8gcGluIGludGVycnVwdC4KKyAqLwordm9pZCBHUElPX0VuYWJsZUludChHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbiwgdWludDMyX3QgdTMySW50QXR0cmlicykKK3sKKyAgICAvKiBDb25maWd1cmUgaW50ZXJydXB0IG1vZGUgb2Ygc3BlY2lmaWVkIHBpbiAqLworICAgIHBvcnQtPklOVFRZUEUgPSAocG9ydC0+SU5UVFlQRSAmIH4oMXVsIDw8IHUzMlBpbikpIHwgKCgodTMySW50QXR0cmlicyA+PiAyNCkgJiAweEZGVUwpIDw8IHUzMlBpbik7CisKKyAgICAvKiBFbmFibGUgaW50ZXJydXB0IGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBwaW4gKi8KKyAgICBwb3J0LT5JTlRFTiA9IChwb3J0LT5JTlRFTiAmIH4oMHgwMDAxMDAwMXVsIDw8IHUzMlBpbikpIHwgKCh1MzJJbnRBdHRyaWJzICYgMHhGRkZGRkZVTCkgPDwgdTMyUGluKTsKK30KKworCisvKioKKyAqIEBicmllZiAgICAgICBEaXNhYmxlIEdQSU8gaW50ZXJydXB0CisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluICAgICAgVGhlIHBpbiBvZiBzcGVjaWZpZWQgR1BJTyBwb3J0LiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIDAgfiAxNSBmb3IgUEEsIFBCIGFuZCBQRS4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTMgZm9yIFBDIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTQgZm9yIFBEIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAwIH4gMTEgZm9yIFBGIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSAyIH4gNCwgOSB+IDE1IGZvciBQRyBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgNCB+IDExIGZvciBQSCBHUElPIHBvcnQuCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBzcGVjaWZpZWQgR1BJTyBwaW4gaW50ZXJydXB0LgorICovCit2b2lkIEdQSU9fRGlzYWJsZUludChHUElPX1QgKnBvcnQsIHVpbnQzMl90IHUzMlBpbikKK3sKKyAgICAvKiBDb25maWd1cmUgaW50ZXJydXB0IG1vZGUgb2Ygc3BlY2lmaWVkIHBpbiAqLworICAgIHBvcnQtPklOVFRZUEUgJj0gfigxVUwgPDwgdTMyUGluKTsKKworICAgIC8qIERpc2FibGUgaW50ZXJydXB0IGZ1bmN0aW9uIG9mIHNwZWNpZmllZCBwaW4gKi8KKyAgICBwb3J0LT5JTlRFTiAmPSB+KCgweDAwMDEwMDAxVUwpIDw8IHUzMlBpbik7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBHUElPIHNsZXcgcmF0ZSBjb250cm9sCisgKgorICogQHBhcmFtW2luXSAgIHBvcnQgICAgICAgIEdQSU8gcG9ydC4gSXQgY291bGQgYmUgUEEsIFBCLCBQQywgUEQsIFBFLCBQRiwgUEcgb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyUGluTWFzayAgVGhlIHNpbmdsZSBvciBtdWx0aXBsZSBwaW5zIG9mIHNwZWNpZmllZCBHUElPIHBvcnQuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE1IGZvciBQQSwgUEIgYW5kIFBFLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMyBmb3IgUEMuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDE0IGZvciBQRC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTEgZm9yIFBGLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDIgfiBCSVQzLCBCSVQ5IH4gQklUMTUgZm9yIFBHLiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDQgfiBCSVQxMSBmb3IgUEguCisgKiBAcGFyYW1baW5dICAgdTMyTW9kZSAgICAgU2xldyByYXRlIG1vZGUuICBJdCBjb3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX1NMRVdDVExfTk9STUFMIChtYXhpbXVtIDQwIE1IeiBhdCAyLjdWKQorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX1NMRVdDVExfSElHSCAobWF4aW11bSA4MCBNSHogYXQgMi43VikKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19TTEVXQ1RMX0ZBU1QgKG1heGltdW0gMTAwIE1IeiBhdCAyLjdWKQorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgc3BlY2lmaWVkIEdQSU8gb3BlcmF0aW9uIG1vZGUuCisgKi8KK3ZvaWQgR1BJT19TZXRTbGV3Q3RsKEdQSU9fVCAqcG9ydCwgdWludDMyX3QgdTMyUGluTWFzaywgdWludDMyX3QgdTMyTW9kZSkKK3sKKyAgICB1aW50MzJfdCB1MzJJZHg7CisKKyAgICBmb3IodTMySWR4ID0gMHVsOyB1MzJJZHggPCBHUElPX1BJTl9NQVg7IHUzMklkeCsrKQorICAgIHsKKyAgICAgICAgaWYodTMyUGluTWFzayAmICgxdWwgPDwgdTMySWR4KSkKKyAgICAgICAgeworICAgICAgICAgICAgcG9ydC0+U0xFV0NUTCA9IChwb3J0LT5TTEVXQ1RMICYgfigweDN1bCA8PCAodTMySWR4IDw8IDEpKSkgfCAodTMyTW9kZSA8PCAodTMySWR4IDw8IDEpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IEdQSU8gUHVsbC11cCBhbmQgUHVsbC1kb3duIGNvbnRyb2wKKyAqCisgKiBAcGFyYW1baW5dICAgcG9ydCAgICAgICAgR1BJTyBwb3J0LiBJdCBjb3VsZCBiZSBQQSwgUEIsIFBDLCBQRCwgUEUsIFBGLCBQRyBvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJQaW5NYXNrICBUaGUgc2luZ2xlIG9yIG11bHRpcGxlIHBpbnMgb2Ygc3BlY2lmaWVkIEdQSU8gcG9ydC4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTUgZm9yIFBBLCBQQiBhbmQgUEUuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMCB+IEJJVDEzIGZvciBQQy4gXG4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb3VsZCBiZSBCSVQwIH4gQklUMTQgZm9yIFBELiBcbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvdWxkIGJlIEJJVDAgfiBCSVQxMSBmb3IgUEYuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUMiB+IEJJVDMsIEJJVDkgfiBCSVQxNSBmb3IgUEcuIFxuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY291bGQgYmUgQklUNCB+IEJJVDExIGZvciBQSC4KKyAqIEBwYXJhbVtpbl0gICB1MzJNb2RlICAgICBUaGUgcGluIG1vZGUgb2Ygc3BlY2lmaWVkIEdQSU8gcGluLiBJdCBjb3VsZCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBHUElPX1BVU0VMX0RJU0FCTEUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgR1BJT19QVVNFTF9QVUxMX1VQCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEdQSU9fUFVTRUxfUFVMTF9ET1dOCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgU2V0IHRoZSBwaW4gbW9kZSBvZiBzcGVjaWZpZWQgR1BJTyBwaW4uCisgKi8KK3ZvaWQgR1BJT19TZXRQdWxsQ3RsKEdQSU9fVCAqcG9ydCwgdWludDMyX3QgdTMyUGluTWFzaywgdWludDMyX3QgdTMyTW9kZSkKK3sKKyAgICB1aW50MzJfdCB1MzJJZHg7CisKKyAgICBmb3IodTMySWR4ID0gMHVsOyB1MzJJZHggPCBHUElPX1BJTl9NQVg7IHUzMklkeCsrKQorICAgIHsKKyAgICAgICAgaWYodTMyUGluTWFzayAmICgxdWwgPDwgdTMySWR4KSkKKyAgICAgICAgeworICAgICAgICAgICAgcG9ydC0+UFVTRUwgPSAocG9ydC0+UFVTRUwgJiB+KDB4M3VsIDw8ICh1MzJJZHggPDwgMSkpKSB8ICh1MzJNb2RlIDw8ICh1MzJJZHggPDwgMSkpOworICAgICAgICB9CisgICAgfQorfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEdQSU9fRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgR1BJT19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvaTJjLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDdhZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvaTJjLmMKQEAgLTAsMCArMSwxNDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgaTJjLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogJFJldmlzaW9uOiAyICQKKyAqICREYXRlOiAxNi8wOC8wMiA2OjAycCAkCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIEkyQyBTZXJpYWwgSW50ZXJmYWNlIENvbnRyb2xsZXIoSTJDKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBJMkNfRHJpdmVyIEkyQyBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIEkyQ19FWFBPUlRFRF9GVU5DVElPTlMgSTJDIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIHNwZWNpZnkgSTJDIENvbnRyb2xsZXIgYW5kIHNldCBDbG9jayBEaXZpZGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgICogQHBhcmFtW2luXSAgdTMyQnVzQ2xvY2sgVGhlIHRhcmdldCBJMkMgYnVzIGNsb2NrIGluIEh6CisgICoKKyAgKiBAcmV0dXJuICAgICBBY3R1YWwgSTJDIGJ1cyBjbG9jayBmcmVxdWVuY3kKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBlbmFibGUgdGhlIHNwZWNpZnkgSTJDIENvbnRyb2xsZXIgYW5kIHNldCBwcm9wZXIgQ2xvY2sgRGl2aWRlcgorICAqICAgICAgICAgICAgIGluIEkyQyBDTE9DSyBESVZJREVEIFJFR0lTVEVSIChJMkNMSykgYWNjb3JkaW5nIHRvIHRoZSB0YXJnZXQgSTJDIEJ1cyBjbG9jay4KKyAgKiAgICAgICAgICAgICBJMkMgQnVzIGNsb2NrID0gUENMSyAvICg0KihkaXZpZGVyKzEpLgorICAqCisgICovCit1aW50MzJfdCBJMkNfT3BlbihJMkNfVCAqaTJjLCB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50MzJfdCB1MzJEaXY7CisgICAgdWludDMyX3QgdTMyUGNsazsKKworICAgIGlmKChpMmMgPT0gSTJDMSkgfHwgKGkyYyA9PSBJMkMxX05TKSkKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorCisgICAgdTMyRGl2ID0gKHVpbnQzMl90KSgoKHUzMlBjbGsgKiAxMHUpIC8gKHUzMkJ1c0Nsb2NrICogNHUpICsgNXUpIC8gMTB1IC0gMXUpOyAvKiBDb21wdXRlIHByb3BlciBkaXZpZGVyIGZvciBJMkMgY2xvY2sgKi8KKyAgICBpMmMtPkNMS0RJViA9IHUzMkRpdjsKKworICAgIC8qIEVuYWJsZSBJMkMgKi8KKyAgICBpMmMtPkNUTDAgfD0gSTJDX0NUTDBfSTJDRU5fTXNrOworCisgICAgcmV0dXJuICh1MzJQY2xrIC8gKCh1MzJEaXYgKyAxdSkgPDwgMnUpKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBzcGVjaWZ5IEkyQyBDb250cm9sbGVyCisgICoKKyAgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgICAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFJlc2V0IEkyQyBDb250cm9sbGVyIGFuZCBkaXNhYmxlIHNwZWNpZnkgSTJDIHBvcnQuCisgICAgKgorICAqLworCit2b2lkIEkyQ19DbG9zZShJMkNfVCAqaTJjKQoreworICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICB7CisgICAgICAgIC8qIFJlc2V0IEkyQyBDb250cm9sbGVyICovCisgICAgICAgIGlmKGkyYyA9PSBJMkMwKQorICAgICAgICB7CisgICAgICAgICAgICBTWVMtPklQUlNUMSB8PSBTWVNfSVBSU1QxX0kyQzBSU1RfTXNrOworICAgICAgICAgICAgU1lTLT5JUFJTVDEgJj0gflNZU19JUFJTVDFfSTJDMFJTVF9Nc2s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihpMmMgPT0gSTJDMSkKKyAgICAgICAgeworICAgICAgICAgICAgU1lTLT5JUFJTVDEgfD0gU1lTX0lQUlNUMV9JMkMxUlNUX01zazsKKyAgICAgICAgICAgIFNZUy0+SVBSU1QxICY9IH5TWVNfSVBSU1QxX0kyQzFSU1RfTXNrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoaTJjID09IEkyQzIpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNZUy0+SVBSU1QxIHw9IFNZU19JUFJTVDFfSTJDMlJTVF9Nc2s7CisgICAgICAgICAgICBTWVMtPklQUlNUMSAmPSB+U1lTX0lQUlNUMV9JMkMyUlNUX01zazsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBEaXNhYmxlIEkyQyAqLworICAgIGkyYy0+Q1RMMCAmPSB+STJDX0NUTDBfSTJDRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDbGVhciBUaW1lLW91dCBDb3VudGVyIGZsYWcKKyAgKgorICAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAgICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgV2hlbiBUaW1lLW91dCBmbGFnIHdpbGwgYmUgc2V0LCB1c2UgdGhpcyBmdW5jdGlvbiB0byBjbGVhciBJMkMgQnVzIFRpbWUtb3V0IGNvdW50ZXIgZmxhZyAuCisgICAgKgorICAqLwordm9pZCBJMkNfQ2xlYXJUaW1lb3V0RmxhZyhJMkNfVCAqaTJjKQoreworICAgIGkyYy0+VE9DVEwgfD0gSTJDX1RPQ1RMX1RPSUZfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQ29udHJvbCBiaXQgb2YgSTJDIENvbnRyb2xsZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAgKiBAcGFyYW1baW5dICB1OFN0YXJ0ICAgICBTZXQgSTJDIFNUQVJUIGNvbmRpdGlvbgorICAqIEBwYXJhbVtpbl0gIHU4U3RvcCAgICAgIFNldCBJMkMgU1RPUCBjb25kaXRpb24KKyAgKiBAcGFyYW1baW5dICB1OFNpICAgICAgICBDbGVhciBTSSBmbGFnCisgICogQHBhcmFtW2luXSAgdThBY2sgICAgICAgU2V0IEkyQyBBQ0sgYml0CisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gc2V0IEkyQyBDb250cm9sIGJpdCBvZiBJMkMgQnVzIHByb3RvY29sLgorICAqCisgICovCit2b2lkIEkyQ19UcmlnZ2VyKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTdGFydCwgdWludDhfdCB1OFN0b3AsIHVpbnQ4X3QgdThTaSwgdWludDhfdCB1OEFjaykKK3sKKyAgICB1aW50MzJfdCB1MzJSZWcgPSAwdTsKKworICAgIGlmKHU4U3RhcnQpCisgICAgeworICAgICAgICB1MzJSZWcgfD0gSTJDX0NUTF9TVEE7CisgICAgfQorICAgIGlmKHU4U3RvcCkKKyAgICB7CisgICAgICAgIHUzMlJlZyB8PSBJMkNfQ1RMX1NUTzsKKyAgICB9CisgICAgaWYodThTaSkKKyAgICB7CisgICAgICAgIHUzMlJlZyB8PSBJMkNfQ1RMX1NJOworICAgIH0KKyAgICBpZih1OEFjaykKKyAgICB7CisgICAgICAgIHUzMlJlZyB8PSBJMkNfQ1RMX0FBOworICAgIH0KKworICAgIGkyYy0+Q1RMMCA9IChpMmMtPkNUTDAgJiB+MHgzQ3UpIHwgdTMyUmVnOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIEludGVycnVwdCBvZiBJMkMgQ29udHJvbGxlcgorICAqCisgICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGRpc2FibGUgSTJDIGludGVycnVwdAorICAqCisgICovCit2b2lkIEkyQ19EaXNhYmxlSW50KEkyQ19UICppMmMpCit7CisgICAgaTJjLT5DVEwwICY9IH5JMkNfQ1RMMF9JTlRFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBJbnRlcnJ1cHQgb2YgSTJDIENvbnRyb2xsZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBlbmFibGUgSTJDIGludGVycnVwdAorICAqCisgICovCit2b2lkIEkyQ19FbmFibGVJbnQoSTJDX1QgKmkyYykKK3sKKyAgICBpMmMtPkNUTDAgfD0gSTJDX0NUTDBfSU5URU5fTXNrOworfQorCisvKioKKyAqIEBicmllZiAgICAgIEdldCBJMkMgQnVzIENsb2NrCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBUaGUgYWN0dWFsIEkyQyBCdXMgY2xvY2sgaW4gSHoKKyAqCisgKiBAZGV0YWlscyAgICBUbyBnZXQgdGhlIGFjdHVhbCBJMkMgQnVzIENsb2NrIGZyZXF1ZW5jeS4KKyAqLwordWludDMyX3QgSTJDX0dldEJ1c0Nsb2NrRnJlcShJMkNfVCAqaTJjKQoreworICAgIHVpbnQzMl90IHUzMkRpdmlkZXIgPSBpMmMtPkNMS0RJVjsKKyAgICB1aW50MzJfdCB1MzJQY2xrOworCisgICAgaWYoKGkyYyA9PSBJMkMxKSB8fCAoaTJjID09IEkyQzFfTlMpKQorICAgIHsKKyAgICAgICAgdTMyUGNsayA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyUGNsayA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICB9CisKKyAgICByZXR1cm4gKHUzMlBjbGsgLyAoKHUzMkRpdmlkZXIgKyAxdSkgPDwgMnUpKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBTZXQgSTJDIEJ1cyBDbG9jaworICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiBAcGFyYW1baW5dICB1MzJCdXNDbG9jayAgVGhlIHRhcmdldCBJMkMgQnVzIENsb2NrIGluIEh6CisgKgorICogQHJldHVybiAgICAgVGhlIGFjdHVhbCBJMkMgQnVzIENsb2NrIGluIEh6CisgKgorICogQGRldGFpbHMgICAgVG8gc2V0IHRoZSBhY3R1YWwgSTJDIEJ1cyBDbG9jayBmcmVxdWVuY3kuCisgKi8KK3VpbnQzMl90IEkyQ19TZXRCdXNDbG9ja0ZyZXEoSTJDX1QgKmkyYywgdWludDMyX3QgdTMyQnVzQ2xvY2spCit7CisgICAgdWludDMyX3QgdTMyRGl2OworICAgIHVpbnQzMl90IHUzMlBjbGs7CisKKyAgICBpZigoaTJjID09IEkyQzEpIHx8IChpMmMgPT0gSTJDMV9OUykpCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJQY2xrID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKworICAgIHUzMkRpdiA9ICh1aW50MzJfdCkoKCh1MzJQY2xrICogMTB1KSAvICh1MzJCdXNDbG9jayAqIDR1KSArIDV1KSAvIDEwdSAtIDF1KTsgLyogQ29tcHV0ZSBwcm9wZXIgZGl2aWRlciBmb3IgSTJDIGNsb2NrICovCisgICAgaTJjLT5DTEtESVYgPSB1MzJEaXY7CisKKyAgICByZXR1cm4gKHUzMlBjbGsgLyAoKHUzMkRpdiArIDF1KSA8PCAydSkpOworfQorCisvKioKKyAqIEBicmllZiAgICAgIEdldCBJbnRlcnJ1cHQgRmxhZworICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgSTJDIGludGVycnVwdCBmbGFnIHN0YXR1cworICoKKyAqIEBkZXRhaWxzICAgIFRvIGdldCBJMkMgQnVzIGludGVycnVwdCBmbGFnLgorICovCit1aW50MzJfdCBJMkNfR2V0SW50RmxhZyhJMkNfVCAqaTJjKQoreworICAgIHJldHVybiAoKGkyYy0+Q1RMMCAmIEkyQ19DVEwwX1NJX01zaykgPT0gSTJDX0NUTDBfU0lfTXNrID8gMXVsIDogMHVsKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBHZXQgSTJDIEJ1cyBTdGF0dXMgQ29kZQorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgSTJDIFN0YXR1cyBDb2RlCisgKgorICogQGRldGFpbHMgICAgVG8gZ2V0IEkyQyBCdXMgU3RhdHVzIENvZGUuCisgKi8KK3VpbnQzMl90IEkyQ19HZXRTdGF0dXMoSTJDX1QgKmkyYykKK3sKKyAgICByZXR1cm4gKGkyYy0+U1RBVFVTMCk7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgUmVhZCBhIEJ5dGUgZnJvbSBJMkMgQnVzCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBJMkMgRGF0YQorICoKKyAqIEBkZXRhaWxzICAgIFRvIHJlYWQgYSBieXRlcyBkYXRhIGZyb20gc3BlY2lmeSBJMkMgcG9ydC4KKyAqLwordWludDhfdCBJMkNfR2V0RGF0YShJMkNfVCAqaTJjKQoreworICAgIHJldHVybiAodWludDhfdCkoaTJjLT5EQVQpOworfQorCisvKioKKyAqIEBicmllZiAgICAgIFNlbmQgYSBieXRlIHRvIEkyQyBCdXMKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICogQHBhcmFtW2luXSAgdThEYXRhICAgICAgIFRoZSBkYXRhIHRvIHNlbmQgdG8gSTJDIGJ1cworICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gd3JpdGUgYSBieXRlIHRvIHNwZWNpZmllZCBJMkMgcG9ydAorICovCit2b2lkIEkyQ19TZXREYXRhKEkyQ19UICppMmMsIHVpbnQ4X3QgdThEYXRhKQoreworICAgIGkyYy0+REFUID0gdThEYXRhOworfQorCisvKioKKyAqIEBicmllZiAgICAgIFNldCA3LWJpdCBTbGF2ZSBBZGRyZXNzIGFuZCBHQyBNb2RlCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqIEBwYXJhbVtpbl0gIHU4U2xhdmVObyAgICBTZXQgdGhlIG51bWJlciBvZiBJMkMgYWRkcmVzcyByZWdpc3RlciAoMH4zKQorICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgIDctYml0IHNsYXZlIGFkZHJlc3MKKyAqIEBwYXJhbVtpbl0gIHU4R0NNb2RlICAgICBFbmFibGUvRGlzYWJsZSBHQyBtb2RlIChJMkNfR0NNT0RFX0VOQUJMRSAvIEkyQ19HQ01PREVfRElTQUJMRSkKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCA3LWJpdCBzbGF2ZSBhZGRyZXNzZXMgaW4gSTJDIFNMQVZFIEFERFJFU1MgUkVHSVNURVIgKEkyQ0FERFIwfjMpCisgKiAgICAgICAgICAgICBhbmQgZW5hYmxlIEdDIE1vZGUuCisgKgorICovCit2b2lkIEkyQ19TZXRTbGF2ZUFkZHIoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlTm8sIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThHQ01vZGUpCit7CisgICAgc3dpdGNoKHU4U2xhdmVObykKKyAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGkyYy0+QUREUjEgID0gKCh1aW50MzJfdCl1OFNsYXZlQWRkciA8PCAxKSB8IHU4R0NNb2RlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGkyYy0+QUREUjIgID0gKCh1aW50MzJfdCl1OFNsYXZlQWRkciA8PCAxKSB8IHU4R0NNb2RlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGkyYy0+QUREUjMgID0gKCh1aW50MzJfdCl1OFNsYXZlQWRkciA8PCAxKSB8IHU4R0NNb2RlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGkyYy0+QUREUjAgID0gKCh1aW50MzJfdCl1OFNsYXZlQWRkciA8PCAxKSB8IHU4R0NNb2RlOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiAgICAgIENvbmZpZ3VyZSB0aGUgbWFzayBiaXRzIG9mIDctYml0IFNsYXZlIEFkZHJlc3MKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqIEBwYXJhbVtpbl0gIHU4U2xhdmVObyAgICAgICAgU2V0IHRoZSBudW1iZXIgb2YgSTJDIGFkZHJlc3MgbWFzayByZWdpc3RlciAoMH4zKQorICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHJNYXNrICBBIGJ5dGUgZm9yIHNsYXZlIGFkZHJlc3MgbWFzaworICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IDctYml0IHNsYXZlIGFkZHJlc3Nlcy4KKyAqCisgKi8KK3ZvaWQgSTJDX1NldFNsYXZlQWRkck1hc2soSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlTm8sIHVpbnQ4X3QgdThTbGF2ZUFkZHJNYXNrKQoreworICAgIHN3aXRjaCh1OFNsYXZlTm8pCisgICAgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpMmMtPkFERFJNU0sxICA9ICh1aW50MzJfdCl1OFNsYXZlQWRkck1hc2sgPDwgMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpMmMtPkFERFJNU0syICA9ICh1aW50MzJfdCl1OFNsYXZlQWRkck1hc2sgPDwgMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpMmMtPkFERFJNU0szICA9ICh1aW50MzJfdCl1OFNsYXZlQWRkck1hc2sgPDwgMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDA6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpMmMtPkFERFJNU0swICA9ICh1aW50MzJfdCl1OFNsYXZlQWRkck1hc2sgPDwgMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgICAgICBFbmFibGUgVGltZS1vdXQgQ291bnRlciBGdW5jdGlvbiBhbmQgc3VwcG9ydCBMb25nIFRpbWUtb3V0CisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiBAcGFyYW1baW5dICB1OExvbmdUaW1lb3V0ICAgIENvbmZpZ3VyZSBESVY0IHRvIGVuYWJsZSBMb25nIFRpbWUtb3V0ICgwLzEpCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlIFRpbWUtb3V0IENvdW50ZXIgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyZSBESVY0IHRvIHN1cHBvcnQgTG9uZworICogICAgICAgICAgICAgVGltZS1vdXQuCisgKgorICovCit2b2lkIEkyQ19FbmFibGVUaW1lb3V0KEkyQ19UICppMmMsIHVpbnQ4X3QgdThMb25nVGltZW91dCkKK3sKKyAgICBpZih1OExvbmdUaW1lb3V0KQorICAgIHsKKyAgICAgICAgaTJjLT5UT0NUTCB8PSBJMkNfVE9DVExfVE9DRElWNF9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGkyYy0+VE9DVEwgJj0gfkkyQ19UT0NUTF9UT0NESVY0X01zazsKKyAgICB9CisKKyAgICBpMmMtPlRPQ1RMIHw9IEkyQ19UT0NUTF9UT0NFTl9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBUaW1lLW91dCBDb3VudGVyIEZ1bmN0aW9uCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgVG8gZGlzYWJsZSBUaW1lLW91dCBDb3VudGVyIGZ1bmN0aW9uIGluIEkyQ1RPQyByZWdpc3Rlci4KKyAqCisgKi8KK3ZvaWQgSTJDX0Rpc2FibGVUaW1lb3V0KEkyQ19UICppMmMpCit7CisgICAgaTJjLT5UT0NUTCAmPSB+STJDX1RPQ1RMX1RPQ0VOX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBFbmFibGUgSTJDIFdha2UtdXAgRnVuY3Rpb24KKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUbyBlbmFibGUgV2FrZS11cCBmdW5jdGlvbiBvZiBJMkMgV2FrZS11cCBjb250cm9sIHJlZ2lzdGVyLgorICoKKyAqLwordm9pZCBJMkNfRW5hYmxlV2FrZXVwKEkyQ19UICppMmMpCit7CisgICAgaTJjLT5XS0NUTCB8PSBJMkNfV0tDVExfV0tFTl9Nc2s7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBJMkMgV2FrZS11cCBGdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRvIGRpc2FibGUgV2FrZS11cCBmdW5jdGlvbiBvZiBJMkMgV2FrZS11cCBjb250cm9sIHJlZ2lzdGVyLgorICoKKyAqLwordm9pZCBJMkNfRGlzYWJsZVdha2V1cChJMkNfVCAqaTJjKQoreworICAgIGkyYy0+V0tDVEwgJj0gfkkyQ19XS0NUTF9XS0VOX01zazsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBUbyBnZXQgU01CdXMgU3RhdHVzCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBTTUJ1cyBzdGF0dXMKKyAqCisgKiBAZGV0YWlscyAgICBUbyBnZXQgdGhlIEJ1cyBNYW5hZ2VtZW50IHN0YXR1cyBvZiBJMkNfQlVTU1RTIHJlZ2lzdGVyCisgKgorICovCit1aW50MzJfdCBJMkNfU01CdXNHZXRTdGF0dXMoSTJDX1QgKmkyYykKK3sKKyAgICByZXR1cm4gKGkyYy0+QlVTU1RTKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICBDbGVhciBTTUJ1cyBJbnRlcnJ1cHQgRmxhZworICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICogQHBhcmFtW2luXSAgdThTTUJ1c0ludEZsYWcgICBTcGVjaWZ5IFNNQnVzIGludGVycnVwdCBmbGFnCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFRvIGNsZWFyIGZsYWdzIG9mIEkyQ19CVVNTVFMgc3RhdHVzIHJlZ2lzdGVyIGlmIGludGVycnVwdCBzZXQuCisgKgorICovCit2b2lkIEkyQ19TTUJ1c0NsZWFySW50ZXJydXB0RmxhZyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U01CdXNJbnRGbGFnKQoreworICAgIGkyYy0+QlVTU1RTID0gdThTTUJ1c0ludEZsYWc7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgU2V0IFNNQnVzIEJ5dGVzIENvdW50cyBvZiBUcmFuc21pc3Npb24gb3IgUmVjZXB0aW9uCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiBAcGFyYW1baW5dICB1MzJQa3RTaXplICAgICAgIFRyYW5zbWl0IC8gUmVjZWl2ZSBieXRlcworICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGUgdHJhbnNtaXNzaW9uIG9yIHJlY2VpdmUgYnl0ZSBudW1iZXIgaW4gb25lIHRyYW5zYWN0aW9uIHdoZW4gUEVDRU4gaXMgc2V0LiBUaGUgbWF4aW11bSBpcyAyNTUgYnl0ZXMuCisgKgorICovCit2b2lkIEkyQ19TTUJ1c1NldFBhY2tldEJ5dGVDb3VudChJMkNfVCAqaTJjLCB1aW50MzJfdCB1MzJQa3RTaXplKQoreworICAgIGkyYy0+UEtUU0laRSA9IHUzMlBrdFNpemU7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgSW5pdCBTTUJ1cyBIb3N0L0RldmljZSBNb2RlCisgKgorICogQHBhcmFtW2luXSAgaTJjICAgICAgICAgICAgICBTcGVjaWZ5IEkyQyBwb3J0CisgKiBAcGFyYW1baW5dICB1OEhvc3REZXZpY2UgICAgIEluaXQgU01CdXMgcG9ydCBtb2RlKEkyQ19TTUJIX0VOQUJMRSgxKS9JMkNfU01CRF9FTkFCTEUoMCkpCisgKgorICogQHJldHVybiAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgIFVzaW5nIFNNQnVzIGNvbW11bmljYXRpb24gbXVzdCBzcGVjaWZ5IHRoZSBwb3J0IGlzIGEgSG9zdCBvciBhIERldmljZS4KKyAqCisgKi8KK3ZvaWQgSTJDX1NNQnVzT3BlbihJMkNfVCAqaTJjLCB1aW50OF90IHU4SG9zdERldmljZSkKK3sKKyAgICAvKiBDbGVhciAgQk1IRU4sIEJNREVOIG9mIEJVU0NUTCBSZWdpc3RlciAqLworICAgIGkyYy0+QlVTQ1RMICY9ICB+KEkyQ19CVVNDVExfQk1IRU5fTXNrIHwgSTJDX0JVU0NUTF9CTURFTl9Nc2spOworCisgICAgLyogU2V0IFNNQnVzIEhvc3QvRGV2aWNlIE1vZGUsIGFuZCBlbmFibGUgQnVzIE1hbmFnZW1lbnQqLworICAgIGlmKHU4SG9zdERldmljZSA9PSAodWludDhfdClJMkNfU01CSF9FTkFCTEUpCisgICAgeworICAgICAgICBpMmMtPkJVU0NUTCB8PSAoSTJDX0JVU0NUTF9CTUhFTl9Nc2sgfCBJMkNfQlVTQ1RMX0JVU0VOX01zayk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGkyYy0+QlVTQ1RMIHw9IChJMkNfQlVTQ1RMX0JNREVOX01zayB8IEkyQ19CVVNDVExfQlVTRU5fTXNrKTsKKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgRGlzYWJsZSBTTUJ1cyBmdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBEaXNhYmxlIGFsbCBTTUJ1cyBmdW5jdGlvbiBpbmNsdWRlIEJ1cyBkaXNhYmxlLCBDUkMgY2hlY2ssIEFja25vd2xlZGdlIGJ5IG1hbnVhbCwgSG9zdC9EZXZpY2UgTW9kZS4KKyAqCisgKi8KK3ZvaWQgSTJDX1NNQnVzQ2xvc2UoSTJDX1QgKmkyYykKK3sKKworICAgIGkyYy0+QlVTQ1RMID0gMHgwMFU7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgRW5hYmxlIFNNQnVzIFBFQyBUcmFuc21pdCBGdW5jdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICogQHBhcmFtW2luXSAgdThQRUNUeEVuICAgICAgICBDUkMgdHJhbnNtaXQgZW5hYmxlKFBFQ1RYX0VOQUJMRSkgb3IgZGlzYWJsZShQRUNUWF9ESVNBQkxFKQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBXaGVuIGVuYWJsZSBDUkMgY2hlY2sgZnVuY3Rpb24sIHRoZSBIb3N0IG9yIERldmljZSBuZWVkcyB0byB0cmFuc21pdCBDUkMgYnl0ZS4KKyAqCisgKi8KK3ZvaWQgSTJDX1NNQnVzUEVDVHhFbmFibGUoSTJDX1QgKmkyYywgdWludDhfdCB1OFBFQ1R4RW4pCit7CisgICAgaTJjLT5CVVNDVEwgJj0gfkkyQ19CVVNDVExfUEVDVFhFTl9Nc2s7CisKKyAgICBpZih1OFBFQ1R4RW4pCisgICAgeworICAgICAgICBpMmMtPkJVU0NUTCB8PSAoSTJDX0JVU0NUTF9QRUNFTl9Nc2sgfCBJMkNfQlVTQ1RMX1BFQ1RYRU5fTXNrKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaTJjLT5CVVNDVEwgfD0gSTJDX0JVU0NUTF9QRUNFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiAgICAgIEdldCBTTUJ1cyBDUkMgdmFsdWUKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqCisgKiBAcmV0dXJuICAgICBBIGJ5dGUgaXMgcGFja2V0IGVycm9yIGNoZWNrIHZhbHVlCisgKgorICogQGRldGFpbHMgICAgVGhlIENSQyBjaGVjayB2YWx1ZSBhZnRlciBhIHRyYW5zbWlzc2lvbiBvciBhIHJlY2VwdGlvbiBieSBjb3VudCBieSB1c2luZyBDUkM4CisgKgorICovCit1aW50OF90IEkyQ19TTUJ1c0dldFBFQ1ZhbHVlKEkyQ19UICppMmMpCit7CisgICAgcmV0dXJuICh1aW50OF90KWkyYy0+UEtUQ1JDOworfQorCisvKioKKyAqIEBicmllZiAgICAgIENhbGN1bGF0ZSBUaW1lLW91dCBvZiBTTUJ1cyBpZGxlIHBlcmlvZAorICoKKyAqIEBwYXJhbVtpbl0gIGkyYyAgICAgICAgICAgICAgU3BlY2lmeSBJMkMgcG9ydAorICogQHBhcmFtW2luXSAgdTMyVXMgICAgICAgICAgICAgICBUaW1lLW91dCBsZW5ndGgodXMpCisgKiBAcGFyYW1baW5dICB1MzJIY2xrICAgICAgICAgIEkyQyBwZXJpcGhlcmFsIGNsb2NrIGZyZXF1ZW5jeQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IFNNQnVzIFRpbWUtb3V0IGxlbmd0aCB3aGVuIGJ1cyBpcyBpbiBJZGxlIHN0YXRlLgorICoKKyAqLworCit2b2lkIEkyQ19TTUJ1c0lkbGVUaW1lb3V0KEkyQ19UICppMmMsIHVpbnQzMl90IHUzMlVzLCB1aW50MzJfdCB1MzJIY2xrKQoreworICAgIHVpbnQzMl90ICB1MzJEaXYsIHUzMkhjbGtLSHo7CisKKyAgICBpMmMtPkJVU0NUTCB8PSBJMkNfQlVTQ1RMX1RJRExFX01zazsKKyAgICB1MzJIY2xrS0h6ID0gdTMySGNsayAvIDEwMDBVOworICAgIHUzMkRpdiA9ICgoKHUzMlVzICogdTMySGNsa0tIeikgLyAxMDAwVSkgPj4gMlUpIC0gMVU7CisgICAgaWYodTMyRGl2ID4gMjU1VSkKKyAgICB7CisgICAgICAgIGkyYy0+QlVTVE9VVCA9IDB4RkZVOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpMmMtPkJVU1RPVVQgPSB1MzJEaXY7CisgICAgfQorCit9CisKKy8qKgorICogQGJyaWVmICAgICAgQ2FsY3VsYXRlIFRpbWUtb3V0IG9mIFNNQnVzIGFjdGl2ZSBwZXJpb2QKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqIEBwYXJhbVtpbl0gIG1zICAgICAgICAgICAgICAgVGltZS1vdXQgbGVuZ3RoKG1zKQorICogQHBhcmFtW2luXSAgdTMyUGNsayAgICAgICAgICBwZXJpcGhlcmFsIGNsb2NrIGZyZXF1ZW5jeQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IFNNQnVzIFRpbWUtb3V0IGxlbmd0aCB3aGVuIGJ1cyBpcyBpbiBhY3RpdmUgc3RhdGUuCisgKiAgICAgICAgICAgICBUaW1lLW91dCBsZW5ndGggaXMgY2FsY3VsYXRlIHRoZSBTQ0wgbGluZSAib25lIGNsb2NrIiBwdWxsIGxvdyB0aW1pbmcuCisgKgorICovCisKK3ZvaWQgSTJDX1NNQnVzVGltZW91dChJMkNfVCAqaTJjLCB1aW50MzJfdCBtcywgdWludDMyX3QgdTMyUGNsaykKK3sKKyAgICB1aW50MzJfdCB1MzJEaXYsIHUzMlBjbGtfa0h6OworCisgICAgaTJjLT5CVVNDVEwgJj0gfkkyQ19CVVNDVExfVElETEVfTXNrOworCisgICAgLyogRElWNCBkaXNhYmxlZCAqLworICAgIGkyYy0+VE9DVEwgJj0gfkkyQ19UT0NUTF9UT0NFTl9Nc2s7CisgICAgdTMyUGNsa19rSHogPSB1MzJQY2xrIC8gMTAwMFU7CisgICAgdTMyRGl2ID0gKChtcyAqIHUzMlBjbGtfa0h6KSAvICgxNlUgKiAxMDI0VSkpIC0gMVU7CisgICAgaWYodTMyRGl2IDw9IDB4RkZVKQorICAgIHsKKyAgICAgICAgaTJjLT5CVVNUT1VUID0gdTMyRGl2OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBESVY0IGVuYWJsZWQgKi8KKyAgICAgICAgaTJjLT5UT0NUTCB8PSBJMkNfVE9DVExfVE9DRU5fTXNrOworICAgICAgICBpMmMtPkJVU1RPVVQgPSAoKChtcyAqIHUzMlBjbGtfa0h6KSAvICgxNlUgKiAxMDI0VSAqIDRVKSkgLSAxVSkgJiAweEZGVTsgLyogVGhlIG1heCB2YWx1ZSBpcyAyNTUgKi8KKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgQ2FsY3VsYXRlIEN1bXVsYXRpdmUgQ2xvY2sgbG93IFRpbWUtb3V0IG9mIFNNQnVzIGFjdGl2ZSBwZXJpb2QKKyAqCisgKiBAcGFyYW1baW5dICBpMmMgICAgICAgICAgICAgIFNwZWNpZnkgSTJDIHBvcnQKKyAqIEBwYXJhbVtpbl0gIG1zICAgICAgICAgICAgICAgVGltZS1vdXQgbGVuZ3RoKG1zKQorICogQHBhcmFtW2luXSAgdTMyUGNsayAgICAgICAgICBwZXJpcGhlcmFsIGNsb2NrIGZyZXF1ZW5jeQorICoKKyAqIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IFNNQnVzIFRpbWUtb3V0IGxlbmd0aCB3aGVuIGJ1cyBpcyBpbiBBY3RpdmUgc3RhdGUuCisgKiAgICAgICAgICAgICBUaW1lLW91dCBsZW5ndGggaXMgY2FsY3VsYXRlIHRoZSBTQ0wgbGluZSAiY2xvY2tzIiBsb3cgY3VtdWxhdGl2ZSB0aW1pbmcuCisgKgorICovCisKK3ZvaWQgSTJDX1NNQnVzQ2xvY2tMb1RpbWVvdXQoSTJDX1QgKmkyYywgdWludDMyX3QgbXMsIHVpbnQzMl90IHUzMlBjbGspCit7CisgICAgdWludDMyX3QgdTMyRGl2LCB1MzJQY2xrX2tIejsKKworICAgIGkyYy0+QlVTQ1RMICY9IH5JMkNfQlVTQ1RMX1RJRExFX01zazsKKworICAgIC8qIERJVjQgZGlzYWJsZWQgKi8KKyAgICBpMmMtPlRPQ1RMICY9IH5JMkNfVE9DVExfVE9DRU5fTXNrOworICAgIHUzMlBjbGtfa0h6ID0gdTMyUGNsayAvIDEwMDBVOworICAgIHUzMkRpdiA9ICgobXMgKiB1MzJQY2xrX2tIeikgLyAoMTZVICogMTAyNFUpKSAtIDFVOworICAgIGlmKHUzMkRpdiA8PSAweEZGVSkKKyAgICB7CisgICAgICAgIGkyYy0+Q0xLVE9VVCA9IHUzMkRpdjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRElWNCBlbmFibGVkICovCisgICAgICAgIGkyYy0+VE9DVEwgfD0gSTJDX1RPQ1RMX1RPQ0VOX01zazsKKyAgICAgICAgaTJjLT5DTEtUT1VUID0gKCgobXMgKiB1MzJQY2xrX2tIeikgLyAoMTZVICogMTAyNFUgKiA0VSkpIC0gMVUpICYgMHhGRlU7IC8qIFRoZSBtYXggdmFsdWUgaXMgMjU1ICovCisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBXcml0ZSBhIGJ5dGUgdG8gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICppMmMgICAgICAgICAgICBQb2ludCB0byBJMkMgcGVyaXBoZXJhbAorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1OERhdGEgICAgICAgICAgICBXcml0ZSBhIGJ5dGUgZGF0YSB0byBTbGF2ZQorICAqCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgICAgIFdyaXRlIGRhdGEgc3VjY2VzcworICAqIEByZXR2YWwgICAgIDEgICAgICAgICAgICAgICBXcml0ZSBkYXRhIGZhaWwsIG9yIGJ1cyBvY2N1cnMgZXJyb3IgZXZlbnRzCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciB3cml0ZSBhIGJ5dGUgZGF0YSB0byBTbGF2ZS4KKyAgKgorICAqLworCit1aW50OF90IEkyQ19Xcml0ZUJ5dGUoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGEpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxdSwgdThFcnIgPSAwdSwgdThDdHJsID0gMHU7CisKKyAgICBJMkNfU1RBUlQoaTJjKTsKKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAwdSkpOyAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDE4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCB1OERhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgZGF0YSB0byBJMkNEQVQgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgTkFDSyAqLworICAgICAgICAgICAgY2FzZSAweDMwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFzdGVyIHRyYW5zbWl0IGRhdGEgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mjh1OgorICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDB1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDM4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorICAgIHJldHVybiAodThFcnIgfCB1OFhmZXJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gKFN1Y2Nlc3MpLyhGYWlsKSBzdGF0dXMgKi8KK30KKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgbXVsdGkgYnl0ZXMgdG8gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICppMmMgICAgICAgICAgICBQb2ludCB0byBJMkMgcGVyaXBoZXJhbAorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICAqYXU4RGF0YSAgICAgICAgICAgUG9pbnRlciB0byBhcnJheSB0byB3cml0ZSBkYXRhIHRvIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyd0xlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gd3JpdGUgdG8gU2xhdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEEgbGVuZ3RoIG9mIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4KKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBJMkMgTWFzdGVyIHdyaXRlIG11bHRpIGJ5dGVzIGRhdGEgdG8gU2xhdmUuCisgICoKKyAgKi8KKwordWludDMyX3QgSTJDX1dyaXRlTXVsdGlCeXRlcyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IGF1OERhdGFbXSwgdWludDMyX3QgdTMyd0xlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCB1OEN0cmwgPSAwdTsKKyAgICB1aW50MzJfdCB1MzJ0eExlbiA9IDB1OworCisgICAgSTJDX1NUQVJUKGkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAwdSkpOyAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDE4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgIGNhc2UgMHgyOHU6CisgICAgICAgICAgICAgICAgaWYodTMydHhMZW4gPCB1MzJ3TGVuKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgYXU4RGF0YVt1MzJ0eExlbisrXSk7ICAgICAgICAgICAgICAgIC8qIFdyaXRlIERhdGEgdG8gSTJDREFUICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDB1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgTkFDSyAqLworICAgICAgICAgICAgY2FzZSAweDMwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFzdGVyIHRyYW5zbWl0IGRhdGEgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mzh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEkyQ19TRVRfQ09OVFJPTF9SRUcoaTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gSTJDX0NUTCByZWdpc3RlciAqLworICAgIH0KKyAgICByZXR1cm4gdTMydHhMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZCAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IGEgYnl0ZSByZWdpc3RlciBhZGRyZXNzIGFuZCB3cml0ZSBhIGJ5dGUgdG8gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICppMmMgICAgICAgICAgICBQb2ludCB0byBJMkMgcGVyaXBoZXJhbAorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1OERhdGFBZGRyICAgICAgU3BlY2lmeSBhIGFkZHJlc3MgKDEgYnl0ZSkgb2YgZGF0YSB3cml0ZSB0bworICAqIEBwYXJhbVtpbl0gIHU4RGF0YSAgICAgICAgICAgIEEgYnl0ZSBkYXRhIHRvIHdyaXRlIGl0IHRvIFNsYXZlCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgICAgICAgICAgICAgV3JpdGUgZGF0YSBzdWNjZXNzCisgICogQHJldHZhbCAgICAgMSAgICAgICAgICAgICAgIFdyaXRlIGRhdGEgZmFpbCwgb3IgYnVzIG9jY3VycyBlcnJvciBldmVudHMKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBJMkMgTWFzdGVyIHNwZWNpZnkgYSBhZGRyZXNzIHRoYXQgZGF0YSB3cml0ZSB0byBpbiBTbGF2ZS4KKyAgKgorICAqLworCit1aW50OF90IEkyQ19Xcml0ZUJ5dGVPbmVSZWcoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90IHU4RGF0YSkKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCB1OEN0cmwgPSAwdTsKKyAgICB1aW50MzJfdCB1MzJ0eExlbiA9IDB1OworCisgICAgSTJDX1NUQVJUKGkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAwdSkpOyAgLyogU2VuZCBTbGF2ZSBhZGRyZXNzIHdpdGggd3JpdGUgYml0ICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDE4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCB1OERhdGFBZGRyKTsgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgTG8gYnl0ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MjB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgIGNhc2UgMHgzMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hc3RlciB0cmFuc21pdCBkYXRhIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDI4dToKKyAgICAgICAgICAgICAgICBpZih1MzJ0eExlbiA8IDF1KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgdThEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgdTMydHhMZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMHU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDM4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBJMkNfU0VUX0NPTlRST0xfUkVHKGkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgcmV0dXJuICh1OEVyciB8IHU4WGZlcmluZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAoU3VjY2VzcykvKEZhaWwpIHN0YXR1cyAqLworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgYSBieXRlIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHdyaXRlIG11bHRpIGJ5dGVzIHRvIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqaTJjICAgICAgICAgICAgUG9pbnQgdG8gSTJDIHBlcmlwaGVyYWwKKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdThEYXRhQWRkciAgICAgIFNwZWNpZnkgYSBhZGRyZXNzICgxIGJ5dGUpIG9mIGRhdGEgd3JpdGUgdG8KKyAgKiBAcGFyYW1baW5dICAqYXU4RGF0YSAgICAgICAgICAgUG9pbnRlciB0byBhcnJheSB0byB3cml0ZSBkYXRhIHRvIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyd0xlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gd3JpdGUgdG8gU2xhdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEEgbGVuZ3RoIG9mIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4KKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBJMkMgTWFzdGVyIHNwZWNpZnkgYSBieXRlIGFkZHJlc3MgdGhhdCBtdWx0aSBkYXRhIGJ5dGVzIHdyaXRlIHRvIGluIFNsYXZlLgorICAqCisgICovCisKK3VpbnQzMl90IEkyQ19Xcml0ZU11bHRpQnl0ZXNPbmVSZWcoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90IGF1OERhdGFbXSwgdWludDMyX3QgdTMyd0xlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCB1OEN0cmwgPSAwdTsKKyAgICB1aW50MzJfdCB1MzJ0eExlbiA9IDB1OworCisgICAgSTJDX1NUQVJUKGkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAwdSkpOyAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgdThEYXRhQWRkcik7ICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIExvIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDIwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICBjYXNlIDB4MzB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXN0ZXIgdHJhbnNtaXQgZGF0YSBOQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyOHU6CisgICAgICAgICAgICAgICAgaWYodTMydHhMZW4gPCB1MzJ3TGVuKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgYXU4RGF0YVt1MzJ0eExlbisrXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDB1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBJMkNfQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMnR4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBieXRlcyBsZW5ndGggdGhhdCBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgKi8KK30KKworLyoqCisgICogQGJyaWVmICAgICAgU3BlY2lmeSB0d28gYnl0ZXMgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgV3JpdGUgYSBieXRlIHRvIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqaTJjICAgICAgICAgICAgUG9pbnQgdG8gSTJDIHBlcmlwaGVyYWwKKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdTE2RGF0YUFkZHIgICAgIFNwZWNpZnkgYSBhZGRyZXNzICgyIGJ5dGUpIG9mIGRhdGEgd3JpdGUgdG8KKyAgKiBAcGFyYW1baW5dICB1OERhdGEgICAgICAgICAgICBXcml0ZSBhIGJ5dGUgZGF0YSB0byBTbGF2ZQorICAqCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgICAgIFdyaXRlIGRhdGEgc3VjY2VzcworICAqIEByZXR2YWwgICAgIDEgICAgICAgICAgICAgICBXcml0ZSBkYXRhIGZhaWwsIG9yIGJ1cyBvY2N1cnMgZXJyb3IgZXZlbnRzCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciBzcGVjaWZ5IHR3byBieXRlcyBhZGRyZXNzIHRoYXQgZGF0YSB3cml0ZSB0byBpbiBTbGF2ZS4KKyAgKgorICAqLworCit1aW50OF90IEkyQ19Xcml0ZUJ5dGVUd29SZWdzKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQxNl90IHUxNkRhdGFBZGRyLCB1aW50OF90IHU4RGF0YSkKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCB1OEFkZHIgPSAxdSwgdThDdHJsID0gMHU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAwdSkpOyAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MTh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKHVpbnQ4X3QpKCh1MTZEYXRhQWRkciAmIDB4RkYwMHUpID4+IDh1KSk7ICAgIC8qIFdyaXRlIEhpIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDIwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgIGNhc2UgMHgzMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFzdGVyIHRyYW5zbWl0IGRhdGEgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyOHU6CisgICAgICAgICAgICAgICAgaWYodThBZGRyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKHVpbnQ4X3QpKHUxNkRhdGFBZGRyICYgMHhGRnUpKTsgICAgICAgLyogV3JpdGUgTG8gYnl0ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisgICAgICAgICAgICAgICAgICAgIHU4QWRkciA9IDB1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKCh1MzJ0eExlbiA8IDF1KSAmJiAodThBZGRyID09IDB1KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsIHU4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIHUzMnR4TGVuKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMHU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDM4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBJMkNfU0VUX0NPTlRST0xfUkVHKGkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gSTJDX0NUTCByZWdpc3RlciAqLworICAgIH0KKyAgICByZXR1cm4gKHU4RXJyIHwgdThYZmVyaW5nKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gKFN1Y2Nlc3MpLyhGYWlsKSBzdGF0dXMgKi8KK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IHR3byBieXRlcyByZWdpc3RlciBhZGRyZXNzIGFuZCB3cml0ZSBtdWx0aSBieXRlcyB0byBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKmkyYyAgICAgICAgICAgIFBvaW50IHRvIEkyQyBwZXJpcGhlcmFsCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHUxNkRhdGFBZGRyICAgICBTcGVjaWZ5IGEgYWRkcmVzcyAoMiBieXRlcykgb2YgZGF0YSB3cml0ZSB0bworICAqIEBwYXJhbVtpbl0gIGF1OERhdGFbXSAgICAgICAgICBBIGRhdGEgYXJyYXkgZm9yIHdyaXRlIGRhdGEgdG8gU2xhdmUKKyAgKiBAcGFyYW1baW5dICB1MzJ3TGVuICAgICAgICAgSG93IG1hbnkgYnl0ZXMgbmVlZCB0byB3cml0ZSB0byBTbGF2ZQorICAqCisgICogQHJldHVybiAgICAgQSBsZW5ndGggb2YgaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLgorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEkyQyBNYXN0ZXIgc3BlY2lmeSBhIGJ5dGUgYWRkcmVzcyB0aGF0IG11bHRpIGRhdGEgd3JpdGUgdG8gaW4gU2xhdmUuCisgICoKKyAgKi8KKwordWludDMyX3QgSTJDX1dyaXRlTXVsdGlCeXRlc1R3b1JlZ3MoSTJDX1QgKmkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDE2X3QgdTE2RGF0YUFkZHIsIHVpbnQ4X3QgYXU4RGF0YVtdLCB1aW50MzJfdCB1MzJ3TGVuKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMXUsIHU4RXJyID0gMHUsIHU4QWRkciA9IDF1LCB1OEN0cmwgPSAwdTsKKyAgICB1aW50MzJfdCB1MzJ0eExlbiA9IDB1OworCisgICAgSTJDX1NUQVJUKGkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworICAgIHdoaWxlKHU4WGZlcmluZyAmJiAodThFcnIgPT0gMHUpKQorICAgIHsKKyAgICAgICAgSTJDX1dBSVRfUkVBRFkoaTJjKSB7fQorICAgICAgICBzd2l0Y2goSTJDX0dFVF9TVEFUVVMoaTJjKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAweDA4dToKKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDF1KSB8IDB4MDB1KSk7ICAvKiBXcml0ZSBTTEErVyB0byBSZWdpc3RlciBJMkNEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAodWludDhfdCkoKHUxNkRhdGFBZGRyICYgMHhGRjAwdSkgPj4gOHUpKTsgICAgLyogV3JpdGUgSGkgYnl0ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MjB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgTkFDSyAqLworICAgICAgICAgICAgY2FzZSAweDMwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXN0ZXIgdHJhbnNtaXQgZGF0YSBOQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDI4dToKKyAgICAgICAgICAgICAgICBpZih1OEFkZHIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAodWludDhfdCkodTE2RGF0YUFkZHIgJiAweEZGdSkpOyAgICAgICAvKiBXcml0ZSBMbyBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgdThBZGRyID0gMHU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKHUzMnR4TGVuIDwgdTMyd0xlbikgJiYgKHU4QWRkciA9PSAwdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCBhdThEYXRhW3UzMnR4TGVuKytdKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIHRvIFJlZ2lzdGVyIEkyQ0RBVCovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMHU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDM4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBJMkNfU0VUX0NPTlRST0xfUkVHKGkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gSTJDX0NUTCByZWdpc3RlciAqLworICAgIH0KKyAgICByZXR1cm4gdTMydHhMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYnl0ZXMgbGVuZ3RoIHRoYXQgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgYSBieXRlIGZyb20gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICppMmMgICAgICAgICAgICBQb2ludCB0byBJMkMgcGVyaXBoZXJhbAorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKgorICAqIEByZXR1cm4gICAgIFJlYWQgYSBieXRlIGRhdGEgZnJvbSBTbGF2ZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEkyQyBNYXN0ZXIgdG8gcmVhZCBhIGJ5dGUgZGF0YSBmcm9tIFNsYXZlLgorICAqCisgICovCit1aW50OF90IEkyQ19SZWFkQnl0ZShJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMXUsIHU4RXJyID0gMHUsIHJkYXRhID0gMHUsIHU4Q3RybCA9IDB1OworCisgICAgSTJDX1NUQVJUKGkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworICAgIHdoaWxlKHU4WGZlcmluZyAmJiAodThFcnIgPT0gMHUpKQorICAgIHsKKyAgICAgICAgSTJDX1dBSVRfUkVBRFkoaTJjKSB7fQorICAgICAgICBzd2l0Y2goSTJDX0dFVF9TVEFUVVMoaTJjKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAweDA4dToKKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDF1KSB8IDB4MDF1KSk7ICAvKiBXcml0ZSBTTEErUiB0byBSZWdpc3RlciBJMkNEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg0MHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg0OHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDU4dToKKyAgICAgICAgICAgICAgICByZGF0YSA9ICh1bnNpZ25lZCBjaGFyKSBJMkNfR0VUX0RBVEEoaTJjKTsgICAgICAgICAvKiBSZWNlaXZlIERhdGEgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDB1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDM4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBJMkNfU0VUX0NPTlRST0xfUkVHKGkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gSTJDX0NUTCByZWdpc3RlciAqLworICAgIH0KKyAgICBpZih1OEVycikKKyAgICB7CisgICAgICAgIHJkYXRhID0gMHU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG9jY3VycyBlcnJvciwgcmV0dXJuIDAgKi8KKyAgICB9CisgICAgcmV0dXJuIHJkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHJlYWQgZGF0YSAqLworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgbXVsdGkgYnl0ZXMgZnJvbSBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKmkyYyAgICAgICAgICAgIFBvaW50IHRvIEkyQyBwZXJpcGhlcmFsCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtvdXRdIGF1OFJkYXRhW10gICAgICAgICBBIGRhdGEgYXJyYXkgdG8gc3RvcmUgZGF0YSBmcm9tIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyckxlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gcmVhZCBmcm9tIFNsYXZlCisgICoKKyAgKiBAcmV0dXJuICAgICBBIGxlbmd0aCBvZiBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gcmVjZWl2ZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBJMkMgTWFzdGVyIHRvIHJlYWQgbXVsdGkgZGF0YSBieXRlcyBmcm9tIFNsYXZlLgorICAqCisgICoKKyAgKi8KK3VpbnQzMl90IEkyQ19SZWFkTXVsdGlCeXRlcyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IGF1OFJkYXRhW10sIHVpbnQzMl90IHUzMnJMZW4pCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxdSwgdThFcnIgPSAwdSwgdThDdHJsID0gMHU7CisgICAgdWludDMyX3QgdTMycnhMZW4gPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAxdSkpOyAgLyogV3JpdGUgU0xBK1IgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NDB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSV9BQTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZXQgQUNLICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NDh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg1MHU6CisgICAgICAgICAgICAgICAgYXU4UmRhdGFbdTMycnhMZW4rK10gPSAodW5zaWduZWQgY2hhcikgSTJDX0dFVF9EQVRBKGkyYyk7ICAgIC8qIFJlY2VpdmUgRGF0YSAqLworICAgICAgICAgICAgICAgIGlmKHUzMnJ4TGVuIDwgKHUzMnJMZW4gLSAxdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJX0FBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNldCBBQ0sgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDU4dToKKyAgICAgICAgICAgICAgICBhdThSZGF0YVt1MzJyeExlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSBJMkNfR0VUX0RBVEEoaTJjKTsgICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMHU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mzh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEkyQ19TRVRfQ09OVFJPTF9SRUcoaTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gSTJDX0NUTCByZWdpc3RlciAqLworICAgIH0KKyAgICByZXR1cm4gdTMycnhMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCAqLworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgYSBieXRlIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHJlYWQgYSBieXRlIGZyb20gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICppMmMgICAgICAgICAgICBQb2ludCB0byBJMkMgcGVyaXBoZXJhbAorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1OERhdGFBZGRyICAgICAgU3BlY2lmeSBhIGFkZHJlc3MoMSBieXRlKSBvZiBkYXRhIHJlYWQgZnJvbQorICAqCisgICogQHJldHVybiAgICAgUmVhZCBhIGJ5dGUgZGF0YSBmcm9tIFNsYXZlCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciBzcGVjaWZ5IGEgYnl0ZSBhZGRyZXNzIHRoYXQgYSBkYXRhIGJ5dGUgcmVhZCBmcm9tIFNsYXZlLgorICAqCisgICoKKyAgKi8KK3VpbnQ4X3QgSTJDX1JlYWRCeXRlT25lUmVnKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkcikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCB1OFJkYXRhID0gMHUsIHU4Q3RybCA9IDB1OworCisgICAgSTJDX1NUQVJUKGkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworICAgIHdoaWxlKHU4WGZlcmluZyAmJiAodThFcnIgPT0gMHUpKQorICAgIHsKKyAgICAgICAgSTJDX1dBSVRfUkVBRFkoaTJjKSB7fQorICAgICAgICBzd2l0Y2goSTJDX0dFVF9TVEFUVVMoaTJjKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAweDA4dToKKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDF1KSB8IDB4MDB1KSk7ICAvKiBXcml0ZSBTTEErVyB0byBSZWdpc3RlciBJMkNEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCB1OERhdGFBZGRyKTsgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBMbyBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBOQUNLICovCisgICAgICAgICAgICBjYXNlIDB4MzB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hc3RlciB0cmFuc21pdCBkYXRhIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4Mjh1OgorICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RBX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIHJlcGVhdCBTVEFSVCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDEwdToKKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDF1KSB8IDB4MDF1KSk7ICAvKiBXcml0ZSBTTEErUiB0byBSZWdpc3RlciBJMkNEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIEFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQ4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NTh1OgorICAgICAgICAgICAgICAgIHU4UmRhdGEgPSAodWludDhfdCkgSTJDX0dFVF9EQVRBKGkyYyk7ICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgaWYodThFcnIpCisgICAgeworICAgICAgICB1OFJkYXRhID0gMHU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG9jY3VycyBlcnJvciwgcmV0dXJuIDAgKi8KKyAgICB9CisgICAgcmV0dXJuIHU4UmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gcmVhZCBkYXRhICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgYSBieXRlIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHJlYWQgbXVsdGkgYnl0ZXMgZnJvbSBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKmkyYyAgICAgICAgICAgIFBvaW50IHRvIEkyQyBwZXJpcGhlcmFsCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHU4RGF0YUFkZHIgICAgICBTcGVjaWZ5IGEgYWRkcmVzcyAoMSBieXRlcykgb2YgZGF0YSByZWFkIGZyb20KKyAgKiBAcGFyYW1bb3V0XSBhdThSZGF0YVtdICAgICAgICAgQSBkYXRhIGFycmF5IHRvIHN0b3JlIGRhdGEgZnJvbSBTbGF2ZQorICAqIEBwYXJhbVtpbl0gIHUzMnJMZW4gICAgICAgICBIb3cgbWFueSBieXRlcyBuZWVkIHRvIHJlYWQgZnJvbSBTbGF2ZQorICAqCisgICogQHJldHVybiAgICAgQSBsZW5ndGggb2YgaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciBzcGVjaWZ5IGEgYnl0ZSBhZGRyZXNzIHRoYXQgbXVsdGkgZGF0YSBieXRlcyByZWFkIGZyb20gU2xhdmUuCisgICoKKyAgKgorICAqLwordWludDMyX3QgSTJDX1JlYWRNdWx0aUJ5dGVzT25lUmVnKEkyQ19UICppMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkciwgdWludDhfdCBhdThSZGF0YVtdLCB1aW50MzJfdCB1MzJyTGVuKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMXUsIHU4RXJyID0gMHUsIHU4Q3RybCA9IDB1OworICAgIHVpbnQzMl90IHUzMnJ4TGVuID0gMHU7CisKKyAgICBJMkNfU1RBUlQoaTJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisgICAgd2hpbGUodThYZmVyaW5nICYmICh1OEVyciA9PSAwdSkpCisgICAgeworICAgICAgICBJMkNfV0FJVF9SRUFEWShpMmMpIHt9CisgICAgICAgIHN3aXRjaChJMkNfR0VUX1NUQVRVUyhpMmMpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDB4MDh1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMHUpKTsgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDE4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIEFDSyAqLworICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsIHU4RGF0YUFkZHIpOyAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIExvIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDIwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgIGNhc2UgMHgzMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFzdGVyIHRyYW5zbWl0IGRhdGEgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyOHU6CisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVEFfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcmVwZWF0IFNUQVJUICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MTB1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMXUpKTsgIC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIEFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0lfQUE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2V0IEFDSyAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQ4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NTB1OgorICAgICAgICAgICAgICAgIGF1OFJkYXRhW3UzMnJ4TGVuKytdID0gKHVpbnQ4X3QpIEkyQ19HRVRfREFUQShpMmMpOyAgIC8qIFJlY2VpdmUgRGF0YSAqLworICAgICAgICAgICAgICAgIGlmKHUzMnJ4TGVuIDwgKHUzMnJMZW4gLSAxdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJX0FBOyAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2V0IEFDSyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg1OHU6CisgICAgICAgICAgICAgICAgYXU4UmRhdGFbdTMycnhMZW4rK10gPSAodWludDhfdCkgSTJDX0dFVF9EQVRBKGkyYyk7ICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgcmV0dXJuIHUzMnJ4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IHR3byBieXRlcyByZWdpc3RlciBhZGRyZXNzIGFuZCByZWFkIGEgYnl0ZSBmcm9tIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqaTJjICAgICAgICAgICAgUG9pbnQgdG8gSTJDIHBlcmlwaGVyYWwKKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdTE2RGF0YUFkZHIgICAgIFNwZWNpZnkgYW4gYWRkcmVzcygyIGJ5dGVzKSBvZiBkYXRhIHJlYWQgZnJvbQorICAqCisgICogQHJldHVybiAgICAgUmVhZCBhIGJ5dGUgZGF0YSBmcm9tIFNsYXZlCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciBzcGVjaWZ5IHR3byBieXRlcyBhZGRyZXNzIHRoYXQgYSBkYXRhIGJ5dGUgcmVhZCBmcm9tIFNsYXZlLgorICAqCisgICoKKyAgKi8KK3VpbnQ4X3QgSTJDX1JlYWRCeXRlVHdvUmVncyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkcikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDF1LCB1OEVyciA9IDB1LCB1OFJkYXRhID0gMHUsIHU4QWRkciA9IDF1LCB1OEN0cmwgPSAwdTsKKworICAgIEkyQ19TVEFSVChpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKyAgICB3aGlsZSh1OFhmZXJpbmcgJiYgKHU4RXJyID09IDB1KSkKKyAgICB7CisgICAgICAgIEkyQ19XQUlUX1JFQURZKGkyYykge30KKyAgICAgICAgc3dpdGNoKEkyQ19HRVRfU1RBVFVTKGkyYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwOHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAwdSkpOyAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MTh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKHVpbnQ4X3QpKCh1MTZEYXRhQWRkciAmIDB4RkYwMHUpID4+IDh1KSk7ICAgIC8qIFdyaXRlIEhpIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDIwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgIGNhc2UgMHgzMHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFzdGVyIHRyYW5zbWl0IGRhdGEgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgyOHU6CisgICAgICAgICAgICAgICAgaWYodThBZGRyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKHVpbnQ4X3QpKHUxNkRhdGFBZGRyICYgMHhGRnUpKTsgICAgICAgLyogV3JpdGUgTG8gYnl0ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisgICAgICAgICAgICAgICAgICAgIHU4QWRkciA9IDB1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUQV9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCByZXBlYXQgU1RBUlQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MTB1OgorICAgICAgICAgICAgICAgIEkyQ19TRVRfREFUQShpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMXUpIHwgMHgwMXUpKTsgIC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIEkyQ0RBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIEFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDQ4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGF2ZSBBZGRyZXNzIE5BQ0sgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NTh1OgorICAgICAgICAgICAgICAgIHU4UmRhdGEgPSAodW5zaWduZWQgY2hhcikgSTJDX0dFVF9EQVRBKGkyYyk7ICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgzOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgSTJDX1NFVF9DT05UUk9MX1JFRyhpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIEkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisgICAgaWYodThFcnIpCisgICAgeworICAgICAgICB1OFJkYXRhID0gMHU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG9jY3VycyBlcnJvciwgcmV0dXJuIDAgKi8KKyAgICB9CisgICAgcmV0dXJuIHU4UmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gcmVhZCBkYXRhICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgdHdvIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHJlYWQgbXVsdGkgYnl0ZXMgZnJvbSBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKmkyYyAgICAgICAgICAgIFBvaW50IHRvIEkyQyBwZXJpcGhlcmFsCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHUxNkRhdGFBZGRyICAgICBTcGVjaWZ5IGEgYWRkcmVzcyAoMiBieXRlcykgb2YgZGF0YSByZWFkIGZyb20KKyAgKiBAcGFyYW1bb3V0XSBhdThSZGF0YVtdICAgICAgICAgQSBkYXRhIGFycmF5IHRvIHN0b3JlIGRhdGEgZnJvbSBTbGF2ZQorICAqIEBwYXJhbVtpbl0gIHUzMnJMZW4gICAgICAgICBIb3cgbWFueSBieXRlcyBuZWVkIHRvIHJlYWQgZnJvbSBTbGF2ZQorICAqCisgICogQHJldHVybiAgICAgQSBsZW5ndGggb2YgaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgSTJDIE1hc3RlciBzcGVjaWZ5IHR3byBieXRlcyBhZGRyZXNzIHRoYXQgbXVsdGkgZGF0YSBieXRlcyByZWFkIGZyb20gU2xhdmUuCisgICoKKyAgKgorICAqLwordWludDMyX3QgSTJDX1JlYWRNdWx0aUJ5dGVzVHdvUmVncyhJMkNfVCAqaTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkciwgdWludDhfdCBhdThSZGF0YVtdLCB1aW50MzJfdCB1MzJyTGVuKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMXUsIHU4RXJyID0gMHUsIHU4QWRkciA9IDF1LCB1OEN0cmwgPSAwdTsKKyAgICB1aW50MzJfdCB1MzJyeExlbiA9IDB1OworCisgICAgSTJDX1NUQVJUKGkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworICAgIHdoaWxlKHU4WGZlcmluZyAmJiAodThFcnIgPT0gMHUpKQorICAgIHsKKyAgICAgICAgSTJDX1dBSVRfUkVBRFkoaTJjKSB7fQorICAgICAgICBzd2l0Y2goSTJDX0dFVF9TVEFUVVMoaTJjKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAweDA4dToKKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDF1KSB8IDB4MDB1KSk7ICAvKiBXcml0ZSBTTEErVyB0byBSZWdpc3RlciBJMkNEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxOHU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2xhdmUgQWRkcmVzcyBBQ0sgKi8KKyAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAodWludDhfdCkoKHUxNkRhdGFBZGRyICYgMHhGRjAwdSkgPj4gOHUpKTsgICAgLyogV3JpdGUgSGkgYnl0ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MjB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgTkFDSyAqLworICAgICAgICAgICAgY2FzZSAweDMwdTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXN0ZXIgdHJhbnNtaXQgZGF0YSBOQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TVE9fU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDF1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDI4dToKKyAgICAgICAgICAgICAgICBpZih1OEFkZHIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJMkNfU0VUX0RBVEEoaTJjLCAodWludDhfdCkodTE2RGF0YUFkZHIgJiAweEZGdSkpOyAgICAgICAvKiBXcml0ZSBMbyBieXRlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgdThBZGRyID0gMHU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RBX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIHJlcGVhdCBTVEFSVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgxMHU6CisgICAgICAgICAgICAgICAgSTJDX1NFVF9EQVRBKGkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxdSkgfCAweDAxdSkpOyAgLyogV3JpdGUgU0xBK1IgdG8gUmVnaXN0ZXIgSTJDREFUICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NDB1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgQUNLICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gSTJDX0NUTF9TSV9BQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZXQgQUNLICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NDh1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsYXZlIEFkZHJlc3MgTkFDSyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg1MHU6CisgICAgICAgICAgICAgICAgYXU4UmRhdGFbdTMycnhMZW4rK10gPSAodW5zaWduZWQgY2hhcikgSTJDX0dFVF9EQVRBKGkyYyk7ICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgaWYodTMycnhMZW4gPCAodTMyckxlbiAtIDF1KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0lfQUE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZXQgQUNLICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDU4dToKKyAgICAgICAgICAgICAgICBhdThSZGF0YVt1MzJyeExlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSBJMkNfR0VUX0RBVEEoaTJjKTsgICAgICAvKiBSZWNlaXZlIERhdGEgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBJMkNfQ1RMX1NUT19TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDB1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDM4dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IEkyQ19DVExfU1RPX1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgdThFcnIgPSAxdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBJMkNfU0VUX0NPTlRST0xfUkVHKGkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gSTJDX0NUTCByZWdpc3RlciAqLworICAgIH0KKyAgICByZXR1cm4gdTMycnhMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYnl0ZXMgbGVuZ3RoIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkICovCit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgSTJDX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEkyQ19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvaTJzLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9pMnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGFlZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvaTJzLmMKQEAgLTAsMCArMSwyNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBpMnMuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIEkyUyBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEkyU19Ecml2ZXIgSTJTIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIEkyU19FWFBPUlRFRF9GVU5DVElPTlMgSTJTIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworc3RhdGljIHVpbnQzMl90IEkyU19HZXRTb3VyY2VDbG9ja0ZyZXEoSTJTX1QgKmkycyk7CisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBJMlMgc291cmNlIGNsb2NrIGZyZXF1ZW5jeS4KKyAgKiBAcGFyYW1baW5dICBpMnMgVGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gSTJTIHNvdXJjZSBjbG9jayBmcmVxdWVuY3kgKEh6KS4KKyAgKiBAZGV0YWlscyBSZXR1cm4gdGhlIHNvdXJjZSBjbG9jayBmcmVxdWVuY3kgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5nIG9mIEkyUzBTRUwgKENMS19DTEtTRUwzWzE3OjE2XSkuCisgICovCitzdGF0aWMgdWludDMyX3QgSTJTX0dldFNvdXJjZUNsb2NrRnJlcShJMlNfVCAqaTJzKQoreworICAgICh2b2lkKWkyczsKKyAgICB1aW50MzJfdCB1MzJGcmVxLCB1MzJDbGtTcmNTZWw7CisKKyAgICB1MzJDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoSTJTMF9NT0RVTEUpIDw8IENMS19DTEtTRUwzX0kyUzBTRUxfUG9zOworCisgICAgc3dpdGNoKHUzMkNsa1NyY1NlbCkKKyAgICB7CisgICAgICAgIGNhc2UgQ0xLX0NMS1NFTDNfSTJTMFNFTF9IWFQ6CisgICAgICAgICAgICB1MzJGcmVxID0gX19IWFQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENMS19DTEtTRUwzX0kyUzBTRUxfUExMOgorICAgICAgICAgICAgdTMyRnJlcSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ0xLX0NMS1NFTDNfSTJTMFNFTF9ISVJDOgorICAgICAgICAgICAgdTMyRnJlcSA9IF9fSElSQzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ0xLX0NMS1NFTDNfSTJTMFNFTF9QQ0xLMDoKKyAgICAgICAgICAgIHUzMkZyZXEgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdTMyRnJlcSA9IF9fSFhUOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkZyZXE7Cit9CisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHNvbWUgcGFyYW1ldGVycyBvZiBJMlMgaW50ZXJmYWNlIGZvciBnZW5lcmFsIHB1cnBvc2UgdXNlLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc3RlclNsYXZlIEkyUyBvcGVyYXRpb24gbW9kZS4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX01PREVfTUFTVEVSCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19NT0RFX1NMQVZFCisgICogQHBhcmFtW2luXSB1MzJTYW1wbGVSYXRlIFNhbXBsZSByYXRlCisgICogQHBhcmFtW2luXSB1MzJXb3JkV2lkdGggRGF0YSBsZW5ndGguIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19EQVRBQklUXzgKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0RBVEFCSVRfMTYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0RBVEFCSVRfMjQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0RBVEFCSVRfMzIKKyAgKiBAcGFyYW1baW5dIHUzMk1vbm9EYXRhIFNldCBhdWRpbyBkYXRhIHRvIG1vbm8gb3Igbm90LiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfRU5BQkxFX01PTk8KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0RJU0FCTEVfTU9OTworICAqIEBwYXJhbVtpbl0gdTMyRGF0YUZvcm1hdCBEYXRhIGZvcm1hdC4gVGhpcyBpcyBhbHNvIHVzZWQgdG8gc2VsZWN0IEkyUyBvciBQQ00oVERNKSBmdW5jdGlvbi4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0ZPUk1BVF9JMlMKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0ZPUk1BVF9JMlNfTVNCCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19GT1JNQVRfSTJTX0xTQgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfRk9STUFUX1BDTQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfRk9STUFUX1BDTV9NU0IKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX0ZPUk1BVF9QQ01fTFNCCisgICogQHJldHVybiBSZWFsIHNhbXBsZSByYXRlLgorICAqIEBkZXRhaWxzIFNldCBUWCBhbmQgUlggRklGTyB0aHJlc2hvbGQgdG8gbWlkZGxlIHZhbHVlLgorICAqICAgICAgICAgIFRoZSBzYW1wbGUgcmF0ZSBtYXkgbm90IGJlIHVzZWQgZnJvbSB0aGUgcGFyYW1ldGVyLCBpdCBkZXBlbmRzIG9uIHN5c3RlbSdzIGNsb2NrIHNldHRpbmdzLAorICAqICAgICAgICAgIGJ1dCByZWFsIHNhbXBsZSByYXRlIHVzZWQgYnkgc3lzdGVtIHdpbGwgYmUgcmV0dXJuZWQgZm9yIHJlZmVyZW5jZS4KKyAgICBJMlMgd2lsbCBiZSByZXNldCBpbiBpbml0aWFsaXphdGlvbiBvbmx5IGZvciBTZWN1cmUuCisgICovCit1aW50MzJfdCBJMlNfT3BlbihJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJNYXN0ZXJTbGF2ZSwgdWludDMyX3QgdTMyU2FtcGxlUmF0ZSwgdWludDMyX3QgdTMyV29yZFdpZHRoLCB1aW50MzJfdCB1MzJNb25vRGF0YSwgdWludDMyX3QgdTMyRGF0YUZvcm1hdCkKK3sKKyAgICB1aW50MTZfdCB1MTZEaXZpZGVyOworICAgIHVpbnQzMl90IHUzMkJpdFJhdGUsIHUzMlNyY0NsazsKKworICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICB7CisgICAgICAgIC8qIFJlc2V0IEkyUyAqLworICAgICAgICBTWVMtPklQUlNUMSB8PSBTWVNfSVBSU1QxX0kyUzBSU1RfTXNrOworICAgICAgICBTWVMtPklQUlNUMSAmPSB+U1lTX0lQUlNUMV9JMlMwUlNUX01zazsKKyAgICB9CisKKyAgICAvKiBDb25maWd1cmUgSTJTIGNvbnRyb2xsZXIgYWNjb3JkaW5nIHRvIGlucHV0IHBhcmFtZXRlcnMuICovCisgICAgaTJzLT5DVEwwID0gdTMyTWFzdGVyU2xhdmUgfCB1MzJXb3JkV2lkdGggfCB1MzJNb25vRGF0YSB8IHUzMkRhdGFGb3JtYXQ7CisgICAgaTJzLT5DVEwxID0gSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF84IHwgSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF84OworCisgICAgLyogR2V0IEkyUyBzb3VyY2UgY2xvY2sgZnJlcXVlbmN5ICovCisgICAgdTMyU3JjQ2xrID0gSTJTX0dldFNvdXJjZUNsb2NrRnJlcShpMnMpOworCisgICAgLyogQ2FsY3VsYXRlIGJpdCBjbG9jayByYXRlICovCisgICAgdTMyQml0UmF0ZSA9IHUzMlNhbXBsZVJhdGUgKiAoKCh1MzJXb3JkV2lkdGggPj4gNFVMKSAmIDB4M1VMKSArIDFVTCkgKiAxNlVMOworICAgIHUxNkRpdmlkZXIgPSAodWludDE2X3QpKCgoKCgodTMyU3JjQ2xrICogMTBVTCkgLyB1MzJCaXRSYXRlKSA+PiAxVUwpICsgNVVMKSAvIDEwVUwpIC0gMVVMKTsgLyogUm91bmQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciAqLworICAgIGkycy0+Q0xLRElWID0gKGkycy0+Q0xLRElWICYgfkkyU19DTEtESVZfQkNMS0RJVl9Nc2spIHwgKCh1aW50MzJfdCl1MTZEaXZpZGVyIDw8IDhVTCk7CisKKyAgICAvKiBDYWxjdWxhdGUgcmVhbCBzYW1wbGUgcmF0ZSAqLworICAgIHUzMkJpdFJhdGUgPSB1MzJTcmNDbGsgLyAoKCh1aW50MzJfdCl1MTZEaXZpZGVyICsgMVVMKSAqIDJVTCk7CisgICAgdTMyU2FtcGxlUmF0ZSA9IHUzMkJpdFJhdGUgLyAoKCgodTMyV29yZFdpZHRoID4+IDRVTCkgJiAweDNVTCkgKyAxVUwpICogMTZVTCk7CisKKyAgICAvKiBFbmFibGUgSTJTIGNvbnRyb2xsZXIgKi8KKyAgICBpMnMtPkNUTDAgfD0gSTJTX0NUTDBfSTJTRU5fTXNrOworCisgICAgcmV0dXJuIHUzMlNhbXBsZVJhdGU7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBJMlMgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgaTJzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBDbGVhciBJMlNFTiAoSTJTX0NUTDBbMF0pIHRvIGRpc2FibGUgSTJTIGZ1bmN0aW9uLgorICAqLwordm9pZCBJMlNfQ2xvc2UoSTJTX1QgKmkycykKK3sKKyAgICBpMnMtPkNUTDAgJj0gfkkyU19DVEwwX0kyU0VOX01zazsKK30KKworLyoqCisgICogQGJyaWVmIEVuYWJsZSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICAqICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgYml0LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaW50ZXJydXB0IGFjY29yZGluZyB0byB0aGUgbWFzayBwYXJhbWV0ZXIuCisgICovCit2b2lkIEkyU19FbmFibGVJbnQoSTJTX1QgKmkycywgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICBpMnMtPklFTiB8PSB1MzJNYXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSBpMnMgVGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICAqICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgYml0LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGludGVycnVwdCBhY2NvcmRpbmcgdG8gdGhlIG1hc2sgcGFyYW1ldGVyLgorICAqLwordm9pZCBJMlNfRGlzYWJsZUludChJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIGkycy0+SUVOICY9IH51MzJNYXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBtYXN0ZXIgY2xvY2sgKE1DTEspLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMkJ1c0Nsb2NrIFRoZSB0YXJnZXQgTUNMSyBjbG9jay4KKyAgKiBAcmV0dXJuIEFjdHVhbCBNQ0xLIGNsb2NrCisgICogQGRldGFpbHMgU2V0IHRoZSBtYXN0ZXIgY2xvY2sgcmF0ZSBhY2NvcmRpbmcgdG8gdTMyQnVzQ2xvY2sgcGFyYW1ldGVyIGFuZCBlbmFibGUgbWFzdGVyIGNsb2NrIG91dHB1dC4KKyAgKiAgICAgICAgICBUaGUgYWN0dWFsIG1hc3RlciBjbG9jayByYXRlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdGFyZ2V0IG1hc3RlciBjbG9jayByYXRlLiBUaGUgcmVhbCBtYXN0ZXIgY2xvY2sgcmF0ZSB3aWxsIGJlIHJldHVybmVkIGZvciByZWZlcmVuY2UuCisgICovCit1aW50MzJfdCBJMlNfRW5hYmxlTUNMSyhJMlNfVCAqaTJzLCB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50OF90IHU4RGl2aWRlcjsKKyAgICB1aW50MzJfdCB1MzJTcmNDbGssIHUzMlJlZywgdTMyQ2xvY2s7CisKKyAgICB1MzJTcmNDbGsgPSBJMlNfR2V0U291cmNlQ2xvY2tGcmVxKGkycyk7CisgICAgaWYodTMyQnVzQ2xvY2sgPT0gdTMyU3JjQ2xrKQorICAgIHsKKyAgICAgICAgdThEaXZpZGVyID0gKHVpbnQ4X3QpMFVMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1OERpdmlkZXIgPSAodWludDhfdCkodTMyU3JjQ2xrIC8gdTMyQnVzQ2xvY2spID4+IDFVTDsKKyAgICB9CisKKyAgICBpMnMtPkNMS0RJViA9IChpMnMtPkNMS0RJViAmIH5JMlNfQ0xLRElWX01DTEtESVZfTXNrKSB8IHU4RGl2aWRlcjsKKworICAgIGkycy0+Q1RMMCB8PSBJMlNfQ1RMMF9NQ0xLRU5fTXNrOworCisgICAgdTMyUmVnID0gaTJzLT5DTEtESVYgJiBJMlNfQ0xLRElWX01DTEtESVZfTXNrOworCisgICAgaWYodTMyUmVnID09IDBVTCkKKyAgICB7CisgICAgICAgIHUzMkNsb2NrID0gdTMyU3JjQ2xrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJDbG9jayA9ICgodTMyU3JjQ2xrID4+IDFVTCkgLyB1MzJSZWcpOworICAgIH0KKworICAgIHJldHVybiB1MzJDbG9jazsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIG1hc3RlciBjbG9jayAoTUNMSykuCisgICogQHBhcmFtW2luXSBpMnMgVGhlIGJhc2UgYWRkcmVzcyBvZiBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIERpc2FibGUgbWFzdGVyIGNsb2NrIG91dHB1dC4KKyAgKi8KK3ZvaWQgSTJTX0Rpc2FibGVNQ0xLKEkyU19UICppMnMpCit7CisgICAgaTJzLT5DVEwwICY9IH5JMlNfQ1RMMF9NQ0xLRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBGSUZPIHRocmVzaG9sZCBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyVHhUaHJlc2hvbGQgRGVjaWRlcyB0aGUgVFggRklGTyB0aHJlc2hvbGQuIEl0IGNvdWxkIGJlIDAgfiAxNS4KKyAgKiBAcGFyYW1baW5dICB1MzJSeFRocmVzaG9sZCBEZWNpZGVzIHRoZSBSWCBGSUZPIHRocmVzaG9sZC4gSXQgY291bGQgYmUgMCB+IDE1LgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFNldCBUWCBGSUZPIHRocmVzaG9sZCBhbmQgUlggRklGTyB0aHJlc2hvbGQgY29uZmlndXJhdGlvbnMuCisgICovCit2b2lkIEkyU19TZXRGSUZPKEkyU19UICppMnMsIHVpbnQzMl90IHUzMlR4VGhyZXNob2xkLCB1aW50MzJfdCB1MzJSeFRocmVzaG9sZCkKK3sKKyAgICBpMnMtPkNUTDEgPSAoaTJzLT5DVEwxICYgfihJMlNfQ1RMMV9UWFRIX01zayB8IEkyU19DVEwxX1JYVEhfTXNrKSkgfAorICAgICAgICAgICAgICAgICh1MzJUeFRocmVzaG9sZCA8PCBJMlNfQ1RMMV9UWFRIX1BvcykgfAorICAgICAgICAgICAgICAgICh1MzJSeFRocmVzaG9sZCA8PCBJMlNfQ1RMMV9SWFRIX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIFBDTShURE0pIGZ1bmN0aW9uIHBhcmFtZXRlcnMsIHN1Y2ggYXMgY2hhbm5lbCB3aWR0aCwgY2hhbm5lbCBudW1iZXIgYW5kIHN5bmMgcHVsc2Ugd2lkdGgKKyAgKiBAcGFyYW1baW5dICBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWxXaWR0aCBDaGFubmVsIHdpZHRoLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfVERNX1dJRFRIXzhCSVQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX1RETV9XSURUSF8xNkJJVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfVERNX1dJRFRIXzI0QklUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19URE1fV0lEVEhfMzJCSVQKKyAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsTnVtIENoYW5uZWwgbnVtYmVyLiBWYWxpZCB2YWx1ZXMgYXJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfVERNXzJDSAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfVERNXzRDSAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfVERNXzZDSAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBJMlNfVERNXzhDSAorICAqIEBwYXJhbVtpbl0gIHUzMlN5bmNXaWR0aCBXaWR0aCBmb3Igc3luYyBwdWxzZS4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgSTJTX1RETV9TWU5DX09ORV9CQ0xLCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIEkyU19URE1fU1lOQ19PTkVfQ0hBTk5FTAorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFNldCBUWCBGSUZPIHRocmVzaG9sZCBhbmQgUlggRklGTyB0aHJlc2hvbGQgY29uZmlndXJhdGlvbnMuCisgICovCit2b2lkIEkyU19Db25maWd1cmVURE0oSTJTX1QgKmkycywgdWludDMyX3QgdTMyQ2hhbm5lbFdpZHRoLCB1aW50MzJfdCB1MzJDaGFubmVsTnVtLCB1aW50MzJfdCB1MzJTeW5jV2lkdGgpCit7CisgICAgaTJzLT5DVEwwID0gKGkycy0+Q1RMMCAmIH4oSTJTX0NUTDBfVERNQ0hOVU1fTXNrIHwgSTJTX0NUTDBfQ0hXSURUSF9Nc2sgfCBJMlNfQ1RMMF9QQ01TWU5DX01zaykpIHwKKyAgICAgICAgICAgICAgICAodTMyQ2hhbm5lbFdpZHRoIDw8IEkyU19DVEwwX0NIV0lEVEhfUG9zKSB8CisgICAgICAgICAgICAgICAgKHUzMkNoYW5uZWxOdW0gPDwgSTJTX0NUTDBfVERNQ0hOVU1fUG9zKSB8CisgICAgICAgICAgICAgICAgKHUzMlN5bmNXaWR0aCA8PCBJMlNfQ1RMMF9QQ01TWU5DX1Bvcyk7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgSTJTX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIEkyU19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcGRtYS5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcGRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZDM3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9wZG1hLmMKQEAgLTAsMCArMSw0MzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBwZG1hLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBQRE1BIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisKK3N0YXRpYyB1aW50OF90IGF1OENoU2VsZWN0W1BETUFfQ0hfTUFYXTsKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBQRE1BX0RyaXZlciBQRE1BIERyaXZlcgorICBAeworKi8KKworCisvKiogQGFkZHRvZ3JvdXAgUERNQV9FWFBPUlRFRF9GVU5DVElPTlMgUERNQSBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogQGJyaWVmICAgICAgIFBETUEgT3BlbgorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMk1hc2sgICAgICAgICBDaGFubmVsIGVuYWJsZSBiaXRzLgorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlIHRoZSBQRE1BIGNoYW5uZWxzLgorICovCit2b2lkIFBETUFfT3BlbihQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdWludDMyX3QgaTsKKworICAgIGZvcihpID0gMFVMOyBpIDwgKGludClQRE1BX0NIX01BWDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYoKDEgPDwgaSkgJiB1MzJNYXNrKQorICAgICAgICB7CisgICAgICAgICAgICAocGRtYSktPkRTQ1RbaV0uQ1RMID0gMFVMOworICAgICAgICAgICAgYXU4Q2hTZWxlY3RbaV0gPSAodWludDhfdClQRE1BX01FTTsKKyAgICAgICAgfQorICAgIH0KKworICAgIChwZG1hKS0+Q0hDVEwgfD0gdTMyTWFzazsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgUERNQSBDbG9zZQorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSBhbGwgUERNQSBjaGFubmVscy4KKyAqLwordm9pZCBQRE1BX0Nsb3NlKFBETUFfVCAqcGRtYSkKK3sKKyAgICAocGRtYSktPkNIQ1RMID0gMFVMOworfQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgUERNQSBUcmFuc2ZlciBDb3VudAorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgICAgICBUaGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSAgIHUzMldpZHRoICAgICAgICBEYXRhIHdpZHRoLiBWYWxpZCB2YWx1ZXMgYXJlCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9XSURUSF84CisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9XSURUSF8xNgorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfV0lEVEhfMzIKKyAqIEBwYXJhbVtpbl0gICB1MzJUcmFuc0NvdW50ICAgVHJhbnNmZXIgY291bnQKKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIHNldCB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBkYXRhIHdpZHRoIGFuZCB0cmFuc2ZlciBjb3VudC4KKyAqLwordm9pZCBQRE1BX1NldFRyYW5zZmVyQ250KFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMldpZHRoLCB1aW50MzJfdCB1MzJUcmFuc0NvdW50KQoreworICAgIChwZG1hKS0+RFNDVFt1MzJDaF0uQ1RMICY9IH4oUERNQV9EU0NUX0NUTF9UWENOVF9Nc2sgfCBQRE1BX0RTQ1RfQ1RMX1RYV0lEVEhfTXNrKTsKKyAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCB8PSAodTMyV2lkdGggfCAoKHUzMlRyYW5zQ291bnQgLSAxVUwpIDw8IFBETUFfRFNDVF9DVExfVFhDTlRfUG9zKSk7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBQRE1BIFN0cmlkZSBNb2RlCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dICAgdTMyRGVzdExlbiAgICAgIERlc3RpbmF0aW9uIHN0cmlkZSBjb3VudAorICogQHBhcmFtW2luXSAgIHUzMlNyY0xlbiAgICAgICBTb3VyY2Ugc3RyaWRlIGNvdW50CisgKiBAcGFyYW1baW5dICAgdTMyVHJhbnNDb3VudCAgIFRyYW5zZmVyIGNvdW50CisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBzZXQgdGhlIHNlbGVjdGVkIHN0cmlkZSBtb2RlLgorICovCit2b2lkIFBETUFfU2V0U3RyaWRlKFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMkRlc3RMZW4sIHVpbnQzMl90IHUzMlNyY0xlbiwgdWludDMyX3QgdTMyVHJhbnNDb3VudCkKK3sKKyAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCB8PSBQRE1BX0RTQ1RfQ1RMX1NUUklERUVOX01zazsKKyAgICAocGRtYSktPlNUUklERVt1MzJDaF0uQVNPQ1IgPSAodTMyRGVzdExlbiA8PCAxNikgfCB1MzJTcmNMZW47CisgICAgKHBkbWEpLT5TVFJJREVbdTMyQ2hdLlNUQ1IgPSB1MzJUcmFuc0NvdW50OworfQorCisvKioKKyAqIEBicmllZiAgICAgICBTZXQgUERNQSBUcmFuc2ZlciBBZGRyZXNzCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKiBAcGFyYW1baW5dICAgdTMyU3JjQWRkciAgICAgIFNvdXJjZSBhZGRyZXNzCisgKiBAcGFyYW1baW5dICAgdTMyU3JjQ3RybCAgICAgIFNvdXJjZSBjb250cm9sIGF0dHJpYnV0ZS4gVmFsaWQgdmFsdWVzIGFyZQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU0FSX0lOQworICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU0FSX0ZJWAorICogQHBhcmFtW2luXSAgIHUzMkRzdEFkZHIgICAgICBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKiBAcGFyYW1baW5dICAgdTMyRHN0Q3RybCAgICAgIGRlc3RpbmF0aW9uIGNvbnRyb2wgYXR0cmlidXRlLiBWYWxpZCB2YWx1ZXMgYXJlCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9EQVJfSU5DCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9EQVJfRklYCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBzZXQgdGhlIHNlbGVjdGVkIGNoYW5uZWwgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIGF0dHJpYnV0ZS4KKyAqLwordm9pZCBQRE1BX1NldFRyYW5zZmVyQWRkcihQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoLCB1aW50MzJfdCB1MzJTcmNBZGRyLCB1aW50MzJfdCB1MzJTcmNDdHJsLCB1aW50MzJfdCB1MzJEc3RBZGRyLCB1aW50MzJfdCB1MzJEc3RDdHJsKQoreworICAgIChwZG1hKS0+RFNDVFt1MzJDaF0uU0EgPSB1MzJTcmNBZGRyOworICAgIChwZG1hKS0+RFNDVFt1MzJDaF0uREEgPSB1MzJEc3RBZGRyOworICAgIChwZG1hKS0+RFNDVFt1MzJDaF0uQ1RMICY9IH4oUERNQV9EU0NUX0NUTF9TQUlOQ19Nc2sgfCBQRE1BX0RTQ1RfQ1RMX0RBSU5DX01zayk7CisgICAgKHBkbWEpLT5EU0NUW3UzMkNoXS5DVEwgfD0gKHUzMlNyY0N0cmwgfCB1MzJEc3RDdHJsKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IFBETUEgVHJhbnNmZXIgTW9kZQorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgICAgICBUaGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSAgIHUzMlBlcmlwaGVyYWwgICBUaGUgc2VsZWN0ZWQgcGVyaXBoZXJhbC4gVmFsaWQgdmFsdWVzIGFyZQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfTUVNCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VU0JfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VTQl9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVUFSVDBfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VBUlQwX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VQVJUMV9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVUFSVDFfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VBUlQyX1RYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VQVJUMl9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVUFSVDNfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VBUlQzX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VQVJUNF9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVUFSVDRfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VBUlQ1X1RYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VQVJUNV9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVVNDSTBfVFgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1VTQ0kwX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9VU0NJMV9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVVNDSTFfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX1FTUEkwX1RYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9RU1BJMF9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU1BJMF9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU1BJMF9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU1BJMV9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU1BJMV9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU1BJMl9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU1BJMl9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU1BJM19UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfU1BJM19SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfRVBXTTBfUDFfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0VQV00wX1AyX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9FUFdNMF9QM19SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfRVBXTTFfUDFfUlgKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0VQV00xX1AyX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9FUFdNMV9QM19SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSTJDMF9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSTJDMF9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSTJDMV9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSTJDMV9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSTJDMl9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSTJDMl9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSTJTMF9UWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSTJTMF9SWAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVE1SMAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVE1SMQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVE1SMgorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfVE1SMworICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfQURDX1JYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9EQUMwX1RYCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9EQUMxX1RYCisgKiBAcGFyYW1baW5dICAgdTMyU2NhdHRlckVuICAgIFNjYXR0ZXItZ2F0aGVyIG1vZGUgZW5hYmxlCisgKiBAcGFyYW1baW5dICAgdTMyRGVzY0FkZHIgICAgIFNjYXR0ZXItZ2F0aGVyIGRlc2NyaXB0b3IgYWRkcmVzcworICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsIHRyYW5zZmVyIG1vZGUuIEluY2x1ZGUgcGVyaXBoZXJhbCBzZXR0aW5nLgorICovCit2b2lkIFBETUFfU2V0VHJhbnNmZXJNb2RlKFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMlBlcmlwaGVyYWwsIHVpbnQzMl90IHUzMlNjYXR0ZXJFbiwgdWludDMyX3QgdTMyRGVzY0FkZHIpCit7CisgICAgYXU4Q2hTZWxlY3RbdTMyQ2hdID0gKHVpbnQ4X3QpdTMyUGVyaXBoZXJhbDsKKyAgICBzd2l0Y2godTMyQ2gpCisgICAgeworICAgICAgICBjYXNlIDBVTDoKKyAgICAgICAgICAgIChwZG1hKS0+UkVRU0VMMF8zID0gKChwZG1hKS0+UkVRU0VMMF8zICYgflBETUFfUkVRU0VMMF8zX1JFUVNSQzBfTXNrKSB8IHUzMlBlcmlwaGVyYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxVUw6CisgICAgICAgICAgICAocGRtYSktPlJFUVNFTDBfMyA9ICgocGRtYSktPlJFUVNFTDBfMyAmIH5QRE1BX1JFUVNFTDBfM19SRVFTUkMxX01zaykgfCAodTMyUGVyaXBoZXJhbCA8PCBQRE1BX1JFUVNFTDBfM19SRVFTUkMxX1Bvcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyVUw6CisgICAgICAgICAgICAocGRtYSktPlJFUVNFTDBfMyA9ICgocGRtYSktPlJFUVNFTDBfMyAmIH5QRE1BX1JFUVNFTDBfM19SRVFTUkMyX01zaykgfCAodTMyUGVyaXBoZXJhbCA8PCBQRE1BX1JFUVNFTDBfM19SRVFTUkMyX1Bvcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzVUw6CisgICAgICAgICAgICAocGRtYSktPlJFUVNFTDBfMyA9ICgocGRtYSktPlJFUVNFTDBfMyAmIH5QRE1BX1JFUVNFTDBfM19SRVFTUkMzX01zaykgfCAodTMyUGVyaXBoZXJhbCA8PCBQRE1BX1JFUVNFTDBfM19SRVFTUkMzX1Bvcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0VUw6CisgICAgICAgICAgICAocGRtYSktPlJFUVNFTDRfNyA9ICgocGRtYSktPlJFUVNFTDRfNyAmIH5QRE1BX1JFUVNFTDRfN19SRVFTUkM0X01zaykgfCB1MzJQZXJpcGhlcmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNVVMOgorICAgICAgICAgICAgKHBkbWEpLT5SRVFTRUw0XzcgPSAoKHBkbWEpLT5SRVFTRUw0XzcgJiB+UERNQV9SRVFTRUw0XzdfUkVRU1JDNV9Nc2spIHwgKHUzMlBlcmlwaGVyYWwgPDwgUERNQV9SRVFTRUw0XzdfUkVRU1JDNV9Qb3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNlVMOgorICAgICAgICAgICAgKHBkbWEpLT5SRVFTRUw0XzcgPSAoKHBkbWEpLT5SRVFTRUw0XzcgJiB+UERNQV9SRVFTRUw0XzdfUkVRU1JDNl9Nc2spIHwgKHUzMlBlcmlwaGVyYWwgPDwgUERNQV9SRVFTRUw0XzdfUkVRU1JDNl9Qb3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgN1VMOgorICAgICAgICAgICAgKHBkbWEpLT5SRVFTRUw0XzcgPSAoKHBkbWEpLT5SRVFTRUw0XzcgJiB+UERNQV9SRVFTRUw0XzdfUkVRU1JDN19Nc2spIHwgKHUzMlBlcmlwaGVyYWwgPDwgUERNQV9SRVFTRUw0XzdfUkVRU1JDN19Qb3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZih1MzJTY2F0dGVyRW4pCisgICAgeworICAgICAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCA9ICgocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCAmIH5QRE1BX0RTQ1RfQ1RMX09QTU9ERV9Nc2spIHwgUERNQV9PUF9TQ0FUVEVSOworICAgICAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLk5FWFQgPSB1MzJEZXNjQWRkciAtICgocGRtYSktPlNDQVRCQSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIChwZG1hKS0+RFNDVFt1MzJDaF0uQ1RMID0gKChwZG1hKS0+RFNDVFt1MzJDaF0uQ1RMICYgflBETUFfRFNDVF9DVExfT1BNT0RFX01zaykgfCBQRE1BX09QX0JBU0lDOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgU2V0IFBETUEgQnVyc3QgVHlwZSBhbmQgU2l6ZQorICoKKyAqIEBwYXJhbVtpbl0gICBwZG1hICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBQRE1BIG1vZHVsZQorICogQHBhcmFtW2luXSAgIHUzMkNoICAgICAgICAgICBUaGUgc2VsZWN0ZWQgY2hhbm5lbAorICogQHBhcmFtW2luXSAgIHUzMkJ1cnN0VHlwZSAgICBCdXJzdCBtb2RlIG9yIHNpbmdsZSBtb2RlLiBWYWxpZCB2YWx1ZXMgYXJlCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9SRVFfU0lOR0xFCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9SRVFfQlVSU1QKKyAqIEBwYXJhbVtpbl0gICB1MzJCdXJzdFNpemUgICAgU2V0IHRoZSBzaXplIG9mIGJ1cnN0IG1vZGUuIFZhbGlkIHZhbHVlcyBhcmUKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0JVUlNUXzEyOAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfQlVSU1RfNjQKKyAqICAgICAgICAgICAgICAgIC0gXHJlZiBQRE1BX0JVUlNUXzMyCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9CVVJTVF8xNgorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfQlVSU1RfOAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfQlVSU1RfNAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfQlVSU1RfMgorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfQlVSU1RfMQorICoKKyAqIEByZXR1cm4gICAgICBOb25lCisgKgorICogQGRldGFpbHMgICAgIFRoaXMgZnVuY3Rpb24gc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsIGJ1cnN0IHR5cGUgYW5kIHNpemUuCisgKi8KK3ZvaWQgUERNQV9TZXRCdXJzdFR5cGUoUERNQV9UICpwZG1hLCB1aW50MzJfdCB1MzJDaCwgdWludDMyX3QgdTMyQnVyc3RUeXBlLCB1aW50MzJfdCB1MzJCdXJzdFNpemUpCit7CisgICAgKHBkbWEpLT5EU0NUW3UzMkNoXS5DVEwgJj0gfihQRE1BX0RTQ1RfQ1RMX1RYVFlQRV9Nc2sgfCBQRE1BX0RTQ1RfQ1RMX0JVUlNJWkVfTXNrKTsKKyAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCB8PSAodTMyQnVyc3RUeXBlIHwgdTMyQnVyc3RTaXplKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgRW5hYmxlIHRpbWVvdXQgZnVuY3Rpb24KKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJNYXNrICAgICAgICAgQ2hhbm5lbCBlbmFibGUgYml0cy4KKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZSB0aW1lb3V0IGZ1bmN0aW9uIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsKHMpLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGluIGNoYW5uZWwgMCBhbmQgY2hhbm5lbCAxLgorICovCit2b2lkIFBETUFfRW5hYmxlVGltZW91dChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgKHBkbWEpLT5UT1VURU4gfD0gdTMyTWFzazsKK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgRGlzYWJsZSB0aW1lb3V0IGZ1bmN0aW9uCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyTWFzayAgICAgICAgIENoYW5uZWwgZW5hYmxlIGJpdHMuCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIHRpbWVvdXQgZnVuY3Rpb24gb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwocykuCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSBzdXBwb3J0ZWQgaW4gY2hhbm5lbCAwIGFuZCBjaGFubmVsIDEuCisgKi8KK3ZvaWQgUERNQV9EaXNhYmxlVGltZW91dChQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgKHBkbWEpLT5UT1VURU4gJj0gfnUzMk1hc2s7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFNldCBQRE1BIFRpbWVvdXQgQ291bnQKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJDaCAgICAgICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJPbk9mZiAgICAgICAgRW5hYmxlL2Rpc2FibGUgdGltZW91dCBmdW5jdGlvbgorICogQHBhcmFtW2luXSAgIHUzMlRpbWVPdXRDbnQgICBUaW1lb3V0IGNvdW50CisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBzZXQgdGhlIHRpbWVvdXQgY291bnQuCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSBzdXBwb3J0ZWQgaW4gY2hhbm5lbCAwIGFuZCBjaGFubmVsIDEuCisgKi8KK3ZvaWQgUERNQV9TZXRUaW1lT3V0KFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMk9uT2ZmLCB1aW50MzJfdCB1MzJUaW1lT3V0Q250KQoreworICAgIHN3aXRjaCh1MzJDaCkKKyAgICB7CisgICAgICAgIGNhc2UgMFVMOgorICAgICAgICAgICAgKHBkbWEpLT5UT0MwXzEgPSAoKHBkbWEpLT5UT0MwXzEgJiB+UERNQV9UT0MwXzFfVE9DMF9Nc2spIHwgdTMyVGltZU91dENudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDFVTDoKKyAgICAgICAgICAgIChwZG1hKS0+VE9DMF8xID0gKChwZG1hKS0+VE9DMF8xICYgflBETUFfVE9DMF8xX1RPQzFfTXNrKSB8ICh1MzJUaW1lT3V0Q250IDw8IFBETUFfVE9DMF8xX1RPQzFfUG9zKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYodTMyT25PZmYpCisgICAgeworICAgICAgICAocGRtYSktPlRPVVRFTiB8PSAoMVVMIDw8IHUzMkNoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKHBkbWEpLT5UT1VURU4gJj0gfigxVUwgPDwgdTMyQ2gpOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgVHJpZ2dlciBQRE1BCisgKgorICogQHBhcmFtW2luXSAgIHBkbWEgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFBETUEgbW9kdWxlCisgKiBAcGFyYW1baW5dICAgdTMyQ2ggICAgICAgICAgIFRoZSBzZWxlY3RlZCBjaGFubmVsCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiB0cmlnZ2VyIHRoZSBzZWxlY3RlZCBjaGFubmVsLgorICovCit2b2lkIFBETUFfVHJpZ2dlcihQRE1BX1QgKnBkbWEsIHVpbnQzMl90IHUzMkNoKQoreworICAgIGlmKGF1OENoU2VsZWN0W3UzMkNoXSA9PSBQRE1BX01FTSkKKyAgICB7CisgICAgICAgIChwZG1hKS0+U1dSRVEgPSAoMVVMIDw8IHUzMkNoKTsKKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIEVuYWJsZSBJbnRlcnJ1cHQKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJDaCAgICAgICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJNYXNrICAgICAgICAgVGhlIEludGVycnVwdCBUeXBlLiBWYWxpZCB2YWx1ZXMgYXJlCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9JTlRfVFJBTlNfRE9ORQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSU5UX1RBQkxFCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9JTlRfVElNRU9VVAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSU5UX0FMSUdOCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBlbmFibGUgdGhlIHNlbGVjdGVkIGNoYW5uZWwgaW50ZXJydXB0LgorICAgICAgICBQRE1BX0lOVF9USU1FT1VUIGlzIG9ubHkgc3VwcG9ydGVkIGluIGNoYW5uZWwgMCBhbmQgY2hhbm5lbCAxLgorICovCit2b2lkIFBETUFfRW5hYmxlSW50KFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgc3dpdGNoKHUzMk1hc2spCisgICAgeworICAgICAgICBjYXNlIFBETUFfSU5UX1RSQU5TX0RPTkU6CisgICAgICAgIGNhc2UgUERNQV9JTlRfQUxJR046CisgICAgICAgICAgICAocGRtYSktPklOVEVOIHw9ICgxVUwgPDwgdTMyQ2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERNQV9JTlRfVEFCTEU6CisgICAgICAgICAgICAocGRtYSktPkRTQ1RbdTMyQ2hdLkNUTCAmPSB+UERNQV9EU0NUX0NUTF9UQklOVERJU19Nc2s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQRE1BX0lOVF9USU1FT1VUOgorICAgICAgICAgICAgKHBkbWEpLT5UT1VUSUVOIHw9ICgxVUwgPDwgdTMyQ2gpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyAqCisgKiBAcGFyYW1baW5dICAgcGRtYSAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUERNQSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0gICB1MzJDaCAgICAgICAgICAgVGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAqIEBwYXJhbVtpbl0gICB1MzJNYXNrICAgICAgICAgVGhlIEludGVycnVwdCBUeXBlLiBWYWxpZCB2YWx1ZXMgYXJlCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9JTlRfVFJBTlNfRE9ORQorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSU5UX1RBQkxFCisgKiAgICAgICAgICAgICAgICAtIFxyZWYgUERNQV9JTlRfVElNRU9VVAorICogICAgICAgICAgICAgICAgLSBccmVmIFBETUFfSU5UX0FMSUdOCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIHRoZSBzZWxlY3RlZCBjaGFubmVsIGludGVycnVwdC4KKyAgICAgICAgUERNQV9JTlRfVElNRU9VVCBpcyBvbmx5IHN1cHBvcnRlZCBpbiBjaGFubmVsIDAgYW5kIGNoYW5uZWwgMS4KKyAgICAgICAgVGhlIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IGlzIGRpc2FibGVkIHdoZW4gdGFibGUgZW1wdHkgaW50ZXJydXB0IGlzIGRpc2FibGVkKFBETUFfSU5UX1RFTVBUWSkuCisgKi8KK3ZvaWQgUERNQV9EaXNhYmxlSW50KFBETUFfVCAqcGRtYSwgdWludDMyX3QgdTMyQ2gsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgc3dpdGNoKHUzMk1hc2spCisgICAgeworICAgICAgICBjYXNlIFBETUFfSU5UX1RSQU5TX0RPTkU6CisgICAgICAgIGNhc2UgUERNQV9JTlRfQUxJR046CisgICAgICAgICAgICAocGRtYSktPklOVEVOICY9IH4oMVVMIDw8IHUzMkNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBETUFfSU5UX1RBQkxFOgorICAgICAgICAgICAgKHBkbWEpLT5EU0NUW3UzMkNoXS5DVEwgfD0gUERNQV9EU0NUX0NUTF9UQklOVERJU19Nc2s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQRE1BX0lOVF9USU1FT1VUOgorICAgICAgICAgICAgKHBkbWEpLT5UT1VUSUVOICY9IH4oMVVMIDw8IHUzMkNoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUERNQV9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBQRE1BX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9xZWkuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3FlaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NjJlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9xZWkuYwpAQCAtMCwwICsxLDE0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHFlaS5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqICRSZXZpc2lvbjogMiAkCisgKiAkRGF0ZTogMTcvMDkvMjAgOTozM2EgJAorICogQGJyaWVmICAgIFF1YWRyYXR1cmUgRW5jb2RlciBJbnRlcmZhY2UgKFFFSSkgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJNMjM1MS5oIgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUUVJX0RyaXZlciBRRUkgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUUVJX0VYUE9SVEVEX0ZVTkNUSU9OUyBRRUkgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBDbG9zZSBRRUkgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gcmVzZXQgUUVJIGNvbmZpZ3VyYXRpb24gYW5kIHN0b3AgUUVJIGNvdW50aW5nLgorICAqLwordm9pZCBRRUlfQ2xvc2UoUUVJX1QqIHFlaSkKK3sKKyAgICAvKiBSZXNldCBRRUkgY29uZmlndXJhdGlvbiAqLworICAgIHFlaS0+Q1RMID0gMFVMOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFFFSSBpbnRlcnJ1cHQKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMySW50U2VsICAgSW50ZXJydXB0IHR5cGUgc2VsZWN0aW9uLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0RJUklFTl9Nc2sgICA6IERpcmVjdGlvbiBjaGFuZ2UgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfT1ZVTklFTl9Nc2sgIDogQ291bnRlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfQ01QSUVOX01zayAgIDogQ29tcGFyZS1tYXRjaCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9JRFhJRU5fTXNrICAgOiBJbmRleCBkZXRlY3RlZCBpbnRlcnJ1cHQKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIFFFSSBzcGVjaWZpZWQgaW50ZXJydXB0LgorICAqLwordm9pZCBRRUlfRGlzYWJsZUludChRRUlfVCogcWVpLCB1aW50MzJfdCB1MzJJbnRTZWwpCit7CisgICAgLyogRGlzYWJsZSBRRUkgc3BlY2lmaWVkIGludGVycnVwdCAqLworICAgIFFFSV9ESVNBQkxFX0lOVChxZWksIHUzMkludFNlbCk7CisKKyAgICAvKiBEaXNhYmxlIE5WSUMgUUVJIElSUSAqLworICAgIGlmKChxZWkgPT0gUUVJMCkgfHwgKHFlaSA9PSBRRUkwX05TKSkKKyAgICB7CisgICAgICAgIE5WSUNfRGlzYWJsZUlSUShRRUkwX0lSUW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBOVklDX0Rpc2FibGVJUlEoUUVJMV9JUlFuKTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBRRUkgaW50ZXJydXB0CisgICogQHBhcmFtW2luXSAgcWVpICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkludFNlbCAgIEludGVycnVwdCB0eXBlIHNlbGVjdGlvbi4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUUVJX0NUTF9ESVJJRU5fTXNrICAgOiBEaXJlY3Rpb24gY2hhbmdlIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX09WVU5JRU5fTXNrICA6IENvdW50ZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRRUlfQ1RMX0NNUElFTl9Nc2sgICA6IENvbXBhcmUtbWF0Y2ggaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfSURYSUVOX01zayAgIDogSW5kZXggZGV0ZWN0ZWQgaW50ZXJydXB0CisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlIFFFSSBzcGVjaWZpZWQgaW50ZXJydXB0LgorICAqLwordm9pZCBRRUlfRW5hYmxlSW50KFFFSV9UKiBxZWksIHVpbnQzMl90IHUzMkludFNlbCkKK3sKKyAgICAvKiBFbmFibGUgUUVJIHNwZWNpZmllZCBpbnRlcnJ1cHQgKi8KKyAgICBRRUlfRU5BQkxFX0lOVChxZWksIHUzMkludFNlbCk7CisKKyAgICAvKiBFbmFibGUgTlZJQyBRRUkgSVJRICovCisgICAgaWYoKHFlaSA9PSBRRUkwKSB8fCAocWVpID09IFFFSTBfTlMpKQorICAgIHsKKyAgICAgICAgTlZJQ19FbmFibGVJUlEoUUVJMF9JUlFuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTlZJQ19FbmFibGVJUlEoUUVJMV9JUlFuKTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIE9wZW4gUUVJIGluIHNwZWNpZmllZCBtb2RlIGFuZCBlbmFibGUgaW5wdXQKKyAgKiBAcGFyYW1baW5dICBxZWkgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFFSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTW9kZSAgICAgUUVJIGNvdW50aW5nIG1vZGUuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfWDRfRlJFRV9DT1VOVElOR19NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfWDJfRlJFRV9DT1VOVElOR19NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfWDRfQ09NUEFSRV9DT1VOVElOR19NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFFSV9DVExfWDJfQ09NUEFSRV9DT1VOVElOR19NT0RFCisgICogQHBhcmFtW2luXSAgdTMyVmFsdWUgICAgVGhlIGNvdW50ZXIgbWF4aW11bSB2YWx1ZSBpbiBjb21wYXJlLWNvdW50aW5nIG1vZGUuCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gc2V0IFFFSSBpbiBzcGVjaWZpZWQgbW9kZSBhbmQgZW5hYmxlIGlucHV0LgorICAqLwordm9pZCBRRUlfT3BlbihRRUlfVCogcWVpLCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJWYWx1ZSkKK3sKKyAgICAvKiBTZXQgUUVJIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAvKiBTZXQgUUVJIGNvdW50aW5nIG1vZGUgKi8KKyAgICAvKiBFbmFibGUgSURYLCBRRUEgYW5kIFFFQiBpbnB1dCB0byBRRUkgY29udHJvbGxlciAqLworICAgIHFlaS0+Q1RMID0gKHFlaS0+Q1RMICYgKH5RRUlfQ1RMX01PREVfTXNrKSkgfCAoKHUzMk1vZGUpIHwgUUVJX0NUTF9DSEFFTl9Nc2sgfCBRRUlfQ1RMX0NIQkVOX01zayB8IFFFSV9DVExfSURYRU5fTXNrKTsKKworICAgIC8qIFNldCBRRUkgbWF4aW11bSBjb3VudCB2YWx1ZSBpbiBpbiBjb21wYXJlLWNvdW50aW5nIG1vZGUgKi8KKyAgICBxZWktPkNOVE1BWCA9IHUzMlZhbHVlOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdGFydCBRRUkgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBxZWkgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUUVJIG1vZHVsZS4KKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBlbmFibGUgUUVJIGZ1bmN0aW9uIGFuZCBzdGFydCBRRUkgY291bnRpbmcuCisgICovCit2b2lkIFFFSV9TdGFydChRRUlfVCogcWVpKQoreworICAgIC8qIEVuYWJsZSBRRUkgY29udHJvbGxlciBmdW5jdGlvbiAqLworICAgIHFlaS0+Q1RMIHw9IFFFSV9DVExfUUVJRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdG9wIFFFSSBmdW5jdGlvbgorICAqIEBwYXJhbVtpbl0gIHFlaSAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRRUkgbW9kdWxlLgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGUgUUVJIGZ1bmN0aW9uIGFuZCBzdG9wIFFFSSBjb3VudGluZy4KKyAgKi8KK3ZvaWQgUUVJX1N0b3AoUUVJX1QqIHFlaSkKK3sKKyAgICAvKiBEaXNhYmxlIFFFSSBjb250cm9sbGVyIGZ1bmN0aW9uICovCisgICAgcWVpLT5DVEwgJj0gKH5RRUlfQ1RMX1FFSUVOX01zayk7Cit9CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBRRUlfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgUUVJX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9xc3BpLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9xc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiYWY0NwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3FzcGkuYwpAQCAtMCwwICsxLDgzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHFzcGkuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFFTUEkgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgUVNQSV9Ecml2ZXIgUVNQSSBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIFFTUElfRVhQT1JURURfRlVOQ1RJT05TIFFTUEkgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gbWFrZSBRU1BJIG1vZHVsZSBiZSByZWFkeSB0byB0cmFuc2Zlci4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzdGVyU2xhdmUgRGVjaWRlcyB0aGUgUVNQSSBtb2R1bGUgaXMgb3BlcmF0aW5nIGluIG1hc3RlciBtb2RlIG9yIGluIHNsYXZlIG1vZGUuIChRU1BJX1NMQVZFLCBRU1BJX01BU1RFUikKKyAgKiBAcGFyYW1baW5dICB1MzJRU1BJTW9kZSBEZWNpZGVzIHRoZSB0cmFuc2ZlciB0aW1pbmcuIChRU1BJX01PREVfMCwgUVNQSV9NT0RFXzEsIFFTUElfTU9ERV8yLCBRU1BJX01PREVfMykKKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhV2lkdGggRGVjaWRlcyB0aGUgZGF0YSB3aWR0aCBvZiBhIFFTUEkgdHJhbnNhY3Rpb24uCisgICogQHBhcmFtW2luXSAgdTMyQnVzQ2xvY2sgVGhlIGV4cGVjdGVkIGZyZXF1ZW5jeSBvZiBRU1BJIGJ1cyBjbG9jayBpbiBIei4KKyAgKiBAcmV0dXJuIEFjdHVhbCBmcmVxdWVuY3kgb2YgUVNQSSBwZXJpcGhlcmFsIGNsb2NrLgorICAqIEBkZXRhaWxzIEJ5IGRlZmF1bHQsIHRoZSBRU1BJIHRyYW5zZmVyIHNlcXVlbmNlIGlzIE1TQiBmaXJzdCwgdGhlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaXMgYWN0aXZlIGxvdyBhbmQgdGhlIGF1dG9tYXRpYworICAqICAgICAgICAgIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbiBpcyBkaXNhYmxlZC4KKyAgKiAgICAgICAgICBJbiBTbGF2ZSBtb2RlLCB0aGUgdTMyQnVzQ2xvY2sgc2hhbGwgYmUgTlVMTCBhbmQgdGhlIFFTUEkgY2xvY2sgZGl2aWRlciBzZXR0aW5nIHdpbGwgYmUgMC4KKyAgKiAgICAgICAgICBUaGUgYWN0dWFsIGNsb2NrIHJhdGUgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSB0YXJnZXQgUVNQSSBjbG9jayByYXRlLgorICAqICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgUVNQSSBzb3VyY2UgY2xvY2sgcmF0ZSBpcyAxMiBNSHogYW5kIHRoZSB0YXJnZXQgUVNQSSBidXMgY2xvY2sgcmF0ZSBpcyA3IE1IeiwgdGhlCisgICogICAgICAgICAgYWN0dWFsIFFTUEkgY2xvY2sgcmF0ZSB3aWxsIGJlIDZNSHouCisgICAgSWYgdTMyQnVzQ2xvY2sgPSAwLCBESVZJREVSIHNldHRpbmcgd2lsbCBiZSBzZXQgdG8gdGhlIG1heGltdW0gdmFsdWUuCisgICAgSWYgdTMyQnVzQ2xvY2sgPj0gc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBmb3IgU2VjdXJlLCBRU1BJIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlIHdpbGwgYmUgc2V0IHRvIEFQQiBjbG9jayBhbmQgRElWSURFUiB3aWxsIGJlIHNldCB0byAwLgorICAgIElmIHUzMkJ1c0Nsb2NrID49IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZm9yIE5vbi1TZWN1cmUsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZG8gYW55dGhpbmcgdG8gYXZvaWQgdGhlIHNpdHVhdGlvbiB0aGF0IHRoZSBmcmVxdWVuY3kgb2YKKyAgKiAgICAgICAgIFFTUEkgYnVzIGNsb2NrIGNhbm5vdCBiZSBmYXN0ZXIgdGhhbiB0aGUgc3lzdGVtIGNsb2NrIHJhdGUuIFVzZXIgc2hvdWxkIHNldCB1cCBjYXJlZnVsbHkuCisgICAgSWYgdTMyQnVzQ2xvY2sgPj0gUVNQSSBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSwgRElWSURFUiB3aWxsIGJlIHNldCB0byAwLgorICAgIEluIHNsYXZlIG1vZGUgZm9yIFNlY3VyZSwgdGhlIFFTUEkgcGVyaXBoZXJhbCBjbG9jayByYXRlIHdpbGwgZXF1YWwgdG8gQVBCIGNsb2NrIHJhdGUuCisgICAgSW4gc2xhdmUgbW9kZSBmb3IgTm9uLVNlY3VyZSwgdGhlIFFTUEkgcGVyaXBoZXJhbCBjbG9jayByYXRlIHdpbGwgZXF1YWwgdG8gdGhlIGNsb2NrIHJhdGUgc2V0IGluIHNlY3VyZSBtb2RlLgorICAqLwordWludDMyX3QgUVNQSV9PcGVuKFFTUElfVCAqcXNwaSwKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJNYXN0ZXJTbGF2ZSwKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJRU1BJTW9kZSwKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJEYXRhV2lkdGgsCisgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdTMyQnVzQ2xvY2spCit7CisgICAgdWludDMyX3QgdTMyQ2xrU3JjID0gMFVMLCB1MzJEaXYsIHUzMkhDTEtGcmVxLCB1MzJQQ0xLMEZyZXEsIHUzMlJldFZhbHVlID0gMFVMOworCisgICAgaWYodTMyRGF0YVdpZHRoID09IDMyVUwpCisgICAgeworICAgICAgICB1MzJEYXRhV2lkdGggPSAwVUw7CisgICAgfQorCisgICAgLyogR2V0IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgKi8KKyAgICB1MzJIQ0xLRnJlcSA9IENMS19HZXRIQ0xLRnJlcSgpOworICAgIC8qIEdldCBBUEIwIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIHUzMlBDTEswRnJlcSA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKworICAgIGlmKHUzMk1hc3RlclNsYXZlID09IFFTUElfTUFTVEVSKQorICAgIHsKKyAgICAgICAgLyogRGVmYXVsdCBzZXR0aW5nOiBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGlzIGFjdGl2ZSBsb3c7IGRpc2FibGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbi4gKi8KKyAgICAgICAgcXNwaS0+U1NDVEwgPSBRU1BJX1NTX0FDVElWRV9MT1c7CisKKyAgICAgICAgLyogRGVmYXVsdCBzZXR0aW5nOiBNU0IgZmlyc3QsIGRpc2FibGUgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQsIFNQX0NZQ0xFID0gMC4gKi8KKyAgICAgICAgcXNwaS0+Q1RMID0gdTMyTWFzdGVyU2xhdmUgfCAodTMyRGF0YVdpZHRoIDw8IFFTUElfQ1RMX0RXSURUSF9Qb3MpIHwgKHUzMlFTUElNb2RlKSB8IFFTUElfQ1RMX1NQSUVOX01zazsKKworICAgICAgICBpZih1MzJCdXNDbG9jayA+PSB1MzJIQ0xLRnJlcSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIShfX1BDKCkgJiBOU19PRkZTRVQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBQQ0xLIGFzIHRoZSBjbG9jayBzb3VyY2Ugb2YgUVNQSSAqLworICAgICAgICAgICAgICAgIGlmKChxc3BpID09IFFTUEkwKSB8fCAocXNwaSA9PSBRU1BJMF9OUykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9RU1BJMFNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BDTEswOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGNsb2NrIHNvdXJjZSBvZiBRU1BJICovCisgICAgICAgIGlmKChxc3BpID09IFFTUEkwKSB8fCAocXNwaSA9PSBRU1BJMF9OUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX0hYVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFFTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9QTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX1BDTEswKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQQ0xLMEZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYodTMyQnVzQ2xvY2sgPj0gdTMySENMS0ZyZXEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNldCBESVZJREVSID0gMCAqLworICAgICAgICAgICAgcXNwaS0+Q0xLRElWID0gMFVMOworICAgICAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyQ2xrU3JjOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYodTMyQnVzQ2xvY2sgPj0gdTMyQ2xrU3JjKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgRElWSURFUiA9IDAgKi8KKyAgICAgICAgICAgIHFzcGktPkNMS0RJViA9IDBVTDsKKyAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMkNsa1NyYzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHUzMkJ1c0Nsb2NrID09IDBVTCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IERJVklERVIgdG8gdGhlIG1heGltdW0gdmFsdWUgMHgxRkYuIGZfc3BpID0gZl9zcGlfY2xrX3NyYyAvIChESVZJREVSICsgMSkgKi8KKyAgICAgICAgICAgIHFzcGktPkNMS0RJViB8PSBRU1BJX0NMS0RJVl9ESVZJREVSX01zazsKKyAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9ICh1MzJDbGtTcmMgLyAoMHgxRkZVTCArIDFVTCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRGl2ID0gKCgodTMyQ2xrU3JjICogMTBVTCkgLyB1MzJCdXNDbG9jayArIDVVTCkgLyAxMFVMKSAtIDFVTDsgLyogUm91bmQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciAqLworICAgICAgICAgICAgaWYodTMyRGl2ID4gMHgxRkZVTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJEaXYgPSAweDFGRlVMOworICAgICAgICAgICAgICAgIHFzcGktPkNMS0RJViB8PSBRU1BJX0NMS0RJVl9ESVZJREVSX01zazsKKyAgICAgICAgICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gKHUzMkNsa1NyYyAvICgweDFGRlVMICsgMVVMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcXNwaS0+Q0xLRElWID0gKHFzcGktPkNMS0RJViAmICh+UVNQSV9DTEtESVZfRElWSURFUl9Nc2spKSB8ICh1MzJEaXYgPDwgUVNQSV9DTEtESVZfRElWSURFUl9Qb3MpOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyQ2xrU3JjIC8gKHUzMkRpdiArIDFVTCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgICAgIC8qIEZvciBzbGF2ZSBtb2RlLCBmb3JjZSB0aGUgUVNQSSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgdG8gZXF1YWwgQVBCIGNsb2NrIHJhdGUuICovCisgICAgeworICAgICAgICAvKiBEZWZhdWx0IHNldHRpbmc6IHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaXMgbG93IGxldmVsIGFjdGl2ZS4gKi8KKyAgICAgICAgcXNwaS0+U1NDVEwgPSBRU1BJX1NTX0FDVElWRV9MT1c7CisKKyAgICAgICAgLyogRGVmYXVsdCBzZXR0aW5nOiBNU0IgZmlyc3QsIGRpc2FibGUgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQsIFNQX0NZQ0xFID0gMC4gKi8KKyAgICAgICAgcXNwaS0+Q1RMID0gdTMyTWFzdGVyU2xhdmUgfCAodTMyRGF0YVdpZHRoIDw8IFFTUElfQ1RMX0RXSURUSF9Qb3MpIHwgKHUzMlFTUElNb2RlKSB8IFFTUElfQ1RMX1NQSUVOX01zazsKKworICAgICAgICAvKiBTZXQgRElWSURFUiA9IDAgKi8KKyAgICAgICAgcXNwaS0+Q0xLRElWID0gMFVMOworCisgICAgICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2VsZWN0IFBDTEsgYXMgdGhlIGNsb2NrIHNvdXJjZSBvZiBRU1BJICovCisgICAgICAgICAgICBpZigocXNwaSA9PSBRU1BJMCkgfHwgKHFzcGkgPT0gUVNQSTBfTlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1FTUEkwU0VMX01zaykpIHwgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUENMSzA7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIHNsYXZlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyUENMSzBGcmVxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2hlY2sgY2xvY2sgc291cmNlIG9mIFFTUEkgKi8KKyAgICAgICAgICAgIGlmKChxc3BpID09IFFTUEkwKSB8fCAocXNwaSA9PSBRU1BJMF9OUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShRU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfUVNQSTBTRUxfSFhUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX1BMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShRU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUENMSzApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEswRnJlcTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB1MzJSZXRWYWx1ZTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIFFTUEkgY29udHJvbGxlci4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgQ2xlYXIgU1BJRU4gYml0IG9mIFFTUElfQ1RMIHJlZ2lzdGVyIHRvIGRpc2FibGUgUVNQSSB0cmFuc2ZlciBjb250cm9sLgorICAqLwordm9pZCBRU1BJX0Nsb3NlKFFTUElfVCAqcXNwaSkKK3sKKyAgICBxc3BpLT5DVEwgJj0gflFTUElfQ1RMX1NQSUVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICBDbGVhciBSWCBGSUZPIGJ1ZmZlci4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIFFTUEkgUlggRklGTyBidWZmZXIuIFRoZSBSWEVNUFRZIChRU1BJX1NUQVRVU1s4XSkgd2lsbCBiZSBzZXQgdG8gMS4KKyAgKi8KK3ZvaWQgUVNQSV9DbGVhclJ4RklGTyhRU1BJX1QgKnFzcGkpCit7CisgICAgcXNwaS0+RklGT0NUTCB8PSBRU1BJX0ZJRk9DVExfUlhGQkNMUl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2xlYXIgVFggRklGTyBidWZmZXIuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBRU1BJIFRYIEZJRk8gYnVmZmVyLiBUaGUgVFhFTVBUWSAoUVNQSV9TVEFUVVNbMTZdKSB3aWxsIGJlIHNldCB0byAxLgorICBUaGUgVFggc2hpZnQgcmVnaXN0ZXIgd2lsbCBub3QgYmUgY2xlYXJlZC4KKyAgKi8KK3ZvaWQgUVNQSV9DbGVhclR4RklGTyhRU1BJX1QgKnFzcGkpCit7CisgICAgcXNwaS0+RklGT0NUTCB8PSBRU1BJX0ZJRk9DVExfVFhGQkNMUl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSB0aGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FibGUgdGhlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gYW5kIHNldCBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIHRvIGluYWN0aXZlIHN0YXRlLgorICAqLwordm9pZCBRU1BJX0Rpc2FibGVBdXRvU1MoUVNQSV9UICpxc3BpKQoreworICAgIHFzcGktPlNTQ1RMICY9IH4oUVNQSV9TU0NUTF9BVVRPU1NfTXNrIHwgUVNQSV9TU0NUTF9TU19Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyU1NQaW5NYXNrIFNwZWNpZmllcyBzbGF2ZSBzZWxlY3Rpb24gcGlucy4gKFFTUElfU1MpCisgICogQHBhcmFtW2luXSAgdTMyQWN0aXZlTGV2ZWwgU3BlY2lmaWVzIHRoZSBhY3RpdmUgbGV2ZWwgb2Ygc2xhdmUgc2VsZWN0aW9uIHNpZ25hbC4gKFFTUElfU1NfQUNUSVZFX0hJR0gsIFFTUElfU1NfQUNUSVZFX0xPVykKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlIHRoZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uLiBPbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4KKyAgKiAgICAgICAgICBUaGUgc2xhdmUgc2VsZWN0aW9uIHBpbiBhbmQgdGhlIGFjdGl2ZSBsZXZlbCB3aWxsIGJlIHNldCBpbiB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBRU1BJX0VuYWJsZUF1dG9TUyhRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMlNTUGluTWFzaywgdWludDMyX3QgdTMyQWN0aXZlTGV2ZWwpCit7CisgICAgcXNwaS0+U1NDVEwgPSAocXNwaS0+U1NDVEwgJiAofihRU1BJX1NTQ1RMX0FVVE9TU19Nc2sgfCBRU1BJX1NTQ1RMX1NTQUNUUE9MX01zayB8IFFTUElfU1NDVExfU1NfTXNrKSkpIHwgKHUzMlNTUGluTWFzayB8IHUzMkFjdGl2ZUxldmVsIHwgUVNQSV9TU0NUTF9BVVRPU1NfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgdGhlIFFTUEkgYnVzIGNsb2NrLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJCdXNDbG9jayBUaGUgZXhwZWN0ZWQgZnJlcXVlbmN5IG9mIFFTUEkgYnVzIGNsb2NrIGluIEh6LgorICAqIEByZXR1cm4gQWN0dWFsIGZyZXF1ZW5jeSBvZiBRU1BJIGJ1cyBjbG9jay4KKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGluIE1hc3RlciBtb2RlLiBUaGUgYWN0dWFsIGNsb2NrIHJhdGUgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSB0YXJnZXQgUVNQSSBidXMgY2xvY2sgcmF0ZS4KKyAgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIFFTUEkgc291cmNlIGNsb2NrIHJhdGUgaXMgMTIgTUh6IGFuZCB0aGUgdGFyZ2V0IFFTUEkgYnVzIGNsb2NrIHJhdGUgaXMgNyBNSHosIHRoZSBhY3R1YWwgUVNQSSBidXMgY2xvY2sKKyAgKiAgICAgICAgICByYXRlIHdpbGwgYmUgNiBNSHouCisgICAgSWYgdTMyQnVzQ2xvY2sgPSAwLCBESVZJREVSIHNldHRpbmcgd2lsbCBiZSBzZXQgdG8gdGhlIG1heGltdW0gdmFsdWUuCisgICAgSWYgdTMyQnVzQ2xvY2sgPj0gc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBmb3IgU2VjdXJlLCBRU1BJIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlIHdpbGwgYmUgc2V0IHRvIEFQQiBjbG9jayBhbmQgRElWSURFUiB3aWxsIGJlIHNldCB0byAwLgorICAgIElmIHUzMkJ1c0Nsb2NrID49IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZm9yIE5vbi1TZWN1cmUsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZG8gYW55dGhpbmcgdG8gYXZvaWQgdGhlIHNpdHVhdGlvbiB0aGF0IHRoZSBmcmVxdWVuY3kgb2YKKyAgKiAgICAgICAgIFFTUEkgYnVzIGNsb2NrIGNhbm5vdCBiZSBmYXN0ZXIgdGhhbiB0aGUgc3lzdGVtIGNsb2NrIHJhdGUuIFVzZXIgc2hvdWxkIHNldCB1cCBjYXJlZnVsbHkuCisgICAgSWYgdTMyQnVzQ2xvY2sgPj0gUVNQSSBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSwgRElWSURFUiB3aWxsIGJlIHNldCB0byAwLgorICAqLwordWludDMyX3QgUVNQSV9TZXRCdXNDbG9jayhRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKQoreworICAgIHVpbnQzMl90IHUzMkNsa1NyYywgdTMySENMS0ZyZXE7CisgICAgdWludDMyX3QgdTMyRGl2LCB1MzJSZXRWYWx1ZTsKKworICAgIC8qIENoZWNrIGlmIHZhbGlkIFFTUEkgZXhpc3QgKi8KKyAgICBpZighKChxc3BpID09IFFTUEkwKSB8fCAocXNwaSA9PSBRU1BJMF9OUykpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDBVTDsKKyAgICB9CisKKyAgICAvKiBHZXQgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIHUzMkhDTEtGcmVxID0gQ0xLX0dldEhDTEtGcmVxKCk7CisKKyAgICBpZih1MzJCdXNDbG9jayA+PSB1MzJIQ0xLRnJlcSkKKyAgICB7CisgICAgICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2VsZWN0IFBDTEsgYXMgdGhlIGNsb2NrIHNvdXJjZSBvZiBRU1BJICovCisgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9RU1BJMFNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BDTEswOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgY2xvY2sgc291cmNlIG9mIFFTUEkgKi8KKyAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFFTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9IWFQpCisgICAgeworICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgIH0KKyAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX1BMTCkKKyAgICB7CisgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgIH0KKyAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX1BDTEswKQorICAgIHsKKyAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgIH0KKworICAgIGlmKHUzMkJ1c0Nsb2NrID49IHUzMkhDTEtGcmVxKQorICAgIHsKKyAgICAgICAgLyogU2V0IERJVklERVIgPSAwICovCisgICAgICAgIHFzcGktPkNMS0RJViA9IDBVTDsKKyAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJDbGtTcmM7CisgICAgfQorICAgIGVsc2UgaWYodTMyQnVzQ2xvY2sgPj0gdTMyQ2xrU3JjKQorICAgIHsKKyAgICAgICAgLyogU2V0IERJVklERVIgPSAwICovCisgICAgICAgIHFzcGktPkNMS0RJViA9IDBVTDsKKyAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJDbGtTcmM7CisgICAgfQorICAgIGVsc2UgaWYodTMyQnVzQ2xvY2sgPT0gMFVMKQorICAgIHsKKyAgICAgICAgLyogU2V0IERJVklERVIgdG8gdGhlIG1heGltdW0gdmFsdWUgMHgxRkYuIGZfc3BpID0gZl9zcGlfY2xrX3NyYyAvIChESVZJREVSICsgMSkgKi8KKyAgICAgICAgcXNwaS0+Q0xLRElWIHw9IFFTUElfQ0xLRElWX0RJVklERVJfTXNrOworICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICB1MzJSZXRWYWx1ZSA9ICh1MzJDbGtTcmMgLyAoMHgxRkZVTCArIDFVTCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJEaXYgPSAoKCh1MzJDbGtTcmMgKiAxMFVMKSAvIHUzMkJ1c0Nsb2NrICsgNVVMKSAvIDEwVUwpIC0gMVVMOyAvKiBSb3VuZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyICovCisgICAgICAgIGlmKHUzMkRpdiA+IDB4MUZGVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkRpdiA9IDB4MUZGVUw7CisgICAgICAgICAgICBxc3BpLT5DTEtESVYgfD0gUVNQSV9DTEtESVZfRElWSURFUl9Nc2s7CisgICAgICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyQ2xrU3JjIC8gKDB4MUZGVUwgKyAxVUwpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHFzcGktPkNMS0RJViA9IChxc3BpLT5DTEtESVYgJiAoflFTUElfQ0xLRElWX0RJVklERVJfTXNrKSkgfCAodTMyRGl2IDw8IFFTUElfQ0xLRElWX0RJVklERVJfUG9zKTsKKyAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9ICh1MzJDbGtTcmMgLyAodTMyRGl2ICsgMVVMKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyUmV0VmFsdWU7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIEZJRk8gdGhyZXNob2xkIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlR4VGhyZXNob2xkIERlY2lkZXMgdGhlIFRYIEZJRk8gdGhyZXNob2xkLiBJdCBjb3VsZCBiZSAwIH4gNy4KKyAgKiBAcGFyYW1baW5dICB1MzJSeFRocmVzaG9sZCBEZWNpZGVzIHRoZSBSWCBGSUZPIHRocmVzaG9sZC4gSXQgY291bGQgYmUgMCB+IDcuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgU2V0IFRYIEZJRk8gdGhyZXNob2xkIGFuZCBSWCBGSUZPIHRocmVzaG9sZCBjb25maWd1cmF0aW9ucy4KKyAgKi8KK3ZvaWQgUVNQSV9TZXRGSUZPKFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyVHhUaHJlc2hvbGQsIHVpbnQzMl90IHUzMlJ4VGhyZXNob2xkKQoreworICAgIHFzcGktPkZJRk9DVEwgPSAocXNwaS0+RklGT0NUTCAmIH4oUVNQSV9GSUZPQ1RMX1RYVEhfTXNrIHwgUVNQSV9GSUZPQ1RMX1JYVEhfTXNrKSkgfAorICAgICAgICAgICAgICAgICAgICAodTMyVHhUaHJlc2hvbGQgPDwgUVNQSV9GSUZPQ1RMX1RYVEhfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICh1MzJSeFRocmVzaG9sZCA8PCBRU1BJX0ZJRk9DVExfUlhUSF9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgYWN0dWFsIGZyZXF1ZW5jeSBvZiBRU1BJIGJ1cyBjbG9jay4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gQWN0dWFsIFFTUEkgYnVzIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsY3VsYXRlIHRoZSBhY3R1YWwgUVNQSSBidXMgY2xvY2sgcmF0ZSBhY2NvcmRpbmcgdG8gdGhlIFFRU1BJU0VML1FTUEl4U0VMIGFuZCBESVZJREVSIHNldHRpbmdzLiBPbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4KKyAgKi8KK3VpbnQzMl90IFFTUElfR2V0QnVzQ2xvY2soUVNQSV9UICpxc3BpKQoreworICAgIHVpbnQzMl90IHUzMkRpdjsKKyAgICB1aW50MzJfdCB1MzJDbGtTcmM7CisKKyAgICAvKiBDaGVjayBpZiB2YWxpZCBRU1BJIGV4aXN0ICovCisgICAgaWYoISgocXNwaSA9PSBRU1BJMCkgfHwgKHFzcGkgPT0gUVNQSTBfTlMpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAwVUw7CisgICAgfQorCisgICAgLyogR2V0IERJVklERVIgc2V0dGluZyAqLworICAgIHUzMkRpdiA9IChxc3BpLT5DTEtESVYgJiBRU1BJX0NMS0RJVl9ESVZJREVSX01zaykgPj4gUVNQSV9DTEtESVZfRElWSURFUl9Qb3M7CisKKyAgICAvKiBDaGVjayBjbG9jayBzb3VyY2Ugb2YgUVNQSSAqLworICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoUVNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9RU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1FTUEkwU0VMX0hYVCkKKyAgICB7CisgICAgICAgIHUzMkNsa1NyYyA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgfQorICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShRU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUExMKQorICAgIHsKKyAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgfQorICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShRU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1FTUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfUVNQSTBTRUxfUENMSzApCisgICAgeworICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJDbGtTcmMgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgfQorCisgICAgLyogUmV0dXJuIFFTUEkgYnVzIGNsb2NrIHJhdGUgKi8KKyAgICByZXR1cm4gKHUzMkNsa1NyYyAvICh1MzJEaXYgKyAxVUwpKTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgICogICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBlbmFibGUgYml0LgorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1VOSVRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1NBQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZVUl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TTFZUT19JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9UWFVGX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9GSUZPX1JYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfRklGT19SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSworICAqCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgRW5hYmxlIFFTUEkgcmVsYXRlZCBpbnRlcnJ1cHRzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3ZvaWQgUVNQSV9FbmFibGVJbnQoUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIC8qIEVuYWJsZSB1bml0IHRyYW5zZmVyIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1VOSVRfSU5UX01BU0spID09IFFTUElfVU5JVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPkNUTCB8PSBRU1BJX0NUTF9VTklUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU1NBQ1RfSU5UX01BU0spID09IFFTUElfU1NBQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TU0NUTCB8PSBRU1BJX1NTQ1RMX1NTQUNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TU0lOQUNUX0lOVF9NQVNLKSA9PSBRU1BJX1NTSU5BQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TU0NUTCB8PSBRU1BJX1NTQ1RMX1NTSU5BSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgc2xhdmUgVFggdW5kZXIgcnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NMVlVSX0lOVF9NQVNLKSA9PSBRU1BJX1NMVlVSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1NDVEwgfD0gUVNQSV9TU0NUTF9TTFZVUklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TTFZCRV9JTlRfTUFTSykgPT0gUVNQSV9TTFZCRV9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPlNTQ1RMIHw9IFFTUElfU1NDVExfU0xWQkVJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBzbGF2ZSBtb2RlIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NMVlRPX0lOVF9NQVNLKSA9PSBRU1BJX1NMVlRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1NDVEwgfD0gUVNQSV9TU0NUTF9TTFZUT0lFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9UWFVGX0lOVF9NQVNLKSA9PSBRU1BJX1RYVUZfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5GSUZPQ1RMIHw9IFFTUElfRklGT0NUTF9UWFVGSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgVFggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSykgPT0gUVNQSV9GSUZPX1RYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5GSUZPQ1RMIHw9IFFTUElfRklGT0NUTF9UWFRISUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSykgPT0gUVNQSV9GSUZPX1JYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5GSUZPQ1RMIHw9IFFTUElfRklGT0NUTF9SWFRISUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1JYT1ZfSU5UX01BU0spID09IFFTUElfRklGT19SWE9WX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+RklGT0NUTCB8PSBRU1BJX0ZJRk9DVExfUlhPVklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSykgPT0gUVNQSV9GSUZPX1JYVE9fSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5GSUZPQ1RMIHw9IFFTUElfRklGT0NUTF9SWFRPSUVOX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBlbmFibGUgYml0cy4KKyAgKiAgICAgICAgICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IGJpdC4KKyAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0cyB3aWxsIGJlIGRpc2FibGVkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfVU5JVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TU0lOQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NMVlVSX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NMVkJFX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NMVlRPX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1RYVUZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfRklGT19UWFRIX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9GSUZPX1JYT1ZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfRklGT19SWFRPX0lOVF9NQVNLCisgICoKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBEaXNhYmxlIFFTUEkgcmVsYXRlZCBpbnRlcnJ1cHRzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3ZvaWQgUVNQSV9EaXNhYmxlSW50KFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBEaXNhYmxlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfVU5JVF9JTlRfTUFTSykgPT0gUVNQSV9VTklUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+Q1RMICY9IH5RU1BJX0NUTF9VTklUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NTQUNUX0lOVF9NQVNLKSA9PSBRU1BJX1NTQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1NDVEwgJj0gflFTUElfU1NDVExfU1NBQ1RJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TU0lOQUNUX0lOVF9NQVNLKSA9PSBRU1BJX1NTSU5BQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TU0NUTCAmPSB+UVNQSV9TU0NUTF9TU0lOQUlFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBzbGF2ZSBUWCB1bmRlciBydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU0xWVVJfSU5UX01BU0spID09IFFTUElfU0xWVVJfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TU0NUTCAmPSB+UVNQSV9TU0NUTF9TTFZVUklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBzbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU0xWQkVfSU5UX01BU0spID09IFFTUElfU0xWQkVfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TU0NUTCAmPSB+UVNQSV9TU0NUTF9TTFZCRUlFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBzbGF2ZSBtb2RlIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NMVlRPX0lOVF9NQVNLKSA9PSBRU1BJX1NMVlRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1NDVEwgJj0gflFTUElfU1NDVExfU0xWVE9JRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgVFggdW5kZXJmbG93IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1RYVUZfSU5UX01BU0spID09IFFTUElfVFhVRl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPkZJRk9DVEwgJj0gflFTUElfRklGT0NUTF9UWFVGSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFRYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1RYVEhfSU5UX01BU0spID09IFFTUElfRklGT19UWFRIX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+RklGT0NUTCAmPSB+UVNQSV9GSUZPQ1RMX1RYVEhJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSykgPT0gUVNQSV9GSUZPX1JYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5GSUZPQ1RMICY9IH5RU1BJX0ZJRk9DVExfUlhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCBvdmVycnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSykgPT0gUVNQSV9GSUZPX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5GSUZPQ1RMICY9IH5RU1BJX0ZJRk9DVExfUlhPVklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9GSUZPX1JYVE9fSU5UX01BU0spID09IFFTUElfRklGT19SWFRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+RklGT0NUTCAmPSB+UVNQSV9GSUZPQ1RMX1JYVE9JRU5fTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICBHZXQgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSAgcXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFFTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBzb3VyY2VzLgorICAqICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLgorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSByZWFkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfVU5JVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TU0lOQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NMVlVSX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NMVkJFX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NMVlRPX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1RYVUZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfRklGT19UWFRIX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9GSUZPX1JYT1ZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfRklGT19SWFRPX0lOVF9NQVNLCisgICoKKyAgKiBAcmV0dXJuIEludGVycnVwdCBmbGFncyBvZiBzZWxlY3RlZCBzb3VyY2VzLgorICAqIEBkZXRhaWxzIEdldCBRU1BJIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3VpbnQzMl90IFFTUElfR2V0SW50RmxhZyhRU1BJX1QgKnFzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdWludDMyX3QgdTMySW50U3RhdHVzOworICAgIHVpbnQzMl90IHUzMkludEZsYWcgPSAwVUw7CisKKyAgICB1MzJJbnRTdGF0dXMgPSBxc3BpLT5TVEFUVVM7CisKKyAgICAvKiBDaGVjayB1bml0IHRyYW5zZmVyIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1VOSVRfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBRU1BJX1NUQVRVU19VTklUSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gUVNQSV9VTklUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NTQUNUX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgUVNQSV9TVEFUVVNfU1NBQ1RJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBRU1BJX1NTQUNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU1NJTkFDVF9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFFTUElfU1RBVFVTX1NTSU5BSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gUVNQSV9TU0lOQUNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TTFZVUl9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFFTUElfU1RBVFVTX1NMVlVSSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gUVNQSV9TTFZVUl9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBzbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU0xWQkVfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBRU1BJX1NUQVRVU19TTFZCRUlGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFFTUElfU0xWQkVfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgc2xhdmUgbW9kZSB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9TTFZUT19JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFFTUElfU1RBVFVTX1NMVlRPSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gUVNQSV9TTFZUT19JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBzbGF2ZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfVFhVRl9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFFTUElfU1RBVFVTX1RYVUZJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBRU1BJX1RYVUZfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVFggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFFTUElfU1RBVFVTX1RYVEhJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBRU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfRklGT19SWFRIX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgUVNQSV9TVEFUVVNfUlhUSElGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFFTUElfRklGT19SWFRIX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfRklGT19SWE9WX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgUVNQSV9TVEFUVVNfUlhPVklGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFFTUElfRklGT19SWE9WX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFFTUElfU1RBVFVTX1JYVE9JRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSzsKKyAgICB9CisKKyAgICByZXR1cm4gdTMySW50RmxhZzsKK30KKworLyoqCisgICogQGJyaWVmICBDbGVhciBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBxc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgUVNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgICogICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuCisgICogICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdCBmbGFncyB3aWxsIGJlIGNsZWFyZWQuIEl0IGNvdWxkIGJlIHRoZSBjb21iaW5hdGlvbiBvZjoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfVU5JVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9TU0lOQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NMVlVSX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NMVkJFX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1NMVlRPX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1RYVUZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfRklGT19SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0ZJRk9fUlhUT19JTlRfTUFTSworICAqCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgQ2xlYXIgUVNQSSByZWxhdGVkIGludGVycnVwdCBmbGFncyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCit2b2lkIFFTUElfQ2xlYXJJbnRGbGFnKFFTUElfVCAqcXNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICBpZih1MzJNYXNrICYgUVNQSV9VTklUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1RBVFVTID0gUVNQSV9TVEFUVVNfVU5JVElGX01zazsgLyogQ2xlYXIgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBRU1BJX1NTQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1RBVFVTID0gUVNQSV9TVEFUVVNfU1NBQ1RJRl9Nc2s7IC8qIENsZWFyIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFFTUElfU1NJTkFDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHFzcGktPlNUQVRVUyA9IFFTUElfU1RBVFVTX1NTSU5BSUZfTXNrOyAvKiBDbGVhciBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGluYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFFTUElfU0xWVVJfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TVEFUVVMgPSBRU1BJX1NUQVRVU19TTFZVUklGX01zazsgLyogQ2xlYXIgc2xhdmUgVFggdW5kZXIgcnVuIGludGVycnVwdCBmbGFnICovCisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFFTUElfU0xWQkVfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TVEFUVVMgPSBRU1BJX1NUQVRVU19TTFZCRUlGX01zazsgLyogQ2xlYXIgc2xhdmUgYml0IGNvdW50IGVycm9yIGludGVycnVwdCBmbGFnICovCisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFFTUElfU0xWVE9fSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TVEFUVVMgPSBRU1BJX1NUQVRVU19TTFZUT0lGX01zazsgLyogQ2xlYXIgc2xhdmUgbW9kZSB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBRU1BJX1RYVUZfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TVEFUVVMgPSBRU1BJX1NUQVRVU19UWFVGSUZfTXNrOyAvKiBDbGVhciBzbGF2ZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgUVNQSV9GSUZPX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICBxc3BpLT5TVEFUVVMgPSBRU1BJX1NUQVRVU19SWE9WSUZfTXNrOyAvKiBDbGVhciBSWCBvdmVycnVuIGludGVycnVwdCBmbGFnICovCisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFFTUElfRklGT19SWFRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgcXNwaS0+U1RBVFVTID0gUVNQSV9TVEFUVVNfUlhUT0lGX01zazsgLyogQ2xlYXIgUlggdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IFFTUEkgc3RhdHVzLgorICAqIEBwYXJhbVtpbl0gIHFzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBRU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBzb3VyY2VzLgorICAqICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBzb3VyY2UuCisgICogICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGZsYWdzIHdpbGwgYmUgcmVhZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX0JVU1lfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9SWF9FTVBUWV9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1JYX0ZVTExfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9UWF9FTVBUWV9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBRU1BJX1RYX0ZVTExfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUVNQSV9UWFJYX1JFU0VUX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1BJRU5fU1RTX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFFTUElfU1NMSU5FX1NUU19NQVNLCisgICoKKyAgKiBAcmV0dXJuIEZsYWdzIG9mIHNlbGVjdGVkIHNvdXJjZXMuCisgICogQGRldGFpbHMgR2V0IFFTUEkgcmVsYXRlZCBzdGF0dXMgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICAqLwordWludDMyX3QgUVNQSV9HZXRTdGF0dXMoUVNQSV9UICpxc3BpLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHVpbnQzMl90IHUzMlRtcFN0YXR1czsKKyAgICB1aW50MzJfdCB1MzJGbGFnID0gMFVMOworCisgICAgdTMyVG1wU3RhdHVzID0gcXNwaS0+U1RBVFVTOworCisgICAgLyogQ2hlY2sgYnVzeSBzdGF0dXMgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfQlVTWV9NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgUVNQSV9TVEFUVVNfQlVTWV9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBRU1BJX0JVU1lfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCBlbXB0eSBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1JYX0VNUFRZX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBRU1BJX1NUQVRVU19SWEVNUFRZX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFFTUElfUlhfRU1QVFlfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCBmdWxsIGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfUlhfRlVMTF9NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgUVNQSV9TVEFUVVNfUlhGVUxMX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFFTUElfUlhfRlVMTF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYIGVtcHR5IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfVFhfRU1QVFlfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFFTUElfU1RBVFVTX1RYRU1QVFlfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gUVNQSV9UWF9FTVBUWV9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYIGZ1bGwgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9UWF9GVUxMX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBRU1BJX1NUQVRVU19UWEZVTExfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gUVNQSV9UWF9GVUxMX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVFgvUlggcmVzZXQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgUVNQSV9UWFJYX1JFU0VUX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBRU1BJX1NUQVRVU19UWFJYUlNUX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFFTUElfVFhSWF9SRVNFVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFNQSUVOIGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFFTUElfU1BJRU5fU1RTX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBRU1BJX1NUQVRVU19TUElFTlNUU19Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBRU1BJX1NQSUVOX1NUU19NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFFTUEl4X1NTIGxpbmUgc3RhdHVzICovCisgICAgaWYoKHUzMk1hc2sgJiBRU1BJX1NTTElORV9TVFNfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFFTUElfU1RBVFVTX1NTTElORV9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBRU1BJX1NTTElORV9TVFNfTUFTSzsKKyAgICB9CisKKyAgICByZXR1cm4gdTMyRmxhZzsKK30KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBRU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFFTUElfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3JldGFyZ2V0LmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9yZXRhcmdldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MDU3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9yZXRhcmdldC5jCkBAIC0wLDAgKzEsODY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcmV0YXJnZXQuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgRGVidWcgUG9ydCBhbmQgU2VtaWhvc3QgU2V0dGluZyBTb3VyY2UgRmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgIk51TWljcm8uaCIKKworI2lmIGRlZmluZWQgKF9fSUNDQVJNX18pCisjIHByYWdtYSBkaWFnX3N1cHByZXNzPVBtMTUwCisjZW5kaWYKKworCisjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICAgKQorI2lmIChfX0FSTUNDX1ZFUlNJT04gPCA0MDAwMDApCisjZWxzZQorLyogSW5zaXN0IG9uIGtlZXBpbmcgd2lkdGhwcmVjLCB0byBhdm9pZCBYIHByb3BhZ2F0aW9uIGJ5IGJlbmlnbiBjb2RlIGluIEMtbGliICovCisjcHJhZ21hIGltcG9ydCBfcHJpbnRmX3dpZHRocHJlYworI2VuZGlmCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogR2xvYmFsIHZhcmlhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmICEoZGVmaW5lZChfX0lDQ0FSTV9fKSAmJiAoX19WRVJfXyA+PSA2MDEwMDAwKSkKKyMgaWYgKF9fQVJNQ0NfVkVSU0lPTiA8IDYwNDAwMDApCitzdHJ1Y3QgX19GSUxFCit7CisgICAgaW50IGhhbmRsZTsgLyogQWRkIHdoYXRldmVyIHlvdSBuZWVkIGhlcmUgKi8KK307CisjIGVuZGlmCisjZWxpZihfX1ZFUl9fID49IDgwMDAwMDApCitzdHJ1Y3QgX19GSUxFCit7CisgICAgaW50IGhhbmRsZTsgLyogQWRkIHdoYXRldmVyIHlvdSBuZWVkIGhlcmUgKi8KK307CisjZW5kaWYKK0ZJTEUgX19zdGRvdXQ7CitGSUxFIF9fc3RkaW47CisKKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+IDYwNDAwMDApCisjIGlmICFkZWZpbmVkKF9fTUlDUk9MSUIpCitfX2FzbSgiLmdsb2JhbCBfX0FSTV91c2Vfbm9fYXJndlxuXHQiICJfX0FSTV91c2Vfbm9fYXJndjpcblx0Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjaWYgKGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSB8fCBkZWZpbmVkKF9fSUNDQVJNX18pKQorZXh0ZXJuIGludDMyX3QgU0hfRG9Db21tYW5kKGludDMyX3QgbjMySW5fUjAsIGludDMyX3QgbjMySW5fUjEsIGludDMyX3QgKnBuMzJPdXRfUjApOworCisjaWYgZGVmaW5lZCggX19JQ0NBUk1fXyApCitfX1dFQUsKKyNlbHNlCitfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKyNlbmRpZgordWludDMyX3QgUHJvY2Vzc0hhcmRGYXVsdCh1aW50MzJfdCBsciwgdWludDMyX3QgbXNwLCB1aW50MzJfdCBwc3ApOworCisjZW5kaWYKKworI3ByYWdtYSBwYWNrKHB1c2gpCisjcHJhZ21hIHBhY2soMSkKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICpuYW1lOworICAgIHVpbnQzMl90IHUzMkFkZHI7CisgICAgdWludDhfdCB1OE5TSWR4OworfSBJUF9UOworI3ByYWdtYSBwYWNrKHBvcCkKKworI2lmbmRlZiBERUJVR19FTkFCTEVfU0VNSUhPU1QKK3N0YXRpYyBJUF9UIHNfSXBUYmxbXSA9IHsKK3siU1lTIixTWVNfQkFTRSwwfSwKK3siQ0xLIixDTEtfQkFTRSwwfSwKK3siSU5UIixJTlRfQkFTRSwwfSwKK3siR1BJT0EiLEdQSU9BX0JBU0UsMjI0KzB9LAoreyJHUElPQiIsR1BJT0JfQkFTRSwyMjQrMX0sCit7IkdQSU9DIixHUElPQ19CQVNFLDIyNCsyfSwKK3siR1BJT0QiLEdQSU9EX0JBU0UsMjI0KzN9LAoreyJHUElPRSIsR1BJT0VfQkFTRSwyMjQrNH0sCit7IkdQSU9GIixHUElPRl9CQVNFLDIyNCs1fSwKK3siR1BJT0ciLEdQSU9HX0JBU0UsMjI0KzZ9LAoreyJHUElPSCIsR1BJT0hfQkFTRSwyMjQrN30sCit7IkdQSU9fREJDVEwiLEdQSU9fREJDVExfQkFTRSwwfSwKK3siUEEiLEdQSU9fUElOX0RBVEFfQkFTRSAgICAgICAsMjI0KzB9LAoreyJQQiIsR1BJT19QSU5fREFUQV9CQVNFKzE2KjQgICwyMjQrMH0sCit7IlBDIixHUElPX1BJTl9EQVRBX0JBU0UrMioxNio0LDIyNCswfSwKK3siUEQiLEdQSU9fUElOX0RBVEFfQkFTRSszKjE2KjQsMjI0KzB9LAoreyJQRSIsR1BJT19QSU5fREFUQV9CQVNFKzQqMTYqNCwyMjQrMH0sCit7IlBGIixHUElPX1BJTl9EQVRBX0JBU0UrNSoxNio0LDIyNCswfSwKK3siUEciLEdQSU9fUElOX0RBVEFfQkFTRSs2KjE2KjQsMjI0KzB9LAoreyJQSCIsR1BJT19QSU5fREFUQV9CQVNFKzcqMTYqNCwyMjQrMH0sCit7IlBETUEwIixQRE1BMF9CQVNFLDB9LAoreyJQRE1BMSIsUERNQTFfQkFTRSxQRE1BMV9BdHRyfSwKK3siVVNCSCIsVVNCSF9CQVNFLFVTQkhfQXR0cn0sCit7IkZNQyIsRk1DX0JBU0UsMH0sCit7IlNESDAiLFNESDBfQkFTRSxTREgwX0F0dHJ9LAoreyJFQkkiLEVCSV9CQVNFLEVCSV9BdHRyfSwKK3siU0NVIixTQ1VfQkFTRSwwfSwKK3siQ1JDIixDUkNfQkFTRSxDUkNfQXR0cn0sCit7IkNSUFQiLENSUFRfQkFTRSxDUlBUX0F0dHJ9LAoreyJXRFQiLFdEVF9CQVNFLDB9LAoreyJXV0RUIixXV0RUX0JBU0UsMH0sCit7IlJUQyIsUlRDX0JBU0UsUlRDX0F0dHJ9LAoreyJFQURDIixFQURDX0JBU0UsRUFEQ19BdHRyfSwKK3siQUNNUDAxIixBQ01QMDFfQkFTRSxBQ01QMDFfQXR0cn0sCit7IkRBQzAiLERBQzBfQkFTRSxEQUNfQXR0cn0sCit7IkRBQzEiLERBQzFfQkFTRSxEQUNfQXR0cn0sCit7IkkyUzAiLEkyUzBfQkFTRSxJMlMwX0F0dHJ9LAoreyJPVEciLE9UR19CQVNFLE9UR19BdHRyfSwKK3siVE1SMDEiLFRNUjAxX0JBU0UsMH0sCit7IlRNUjIzIixUTVIyM19CQVNFLFRNUjIzX0F0dHJ9LAoreyJFUFdNMCIsRVBXTTBfQkFTRSxFUFdNMF9BdHRyfSwKK3siRVBXTTEiLEVQV00xX0JBU0UsRVBXTTFfQXR0cn0sCit7IkJQV00wIixCUFdNMF9CQVNFLEJQV00wX0F0dHJ9LAoreyJCUFdNMSIsQlBXTTFfQkFTRSxCUFdNMV9BdHRyfSwKK3siUVNQSTAiLFFTUEkwX0JBU0UsUVNQSTBfQXR0cn0sCit7IlNQSTAiLFNQSTBfQkFTRSxTUEkwX0F0dHJ9LAoreyJTUEkxIixTUEkxX0JBU0UsU1BJMV9BdHRyfSwKK3siU1BJMiIsU1BJMl9CQVNFLFNQSTJfQXR0cn0sCit7IlNQSTMiLFNQSTNfQkFTRSxTUEkzX0F0dHJ9LAoreyJVQVJUMCIsVUFSVDBfQkFTRSxVQVJUMF9BdHRyfSwKK3siVUFSVDEiLFVBUlQxX0JBU0UsVUFSVDFfQXR0cn0sCit7IlVBUlQyIixVQVJUMl9CQVNFLFVBUlQyX0F0dHJ9LAoreyJVQVJUMyIsVUFSVDNfQkFTRSxVQVJUM19BdHRyfSwKK3siVUFSVDQiLFVBUlQ0X0JBU0UsVUFSVDRfQXR0cn0sCit7IlVBUlQ1IixVQVJUNV9CQVNFLFVBUlQ1X0F0dHJ9LAoreyJJMkMwIixJMkMwX0JBU0UsSTJDMF9BdHRyfSwKK3siSTJDMSIsSTJDMV9CQVNFLEkyQzFfQXR0cn0sCit7IkkyQzIiLEkyQzJfQkFTRSxJMkMyX0F0dHJ9LAoreyJTQzAiLFNDMF9CQVNFLFNDMF9BdHRyfSwKK3siU0MxIixTQzFfQkFTRSxTQzFfQXR0cn0sCit7IlNDMiIsU0MyX0JBU0UsU0MyX0F0dHJ9LAoreyJDQU4wIixDQU4wX0JBU0UsQ0FOMF9BdHRyfSwKK3siUUVJMCIsUUVJMF9CQVNFLFFFSTBfQXR0cn0sCit7IlFFSTEiLFFFSTFfQkFTRSxRRUkxX0F0dHJ9LAoreyJFQ0FQMCIsRUNBUDBfQkFTRSxFQ0FQMF9BdHRyfSwKK3siRUNBUDEiLEVDQVAxX0JBU0UsRUNBUDFfQXR0cn0sCit7IlRSTkciLFRSTkdfQkFTRSxUUk5HX0F0dHJ9LAoreyJVU0JEIixVU0JEX0JBU0UsVVNCRF9BdHRyfSwKK3siVVNDSTAiLFVTQ0kwX0JBU0UsIFVTQ0kwX0F0dHJ9LAoreyJVU0NJMSIsVVNDSTFfQkFTRSwgVVNDSTFfQXR0cn0sCit7MCxVU0NJMV9CQVNFKzQwOTYsIDB9LAorfTsKKyNlbmRpZgorCitpbnQga2JoaXQodm9pZCk7CitpbnQgSXNEZWJ1Z0ZpZm9FbXB0eSh2b2lkKTsKK3ZvaWQgX3R0eXdyY2goaW50IGNoKTsKK2ludCBmcHV0YyhpbnQgY2gsIEZJTEUgKnN0cmVhbSk7CisKKyNpZiAoZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pIHx8IGRlZmluZWQoX19JQ0NBUk1fXykpCitpbnQgZmdldGMoRklMRSAqc3RyZWFtKTsKK2ludCBmZXJyb3IoRklMRSAqc3RyZWFtKTsKKyNlbmRpZgorCitjaGFyIEdldENoYXIodm9pZCk7Cit2b2lkIFNlbmRDaGFyX1RvVUFSVChpbnQgY2gpOwordm9pZCBTZW5kQ2hhcihpbnQgY2gpOworaW50MzJfdCBTSF9SZXR1cm4oaW50MzJfdCBuMzJJbl9SMCwgaW50MzJfdCBuMzJJbl9SMSwgaW50MzJfdCAqcG4zMk91dF9SMCk7Cit2b2lkIF9zeXNfZXhpdChpbnQgcmV0dXJuX2NvZGUpX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKKworI2lmIChkZWZpbmVkKERFQlVHX0VOQUJMRV9TRU1JSE9TVCkgfHwgZGVmaW5lZChPU19VU0VfU0VNSUhPU1RJTkcpKQorI2lmIChkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgZGVmaW5lZChfX0lDQ0FSTV9fKSB8fCBkZWZpbmVkKF9fR05VQ19fKSkKKy8qIFRoZSBzdGF0aWMgYnVmZmVyIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhlIHNlbWlob3N0ICovCitzdGF0aWMgY2hhciBnX2J1ZlsxNl07CitzdGF0aWMgY2hhciBnX2J1Zl9sZW4gPSAwOworc3RhdGljIHZvbGF0aWxlIGludDMyX3QgZ19JQ0VfQ29ubmVjZWQgPSAxOworCisvKioKKyAqIEBicmllZiAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBIYXJkZmF1bHQgaGFuZGxlci4KKyAqIEBwYXJhbSAgICBOb25lCisgKiBAcmV0dXJucyAgTm9uZQorICogQGRldGFpbHMgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IEhhcmRmYXVsdCBoYW5kbGVyIGFuZCBjaGVjayBpZiBpdCBpcyBjYXVzZWQgYnkgX19CS1BUIG9yIG5vdC4KKyAqCisgKi8KKwordWludDMyX3QgUHJvY2Vzc0hhcmRGYXVsdCh1aW50MzJfdCBsciwgdWludDMyX3QgbXNwLCB1aW50MzJfdCBwc3ApCit7CisgICAgdWludDMyX3QgKnNwID0gMDsKKyAgICB1aW50MzJfdCBpbnN0OworCisgICAgLyogQ2hlY2sgdGhlIHVzZWQgc3RhY2sgKi8KKyAgICBpZihsciAmIDB4NDApCisgICAgeworICAgICAgICAvKiBTZWN1cmUgc3RhY2sgdXNlZCAqLworICAgICAgICBpZihsciAmIDQpCisgICAgICAgICAgICBzcCA9ICh1aW50MzJfdCAqKXBzcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3AgPSAodWludDMyX3QgKiltc3A7CisKKyAgICB9CisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBOb24tc2VjdXJlIHN0YWNrIHVzZWQgKi8KKyAgICAgICAgaWYobHIgJiA0KQorICAgICAgICAgICAgc3AgPSAodWludDMyX3QgKilfX1RaX2dldF9QU1BfTlMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3AgPSAodWludDMyX3QgKilfX1RaX2dldF9NU1BfTlMoKTsKKworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHNwICE9IDApCisgICAgeworICAgICAgICAvKiBHZXQgdGhlIGluc3RydWN0aW9uIGNhdXNlZCB0aGUgaGFyZGZhdWx0ICovCisgICAgICAgIGluc3QgPSBNMTYoc3BbNl0pOworCisKKyAgICAgICAgaWYoaW5zdCA9PSAweEJFQUIpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgSWYgdGhlIGluc3RydWN0aW9uIGlzIDB4QkVBQiwgaXQgbWVhbnMgaXQgaXMgY2F1c2VkIGJ5IEJLUFQgd2l0aG91dCBJQ0UgY29ubmVjdGVkLgorICAgICAgICAgICAgICAgIFdlIHN0aWxsIHJldHVybiBmb3Igb3V0cHV0L2lucHV0IG1lc3NhZ2UgdG8gVUFSVC4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBnX0lDRV9Db25uZWNlZCA9IDA7IC8vIFNldCBhIGZsYWcgZm9yIElDRSBvZmZsaW5lCisgICAgICAgICAgICBzcFs2XSArPSAyOyAvLyByZXR1cm4gdG8gbmV4dCBpbnN0cnVjdGlvbgorICAgICAgICAgICAgcmV0dXJuIGxyOyAgLy8gS2VlcCBsciBpbiBSMAorICAgICAgICB9CisgICAgfQorCisgICAgLyogSXQgaXMgY2FzdWVkIGJ5IGhhcmRmYXVsdCAoTm90IHNlbWlob3N0KS4gSnVzdCBwcm9jZXNzIHRoZSBoYXJkIGZhdWx0IGhlcmUuICovCisgICAgLyogVE9ETzogSW1wbGVtZW50IHlvdXIgaGFyZGZhdWx0IGhhbmRsZSBjb2RlIGhlcmUgKi8KKworICAgIC8qCisgICAgcHJpbnRmKCIgIEhhcmRGYXVsdCFcblxuIik7CisgICAgcHJpbnRmKCJyMCAgPSAweCV4XG4iLCBzcFswXSk7CisgICAgcHJpbnRmKCJyMSAgPSAweCV4XG4iLCBzcFsxXSk7CisgICAgcHJpbnRmKCJyMiAgPSAweCV4XG4iLCBzcFsyXSk7CisgICAgcHJpbnRmKCJyMyAgPSAweCV4XG4iLCBzcFszXSk7CisgICAgcHJpbnRmKCJyMTIgPSAweCV4XG4iLCBzcFs0XSk7CisgICAgcHJpbnRmKCJsciAgPSAweCV4XG4iLCBzcFs1XSk7CisgICAgcHJpbnRmKCJwYyAgPSAweCV4XG4iLCBzcFs2XSk7CisgICAgcHJpbnRmKCJwc3IgPSAweCV4XG4iLCBzcFs3XSk7CisgICAgKi8KKworICAgIHdoaWxlKDEpe30KKworfQorCisKKworLyoqCisgKgorICogQGJyaWVmICAgICAgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3Mgc2VtaWhvc3RlZCBjb21tYW5kCisgKiBAcGFyYW1baW5dICBuMzJJbl9SMCAgOiBzZW1paG9zdCByZWdpc3RlciAwCisgKiBAcGFyYW1baW5dICBuMzJJbl9SMSAgOiBzZW1paG9zdCByZWdpc3RlciAxCisgKiBAcGFyYW1bb3V0XSBwbjMyT3V0X1IwOiBzZW1paG9zdCByZWdpc3RlciAwCisgKiBAcmV0dmFsICAgICAwOiBObyBJQ0UgZGVidWcKKyAqIEByZXR2YWwgICAgIDE6IElDRSBkZWJ1ZworICoKKyAqLworCitpbnQzMl90IFNIX1JldHVybihpbnQzMl90IG4zMkluX1IwLCBpbnQzMl90IG4zMkluX1IxLCBpbnQzMl90ICpwbjMyT3V0X1IwKQoreworICAgICh2b2lkKW4zMkluX1IxOworICAgIGlmKGdfSUNFX0Nvbm5lY2VkKQorICAgIHsKKyAgICAgICAgaWYocG4zMk91dF9SMCkKKyAgICAgICAgICAgICpwbjMyT3V0X1IwID0gbjMySW5fUjA7CisKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKworI2VuZGlmCisjZWxzZSAvLyBkZWZpbmVkKERFQlVHX0VOQUJMRV9TRU1JSE9TVCkKKworaW50MzJfdCBTSF9SZXR1cm4oaW50MzJfdCBuMzJJbl9SMCwgaW50MzJfdCBuMzJJbl9SMSwgaW50MzJfdCAqcG4zMk91dF9SMCk7CisKKyNpZiBkZWZpbmVkKCBfX0lDQ0FSTV9fICkKK19fV0VBSworI2Vsc2UKK19fYXR0cmlidXRlX18oKHdlYWspKQorI2VuZGlmCit1aW50MzJfdCBQcm9jZXNzSGFyZEZhdWx0KHVpbnQzMl90IGxyLCB1aW50MzJfdCBtc3AsIHVpbnQzMl90IHBzcCkKK3sKKyAgICBleHRlcm4gdm9pZCBTQ1VfSVJRSGFuZGxlcih2b2lkKTsKKyAgICB1aW50MzJfdCAqc3AgPSAwdWw7CisgICAgdWludDMyX3QgaTsKKyAgICB1aW50MzJfdCBpbnN0LCBhZGRyLHRhZGRyID0gMHVsLHRkYXRhOworICAgIGludDMyX3Qgc2VjdXJlOworICAgIHVpbnQzMl90IHJtLHJuLHJ0LCBpbW01LCBpbW04OworICAgIGludDMyX3QgZUZsYWc7CisgICAgdWludDhfdCBpZHgsIGJpdDsKKyAgICBpbnQzMl90IHM7CisKKyAgICAvKiBDaGVjayB0aGUgdXNlZCBzdGFjayAqLworICAgIHNlY3VyZSA9IChsciAmIDB4NDB1bCk/MXVsOjB1bDsKKyAgICBpZihzZWN1cmUpCisgICAgeworICAgICAgICAvKiBTZWN1cmUgc3RhY2sgdXNlZCAqLworICAgICAgICBpZihsciAmIDRVTCkKKyAgICAgICAgeworICAgICAgICAgICAgc3AgPSAodWludDMyX3QgKilwc3A7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzcCA9ICh1aW50MzJfdCAqKW1zcDsKKyAgICAgICAgfQorCisgICAgfQorI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gMykKKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBOb24tc2VjdXJlIHN0YWNrIHVzZWQgKi8KKyAgICAgICAgaWYobHIgJiA0KQorICAgICAgICAgICAgc3AgPSAodWludDMyX3QgKikodWludDMyX3QpX19UWl9nZXRfUFNQX05TKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwID0gKHVpbnQzMl90ICopKHVpbnQzMl90KV9fVFpfZ2V0X01TUF9OUygpOworCisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAgICByMCAgPSBzcFswXQorICAgICAgICByMSAgPSBzcFsxXQorICAgICAgICByMiAgPSBzcFsyXQorICAgICAgICByMyAgPSBzcFszXQorICAgICAgICByMTIgPSBzcFs0XQorICAgICAgICBsciAgPSBzcFs1XQorICAgICAgICBwYyAgPSBzcFs2XQorICAgICAgICBwc3IgPSBzcFs3XQorICAgICovCisKKyAgICBwcmludGYoIiEhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tISFcbiIpOworICAgIHByaW50ZigiICAgICAgICAgICAgICAgICAgICAgICA8PDwgSGFyZEZhdWx0ID4+PlxuIik7CisgICAgLyogR2V0IHRoZSBpbnN0cnVjdGlvbiBjYXVzZWQgdGhlIGhhcmRmYXVsdCAqLworICAgIGFkZHIgPSBzcFs2XTsKKyAgICBpbnN0ID0gTTE2KGFkZHIpOworICAgIGVGbGFnID0gMDsKKyAgICBpZigoIXNlY3VyZSkgJiYgKChhZGRyICYgTlNfT0ZGU0VUKSA9PSAwKSApCisgICAgeworICAgICAgICBwcmludGYoIiAgTm9uLXNlY3VyZSBDUFUgdHJ5IHRvIGZldGNoIHNlY3VyZSBjb2RlIGluIDB4JXhcbiIsIGFkZHIpOworICAgICAgICBwcmludGYoIiAgVHJ5IHRvIGNoZWNrIE5TQyByZWdpb24gb3IgU0FVIHNldHRpbmdzLlxuIik7CisKKyAgICAgICAgZUZsYWcgPSAxOworICAgIH1lbHNlIGlmKGluc3QgPT0gMHhCRUFCKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIgIEV4ZWN1dGUgQktQVCB3aXRob3V0IElDRSBjb25uZWN0ZWRcbiIpOworICAgICAgICBlRmxhZyA9IDI7CisgICAgfQorICAgIGVsc2UgaWYoKGluc3QgPj4gMTIpID09IDUpCisgICAgeworICAgICAgICBlRmxhZyA9IDM7CisgICAgICAgIC8qIDAxMDF4eCBMb2FkL3N0b3JlIChyZWdpc3RlciBvZmZzZXQpIG9uIHBhZ2UgQzItMzI3IG9mIGFybXY4bSByZWYgKi8KKyAgICAgICAgcm0gPSAoaW5zdCA+PiA2KSAmIDB4NzsKKyAgICAgICAgcm4gPSAoaW5zdCA+PiAzKSAmIDB4NzsKKyAgICAgICAgcnQgPSBpbnN0ICYgMHg3OworCisgICAgICAgIHRhZGRyID0gc3Bbcm5dICsgc3Bbcm1dOworICAgICAgICB0ZGF0YSA9IHNwW3J0XTsKKyAgICAgICAgaWYocm4gPT0gcnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiICBbMHglMDh4XSAweCUwNHggJXMgUiVkIFsweCV4XVxuIixhZGRyLCBpbnN0LAorICAgICAgICAgICAgKGluc3QmQklUMTEpPyJMRFIiOiJTVFIiLHJ0LCB0YWRkcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIiAgWzB4JTA4eF0gMHglMDR4ICVzIDB4JXggWzB4JXhdXG4iLGFkZHIsIGluc3QsCisgICAgICAgICAgICAoaW5zdCZCSVQxMSk/IkxEUiI6IlNUUiIsdGRhdGEsIHRhZGRyKTsKKyAgICAgICAgfQorCisgICAgfQorICAgIGVsc2UgaWYoKGluc3QgPj4gMTMpID09IDMpCisgICAgeworICAgICAgICBlRmxhZyA9IDM7CisgICAgICAgIC8qIDAxMXh4eAkgTG9hZC9zdG9yZSB3b3JkL2J5dGUgKGltbWVkaWF0ZSBvZmZzZXQpIG9uIHBhZ2UgQzItMzI3IG9mIGFybXY4bSByZWYgKi8KKyAgICAgICAgaW1tNSA9IChpbnN0ID4+IDYpICYgMHgxZjsKKyAgICAgICAgcm4gPSAoaW5zdCA+PiAzKSAmIDB4NzsKKyAgICAgICAgcnQgPSBpbnN0ICYgMHg3OworCisgICAgICAgIHRhZGRyID0gc3Bbcm5dICsgaW1tNTsKKyAgICAgICAgdGRhdGEgPSBzcFtydF07CisgICAgICAgIGlmKHJ0ID09IHJuKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIiAgWzB4JTA4eF0gMHglMDR4ICVzIFIlZCBbMHgleF1cbiIsYWRkciwgaW5zdCwKKyAgICAgICAgICAgIChpbnN0JkJJVDExKT8iTERSIjoiU1RSIixydCwgdGFkZHIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIgIFsweCUwOHhdIDB4JTA0eCAlcyAweCV4IFsweCV4XVxuIixhZGRyLCBpbnN0LAorICAgICAgICAgICAgKGluc3QmQklUMTEpPyJMRFIiOiJTVFIiLHRkYXRhLCB0YWRkcik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZigoaW5zdCA+PiAxMikgPT0gOCkKKyAgICB7CisgICAgICAgIGVGbGFnID0gMzsKKyAgICAgICAgLyogMTAwMHh4CSBMb2FkL3N0b3JlIGhhbGZ3b3JkIChpbW1lZGlhdGUgb2Zmc2V0KSBvbiBwYWdlIEMyLTMyOCAqLworICAgICAgICBpbW01ID0gKGluc3QgPj4gNikgJiAweDFmOworICAgICAgICBybiA9IChpbnN0ID4+IDMpICYgMHg3OworICAgICAgICBydCA9IGluc3QgJiAweDc7CisKKyAgICAgICAgdGFkZHIgPSBzcFtybl0gKyBpbW01OworICAgICAgICB0ZGF0YSA9IHNwW3J0XTsKKyAgICAgICAgaWYocnQgPT0gcm4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiICBbMHglMDh4XSAweCUwNHggJXMgUiVkIFsweCV4XVxuIixhZGRyLCBpbnN0LAorICAgICAgICAgICAgKGluc3QmQklUMTEpPyJMRFIiOiJTVFIiLHJ0LCB0YWRkcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIiAgWzB4JTA4eF0gMHglMDR4ICVzIDB4JXggWzB4JXhdXG4iLGFkZHIsIGluc3QsCisgICAgICAgICAgICAoaW5zdCZCSVQxMSk/IkxEUiI6IlNUUiIsdGRhdGEsIHRhZGRyKTsKKyAgICAgICAgfQorCisgICAgfQorICAgIGVsc2UgaWYoKGluc3QgPj4gMTIpID09IDkpCisgICAgeworICAgICAgICBlRmxhZyA9IDM7CisgICAgICAgIC8qIDEwMDF4eAkgTG9hZC9zdG9yZSAoU1AtcmVsYXRpdmUpIG9uIHBhZ2UgQzItMzI4ICovCisgICAgICAgIGltbTggPSBpbnN0ICYgMHhmZjsKKyAgICAgICAgcnQgPSAoaW5zdCA+PiA4KSAmIDB4NzsKKworICAgICAgICB0YWRkciA9IHNwWzZdICsgaW1tODsKKyAgICAgICAgdGRhdGEgPSBzcFtydF07CisgICAgICAgIHByaW50ZigiICBbMHglMDh4XSAweCUwNHggJXMgMHgleCBbMHgleF1cbiIsYWRkciwgaW5zdCwKKyAgICAgICAgKGluc3QmQklUMTEpPyJMRFIiOiJTVFIiLHRkYXRhLCB0YWRkcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVGbGFnID0gNDsKKyAgICAgICAgcHJpbnRmKCIgIFVuZXhwZWN0ZWQgaW5zdHJ1Y3Rpb246IDB4JTA0eCBcbiIsIGluc3QpOworICAgIH0KKworICAgIGlmKGVGbGFnID09IDMpCisgICAgeworICAgICAgICAvKiBJdCBpcyBMRFIvU1RSIGhhcmRmYXVsdCAqLworICAgICAgICBpZighc2VjdXJlKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJdCBpcyBoYXBwZW5lZCBpbiBOb25zZWN1cmUgY29kZSAqLworCisgICAgICAgICAgICBmb3IoaT0wO2k8ICh1aW50MzJfdCkoc2l6ZW9mKHNfSXBUYmwpL3NpemVvZihJUF9UKS0xKTtpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ2FzZSAxOiBOb25zZWN1cmUgY29kZSB0cnkgdG8gYWNjZXNzIHNlY3VyZSBJUC4gSXQgYWxzbyBjYXVzZXMgU0NVIHZpb2xhdGlvbiAqLworICAgICAgICAgICAgICAgIGlmKCh0YWRkciA+PSBzX0lwVGJsW2ldLnUzMkFkZHIpICYmICh0YWRkciA8IChzX0lwVGJsW2krMV0udTMyQWRkcikpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gc19JcFRibFtpXS51OE5TSWR4OworICAgICAgICAgICAgICAgICAgICBiaXQgPSBpZHggJiAweDFmOworICAgICAgICAgICAgICAgICAgICBpZHggPSBpZHggPj4gNTsKKyAgICAgICAgICAgICAgICAgICAgcyA9IChTQ1UtPlBOU1NFVFtpZHhdID4+IGJpdCkgJiAxdWw7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICBJbGxlZ2FsIGFjY2VzcyB0byAlcyAlcyBpbiBOb25zZWN1cmUgY29kZS5cbiIsKHMpPyJOb25zZWN1cmUiOiJTZWN1cmUiLCBzX0lwVGJsW2ldLm5hbWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBDYXNlIDI6IE5vbnNlY3VyZSBjb2RlIHRyeSB0byBhY2Nlc3MgTm9uc2VjdXJlIElQIGJ1dCB0aGUgSVAgaXMgc2VjdXJlIElQICovCisgICAgICAgICAgICAgICAgaWYoKHRhZGRyID49IChzX0lwVGJsW2ldLnUzMkFkZHIrTlNfT0ZGU0VUKSkgJiYgKHRhZGRyIDwgKHNfSXBUYmxbaSsxXS51MzJBZGRyK05TX09GRlNFVCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gc19JcFRibFtpXS51OE5TSWR4OworICAgICAgICAgICAgICAgICAgICBiaXQgPSBpZHggJiAweDFmOworICAgICAgICAgICAgICAgICAgICBpZHggPSBpZHggPj4gNTsKKyAgICAgICAgICAgICAgICAgICAgcyA9IChTQ1UtPlBOU1NFVFtpZHhdID4+IGJpdCkgJiAxdWw7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICBJbGxlZ2FsIGFjY2VzcyB0byAlcyAlcyBpbiBOb25zZWN1cmUgY29kZS5cbkl0IG1heSBiZSBzZXQgYXMgc2VjdXJlIElQIGhlcmUuXG4iLChzKT8iTm9uc2VjdXJlIjoiU2VjdXJlIiwgc19JcFRibFtpXS5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogSXQgaXMgaGFwcGVuZWQgaW4gc2VjdXJlIGNvZGUgKi8KKworCisgICAgICAgICAgICBpZih0YWRkciA+IE5TX09GRlNFVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDYXNlIDM6IFNlY3VyZSB0cnkgdG8gYWNjZXNzIHNlY3VyZSBJUCB0aHJvdWdoIE5vbnNlY3VyZSBhZGRyZXNzLiBJdCBhbHNvIGNhdXNlcyBTQ1UgdmlvbGF0aW9uICovCisgICAgICAgICAgICAgICAgZm9yKGk9MDtpPCAodWludDMyX3QpKHNpemVvZihzX0lwVGJsKS9zaXplb2YoSVBfVCktMSk7aSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoKHRhZGRyID49IChzX0lwVGJsW2ldLnUzMkFkZHIrTlNfT0ZGU0VUKSkgJiYgKHRhZGRyIDwgKHNfSXBUYmxbaSsxXS51MzJBZGRyK05TX09GRlNFVCkpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHggPSBzX0lwVGJsW2ldLnU4TlNJZHg7CisgICAgICAgICAgICAgICAgICAgICAgICBiaXQgPSBpZHggJiAweDFmOworICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaWR4ID4+IDU7CisgICAgICAgICAgICAgICAgICAgICAgICBzID0gKFNDVS0+UE5TU0VUW2lkeF0gPj4gYml0KSAmIDF1bDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICBJbGxlZ2FsIHRvIHVzZSBOb25zZWN1cmUgYWRkcmVzcyB0byBhY2Nlc3MgJXMgJXMgaW4gU2VjdXJlIGNvZGVcbiIsKHMpPyJOb25zZWN1cmUiOiJTZWN1cmUiLCBzX0lwVGJsW2ldLm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKworICAgICAgICB9CisgICAgfQorCisgICAgU0NVX0lSUUhhbmRsZXIoKTsKKworICAgIHByaW50ZigiISEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0hIVxuIik7CisKKyAgICAvKiBPciAqc3AgdG8gcmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyAgICB3aGlsZSgxVXwqc3Ape30KKworICAgIHJldHVybiBscjsKK30KKworCitpbnQzMl90IFNIX1JldHVybihpbnQzMl90IG4zMkluX1IwLCBpbnQzMl90IG4zMkluX1IxLCBpbnQzMl90ICpwbjMyT3V0X1IwKQoreworICAgICh2b2lkKW4zMkluX1IwOworICAgICh2b2lkKW4zMkluX1IxOworICAgICh2b2lkKXBuMzJPdXRfUjA7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKERFQlVHX0VOQUJMRV9TRU1JSE9TVCkgKi8KKworCisvKioKKyAqIEBicmllZiAgICBSb3V0aW5lIHRvIHNlbmQgYSBjaGFyCisgKgorICogQHBhcmFtW2luXSBjaCAgQSBjaGFyYWN0ZXIgZGF0YSB3cml0ZXMgdG8gZGVidWcgcG9ydAorICoKKyAqIEByZXR1cm5zICBTZW5kIHZhbHVlIGZyb20gVUFSVCBkZWJ1ZyBwb3J0CisgKgorICogQGRldGFpbHMgIFNlbmQgYSB0YXJnZXQgY2hhciB0byBVQVJUIGRlYnVnIHBvcnQgLgorICovCisjaWZuZGVmIE5PTkJMT0NLX1BSSU5URgordm9pZCBTZW5kQ2hhcl9Ub1VBUlQoaW50IGNoKQoreworCisgICAgd2hpbGUoREVCVUdfUE9SVC0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19UWEZVTExfTXNrKXt9CisgICAgaWYoKGNoYXIpY2ggPT0gJ1xuJykKKyAgICB7CisgICAgICAgIERFQlVHX1BPUlQtPkRBVCA9ICdccic7CisgICAgICAgIHdoaWxlKERFQlVHX1BPUlQtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfVFhGVUxMX01zayl7fQorICAgIH0KKyAgICBERUJVR19QT1JULT5EQVQgPSAodWludDMyX3QpY2g7Cit9CisKKyNlbHNlCisvKiBOb24tYmxvY2sgaW1wbGVtZW50IG9mIHNlbmQgY2hhciAqLworIyBkZWZpbmUgQlVGX1NJWkUgICAgNTEyCit2b2lkIFNlbmRDaGFyX1RvVUFSVChpbnQgY2gpCit7CisgICAgc3RhdGljIHVpbnQ4X3QgdThCdWZbQlVGX1NJWkVdID0gezB9OworICAgIHN0YXRpYyBpbnQzMl90IGkzMkhlYWQgPSAwOworICAgIHN0YXRpYyBpbnQzMl90IGkzMlRhaWwgPSAwOworICAgIGludDMyX3QgaTMyVG1wOworCisgICAgLyogT25seSBmbHVzaCB0aGUgZGF0YSBpbiBidWZmZXIgdG8gVUFSVCB3aGVuIGNoID09IDAgKi8KKyAgICBpZihjaCkKKyAgICB7CisgICAgICAgIC8vIFB1c2ggY2hhcgorICAgICAgICBpZihjaCA9PSAnXG4nKQorICAgICAgICB7CisgICAgICAgICAgICBpMzJUbXAgPSBpMzJIZWFkKzE7CisgICAgICAgICAgICBpZihpMzJUbXAgPiBCVUZfU0laRSkgaTMyVG1wID0gMDsKKyAgICAgICAgICAgIGlmKGkzMlRtcCAhPSBpMzJUYWlsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHU4QnVmW2kzMkhlYWRdID0gJ1xyJzsKKyAgICAgICAgICAgICAgICBpMzJIZWFkID0gaTMyVG1wOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaTMyVG1wID0gaTMySGVhZCsxOworICAgICAgICBpZihpMzJUbXAgPiBCVUZfU0laRSkgaTMyVG1wID0gMDsKKyAgICAgICAgaWYoaTMyVG1wICE9IGkzMlRhaWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHU4QnVmW2kzMkhlYWRdID0gY2g7CisgICAgICAgICAgICBpMzJIZWFkID0gaTMyVG1wOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKGkzMlRhaWwgPT0gaTMySGVhZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBwb3AgY2hhcgorICAgIGRvCisgICAgeworICAgICAgICBpMzJUbXAgPSBpMzJUYWlsICsgMTsKKyAgICAgICAgaWYoaTMyVG1wID4gQlVGX1NJWkUpIGkzMlRtcCA9IDA7CisKKyAgICAgICAgaWYoKERFQlVHX1BPUlQtPkZTUiAmIFVBUlRfRlNSX1RYX0ZVTExfTXNrKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBERUJVR19QT1JULT5EQVRBID0gdThCdWZbaTMyVGFpbF07CisgICAgICAgICAgICBpMzJUYWlsID0gaTMyVG1wOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyZWFrOyAvLyBGSUZPIGZ1bGwKKyAgICB9d2hpbGUoaTMyVGFpbCAhPSBpMzJIZWFkKTsKK30KKyNlbmRpZgorCisvKioKKyAqIEBicmllZiAgICBSb3V0aW5lIHRvIHNlbmQgYSBjaGFyCisgKgorICogQHBhcmFtW2luXSBjaCBBIGNoYXJhY3RlciBkYXRhIHdyaXRlcyB0byBkZWJ1ZyBwb3J0CisgKgorICogQHJldHVybnMgIFNlbmQgdmFsdWUgZnJvbSBVQVJUIGRlYnVnIHBvcnQgb3Igc2VtaWhvc3QKKyAqCisgKiBAZGV0YWlscyAgU2VuZCBhIHRhcmdldCBjaGFyIHRvIFVBUlQgZGVidWcgcG9ydCBvciBzZW1paG9zdC4KKyAqLwordm9pZCBTZW5kQ2hhcihpbnQgY2gpCit7CisjaWYgZGVmaW5lZChERUJVR19FTkFCTEVfU0VNSUhPU1QpCisKKyAgICBnX2J1ZlsodWludDhfdClnX2J1Zl9sZW4rK10gPSAoY2hhciljaDsKKyAgICBnX2J1ZlsodWludDhfdClnX2J1Zl9sZW5dID0gJ1wwJzsKKyAgICBpZihnX2J1Zl9sZW4gKyAxID49IHNpemVvZihnX2J1ZikgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXDAnKQorICAgIHsKKyAgICAgICAgLyogU2VuZCB0aGUgY2hhciAqLworICAgICAgICBpZihnX0lDRV9Db25uZWNlZCkKKyAgICAgICAgeworCisgICAgICAgICAgICBpZihTSF9Eb0NvbW1hbmQoMHgwNCwgKGludClnX2J1ZiwgTlVMTCkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnX2J1Zl9sZW4gPSAwOworCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworIyBpZiAoREVCVUdfRU5BQkxFX1NFTUlIT1NUID09IDIpIC8vIFJlLWRpcmVjdCB0byBVQVJUIERlYnVnIFBvcnQgb25seSB3aGVuIERFQlVHX0VOQUJMRV9TRU1JSE9TVD0yCisgICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgZ19idWZfbGVuOyBpKyspCisgICAgICAgICAgICAgICAgU2VuZENoYXJfVG9VQVJUKGdfYnVmW2ldKTsKKyAgICAgICAgICAgIGdfYnVmX2xlbiA9IDA7CisjIGVuZGlmCisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFNlbmRDaGFyX1RvVUFSVChjaCk7CisjZW5kaWYKK30KKworLyoqCisgKiBAYnJpZWYgICAgUm91dGluZSB0byBnZXQgYSBjaGFyCisgKgorICogQHBhcmFtICAgIE5vbmUKKyAqCisgKiBAcmV0dXJucyAgR2V0IHZhbHVlIGZyb20gVUFSVCBkZWJ1ZyBwb3J0IG9yIHNlbWlob3N0CisgKgorICogQGRldGFpbHMgIFdhaXQgVUFSVCBkZWJ1ZyBwb3J0IG9yIHNlbWlob3N0IHRvIGlucHV0IGEgY2hhci4KKyAqLworY2hhciBHZXRDaGFyKHZvaWQpCit7CisjaWZkZWYgREVCVUdfRU5BQkxFX1NFTUlIT1NUCisjIGlmIGRlZmluZWQgKF9fSUNDQVJNX18pCisgICAgaW50IG5SZXQ7CisgICAgd2hpbGUoU0hfRG9Db21tYW5kKDB4NywgMCwgJm5SZXQpICE9IDApCisgICAgeworICAgICAgICBpZihuUmV0ICE9IDApCisgICAgICAgICAgICByZXR1cm4gKGNoYXIpblJldDsKKyAgICB9CisjIGVsc2UKKyAgICBpbnQgblJldDsKKyAgICB3aGlsZShTSF9Eb0NvbW1hbmQoMHgxMDEsIDAsICZuUmV0KSAhPSAwKQorICAgIHsKKyAgICAgICAgaWYoblJldCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTSF9Eb0NvbW1hbmQoMHgwNywgMCwgJm5SZXQpOworICAgICAgICAgICAgcmV0dXJuIChjaGFyKW5SZXQ7CisgICAgICAgIH0KKyAgICB9CisKKworIyBpZiAoREVCVUdfRU5BQkxFX1NFTUlIT1NUID09IDIpIC8vIFJlLWRpcmVjdCB0byBVQVJUIERlYnVnIFBvcnQgb25seSB3aGVuIERFQlVHX0VOQUJMRV9TRU1JSE9TVD0yCisKKyAgICAvKiBVc2UgZGVidWcgcG9ydCB3aGVuIElDRSBpcyBub3QgY29ubmVjdGVkIGF0IHNlbWlob3N0IG1vZGUgKi8KKyAgICB3aGlsZSghZ19JQ0VfQ29ubmVjZWQpCisgICAgeworICAgICAgICBpZigoREVCVUdfUE9SVC0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19SWEVNUFRZX01zaykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChERUJVR19QT1JULT5EQVQpOworICAgICAgICB9CisgICAgfQorIyBlbmRpZgorCisjIGVuZGlmCisgICAgcmV0dXJuICgwKTsKKyNlbHNlCisKKyAgICB3aGlsZSgxKQorICAgIHsKKyAgICAgICAgaWYoKERFQlVHX1BPUlQtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfUlhFTVBUWV9Nc2spID09IDBVKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKChjaGFyKURFQlVHX1BPUlQtPkRBVCk7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorfQorCisvKioKKyAqIEBicmllZiAgICBDaGVjayBhbnkgY2hhciBpbnB1dCBmcm9tIFVBUlQKKyAqCisgKiBAcGFyYW0gICAgTm9uZQorICoKKyAqIEByZXR2YWwgICAxOiBObyBhbnkgY2hhciBpbnB1dAorICogQHJldHZhbCAgIDA6IEhhdmUgc29tZSBjaGFyIGlucHV0CisgKgorICogQGRldGFpbHMgIENoZWNrIFVBUlQgUlNSIFJYIEVNUFRZIG9yIG5vdCB0byBkZXRlcm1pbmUgaWYgYW55IGNoYXIgaW5wdXQgZnJvbSBVQVJUCisgKi8KKworaW50IGtiaGl0KHZvaWQpCit7CisgICAgcmV0dXJuICEoKERFQlVHX1BPUlQtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfUlhFTVBUWV9Nc2spID09IDBVKTsKK30KKy8qKgorICogQGJyaWVmICAgIENoZWNrIGlmIGRlYnVnIG1lc3NhZ2UgZmluaXNoZWQKKyAqCisgKiBAcGFyYW0gICAgTm9uZQorICoKKyAqIEByZXR2YWwgICAxOiBNZXNzYWdlIGlzIGZpbmlzaGVkCisgKiBAcmV0dmFsICAgMDogTWVzc2FnZSBpcyB0cmFuc21pdHRpbmcuCisgKgorICogQGRldGFpbHMgIENoZWNrIGlmIG1lc3NhZ2UgZmluaXNoZWQgKEZJRk8gZW1wdHkgb2YgZGVidWcgcG9ydCkKKyAqLworCitpbnQgSXNEZWJ1Z0ZpZm9FbXB0eSh2b2lkKQoreworICAgIHJldHVybiAoKERFQlVHX1BPUlQtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfVFhFTVBUWUZfTXNrKSAhPSAwVSk7Cit9CisKKy8qKgorICogQGJyaWVmICAgIEMgbGlicmFyeSByZXRhcmdldHRpbmcKKyAqCisgKiBAcGFyYW1baW5dICBjaCAgV3JpdGUgYSBjaGFyYWN0ZXIgZGF0YQorICoKKyAqIEByZXR1cm5zICBOb25lCisgKgorICogQGRldGFpbHMgIENoZWNrIGlmIG1lc3NhZ2UgZmluaXNoZWQgKEZJRk8gZW1wdHkgb2YgZGVidWcgcG9ydCkKKyAqLworCit2b2lkIF90dHl3cmNoKGludCBjaCkKK3sKKyAgICBTZW5kQ2hhcihjaCk7CisgICAgcmV0dXJuOworfQorCisKKy8qKgorICogQGJyaWVmICAgICAgV3JpdGUgY2hhcmFjdGVyIHRvIHN0cmVhbQorICoKKyAqIEBwYXJhbVtpbl0gIGNoICAgICAgIENoYXJhY3RlciB0byBiZSB3cml0dGVuLiBUaGUgY2hhcmFjdGVyIGlzIHBhc3NlZCBhcyBpdHMgaW50IHByb21vdGlvbi4KKyAqIEBwYXJhbVtpbl0gIHN0cmVhbSAgIFBvaW50ZXIgdG8gYSBGSUxFIG9iamVjdCB0aGF0IGlkZW50aWZpZXMgdGhlIHN0cmVhbSB3aGVyZSB0aGUgY2hhcmFjdGVyIGlzIHRvIGJlIHdyaXR0ZW4uCisgKgorICogQHJldHVybnMgICAgSWYgdGhlcmUgYXJlIG5vIGVycm9ycywgdGhlIHNhbWUgY2hhcmFjdGVyIHRoYXQgaGFzIGJlZW4gd3JpdHRlbiBpcyByZXR1cm5lZC4KKyAqICAgICAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycywgRU9GIGlzIHJldHVybmVkIGFuZCB0aGUgZXJyb3IgaW5kaWNhdG9yIGlzIHNldCAoc2VlIGZlcnJvcikuCisgKgorICogQGRldGFpbHMgICAgV3JpdGVzIGEgY2hhcmFjdGVyIHRvIHRoZSBzdHJlYW0gYW5kIGFkdmFuY2VzIHRoZSBwb3NpdGlvbiBpbmRpY2F0b3IuXG4KKyAqICAgICAgICAgICAgIFRoZSBjaGFyYWN0ZXIgaXMgd3JpdHRlbiBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgc3RyZWFtIGFzIGluZGljYXRlZCBcbgorICogICAgICAgICAgICAgYnkgdGhlIGludGVybmFsIHBvc2l0aW9uIGluZGljYXRvciwgd2hpY2ggaXMgdGhlbiBhZHZhbmNlZCBvbmUgY2hhcmFjdGVyLgorICoKKyAgICAgICBUaGUgYWJvdmUgZGVzY3JpcHRpb25zIGFyZSBjb3BpZWQgZnJvbSBodHRwOi8vd3d3LmNwbHVzcGx1cy5jb20vcmVmZXJlbmNlL2NsaWJyYXJ5L2NzdGRpby9mcHV0Yy8uCisgKgorICoKKyAqLworCitpbnQgZnB1dGMoaW50IGNoLCBGSUxFICpzdHJlYW0pCit7CisgICAgKHZvaWQpc3RyZWFtOworICAgIFNlbmRDaGFyKGNoKTsKKyAgICByZXR1cm4gY2g7Cit9CisKKworI2lmIChkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pKQorCisjaWYgIWRlZmluZWQoT1NfVVNFX1NFTUlIT1NUSU5HKQoraW50IF93cml0ZSAoaW50IGZkLCBjaGFyICpwdHIsIGludCBsZW4pCit7CisgICAgaW50IGkgPSBsZW47CisKKyAgICB3aGlsZShpLS0pIHsKKyAgICAgICAgd2hpbGUoREVCVUdfUE9SVC0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19UWEZVTExfTXNrKTsKKworICAgICAgICBpZigqcHRyID09ICdcbicpIHsKKyAgICAgICAgICAgIERFQlVHX1BPUlQtPkRBVCA9ICdccic7CisgICAgICAgICAgICB3aGlsZShERUJVR19QT1JULT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1RYRlVMTF9Nc2spOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdfUE9SVC0+REFUID0gKnB0cisrOworICAgIH0KKyAgICByZXR1cm4gbGVuOworfQorCitpbnQgX3JlYWQgKGludCBmZCwgY2hhciAqcHRyLCBpbnQgbGVuKQoreworCisgICAgd2hpbGUoKERFQlVHX1BPUlQtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfUlhFTVBUWV9Nc2spICE9IDApOworICAgICpwdHIgPSBERUJVR19QT1JULT5EQVQ7CisgICAgcmV0dXJuIDE7CisKKworfQorI2VuZGlmCisKKyNlbHNlCisvKioKKyAqIEBicmllZiAgICAgIEdldCBjaGFyYWN0ZXIgZnJvbSBVQVJUIGRlYnVnIHBvcnQgb3Igc2VtaWhvc3RpbmcgaW5wdXQKKyAqCisgKiBAcGFyYW1baW5dICBzdHJlYW0gICBQb2ludGVyIHRvIGEgRklMRSBvYmplY3QgdGhhdCBpZGVudGlmaWVzIHRoZSBzdHJlYW0gb24gd2hpY2ggdGhlIG9wZXJhdGlvbiBpcyB0byBiZSBwZXJmb3JtZWQuCisgKgorICogQHJldHVybnMgICAgVGhlIGNoYXJhY3RlciByZWFkIGZyb20gVUFSVCBkZWJ1ZyBwb3J0IG9yIHNlbWlob3N0aW5nCisgKgorICogQGRldGFpbHMgICAgRm9yIGdldCBtZXNzYWdlIGZyb20gZGVidWcgcG9ydCBvciBzZW1paG9zdGluZy4KKyAqCisgKi8KKworaW50IGZnZXRjKEZJTEUgKnN0cmVhbSkKK3sKKyAgICAodm9pZClzdHJlYW07CisgICAgcmV0dXJuICgoaW50KUdldENoYXIoKSk7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgQ2hlY2sgZXJyb3IgaW5kaWNhdG9yCisgKgorICogQHBhcmFtW2luXSAgc3RyZWFtICAgUG9pbnRlciB0byBhIEZJTEUgb2JqZWN0IHRoYXQgaWRlbnRpZmllcyB0aGUgc3RyZWFtLgorICoKKyAqIEByZXR1cm5zICAgIElmIHRoZSBlcnJvciBpbmRpY2F0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJlYW0gd2FzIHNldCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBub256ZXJvIHZhbHVlLgorICogICAgICAgICAgICAgT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGEgemVybyB2YWx1ZS4KKyAqCisgKiBAZGV0YWlscyAgICBDaGVja3MgaWYgdGhlIGVycm9yIGluZGljYXRvciBhc3NvY2lhdGVkIHdpdGggc3RyZWFtIGlzIHNldCwgcmV0dXJuaW5nIGEgdmFsdWUgZGlmZmVyZW50CisgKiAgICAgICAgICAgICBmcm9tIHplcm8gaWYgaXQgaXMuIFRoaXMgaW5kaWNhdG9yIGlzIGdlbmVyYWxseSBzZXQgYnkgYSBwcmV2aW91cyBvcGVyYXRpb24gb24gdGhlIHN0cmVhbSB0aGF0IGZhaWxlZC4KKyAqCisgICAgICAgVGhlIGFib3ZlIGRlc2NyaXB0aW9ucyBhcmUgY29waWVkIGZyb20gaHR0cDovL3d3dy5jcGx1c3BsdXMuY29tL3JlZmVyZW5jZS9jbGlicmFyeS9jc3RkaW8vZmVycm9yLy4KKyAqCisgKi8KKworaW50IGZlcnJvcihGSUxFICpzdHJlYW0pCit7CisgICAgKHZvaWQpc3RyZWFtOworICAgIHJldHVybiBFT0Y7Cit9CisjZW5kaWYKKworI2lmZGVmIERFQlVHX0VOQUJMRV9TRU1JSE9TVAorIyBpZmRlZiBfX0lDQ0FSTV9fCit2b2lkIF9fZXhpdChpbnQgcmV0dXJuX2NvZGUpCit7CisKKyAgICAvKiBDaGVjayBpZiBsaW5rIHdpdGggSUNFICovCisgICAgaWYoU0hfRG9Db21tYW5kKDB4MTgsIDB4MjAwMjYsIE5VTEwpID09IDApCisgICAgeworICAgICAgICAvKiBNYWtlIHN1cmUgYWxsIG1lc3NhZ2UgaXMgcHJpbnQgb3V0ICovCisgICAgICAgIHdoaWxlKElzRGVidWdGaWZvRW1wdHkoKSA9PSAwKTsKKyAgICB9CitsYWJlbDoKKyAgICBnb3RvIGxhYmVsOyAgLyogZW5kbGVzcyBsb29wICovCit9CisjIGVsc2UKK3ZvaWQgX3N5c19leGl0KGludCByZXR1cm5fY29kZSkKK3sKKyAgICAodm9pZClyZXR1cm5fY29kZTsKKyAgICAvKiBDaGVjayBpZiBsaW5rIHdpdGggSUNFICovCisgICAgaWYoU0hfRG9Db21tYW5kKDB4MTgsIDB4MjAwMjYsIE5VTEwpID09IDApCisgICAgeworICAgICAgICAvKiBNYWtlIHN1cmUgYWxsIG1lc3NhZ2UgaXMgcHJpbnQgb3V0ICovCisgICAgICAgIHdoaWxlKElzRGVidWdGaWZvRW1wdHkoKSA9PSAwKTsKKyAgICB9CitsYWJlbDoKKyAgICBnb3RvIGxhYmVsOyAgLyogZW5kbGVzcyBsb29wICovCit9CisjIGVuZGlmCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcnRjLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9ydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjhlMTRkCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvcnRjLmMKQEAgLTAsMCArMSwxMDY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcnRjLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFJlYWwgVGltZSBDbG9jayhSVEMpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisKKy8qKiBAY29uZCBISURERU5fU1lNQk9MUyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWNybywgdHlwZSBhbmQgY29uc3RhbnQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFJUQ19HTE9CQUxTCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEdsb2JhbCBmaWxlIHNjb3BlIChzdGF0aWMpIHZhcmlhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBnX3UzMmhpWWVhciwgZ191MzJsb1llYXIsIGdfdTMyaGlNb250aCwgZ191MzJsb01vbnRoLCBnX3UzMmhpRGF5LCBnX3UzMmxvRGF5Oworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IGdfdTMyaGlIb3VyLCBnX3UzMmxvSG91ciwgZ191MzJoaU1pbiwgZ191MzJsb01pbiwgZ191MzJoaVNlYywgZ191MzJsb1NlYzsKKworLyoqIEBlbmRjb25kIEhJRERFTl9TWU1CT0xTICovCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBSVENfRHJpdmVyIFJUQyBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBSVENfRVhQT1JURURfRlVOQ1RJT05TIFJUQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIEluaXRpYWxpemUgUlRDIG1vZHVsZSBhbmQgc3RhcnQgY291bnRpbmcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNQdCAgICAgU3BlY2lmeSB0aGUgdGltZSBwcm9wZXJ0eSBhbmQgY3VycmVudCBkYXRlIGFuZCB0aW1lLiBJdCBpbmNsdWRlczogICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJZZWFyOiBZZWFyIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDIwMDAgfiAyMDk5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMk1vbnRoOiBNb250aCB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAxIH4gMTIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyRGF5OiBEYXkgdmFsdWUsIHJhbmdlIGJldHdlZW4gMSB+IDMxLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJEYXlPZldlZWs6IERheSBvZiB0aGUgd2Vlay4gW1JUQ19TVU5EQVkgLyBSVENfTU9OREFZIC8gUlRDX1RVRVNEQVkgLworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfV0VETkVTREFZIC8gUlRDX1RIVVJTREFZIC8gUlRDX0ZSSURBWSAvCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19TQVRVUkRBWV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkhvdXI6IEhvdXIgdmFsdWUsIHJhbmdlIGJldHdlZW4gMCB+IDIzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyTWludXRlOiBNaW51dGUgdmFsdWUsIHJhbmdlIGJldHdlZW4gMCB+IDU5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJTZWNvbmQ6IFNlY29uZCB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAwIH4gNTkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlRpbWVTY2FsZTogW1JUQ19DTE9DS18xMiAvIFJUQ19DTE9DS18yNF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdThBbVBtOiBbUlRDX0FNIC8gUlRDX1BNXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG86IFxuCisgICogICAgICAgICAgICAgICAgIDEuIFdyaXRlIGluaXRpYWwga2V5IHRvIGxldCBSVEMgc3RhcnQgY291bnQuICBcbgorICAqICAgICAgICAgICAgICAgICAyLiBJbnB1dCBwYXJhbWV0ZXIgaW5kaWNhdGVzIHN0YXJ0IGRhdGUvdGltZS4gXG4KKyAgKiAgICAgICAgICAgICAgICAgMy4gVXNlciBoYXMgdG8gbWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVycyBvZiBSVEMgZGF0ZS90aW1lIGFyZSByZWFzb25hYmxlLiBcbgorICAgICAgICBOdWxsIHBvaW50ZXIgZm9yIHVzaW5nIGRlZmF1bHQgc3RhcnRpbmcgZGF0ZS90aW1lLgorICAqLwordm9pZCBSVENfT3BlbihTX1JUQ19USU1FX0RBVEFfVCAqc1B0KQoreworICAgIFJUQy0+SU5JVCA9IFJUQ19JTklUX0tFWTsKKworICAgIGlmKFJUQy0+SU5JVCAhPSBSVENfSU5JVF9BQ1RJVkVfTXNrKQorICAgIHsKKyAgICAgICAgUlRDLT5JTklUID0gUlRDX0lOSVRfS0VZOworICAgICAgICB3aGlsZShSVEMtPklOSVQgIT0gUlRDX0lOSVRfQUNUSVZFX01zaykge30KKyAgICB9CisKKyAgICBpZihzUHQgIT0gMCkKKyAgICB7CisgICAgICAgIC8qIFNldCBSVEMgZGF0ZSBhbmQgdGltZSAqLworICAgICAgICBSVENfU2V0RGF0ZUFuZFRpbWUoc1B0KTsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgUlRDIENsb2NrCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSB3aWxsIGRpc2FibGUgUlRDIHBlcmlwaGVyYWwgY2xvY2sgYW5kIHN0b3BzIFJUQyBjb3VudGluZy4KKyAgKi8KK3ZvaWQgUlRDX0Nsb3NlKHZvaWQpCit7CisgICAgaWYoKF9fUEMoKSZOU19PRkZTRVQpID09IDApCisgICAgeworICAgICAgICAvKiBEaXNhYmxlIFJUQyBjbG9jayBpbiBzZWN1cmUgbW9kZSBvbmx5ICovCisgICAgICAgIENMSy0+QVBCQ0xLMCAmPSB+Q0xLX0FQQkNMSzBfUlRDQ0tFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgMzJrIEZyZXF1ZW5jeSBDb21wZW5zYXRpb24gRGF0YQorICAqCisgICogIEBwYXJhbVtpbl0gICAgaTMyRnJlcXVlbmN5WDEwMDAwICAgIFNwZWNpZnkgdGhlIFJUQyBjbG9jayBYMTAwMDAsIGV4OiAzMjc3MzY1MTIgbWVhbnMgMzI3NzMuNjUxMi4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gY29tcGVuc2F0ZSB0aGUgMzIga0h6IGZyZXF1ZW5jeSBieSBjdXJyZW50IExYVCBmcmVxdWVuY3kgZm9yIFJUQyBhcHBsaWNhdGlvbi4KKyAgKi8KK3ZvaWQgUlRDXzMyS0NhbGlicmF0aW9uKGludDMyX3QgaTMyRnJlcXVlbmN5WDEwMDAwKQoreworICAgIHVpbnQ2NF90IHU2NENvbXBlbnNhdGU7CisKKyAgICAvKiB1NjRDb21wZW5zYXRlID0gKHVpbnQ2NF90KSgweDY0MDAwMDAwMDAwKTsgKi8KKyAgICB1NjRDb21wZW5zYXRlID0gKHVpbnQ2NF90KSgweDI3MTAwMDAwMDAwMDApOworICAgIHU2NENvbXBlbnNhdGUgPSAodWludDY0X3QpKHU2NENvbXBlbnNhdGUgLyAodWludDY0X3QpaTMyRnJlcXVlbmN5WDEwMDAwKTsKKyAgICAvKgorICAgICAgICBGb3JtdWxhIGZvciAzMksgY29tcGVuc2F0aW9uIGlzCisgICAgICAgICAgICBGUkVRQURKID0gMHgyMDAwMDAgKiAoMzI3NjggLyBMWFRfZnJlcSkKKyAgICAqLworICAgIGlmKHU2NENvbXBlbnNhdGUgPj0gKHVpbnQ2NF90KTB4NDAwMDAwKQorICAgIHsKKyAgICAgICAgdTY0Q29tcGVuc2F0ZSA9ICh1aW50NjRfdCkweDNGRkZGRjsKKyAgICB9CisKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIFJUQy0+RlJFUUFESiA9ICh1aW50MzJfdCl1NjRDb21wZW5zYXRlOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgQ3VycmVudCBSVEMgRGF0ZSBhbmQgVGltZQorICAqCisgICogQHBhcmFtW291dF0gc1B0ICAgICBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyBzcGVjaWZpZWQgdGhlIGN1cnJlbnQgUlRDIHZhbHVlLiBJdCBpbmNsdWRlczogXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlllYXI6IFllYXIgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyTW9udGg6IE1vbnRoIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJEYXk6IERheSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkRheU9mV2VlazogRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMySG91cjogSG91ciB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJNaW51dGU6IE1pbnV0ZSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlNlY29uZDogU2Vjb25kIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyVGltZVNjYWxlOiBbUlRDX0NMT0NLXzEyIC8gUlRDX0NMT0NLXzI0XSAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1OEFtUG06IFtSVENfQU0gLyBSVENfUE1dICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZ2V0IHRoZSBjdXJyZW50IFJUQyBkYXRlIGFuZCB0aW1lIHZhbHVlLgorICAqLwordm9pZCBSVENfR2V0RGF0ZUFuZFRpbWUoU19SVENfVElNRV9EQVRBX1QgKnNQdCkKK3sKKyAgICB1aW50MzJfdCB1MzJUbXA7CisKKyAgICBzUHQtPnUzMlRpbWVTY2FsZSA9IFJUQy0+Q0xLRk1UICYgUlRDX0NMS0ZNVF8yNEhFTl9Nc2s7ICAgICAvKiAxMi8yNC1ob3VyICovCisgICAgc1B0LT51MzJEYXlPZldlZWsgPSBSVEMtPldFRUtEQVkgJiBSVENfV0VFS0RBWV9XRUVLREFZX01zazsgLyogRGF5IG9mIHRoZSB3ZWVrICovCisKKyAgICAvKiBHZXQgW0RhdGUgZGlnaXRdIGRhdGEgKi8KKyAgICBnX3UzMmhpWWVhciAgPSAoUlRDLT5DQUwgJiBSVENfQ0FMX1RFTllFQVJfTXNrKSA+PiBSVENfQ0FMX1RFTllFQVJfUG9zOworICAgIGdfdTMybG9ZZWFyICA9IChSVEMtPkNBTCAmIFJUQ19DQUxfWUVBUl9Nc2spID4+IFJUQ19DQUxfWUVBUl9Qb3M7CisgICAgZ191MzJoaU1vbnRoID0gKFJUQy0+Q0FMICYgUlRDX0NBTF9URU5NT05fTXNrKSA+PiBSVENfQ0FMX1RFTk1PTl9Qb3M7CisgICAgZ191MzJsb01vbnRoID0gKFJUQy0+Q0FMICYgUlRDX0NBTF9NT05fTXNrKSA+PiBSVENfQ0FMX01PTl9Qb3M7CisgICAgZ191MzJoaURheSAgID0gKFJUQy0+Q0FMICYgUlRDX0NBTF9URU5EQVlfTXNrKSA+PiBSVENfQ0FMX1RFTkRBWV9Qb3M7CisgICAgZ191MzJsb0RheSAgID0gKFJUQy0+Q0FMICYgUlRDX0NBTF9EQVlfTXNrKSA+PiBSVENfQ0FMX0RBWV9Qb3M7CisKKyAgICAvKiBHZXQgW1RpbWUgZGlnaXRdIGRhdGEgKi8KKyAgICBnX3UzMmhpSG91ciA9IChSVEMtPlRJTUUgJiBSVENfVElNRV9URU5IUl9Nc2spID4+IFJUQ19USU1FX1RFTkhSX1BvczsKKyAgICBnX3UzMmxvSG91ciA9IChSVEMtPlRJTUUgJiBSVENfVElNRV9IUl9Nc2spID4+IFJUQ19USU1FX0hSX1BvczsKKyAgICBnX3UzMmhpTWluICA9IChSVEMtPlRJTUUgJiBSVENfVElNRV9URU5NSU5fTXNrKSA+PiBSVENfVElNRV9URU5NSU5fUG9zOworICAgIGdfdTMybG9NaW4gID0gKFJUQy0+VElNRSAmIFJUQ19USU1FX01JTl9Nc2spID4+IFJUQ19USU1FX01JTl9Qb3M7CisgICAgZ191MzJoaVNlYyAgPSAoUlRDLT5USU1FICYgUlRDX1RJTUVfVEVOU0VDX01zaykgPj4gUlRDX1RJTUVfVEVOU0VDX1BvczsKKyAgICBnX3UzMmxvU2VjICA9IChSVEMtPlRJTUUgJiBSVENfVElNRV9TRUNfTXNrKSA+PiBSVENfVElNRV9TRUNfUG9zOworCisgICAgLyogQ29tcHV0ZSB0byAyMFhYIHllYXIgKi8KKyAgICB1MzJUbXAgID0gKGdfdTMyaGlZZWFyICogMTBVTCk7CisgICAgdTMyVG1wICs9IGdfdTMybG9ZZWFyOworICAgIHNQdC0+dTMyWWVhciA9IHUzMlRtcCArICh1aW50MzJfdClSVENfWUVBUjIwMDA7CisKKyAgICAvKiBDb21wdXRlIDB+MTIgbW9udGggKi8KKyAgICB1MzJUbXAgPSAoZ191MzJoaU1vbnRoICogMTBVTCk7CisgICAgc1B0LT51MzJNb250aCA9IHUzMlRtcCArIGdfdTMybG9Nb250aDsKKworICAgIC8qIENvbXB1dGUgMH4zMSBkYXkgKi8KKyAgICB1MzJUbXAgPSAoZ191MzJoaURheSAqIDEwVUwpOworICAgIHNQdC0+dTMyRGF5ID0gIHUzMlRtcCAgKyBnX3UzMmxvRGF5OworCisgICAgLyogQ29tcHV0ZSAxMi8yNCBob3VyICovCisgICAgaWYoc1B0LT51MzJUaW1lU2NhbGUgPT0gKHVpbnQzMl90KVJUQ19DTE9DS18xMikKKyAgICB7CisgICAgICAgIHUzMlRtcCA9IChnX3UzMmhpSG91ciAqIDEwVUwpOworICAgICAgICB1MzJUbXAgKz0gZ191MzJsb0hvdXI7CisgICAgICAgIHNQdC0+dTMySG91ciA9IHUzMlRtcDsgICAgICAgICAgLyogQU06IDF+MTIuIFBNOiAyMX4zMi4gKi8KKworICAgICAgICBpZihzUHQtPnUzMkhvdXIgPj0gMjFVTCkKKyAgICAgICAgeworICAgICAgICAgICAgc1B0LT51MzJBbVBtICA9ICh1aW50MzJfdClSVENfUE07CisgICAgICAgICAgICBzUHQtPnUzMkhvdXIgLT0gMjBVTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNQdC0+dTMyQW1QbSA9ICh1aW50MzJfdClSVENfQU07CisgICAgICAgIH0KKworICAgICAgICB1MzJUbXAgID0gKGdfdTMyaGlNaW4gICogMTBVTCk7CisgICAgICAgIHUzMlRtcCArPSBnX3UzMmxvTWluOworICAgICAgICBzUHQtPnUzMk1pbnV0ZSA9IHUzMlRtcDsKKworICAgICAgICB1MzJUbXAgID0gKGdfdTMyaGlTZWMgICogMTBVTCk7CisgICAgICAgIHUzMlRtcCArPSBnX3UzMmxvU2VjOworICAgICAgICBzUHQtPnUzMlNlY29uZCA9IHUzMlRtcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpSG91ciAqIDEwVUwpOworICAgICAgICB1MzJUbXAgKz0gZ191MzJsb0hvdXI7CisgICAgICAgIHNQdC0+dTMySG91ciA9IHUzMlRtcDsKKworICAgICAgICB1MzJUbXAgID0gKGdfdTMyaGlNaW4gKiAxMFVMKTsKKyAgICAgICAgdTMyVG1wICs9ICBnX3UzMmxvTWluOworICAgICAgICBzUHQtPnUzMk1pbnV0ZSA9IHUzMlRtcDsKKworICAgICAgICB1MzJUbXAgID0gKGdfdTMyaGlTZWMgKiAxMFVMKTsKKyAgICAgICAgdTMyVG1wICs9IGdfdTMybG9TZWM7CisgICAgICAgIHNQdC0+dTMyU2Vjb25kID0gdTMyVG1wOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFJUQyBBbGFybSBEYXRlIGFuZCBUaW1lCisgICoKKyAgKiBAcGFyYW1bb3V0XSBzUHQgICAgIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIHNwZWNpZmllZCB0aGUgUlRDIGFsYXJtIHZhbHVlLiBJdCBpbmNsdWRlczogXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlllYXI6IFllYXIgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMk1vbnRoOiBNb250aCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkRheTogRGF5IHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkRheU9mV2VlazogRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkhvdXI6IEhvdXIgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMk1pbnV0ZTogTWludXRlIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlNlY29uZDogU2Vjb25kIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlRpbWVTY2FsZTogW1JUQ19DTE9DS18xMiAvIFJUQ19DTE9DS18yNF0gICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHU4QW1QbTogW1JUQ19BTSAvIFJUQ19QTV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZ2V0IHRoZSBSVEMgYWxhcm0gZGF0ZSBhbmQgdGltZSBzZXR0aW5nLgorICAqLwordm9pZCBSVENfR2V0QWxhcm1EYXRlQW5kVGltZShTX1JUQ19USU1FX0RBVEFfVCAqc1B0KQoreworICAgIHVpbnQzMl90IHUzMlRtcDsKKworICAgIHNQdC0+dTMyVGltZVNjYWxlID0gUlRDLT5DTEtGTVQgJiBSVENfQ0xLRk1UXzI0SEVOX01zazsgICAgIC8qIDEyLzI0LWhvdXIgKi8KKyAgICBzUHQtPnUzMkRheU9mV2VlayA9IFJUQy0+V0VFS0RBWSAmIFJUQ19XRUVLREFZX1dFRUtEQVlfTXNrOyAvKiBEYXkgb2YgdGhlIHdlZWsgKi8KKworICAgIC8qIEdldCBhbGFybSBbRGF0ZSBkaWdpdF0gZGF0YSAqLworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgZ191MzJoaVllYXIgID0gKFJUQy0+Q0FMTSAmIFJUQ19DQUxNX1RFTllFQVJfTXNrKSA+PiBSVENfQ0FMTV9URU5ZRUFSX1BvczsKKyAgICBnX3UzMmxvWWVhciAgPSAoUlRDLT5DQUxNICYgUlRDX0NBTE1fWUVBUl9Nc2spID4+IFJUQ19DQUxNX1lFQVJfUG9zOworICAgIGdfdTMyaGlNb250aCA9IChSVEMtPkNBTE0gJiBSVENfQ0FMTV9URU5NT05fTXNrKSA+PiBSVENfQ0FMTV9URU5NT05fUG9zOworICAgIGdfdTMybG9Nb250aCA9IChSVEMtPkNBTE0gJiBSVENfQ0FMTV9NT05fTXNrKSA+PiBSVENfQ0FMTV9NT05fUG9zOworICAgIGdfdTMyaGlEYXkgICA9IChSVEMtPkNBTE0gJiBSVENfQ0FMTV9URU5EQVlfTXNrKSA+PiBSVENfQ0FMTV9URU5EQVlfUG9zOworICAgIGdfdTMybG9EYXkgICA9IChSVEMtPkNBTE0gJiBSVENfQ0FMTV9EQVlfTXNrKSA+PiBSVENfQ0FMTV9EQVlfUG9zOworCisgICAgLyogR2V0IGFsYXJtIFtUaW1lIGRpZ2l0XSBkYXRhICovCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBnX3UzMmhpSG91ciA9IChSVEMtPlRBTE0gJiBSVENfVEFMTV9URU5IUl9Nc2spID4+IFJUQ19UQUxNX1RFTkhSX1BvczsKKyAgICBnX3UzMmxvSG91ciA9IChSVEMtPlRBTE0gJiBSVENfVEFMTV9IUl9Nc2spID4+IFJUQ19UQUxNX0hSX1BvczsKKyAgICBnX3UzMmhpTWluICA9IChSVEMtPlRBTE0gJiBSVENfVEFMTV9URU5NSU5fTXNrKSA+PiBSVENfVEFMTV9URU5NSU5fUG9zOworICAgIGdfdTMybG9NaW4gID0gKFJUQy0+VEFMTSAmIFJUQ19UQUxNX01JTl9Nc2spID4+IFJUQ19UQUxNX01JTl9Qb3M7CisgICAgZ191MzJoaVNlYyAgPSAoUlRDLT5UQUxNICYgUlRDX1RBTE1fVEVOU0VDX01zaykgPj4gUlRDX1RBTE1fVEVOU0VDX1BvczsKKyAgICBnX3UzMmxvU2VjICA9IChSVEMtPlRBTE0gJiBSVENfVEFMTV9TRUNfTXNrKSA+PiBSVENfVEFMTV9TRUNfUG9zOworCisgICAgLyogQ29tcHV0ZSB0byAyMFhYIHllYXIgKi8KKyAgICB1MzJUbXAgID0gKGdfdTMyaGlZZWFyICogMTBVTCk7CisgICAgdTMyVG1wICs9IGdfdTMybG9ZZWFyOworICAgIHNQdC0+dTMyWWVhciA9IHUzMlRtcCArICh1aW50MzJfdClSVENfWUVBUjIwMDA7CisKKyAgICAvKiBDb21wdXRlIDB+MTIgbW9udGggKi8KKyAgICB1MzJUbXAgPSAoZ191MzJoaU1vbnRoICogMTBVTCk7CisgICAgc1B0LT51MzJNb250aCA9IHUzMlRtcCArIGdfdTMybG9Nb250aDsKKworICAgIC8qIENvbXB1dGUgMH4zMSBkYXkgKi8KKyAgICB1MzJUbXAgPSAoZ191MzJoaURheSAqIDEwVUwpOworICAgIHNQdC0+dTMyRGF5ID0gdTMyVG1wICsgZ191MzJsb0RheTsKKworICAgIC8qIENvbXB1dGUgMTIvMjQgaG91ciAqLworICAgIGlmKHNQdC0+dTMyVGltZVNjYWxlID09ICh1aW50MzJfdClSVENfQ0xPQ0tfMTIpCisgICAgeworICAgICAgICB1MzJUbXAgID0gKGdfdTMyaGlIb3VyICogMTBVTCk7CisgICAgICAgIHUzMlRtcCArPSBnX3UzMmxvSG91cjsKKyAgICAgICAgc1B0LT51MzJIb3VyID0gdTMyVG1wOyAgICAgICAgICAvKiBBTTogMX4xMi4gUE06IDIxfjMyLiAqLworCisgICAgICAgIGlmKHNQdC0+dTMySG91ciA+PSAyMVVMKQorICAgICAgICB7CisgICAgICAgICAgICBzUHQtPnUzMkFtUG0gID0gKHVpbnQzMl90KVJUQ19QTTsKKyAgICAgICAgICAgIHNQdC0+dTMySG91ciAtPSAyMFVMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc1B0LT51MzJBbVBtID0gKHVpbnQzMl90KVJUQ19BTTsKKyAgICAgICAgfQorCisgICAgICAgIHUzMlRtcCAgPSAoZ191MzJoaU1pbiAqIDEwVUwpOworICAgICAgICB1MzJUbXAgKz0gZ191MzJsb01pbjsKKyAgICAgICAgc1B0LT51MzJNaW51dGUgPSB1MzJUbXA7CisKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpU2VjICogMTBVTCk7CisgICAgICAgIHUzMlRtcCArPSBnX3UzMmxvU2VjOworICAgICAgICBzUHQtPnUzMlNlY29uZCA9IHUzMlRtcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpSG91ciAqIDEwVUwpOworICAgICAgICB1MzJUbXAgKz0gIGdfdTMybG9Ib3VyOworICAgICAgICBzUHQtPnUzMkhvdXIgPSB1MzJUbXA7CisKKyAgICAgICAgdTMyVG1wICA9IChnX3UzMmhpTWluICogMTBVTCk7CisgICAgICAgIHUzMlRtcCArPSBnX3UzMmxvTWluOworICAgICAgICBzUHQtPnUzMk1pbnV0ZSA9IHUzMlRtcDsKKworICAgICAgICB1MzJUbXAgID0gKGdfdTMyaGlTZWMgKiAxMFVMKTsKKyAgICAgICAgdTMyVG1wICs9IGdfdTMybG9TZWM7CisgICAgICAgIHNQdC0+dTMyU2Vjb25kID0gdTMyVG1wOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgVXBkYXRlIEN1cnJlbnQgUlRDIERhdGUgYW5kIFRpbWUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNQdCAgICAgU3BlY2lmeSB0aGUgdGltZSBwcm9wZXJ0eSBhbmQgY3VycmVudCBkYXRlIGFuZCB0aW1lLiBJdCBpbmNsdWRlczogICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJZZWFyOiBZZWFyIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDIwMDAgfiAyMDk5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMk1vbnRoOiBNb250aCB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAxIH4gMTIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyRGF5OiBEYXkgdmFsdWUsIHJhbmdlIGJldHdlZW4gMSB+IDMxLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJEYXlPZldlZWs6IERheSBvZiB0aGUgd2Vlay4gW1JUQ19TVU5EQVkgLyBSVENfTU9OREFZIC8gUlRDX1RVRVNEQVkgLworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfV0VETkVTREFZIC8gUlRDX1RIVVJTREFZIC8gUlRDX0ZSSURBWSAvCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19TQVRVUkRBWV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkhvdXI6IEhvdXIgdmFsdWUsIHJhbmdlIGJldHdlZW4gMCB+IDIzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyTWludXRlOiBNaW51dGUgdmFsdWUsIHJhbmdlIGJldHdlZW4gMCB+IDU5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJTZWNvbmQ6IFNlY29uZCB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAwIH4gNTkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMlRpbWVTY2FsZTogW1JUQ19DTE9DS18xMiAvIFJUQ19DTE9DS18yNF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdThBbVBtOiBbUlRDX0FNIC8gUlRDX1BNXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIHVwZGF0ZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgdG8gUlRDLgorICAqLwordm9pZCBSVENfU2V0RGF0ZUFuZFRpbWUoU19SVENfVElNRV9EQVRBX1QgKnNQdCkKK3sKKyAgICB1aW50MzJfdCB1MzJSZWdDQUwsIHUzMlJlZ1RJTUU7CisKKyAgICBpZihzUHQgIT0gMCkKKyAgICB7CisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICAvKiBTZXQgUlRDIDI0LzEyIGhvdXIgc2V0dGluZyBhbmQgRGF5IG9mIHRoZSBXZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgICAgIGlmKHNQdC0+dTMyVGltZVNjYWxlID09ICh1aW50MzJfdClSVENfQ0xPQ0tfMTIpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJUQy0+Q0xLRk1UICY9IH5SVENfQ0xLRk1UXzI0SEVOX01zazsKKworICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgICAgIC8qIEltcG9ydGFudCwgcmFuZ2Ugb2YgMTItaG91ciBQTSBtb2RlIGlzIDIxIHVwIHRvIDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgICAgIGlmKHNQdC0+dTMyQW1QbSA9PSAodWludDMyX3QpUlRDX1BNKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNQdC0+dTMySG91ciArPSAyMFVMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgUlRDLT5DTEtGTVQgfD0gUlRDX0NMS0ZNVF8yNEhFTl9Nc2s7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXQgRGF5IG9mIHRoZSBXZWVrICovCisgICAgICAgIFJUQy0+V0VFS0RBWSA9IHNQdC0+dTMyRGF5T2ZXZWVrOworCisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICAvKiBTZXQgUlRDIEN1cnJlbnQgRGF0ZSBhbmQgVGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgIHUzMlJlZ0NBTCAgPSAoKHNQdC0+dTMyWWVhciAtICh1aW50MzJfdClSVENfWUVBUjIwMDApIC8gMTBVTCkgPDwgMjA7CisgICAgICAgIHUzMlJlZ0NBTCB8PSAoKChzUHQtPnUzMlllYXIgLSAodWludDMyX3QpUlRDX1lFQVIyMDAwKSAlIDEwVUwpIDw8IDE2KTsKKyAgICAgICAgdTMyUmVnQ0FMIHw9ICgoc1B0LT51MzJNb250aCAgLyAxMFVMKSA8PCAxMik7CisgICAgICAgIHUzMlJlZ0NBTCB8PSAoKHNQdC0+dTMyTW9udGggICUgMTBVTCkgPDwgOCk7CisgICAgICAgIHUzMlJlZ0NBTCB8PSAoKHNQdC0+dTMyRGF5ICAgIC8gMTBVTCkgPDwgNCk7CisgICAgICAgIHUzMlJlZ0NBTCB8PSAoc1B0LT51MzJEYXkgICAgICUgMTBVTCk7CisKKyAgICAgICAgdTMyUmVnVElNRSAgPSAoKHNQdC0+dTMySG91ciAgIC8gMTBVTCkgPDwgMjApOworICAgICAgICB1MzJSZWdUSU1FIHw9ICgoc1B0LT51MzJIb3VyICAgJSAxMFVMKSA8PCAxNik7CisgICAgICAgIHUzMlJlZ1RJTUUgfD0gKChzUHQtPnUzMk1pbnV0ZSAvIDEwVUwpIDw8IDEyKTsKKyAgICAgICAgdTMyUmVnVElNRSB8PSAoKHNQdC0+dTMyTWludXRlICUgMTBVTCkgPDwgOCk7CisgICAgICAgIHUzMlJlZ1RJTUUgfD0gKChzUHQtPnUzMlNlY29uZCAvIDEwVUwpIDw8IDQpOworICAgICAgICB1MzJSZWdUSU1FIHw9IChzUHQtPnUzMlNlY29uZCAlIDEwVUwpOworCisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICAvKiBTZXQgUlRDIENhbGVuZGVyIGFuZCBUaW1lIExvYWRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgICAgIFJUQy0+Q0FMICA9ICh1aW50MzJfdCl1MzJSZWdDQUw7CisgICAgICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgICAgIFJUQy0+VElNRSA9ICh1aW50MzJfdCl1MzJSZWdUSU1FOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgVXBkYXRlIFJUQyBBbGFybSBEYXRlIGFuZCBUaW1lCisgICoKKyAgKiBAcGFyYW1baW5dICBzUHQgICAgIFNwZWNpZnkgdGhlIHRpbWUgcHJvcGVydHkgYW5kIGFsYXJtIGRhdGUgYW5kIHRpbWUuIEl0IGluY2x1ZGVzOiAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyWWVhcjogWWVhciB2YWx1ZSwgcmFuZ2UgYmV0d2VlbiAyMDAwIH4gMjA5OS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJNb250aDogTW9udGggdmFsdWUsIHJhbmdlIGJldHdlZW4gMSB+IDEyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMkRheTogRGF5IHZhbHVlLCByYW5nZSBiZXR3ZWVuIDEgfiAzMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyRGF5T2ZXZWVrOiBEYXkgb2YgdGhlIHdlZWsuIFtSVENfU1VOREFZIC8gUlRDX01PTkRBWSAvIFJUQ19UVUVTREFZIC8KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX1dFRE5FU0RBWSAvIFJUQ19USFVSU0RBWSAvIFJUQ19GUklEQVkgLworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfU0FUVVJEQVldICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJIb3VyOiBIb3VyIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDAgfiAyMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHUzMk1pbnV0ZTogTWludXRlIHZhbHVlLCByYW5nZSBiZXR3ZWVuIDAgfiA1OS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqICAgICAgICAgICAgICAgICAgICAgdTMyU2Vjb25kOiBTZWNvbmQgdmFsdWUsIHJhbmdlIGJldHdlZW4gMCB+IDU5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisgICogICAgICAgICAgICAgICAgICAgICB1MzJUaW1lU2NhbGU6IFtSVENfQ0xPQ0tfMTIgLyBSVENfQ0xPQ0tfMjRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgIHU4QW1QbTogW1JUQ19BTSAvIFJUQ19QTV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byB1cGRhdGUgYWxhcm0gZGF0ZSBhbmQgdGltZSBzZXR0aW5nIHRvIFJUQy4KKyAgKi8KK3ZvaWQgUlRDX1NldEFsYXJtRGF0ZUFuZFRpbWUoU19SVENfVElNRV9EQVRBX1QgKnNQdCkKK3sKKyAgICB1aW50MzJfdCB1MzJSZWdDQUxNLCB1MzJSZWdUQUxNOworCisgICAgaWYoc1B0ICE9IDApCisgICAgeworICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgLyogU2V0IFJUQyAyNC8xMiBob3VyIHNldHRpbmcgYW5kIERheSBvZiB0aGUgV2VlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgICAgICBpZihzUHQtPnUzMlRpbWVTY2FsZSA9PSAodWludDMyX3QpUlRDX0NMT0NLXzEyKQorICAgICAgICB7CisgICAgICAgICAgICBSVEMtPkNMS0ZNVCAmPSB+UlRDX0NMS0ZNVF8yNEhFTl9Nc2s7CisKKyAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgICAgICAvKiBJbXBvcnRhbnQsIHJhbmdlIG9mIDEyLWhvdXIgUE0gbW9kZSBpcyAyMSB1cCB0byAzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgICAgICBpZihzUHQtPnUzMkFtUG0gPT0gKHVpbnQzMl90KVJUQ19QTSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzUHQtPnUzMkhvdXIgKz0gMjBVTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFJUQy0+Q0xLRk1UIHw9IFJUQ19DTEtGTVRfMjRIRU5fTXNrOworICAgICAgICB9CisKKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgIC8qIFNldCBSVEMgQWxhcm0gRGF0ZSBhbmQgVGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgdTMyUmVnQ0FMTSAgPSAoKHNQdC0+dTMyWWVhciAtICh1aW50MzJfdClSVENfWUVBUjIwMDApIC8gMTBVTCkgPDwgMjA7CisgICAgICAgIHUzMlJlZ0NBTE0gfD0gKCgoc1B0LT51MzJZZWFyIC0gKHVpbnQzMl90KVJUQ19ZRUFSMjAwMCkgJSAxMFVMKSA8PCAxNik7CisgICAgICAgIHUzMlJlZ0NBTE0gfD0gKChzUHQtPnUzMk1vbnRoICAvIDEwVUwpIDw8IDEyKTsKKyAgICAgICAgdTMyUmVnQ0FMTSB8PSAoKHNQdC0+dTMyTW9udGggICUgMTBVTCkgPDwgOCk7CisgICAgICAgIHUzMlJlZ0NBTE0gfD0gKChzUHQtPnUzMkRheSAgICAvIDEwVUwpIDw8IDQpOworICAgICAgICB1MzJSZWdDQUxNIHw9IChzUHQtPnUzMkRheSAgICAlIDEwVUwpOworCisgICAgICAgIHUzMlJlZ1RBTE0gID0gKChzUHQtPnUzMkhvdXIgICAvIDEwVUwpIDw8IDIwKTsKKyAgICAgICAgdTMyUmVnVEFMTSB8PSAoKHNQdC0+dTMySG91ciAgICUgMTBVTCkgPDwgMTYpOworICAgICAgICB1MzJSZWdUQUxNIHw9ICgoc1B0LT51MzJNaW51dGUgLyAxMFVMKSA8PCAxMik7CisgICAgICAgIHUzMlJlZ1RBTE0gfD0gKChzUHQtPnUzMk1pbnV0ZSAlIDEwVUwpIDw8IDgpOworICAgICAgICB1MzJSZWdUQUxNIHw9ICgoc1B0LT51MzJTZWNvbmQgLyAxMFVMKSA8PCA0KTsKKyAgICAgICAgdTMyUmVnVEFMTSB8PSAoc1B0LT51MzJTZWNvbmQgJSAxMFVMKTsKKworICAgICAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgICAgICBSVEMtPkNBTE0gPSAodWludDMyX3QpdTMyUmVnQ0FMTTsKKyAgICAgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICAgICAgUlRDLT5UQUxNID0gKHVpbnQzMl90KXUzMlJlZ1RBTE07CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBVcGRhdGUgUlRDIEN1cnJlbnQgRGF0ZQorICAqCisgICogQHBhcmFtW2luXSAgdTMyWWVhciAgICAgICAgIFRoZSB5ZWFyIGNhbGVuZGFyIGRpZ2l0IG9mIGN1cnJlbnQgUlRDIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgdTMyTW9udGggICAgICAgIFRoZSBtb250aCBjYWxlbmRhciBkaWdpdCBvZiBjdXJyZW50IFJUQyBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHUzMkRheSAgICAgICAgICBUaGUgZGF5IGNhbGVuZGFyIGRpZ2l0IG9mIGN1cnJlbnQgUlRDIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgdTMyRGF5T2ZXZWVrICAgIFRoZSBEYXkgb2YgdGhlIHdlZWsuIFtSVENfU1VOREFZIC8gUlRDX01PTkRBWSAvIFJUQ19UVUVTREFZIC8KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19XRURORVNEQVkgLyBSVENfVEhVUlNEQVkgLyBSVENfRlJJREFZIC8KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19TQVRVUkRBWV0KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gdXBkYXRlIGN1cnJlbnQgZGF0ZSB0byBSVEMuCisgICovCit2b2lkIFJUQ19TZXREYXRlKHVpbnQzMl90IHUzMlllYXIsIHVpbnQzMl90IHUzMk1vbnRoLCB1aW50MzJfdCB1MzJEYXksIHVpbnQzMl90IHUzMkRheU9mV2VlaykKK3sKKyAgICB1aW50MzJfdCB1MzJSZWdDQUw7CisKKyAgICB1MzJSZWdDQUwgID0gKCh1MzJZZWFyIC0gKHVpbnQzMl90KVJUQ19ZRUFSMjAwMCkgLyAxMFVMKSA8PCAyMDsKKyAgICB1MzJSZWdDQUwgfD0gKCgodTMyWWVhciAtICh1aW50MzJfdClSVENfWUVBUjIwMDApICUgMTBVTCkgPDwgMTYpOworICAgIHUzMlJlZ0NBTCB8PSAoKHUzMk1vbnRoIC8gMTBVTCkgPDwgMTIpOworICAgIHUzMlJlZ0NBTCB8PSAoKHUzMk1vbnRoICUgMTBVTCkgPDwgOCk7CisgICAgdTMyUmVnQ0FMIHw9ICgodTMyRGF5ICAgLyAxMFVMKSA8PCA0KTsKKyAgICB1MzJSZWdDQUwgfD0gKHUzMkRheSAgICUgMTBVTCk7CisKKyAgICAvKiBTZXQgRGF5IG9mIHRoZSBXZWVrICovCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBSVEMtPldFRUtEQVkgPSB1MzJEYXlPZldlZWsgJiBSVENfV0VFS0RBWV9XRUVLREFZX01zazsKKworICAgIC8qIFNldCBSVEMgQ2FsZW5kZXIgTG9hZGluZyAqLworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgUlRDLT5DQUwgPSAodWludDMyX3QpdTMyUmVnQ0FMOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBVcGRhdGUgUlRDIEN1cnJlbnQgVGltZQorICAqCisgICogQHBhcmFtW2luXSAgdTMySG91ciAgICAgICAgIFRoZSBob3VyIHRpbWUgZGlnaXQgb2YgY3VycmVudCBSVEMgc2V0dGluZy4KKyAgKiBAcGFyYW1baW5dICB1MzJNaW51dGUgICAgICAgVGhlIG1pbnV0ZSB0aW1lIGRpZ2l0IG9mIGN1cnJlbnQgUlRDIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgdTMyU2Vjb25kICAgICAgIFRoZSBzZWNvbmQgdGltZSBkaWdpdCBvZiBjdXJyZW50IFJUQyBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHUzMlRpbWVNb2RlICAgICBUaGUgMjQtSG91ciAvIDEyLUhvdXIgVGltZSBTY2FsZSBTZWxlY3Rpb24uIFtSVENfQ0xPQ0tfMTIgLyBSVENfQ0xPQ0tfMjRdCisgICogQHBhcmFtW2luXSAgdTMyQW1QbSAgICAgICAgIDEyLWhvdXIgdGltZSBzY2FsZSB3aXRoIEFNIGFuZCBQTSBpbmRpY2F0aW9uLiBPbmx5IFRpbWUgU2NhbGUgc2VsZWN0IDEyLWhvdXIgdXNlZC4gW1JUQ19BTSAvIFJUQ19QTV0KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gdXBkYXRlIGN1cnJlbnQgdGltZSB0byBSVEMuCisgICovCit2b2lkIFJUQ19TZXRUaW1lKHVpbnQzMl90IHUzMkhvdXIsIHVpbnQzMl90IHUzMk1pbnV0ZSwgdWludDMyX3QgdTMyU2Vjb25kLCB1aW50MzJfdCB1MzJUaW1lTW9kZSwgdWludDMyX3QgdTMyQW1QbSkKK3sKKyAgICB1aW50MzJfdCB1MzJSZWdUSU1FOworCisgICAgLyogSW1wb3J0YW50LCByYW5nZSBvZiAxMi1ob3VyIFBNIG1vZGUgaXMgMjEgdXAgdG8gMzIgKi8KKyAgICBpZigodTMyVGltZU1vZGUgPT0gKHVpbnQzMl90KVJUQ19DTE9DS18xMikgJiYgKHUzMkFtUG0gPT0gKHVpbnQzMl90KVJUQ19QTSkpCisgICAgeworICAgICAgICB1MzJIb3VyICs9IDIwVUw7CisgICAgfQorCisgICAgdTMyUmVnVElNRSAgPSAoKHUzMkhvdXIgICAvIDEwVUwpIDw8IDIwKTsKKyAgICB1MzJSZWdUSU1FIHw9ICgodTMySG91ciAgICUgMTBVTCkgPDwgMTYpOworICAgIHUzMlJlZ1RJTUUgfD0gKCh1MzJNaW51dGUgLyAxMFVMKSA8PCAxMik7CisgICAgdTMyUmVnVElNRSB8PSAoKHUzMk1pbnV0ZSAlIDEwVUwpIDw8IDgpOworICAgIHUzMlJlZ1RJTUUgfD0gKCh1MzJTZWNvbmQgLyAxMFVMKSA8PCA0KTsKKyAgICB1MzJSZWdUSU1FIHw9ICh1MzJTZWNvbmQgJSAxMFVMKTsKKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC8qIFNldCBSVEMgMjQvMTIgaG91ciBzZXR0aW5nIGFuZCBEYXkgb2YgdGhlIFdlZWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgaWYodTMyVGltZU1vZGUgPT0gKHVpbnQzMl90KVJUQ19DTE9DS18xMikKKyAgICB7CisgICAgICAgIFJUQy0+Q0xLRk1UICY9IH5SVENfQ0xLRk1UXzI0SEVOX01zazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgUlRDLT5DTEtGTVQgfD0gUlRDX0NMS0ZNVF8yNEhFTl9Nc2s7CisgICAgfQorCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBSVEMtPlRJTUUgPSAodWludDMyX3QpdTMyUmVnVElNRTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgVXBkYXRlIFJUQyBBbGFybSBEYXRlCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJZZWFyICAgICAgICAgVGhlIHllYXIgY2FsZW5kYXIgZGlnaXQgb2YgUlRDIGFsYXJtIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgdTMyTW9udGggICAgICAgIFRoZSBtb250aCBjYWxlbmRhciBkaWdpdCBvZiBSVEMgYWxhcm0gc2V0dGluZy4KKyAgKiBAcGFyYW1baW5dICB1MzJEYXkgICAgICAgICAgVGhlIGRheSBjYWxlbmRhciBkaWdpdCBvZiBSVEMgYWxhcm0gc2V0dGluZy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gdXBkYXRlIGFsYXJtIGRhdGUgc2V0dGluZyB0byBSVEMuCisgICovCit2b2lkIFJUQ19TZXRBbGFybURhdGUodWludDMyX3QgdTMyWWVhciwgdWludDMyX3QgdTMyTW9udGgsIHVpbnQzMl90IHUzMkRheSkKK3sKKyAgICB1aW50MzJfdCB1MzJSZWdDQUxNOworCisgICAgdTMyUmVnQ0FMTSAgPSAoKHUzMlllYXIgLSAodWludDMyX3QpUlRDX1lFQVIyMDAwKSAvIDEwVUwpIDw8IDIwOworICAgIHUzMlJlZ0NBTE0gfD0gKCgodTMyWWVhciAtICh1aW50MzJfdClSVENfWUVBUjIwMDApICUgMTBVTCkgPDwgMTYpOworICAgIHUzMlJlZ0NBTE0gfD0gKCh1MzJNb250aCAvIDEwVUwpIDw8IDEyKTsKKyAgICB1MzJSZWdDQUxNIHw9ICgodTMyTW9udGggJSAxMFVMKSA8PCA4KTsKKyAgICB1MzJSZWdDQUxNIHw9ICgodTMyRGF5ICAgLyAxMFVMKSA8PCA0KTsKKyAgICB1MzJSZWdDQUxNIHw9ICh1MzJEYXkgICAlIDEwVUwpOworCisgICAgLyogU2V0IFJUQyBBbGFybSBEYXRlICovCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBSVEMtPkNBTE0gPSAodWludDMyX3QpdTMyUmVnQ0FMTTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgVXBkYXRlIFJUQyBBbGFybSBUaW1lCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJIb3VyICAgICAgICAgVGhlIGhvdXIgdGltZSBkaWdpdCBvZiBSVEMgYWxhcm0gc2V0dGluZy4KKyAgKiBAcGFyYW1baW5dICB1MzJNaW51dGUgICAgICAgVGhlIG1pbnV0ZSB0aW1lIGRpZ2l0IG9mIFJUQyBhbGFybSBzZXR0aW5nLgorICAqIEBwYXJhbVtpbl0gIHUzMlNlY29uZCAgICAgICBUaGUgc2Vjb25kIHRpbWUgZGlnaXQgb2YgUlRDIGFsYXJtIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgdTMyVGltZU1vZGUgICAgIFRoZSAyNC1Ib3VyIC8gMTItSG91ciBUaW1lIFNjYWxlIFNlbGVjdGlvbi4gW1JUQ19DTE9DS18xMiAvIFJUQ19DTE9DS18yNF0KKyAgKiBAcGFyYW1baW5dICB1MzJBbVBtICAgICAgICAgMTItaG91ciB0aW1lIHNjYWxlIHdpdGggQU0gYW5kIFBNIGluZGljYXRpb24uIE9ubHkgVGltZSBTY2FsZSBzZWxlY3QgMTItaG91ciB1c2VkLiBbUlRDX0FNIC8gUlRDX1BNXQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byB1cGRhdGUgYWxhcm0gdGltZSBzZXR0aW5nIHRvIFJUQy4KKyAgKi8KK3ZvaWQgUlRDX1NldEFsYXJtVGltZSh1aW50MzJfdCB1MzJIb3VyLCB1aW50MzJfdCB1MzJNaW51dGUsIHVpbnQzMl90IHUzMlNlY29uZCwgdWludDMyX3QgdTMyVGltZU1vZGUsIHVpbnQzMl90IHUzMkFtUG0pCit7CisgICAgdWludDMyX3QgdTMyUmVnVEFMTTsKKworICAgIC8qIEltcG9ydGFudCwgcmFuZ2Ugb2YgMTItaG91ciBQTSBtb2RlIGlzIDIxIHVwIHRvIDMyICovCisgICAgaWYoKHUzMlRpbWVNb2RlID09ICh1aW50MzJfdClSVENfQ0xPQ0tfMTIpICYmICh1MzJBbVBtID09ICh1aW50MzJfdClSVENfUE0pKQorICAgIHsKKyAgICAgICAgdTMySG91ciArPSAyMFVMOworICAgIH0KKworICAgIHUzMlJlZ1RBTE0gID0gKCh1MzJIb3VyICAgLyAxMFVMKSA8PCAyMCk7CisgICAgdTMyUmVnVEFMTSB8PSAoKHUzMkhvdXIgICAlIDEwVUwpIDw8IDE2KTsKKyAgICB1MzJSZWdUQUxNIHw9ICgodTMyTWludXRlIC8gMTBVTCkgPDwgMTIpOworICAgIHUzMlJlZ1RBTE0gfD0gKCh1MzJNaW51dGUgJSAxMFVMKSA8PCA4KTsKKyAgICB1MzJSZWdUQUxNIHw9ICgodTMyU2Vjb25kIC8gMTBVTCkgPDwgNCk7CisgICAgdTMyUmVnVEFMTSB8PSAodTMyU2Vjb25kICUgMTBVTCk7CisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAvKiBTZXQgUlRDIDI0LzEyIGhvdXIgc2V0dGluZyBhbmQgRGF5IG9mIHRoZSBXZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIGlmKHUzMlRpbWVNb2RlID09ICh1aW50MzJfdClSVENfQ0xPQ0tfMTIpCisgICAgeworICAgICAgICBSVEMtPkNMS0ZNVCAmPSB+UlRDX0NMS0ZNVF8yNEhFTl9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFJUQy0+Q0xLRk1UIHw9IFJUQ19DTEtGTVRfMjRIRU5fTXNrOworICAgIH0KKworICAgIC8qIFNldCBSVEMgQWxhcm0gVGltZSAqLworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgUlRDLT5UQUxNID0gKHVpbnQzMl90KXUzMlJlZ1RBTE07Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBSVEMgQWxhcm0gRGF0ZSBNYXNrIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB1OElzVGVuWU1zayAgICAgMTogZW5hYmxlIDEwLVllYXIgZGlnaXQgYWxhcm0gbWFzazsgMDogZGlzYWJsZWQuCisgICogQHBhcmFtW2luXSAgdThJc1lNc2sgICAgICAgIDE6IGVuYWJsZSAxLVllYXIgZGlnaXQgYWxhcm0gbWFzazsgMDogZGlzYWJsZWQuCisgICogQHBhcmFtW2luXSAgdThJc1Rlbk1Nc2sgICAgIDE6IGVuYWJsZSAxMC1Nb24gZGlnaXQgYWxhcm0gbWFzazsgMDogZGlzYWJsZWQuCisgICogQHBhcmFtW2luXSAgdThJc01Nc2sgICAgICAgIDE6IGVuYWJsZSAxLU1vbiBkaWdpdCBhbGFybSBtYXNrOyAwOiBkaXNhYmxlZC4KKyAgKiBAcGFyYW1baW5dICB1OElzVGVuRE1zayAgICAgMTogZW5hYmxlIDEwLURheSBkaWdpdCBhbGFybSBtYXNrOyAwOiBkaXNhYmxlZC4KKyAgKiBAcGFyYW1baW5dICB1OElzRE1zayAgICAgICAgMTogZW5hYmxlIDEtRGF5IGRpZ2l0IGFsYXJtIG1hc2s7IDA6IGRpc2FibGVkLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBSVEMgYWxhcm0gZGF0ZSBtYXNrIGZ1bmN0aW9uLgorICAqLwordm9pZCBSVENfU2V0QWxhcm1EYXRlTWFzayh1aW50OF90IHU4SXNUZW5ZTXNrLCB1aW50OF90IHU4SXNZTXNrLCB1aW50OF90IHU4SXNUZW5NTXNrLCB1aW50OF90IHU4SXNNTXNrLCB1aW50OF90IHU4SXNUZW5ETXNrLCB1aW50OF90IHU4SXNETXNrKQoreworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgUlRDLT5DQU1TSyA9ICgodWludDMyX3QpdThJc1RlbllNc2sgPDwgUlRDX0NBTVNLX01URU5ZRUFSX1BvcykgfAorICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KXU4SXNZTXNrICAgIDw8IFJUQ19DQU1TS19NWUVBUl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCl1OElzVGVuTU1zayA8PCBSVENfQ0FNU0tfTVRFTk1PTl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCl1OElzTU1zayAgICA8PCBSVENfQ0FNU0tfTU1PTl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCl1OElzVGVuRE1zayA8PCBSVENfQ0FNU0tfTVRFTkRBWV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCl1OElzRE1zayAgICA8PCBSVENfQ0FNU0tfTURBWV9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgUlRDIEFsYXJtIFRpbWUgTWFzayBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdThJc1RlbkhNc2sgICAgIDE6IGVuYWJsZSAxMC1Ib3VyIGRpZ2l0IGFsYXJtIG1hc2s7IDA6IGRpc2FibGVkLgorICAqIEBwYXJhbVtpbl0gIHU4SXNITXNrICAgICAgICAxOiBlbmFibGUgMS1Ib3VyIGRpZ2l0IGFsYXJtIG1hc2s7IDA6IGRpc2FibGVkLgorICAqIEBwYXJhbVtpbl0gIHU4SXNUZW5NTXNrICAgICAxOiBlbmFibGUgMTAtTWluIGRpZ2l0IGFsYXJtIG1hc2s7IDA6IGRpc2FibGVkLgorICAqIEBwYXJhbVtpbl0gIHU4SXNNTXNrICAgICAgICAxOiBlbmFibGUgMS1NaW4gZGlnaXQgYWxhcm0gbWFzazsgMDogZGlzYWJsZWQuCisgICogQHBhcmFtW2luXSAgdThJc1RlblNNc2sgICAgIDE6IGVuYWJsZSAxMC1TZWMgZGlnaXQgYWxhcm0gbWFzazsgMDogZGlzYWJsZWQuCisgICogQHBhcmFtW2luXSAgdThJc1NNc2sgICAgICAgIDE6IGVuYWJsZSAxLVNlYyBkaWdpdCBhbGFybSBtYXNrOyAwOiBkaXNhYmxlZC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgUlRDIGFsYXJtIHRpbWUgbWFzayBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgUlRDX1NldEFsYXJtVGltZU1hc2sodWludDhfdCB1OElzVGVuSE1zaywgdWludDhfdCB1OElzSE1zaywgdWludDhfdCB1OElzVGVuTU1zaywgdWludDhfdCB1OElzTU1zaywgdWludDhfdCB1OElzVGVuU01zaywgdWludDhfdCB1OElzU01zaykKK3sKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIFJUQy0+VEFNU0sgPSAoKHVpbnQzMl90KXU4SXNUZW5ITXNrIDw8IFJUQ19UQU1TS19NVEVOSFJfUG9zKSB8CisgICAgICAgICAgICAgICAgICgodWludDMyX3QpdThJc0hNc2sgICAgPDwgUlRDX1RBTVNLX01IUl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCl1OElzVGVuTU1zayA8PCBSVENfVEFNU0tfTVRFTk1JTl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCl1OElzTU1zayAgICA8PCBSVENfVEFNU0tfTU1JTl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCl1OElzVGVuU01zayA8PCBSVENfVEFNU0tfTVRFTlNFQ19Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCl1OElzU01zayAgICA8PCBSVENfVEFNU0tfTVNFQ19Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgRGF5IG9mIHRoZSBXZWVrCisgICoKKyAgKiBAcGFyYW0gICAgICBOb25lCisgICoKKyAgKiBAcmV0dmFsICAgICAwICAgU3VuZGF5CisgICogQHJldHZhbCAgICAgMSAgIE1vbmRheQorICAqIEByZXR2YWwgICAgIDIgICBUdWVzZGF5CisgICogQHJldHZhbCAgICAgMyAgIFdlZG5lc2RheQorICAqIEByZXR2YWwgICAgIDQgICBUaHVyc2RheQorICAqIEByZXR2YWwgICAgIDUgICBGcmlkYXkKKyAgKiBAcmV0dmFsICAgICA2ICAgU2F0dXJkYXkKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZ2V0IGRheSBvZiB0aGUgd2VlayBvZiBjdXJyZW50IFJUQyBkYXRlLgorICAqLwordWludDMyX3QgUlRDX0dldERheU9mV2Vlayh2b2lkKQoreworICAgIHJldHVybiAoUlRDLT5XRUVLREFZICYgUlRDX1dFRUtEQVlfV0VFS0RBWV9Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgUlRDIFRpY2sgUGVyaW9kIFRpbWUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlRpY2tTZWxlY3Rpb24gICAgSXQgaXMgdXNlZCB0byBzZXQgdGhlIFJUQyB0aWNrIHBlcmlvZCB0aW1lIGZvciBQZXJpb2RpYyBUaW1lIFRpY2sgcmVxdWVzdC4gXG4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNvbnNpc3RzIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfVElDS18xX1NFQyAgICAgOiBUaW1lIHRpY2sgaXMgMSBzZWNvbmQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RJQ0tfMV8yX1NFQyAgIDogVGltZSB0aWNrIGlzIDEvMiBzZWNvbmQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RJQ0tfMV80X1NFQyAgIDogVGltZSB0aWNrIGlzIDEvNCBzZWNvbmQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RJQ0tfMV84X1NFQyAgIDogVGltZSB0aWNrIGlzIDEvOCBzZWNvbmQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RJQ0tfMV8xNl9TRUMgIDogVGltZSB0aWNrIGlzIDEvMTYgc2Vjb25kCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19USUNLXzFfMzJfU0VDICA6IFRpbWUgdGljayBpcyAxLzMyIHNlY29uZAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfVElDS18xXzY0X1NFQyAgOiBUaW1lIHRpY2sgaXMgMS82NCBzZWNvbmQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RJQ0tfMV8xMjhfU0VDIDogVGltZSB0aWNrIGlzIDEvMTI4IHNlY29uZAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBzZXQgUlRDIHRpY2sgcGVyaW9kIHRpbWUgZm9yIGVhY2ggdGljayBpbnRlcnJ1cHQuCisgICovCit2b2lkIFJUQ19TZXRUaWNrUGVyaW9kKHVpbnQzMl90IHUzMlRpY2tTZWxlY3Rpb24pCit7CisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKworICAgIFJUQy0+VElDSyA9IChSVEMtPlRJQ0sgJiB+UlRDX1RJQ0tfVElDS19Nc2spIHwgdTMyVGlja1NlbGVjdGlvbjsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFJUQyBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkludEZsYWdNYXNrICAgICAgU3BlY2lmeSB0aGUgaW50ZXJydXB0IHNvdXJjZS4gSXQgY29uc2lzdHMgb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9BTE1JRU5fTXNrICAgOiBBbGFybSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX1RJQ0tJRU5fTXNrICA6IFRpY2sgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9UQU1QMElFTl9Nc2sgOiBUYW1wZXIgMCBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDFJRU5fTXNrIDogVGFtcGVyIDEgb3IgUGFpciAwIFBpbiBFdmVudCBEZXRlY3Rpb24gaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9UQU1QMklFTl9Nc2sgOiBUYW1wZXIgMiBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDNJRU5fTXNrIDogVGFtcGVyIDMgb3IgUGFpciAxIFBpbiBFdmVudCBEZXRlY3Rpb24gaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9UQU1QNElFTl9Nc2sgOiBUYW1wZXIgNCBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDVJRU5fTXNrIDogVGFtcGVyIDUgb3IgUGFpciAyIFBpbiBFdmVudCBEZXRlY3Rpb24gaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9DTEtGSUVOX01zayAgOiBMWFQgQ2xvY2sgRnJlcXVlbmN5IE1vbml0b3IgRmFpbCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX0NMS1NQSUVOX01zayA6IExYVCBDbG9jayBGcmVxdWVuY3kgTW9uaXRvciBTdG9wIGludGVycnVwdAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBlbmFibGUgdGhlIHNwZWNpZnkgUlRDIGludGVycnVwdCBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgUlRDX0VuYWJsZUludCh1aW50MzJfdCB1MzJJbnRGbGFnTWFzaykKK3sKKyAgICBSVEMtPklOVEVOIHw9IHUzMkludEZsYWdNYXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFJUQyBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMkludEZsYWdNYXNrICAgICAgU3BlY2lmeSB0aGUgaW50ZXJydXB0IHNvdXJjZS4gSXQgY29uc2lzdHMgb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9BTE1JRU5fTXNrICAgOiBBbGFybSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX1RJQ0tJRU5fTXNrICA6IFRpY2sgaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9UQU1QMElFTl9Nc2sgOiBUYW1wZXIgMCBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDFJRU5fTXNrIDogVGFtcGVyIDEgb3IgUGFpciAwIFBpbiBFdmVudCBEZXRlY3Rpb24gaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9UQU1QMklFTl9Nc2sgOiBUYW1wZXIgMiBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDNJRU5fTXNrIDogVGFtcGVyIDMgb3IgUGFpciAxIFBpbiBFdmVudCBEZXRlY3Rpb24gaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9UQU1QNElFTl9Nc2sgOiBUYW1wZXIgNCBQaW4gRXZlbnQgRGV0ZWN0aW9uIGludGVycnVwdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfSU5URU5fVEFNUDVJRU5fTXNrIDogVGFtcGVyIDUgb3IgUGFpciAyIFBpbiBFdmVudCBEZXRlY3Rpb24gaW50ZXJydXB0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19JTlRFTl9DTEtGSUVOX01zayAgOiBMWFQgQ2xvY2sgRnJlcXVlbmN5IE1vbml0b3IgRmFpbCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX0lOVEVOX0NMS1NQSUVOX01zayA6IExYVCBDbG9jayBGcmVxdWVuY3kgTW9uaXRvciBTdG9wIGludGVycnVwdAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBkaXNhYmxlIHRoZSBzcGVjaWZ5IFJUQyBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICovCit2b2lkIFJUQ19EaXNhYmxlSW50KHVpbnQzMl90IHUzMkludEZsYWdNYXNrKQoreworICAgIFJUQy0+SU5URU4gICY9IH51MzJJbnRGbGFnTWFzazsKKyAgICBSVEMtPklOVFNUUyA9IHUzMkludEZsYWdNYXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgU3BhcmUgUmVnaXN0ZXJzIEFjY2VzcworICAqCisgICogQHBhcmFtICAgICAgTm9uZQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBlbmFibGUgdGhlIHNwYXJlIHJlZ2lzdGVycyAwfjE5IGNhbiBiZSBhY2Nlc3NlZC4KKyAgKi8KK3ZvaWQgUlRDX0VuYWJsZVNwYXJlQWNjZXNzKHZvaWQpCit7CisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKworICAgIFJUQy0+U1BSQ1RMIHw9IFJUQ19TUFJDVExfU1BSUldFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIERpc2FibGUgU3BhcmUgUmVnaXN0ZXIKKyAgKgorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgc3BhcmUgcmVnaXN0ZXIgMH4xOSBjYW5ub3QgYmUgYWNjZXNzZWQuCisgICovCit2b2lkIFJUQ19EaXNhYmxlU3BhcmVSZWdpc3Rlcih2b2lkKQoreworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisKKyAgICBSVEMtPlNQUkNUTCAmPSB+UlRDX1NQUkNUTF9TUFJSV0VOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU3RhdGljIFRhbXBlciBEZXRlY3QKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlRhbXBlclNlbGVjdCAgICAgVGFtcGVyIHBpbiBzZWxlY3QuIFBvc3NpYmxlIG9wdGlvbnMgYXJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjVfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjRfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjNfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjJfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjFfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjBfU0VMRUNUCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJEZXRlY0xldmVsICAgICAgIFRhbXBlciBwaW4gZGV0ZWN0aW9uIGxldmVsIHNlbGVjdC4gUG9zc2libGUgb3B0aW9ucyBhcmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfVEFNUEVSX0hJR0hfTEVWRUxfREVURUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUl9MT1dfTEVWRUxfREVURUNUCisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJEZWJvdW5jZUVuICAgICAgIFRhbXBlciBwaW4gZGUtYm91bmNlIGVuYWJsZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVJfREVCT1VOQ0VfRU5BQkxFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUl9ERUJPVU5DRV9ESVNBQkxFCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgdGFtcGVyIHBpbiBkZXRlY3QgZnVuY3Rpb24gd2l0aCBzcGVjaWZ5IHRyaWdnZXIgY29uZGl0aW9uLgorICAqICAgICAgICAgICAgIFVzZXIgbmVlZCBkaXNhYmxlIGR5bmFtaWMgdGFtcGVyIGZ1bmN0aW9uIGJlZm9yZSB1c2UgdGhpcyBBUEkuCisgICovCit2b2lkIFJUQ19TdGF0aWNUYW1wZXJFbmFibGUodWludDMyX3QgdTMyVGFtcGVyU2VsZWN0LCB1aW50MzJfdCB1MzJEZXRlY0xldmVsLCB1aW50MzJfdCB1MzJEZWJvdW5jZUVuKQoreworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgdTMyUmVnOworICAgIHVpbnQzMl90IHUzMlRtcFJlZzsKKworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgdTMyUmVnID0gUlRDLT5UQU1QQ1RMOworCisgICAgdTMyVG1wUmVnID0gKFJUQ19UQU1QQ1RMX1RBTVAwRU5fTXNrIHwgKHUzMkRldGVjTGV2ZWwgPDwgUlRDX1RBTVBDVExfVEFNUDBMVl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgKHUzMkRlYm91bmNlRW4gPDwgUlRDX1RBTVBDVExfVEFNUDBEQkVOX1BvcykpOworCisgICAgZm9yKGkgPSAwVUw7IGkgPCAodWludDMyX3QpTUFYX1RBTVBFUl9QSU5fTlVNOyBpKyspCisgICAgeworICAgICAgICBpZih1MzJUYW1wZXJTZWxlY3QgJiAoMHgxVUwgPDwgaSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlJlZyAmPSB+KChSVENfVEFNUENUTF9UQU1QMEVOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAwTFZfTXNrIHwgUlRDX1RBTVBDVExfVEFNUDBEQkVOX01zaykgPDwgKGkgKiA0VUwpKTsKKyAgICAgICAgICAgIHUzMlJlZyB8PSAodTMyVG1wUmVnIDw8IChpICogNFVMKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIFJUQy0+VEFNUENUTCA9IHUzMlJlZzsKKworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTdGF0aWMgVGFtcGVyIERpc2FibGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlRhbXBlclNlbGVjdCAgICAgVGFtcGVyIHBpbiBzZWxlY3QuIFBvc3NpYmxlIG9wdGlvbnMgYXJlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjVfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjRfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjNfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjJfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjFfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1RBTVBFUjBfU0VMRUNUCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIHN0YXRpYyB0YW1wZXIgcGluIGRldGVjdC4KKyAgKi8KK3ZvaWQgUlRDX1N0YXRpY1RhbXBlckRpc2FibGUodWludDMyX3QgdTMyVGFtcGVyU2VsZWN0KQoreworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgdTMyUmVnOworICAgIHVpbnQzMl90IHUzMlRtcFJlZzsKKworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgdTMyUmVnID0gUlRDLT5UQU1QQ1RMOworCisgICAgdTMyVG1wUmVnID0gKFJUQ19UQU1QQ1RMX1RBTVAwRU5fTXNrKTsKKworICAgIGZvcihpID0gMFVMOyBpIDwgKHVpbnQzMl90KU1BWF9UQU1QRVJfUElOX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYodTMyVGFtcGVyU2VsZWN0ICYgKDB4MVVMIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJSZWcgJj0gfih1MzJUbXBSZWcgPDwgKGkgKiA0VUwpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgUlRDLT5UQU1QQ1RMID0gdTMyUmVnOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEeW5hbWljIFRhbXBlciBEZXRlY3QKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlBhaXJTZWwgICAgICAgICAgVGFtcGVyIHBpbiBkZXRlY3Rpb24gZW5hYmxlLiBQb3NzaWJsZSBvcHRpb25zIGFyZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19QQUlSMF9TRUxFQ1QKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfUEFJUjFfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1BBSVIyX1NFTEVDVAorICAqCisgICogQHBhcmFtW2luXSAgdTMyRGVib3VuY2VFbiAgICAgICBUYW1wZXIgcGluIGRlLWJvdW5jZSBlbmFibGUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfVEFNUEVSX0RFQk9VTkNFX0VOQUJMRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19UQU1QRVJfREVCT1VOQ0VfRElTQUJMRQorICAqCisgICogIEBwYXJhbVtpbl0gIHUzMlBhaXIxU291cmNlICAgICBEeW5hbWljIFBhaXIgMSBJbnB1dCBTb3VyY2UgU2VsZWN0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOiBQYWlyIDEgc291cmNlIHNlbGVjdCB0YW1wZXIgMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogUGFpciAxIHNvdXJjZSBzZWxlY3QgdGFtcGVyIDAKKyAgKgorICAqICBAcGFyYW1baW5dICB1MzJQYWlyMlNvdXJjZSAgICAgRHluYW1pYyBQYWlyIDIgSW5wdXQgU291cmNlIFNlbGVjdAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogUGFpciAyIHNvdXJjZSBzZWxlY3QgdGFtcGVyIDQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6IFBhaXIgMiBzb3VyY2Ugc2VsZWN0IHRhbXBlciAwCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgZHluYW1pYyB0YW1wZXIuCisgICovCit2b2lkIFJUQ19EeW5hbWljVGFtcGVyRW5hYmxlKHVpbnQzMl90IHUzMlBhaXJTZWwsIHVpbnQzMl90IHUzMkRlYm91bmNlRW4sIHVpbnQzMl90IHUzMlBhaXIxU291cmNlLCB1aW50MzJfdCB1MzJQYWlyMlNvdXJjZSkKK3sKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQzMl90IHUzMlJlZzsKKyAgICB1aW50MzJfdCB1MzJUbXBSZWc7CisgICAgdWludDMyX3QgdTMyVGFtcGVyMkRlYm91bmNlLCB1MzJUYW1wZXI0RGVib3VuY2U7CisKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIHUzMlJlZyA9IFJUQy0+VEFNUENUTDsKKyAgICB1MzJSZWcgJj0gfihSVENfVEFNUENUTF9UQU1QMEVOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAxRU5fTXNrIHwgUlRDX1RBTVBDVExfVEFNUDJFTl9Nc2sgfAorICAgICAgICAgICAgICAgIFJUQ19UQU1QQ1RMX1RBTVAzRU5fTXNrIHwgUlRDX1RBTVBDVExfVEFNUDRFTl9Nc2sgfCBSVENfVEFNUENUTF9UQU1QNUVOX01zayk7CisKKyAgICB1MzJUYW1wZXIyRGVib3VuY2UgPSB1MzJSZWcgJiBSVENfVEFNUENUTF9UQU1QMkRCRU5fTXNrOworICAgIHUzMlRhbXBlcjREZWJvdW5jZSA9IHUzMlJlZyAmIFJUQ19UQU1QQ1RMX1RBTVA0REJFTl9Nc2s7CisKKyAgICB1MzJSZWcgJj0gfihSVENfVEFNUENUTF9UQU1QMEVOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAxRU5fTXNrIHwgUlRDX1RBTVBDVExfVEFNUDJFTl9Nc2sgfAorICAgICAgICAgICAgICAgIFJUQ19UQU1QQ1RMX1RBTVAzRU5fTXNrIHwgUlRDX1RBTVBDVExfVEFNUDRFTl9Nc2sgfCBSVENfVEFNUENUTF9UQU1QNUVOX01zayk7CisgICAgdTMyUmVnICY9IH4oUlRDX1RBTVBDVExfRFlOMUlTU19Nc2sgfCBSVENfVEFNUENUTF9EWU4ySVNTX01zayk7CisgICAgdTMyUmVnIHw9ICgodTMyUGFpcjFTb3VyY2UgJiAweDFVTCkgPDwgUlRDX1RBTVBDVExfRFlOMUlTU19Qb3MpIHwgKCh1MzJQYWlyMlNvdXJjZSAmIDB4MVVMKSA8PCBSVENfVEFNUENUTF9EWU4ySVNTX1Bvcyk7CisKKyAgICBpZih1MzJEZWJvdW5jZUVuKQorICAgIHsKKyAgICAgICAgdTMyVG1wUmVnID0gKFJUQ19UQU1QQ1RMX1RBTVAwRU5fTXNrIHwgUlRDX1RBTVBDVExfVEFNUDFFTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgUlRDX1RBTVBDVExfVEFNUDBEQkVOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAxREJFTl9Nc2sgfCBSVENfVEFNUENUTF9EWU5QUjBFTl9Nc2spOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJUbXBSZWcgPSAoUlRDX1RBTVBDVExfVEFNUDBFTl9Nc2sgfCBSVENfVEFNUENUTF9UQU1QMUVOX01zayB8IFJUQ19UQU1QQ1RMX0RZTlBSMEVOX01zayk7CisgICAgfQorCisgICAgZm9yKGkgPSAwVUw7IGkgPCAodWludDMyX3QpTUFYX1BBSVJfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZih1MzJQYWlyU2VsICYgKDB4MVVMIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJSZWcgJj0gfigoUlRDX1RBTVBDVExfVEFNUDBEQkVOX01zayB8IFJUQ19UQU1QQ1RMX1RBTVAxREJFTl9Nc2spIDw8IChpICogOFVMKSk7CisgICAgICAgICAgICB1MzJSZWcgfD0gKHUzMlRtcFJlZyA8PCAoaSAqIDhVTCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoKHUzMlBhaXIxU291cmNlKSAmJiAodTMyUGFpclNlbCAmICh1aW50MzJfdClSVENfUEFJUjFfU0VMRUNUKSkKKyAgICB7CisgICAgICAgIHUzMlJlZyAmPSB+UlRDX1RBTVBDVExfVEFNUDJFTl9Nc2s7CisgICAgICAgIHUzMlJlZyB8PSB1MzJUYW1wZXIyRGVib3VuY2U7CisgICAgfQorCisgICAgaWYoKHUzMlBhaXIyU291cmNlKSAmJiAodTMyUGFpclNlbCAmICh1aW50MzJfdClSVENfUEFJUjJfU0VMRUNUKSkKKyAgICB7CisgICAgICAgIHUzMlJlZyAmPSB+UlRDX1RBTVBDVExfVEFNUDRFTl9Nc2s7CisgICAgICAgIHUzMlJlZyB8PSB1MzJUYW1wZXI0RGVib3VuY2U7CisgICAgfQorCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBSVEMtPlRBTVBDVEwgPSB1MzJSZWc7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIER5bmFtaWMgVGFtcGVyIERpc2FibGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlBhaXJTZWwgICAgICAgICAgVGFtcGVyIHBpbiBkZXRlY3Rpb24gZW5hYmxlLiBQb3NzaWJsZSBvcHRpb25zIGFyZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ19QQUlSMF9TRUxFQ1QKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfUEFJUjFfU0VMRUNUCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDX1BBSVIyX1NFTEVDVAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBkaXNhYmxlIHRoZSBkeW5hbWljIHRhbXBlci4KKyAgKi8KK3ZvaWQgUlRDX0R5bmFtaWNUYW1wZXJEaXNhYmxlKHVpbnQzMl90IHUzMlBhaXJTZWwpCit7CisgICAgdWludDMyX3QgaTsKKyAgICB1aW50MzJfdCB1MzJSZWc7CisgICAgdWludDMyX3QgdTMyVG1wUmVnOworICAgIHVpbnQzMl90IHUzMlRhbXBlcjJFbiA9IDBVTCwgdTMyVGFtcGVyNEVuID0gMFVMOworCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICB1MzJSZWcgPSBSVEMtPlRBTVBDVEw7CisKKyAgICBpZigodTMyUmVnICYgKHVpbnQzMl90KVJUQ19UQU1QQ1RMX0RZTjFJU1NfTXNrKSAmJiAodTMyUGFpclNlbCAmICh1aW50MzJfdClSVENfUEFJUjFfU0VMRUNUKSkKKyAgICB7CisgICAgICAgIHUzMlRhbXBlcjJFbiA9IHUzMlJlZyAmIFJUQ19UQU1QQ1RMX1RBTVAyRU5fTXNrOworICAgIH0KKworICAgIGlmKCh1MzJSZWcgJiAodWludDMyX3QpUlRDX1RBTVBDVExfRFlOMklTU19Nc2spICYmICh1MzJQYWlyU2VsICYgKHVpbnQzMl90KVJUQ19QQUlSMl9TRUxFQ1QpKQorICAgIHsKKyAgICAgICAgdTMyVGFtcGVyNEVuID0gdTMyUmVnICYgUlRDX1RBTVBDVExfVEFNUDRFTl9Nc2s7CisgICAgfQorCisgICAgdTMyVG1wUmVnID0gKFJUQ19UQU1QQ1RMX1RBTVAwRU5fTXNrIHwgUlRDX1RBTVBDVExfVEFNUDFFTl9Nc2sgfCBSVENfVEFNUENUTF9EWU5QUjBFTl9Nc2spOworCisgICAgZm9yKGkgPSAwVUw7IGkgPCAodWludDMyX3QpTUFYX1BBSVJfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZih1MzJQYWlyU2VsICYgKDB4MVVMIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJSZWcgJj0gfih1MzJUbXBSZWcgPDwgKChpICogOFVMKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgdTMyUmVnIHw9ICh1MzJUYW1wZXIyRW4gfCB1MzJUYW1wZXI0RW4pOworCisgICAgUlRDX1dhaXRBY2Nlc3NFbmFibGUoKTsKKyAgICBSVEMtPlRBTVBDVEwgPSB1MzJSZWc7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIENvbmZpZyBkeW5hbWljIHRhbXBlcgorICAqCisgICogQHBhcmFtW2luXSAgdTMyQ2hhbmdlUmF0ZSAgICAgICBUaGUgZHluYW1pYyB0YW1wZXIgb3V0cHV0IGNoYW5nZSByYXRlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDXzJQT1cxMF9DTEsKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfMlBPVzExX0NMSworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ18yUE9XMTJfQ0xLCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDXzJQT1cxM19DTEsKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfMlBPVzE0X0NMSworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJUQ18yUE9XMTVfQ0xLCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgUlRDXzJQT1cxNl9DTEsKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSVENfMlBPVzE3X0NMSworICAqCisgICogQHBhcmFtW2luXSAgdTMyU2VlZFJlbG9hZCAgICAgICBSZWxvYWQgbmV3IHNlZWQgb3Igbm90CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOiBub3QgcmVsb2FkIG5ldyBzZWVkCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiByZWxvYWQgbmV3IHNlZWQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlJlZlBhdHRlcm4gICAgICAgUmVmZXJlbmNlIHBhdHRlcm4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSRUZfUkFORE9NX1BBVFRFUk4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBSRUZfUFJFVklPVVNfUEFUVEVSTgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFJFRl9TRUVECisgICoKKyAgKiBAcGFyYW1baW5dICB1MzJTZWVkICAgICAgICAgICAgIFNlZWQgVmFsdWUgKDB4MCB+IDB4RkZGRkZGRkYpCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGNvbmZpZyBkeW5hbWljIHRhbXBlciBzZXR0aW5nLgorICAqLwordm9pZCBSVENfRHluYW1pY1RhbXBlckNvbmZpZyh1aW50MzJfdCB1MzJDaGFuZ2VSYXRlLCB1aW50MzJfdCB1MzJTZWVkUmVsb2FkLCB1aW50MzJfdCB1MzJSZWZQYXR0ZXJuLCB1aW50MzJfdCB1MzJTZWVkKQoreworICAgIHVpbnQzMl90IHUzMlJlZzsKKworICAgIFJUQ19XYWl0QWNjZXNzRW5hYmxlKCk7CisgICAgdTMyUmVnID0gUlRDLT5UQU1QQ1RMOworCisgICAgdTMyUmVnICY9IH4oUlRDX1RBTVBDVExfRFlOU1JDX01zayB8IFJUQ19UQU1QQ1RMX1NFRURSTERfTXNrIHwgUlRDX1RBTVBDVExfRFlOUkFURV9Nc2spOworCisgICAgdTMyUmVnIHw9ICh1MzJDaGFuZ2VSYXRlKSB8ICgodTMyU2VlZFJlbG9hZCAmIDB4MVVMKSA8PCBSVENfVEFNUENUTF9TRUVEUkxEX1BvcykgfAorICAgICAgICAgICAgICAoKHUzMlJlZlBhdHRlcm4gJiAweDNVTCkgPDwgUlRDX1RBTVBDVExfRFlOU1JDX1Bvcyk7CisKKyAgICBSVENfV2FpdEFjY2Vzc0VuYWJsZSgpOworICAgIFJUQy0+VEFNUFNFRUQgPSB1MzJTZWVkOyAvKiBuZWVkIHNldCBzZWVkIHZhbHVlIGJlZm9yZSByZS1sb2FkZSBzZWVkICovCisgICAgUlRDLT5UQU1QQ1RMID0gdTMyUmVnOworfQorCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFJUQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBSVENfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3NjLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODUzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zYy5jCkBAIC0wLDAgKzEsNDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc2MuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgU21hcnRjYXJkKFNDKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworLyogQmVsb3cgYXJlIHZhcmlhYmxlcyB1c2VkIGxvY2FsbHkgYnkgU0MgZHJpdmVyIGFuZCBkb2VzIG5vdCB3YW50IHRvIHBhcnNlIGJ5IGRveHlnZW4gdW5sZXNzIEhJRERFTl9TWU1CT0xTIGlzIGRlZmluZWQgKi8KKy8qKiBAY29uZCBISURERU5fU1lNQk9MUyAqLworc3RhdGljIHVpbnQzMl90IGdfdTMyQ2FyZFN0YXRlSWdub3JlW1NDX0lOVEVSRkFDRV9OVU1dID0gezBVTCwgMFVMLCAwVUx9OworCisvKiogQGVuZGNvbmQgSElEREVOX1NZTUJPTFMgKi8KKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTQ19Ecml2ZXIgU0MgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0NfRVhQT1JURURfRlVOQ1RJT05TIFNDIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgSW5kaWNhdGVzIHNwZWNpZmllZCBzbWFydGNhcmQgc2xvdCBzdGF0dXMKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIENhcmQgaW5zZXJ0IHN0YXR1cworICAqIEByZXR2YWwgICAgIFRSVUUgICAgQ2FyZCBpbnNlcnQKKyAgKiBAcmV0dmFsICAgICBGQUxTRSAgIENhcmQgcmVtb3ZlCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgaWYgc3BlY2lmaWVkIHNtYXJ0Y2FyZCBzbG90IGlzIHByZXNlbnRlZC4KKyAgKi8KK3VpbnQzMl90IFNDX0lzQ2FyZEluc2VydGVkKFNDX1QgKnNjKQoreworICAgIHVpbnQzMl90IHUzMlJldDsKKworICAgIC8qIHB1dCBjb25kaXRpb25zIGludG8gdHdvIHZhcmlhYmxlIHRvIHJlbW92ZSBJQVIgY29tcGlsYXRpb24gd2FybmluZyAqLworICAgIHVpbnQzMl90IGNvbmQxID0gKChzYy0+U1RBVFVTICYgU0NfU1RBVFVTX0NEUElOU1RTX01zaykgPj4gU0NfU1RBVFVTX0NEUElOU1RTX1Bvcyk7CisgICAgdWludDMyX3QgY29uZDIgPSAoKHNjLT5DVEwgJiBTQ19DVExfQ0RMVl9Nc2spID4+IFNDX0NUTF9DRExWX1Bvcyk7CisKKyAgICBpZigoKHNjID09IFNDMCkgfHwgKHNjID09IFNDMF9OUykpICYmIChnX3UzMkNhcmRTdGF0ZUlnbm9yZVswXSA9PSAxVUwpKQorICAgIHsKKyAgICAgICAgdTMyUmV0ID0gKHVpbnQzMl90KVRSVUU7CisgICAgfQorICAgIGVsc2UgaWYoKChzYyA9PSBTQzEpIHx8IChzYyA9PSBTQzFfTlMpKSAmJiAoZ191MzJDYXJkU3RhdGVJZ25vcmVbMV0gPT0gMVVMKSkKKyAgICB7CisgICAgICAgIHUzMlJldCA9ICh1aW50MzJfdClUUlVFOworICAgIH0KKyAgICBlbHNlIGlmKCgoc2MgPT0gU0MyKSB8fCAoc2MgPT0gU0MyX05TKSkgJiYgKGdfdTMyQ2FyZFN0YXRlSWdub3JlWzJdID09IDFVTCkpCisgICAgeworICAgICAgICB1MzJSZXQgPSAodWludDMyX3QpVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZihjb25kMSAhPSBjb25kMikKKyAgICB7CisgICAgICAgIHUzMlJldCA9ICh1aW50MzJfdClGQUxTRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyUmV0ID0gKHVpbnQzMl90KVRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIHUzMlJldDsKK30KKworLyoKKyAgKiBAYnJpZWYgICAgICBSZXNldCB0aGUgVHggYW5kIFJ4IEZJRk8gb2Ygc21hcnRjYXJkIG1vZHVsZQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiByZXNldCBib3RoIHRyYW5zbWl0IGFuZCByZWNlaXZlIEZJRk8gb2Ygc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICovCit2b2lkIFNDX0NsZWFyRklGTyhTQ19UICpzYykKK3sKKyAgICB3aGlsZShzYy0+QUxUQ1RMICYgU0NfQUxUQ1RMX1NZTkNfTXNrKSB7fQorCisgICAgc2MtPkFMVENUTCB8PSAoU0NfQUxUQ1RMX1RYUlNUX01zayB8IFNDX0FMVENUTF9SWFJTVF9Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIHNwZWNpZmllZCBzbWFydGNhcmQgbW9kdWxlCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGUgc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUsIGFuZCBmb3JjZSBhbGwgdHJhbnNpdGlvbiB0byBJRExFIHN0YXRlLgorICAqLwordm9pZCBTQ19DbG9zZShTQ19UICpzYykKK3sKKyAgICBzYy0+SU5URU4gPSAwVUw7CisgICAgd2hpbGUoc2MtPlBJTkNUTCAmIFNDX1BJTkNUTF9TWU5DX01zaykge30KKworICAgIHNjLT5QSU5DVEwgPSAwVUw7CisgICAgc2MtPkFMVENUTCA9IDBVTDsKKyAgICB3aGlsZShzYy0+Q1RMICYgU0NfQ1RMX1NZTkNfTXNrKSB7fQorCisgICAgc2MtPkNUTCA9IDBVTDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgSW5pdGlhbGl6ZWQgc21hcnRjYXJkIG1vZHVsZQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJDYXJkRGV0ICBDYXJkIGRldGVjdCBwb2xhcml0eSwgc2VsZWN0IHRoZSBTQ19DRCBwaW4gc3RhdGUgd2hpY2ggaW5kaWNhdGVzIGNhcmQgYWJzZW50LiBDb3VsZCBiZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtXHJlZiBTQ19QSU5fU1RBVEVfSElHSAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC1ccmVmIFNDX1BJTl9TVEFURV9MT1cKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtXHJlZiBTQ19QSU5fU1RBVEVfSUdOT1JFLCBubyBjYXJkIGRldGVjdCBwaW4sIGFsd2F5cyBhc3N1bWVzIGNhcmQgcHJlc2VudC4KKyAgKiBAcGFyYW1baW5dICB1MzJQV1IgICAgICBQb3dlciBvZmYgcG9sYXJpdHksIHNlbGVjdCB0aGUgU0NfUFdSIHBpbiBzdGF0ZSB3aGljaCBjb3VsZCBzZXQgc21hcnRjYXJkIFZDQyB0byBoaWdoIGxldmVsLiBDb3VsZCBiZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtXHJlZiBTQ19QSU5fU1RBVEVfSElHSAorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC1ccmVmIFNDX1BJTl9TVEFURV9MT1cKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZWQgc21hcnRjYXJkIG1vZHVsZS4KKyAgKi8KK3ZvaWQgU0NfT3BlbihTQ19UICpzYywgdWludDMyX3QgdTMyQ2FyZERldCwgdWludDMyX3QgdTMyUFdSKQoreworICAgIHVpbnQzMl90IHUzMlJlZyA9IDBVTCwgdTMySW50ZjsKKworICAgIGlmKChzYyA9PSBTQzApIHx8IChzYyA9PSBTQzBfTlMpKQorICAgIHsKKyAgICAgICAgdTMySW50ZiA9IDBVTDsKKyAgICB9CisgICAgZWxzZSBpZigoc2MgPT0gU0MxKSB8fCAoc2MgPT0gU0MxX05TKSkKKyAgICB7CisgICAgICAgIHUzMkludGYgPSAxVUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMkludGYgPSAyVUw7CisgICAgfQorCisgICAgaWYodTMyQ2FyZERldCAhPSBTQ19QSU5fU1RBVEVfSUdOT1JFKQorICAgIHsKKyAgICAgICAgdTMyUmVnID0gdTMyQ2FyZERldCA/IDBVTCA6IFNDX0NUTF9DRExWX01zazsKKyAgICAgICAgZ191MzJDYXJkU3RhdGVJZ25vcmVbdTMySW50Zl0gPSAwVUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGdfdTMyQ2FyZFN0YXRlSWdub3JlW3UzMkludGZdID0gMVVMOworICAgIH0KKyAgICBzYy0+UElOQ1RMID0gdTMyUFdSID8gMFVMIDogU0NfUElOQ1RMX1BXUklOVl9Nc2s7CisgICAgd2hpbGUoc2MtPkNUTCAmIFNDX0NUTF9TWU5DX01zaykge30KKworICAgIHNjLT5DVEwgPSBTQ19DVExfU0NFTl9Nc2sgfCBTQ19DVExfVE1SU0VMX01zayB8IHUzMlJlZzsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgUmVzZXQgc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gcmVzZXQgc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUgdG8gaXRzIGRlZmF1bHQgc3RhdGUgZm9yIGFjdGl2YXRlIHNtYXJ0Y2FyZC4KKyAgKi8KK3ZvaWQgU0NfUmVzZXRSZWFkZXIoU0NfVCAqc2MpCit7CisgICAgdWludDMyX3QgdTMySW50ZjsKKworICAgIGlmKChzYyA9PSBTQzApIHx8IChzYyA9PSBTQzBfTlMpKQorICAgIHsKKyAgICAgICAgdTMySW50ZiA9IDBVTDsKKyAgICB9CisgICAgZWxzZSBpZigoc2MgPT0gU0MxKSB8fCAoc2MgPT0gU0MxX05TKSkKKyAgICB7CisgICAgICAgIHUzMkludGYgPSAxVUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMkludGYgPSAyVUw7CisgICAgfQorCisgICAgLyogUmVzZXQgRklGTywgZW5hYmxlIGF1dG8gZGUtYWN0aXZhdGlvbiB3aGlsZSBjYXJkIHJlbW92YWwgKi8KKyAgICBzYy0+QUxUQ1RMIHw9IChTQ19BTFRDVExfVFhSU1RfTXNrIHwgU0NfQUxUQ1RMX1JYUlNUX01zayB8IFNDX0FMVENUTF9BREFDRU5fTXNrKTsKKyAgICAvKiBTZXQgUnggdHJpZ2dlciBsZXZlbCB0byAxIGNoYXJhY3RlciwgbG9uZ2VzdCBjYXJkIGRldGVjdCBkZWJvdW5jZSBwZXJpb2QsIGRpc2FibGUgZXJyb3IgcmV0cnkgKEVNViBBVFIgZG9lcyBub3QgdXNlIGVycm9yIHJldHJ5KSAqLworICAgIHdoaWxlKHNjLT5DVEwgJiBTQ19DVExfU1lOQ19Nc2spIHt9CisKKyAgICBzYy0+Q1RMICY9IH4oU0NfQ1RMX1JYVFJHTFZfTXNrIHwKKyAgICAgICAgICAgICAgICAgU0NfQ1RMX0NEREJTRUxfTXNrIHwKKyAgICAgICAgICAgICAgICAgU0NfQ1RMX1RYUlRZX01zayB8CisgICAgICAgICAgICAgICAgIFNDX0NUTF9UWFJUWUVOX01zayB8CisgICAgICAgICAgICAgICAgIFNDX0NUTF9SWFJUWV9Nc2sgfAorICAgICAgICAgICAgICAgICBTQ19DVExfUlhSVFlFTl9Nc2spOworICAgIHdoaWxlKHNjLT5DVEwgJiBTQ19DVExfU1lOQ19Nc2spIHt9CisKKyAgICAvKiBFbmFibGUgYXV0byBjb252ZW50aW9uLCBhbmQgYWxsIHRocmVlIHNtYXJ0Y2FyZCBpbnRlcm5hbCB0aW1lcnMgKi8KKyAgICBzYy0+Q1RMIHw9IFNDX0NUTF9BVVRPQ0VOX01zayB8IFNDX0NUTF9UTVJTRUxfTXNrOworICAgIC8qIERpc2FibGUgUnggdGltZW91dCAqLworICAgIHNjLT5SWFRPVVQgPSAwVUw7CisgICAgLyogMzcyIGNsb2NrcyBwZXIgRVRVIGJ5IGRlZmF1bHQgKi8KKyAgICBzYy0+RVRVQ1RMID0gMzcxVUw7CisKKyAgICAvKiBFbmFibGUgbmVjZXNzYXJ5IGludGVycnVwdCBmb3Igc21hcnRjYXJkIG9wZXJhdGlvbiAqLworICAgIGlmKGdfdTMyQ2FyZFN0YXRlSWdub3JlW3UzMkludGZdKSAgIC8qIERvIG5vdCBlbmFibGUgY2FyZCBkZXRlY3QgaW50ZXJydXB0IGlmIGNhcmQgcHJlc2VudCBzdGF0ZSBpZ25vcmUgKi8KKyAgICB7CisgICAgICAgIHNjLT5JTlRFTiA9IChTQ19JTlRFTl9SREFJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX1RFUlJJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX1RNUjBJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX1RNUjFJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX1RNUjJJRU5fTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgIFNDX0lOVEVOX0JHVElFTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgU0NfSU5URU5fQUNFUlJJRU5fTXNrKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2MtPklOVEVOID0gKFNDX0lOVEVOX1JEQUlFTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgU0NfSU5URU5fVEVSUklFTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgU0NfSU5URU5fVE1SMElFTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgU0NfSU5URU5fVE1SMUlFTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgU0NfSU5URU5fVE1SMklFTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgU0NfSU5URU5fQkdUSUVOX01zayB8CisgICAgICAgICAgICAgICAgICAgICBTQ19JTlRFTl9BQ0VSUklFTl9Nc2sgfAorICAgICAgICAgICAgICAgICAgICAgU0NfSU5URU5fQ0RJRU5fTXNrKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBCbG9jayBHdWFyZCBUaW1lIChCR1QpCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQkdUICBCbG9jayBndWFyZCB0aW1lIHVzaW5nIEVUVSBhcyB1bml0LCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAxIH4gMzIuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIGJsb2NrIGd1YXJkIHRpbWUgKEJHVCkgb2Ygc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICovCit2b2lkIFNDX1NldEJsb2NrR3VhcmRUaW1lKFNDX1QgKnNjLCB1aW50MzJfdCB1MzJCR1QpCit7CisgICAgc2MtPkNUTCA9IChzYy0+Q1RMICYgflNDX0NUTF9CR1RfTXNrKSB8ICgodTMyQkdUIC0gMVVMKSA8PCBTQ19DVExfQkdUX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBDaGFyYWN0ZXIgR3VhcmQgVGltZSAoQ0dUKQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkNHVCAgQ2hhcmFjdGVyIGd1YXJkIHRpbWUgdXNpbmcgRVRVIGFzIHVuaXQsIHZhbGlkIHJhbmdlIGFyZSBiZXR3ZWVuIDExIH4gMjY3LgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBjaGFyYWN0ZXIgZ3VhcmQgdGltZSAoQ0dUKSBvZiBzcGVjaWZpZWQgc21hcnRjYXJkIG1vZHVsZS4KKyAgICAgICAgQmVmb3JlIHVzaW5nIHRoaXMgQVBJLCB1c2VyIHNob3VsZCBzZXQgdGhlIGNvcnJlY3Qgc3RvcCBiaXQgbGVuZ3RoIGZpcnN0LgorICAqLwordm9pZCBTQ19TZXRDaGFyR3VhcmRUaW1lKFNDX1QgKnNjLCB1aW50MzJfdCB1MzJDR1QpCit7CisgICAgLyogQ0dUIGlzICJTVEFSVCBiaXQiICsgIjgtYml0cyIgKyAiUGFyaXR5IGJpdCIgKyAiU1RPUCBiaXQocykiICsgIkVHVCBjb3VudHMiICovCisgICAgdTMyQ0dUIC09IHNjLT5DVEwgJiBTQ19DVExfTlNCX01zayA/IDExVUwgOiAxMlVMOworICAgIHNjLT5FR1QgPSB1MzJDR1Q7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFN0b3AgYWxsIHNtYXJ0Y2FyZCB0aW1lcgorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICAgICAgIFRoaXMgZnVuY3Rpb24gc3RvcCB0aGUgdGltZXJzIHdpdGhpbiBzcGVjaWZpZWQgc21hcnRjYXJkIG1vZHVsZSwgXGIgbm90IHRpbWVyIG1vZHVsZS4KKyAgKi8KK3ZvaWQgU0NfU3RvcEFsbFRpbWVyKFNDX1QgKnNjKQoreworICAgIHdoaWxlKHNjLT5BTFRDVEwgJiBTQ19BTFRDVExfU1lOQ19Nc2spIHt9CisKKyAgICBzYy0+QUxUQ1RMICY9IH4oU0NfQUxUQ1RMX0NOVEVOMF9Nc2sgfCBTQ19BTFRDVExfQ05URU4xX01zayB8IFNDX0FMVENUTF9DTlRFTjJfTXNrKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgQ29uZmlndXJlIGFuZCBzdGFydCBzbWFydGNhcmQgdGltZXIKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJUaW1lck51bSAgVGltZXIgdG8gc3RhcnQuIFZhbGlkIHZhbHVlcyBhcmUgMCwgMSwgMi4KKyAgKiBAcGFyYW1baW5dICB1MzJNb2RlICAgICBUaW1lciBvcGVyYXRpbmcgbW9kZSwgdmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFXzAKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFXzEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFXzIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFXzMKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFXzQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFXzUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFXzYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFXzcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFXzgKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDX1RNUl9NT0RFX0YKKyAgKiBAcGFyYW1baW5dICB1MzJFVFVDb3VudCBUaW1lciB0aW1lb3V0IGR1cmF0aW9uLCBFVFUgYmFzZWQuIEZvciB0aW1lciAwLCB2YWxpZCAgcmFuZ2UgYXJlIGJldHdlZW4gMSB+IDB4MTAwMDAwMCBFVFVzLgorICAqICAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aW1lciAxIGFuZCB0aW1lciAyLCB2YWxpZCByYW5nZSBhcmUgYmV0d2VlbiAxIH4gMHgxMDAgRVRVcy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHN0YXJ0IHRoZSB0aW1lciB3aXRoaW4gc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUsIFxiIG5vdCB0aW1lciBtb2R1bGUuCisgICAgICAgIERlcGVuZCBvbiB0aGUgdGltZXIgb3BlcmF0aW5nIG1vZGUsIHRpbWVyIG1heSBub3Qgc3RhcnQgY291bnRpbmcgaW1tZWRpYXRlbHkgYW5kIHN0YXJ0cyB3aGVuIGNvbmRpdGlvbiBtYXRjaC4KKyAgKi8KK3ZvaWQgU0NfU3RhcnRUaW1lcihTQ19UICpzYywgdWludDMyX3QgdTMyVGltZXJOdW0sIHVpbnQzMl90IHUzMk1vZGUsIHVpbnQzMl90IHUzMkVUVUNvdW50KQoreworICAgIHVpbnQzMl90IHUzMlJlZyA9IHUzMk1vZGUgfCAoU0NfVE1SQ1RMMF9DTlRfTXNrICYgKHUzMkVUVUNvdW50IC0gMVVMKSk7CisgICAgd2hpbGUoc2MtPkFMVENUTCAmIFNDX0FMVENUTF9TWU5DX01zaykge30KKworICAgIGlmKHUzMlRpbWVyTnVtID09IDBVTCkKKyAgICB7CisgICAgICAgIHdoaWxlKHNjLT5UTVJDVEwwICYgU0NfVE1SQ1RMMF9TWU5DX01zaykge30KKyAgICAgICAgc2MtPlRNUkNUTDAgPSB1MzJSZWc7CisgICAgICAgIHNjLT5BTFRDVEwgfD0gU0NfQUxUQ1RMX0NOVEVOMF9Nc2s7CisgICAgfQorICAgIGVsc2UgaWYodTMyVGltZXJOdW0gPT0gMVVMKQorICAgIHsKKyAgICAgICAgd2hpbGUoc2MtPlRNUkNUTDEgJiBTQ19UTVJDVEwxX1NZTkNfTXNrKSB7fQorICAgICAgICBzYy0+VE1SQ1RMMSA9IHUzMlJlZzsKKyAgICAgICAgc2MtPkFMVENUTCB8PSBTQ19BTFRDVExfQ05URU4xX01zazsKKyAgICB9CisgICAgZWxzZSAgICAgICAvKiB0aW1lciAyICovCisgICAgeworICAgICAgICB3aGlsZShzYy0+VE1SQ1RMMiAmIFNDX1RNUkNUTDJfU1lOQ19Nc2spIHt9CisgICAgICAgIHNjLT5UTVJDVEwyID0gdTMyUmVnOworICAgICAgICBzYy0+QUxUQ1RMIHw9IFNDX0FMVENUTF9DTlRFTjJfTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgICAgU3RvcCBhIHNtYXJ0Y2FyZCB0aW1lcgorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMlRpbWVyTnVtICBUaW1lciB0byBzdG9wLiBWYWxpZCB2YWx1ZXMgYXJlIDAsIDEsIDIuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBzdG9wIHRoZSB0aW1lciB3aXRoaW4gc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUsIFxiIG5vdCB0aW1lciBtb2R1bGUuCisgICovCit2b2lkIFNDX1N0b3BUaW1lcihTQ19UICpzYywgdWludDMyX3QgdTMyVGltZXJOdW0pCit7CisgICAgd2hpbGUoc2MtPkFMVENUTCAmIFNDX0FMVENUTF9TWU5DX01zaykge30KKworICAgIGlmKHUzMlRpbWVyTnVtID09IDBVTCkgICAgICAvKiB0aW1lciAwICovCisgICAgeworICAgICAgICBzYy0+QUxUQ1RMICY9IH5TQ19BTFRDVExfQ05URU4wX01zazsKKyAgICB9CisgICAgZWxzZSBpZih1MzJUaW1lck51bSA9PSAxVUwpIC8qIHRpbWVyIDEgKi8KKyAgICB7CisgICAgICAgIHNjLT5BTFRDVEwgJj0gflNDX0FMVENUTF9DTlRFTjFfTXNrOworICAgIH0KKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZXIgMiAqLworICAgIHsKKyAgICAgICAgc2MtPkFMVENUTCAmPSB+U0NfQUxUQ1RMX0NOVEVOMl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgc21hcnRjYXJkIGNsb2NrIGZyZXF1ZW5jeQorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqCisgICogQHJldHVybiAgICAgU21hcnRjYXJkIGZyZXF1ZW5jeSBpbiBrSFoKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgc3BlY2lmaWVkIHNtYXJ0Y2FyZCBtb2R1bGUgY2xvY2sgZnJlcXVlbmN5IGluIGtIei4KKyAgKi8KK3VpbnQzMl90IFNDX0dldEludGVyZmFjZUNsb2NrKFNDX1QgKnNjKQoreworICAgIHVpbnQzMl90IHUzMkNsa1NyYywgdTMyTnVtLCB1MzJDbGsgPSBfX0hJUkMsIHUzMkRpdjsKKworICAgIC8qIEdldCBzbWFydGNhcmQgbW9kdWxlIGNsb2NrIHNvdXJjZSBhbmQgZGl2aWRlciAqLworICAgIGlmKChzYyA9PSBTQzApIHx8IChzYyA9PSBTQzBfTlMpKQorICAgIHsKKyAgICAgICAgdTMyTnVtID0gMFVMOworICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU0MwX01PRFVMRSk7CisgICAgICAgIHUzMkRpdiA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoU0MwX01PRFVMRSk7CisgICAgfQorICAgIGVsc2UgaWYoKHNjID09IFNDMSkgfHwgKHNjID09IFNDMV9OUykpCisgICAgeworICAgICAgICB1MzJOdW0gPSAxVUw7CisgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTQzFfTU9EVUxFKTsKKyAgICAgICAgdTMyRGl2ID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihTQzFfTU9EVUxFKTsKKyAgICB9CisgICAgZWxzZSBpZigoc2MgPT0gU0MyKSB8fCAoc2MgPT0gU0MyX05TKSkKKyAgICB7CisgICAgICAgIHUzMk51bSA9IDJVTDsKKyAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNDMl9NT0RVTEUpOworICAgICAgICB1MzJEaXYgPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFNDMl9NT0RVTEUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMFVMOworICAgIH0KKworICAgIC8qIEdldCBzbWFydGNhcmQgbW9kdWxlIGNsb2NrICovCisgICAgaWYodTMyQ2xrU3JjID09IDBVTCkKKyAgICB7CisgICAgICAgIHUzMkNsayA9IF9fSFhUOworICAgIH0KKyAgICBlbHNlIGlmKHUzMkNsa1NyYyA9PSAxVUwpCisgICAgeworICAgICAgICB1MzJDbGsgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7CisgICAgfQorICAgIGVsc2UgaWYodTMyQ2xrU3JjID09IDJVTCkKKyAgICB7CisgICAgICAgIGlmKHUzMk51bSA9PSAxVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsayA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsayA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJDbGsgPSBfX0hJUkM7CisgICAgfQorCisgICAgdTMyQ2xrIC89ICh1MzJEaXYgKyAxVUwpICogMTAwMFVMOworCisgICAgcmV0dXJuIHUzMkNsazsKK30KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ19FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ19Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc2N1YXJ0LmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zY3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTIyODdiCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc2N1YXJ0LmMKQEAgLTAsMCArMSwyNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzY3VhcnQuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgU21hcnRjYXJkIFVBUlQgbW9kZSAoU0NVQVJUKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworc3RhdGljIHVpbnQzMl90IFNDVUFSVF9HZXRDbG9jayhTQ19UICpzYyk7CisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0NVQVJUX0RyaXZlciBTQ1VBUlQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgU0NVQVJUX0VYUE9SVEVEX0ZVTkNUSU9OUyBTQ1VBUlQgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIHNtYXJ0Y2FyZCBpbnRlcmZhY2UKKyAgKgorICAqIEBwYXJhbSAgICAgIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgc21hcnRjYXJkIGludGVyZmFjZSBVQVJUIG1vZGUuCisgICovCit2b2lkIFNDVUFSVF9DbG9zZShTQ19UKiBzYykKK3sKKyAgICBzYy0+SU5URU4gPSAwVUw7CisgICAgc2MtPlVBUlRDVEwgPSAwVUw7CisgICAgc2MtPkNUTCA9IDBVTDsKK30KKworLyoqIEBjb25kIEhJRERFTl9TWU1CT0xTICovCisvKioKKyAgKiBAYnJpZWYgICAgICBSZXR1cm5zIG1vZHVsZSBjbG9jayBvZiBzcGVjaWZpZWQgU0MgaW50ZXJmYWNlCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBNb2R1bGUgY2xvY2sgb2Ygc3BlY2lmaWVkIFNDIGludGVyZmFjZS4KKyAgKi8KK3N0YXRpYyB1aW50MzJfdCBTQ1VBUlRfR2V0Q2xvY2soU0NfVCAqc2MpCit7CisgICAgdWludDMyX3QgdTMyQ2xrU3JjLCB1MzJOdW0sIHUzMkNsayA9IF9fSElSQywgdTMyRGl2OworCisgICAgLyogR2V0IHNtYXJ0Y2FyZCBtb2R1bGUgY2xvY2sgc291cmNlIGFuZCBkaXZpZGVyICovCisgICAgaWYoKHNjID09IFNDMCkgfHwgKHNjID09IFNDMF9OUykpCisgICAgeworICAgICAgICB1MzJOdW0gPSAwVUw7CisgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTQzBfTU9EVUxFKTsKKyAgICAgICAgdTMyRGl2ID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihTQzBfTU9EVUxFKTsKKyAgICB9CisgICAgZWxzZSBpZigoc2MgPT0gU0MxKSB8fCAoc2MgPT0gU0MxX05TKSkKKyAgICB7CisgICAgICAgIHUzMk51bSA9IDFVTDsKKyAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNDMV9NT0RVTEUpOworICAgICAgICB1MzJEaXYgPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFNDMV9NT0RVTEUpOworICAgIH0KKyAgICBlbHNlIGlmKChzYyA9PSBTQzIpIHx8IChzYyA9PSBTQzJfTlMpKQorICAgIHsKKyAgICAgICAgdTMyTnVtID0gMlVMOworICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU0MyX01PRFVMRSk7CisgICAgICAgIHUzMkRpdiA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoU0MyX01PRFVMRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwVUw7CisgICAgfQorCisgICAgLyogR2V0IHNtYXJ0Y2FyZCBtb2R1bGUgY2xvY2sgKi8KKyAgICBpZih1MzJDbGtTcmMgPT0gMFVMKQorICAgIHsKKyAgICAgICAgdTMyQ2xrID0gX19IWFQ7CisgICAgfQorICAgIGVsc2UgaWYodTMyQ2xrU3JjID09IDFVTCkKKyAgICB7CisgICAgICAgIHUzMkNsayA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsKKyAgICB9CisgICAgZWxzZSBpZih1MzJDbGtTcmMgPT0gMlVMKQorICAgIHsKKyAgICAgICAgaWYodTMyTnVtID09IDFVTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMkNsayA9IF9fSElSQzsKKyAgICB9CisKKyAgICB1MzJDbGsgLz0gKHUzMkRpdiArIDFVTCk7CisKKyAgICByZXR1cm4gdTMyQ2xrOworfQorLyoqIEBlbmRjb25kIEhJRERFTl9TWU1CT0xTICovCisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBzbWFydGNhcmQgbW9kdWxlIFVBUlQgbW9kZSBhbmQgc2V0IGJhdWRyYXRlCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkJhdWRyYXRlIFRhcmdldCBiYXVkcmF0ZSBvZiBzbWFydGNhcmQgVUFSVCBtb2R1bGUuCisgICoKKyAgKiBAcmV0dXJuICAgICBBY3R1YWwgYmF1ZHJhdGUgb2Ygc21hcnRjYXJkIFVBUlQgbW9kZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiB1c2UgdG8gZW5hYmxlIHNtYXJ0Y2FyZCBtb2R1bGUgVUFSVCBtb2RlIGFuZCBzZXQgYmF1ZHJhdGUuCisgICoKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIGNoYXJhY3RlciB3aWR0aCB0byA4IGJpdHMsIDEgc3RvcCBiaXQsIGFuZCBubyBwYXJpdHkuCisgICogICAgICAgICAgICAgQW5kIGNhbiB1c2UgXHJlZiBTQ1VBUlRfU2V0TGluZUNvbmZpZyBmdW5jdGlvbiB0byB1cGRhdGUgdGhlc2Ugc2V0dGluZ3MuCisgICogICAgICAgICAgICAgVGhlIGJhdWRyYXRlIGNsb2NrIHNvdXJjZSBjb21lcyBmcm9tIFNDX0NMSy9TQ19ESVYsIHdoZXJlIFNDX0NMSyBpcyBjb250cm9sbGVkCisgICogICAgICAgICAgICAgYnkgU0N4U0VMIGluIENMS1NFTDMgcmVnaXN0ZXIsIFNDX0RJViBpcyBjb250cm9sbGVkIGJ5IFNDeERJViBpbiBDTEtESVYxCisgICogICAgICAgICAgICAgcmVnaXN0ZXIuIFNpbmNlIHRoZSBiYXVkcmF0ZSBkaXZpZGVyIGlzIDEyLWJpdCB3aWRlIGFuZCBtdXN0IGJlIGxhcmdlciB0aGFuIDQsCisgICogICAgICAgICAgICAgKGNsb2NrIHNvdXJjZSAvIGJhdWRyYXRlKSBtdXN0IGJlIGxhcmdlciBvciBlcXVhbCB0byA1IGFuZCBzbWFsbGVyIG9yIGVxdWFsIHRvCisgICogICAgICAgICAgICAgNDA5Ni4gT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gY2Fubm90IGNvbmZpZ3VyZSBTQ1VBUlQgdG8gd29yayB3aXRoIHRhcmdldCBiYXVkcmF0ZS4KKyAgKi8KK3VpbnQzMl90IFNDVUFSVF9PcGVuKFNDX1QqIHNjLCB1aW50MzJfdCB1MzJCYXVkcmF0ZSkKK3sKKyAgICB1aW50MzJfdCB1MzJDbGsgPSBTQ1VBUlRfR2V0Q2xvY2soc2MpLCB1MzJEaXY7CisKKyAgICAvKiBDYWxjdWxhdGUgZGl2aWRlciBmb3IgdGFyZ2V0IGJhdWRyYXRlICovCisgICAgdTMyRGl2ID0gKHUzMkNsayArICh1MzJCYXVkcmF0ZSA+PiAxKSAtIDFVTCkgLyB1MzJCYXVkcmF0ZSAtIDFVTDsKKworICAgIHNjLT5DVEwgPSBTQ19DVExfU0NFTl9Nc2sgfCBTQ19DVExfTlNCX01zazsgIC8qIEVuYWJsZSBzbWFydGNhcmQgaW50ZXJmYWNlIGFuZCBzdG9wIGJpdCA9IDEgKi8KKyAgICBzYy0+VUFSVENUTCA9IFNDVUFSVF9DSEFSX0xFTl84IHwgU0NVQVJUX1BBUklUWV9OT05FIHwgU0NfVUFSVENUTF9VQVJURU5fTXNrOyAvKiBFbmFibGUgVUFSVCBtb2RlLCBkaXNhYmxlIHBhcml0eSBhbmQgOCBiaXQgcGVyIGNoYXJhY3RlciAqLworICAgIHNjLT5FVFVDVEwgPSB1MzJEaXY7CisKKyAgICByZXR1cm4odTMyQ2xrIC8gKHUzMkRpdiArIDFVTCkpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIFJ4IGRhdGEgZnJvbSBSeCBGSUZPCisgICoKKyAgKiBAcGFyYW1baW5dICBzYyAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICBwdThSeEJ1ZiAgICAgICAgVGhlIGJ1ZmZlciB0byBzdG9yZSByZWNlaXZlIHRoZSBkYXRhLgorICAqIEBwYXJhbVtpbl0gdTMyUmVhZEJ5dGVzICAgICBUYXJnZXQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcmVjZWl2ZQorICAqCisgICogQHJldHVybiAgICAgQWN0dWFsIGNoYXJhY3RlciBudW1iZXIgcmVhZHMgdG8gYnVmZmVyCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIGRhdGEgZnJvbSBSeCBGSUZPLgorICAqCisgICAgICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYmxvY2sgYW5kIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGVyZSdzIG5vIGRhdGEgYXZhaWxhYmxlLgorICAqLwordWludDMyX3QgU0NVQVJUX1JlYWQoU0NfVCogc2MsIHVpbnQ4X3QgcHU4UnhCdWZbXSwgdWludDMyX3QgdTMyUmVhZEJ5dGVzKQoreworICAgIHVpbnQzMl90IHUzMkNvdW50OworCisgICAgZm9yKHUzMkNvdW50ID0gMFVMOyB1MzJDb3VudCA8IHUzMlJlYWRCeXRlczsgdTMyQ291bnQrKykKKyAgICB7CisgICAgICAgIGlmKFNDVUFSVF9HRVRfUlhfRU1QVFkoc2MpKSAgIC8qIG5vIGRhdGEgYXZhaWxhYmxlICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHB1OFJ4QnVmW3UzMkNvdW50XSA9ICh1aW50OF90KVNDVUFSVF9SRUFEKHNjKTsgICAgLyogZ2V0IGRhdGEgZnJvbSBGSUZPICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMkNvdW50OworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBDb25maWd1cmUgc21hcnRjYXJkIFVBUlQgbW9kZSBsaW5lIHNldHRpbmcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiBzbWFydGNhcmQgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkJhdWRyYXRlICAgICBUYXJnZXQgYmF1ZHJhdGUgb2Ygc21hcnRjYXJkIFVBUlQgbW9kZS4gSWYgdGhpcyB2YWx1ZSBpcyAwLCBTQyBVQVJUIGJhdWRyYXRlIHdpbGwgbm90IGNoYW5nZS4KKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhV2lkdGggICAgVGhlIGRhdGEgbGVuZ3RoLCBjb3VsZCBiZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ1VBUlRfQ0hBUl9MRU5fNQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDVUFSVF9DSEFSX0xFTl82CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU0NVQVJUX0NIQVJfTEVOXzcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ1VBUlRfQ0hBUl9MRU5fOAorICAqIEBwYXJhbVtpbl0gIHUzMlBhcml0eSAgICAgICBUaGUgcGFyaXR5IHNldHRpbmcsIGNvdWxkIGJlOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDVUFSVF9QQVJJVFlfTk9ORQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDVUFSVF9QQVJJVFlfT0RECisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDVUFSVF9QQVJJVFlfRVZFTgorICAqIEBwYXJhbVtpbl0gIHUzMlN0b3BCaXRzICAgICBUaGUgc3RvcCBiaXQgbGVuZ3RoLCBjb3VsZCBiZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTQ1VBUlRfU1RPUF9CSVRfMQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNDVUFSVF9TVE9QX0JJVF8yCisgICoKKyAgKiBAcmV0dXJuICAgICBBY3R1YWwgYmF1ZHJhdGUgb2Ygc21hcnRjYXJkIFVBUlQgbW9kZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIGJhdWRyYXRlIGNsb2NrIHNvdXJjZSBjb21lcyBmcm9tIFNDX0NMSy9TQ19ESVYsIHdoZXJlIFNDX0NMSyBpcyBjb250cm9sbGVkCisgICogICAgICAgICAgICAgYnkgU0N4U0VMIGluIENMS1NFTDMgcmVnaXN0ZXIsIFNDX0RJViBpcyBjb250cm9sbGVkIGJ5IFNDeERJViBpbiBDTEtESVYxCisgICogICAgICAgICAgICAgcmVnaXN0ZXIuIFNpbmNlIHRoZSBiYXVkcmF0ZSBkaXZpZGVyIGlzIDEyLWJpdCB3aWRlIGFuZCBtdXN0IGJlIGxhcmdlciB0aGFuIDQsCisgICogICAgICAgICAgICAgKGNsb2NrIHNvdXJjZSAvIGJhdWRyYXRlKSBtdXN0IGJlIGxhcmdlciBvciBlcXVhbCB0byA1IGFuZCBzbWFsbGVyIG9yIGVxdWFsIHRvCisgICogICAgICAgICAgICAgNDA5Ni4gT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gY2Fubm90IGNvbmZpZ3VyZSBTQ1VBUlQgdG8gd29yayB3aXRoIHRhcmdldCBiYXVkcmF0ZS4KKyAgKi8KK3VpbnQzMl90IFNDVUFSVF9TZXRMaW5lQ29uZmlnKFNDX1QqIHNjLCB1aW50MzJfdCB1MzJCYXVkcmF0ZSwgdWludDMyX3QgdTMyRGF0YVdpZHRoLCB1aW50MzJfdCB1MzJQYXJpdHksIHVpbnQzMl90IHUzMlN0b3BCaXRzKQoreworICAgIHVpbnQzMl90IHUzMkNsayA9IFNDVUFSVF9HZXRDbG9jayhzYyksIHUzMkRpdjsKKworICAgIGlmKHUzMkJhdWRyYXRlID09IDBVTCkKKyAgICB7CisgICAgICAgIC8qIEtlZXAgb3JpZ2luYWwgYmF1ZHJhdGUgc2V0dGluZyAqLworICAgICAgICB1MzJEaXYgPSBzYy0+RVRVQ1RMICYgU0NfRVRVQ1RMX0VUVVJESVZfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBDYWxjdWxhdGUgZGl2aWRlciBmb3IgdGFyZ2V0IGJhdWRyYXRlICovCisgICAgICAgIHUzMkRpdiA9ICgodTMyQ2xrICsgKHUzMkJhdWRyYXRlID4+IDEpIC0gMVVMKSAvIHUzMkJhdWRyYXRlKSAtIDFVTDsKKyAgICAgICAgc2MtPkVUVUNUTCA9IHUzMkRpdjsKKyAgICB9CisKKyAgICBzYy0+Q1RMID0gdTMyU3RvcEJpdHMgfCBTQ19DVExfU0NFTl9Nc2s7ICAvKiBTZXQgc3RvcCBiaXQgKi8KKyAgICBzYy0+VUFSVENUTCA9IHUzMlBhcml0eSB8IHUzMkRhdGFXaWR0aCB8IFNDX1VBUlRDVExfVUFSVEVOX01zazsgIC8qIFNldCBjaGFyYWN0ZXIgd2lkdGggYW5kIHBhcml0eSAqLworCisgICAgcmV0dXJuICh1MzJDbGsgLyAodTMyRGl2ICsgMVVMKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCByZWNlaXZlIHRpbWVvdXQgY291bnQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHNjICAgICAgVGhlIHBvaW50ZXIgb2Ygc21hcnRjYXJkIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJUT0MgIFJ4IHRpbWUtb3V0IGNvdW50ZXIsIHVzaW5nIGJhdWRyYXRlIGFzIGNvdW50ZXIgdW5pdC4gVmFsaWQgcmFuZ2UgYXJlIDB+MHgxRkYsCisgICogICAgICAgICAgICAgICAgICAgICBzZXQgdGhpcyB2YWx1ZSB0byAwIHdpbGwgZGlzYWJsZSB0aW1lLW91dCBjb3VudGVyLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIHRpbWUtb3V0IGNvdW50ZXIgcmVzZXRzIGFuZCBzdGFydHMgY291bnRpbmcgd2hlbmV2ZXIgdGhlIFJ4IGJ1ZmZlciByZWNlaXZlZCBhCisgICogICAgICAgICAgICAgbmV3IGRhdGEgd29yZC4gT25jZSB0aGUgY291bnRlciBkZWNyZWFzZSB0byAxIGFuZCBubyBuZXcgZGF0YSBpcyByZWNlaXZlZCBvciBDUFUKKyAgKiAgICAgICAgICAgICBkb2VzIG5vdCByZWFkIGFueSBkYXRhIGZyb20gRklGTywgYSByZWNlaXZlciB0aW1lLW91dCBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICovCit2b2lkIFNDVUFSVF9TZXRUaW1lb3V0Q250KFNDX1QqIHNjLCB1aW50MzJfdCB1MzJUT0MpCit7CisgICAgc2MtPlJYVE9VVCA9IHUzMlRPQzsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgV3JpdGUgZGF0YSBpbnRvIHRyYW5zbWl0IEZJRk8gdG8gc2VuZCBkYXRhIG91dAorICAqCisgICogQHBhcmFtW2luXSAgc2MgICAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHNtYXJ0Y2FyZCBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgcHU4VHhCdWYgICAgICAgIFRoZSBidWZmZXIgY29udGFpbmluZyBkYXRhIHRvIHNlbmQgdG8gdHJhbnNtaXQgRklGTy4KKyAgKiBAcGFyYW1baW5dICB1MzJXcml0ZUJ5dGVzICAgTnVtYmVyIG9mIGRhdGEgdG8gc2VuZC4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB3cml0ZSBkYXRhIGludG8gVHggRklGTyB0byBzZW5kIGRhdGEgb3V0LgorICAqCisgICAgICAgIFRoaXMgZnVuY3Rpb24gYmxvY2tzIHVudGlsIGFsbCBkYXRhIHdyaXRlIGludG8gRklGTy4KKyAgKi8KK3ZvaWQgU0NVQVJUX1dyaXRlKFNDX1QqIHNjLCB1aW50OF90IHB1OFR4QnVmW10sIHVpbnQzMl90IHUzMldyaXRlQnl0ZXMpCit7CisgICAgdWludDMyX3QgdTMyQ291bnQ7CisKKyAgICBmb3IodTMyQ291bnQgPSAwVUw7IHUzMkNvdW50ICE9IHUzMldyaXRlQnl0ZXM7IHUzMkNvdW50KyspCisgICAgeworICAgICAgICAvKiBXYWl0ICd0aWwgRklGTyBub3QgZnVsbCAqLworICAgICAgICB3aGlsZShTQ1VBUlRfR0VUX1RYX0ZVTEwoc2MpKSB7fQorCisgICAgICAgIC8qIFdyaXRlIDEgYnl0ZSB0byBGSUZPICovCisgICAgICAgIHNjLT5EQVQgPSBwdThUeEJ1Zlt1MzJDb3VudF07ICAvKiBXcml0ZSAxIGJ5dGUgdG8gRklGTyAqLworICAgIH0KK30KKworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNDVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTQ1VBUlRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3NkaC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc2RoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1ZDVhNAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3NkaC5jCkBAIC0wLDAgKzEsMTE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIFNESC5jCisgKiBAdmVyc2lvbiAgVjEuMDAKKyAqIEBicmllZiAgICBNMjM1MSBTREggZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIk51TWljcm8uaCIKKworI2lmIGRlZmluZWQgKF9fSUNDQVJNX18pCisjIHByYWdtYSBkaWFnX3N1cHByZXNzPVBtMDczLCBQbTE0MyAgICAgICAgLyogTWlzcmEgQyAyMDA0IHJ1bGUgMTQuNyAqLworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTREhfRHJpdmVyIFNESCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTREhfRVhQT1JURURfRlVOQ1RJT05TIFNESCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKyNkZWZpbmUgU0RIX0JMT0NLX1NJWkUgICA1MTJVTAorCisvKiAjZGVmaW5lIERFQlVHX1BSSU5URiBwcmludGYgKi8KKyNkZWZpbmUgREVCVUdfUFJJTlRGKC4uLikKKworLyoqIEBjb25kIEhJRERFTl9TWU1CT0xTICovCisKKy8qIGdsb2JhbCB2YXJpYWJsZXMgKi8KKy8qIEZvciByZXNwb25zZSBSMyAoc3VjaCBhcyBBQ01ENDEsIENSQy03IGlzIGludmFsaWQ7IGJ1dCBTRCBjb250cm9sbGVyIHdpbGwgc3RpbGwgKi8KKy8qIGNhbGN1bGF0ZSBDUkMtNyBhbmQgZ2V0IGFuIGVycm9yIHJlc3VsdCwgc29mdHdhcmUgc2hvdWxkIGlnbm9yZSB0aGlzIGVycm9yIGFuZCBjbGVhciBTRElTUiBbQ1JDX0lGXSBmbGFnICovCisvKiBfc2RfdVIzX0NNRCBpcyB0aGUgZmxhZyBmb3IgaXQuIDEgbWVhbnMgc29mdHdhcmUgc2hvdWxkIGlnbm9yZSBDUkMtNyBlcnJvciAqLwordWludDhfdCBnX3U4UjNGbGFnID0gMFVMOwordWludDhfdCB2b2xhdGlsZSBnX3U4U0REYXRhUmVhZHlGbGFnID0gKHVpbnQ4X3QpRkFMU0U7CitpbnQgICAgIFNESF9vayA9IDA7CisKK3N0YXRpYyB1aW50MzJfdCBfU0RIX3VSN19DTUQgPSAwVUw7CitzdGF0aWMgdWludDMyX3QgX1NESF9SZWZlcmVuY2VDbG9jazsKKworI2lmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkgLyohPCBJQVIgQ29tcGlsZXIgKi8KKyNwcmFnbWEgZGF0YV9hbGlnbm1lbnQgPSA0CitzdGF0aWMgdWludDhfdCBfU0RIX3VjU0RIQ0J1ZmZlcls1MTJdOworI2Vsc2UKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKSkgdWludDhfdCBfU0RIX3VjU0RIQ0J1ZmZlcls1MTJdOworI2VuZGlmCisKKy8qIERlY2xhcmUgdGhlc2UgZnVuY3Rpb25zIGhlcmUgdG8gYXZvaWQgTUlTUkEgQyAyMDA0IHJ1bGUgOC4xIGVycm9yICovCit2b2lkIFNESF9DaGVja1JCKFNESF9UICpzZGgpOwordWludDMyX3QgU0RIX1NEQ29tbWFuZChTREhfVCAqc2RoLCB1aW50MzJfdCB1MzJDbWQsIHVpbnQzMl90IHUzMkFyZyk7Cit1aW50MzJfdCBTREhfU0RDbWRBbmRSc3AoU0RIX1QgKnNkaCwgdWludDMyX3QgdTMyQ21kLCB1aW50MzJfdCB1MzJBcmcsIHVpbnQzMl90IHUzMlRpY2tDb3VudCk7Cit1aW50MzJfdCBTREhfU3dhcDMyKHVpbnQzMl90IHUzMlZhbCk7Cit1aW50MzJfdCBTREhfU0RDbWRBbmRSc3AyKFNESF9UICpzZGgsIHVpbnQzMl90IHUzMkNtZCwgdWludDMyX3QgdTMyQXJnLCB1aW50MzJfdCBwdTMyUjJwdHJbXSk7Cit1aW50MzJfdCBTREhfU0RDbWRBbmRSc3BEYXRhSW4oU0RIX1QgKnNkaCwgdWludDMyX3QgdTMyQ21kLCB1aW50MzJfdCB1MzJBcmcpOwordm9pZCBTREhfU2V0X2Nsb2NrKFNESF9UICpzZGgsIHVpbnQzMl90IHUzMlNEQ2xvY2tLaHopOwordWludDMyX3QgU0RIX0NhcmREZXRlY3Rpb24oU0RIX1QgKnNkaCk7Cit1aW50MzJfdCBTREhfSW5pdChTREhfVCAqc2RoKTsKK3VpbnQzMl90IFNESF9Td2l0Y2hUb0hpZ2hTcGVlZChTREhfVCAqc2RoLCBTREhfSU5GT19UICpwU0QpOwordWludDMyX3QgU0RIX1NlbGVjdENhcmRUeXBlKFNESF9UICpzZGgpOwordm9pZCBTREhfR2V0X1NEX2luZm8oU0RIX1QgKnNkaCk7CisKK1NESF9JTkZPX1QgU0QwOworCit2b2lkIFNESF9DaGVja1JCKFNESF9UICpzZGgpCit7CisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfQ0xLOE9FTl9Nc2s7CisgICAgICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9DTEs4T0VOX01zaykge30KKyAgICAgICAgaWYoc2RoLT5JTlRTVFMgJiBTREhfSU5UU1RTX0RBVDBTVFNfTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworCit1aW50MzJfdCBTREhfU0RDb21tYW5kKFNESF9UICpzZGgsIHVpbnQzMl90IHUzMkNtZCwgdWludDMyX3QgdTMyQXJnKQoreworICAgIFNESF9JTkZPX1QgKnBTRDsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCB1MzJTdGF0dXMgPSBTdWNjZXNzZnVsOworCisgICAgLyogTTIzNTEgaXMgb25seSBzdXBwb3J0IFNESDAgKi8KKyAgICBwU0QgPSAmU0QwOworCisgICAgc2RoLT5DTURBUkcgPSB1MzJBcmc7CisgICAgc2RoLT5DVEwgPSAoc2RoLT5DVEwgJiAoflNESF9DVExfQ01EQ09ERV9Nc2spKSB8ICh1MzJDbWQgPDwgOCkgfCAoU0RIX0NUTF9DT0VOX01zayk7CisKKyAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfQ09FTl9Nc2spCisgICAgeworICAgICAgICBpZihwU0QtPklzQ2FyZEluc2VydCA9PSAodWludDMyX3QpRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlN0YXR1cyA9IFNESF9OT19TRF9DQVJEOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB1MzJTdGF0dXM7Cit9CisKKwordWludDMyX3QgU0RIX1NEQ21kQW5kUnNwKFNESF9UICpzZGgsIHVpbnQzMl90IHUzMkNtZCwgdWludDMyX3QgdTMyQXJnLCB1aW50MzJfdCB1MzJUaWNrQ291bnQpCit7CisgICAgU0RIX0lORk9fVCAqcFNEOworCisgICAgLyogTTIzNTEgaXMgb25seSBzdXBwb3J0IFNESDAgKi8KKyAgICBwU0QgPSAmU0QwOworCisgICAgc2RoLT5DTURBUkcgPSB1MzJBcmc7CisgICAgc2RoLT5DVEwgPSAoc2RoLT5DVEwgJiAoflNESF9DVExfQ01EQ09ERV9Nc2spKSB8ICh1MzJDbWQgPDwgOCkgfCAoU0RIX0NUTF9DT0VOX01zayB8IFNESF9DVExfUklFTl9Nc2spOworCisgICAgaWYodTMyVGlja0NvdW50ID4gMFVMKQorICAgIHsKKyAgICAgICAgd2hpbGUoc2RoLT5DVEwgJiBTREhfQ1RMX1JJRU5fTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBpZih1MzJUaWNrQ291bnQtLSA9PSAwVUwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2RoLT5DVEwgfD0gU0RIX0NUTF9DVExSU1RfTXNrOyAvKiByZXNldCBTRCBlbmdpbmUgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMlVMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYocFNELT5Jc0NhcmRJbnNlcnQgPT0gKHVpbnQ4X3QpRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNESF9OT19TRF9DQVJEOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9SSUVOX01zaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYocFNELT5Jc0NhcmRJbnNlcnQgPT0gKHVpbnQ4X3QpRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNESF9OT19TRF9DQVJEOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYoX1NESF91UjdfQ01EKQorICAgIHsKKyAgICAgICAgaWYoKHNkaC0+UkVTUDEgJiAweGZmVUwpICE9IDB4NTVVTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKHNkaC0+UkVTUDAgJiAweGZVTCkgIT0gMHgwMVVMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9TREhfdVI3X0NNRCA9IDBVTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gU0RIX0NNRDhfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZighZ191OFIzRmxhZykKKyAgICB7CisgICAgICAgIGlmKHNkaC0+SU5UU1RTICYgU0RIX0lOVFNUU19DUkM3X01zaykgICAgICAvKiBjaGVjayBDUkM3ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTdWNjZXNzZnVsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNESF9DUkM3X0VSUk9SOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgICAgIC8qIGlnbm9yZSBDUkMgZXJyb3IgZm9yIFIzIGNhc2UgKi8KKyAgICB7CisgICAgICAgIGdfdThSM0ZsYWcgPSAwVUw7CisgICAgICAgIHNkaC0+SU5UU1RTID0gU0RIX0lOVFNUU19DUkNJRl9Nc2s7CisgICAgICAgIHJldHVybiBTdWNjZXNzZnVsOworICAgIH0KK30KKworCit1aW50MzJfdCBTREhfU3dhcDMyKHVpbnQzMl90IHUzMlZhbCkKK3sKKyAgICB1aW50MzJfdCB1MzJCdWY7CisKKyAgICB1MzJCdWYgPSB1MzJWYWw7CisgICAgdTMyVmFsIDw8PSAyNDsKKyAgICB1MzJWYWwgfD0gKHUzMkJ1ZiA8PCA4KSAmIDB4ZmYwMDAwVUw7CisgICAgdTMyVmFsIHw9ICh1MzJCdWYgPj4gOCkgJiAweGZmMDBVTDsKKyAgICB1MzJWYWwgfD0gKHUzMkJ1ZiA+PiAyNCkgJiAweGZmVUw7CisgICAgcmV0dXJuIHUzMlZhbDsKK30KKworLyogR2V0IDE2IGJ5dGVzIENJRCBvciBDU0QgKi8KK3VpbnQzMl90IFNESF9TRENtZEFuZFJzcDIoU0RIX1QgKnNkaCwgdWludDMyX3QgdTMyQ21kLCB1aW50MzJfdCB1MzJBcmcsIHVpbnQzMl90IHB1MzJSMnB0cltdKQoreworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgYXUzMlRtcEJ1Zls1XTsKKyAgICBTREhfSU5GT19UICpwU0Q7CisKKyAgICAvKiBNMjM1MSBpcyBvbmx5IHN1cHBvcnQgU0RIMCAqLworICAgIHBTRCA9ICZTRDA7CisKKyAgICBzZGgtPkNNREFSRyA9IHUzMkFyZzsKKyAgICBzZGgtPkNUTCA9IChzZGgtPkNUTCAmICh+U0RIX0NUTF9DTURDT0RFX01zaykpIHwgKHUzMkNtZCA8PCA4KSB8IChTREhfQ1RMX0NPRU5fTXNrIHwgU0RIX0NUTF9SMkVOX01zayk7CisKKyAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfUjJFTl9Nc2spCisgICAgeworICAgICAgICBpZihwU0QtPklzQ2FyZEluc2VydCA9PSAodWludDhfdClGQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNESF9OT19TRF9DQVJEOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoc2RoLT5JTlRTVFMgJiBTREhfSU5UU1RTX0NSQzdfTXNrKQorICAgIHsKKyAgICAgICAgZm9yKGkgPSAwVUw7IGkgPCA1VUw7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYXUzMlRtcEJ1ZltpXSA9IFNESF9Td2FwMzIoc2RoLT5GQltpXSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yKGkgPSAwVUw7IGkgPCA0VUw7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgcHUzMlIycHRyW2ldID0gKChhdTMyVG1wQnVmW2ldICYgMHgwMGZmZmZmZlVMKSA8PCA4KSB8ICgoYXUzMlRtcEJ1ZltpICsgMVVMXSAmIDB4ZmYwMDAwMDBVTCkgPj4gMjQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdWNjZXNzZnVsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gU0RIX0NSQzdfRVJST1I7CisgICAgfQorfQorCisKK3VpbnQzMl90IFNESF9TRENtZEFuZFJzcERhdGFJbihTREhfVCAqc2RoLCB1aW50MzJfdCB1MzJDbWQsIHVpbnQzMl90IHUzMkFyZykKK3sKKyAgICBTREhfSU5GT19UICpwU0Q7CisKKyAgICAvKiBNMjM1MSBpcyBvbmx5IHN1cHBvcnQgU0RIMCAqLworICAgIHBTRCA9ICZTRDA7CisKKyAgICBzZGgtPkNNREFSRyA9IHUzMkFyZzsKKyAgICBzZGgtPkNUTCA9IChzZGgtPkNUTCAmICh+U0RIX0NUTF9DTURDT0RFX01zaykpIHwgKCh1aW50MzJfdCl1MzJDbWQgPDwgOCkgfAorICAgICAgICAgICAgICAgKFNESF9DVExfQ09FTl9Nc2sgfCBTREhfQ1RMX1JJRU5fTXNrIHwgU0RIX0NUTF9ESUVOX01zayk7CisKKyAgICB3aGlsZShzZGgtPkNUTCAmIFNESF9DVExfUklFTl9Nc2spCisgICAgeworICAgICAgICBpZihwU0QtPklzQ2FyZEluc2VydCA9PSAodWludDMyX3QpRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTREhfTk9fU0RfQ0FSRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9ESUVOX01zaykKKyAgICB7CisgICAgICAgIGlmKHBTRC0+SXNDYXJkSW5zZXJ0ID09ICh1aW50MzJfdClGQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNESF9OT19TRF9DQVJEOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIShzZGgtPklOVFNUUyAmIFNESF9JTlRTVFNfQ1JDN19Nc2spKSAgICAgICAvKiBjaGVjayBDUkM3ICovCisgICAgeworICAgICAgICByZXR1cm4gU0RIX0NSQzdfRVJST1I7CisgICAgfQorCisgICAgaWYoIShzZGgtPklOVFNUUyAmIFNESF9JTlRTVFNfQ1JDMTZfTXNrKSkgICAgICAvKiBjaGVjayBDUkMxNiAqLworICAgIHsKKyAgICAgICAgcmV0dXJuIFNESF9DUkMxNl9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gU3VjY2Vzc2Z1bDsKK30KKworLyogdGhlcmUgYXJlIDggYml0cyBmb3IgZGl2aWRlcjAsIG1heGltdW0gaXMgMjU2ICovCisjZGVmaW5lIFNESF9DTEtfRElWMF9NQVggICAgIDI1NlVMCisKK3ZvaWQgU0RIX1NldF9jbG9jayhTREhfVCAqc2RoLCB1aW50MzJfdCB1MzJTRENsb2NrS2h6KQoreworICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHUzMlJhdGUsIHUzMkRpdjE7CisgICAgICAgIHN0YXRpYyB1aW50MzJfdCB1MzJTRENsa1NyYyA9IDBVTDsKKworICAgICAgICBpZiAoc2RoID09IFNESDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE0yMzUxIGlzIG9ubHkgc3VwcG9ydCBTREgwICovCisgICAgICAgICAgICB1MzJTRENsa1NyYyA9IChDTEstPkNMS1NFTDAgJiBDTEtfQ0xLU0VMMF9TREgwU0VMX01zayk7CisgICAgICAgICAgICBpZih1MzJTRENsa1NyYyA9PSBDTEtfQ0xLU0VMMF9TREgwU0VMX0hYVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfU0RIX1JlZmVyZW5jZUNsb2NrID0gKENMS19HZXRIWFRGcmVxKCkgLyAxMDAwVUwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZih1MzJTRENsa1NyYyA9PSBDTEtfQ0xLU0VMMF9TREgwU0VMX0hJUkMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX1NESF9SZWZlcmVuY2VDbG9jayA9IChfX0hJUkMgLyAxMDAwVUwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZih1MzJTRENsa1NyYyA9PSBDTEtfQ0xLU0VMMF9TREgwU0VMX1BMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfU0RIX1JlZmVyZW5jZUNsb2NrID0gKENMS19HZXRQTExDbG9ja0ZyZXEoKSAvIDEwMDBVTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKHUzMlNEQ2xrU3JjID09IENMS19DTEtTRUwwX1NESDBTRUxfSENMSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfU0RIX1JlZmVyZW5jZUNsb2NrID0gKENMS19HZXRIQ0xLRnJlcSgpIC8gMTAwMFVMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKHUzMlNEQ2xvY2tLaHogPj0gNTAwMDBVTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyU0RDbG9ja0toeiA9IDUwMDAwVUw7CisgICAgICAgIH0KKyAgICAgICAgdTMyUmF0ZSA9IF9TREhfUmVmZXJlbmNlQ2xvY2sgLyB1MzJTRENsb2NrS2h6OworCisgICAgICAgIC8qIGNob29zZSBzbG93ZXIgY2xvY2sgaWYgc3lzdGVtIGNsb2NrIGNhbm5vdCBkaXZpc2libGUgYnkgd2FudGVkIGNsb2NrICovCisgICAgICAgIGlmKF9TREhfUmVmZXJlbmNlQ2xvY2sgJSB1MzJTRENsb2NrS2h6ICE9IDBVTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyUmF0ZSsrOworICAgICAgICB9CisKKyAgICAgICAgaWYodTMyUmF0ZSA+PSBTREhfQ0xLX0RJVjBfTUFYKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJSYXRlID0gU0RIX0NMS19ESVYwX01BWDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIC0tLSBjYWxjdWxhdGUgdGhlIHNlY29uZCBkaXZpZGVyIENMS0RJVjBbU0RIT1NUX05dICovCisgICAgICAgIGlmKHUzMlJhdGUgPT0gMFVMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJEaXYxID0gMFVMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRGl2MSA9ICgodTMyUmF0ZSAtIDFVTCkgJiAweEZGVUwpOworICAgICAgICB9CisKKyAgICAgICAgLyogLS0tIHNldHVwIHJlZ2lzdGVyICovCisgICAgICAgIGlmIChzZGggPT0gU0RIMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogTTIzNTEgaXMgb25seSBzdXBwb3J0IFNESDAgKi8KKyAgICAgICAgICAgIENMSy0+Q0xLRElWMCAmPSB+Q0xLX0NMS0RJVjBfU0RIMERJVl9Nc2s7CisgICAgICAgICAgICBDTEstPkNMS0RJVjAgfD0gKHUzMkRpdjEgPDwgQ0xLX0NMS0RJVjBfU0RIMERJVl9Qb3MpOworICAgICAgICB9CisgICAgfQorfQorCit1aW50MzJfdCBTREhfQ2FyZERldGVjdGlvbihTREhfVCAqc2RoKQoreworICAgIHVpbnQzMl90IGksIHUzMlN0YXR1cyA9ICh1aW50MzJfdClUUlVFOworICAgIFNESF9JTkZPX1QgKnBTRDsKKworICAgIC8qIE0yMzUxIGlzIG9ubHkgc3VwcG9ydCBTREgwICovCisgICAgcFNEID0gJlNEMDsKKworICAgIGlmKHNkaC0+SU5URU4gJiBTREhfSU5URU5fQ0RTUkNfTXNrKSAgIC8qIENhcmQgZGV0ZWN0IHBpbiBmcm9tIEdQSU8gKi8KKyAgICB7CisgICAgICAgIGlmKHNkaC0+SU5UU1RTICYgU0RIX0lOVFNUU19DRFNUU19Nc2spICAgLyogQ2FyZCByZW1vdmUgKi8KKyAgICAgICAgeworICAgICAgICAgICAgcFNELT5Jc0NhcmRJbnNlcnQgPSAodWludDhfdClGQUxTRTsKKyAgICAgICAgICAgIHUzMlN0YXR1cyA9ICh1aW50MzJfdClGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBTRC0+SXNDYXJkSW5zZXJ0ID0gKHVpbnQ4X3QpVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKCEoc2RoLT5JTlRFTiAmIFNESF9JTlRFTl9DRFNSQ19Nc2spKQorICAgIHsKKyAgICAgICAgc2RoLT5DVEwgfD0gU0RIX0NUTF9DTEtLRUVQX01zazsKKyAgICAgICAgZm9yKGkgPSAwVUw7IGkgPCA1MDAwVUw7IGkrKykge30KKworICAgICAgICBpZihzZGgtPklOVFNUUyAmIFNESF9JTlRTVFNfQ0RTVFNfTXNrKSAvKiBDYXJkIGluc2VydCAqLworICAgICAgICB7CisgICAgICAgICAgICBwU0QtPklzQ2FyZEluc2VydCA9ICh1aW50OF90KVRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwU0QtPklzQ2FyZEluc2VydCA9ICh1aW50OF90KUZBTFNFOworICAgICAgICAgICAgdTMyU3RhdHVzID0gKHVpbnQzMl90KUZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgc2RoLT5DVEwgJj0gflNESF9DVExfQ0xLS0VFUF9Nc2s7CisgICAgfQorCisgICAgcmV0dXJuIHUzMlN0YXR1czsKK30KKworCisvKiBJbml0aWFsICovCit1aW50MzJfdCBTREhfSW5pdChTREhfVCAqc2RoKQoreworICAgIHVpbnQzMl90IHZvbGF0aWxlIGksIHUzMlN0YXR1czsKKyAgICB1aW50MzJfdCB1MzJSZXNwOworICAgIHVpbnQzMl90IGF1MzJDSURCdWZmZXJbNF07CisgICAgdWludDMyX3Qgdm9sYXRpbGUgdTMyQ21kVGltZU91dDsKKyAgICBTREhfSU5GT19UICpwU0Q7CisKKyAgICAvKiBNMjM1MSBpcyBvbmx5IHN1cHBvcnQgU0RIMCAqLworICAgIHBTRCA9ICZTRDA7CisKKyAgICAvKiBzZXQgdGhlIGNsb2NrIHRvIDMwMEtIeiAqLworICAgIFNESF9TZXRfY2xvY2soc2RoLCAzMDBVTCk7CisKKyAgICAvKiBwb3dlciBPTiA3NCBjbG9jayAqLworICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfQ0xLNzRPRU5fTXNrOworCisgICAgd2hpbGUoc2RoLT5DVEwgJiBTREhfQ1RMX0NMSzc0T0VOX01zaykKKyAgICB7CisgICAgICAgIGlmKHBTRC0+SXNDYXJkSW5zZXJ0ID09ICh1aW50OF90KUZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU0RIX05PX1NEX0NBUkQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTREhfU0RDb21tYW5kKHNkaCwgMFVMLCAwVUwpOyAgICAgICAgLyogcmVzZXQgYWxsIGNhcmRzICovCisgICAgZm9yKGkgPSAweDEwMDBVTDsgaSA+IDBVTDsgaS0tKSB7fQorCisgICAgLyogaW5pdGlhbCBTREhDICovCisgICAgX1NESF91UjdfQ01EID0gMVVMOworICAgIHUzMkNtZFRpbWVPdXQgPSAweEZGRkZGVUw7CisKKyAgICBpID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgOFVMLCAweDAwMDAwMTU1VUwsIHUzMkNtZFRpbWVPdXQpOworICAgIGlmKGkgPT0gU3VjY2Vzc2Z1bCkKKyAgICB7CisgICAgICAgIC8qIFNEIDIuMCAqLworICAgICAgICBTREhfU0RDbWRBbmRSc3Aoc2RoLCA1NVVMLCAweDAwVUwsIHUzMkNtZFRpbWVPdXQpOworICAgICAgICBnX3U4UjNGbGFnID0gMVVMOworICAgICAgICBTREhfU0RDbWRBbmRSc3Aoc2RoLCA0MVVMLCAweDQwZmY4MDAwVUwsIHUzMkNtZFRpbWVPdXQpOyAvKiAyLjd2LTMuNnYgKi8KKyAgICAgICAgdTMyUmVzcCA9IHNkaC0+UkVTUDA7CisKKyAgICAgICAgd2hpbGUoISh1MzJSZXNwICYgMHgwMDgwMDAwMFVMKSkgICAgICAgICAvKiBjaGVjayBpZiBjYXJkIGlzIHJlYWR5ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIFNESF9TRENtZEFuZFJzcChzZGgsIDU1VUwsIDB4MDBVTCwgdTMyQ21kVGltZU91dCk7CisgICAgICAgICAgICBnX3U4UjNGbGFnID0gMVVMOworICAgICAgICAgICAgU0RIX1NEQ21kQW5kUnNwKHNkaCwgNDFVTCwgMHg0MGZmODAwMFVMLCB1MzJDbWRUaW1lT3V0KTsgLyogMy4wdi0zLjR2ICovCisgICAgICAgICAgICB1MzJSZXNwID0gc2RoLT5SRVNQMDsKKyAgICAgICAgfQorICAgICAgICBpZih1MzJSZXNwICYgMHgwMDQwMDAwMFVMKQorICAgICAgICB7CisgICAgICAgICAgICBwU0QtPkNhcmRUeXBlID0gU0RIX1RZUEVfU0RfSElHSDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBTRC0+Q2FyZFR5cGUgPSBTREhfVFlQRV9TRF9MT1c7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogU0QgMS4xICovCisgICAgICAgIFNESF9TRENvbW1hbmQoc2RoLCAwVUwsIDBVTCk7ICAgICAgICAvKiByZXNldCBhbGwgY2FyZHMgKi8KKyAgICAgICAgZm9yKGkgPSAweDEwMFVMOyBpID4gMFVMOyBpLS0pIHt9CisKKyAgICAgICAgaSA9IFNESF9TRENtZEFuZFJzcChzZGgsIDU1VUwsIDB4MDBVTCwgdTMyQ21kVGltZU91dCk7CisgICAgICAgIGlmKGkgPT0gMlVMKSAgICAgIC8qIE1NQyBtZW1vcnkgKi8KKyAgICAgICAgeworICAgICAgICAgICAgU0RIX1NEQ29tbWFuZChzZGgsIDBVTCwgMFVMKTsgICAgICAgIC8qIHJlc2V0ICovCisgICAgICAgICAgICBmb3IoaSA9IDB4MTAwVUw7IGkgPiAwVUw7IGktLSkge30KKworICAgICAgICAgICAgZ191OFIzRmxhZyA9IDFVTDsKKworICAgICAgICAgICAgaWYoU0RIX1NEQ21kQW5kUnNwKHNkaCwgMVVMLCAweDQwZmY4MDAwVUwsIHUzMkNtZFRpbWVPdXQpICE9IDJVTCkgICAgIC8qIGVNTUMgbWVtb3J5ICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyUmVzcCA9IHNkaC0+UkVTUDA7CisgICAgICAgICAgICAgICAgd2hpbGUoISh1MzJSZXNwICYgMHgwMDgwMDAwMFVMKSkgICAgICAgICAvKiBjaGVjayBpZiBjYXJkIGlzIHJlYWR5ICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnX3U4UjNGbGFnID0gMVVMOworCisgICAgICAgICAgICAgICAgICAgIFNESF9TRENtZEFuZFJzcChzZGgsIDFVTCwgMHg0MGZmODAwMFVMLCB1MzJDbWRUaW1lT3V0KTsgICAgICAvKiBoaWdoIHZvbHRhZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgdTMyUmVzcCA9IHNkaC0+UkVTUDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYodTMyUmVzcCAmIDB4MDA0MDAwMDBVTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBTRC0+Q2FyZFR5cGUgPSBTREhfVFlQRV9FTU1DOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwU0QtPkNhcmRUeXBlID0gU0RIX1RZUEVfTU1DOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwU0QtPkNhcmRUeXBlID0gU0RIX1RZUEVfVU5LTk9XTjsKKyAgICAgICAgICAgICAgICByZXR1cm4gU0RIX0VSUl9ERVZJQ0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihpID09IDBVTCkgICAgICAvKiBTRCBNZW1vcnkgKi8KKyAgICAgICAgeworICAgICAgICAgICAgZ191OFIzRmxhZyA9IDFVTDsKKyAgICAgICAgICAgIFNESF9TRENtZEFuZFJzcChzZGgsIDQxVUwsIDB4MDBmZjgwMDBVTCwgdTMyQ21kVGltZU91dCk7IC8qIDMuMHYtMy40diAqLworICAgICAgICAgICAgdTMyUmVzcCA9IHNkaC0+UkVTUDA7CisgICAgICAgICAgICB3aGlsZSghKHUzMlJlc3AgJiAweDAwODAwMDAwVUwpKSAgICAgICAgIC8qIGNoZWNrIGlmIGNhcmQgaXMgcmVhZHkgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTREhfU0RDbWRBbmRSc3Aoc2RoLCA1NVVMLCAweDAwVUwsIHUzMkNtZFRpbWVPdXQpOworICAgICAgICAgICAgICAgIGdfdThSM0ZsYWcgPSAxVUw7CisgICAgICAgICAgICAgICAgU0RIX1NEQ21kQW5kUnNwKHNkaCwgNDFVTCwgMHgwMGZmODAwMFVMLCB1MzJDbWRUaW1lT3V0KTsgLyogMy4wdi0zLjR2ICovCisgICAgICAgICAgICAgICAgdTMyUmVzcCA9IHNkaC0+UkVTUDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwU0QtPkNhcmRUeXBlID0gU0RIX1RZUEVfU0RfTE9XOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcFNELT5DYXJkVHlwZSA9IFNESF9UWVBFX1VOS05PV047CisgICAgICAgICAgICByZXR1cm4gU0RIX0lOSVRfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDTUQyLCBDTUQzICovCisgICAgaWYocFNELT5DYXJkVHlwZSAhPSBTREhfVFlQRV9VTktOT1dOKQorICAgIHsKKyAgICAgICAgU0RIX1NEQ21kQW5kUnNwMihzZGgsIDJVTCwgMHgwMFVMLCBhdTMyQ0lEQnVmZmVyKTsKKyAgICAgICAgaWYoKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfTU1DKSB8fCAocFNELT5DYXJkVHlwZSA9PSBTREhfVFlQRV9FTU1DKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDNVTCwgMHgxMDAwMFVMLCAwVUwpKSAhPSBTdWNjZXNzZnVsKSAgICAgICAgIC8qIHNldCBSQ0EgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFNELT5SQ0EgPSAweDEwMDAwVUw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgM1VMLCAweDAwVUwsIDBVTCkpICE9IFN1Y2Nlc3NmdWwpICAgICAgICAvKiBnZXQgUkNBICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwU0QtPlJDQSA9IChzZGgtPlJFU1AwIDw8IDgpICYgMHhmZmZmMDAwMFVMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFN1Y2Nlc3NmdWw7Cit9CisKKwordWludDMyX3QgU0RIX1N3aXRjaFRvSGlnaFNwZWVkKFNESF9UICpzZGgsIFNESF9JTkZPX1QgKnBTRCkKK3sKKyAgICB1aW50MzJfdCB2b2xhdGlsZSB1MzJTdGF0dXMgPSAwVUw7CisgICAgdWludDE2X3QgdTE2Q3VycmVudENvbXN1bXB0aW9uLCB1MTZCdXN5U3RhdHVzMDsKKworICAgICh2b2lkKXBTRDsKKyAgICBzZGgtPkRNQVNBID0gKHVpbnQzMl90KV9TREhfdWNTREhDQnVmZmVyOyAgICAvKiBzZXQgRE1BIHRyYW5zZmVyIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKyAgICBzZGgtPkJMRU4gPSA2M1VMOyAgICAvKiA1MTIgYml0ICovCisKKyAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwRGF0YUluKHNkaCwgNlVMLCAweDAwZmZmZjAxVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZhaWw7CisgICAgfQorCisgICAgdTE2Q3VycmVudENvbXN1bXB0aW9uID0gKHVpbnQxNl90KShfU0RIX3VjU0RIQ0J1ZmZlclswXSA8PCA4KTsKKyAgICB1MTZDdXJyZW50Q29tc3VtcHRpb24gfD0gKHVpbnQxNl90KV9TREhfdWNTREhDQnVmZmVyWzFdOworICAgIGlmKCF1MTZDdXJyZW50Q29tc3VtcHRpb24pCisgICAgeworICAgICAgICByZXR1cm4gRmFpbDsKKyAgICB9CisKKyAgICB1MTZCdXN5U3RhdHVzMCA9ICh1aW50MTZfdCkoX1NESF91Y1NESENCdWZmZXJbMjhdIDw8IDgpOworICAgIHUxNkJ1c3lTdGF0dXMwIHw9ICh1aW50MTZfdClfU0RIX3VjU0RIQ0J1ZmZlclsyOV07CisKKyAgICBpZighdTE2QnVzeVN0YXR1czApICAgIC8qIGZ1bmN0aW9uIHJlYWR5ICovCisgICAgeworICAgICAgICBzZGgtPkRNQVNBID0gKHVpbnQzMl90KV9TREhfdWNTREhDQnVmZmVyOyAgICAgICAgLyogc2V0IERNQSB0cmFuc2ZlciBzdGFydGluZyBhZGRyZXNzICovCisgICAgICAgIHNkaC0+QkxFTiA9IDYzVUw7ICAgIC8qIDUxMiBiaXQgKi8KKworICAgICAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwRGF0YUluKHNkaCwgNlVMLCAweDgwZmZmZjAxVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGZ1bmN0aW9uIGNoYW5nZSB0aW1pbmc6IDggY2xvY2tzICovCisgICAgICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfQ0xLOE9FTl9Nc2s7CisgICAgICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9DTEs4T0VOX01zaykge30KKworICAgICAgICB1MTZDdXJyZW50Q29tc3VtcHRpb24gPSAodWludDE2X3QpKF9TREhfdWNTREhDQnVmZmVyWzBdIDw8IDgpOworICAgICAgICB1MTZDdXJyZW50Q29tc3VtcHRpb24gfD0gKHVpbnQxNl90KV9TREhfdWNTREhDQnVmZmVyWzFdOworICAgICAgICBpZighdTE2Q3VycmVudENvbXN1bXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBTdWNjZXNzZnVsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gRmFpbDsKKyAgICB9Cit9CisKKwordWludDMyX3QgU0RIX1NlbGVjdENhcmRUeXBlKFNESF9UICpzZGgpCit7CisgICAgdWludDMyX3Qgdm9sYXRpbGUgdTMyU3RhdHVzID0gMFVMOworICAgIHVpbnQzMl90IHUzMlBhcmFtOworICAgIFNESF9JTkZPX1QgKnBTRDsKKworICAgIC8qIE0yMzUxIGlzIG9ubHkgc3VwcG9ydCBTREgwICovCisgICAgcFNEID0gJlNEMDsKKworICAgIGlmKCh1MzJTdGF0dXMgPSBTREhfU0RDbWRBbmRSc3Aoc2RoLCA3VUwsIHBTRC0+UkNBLCAwVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICB9CisKKyAgICBTREhfQ2hlY2tSQihzZGgpOworCisgICAgLyogaWYgU0QgY2FyZCBzZXQgNGJpdCAqLworICAgIGlmKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfU0RfSElHSCkKKyAgICB7CisgICAgICAgIHNkaC0+RE1BU0EgPSAodWludDMyX3QpX1NESF91Y1NESENCdWZmZXI7ICAgIC8qIHNldCBETUEgdHJhbnNmZXIgc3RhcnRpbmcgYWRkcmVzcyAqLworICAgICAgICBzZGgtPkJMRU4gPSAweDA3VUw7ICAvKiA2NCBiaXQgKi8KKworICAgICAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgNTVVTCwgcFNELT5SQ0EsIDBVTCkpICE9IFN1Y2Nlc3NmdWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1MzJTdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICBzZGgtPkRNQUNUTCB8PSAweDI7CisgICAgICAgIHdoaWxlKHNkaC0+RE1BQ1RMICYgMHgyKSB7fQorCisgICAgICAgIGlmKCh1MzJTdGF0dXMgPSBTREhfU0RDbWRBbmRSc3BEYXRhSW4oc2RoLCA1MVVMLCAweDAwVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgaWYoKF9TREhfdWNTREhDQnVmZmVyWzBdICYgMHhmVUwpID09IDB4ZlVMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJTdGF0dXMgPSBTREhfU3dpdGNoVG9IaWdoU3BlZWQoc2RoLCBwU0QpOworICAgICAgICAgICAgaWYodTMyU3RhdHVzID09IFN1Y2Nlc3NmdWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogZGl2aWRlciAqLworICAgICAgICAgICAgICAgIFNESF9TZXRfY2xvY2soc2RoLCBTREhDX0ZSRVEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDU1VUwsIHBTRC0+UkNBLCAwVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgICAgICB9CisgICAgICAgIGlmKCh1MzJTdGF0dXMgPSBTREhfU0RDbWRBbmRSc3Aoc2RoLCA2VUwsIDB4MDJVTCwgMFVMKSkgIT0gU3VjY2Vzc2Z1bCkgICAgLyogc2V0IGJ1cyB3aWR0aCAqLworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgc2RoLT5DVEwgfD0gU0RIX0NUTF9EQldfTXNrOworICAgIH0KKyAgICBlbHNlIGlmKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfU0RfTE9XKQorICAgIHsKKyAgICAgICAgc2RoLT5ETUFTQSA9ICh1aW50MzJfdCkgX1NESF91Y1NESENCdWZmZXI7IC8qIHNldCBETUEgdHJhbnNmZXIgc3RhcnRpbmcgYWRkcmVzcyAqLworICAgICAgICBzZGgtPkJMRU4gPSAweDA3VUw7ICAvKiA2NCBiaXQgKi8KKworICAgICAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgNTVVTCwgcFNELT5SQ0EsIDBVTCkpICE9IFN1Y2Nlc3NmdWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1MzJTdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcERhdGFJbihzZGgsIDUxVUwsIDB4MDBVTCkpICE9IFN1Y2Nlc3NmdWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1MzJTdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICAvKiBzZXQgZGF0YSBidXMgd2lkdGguIEFDTUQ2IGZvciBTRCBjYXJkLCBTRENSX0RCVyBmb3IgaG9zdC4gKi8KKyAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDU1VUwsIHBTRC0+UkNBLCAwVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgaWYoKHUzMlN0YXR1cyA9IFNESF9TRENtZEFuZFJzcChzZGgsIDZVTCwgMHgwMlVMLCAwVUwpKSAhPSBTdWNjZXNzZnVsKSAgICAvKiBzZXQgYnVzIHdpZHRoICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1MzJTdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICBzZGgtPkNUTCB8PSBTREhfQ1RMX0RCV19Nc2s7CisgICAgfQorICAgIGVsc2UgaWYoKHBTRC0+Q2FyZFR5cGUgPT0gU0RIX1RZUEVfTU1DKSB8fCAocFNELT5DYXJkVHlwZSA9PSBTREhfVFlQRV9FTU1DKSkKKyAgICB7CisKKyAgICAgICAgaWYocFNELT5DYXJkVHlwZSA9PSBTREhfVFlQRV9NTUMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNkaC0+Q1RMICY9IH5TREhfQ1RMX0RCV19Nc2s7CisgICAgICAgIH0KKworICAgICAgICAvKiAtLS0gc2VudCBDTUQ2IHRvIE1NQyBjYXJkIHRvIHNldCBidXMgd2lkdGggdG8gNCBiaXRzIG1vZGUgKi8KKyAgICAgICAgLyogc2V0IENNRDYgYXJndW1lbnQgQWNjZXNzIGZpZWxkIHRvIDMsIEluZGV4IHRvIDE4MywgVmFsdWUgdG8gMSAoNC1iaXQgbW9kZSkgKi8KKyAgICAgICAgdTMyUGFyYW0gPSAoM1VMIDw8IDI0KSB8ICgxODNVTCA8PCAxNikgfCAoMVVMIDw8IDgpOworICAgICAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgNlVMLCB1MzJQYXJhbSwgMFVMKSkgIT0gU3VjY2Vzc2Z1bCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICAgICAgfQorICAgICAgICBTREhfQ2hlY2tSQihzZGgpOworCisgICAgICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfREJXX01zazsgLyogc2V0IGJ1cyB3aWR0aCB0byA0LWJpdCBtb2RlIGZvciBTRCBob3N0IGNvbnRyb2xsZXIgKi8KKyAgICB9CisKKyAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgMTZVTCwgU0RIX0JMT0NLX1NJWkUsIDBVTCkpICE9IFN1Y2Nlc3NmdWwpICAvKiBzZXQgYmxvY2sgbGVuZ3RoICovCisgICAgeworICAgICAgICByZXR1cm4gdTMyU3RhdHVzOworICAgIH0KKyAgICBzZGgtPkJMRU4gPSBTREhfQkxPQ0tfU0laRSAtIDFVTDsgICAgICAgICAgIC8qIHNldCB0aGUgYmxvY2sgc2l6ZSAqLworCisgICAgU0RIX1NEQ29tbWFuZChzZGgsIDdVTCwgMFVMKTsKKyAgICBzZGgtPkNUTCB8PSBTREhfQ1RMX0NMSzhPRU5fTXNrOworICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9DTEs4T0VOX01zaykge30KKworICAgIHNkaC0+SU5URU4gfD0gU0RIX0lOVEVOX0JMS0RJRU5fTXNrOworCisgICAgcmV0dXJuIFN1Y2Nlc3NmdWw7Cit9CisKK3ZvaWQgU0RIX0dldF9TRF9pbmZvKFNESF9UICpzZGgpCit7CisgICAgdWludDMyX3QgdTMyUkxlbiwgdTMyQ1NpemUsIHUzMk11bHQsIHUzMlNpemU7CisgICAgdWludDMyX3QgYXUzMkJ1ZmZlcls0XTsKKyAgICBTREhfSU5GT19UICpwU0Q7CisKKyAgICAvKiBNMjM1MSBpcyBvbmx5IHN1cHBvcnQgU0RIMCAqLworICAgIHBTRCA9ICZTRDA7CisKKyAgICBTREhfU0RDbWRBbmRSc3AyKHNkaCwgOVVMLCBwU0QtPlJDQSwgYXUzMkJ1ZmZlcik7CisKKyAgICBpZigocFNELT5DYXJkVHlwZSA9PSBTREhfVFlQRV9NTUMpIHx8IChwU0QtPkNhcmRUeXBlID09IFNESF9UWVBFX0VNTUMpKQorICAgIHsKKyAgICAgICAgLyogZm9yIE1NQy9lTU1DIGNhcmQgKi8KKyAgICAgICAgaWYoKGF1MzJCdWZmZXJbMF0gJiAweGMwMDAwMDAwVUwpID09IDB4YzAwMDAwMDBVTCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ1NEX1NUUlVDVFVSRSBbMTI3OjEyNl0gaXMgMyAqLworICAgICAgICAgICAgLyogQ1NEIHZlcnNpb24gZGVwZW5kIG9uIEVYVF9DU0QgcmVnaXN0ZXIgaW4gZU1NQyB2NC40IGZvciBjYXJkIHNpemUgPiAyR0IgKi8KKyAgICAgICAgICAgIFNESF9TRENtZEFuZFJzcChzZGgsIDdVTCwgcFNELT5SQ0EsIDBVTCk7CisKKyAgICAgICAgICAgIHNkaC0+RE1BU0EgPSAodWludDMyX3QpX1NESF91Y1NESENCdWZmZXI7ICAvKiBzZXQgRE1BIHRyYW5zZmVyIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKyAgICAgICAgICAgIHNkaC0+QkxFTiA9IDUxMVVMOyAgLyogcmVhZCA1MTIgYnl0ZXMgZm9yIEVYVF9DU0QgKi8KKworICAgICAgICAgICAgaWYoU0RIX1NEQ21kQW5kUnNwRGF0YUluKHNkaCwgOFVMLCAweDAwVUwpICE9IFN1Y2Nlc3NmdWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTREhfU0RDb21tYW5kKHNkaCwgN1VMLCAwVUwpOworICAgICAgICAgICAgc2RoLT5DVEwgfD0gU0RIX0NUTF9DTEs4T0VOX01zazsKKyAgICAgICAgICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9DTEs4T0VOX01zaykge30KKworICAgICAgICAgICAgcFNELT50b3RhbFNlY3Rvck4gPSAodWludDMyX3QpX1NESF91Y1NESENCdWZmZXJbMjE1XSA8PCAyNDsKKyAgICAgICAgICAgIHBTRC0+dG90YWxTZWN0b3JOIHw9ICh1aW50MzJfdClfU0RIX3VjU0RIQ0J1ZmZlclsyMTRdIDw8IDE2OworICAgICAgICAgICAgcFNELT50b3RhbFNlY3Rvck4gfD0gKHVpbnQzMl90KV9TREhfdWNTREhDQnVmZmVyWzIxM10gPDwgODsKKyAgICAgICAgICAgIHBTRC0+dG90YWxTZWN0b3JOIHw9ICh1aW50MzJfdClfU0RIX3VjU0RIQ0J1ZmZlclsyMTJdOworICAgICAgICAgICAgcFNELT5kaXNrU2l6ZSA9IHBTRC0+dG90YWxTZWN0b3JOIC8gMlVMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ1NEIHZlcnNpb24gdjEuMC8xLjEvMS4yIGluIGVNTUMgdjQuNCBzcGVjIGZvciBjYXJkIHNpemUgPD0gMkdCICovCisgICAgICAgICAgICB1MzJSTGVuID0gKGF1MzJCdWZmZXJbMV0gJiAweDAwMGYwMDAwVUwpID4+IDE2OworICAgICAgICAgICAgdTMyQ1NpemUgPSAoKGF1MzJCdWZmZXJbMV0gJiAweDAwMDAwM2ZmVUwpIDw8IDIpIHwgKChhdTMyQnVmZmVyWzJdICYgMHhjMDAwMDAwMFVMKSA+PiAzMCk7CisgICAgICAgICAgICB1MzJNdWx0ID0gKGF1MzJCdWZmZXJbMl0gJiAweDAwMDM4MDAwVUwpID4+IDE1OworICAgICAgICAgICAgdTMyU2l6ZSA9ICh1MzJDU2l6ZSArIDFVTCkgKiAoMVVMIDw8ICh1MzJNdWx0ICsgMlVMKSkgKiAoMVVMIDw8IHUzMlJMZW4pOworCisgICAgICAgICAgICBwU0QtPmRpc2tTaXplID0gdTMyU2l6ZSAvIDEwMjRVTDsKKyAgICAgICAgICAgIHBTRC0+dG90YWxTZWN0b3JOID0gdTMyU2l6ZSAvIDUxMlVMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKGF1MzJCdWZmZXJbMF0gJiAweGMwMDAwMDAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNTaXplID0gKChhdTMyQnVmZmVyWzFdICYgMHgwMDAwMDAzZlVMKSA8PCAxNikgfCAoKGF1MzJCdWZmZXJbMl0gJiAweGZmZmYwMDAwVUwpID4+IDE2KTsKKyAgICAgICAgICAgIHUzMlNpemUgPSAodTMyQ1NpemUgKyAxVUwpICogNTEyVUw7ICAvKiBLYnl0ZXMgKi8KKworICAgICAgICAgICAgcFNELT5kaXNrU2l6ZSA9IHUzMlNpemU7CisgICAgICAgICAgICBwU0QtPnRvdGFsU2VjdG9yTiA9IHUzMlNpemUgPDwgMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlJMZW4gPSAoYXUzMkJ1ZmZlclsxXSAmIDB4MDAwZjAwMDBVTCkgPj4gMTY7CisgICAgICAgICAgICB1MzJDU2l6ZSA9ICgoYXUzMkJ1ZmZlclsxXSAmIDB4MDAwMDAzZmZVTCkgPDwgMikgfCAoKGF1MzJCdWZmZXJbMl0gJiAweGMwMDAwMDAwVUwpID4+IDMwKTsKKyAgICAgICAgICAgIHUzMk11bHQgPSAoYXUzMkJ1ZmZlclsyXSAmIDB4MDAwMzgwMDBVTCkgPj4gMTU7CisgICAgICAgICAgICB1MzJTaXplID0gKHUzMkNTaXplICsgMVVMKSAqICgxVUwgPDwgKHUzMk11bHQgKyAyVUwpKSAqICgxVUwgPDwgdTMyUkxlbik7CisKKyAgICAgICAgICAgIHBTRC0+ZGlza1NpemUgPSB1MzJTaXplIC8gMTAyNFVMOworICAgICAgICAgICAgcFNELT50b3RhbFNlY3Rvck4gPSB1MzJTaXplIC8gNTEyVUw7CisgICAgICAgIH0KKyAgICB9CisgICAgcFNELT5zZWN0b3JTaXplID0gKGludCk1MTJVTDsKK30KKworLyoqIEBlbmRjb25kIEhJRERFTl9TWU1CT0xTICovCisKKworLyoqCisgKiAgQGJyaWVmICBUaGlzIGZ1bmN0aW9uIHVzZSB0byByZXNldCBTRCBmdW5jdGlvbiBhbmQgc2VsZWN0IGNhcmQgZGV0ZWN0aW9uIHNvdXJjZSBhbmQgcGluLgorICoKKyAqICBAcGFyYW1baW5dICBzZGggICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTREggbW9kdWxlLgorICogIEBwYXJhbVtpbl0gIHUzMkNhcmREZXRTcmMgICBTZWxlY3QgY2FyZCBkZXRlY3Rpb24gcGluIGZyb20gR1BJTyBvciBEQVQzIHBpbi4gKCBccmVmIENhcmREZXRlY3RfRnJvbV9HUElPIC8gXHJlZiBDYXJkRGV0ZWN0X0Zyb21fREFUMykKKyAqCisgKiAgQHJldHVybiBOb25lCisgKi8KK3ZvaWQgU0RIX09wZW4oU0RIX1QgKnNkaCwgdWludDMyX3QgdTMyQ2FyZERldFNyYykKK3sKKyAgICAvKiBlbmFibGUgRE1BQyAqLworICAgIHNkaC0+RE1BQ1RMID0gU0RIX0RNQUNUTF9ETUFSU1RfTXNrOworICAgIHdoaWxlKHNkaC0+RE1BQ1RMICYgU0RIX0RNQUNUTF9ETUFSU1RfTXNrKSB7fQorCisgICAgc2RoLT5ETUFDVEwgPSBTREhfRE1BQ1RMX0RNQUVOX01zazsKKworICAgIC8qIFJlc2V0IEZNSSAqLworICAgIHNkaC0+R0NUTCA9IFNESF9HQ1RMX0dDVExSU1RfTXNrIHwgU0RIX0dDVExfU0RFTl9Nc2s7ICAgICAgICAvKiBTdGFydCByZXNldCBGTUkgY29udHJvbGxlci4gKi8KKyAgICB3aGlsZShzZGgtPkdDVEwgJiBTREhfR0NUTF9HQ1RMUlNUX01zaykge30KKworICAgIG1lbXNldCgmU0QwLCAwLCBzaXplb2YoU0RIX0lORk9fVCkpOworCisgICAgLyogZW5hYmxlIFNEICovCisgICAgc2RoLT5HQ1RMID0gU0RIX0dDVExfU0RFTl9Nc2s7CisKKyAgICBpZih1MzJDYXJkRGV0U3JjICYgQ2FyZERldGVjdF9Gcm9tX0RBVDMpCisgICAgeworICAgICAgICBzZGgtPklOVEVOICY9IH5TREhfSU5URU5fQ0RTUkNfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzZGgtPklOVEVOIHw9IFNESF9JTlRFTl9DRFNSQ19Nc2s7CisgICAgfQorICAgIHNkaC0+SU5URU4gfD0gU0RIX0lOVEVOX0NESUVOX01zazsKKworICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfQ1RMUlNUX01zazsgICAgIC8qIFNEIHNvZnR3YXJlIHJlc2V0ICovCisgICAgd2hpbGUoc2RoLT5DVEwgJiBTREhfQ1RMX0NUTFJTVF9Nc2spIHt9CisKK30KKworLyoqCisgKiAgQGJyaWVmICBUaGlzIGZ1bmN0aW9uIHVzZSB0byBpbml0aWFsIFNEIGNhcmQuCisgKgorICogIEBwYXJhbVtpbl0gICAgc2RoICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU0RIIG1vZHVsZS4KKyAqCisgKiAgQHJldHVybiBOb25lCisgKgorICogIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWFsIFNEIGNhcmQuCisgKiAgICAgICAgICAgU0QgaW5pdGlhbCBzdGF0ZSBuZWVkcyA0MDBLSHogY2xvY2sgb3V0cHV0LCBkcml2ZXIgd2lsbCB1c2UgSElSQyBmb3IgU0QgaW5pdGlhbCBjbG9jayBzb3VyY2UuCisgKiAgICAgICAgICAgQW5kIHRoZW4gc3dpdGNoIGJhY2sgdG8gdGhlIHVzZXIncyBzZXR0aW5nLgorICovCit1aW50MzJfdCBTREhfUHJvYmUoU0RIX1QgKnNkaCkKK3sKKyAgICB1aW50MzJfdCB1MzJWYWw7CisKKyAgICAvKiBEaXNhYmxlIEZNSS9TRCBob3N0IGludGVycnVwdCAqLworICAgIHNkaC0+R0lOVEVOID0gMFVMOworCisgICAgc2RoLT5DVEwgJj0gflNESF9DVExfU0ROV1JfTXNrOworICAgIHNkaC0+Q1RMIHw9ICAweDA5VUwgPDwgU0RIX0NUTF9TRE5XUl9Qb3M7ICAgICAgICAgLyogc2V0IFNETldSID0gOSAqLworICAgIHNkaC0+Q1RMICY9IH5TREhfQ1RMX0JMS0NOVF9Nc2s7CisgICAgc2RoLT5DVEwgfD0gIDB4MDFVTCA8PCBTREhfQ1RMX0JMS0NOVF9Qb3M7ICAgICAgICAgICAvKiBzZXQgQkxLQ05UID0gMSAqLworICAgIHNkaC0+Q1RMICY9IH5TREhfQ1RMX0RCV19Nc2s7ICAgICAgICAgICAgICAgLyogU0QgMS1iaXQgZGF0YSBidXMgKi8KKworICAgIGlmKCEoU0RIX0NhcmREZXRlY3Rpb24oc2RoKSkpCisgICAgeworICAgICAgICByZXR1cm4gU0RIX05PX1NEX0NBUkQ7CisgICAgfQorCisgICAgaWYoKHUzMlZhbCA9IFNESF9Jbml0KHNkaCkpICE9IDBVTCkKKyAgICB7CisgICAgICAgIHJldHVybiB1MzJWYWw7CisgICAgfQorCisgICAgLyogZGl2aWRlciAqLworICAgIGlmKFNEMC5DYXJkVHlwZSA9PSBTREhfVFlQRV9NTUMpCisgICAgeworICAgICAgICBTREhfU2V0X2Nsb2NrKHNkaCwgTU1DX0ZSRVEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTREhfU2V0X2Nsb2NrKHNkaCwgU0RfRlJFUSk7CisgICAgfQorICAgIFNESF9HZXRfU0RfaW5mbyhzZGgpOworCisgICAgaWYoKHUzMlZhbCA9IFNESF9TZWxlY3RDYXJkVHlwZShzZGgpKSAhPSAwVUwpCisgICAgeworICAgICAgICByZXR1cm4gdTMyVmFsOworICAgIH0KKworICAgIFNESF9vayA9IDE7CisgICAgcmV0dXJuIDBVTDsKK30KKworLyoqCisgKiAgQGJyaWVmICBUaGlzIGZ1bmN0aW9uIHVzZSB0byByZWFkIGRhdGEgZnJvbSBTRCBjYXJkLgorICoKKyAqICBAcGFyYW1baW5dICAgICBzZGggICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU0RIIG1vZHVsZS4KKyAqICBAcGFyYW1bb3V0XSAgICBwdThCdWZBZGRyICAgIFRoZSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZGF0YSBmcm9tIFNEIGNhcmQuCisgKiAgQHBhcmFtW2luXSAgICAgdTMyU3RhcnRTZWMgICBUaGUgc3RhcnQgcmVhZCBzZWN0b3IgYWRkcmVzcy4KKyAqICBAcGFyYW1baW5dICAgICB1MzJTZWNDb3VudCAgIFRoZSB0aGUgcmVhZCBzZWN0b3IgbnVtYmVyIG9mIGRhdGEKKyAqCisgKiAgQHJldHVybiBOb25lCisgKi8KK3VpbnQzMl90IFNESF9SZWFkKFNESF9UICpzZGgsIHVpbnQ4X3QgKnB1OEJ1ZkFkZHIsIHVpbnQzMl90IHUzMlN0YXJ0U2VjLCB1aW50MzJfdCB1MzJTZWNDb3VudCkKK3sKKyAgICB1aW50MzJfdCB2b2xhdGlsZSB1MzJJc1NlbmRDbWQgPSAodWludDMyX3QpRkFMU0U7CisgICAgdWludDMyX3Qgdm9sYXRpbGUgdTMyUmVnOworICAgIHVpbnQzMl90IHZvbGF0aWxlIHUzMkxvb3AsIHUzMlN0YXR1czsKKyAgICB1aW50MzJfdCB1MzJCbGtTaXplID0gU0RIX0JMT0NLX1NJWkU7CisKKyAgICBTREhfSU5GT19UICpwU0Q7CisKKyAgICAvKiBNMjM1MSBpcyBvbmx5IHN1cHBvcnQgU0RIMCAqLworICAgIHBTRCA9ICZTRDA7CisKKyAgICAvKiAtLS0gY2hlY2sgaW5wdXQgcGFyYW1ldGVycyAqLworICAgIGlmKHUzMlNlY0NvdW50ID09IDBVTCkKKyAgICB7CisgICAgICAgIHJldHVybiBTREhfU0VMRUNUX0VSUk9SOworICAgIH0KKworICAgIGlmKCh1MzJTdGF0dXMgPSBTREhfU0RDbWRBbmRSc3Aoc2RoLCA3VUwsIHBTRC0+UkNBLCAwVUwpKSAhPSBTdWNjZXNzZnVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHUzMlN0YXR1czsKKyAgICB9CisgICAgU0RIX0NoZWNrUkIoc2RoKTsKKworICAgIHNkaC0+QkxFTiA9IHUzMkJsa1NpemUgLSAxVUw7ICAgICAgIC8qIHRoZSBhY3R1YWwgYnl0ZSBjb3VudCBpcyBlcXVhbCB0byAoU0RCTEVOKzEpICovCisKKyAgICBpZigocFNELT5DYXJkVHlwZSA9PSBTREhfVFlQRV9TRF9ISUdIKSB8fCAocFNELT5DYXJkVHlwZSA9PSBTREhfVFlQRV9FTU1DKSkKKyAgICB7CisgICAgICAgIHNkaC0+Q01EQVJHID0gdTMyU3RhcnRTZWM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNkaC0+Q01EQVJHID0gdTMyU3RhcnRTZWMgKiB1MzJCbGtTaXplOworICAgIH0KKworICAgIHNkaC0+RE1BU0EgPSAodWludDMyX3QpcHU4QnVmQWRkcjsKKworICAgIHUzMkxvb3AgPSB1MzJTZWNDb3VudCAvIDI1NVVMOworICAgIHdoaWxlKHUzMkxvb3AgPiAwVUwpCisgICAgeworICAgICAgICBnX3U4U0REYXRhUmVhZHlGbGFnID0gKHVpbnQ4X3QpRkFMU0U7CisgICAgICAgIHUzMlJlZyA9IHNkaC0+Q1RMICYgflNESF9DVExfQ01EQ09ERV9Nc2s7CisgICAgICAgIHUzMlJlZyA9IHUzMlJlZyB8IDB4ZmYwMDAwVUw7ICAgLyogc2V0IEJMS19DTlQgdG8gMjU1ICovCisgICAgICAgIGlmKHUzMklzU2VuZENtZCA9PSAodWludDMyX3QpRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNkaC0+Q1RMID0gdTMyUmVnIHwgKDE4VUwgPDwgOCkgfCAoU0RIX0NUTF9DT0VOX01zayB8IFNESF9DVExfUklFTl9Nc2sgfCBTREhfQ1RMX0RJRU5fTXNrKTsKKyAgICAgICAgICAgIHUzMklzU2VuZENtZCA9ICh1aW50MzJfdClUUlVFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc2RoLT5DVEwgPSB1MzJSZWcgfCBTREhfQ1RMX0RJRU5fTXNrOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUoIWdfdThTRERhdGFSZWFkeUZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGdfdThTRERhdGFSZWFkeUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihwU0QtPklzQ2FyZEluc2VydCA9PSAodWludDhfdClGQUxTRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gU0RIX05PX1NEX0NBUkQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZighKHNkaC0+SU5UU1RTICYgU0RIX0lOVFNUU19DUkM3X01zaykpICAgICAvKiBjaGVjayBDUkM3ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTREhfQ1JDN19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCEoc2RoLT5JTlRTVFMgJiBTREhfSU5UU1RTX0NSQzE2X01zaykpICAgIC8qIGNoZWNrIENSQzE2ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTREhfQ1JDMTZfRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgdTMyTG9vcC0tOworICAgIH0KKworICAgIHUzMkxvb3AgPSB1MzJTZWNDb3VudCAlIDI1NVVMOworICAgIGlmKHUzMkxvb3AgIT0gMFVMKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdTMyUmVnVG1wOworICAgICAgICBnX3U4U0REYXRhUmVhZHlGbGFnID0gKHVpbnQ4X3QpRkFMU0U7CisgICAgICAgIHUzMlJlZyA9IHNkaC0+Q1RMICYgKH5TREhfQ1RMX0NNRENPREVfTXNrKTsKKyAgICAgICAgdTMyUmVnID0gdTMyUmVnICYgKH5TREhfQ1RMX0JMS0NOVF9Nc2spOworICAgICAgICB1MzJSZWdUbXAgPSAodTMyTG9vcCA8PCAxNik7CisgICAgICAgIHUzMlJlZyB8PSB1MzJSZWdUbXA7ICAgIC8qIHNldHVwIFNEQ1JfQkxLQ05UICovCisKKyAgICAgICAgaWYodTMySXNTZW5kQ21kID09ICh1aW50MzJfdClGQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgc2RoLT5DVEwgPSB1MzJSZWcgfCAoMThVTCA8PCA4KSB8IChTREhfQ1RMX0NPRU5fTXNrIHwgU0RIX0NUTF9SSUVOX01zayB8IFNESF9DVExfRElFTl9Nc2spOworICAgICAgICAgICAgdTMySXNTZW5kQ21kID0gKHVpbnQzMl90KVRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzZGgtPkNUTCA9IHUzMlJlZyB8IFNESF9DVExfRElFTl9Nc2s7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSghZ191OFNERGF0YVJlYWR5RmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYocFNELT5Jc0NhcmRJbnNlcnQgPT0gKHVpbnQ4X3QpRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNESF9OT19TRF9DQVJEOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoIShzZGgtPklOVFNUUyAmIFNESF9JTlRTVFNfQ1JDN19Nc2spKSAgICAgLyogY2hlY2sgQ1JDNyAqLworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU0RIX0NSQzdfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBpZighKHNkaC0+SU5UU1RTICYgU0RIX0lOVFNUU19DUkMxNl9Nc2spKSAgICAgLyogY2hlY2sgQ1JDMTYgKi8KKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNESF9DUkMxNl9FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKFNESF9TRENtZEFuZFJzcChzZGgsIDEyVUwsIDBVTCwgMFVMKSkgICAgIC8qIHN0b3AgY29tbWFuZCAqLworICAgIHsKKyAgICAgICAgcmV0dXJuIFNESF9DUkM3X0VSUk9SOworICAgIH0KKyAgICBTREhfQ2hlY2tSQihzZGgpOworCisgICAgU0RIX1NEQ29tbWFuZChzZGgsIDdVTCwgMFVMKTsKKyAgICBzZGgtPkNUTCB8PSBTREhfQ1RMX0NMSzhPRU5fTXNrOworICAgIHdoaWxlKHNkaC0+Q1RMICYgU0RIX0NUTF9DTEs4T0VOX01zaykge30KKworICAgIHJldHVybiBTdWNjZXNzZnVsOworfQorCisvKioKKyAqICBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gdXNlIHRvIHdyaXRlIGRhdGEgdG8gU0QgY2FyZC4KKyAqCisgKiAgQHBhcmFtW2luXSAgICBzZGggICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU0RIIG1vZHVsZS4KKyAqICBAcGFyYW1baW5dICAgIHB1OEJ1ZkFkZHIgICAgVGhlIGJ1ZmZlciB0byBzZW5kIHRoZSBkYXRhIHRvIFNEIGNhcmQuCisgKiAgQHBhcmFtW2luXSAgICB1MzJTdGFydFNlYyAgIFRoZSBzdGFydCB3cml0ZSBzZWN0b3IgYWRkcmVzcy4KKyAqICBAcGFyYW1baW5dICAgIHUzMlNlY0NvdW50ICAgVGhlIHRoZSB3cml0ZSBzZWN0b3IgbnVtYmVyIG9mIGRhdGEuCisgKgorICogIEByZXR1cm4gICBccmVmIFNESF9TRUxFQ1RfRVJST1IgOiB1MzJTZWNDb3VudCBpcyB6ZXJvLiBcbgorICogICAgICAgICAgICBccmVmIFNESF9OT19TRF9DQVJEIDogU0QgY2FyZCBiZSByZW1vdmVkLiBcbgorICogICAgICAgICAgICBccmVmIFNESF9DUkNfRVJST1IgOiBDUkMgZXJyb3IgaGFwcGVuLiBcbgorICogICAgICAgICAgICBccmVmIFNESF9DUkM3X0VSUk9SIDogQ1JDNyBlcnJvciBoYXBwZW4uIFxuCisgKiAgICAgICAgICAgIFxyZWYgU3VjY2Vzc2Z1bCA6IFdyaXRlIGRhdGEgdG8gU0QgY2FyZCBzdWNjZXNzLgorICovCit1aW50MzJfdCBTREhfV3JpdGUoU0RIX1QgKnNkaCwgdWludDhfdCAqcHU4QnVmQWRkciwgdWludDMyX3QgdTMyU3RhcnRTZWMsIHVpbnQzMl90IHUzMlNlY0NvdW50KQoreworICAgIHVpbnQzMl90IHZvbGF0aWxlIHUzMklzU2VuZENtZCA9ICh1aW50MzJfdClGQUxTRTsKKyAgICB1aW50MzJfdCB2b2xhdGlsZSB1MzJSZWc7CisgICAgdWludDMyX3Qgdm9sYXRpbGUgdTMyTG9vcCwgdTMyU3RhdHVzOworCisgICAgU0RIX0lORk9fVCAqcFNEOworCisgICAgLyogTTIzNTEgaXMgb25seSBzdXBwb3J0IFNESDAgKi8KKyAgICBwU0QgPSAmU0QwOworCisgICAgLyogLS0tIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KKyAgICBpZih1MzJTZWNDb3VudCA9PSAwVUwpCisgICAgeworICAgICAgICByZXR1cm4gU0RIX1NFTEVDVF9FUlJPUjsKKyAgICB9CisKKyAgICBpZigodTMyU3RhdHVzID0gU0RIX1NEQ21kQW5kUnNwKHNkaCwgN1VMLCBwU0QtPlJDQSwgMFVMKSkgIT0gU3VjY2Vzc2Z1bCkKKyAgICB7CisgICAgICAgIHJldHVybiB1MzJTdGF0dXM7CisgICAgfQorCisgICAgU0RIX0NoZWNrUkIoc2RoKTsKKworICAgIC8qIEFjY29yZGluZyB0byBTRCBTcGVjIHYyLjAsIHRoZSB3cml0ZSBDTUQgYmxvY2sgc2l6ZSBNVVNUIGJlIDUxMiwgYW5kIHRoZSBzdGFydCBhZGRyZXNzIE1VU1QgYmUgNTEyKm4uICovCisgICAgc2RoLT5CTEVOID0gU0RIX0JMT0NLX1NJWkUgLSAxVUw7ICAgICAgICAgICAvKiBzZXQgdGhlIGJsb2NrIHNpemUgKi8KKworICAgIGlmKChwU0QtPkNhcmRUeXBlID09IFNESF9UWVBFX1NEX0hJR0gpIHx8IChwU0QtPkNhcmRUeXBlID09IFNESF9UWVBFX0VNTUMpKQorICAgIHsKKyAgICAgICAgc2RoLT5DTURBUkcgPSB1MzJTdGFydFNlYzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2RoLT5DTURBUkcgPSB1MzJTdGFydFNlYyAqIFNESF9CTE9DS19TSVpFOyAgLyogc2V0IHN0YXJ0IGFkZHJlc3MgZm9yIFNEIENNRCAqLworICAgIH0KKworICAgIHNkaC0+RE1BU0EgPSAodWludDMyX3QpcHU4QnVmQWRkcjsKKyAgICB1MzJMb29wID0gdTMyU2VjQ291bnQgLyAyNTVVTDsgICAvKiB0aGUgbWF4aW11bSBibG9jayBjb3VudCBpcyAweEZGPTI1NSBmb3IgcmVnaXN0ZXIgU0RDUltCTEtfQ05UXSAqLworICAgIHdoaWxlKHUzMkxvb3AgPiAwVUwpCisgICAgeworICAgICAgICBnX3U4U0REYXRhUmVhZHlGbGFnID0gKHVpbnQ4X3QpRkFMU0U7CisgICAgICAgIHUzMlJlZyA9IHNkaC0+Q1RMICYgMHhmZjAwYzA4MFVMOworICAgICAgICB1MzJSZWcgPSB1MzJSZWcgfCAweGZmMDAwMFVMOyAgIC8qIHNldCBCTEtfQ05UIHRvIDB4RkY9MjU1ICovCisgICAgICAgIGlmKCF1MzJJc1NlbmRDbWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNkaC0+Q1RMID0gdTMyUmVnIHwgKDI1VUwgPDwgOCkgfCAoU0RIX0NUTF9DT0VOX01zayB8IFNESF9DVExfUklFTl9Nc2sgfCBTREhfQ1RMX0RPRU5fTXNrKTsKKyAgICAgICAgICAgIHUzMklzU2VuZENtZCA9ICh1aW50MzJfdClUUlVFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc2RoLT5DVEwgPSB1MzJSZWcgfCBTREhfQ1RMX0RPRU5fTXNrOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUoIWdfdThTRERhdGFSZWFkeUZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHBTRC0+SXNDYXJkSW5zZXJ0ID09ICh1aW50OF90KUZBTFNFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBTREhfTk9fU0RfQ0FSRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKChzZGgtPklOVFNUUyAmIFNESF9JTlRTVFNfQ1JDSUZfTXNrKSAhPSAwVUwpICAgICAgLyogY2hlY2sgQ1JDICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHNkaC0+SU5UU1RTID0gU0RIX0lOVFNUU19DUkNJRl9Nc2s7CisgICAgICAgICAgICByZXR1cm4gU0RIX0NSQ19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICB1MzJMb29wLS07CisgICAgfQorCisgICAgdTMyTG9vcCA9IHUzMlNlY0NvdW50ICUgMjU1VUw7CisgICAgaWYodTMyTG9vcCAhPSAwVUwpCisgICAgeworICAgICAgICB1aW50MzJfdCB1MzJSZWdUbXA7CisgICAgICAgIGdfdThTRERhdGFSZWFkeUZsYWcgPSAodWludDhfdClGQUxTRTsKKyAgICAgICAgdTMyUmVnVG1wID0gKHUzMkxvb3AgPDwgMTYpOworICAgICAgICB1MzJSZWcgPSAoc2RoLT5DVEwgJiAweGZmMDBjMDgwVUwpIHwgdTMyUmVnVG1wOworICAgICAgICBpZighdTMySXNTZW5kQ21kKQorICAgICAgICB7CisgICAgICAgICAgICBzZGgtPkNUTCA9IHUzMlJlZyB8ICgyNVVMIDw8IDgpIHwgKFNESF9DVExfQ09FTl9Nc2sgfCBTREhfQ1RMX1JJRU5fTXNrIHwgU0RIX0NUTF9ET0VOX01zayk7CisgICAgICAgICAgICB1MzJJc1NlbmRDbWQgPSAodWludDMyX3QpVFJVRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNkaC0+Q1RMID0gdTMyUmVnIHwgU0RIX0NUTF9ET0VOX01zazsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlKCFnX3U4U0REYXRhUmVhZHlGbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBpZihwU0QtPklzQ2FyZEluc2VydCA9PSAodWludDhfdClGQUxTRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gU0RIX05PX1NEX0NBUkQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZigoc2RoLT5JTlRTVFMgJiBTREhfSU5UU1RTX0NSQ0lGX01zaykgIT0gMFVMKSAgICAgIC8qIGNoZWNrIENSQyAqLworICAgICAgICB7CisgICAgICAgICAgICBzZGgtPklOVFNUUyA9IFNESF9JTlRTVFNfQ1JDSUZfTXNrOworICAgICAgICAgICAgcmV0dXJuIFNESF9DUkNfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisgICAgc2RoLT5JTlRTVFMgPSBTREhfSU5UU1RTX0NSQ0lGX01zazsKKworICAgIGlmKFNESF9TRENtZEFuZFJzcChzZGgsIDEyVUwsIDBVTCwgMFVMKSkgICAgICAgLyogc3RvcCBjb21tYW5kICovCisgICAgeworICAgICAgICByZXR1cm4gU0RIX0NSQzdfRVJST1I7CisgICAgfQorICAgIFNESF9DaGVja1JCKHNkaCk7CisKKyAgICBTREhfU0RDb21tYW5kKHNkaCwgN1VMLCAwVUwpOworICAgIHNkaC0+Q1RMIHw9IFNESF9DVExfQ0xLOE9FTl9Nc2s7CisgICAgd2hpbGUoc2RoLT5DVEwgJiBTREhfQ1RMX0NMSzhPRU5fTXNrKSB7fQorCisgICAgcmV0dXJuIFN1Y2Nlc3NmdWw7Cit9CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTREhfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU0RIX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zcGkuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NjZiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zcGkuYwpAQCAtMCwwICsxLDE1OTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzcGkuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFNQSSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIk51TWljcm8uaCIKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTUElfRHJpdmVyIFNQSSBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIFNQSV9FWFBPUlRFRF9GVU5DVElPTlMgU1BJIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworc3RhdGljIHVpbnQzMl90IFNQSUkyU19HZXRTb3VyY2VDbG9ja0ZyZXEoU1BJX1QgKmkycyk7CisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBtYWtlIFNQSSBtb2R1bGUgYmUgcmVhZHkgdG8gdHJhbnNmZXIuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXN0ZXJTbGF2ZSBEZWNpZGVzIHRoZSBTUEkgbW9kdWxlIGlzIG9wZXJhdGluZyBpbiBtYXN0ZXIgbW9kZSBvciBpbiBzbGF2ZSBtb2RlLiAoU1BJX1NMQVZFLCBTUElfTUFTVEVSKQorICAqIEBwYXJhbVtpbl0gIHUzMlNQSU1vZGUgRGVjaWRlcyB0aGUgdHJhbnNmZXIgdGltaW5nLiAoU1BJX01PREVfMCwgU1BJX01PREVfMSwgU1BJX01PREVfMiwgU1BJX01PREVfMykKKyAgKiBAcGFyYW1baW5dICB1MzJEYXRhV2lkdGggRGVjaWRlcyB0aGUgZGF0YSB3aWR0aCBvZiBhIFNQSSB0cmFuc2FjdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1MzJCdXNDbG9jayBUaGUgZXhwZWN0ZWQgZnJlcXVlbmN5IG9mIFNQSSBidXMgY2xvY2sgaW4gSHouCisgICogQHJldHVybiBBY3R1YWwgZnJlcXVlbmN5IG9mIFNQSSBwZXJpcGhlcmFsIGNsb2NrLgorICAqIEBkZXRhaWxzIEJ5IGRlZmF1bHQsIHRoZSBTUEkgdHJhbnNmZXIgc2VxdWVuY2UgaXMgTVNCIGZpcnN0LCB0aGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpcyBhY3RpdmUgbG93IGFuZCB0aGUgYXV0b21hdGljCisgICogICAgICAgICAgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uIGlzIGRpc2FibGVkLgorICAqICAgICAgICAgIEluIFNsYXZlIG1vZGUsIHRoZSB1MzJCdXNDbG9jayBzaGFsbCBiZSBOVUxMIGFuZCB0aGUgU1BJIGNsb2NrIGRpdmlkZXIgc2V0dGluZyB3aWxsIGJlIDAuCisgICogICAgICAgICAgVGhlIGFjdHVhbCBjbG9jayByYXRlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdGFyZ2V0IFNQSSBjbG9jayByYXRlLgorICAqICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgU1BJIHNvdXJjZSBjbG9jayByYXRlIGlzIDEyIE1IeiBhbmQgdGhlIHRhcmdldCBTUEkgYnVzIGNsb2NrIHJhdGUgaXMgNyBNSHosIHRoZQorICAqICAgICAgICAgIGFjdHVhbCBTUEkgY2xvY2sgcmF0ZSB3aWxsIGJlIDZNSHouCisgICAgSWYgdTMyQnVzQ2xvY2sgPSAwLCBESVZJREVSIHNldHRpbmcgd2lsbCBiZSBzZXQgdG8gdGhlIG1heGltdW0gdmFsdWUuCisgICAgSWYgdTMyQnVzQ2xvY2sgPj0gc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBmb3IgU2VjdXJlLCBTUEkgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2Ugd2lsbCBiZSBzZXQgdG8gQVBCIGNsb2NrIGFuZCBESVZJREVSIHdpbGwgYmUgc2V0IHRvIDAuCisgICAgSWYgdTMyQnVzQ2xvY2sgPj0gc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBmb3IgTm9uLVNlY3VyZSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBkbyBhbnl0aGluZyB0byBhdm9pZCB0aGUgc2l0dWF0aW9uIHRoYXQgdGhlIGZyZXF1ZW5jeSBvZgorICAqICAgICAgICAgU1BJIGJ1cyBjbG9jayBjYW5ub3QgYmUgZmFzdGVyIHRoYW4gdGhlIHN5c3RlbSBjbG9jayByYXRlLiBVc2VyIHNob3VsZCBzZXQgdXAgY2FyZWZ1bGx5LgorICAgIElmIHUzMkJ1c0Nsb2NrID49IFNQSSBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSwgRElWSURFUiB3aWxsIGJlIHNldCB0byAwLgorICAgIEluIHNsYXZlIG1vZGUgZm9yIFNlY3VyZSwgdGhlIFNQSSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgd2lsbCBlcXVhbCB0byBBUEIgY2xvY2sgcmF0ZS4KKyAgICBJbiBzbGF2ZSBtb2RlIGZvciBOb24tU2VjdXJlLCB0aGUgU1BJIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSB3aWxsIGVxdWFsIHRvIHRoZSBjbG9jayByYXRlIHNldCBpbiBzZWN1cmUgbW9kZS4KKyAgKi8KK3VpbnQzMl90IFNQSV9PcGVuKFNQSV9UICpzcGksCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJNYXN0ZXJTbGF2ZSwKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMlNQSU1vZGUsCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJEYXRhV2lkdGgsCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50MzJfdCB1MzJDbGtTcmMgPSAwVUwsIHUzMkRpdiwgdTMySENMS0ZyZXEsIHUzMlBDTEswRnJlcSwgdTMyUENMSzFGcmVxLCB1MzJSZXRWYWx1ZSA9IDBVTDsKKworICAgIC8qIERpc2FibGUgSTJTIG1vZGUgKi8KKyAgICBzcGktPkkyU0NUTCAmPSB+U1BJX0kyU0NUTF9JMlNFTl9Nc2s7CisKKyAgICBpZih1MzJEYXRhV2lkdGggPT0gMzJVTCkKKyAgICB7CisgICAgICAgIHUzMkRhdGFXaWR0aCA9IDBVTDsKKyAgICB9CisKKyAgICAvKiBHZXQgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIHUzMkhDTEtGcmVxID0gQ0xLX0dldEhDTEtGcmVxKCk7CisgICAgLyogR2V0IEFQQjAgY2xvY2sgZnJlcXVlbmN5ICovCisgICAgdTMyUENMSzBGcmVxID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIC8qIEdldCBBUEIxIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIHUzMlBDTEsxRnJlcSA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKworICAgIGlmKHUzMk1hc3RlclNsYXZlID09IFNQSV9NQVNURVIpCisgICAgeworICAgICAgICAvKiBEZWZhdWx0IHNldHRpbmc6IHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaXMgYWN0aXZlIGxvdzsgZGlzYWJsZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uLiAqLworICAgICAgICBzcGktPlNTQ1RMID0gU1BJX1NTX0FDVElWRV9MT1c7CisKKyAgICAgICAgLyogRGVmYXVsdCBzZXR0aW5nOiBNU0IgZmlyc3QsIGRpc2FibGUgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQsIFNQX0NZQ0xFID0gMC4gKi8KKyAgICAgICAgc3BpLT5DVEwgPSB1MzJNYXN0ZXJTbGF2ZSB8ICh1MzJEYXRhV2lkdGggPDwgU1BJX0NUTF9EV0lEVEhfUG9zKSB8ICh1MzJTUElNb2RlKSB8IFNQSV9DVExfU1BJRU5fTXNrOworCisgICAgICAgIGlmKHUzMkJ1c0Nsb2NrID49IHUzMkhDTEtGcmVxKQorICAgICAgICB7CisgICAgICAgICAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2VsZWN0IFBDTEsgYXMgdGhlIGNsb2NrIHNvdXJjZSBvZiBTUEkgKi8KKyAgICAgICAgICAgICAgICBpZigoc3BpID09IFNQSTApIHx8IChzcGkgPT0gU1BJMF9OUykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9TUEkwU0VMX01zaykpIHwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9QQ0xLMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoc3BpID09IFNQSTEpIHx8IChzcGkgPT0gU1BJMV9OUykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9TUEkxU0VMX01zaykpIHwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9QQ0xLMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoc3BpID09IFNQSTIpIHx8IChzcGkgPT0gU1BJMl9OUykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9TUEkyU0VMX01zaykpIHwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9QQ0xLMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJM1NFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTNTRUxfUENMSzA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgY2xvY2sgc291cmNlIG9mIFNQSSAqLworICAgICAgICBpZigoc3BpID09IFNQSTApIHx8IChzcGkgPT0gU1BJMF9OUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX0hYVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9QTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BDTEsxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQQ0xLMUZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEsxICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkxKSB8fCAoc3BpID09IFNQSTFfTlMpKQorICAgICAgICB7CisgICAgICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9IWFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfUExMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9QQ0xLMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChzcGkgPT0gU1BJMikgfHwgKHNwaSA9PSBTUEkyX05TKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfSFhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfUENMSzEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEsxRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzEgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9IWFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfUExMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9QQ0xLMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKHUzMkJ1c0Nsb2NrID49IHUzMkhDTEtGcmVxKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgRElWSURFUiA9IDAgKi8KKyAgICAgICAgICAgIHNwaS0+Q0xLRElWID0gMFVMOworICAgICAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyQ2xrU3JjOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYodTMyQnVzQ2xvY2sgPj0gdTMyQ2xrU3JjKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgRElWSURFUiA9IDAgKi8KKyAgICAgICAgICAgIHNwaS0+Q0xLRElWID0gMFVMOworICAgICAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyQ2xrU3JjOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYodTMyQnVzQ2xvY2sgPT0gMFVMKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgRElWSURFUiB0byB0aGUgbWF4aW11bSB2YWx1ZSAweDFGRi4gZl9zcGkgPSBmX3NwaV9jbGtfc3JjIC8gKERJVklERVIgKyAxKSAqLworICAgICAgICAgICAgc3BpLT5DTEtESVYgfD0gU1BJX0NMS0RJVl9ESVZJREVSX01zazsKKyAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9ICh1MzJDbGtTcmMgLyAoMHgxRkZVTCArIDFVTCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRGl2ID0gKCgodTMyQ2xrU3JjICogMTBVTCkgLyB1MzJCdXNDbG9jayArIDVVTCkgLyAxMFVMKSAtIDFVTDsgLyogUm91bmQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciAqLworICAgICAgICAgICAgaWYodTMyRGl2ID4gMHgxRkZVTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJEaXYgPSAweDFGRlVMOworICAgICAgICAgICAgICAgIHNwaS0+Q0xLRElWIHw9IFNQSV9DTEtESVZfRElWSURFUl9Nc2s7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9ICh1MzJDbGtTcmMgLyAoMHgxRkZVTCArIDFVTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNwaS0+Q0xLRElWID0gKHNwaS0+Q0xLRElWICYgKH5TUElfQ0xLRElWX0RJVklERVJfTXNrKSkgfCAodTMyRGl2IDw8IFNQSV9DTEtESVZfRElWSURFUl9Qb3MpOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyQ2xrU3JjIC8gKHUzMkRpdiArIDFVTCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgICAgIC8qIEZvciBzbGF2ZSBtb2RlLCBmb3JjZSB0aGUgU1BJIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSB0byBlcXVhbCBBUEIgY2xvY2sgcmF0ZS4gKi8KKyAgICB7CisgICAgICAgIC8qIERlZmF1bHQgc2V0dGluZzogc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpcyBsb3cgbGV2ZWwgYWN0aXZlLiAqLworICAgICAgICBzcGktPlNTQ1RMID0gU1BJX1NTX0FDVElWRV9MT1c7CisKKyAgICAgICAgLyogRGVmYXVsdCBzZXR0aW5nOiBNU0IgZmlyc3QsIGRpc2FibGUgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQsIFNQX0NZQ0xFID0gMC4gKi8KKyAgICAgICAgc3BpLT5DVEwgPSB1MzJNYXN0ZXJTbGF2ZSB8ICh1MzJEYXRhV2lkdGggPDwgU1BJX0NUTF9EV0lEVEhfUG9zKSB8ICh1MzJTUElNb2RlKSB8IFNQSV9DVExfU1BJRU5fTXNrOworCisgICAgICAgIC8qIFNldCBESVZJREVSID0gMCAqLworICAgICAgICBzcGktPkNMS0RJViA9IDBVTDsKKworICAgICAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNlbGVjdCBQQ0xLIGFzIHRoZSBjbG9jayBzb3VyY2Ugb2YgU1BJICovCisgICAgICAgICAgICBpZigoc3BpID09IFNQSTApIHx8IChzcGkgPT0gU1BJMF9OUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMFNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTBTRUxfUENMSzE7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIHNsYXZlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyUENMSzFGcmVxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoc3BpID09IFNQSTEpIHx8IChzcGkgPT0gU1BJMV9OUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMVNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTFTRUxfUENMSzA7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIHNsYXZlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyUENMSzBGcmVxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoc3BpID09IFNQSTIpIHx8IChzcGkgPT0gU1BJMl9OUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMlNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTJTRUxfUENMSzE7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIHNsYXZlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyUENMSzFGcmVxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTNTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BDTEswOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBzbGF2ZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEswRnJlcTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoZWNrIGNsb2NrIHNvdXJjZSBvZiBTUEkgKi8KKyAgICAgICAgICAgIGlmKChzcGkgPT0gU1BJMCkgfHwgKHNwaSA9PSBTUEkwX05TKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9IWFQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfUExMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9QQ0xLMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyUENMSzFGcmVxOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzEgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoc3BpID09IFNQSTEpIHx8IChzcGkgPT0gU1BJMV9OUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfSFhUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfUENMSzApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEswRnJlcTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkyKSB8fCAoc3BpID09IFNQSTJfTlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX0hYVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9QTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BDTEsxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJQQ0xLMUZyZXE7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfSFhUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfUENMSzApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEswRnJlcTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB1MzJSZXRWYWx1ZTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIFNQSSBjb250cm9sbGVyLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgQ2xlYXIgU1BJRU4gYml0IG9mIFNQSV9DVEwgcmVnaXN0ZXIgdG8gZGlzYWJsZSBTUEkgdHJhbnNmZXIgY29udHJvbC4KKyAgKi8KK3ZvaWQgU1BJX0Nsb3NlKFNQSV9UICpzcGkpCit7CisgICAgc3BpLT5DVEwgJj0gflNQSV9DVExfU1BJRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIFJYIEZJRk8gYnVmZmVyLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIFNQSSBSWCBGSUZPIGJ1ZmZlci4gVGhlIFJYRU1QVFkgKFNQSV9TVEFUVVNbOF0pIHdpbGwgYmUgc2V0IHRvIDEuCisgICovCit2b2lkIFNQSV9DbGVhclJ4RklGTyhTUElfVCAqc3BpKQoreworICAgIHNwaS0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9SWEZCQ0xSX01zazsKK30KKworLyoqCisgICogQGJyaWVmICBDbGVhciBUWCBGSUZPIGJ1ZmZlci4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBTUEkgVFggRklGTyBidWZmZXIuIFRoZSBUWEVNUFRZIChTUElfU1RBVFVTWzE2XSkgd2lsbCBiZSBzZXQgdG8gMS4KKyAgVGhlIFRYIHNoaWZ0IHJlZ2lzdGVyIHdpbGwgbm90IGJlIGNsZWFyZWQuCisgICovCit2b2lkIFNQSV9DbGVhclR4RklGTyhTUElfVCAqc3BpKQoreworICAgIHNwaS0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9UWEZCQ0xSX01zazsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIHRoZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0aW9uIGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FibGUgdGhlIGF1dG9tYXRpYyBzbGF2ZSBzZWxlY3Rpb24gZnVuY3Rpb24gYW5kIHNldCBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIHRvIGluYWN0aXZlIHN0YXRlLgorICAqLwordm9pZCBTUElfRGlzYWJsZUF1dG9TUyhTUElfVCAqc3BpKQoreworICAgIHNwaS0+U1NDVEwgJj0gfihTUElfU1NDVExfQVVUT1NTX01zayB8IFNQSV9TU0NUTF9TU19Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlNTUGluTWFzayBTcGVjaWZpZXMgc2xhdmUgc2VsZWN0aW9uIHBpbnMuIChTUElfU1MpCisgICogQHBhcmFtW2luXSAgdTMyQWN0aXZlTGV2ZWwgU3BlY2lmaWVzIHRoZSBhY3RpdmUgbGV2ZWwgb2Ygc2xhdmUgc2VsZWN0aW9uIHNpZ25hbC4gKFNQSV9TU19BQ1RJVkVfSElHSCwgU1BJX1NTX0FDVElWRV9MT1cpCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSB0aGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdGlvbiBmdW5jdGlvbi4gT25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuCisgICogICAgICAgICAgVGhlIHNsYXZlIHNlbGVjdGlvbiBwaW4gYW5kIHRoZSBhY3RpdmUgbGV2ZWwgd2lsbCBiZSBzZXQgaW4gdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgU1BJX0VuYWJsZUF1dG9TUyhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJTU1Bpbk1hc2ssIHVpbnQzMl90IHUzMkFjdGl2ZUxldmVsKQoreworICAgIHNwaS0+U1NDVEwgPSAoc3BpLT5TU0NUTCAmICh+KFNQSV9TU0NUTF9BVVRPU1NfTXNrIHwgU1BJX1NTQ1RMX1NTQUNUUE9MX01zayB8IFNQSV9TU0NUTF9TU19Nc2spKSkgfCAodTMyU1NQaW5NYXNrIHwgdTMyQWN0aXZlTGV2ZWwgfCBTUElfU1NDVExfQVVUT1NTX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0IHRoZSBTUEkgYnVzIGNsb2NrLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyQnVzQ2xvY2sgVGhlIGV4cGVjdGVkIGZyZXF1ZW5jeSBvZiBTUEkgYnVzIGNsb2NrIGluIEh6LgorICAqIEByZXR1cm4gQWN0dWFsIGZyZXF1ZW5jeSBvZiBTUEkgYnVzIGNsb2NrLgorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaW4gTWFzdGVyIG1vZGUuIFRoZSBhY3R1YWwgY2xvY2sgcmF0ZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIHRhcmdldCBTUEkgYnVzIGNsb2NrIHJhdGUuCisgICogICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBTUEkgc291cmNlIGNsb2NrIHJhdGUgaXMgMTIgTUh6IGFuZCB0aGUgdGFyZ2V0IFNQSSBidXMgY2xvY2sgcmF0ZSBpcyA3IE1IeiwgdGhlIGFjdHVhbCBTUEkgYnVzIGNsb2NrCisgICogICAgICAgICAgcmF0ZSB3aWxsIGJlIDYgTUh6LgorICAgIElmIHUzMkJ1c0Nsb2NrID0gMCwgRElWSURFUiBzZXR0aW5nIHdpbGwgYmUgc2V0IHRvIHRoZSBtYXhpbXVtIHZhbHVlLgorICAgIElmIHUzMkJ1c0Nsb2NrID49IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZm9yIFNlY3VyZSwgU1BJIHBlcmlwaGVyYWwgY2xvY2sgc291cmNlIHdpbGwgYmUgc2V0IHRvIEFQQiBjbG9jayBhbmQgRElWSURFUiB3aWxsIGJlIHNldCB0byAwLgorICAgIElmIHUzMkJ1c0Nsb2NrID49IHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgZm9yIE5vbi1TZWN1cmUsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZG8gYW55dGhpbmcgdG8gYXZvaWQgdGhlIHNpdHVhdGlvbiB0aGF0IHRoZSBmcmVxdWVuY3kgb2YKKyAgKiAgICAgICAgIFNQSSBidXMgY2xvY2sgY2Fubm90IGJlIGZhc3RlciB0aGFuIHRoZSBzeXN0ZW0gY2xvY2sgcmF0ZS4gVXNlciBzaG91bGQgc2V0IHVwIGNhcmVmdWxseS4KKyAgICBJZiB1MzJCdXNDbG9jayA+PSBTUEkgcGVyaXBoZXJhbCBjbG9jayBzb3VyY2UsIERJVklERVIgd2lsbCBiZSBzZXQgdG8gMC4KKyAgKi8KK3VpbnQzMl90IFNQSV9TZXRCdXNDbG9jayhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJCdXNDbG9jaykKK3sKKyAgICB1aW50MzJfdCB1MzJDbGtTcmMsIHUzMkhDTEtGcmVxOworICAgIHVpbnQzMl90IHUzMkRpdiwgdTMyUmV0VmFsdWU7CisKKyAgICAvKiBHZXQgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIHUzMkhDTEtGcmVxID0gQ0xLX0dldEhDTEtGcmVxKCk7CisKKyAgICBpZih1MzJCdXNDbG9jayA+PSB1MzJIQ0xLRnJlcSkKKyAgICB7CisgICAgICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2VsZWN0IFBDTEsgYXMgdGhlIGNsb2NrIHNvdXJjZSBvZiBTUEkgKi8KKyAgICAgICAgICAgIGlmKChzcGkgPT0gU1BJMCkgfHwgKHNwaSA9PSBTUEkwX05TKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9TUEkwU0VMX01zaykpIHwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9QQ0xLMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkxKSB8fCAoc3BpID09IFNQSTFfTlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTFTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BDTEswOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigoc3BpID09IFNQSTIpIHx8IChzcGkgPT0gU1BJMl9OUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMlNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTJTRUxfUENMSzE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJM1NFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTNTRUxfUENMSzA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDaGVjayBjbG9jayBzb3VyY2Ugb2YgU1BJICovCisgICAgaWYoKHNwaSA9PSBTUEkwKSB8fCAoc3BpID09IFNQSTBfTlMpKQorICAgIHsKKyAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfSFhUKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BDTEsxKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzFGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkxKSB8fCAoc3BpID09IFNQSTFfTlMpKQorICAgIHsKKyAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfSFhUKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BDTEswKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoKHNwaSA9PSBTUEkyKSB8fCAoc3BpID09IFNQSTJfTlMpKQorICAgIHsKKyAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfSFhUKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BDTEsxKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzFGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX0hYVCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BMTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9QQ0xLMCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKHUzMkJ1c0Nsb2NrID49IHUzMkhDTEtGcmVxKQorICAgIHsKKyAgICAgICAgLyogU2V0IERJVklERVIgPSAwICovCisgICAgICAgIHNwaS0+Q0xLRElWID0gMFVMOworICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMkNsa1NyYzsKKyAgICB9CisgICAgZWxzZSBpZih1MzJCdXNDbG9jayA+PSB1MzJDbGtTcmMpCisgICAgeworICAgICAgICAvKiBTZXQgRElWSURFUiA9IDAgKi8KKyAgICAgICAgc3BpLT5DTEtESVYgPSAwVUw7CisgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgIHUzMlJldFZhbHVlID0gdTMyQ2xrU3JjOworICAgIH0KKyAgICBlbHNlIGlmKHUzMkJ1c0Nsb2NrID09IDBVTCkKKyAgICB7CisgICAgICAgIC8qIFNldCBESVZJREVSIHRvIHRoZSBtYXhpbXVtIHZhbHVlIDB4MUZGLiBmX3NwaSA9IGZfc3BpX2Nsa19zcmMgLyAoRElWSURFUiArIDEpICovCisgICAgICAgIHNwaS0+Q0xLRElWIHw9IFNQSV9DTEtESVZfRElWSURFUl9Nc2s7CisgICAgICAgIC8qIFJldHVybiBtYXN0ZXIgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgIHUzMlJldFZhbHVlID0gKHUzMkNsa1NyYyAvICgweDFGRlVMICsgMVVMKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMkRpdiA9ICgoKHUzMkNsa1NyYyAqIDEwVUwpIC8gdTMyQnVzQ2xvY2sgKyA1VUwpIC8gMTBVTCkgLSAxVUw7IC8qIFJvdW5kIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgKi8KKyAgICAgICAgaWYodTMyRGl2ID4gMHgxRkZVTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRGl2ID0gMHgxRkZVTDsKKyAgICAgICAgICAgIHNwaS0+Q0xLRElWIHw9IFNQSV9DTEtESVZfRElWSURFUl9Nc2s7CisgICAgICAgICAgICAvKiBSZXR1cm4gbWFzdGVyIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSAodTMyQ2xrU3JjIC8gKDB4MUZGVUwgKyAxVUwpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNwaS0+Q0xLRElWID0gKHNwaS0+Q0xLRElWICYgKH5TUElfQ0xLRElWX0RJVklERVJfTXNrKSkgfCAodTMyRGl2IDw8IFNQSV9DTEtESVZfRElWSURFUl9Qb3MpOworICAgICAgICAgICAgLyogUmV0dXJuIG1hc3RlciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgIHUzMlJldFZhbHVlID0gKHUzMkNsa1NyYyAvICh1MzJEaXYgKyAxVUwpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB1MzJSZXRWYWx1ZTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgRklGTyB0aHJlc2hvbGQgc2V0dGluZy4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlR4VGhyZXNob2xkIERlY2lkZXMgdGhlIFRYIEZJRk8gdGhyZXNob2xkLiBJdCBjb3VsZCBiZSAwIH4gMy4gSWYgZGF0YSB3aWR0aCBpcyA4IH4gMTYgYml0cywgaXQgY291bGQgYmUgMCB+IDcuCisgICogQHBhcmFtW2luXSAgdTMyUnhUaHJlc2hvbGQgRGVjaWRlcyB0aGUgUlggRklGTyB0aHJlc2hvbGQuIEl0IGNvdWxkIGJlIDAgfiAzLiBJZiBkYXRhIHdpZHRoIGlzIDggfiAxNiBiaXRzLCBpdCBjb3VsZCBiZSAwIH4gNy4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBTZXQgVFggRklGTyB0aHJlc2hvbGQgYW5kIFJYIEZJRk8gdGhyZXNob2xkIGNvbmZpZ3VyYXRpb25zLgorICAqLwordm9pZCBTUElfU2V0RklGTyhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJUeFRocmVzaG9sZCwgdWludDMyX3QgdTMyUnhUaHJlc2hvbGQpCit7CisgICAgc3BpLT5GSUZPQ1RMID0gKHNwaS0+RklGT0NUTCAmIH4oU1BJX0ZJRk9DVExfVFhUSF9Nc2sgfCBTUElfRklGT0NUTF9SWFRIX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAodTMyVHhUaHJlc2hvbGQgPDwgU1BJX0ZJRk9DVExfVFhUSF9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAodTMyUnhUaHJlc2hvbGQgPDwgU1BJX0ZJRk9DVExfUlhUSF9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgYWN0dWFsIGZyZXF1ZW5jeSBvZiBTUEkgYnVzIGNsb2NrLiBPbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEByZXR1cm4gQWN0dWFsIFNQSSBidXMgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxjdWxhdGUgdGhlIGFjdHVhbCBTUEkgYnVzIGNsb2NrIHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBTUEl4U0VMIGFuZCBESVZJREVSIHNldHRpbmdzLiBPbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4KKyAgKi8KK3VpbnQzMl90IFNQSV9HZXRCdXNDbG9jayhTUElfVCAqc3BpKQoreworICAgIHVpbnQzMl90IHUzMkRpdjsKKyAgICB1aW50MzJfdCB1MzJDbGtTcmM7CisKKyAgICAvKiBHZXQgRElWSURFUiBzZXR0aW5nICovCisgICAgdTMyRGl2ID0gKHNwaS0+Q0xLRElWICYgU1BJX0NMS0RJVl9ESVZJREVSX01zaykgPj4gU1BJX0NMS0RJVl9ESVZJREVSX1BvczsKKworICAgIC8qIENoZWNrIGNsb2NrIHNvdXJjZSBvZiBTUEkgKi8KKyAgICBpZigoc3BpID09IFNQSTApIHx8IChzcGkgPT0gU1BJMF9OUykpCisgICAgeworICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9IWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9QTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfUENMSzEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQQ0xLMUZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEsxICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZigoc3BpID09IFNQSTEpIHx8IChzcGkgPT0gU1BJMV9OUykpCisgICAgeworICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9IWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9QTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfUENMSzApCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQQ0xLMEZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEswICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZigoc3BpID09IFNQSTIpIHx8IChzcGkgPT0gU1BJMl9OUykpCisgICAgeworICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9IWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9QTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfUENMSzEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkNsa1NyYyA9IENMS19HZXRQQ0xLMUZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEsxICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfSFhUKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BDTEswKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJDbGtTcmMgPSBDTEtfR2V0UENMSzBGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrU3JjID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyogUmV0dXJuIFNQSSBidXMgY2xvY2sgcmF0ZSAqLworICAgIHJldHVybiAodTMyQ2xrU3JjIC8gKHUzMkRpdiArIDFVTCkpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgICogICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBlbmFibGUgYml0LgorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfVU5JVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NTQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NMVlVSX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfU0xWQkVfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9UWFVGX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfRklGT19UWFRIX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfRklGT19SWFRIX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfRklGT19SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfRklGT19SWFRPX0lOVF9NQVNLCisgICoKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBFbmFibGUgU1BJIHJlbGF0ZWQgaW50ZXJydXB0cyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICovCit2b2lkIFNQSV9FbmFibGVJbnQoU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBFbmFibGUgdW5pdCB0cmFuc2ZlciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1VOSVRfSU5UX01BU0spID09IFNQSV9VTklUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5DVEwgfD0gU1BJX0NUTF9VTklUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TU0FDVF9JTlRfTUFTSykgPT0gU1BJX1NTQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TU0NUTCB8PSBTUElfU1NDVExfU1NBQ1RJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGluYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfU1NJTkFDVF9JTlRfTUFTSykgPT0gU1BJX1NTSU5BQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNTQ1RMIHw9IFNQSV9TU0NUTF9TU0lOQUlFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1NMVlVSX0lOVF9NQVNLKSA9PSBTUElfU0xWVVJfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNTQ1RMIHw9IFNQSV9TU0NUTF9TTFZVUklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1NMVkJFX0lOVF9NQVNLKSA9PSBTUElfU0xWQkVfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNTQ1RMIHw9IFNQSV9TU0NUTF9TTFZCRUlFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1RYVUZfSU5UX01BU0spID09IFNQSV9UWFVGX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5GSUZPQ1RMIHw9IFNQSV9GSUZPQ1RMX1RYVUZJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBUWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9GSUZPX1RYVEhfSU5UX01BU0spID09IFNQSV9GSUZPX1RYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfVFhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSykgPT0gU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9SWFRISUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSykgPT0gU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9SWE9WSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9GSUZPX1JYVE9fSU5UX01BU0spID09IFNQSV9GSUZPX1JYVE9fSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfUlhUT0lFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICAqICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgYml0LgorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZGlzYWJsZWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1VOSVRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NTSU5BQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TTFZVUl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NMVkJFX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfVFhVRl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhUT19JTlRfTUFTSworICAqCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgRGlzYWJsZSBTUEkgcmVsYXRlZCBpbnRlcnJ1cHRzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3ZvaWQgU1BJX0Rpc2FibGVJbnQoU1BJX1QgKnNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBEaXNhYmxlIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9VTklUX0lOVF9NQVNLKSA9PSBTUElfVU5JVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+Q1RMICY9IH5TUElfQ1RMX1VOSVRJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TU0FDVF9JTlRfTUFTSykgPT0gU1BJX1NTQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TU0NUTCAmPSB+U1BJX1NTQ1RMX1NTQUNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TU0lOQUNUX0lOVF9NQVNLKSA9PSBTUElfU1NJTkFDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+U1NDVEwgJj0gflNQSV9TU0NUTF9TU0lOQUlFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBzbGF2ZSBUWCB1bmRlciBydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TTFZVUl9JTlRfTUFTSykgPT0gU1BJX1NMVlVSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TU0NUTCAmPSB+U1BJX1NTQ1RMX1NMVlVSSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1NMVkJFX0lOVF9NQVNLKSA9PSBTUElfU0xWQkVfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNTQ1RMICY9IH5TUElfU1NDVExfU0xWQkVJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgVFggdW5kZXJmbG93IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfVFhVRl9JTlRfTUFTSykgPT0gU1BJX1RYVUZfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPkZJRk9DVEwgJj0gflNQSV9GSUZPQ1RMX1RYVUZJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgVFggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfRklGT19UWFRIX0lOVF9NQVNLKSA9PSBTUElfRklGT19UWFRIX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5GSUZPQ1RMICY9IH5TUElfRklGT0NUTF9UWFRISUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFJYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSykgPT0gU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+RklGT0NUTCAmPSB+U1BJX0ZJRk9DVExfUlhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCBvdmVycnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfRklGT19SWE9WX0lOVF9NQVNLKSA9PSBTUElfRklGT19SWE9WX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5GSUZPQ1RMICY9IH5TUElfRklGT0NUTF9SWE9WSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfRklGT19SWFRPX0lOVF9NQVNLKSA9PSBTUElfRklGT19SWFRPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5GSUZPQ1RMICY9IH5TUElfRklGT0NUTF9SWFRPSUVOX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbVtpbl0gIHNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFNQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgICogICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuCisgICogICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdCBmbGFncyB3aWxsIGJlIHJlYWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1VOSVRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NTSU5BQ1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TTFZVUl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NMVkJFX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfVFhVRl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX0ZJRk9fUlhUT19JTlRfTUFTSworICAqCisgICogQHJldHVybiBJbnRlcnJ1cHQgZmxhZ3Mgb2Ygc2VsZWN0ZWQgc291cmNlcy4KKyAgKiBAZGV0YWlscyBHZXQgU1BJIHJlbGF0ZWQgaW50ZXJydXB0IGZsYWdzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3VpbnQzMl90IFNQSV9HZXRJbnRGbGFnKFNQSV9UICpzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdWludDMyX3QgdTMySW50U3RhdHVzOworICAgIHVpbnQzMl90IHUzMkludEZsYWcgPSAwVUw7CisKKyAgICB1MzJJbnRTdGF0dXMgPSBzcGktPlNUQVRVUzsKKworICAgIC8qIENoZWNrIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9VTklUX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgU1BJX1NUQVRVU19VTklUSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gU1BJX1VOSVRfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9TU0FDVF9JTlRfTUFTSykgJiYgKHUzMkludFN0YXR1cyAmIFNQSV9TVEFUVVNfU1NBQ1RJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBTUElfU1NBQ1RfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1NTSU5BQ1RfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBTUElfU1RBVFVTX1NTSU5BSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gU1BJX1NTSU5BQ1RfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgc2xhdmUgVFggdW5kZXIgcnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfU0xWVVJfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBTUElfU1RBVFVTX1NMVlVSSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gU1BJX1NMVlVSX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1NMVkJFX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgU1BJX1NUQVRVU19TTFZCRUlGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFNQSV9TTFZCRV9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBzbGF2ZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9UWFVGX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgU1BJX1NUQVRVU19UWFVGSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gU1BJX1RYVUZfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVFggdGhyZXNob2xkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfRklGT19UWFRIX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgU1BJX1NUQVRVU19UWFRISUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gU1BJX0ZJRk9fVFhUSF9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9GSUZPX1JYVEhfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBTUElfU1RBVFVTX1JYVEhJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBTUElfRklGT19SWFRIX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9GSUZPX1JYT1ZfSU5UX01BU0spICYmICh1MzJJbnRTdGF0dXMgJiBTUElfU1RBVFVTX1JYT1ZJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBTUElfRklGT19SWE9WX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJYIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfRklGT19SWFRPX0lOVF9NQVNLKSAmJiAodTMySW50U3RhdHVzICYgU1BJX1NUQVRVU19SWFRPSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gU1BJX0ZJRk9fUlhUT19JTlRfTUFTSzsKKyAgICB9CisKKyAgICByZXR1cm4gdTMySW50RmxhZzsKK30KKworLyoqCisgICogQGJyaWVmICBDbGVhciBpbnRlcnJ1cHQgZmxhZy4KKyAgKiBAcGFyYW1baW5dICBzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBTUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBzb3VyY2VzLgorICAqICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLgorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSBjbGVhcmVkLiBJdCBjb3VsZCBiZSB0aGUgY29tYmluYXRpb24gb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfVU5JVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NTQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NMVlVSX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfU0xWQkVfSU5UX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9UWFVGX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfRklGT19SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfRklGT19SWFRPX0lOVF9NQVNLCisgICoKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBDbGVhciBTUEkgcmVsYXRlZCBpbnRlcnJ1cHQgZmxhZ3Mgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICAqLwordm9pZCBTUElfQ2xlYXJJbnRGbGFnKFNQSV9UICpzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgaWYodTMyTWFzayAmIFNQSV9VTklUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TVEFUVVMgPSBTUElfU1RBVFVTX1VOSVRJRl9Nc2s7IC8qIENsZWFyIHVuaXQgdHJhbnNmZXIgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgU1BJX1NTQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3BpLT5TVEFUVVMgPSBTUElfU1RBVFVTX1NTQUNUSUZfTXNrOyAvKiBDbGVhciBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBTUElfU1NJTkFDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+U1RBVFVTID0gU1BJX1NUQVRVU19TU0lOQUlGX01zazsgLyogQ2xlYXIgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBTUElfU0xWVVJfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNUQVRVUyA9IFNQSV9TVEFUVVNfU0xWVVJJRl9Nc2s7IC8qIENsZWFyIHNsYXZlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBTUElfU0xWQkVfSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNUQVRVUyA9IFNQSV9TVEFUVVNfU0xWQkVJRl9Nc2s7IC8qIENsZWFyIHNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBTUElfVFhVRl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+U1RBVFVTID0gU1BJX1NUQVRVU19UWFVGSUZfTXNrOyAvKiBDbGVhciBzbGF2ZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgU1BJX0ZJRk9fUlhPVl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHNwaS0+U1RBVFVTID0gU1BJX1NUQVRVU19SWE9WSUZfTXNrOyAvKiBDbGVhciBSWCBvdmVycnVuIGludGVycnVwdCBmbGFnICovCisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFNQSV9GSUZPX1JYVE9fSU5UX01BU0spCisgICAgeworICAgICAgICBzcGktPlNUQVRVUyA9IFNQSV9TVEFUVVNfUlhUT0lGX01zazsgLyogQ2xlYXIgUlggdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IFNQSSBzdGF0dXMuCisgICogQHBhcmFtW2luXSAgc3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBzb3VyY2VzLgorICAqICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBzb3VyY2UuCisgICogICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGZsYWdzIHdpbGwgYmUgcmVhZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfQlVTWV9NQVNLCisgICogICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElfUlhfRU1QVFlfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1JYX0ZVTExfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1RYX0VNUFRZX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9UWF9GVUxMX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9UWFJYX1JFU0VUX01BU0sKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSV9TUElFTl9TVFNfTUFTSworICAqICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJX1NTTElORV9TVFNfTUFTSworICAqCisgICogQHJldHVybiBGbGFncyBvZiBzZWxlY3RlZCBzb3VyY2VzLgorICAqIEBkZXRhaWxzIEdldCBTUEkgcmVsYXRlZCBzdGF0dXMgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICAqLwordWludDMyX3QgU1BJX0dldFN0YXR1cyhTUElfVCAqc3BpLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIHVpbnQzMl90IHUzMlRtcFN0YXR1czsKKyAgICB1aW50MzJfdCB1MzJGbGFnID0gMFVMOworCisgICAgdTMyVG1wU3RhdHVzID0gc3BpLT5TVEFUVVM7CisKKyAgICAvKiBDaGVjayBidXN5IHN0YXR1cyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX0JVU1lfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFNQSV9TVEFUVVNfQlVTWV9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBTUElfQlVTWV9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJYIGVtcHR5IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSV9SWF9FTVBUWV9NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgU1BJX1NUQVRVU19SWEVNUFRZX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFNQSV9SWF9FTVBUWV9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJYIGZ1bGwgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1JYX0ZVTExfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFNQSV9TVEFUVVNfUlhGVUxMX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFNQSV9SWF9GVUxMX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVFggZW1wdHkgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1RYX0VNUFRZX01BU0spICYmICh1MzJUbXBTdGF0dXMgJiBTUElfU1RBVFVTX1RYRU1QVFlfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gU1BJX1RYX0VNUFRZX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVFggZnVsbCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfVFhfRlVMTF9NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgU1BJX1NUQVRVU19UWEZVTExfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gU1BJX1RYX0ZVTExfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBUWC9SWCByZXNldCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElfVFhSWF9SRVNFVF9NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgU1BJX1NUQVRVU19UWFJYUlNUX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFNQSV9UWFJYX1JFU0VUX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgU1BJRU4gZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1NQSUVOX1NUU19NQVNLKSAmJiAodTMyVG1wU3RhdHVzICYgU1BJX1NUQVRVU19TUElFTlNUU19Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBTUElfU1BJRU5fU1RTX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgU1BJeF9TUyBsaW5lIHN0YXR1cyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJX1NTTElORV9TVFNfTUFTSykgJiYgKHUzMlRtcFN0YXR1cyAmIFNQSV9TVEFUVVNfU1NMSU5FX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFNQSV9TU0xJTkVfU1RTX01BU0s7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkZsYWc7Cit9CisKKworLyoqCisgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IEkyUyBzb3VyY2UgY2xvY2sgZnJlcXVlbmN5LgorICAqIEBwYXJhbVtpbl0gIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHJldHVybiBJMlMgc291cmNlIGNsb2NrIGZyZXF1ZW5jeSAoSHopLgorICAqIEBkZXRhaWxzIFJldHVybiB0aGUgc291cmNlIGNsb2NrIGZyZXF1ZW5jeSBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmcgb2YgU1BJMFNFTCAoQ0xLX0NMS1NFTDJbNTo0XSkgb3IgU1BJMVNFTCAoQ0xLX0NMS1NFTDJbNzo2XSkgb3IgU1BJMlNFTCAoQ0xLX0NMS1NFTDJbMTE6MTBdKSBvciBTUEkzU0VMIChDTEtfQ0xLU0VMMlsxMzoxMl0pLgorICAqLworc3RhdGljIHVpbnQzMl90IFNQSUkyU19HZXRTb3VyY2VDbG9ja0ZyZXEoU1BJX1QgKmkycykKK3sKKyAgICB1aW50MzJfdCB1MzJGcmVxOworCisgICAgaWYoKGkycyA9PSBTUEkwKSB8fCAoaTJzID09IFNQSTBfTlMpKQorICAgIHsKKyAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfSFhUKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BMTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkwX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTBTRUxfUENMSzEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBDTEtfR2V0UENMSzFGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKChpMnMgPT0gU1BJMSkgfHwgKGkycyA9PSBTUEkxX05TKSkKKyAgICB7CisgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX0hYVCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9QTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMV9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTFTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BDTEswKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZigoaTJzID09IFNQSTIpIHx8IChpMnMgPT0gU1BJMl9OUykpCisgICAgeworICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9IWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfUExMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTJfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMlNFTF9QQ0xLMSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IENMS19HZXRQQ0xLMUZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEsxICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX0hYVCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyRnJlcSA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9QTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJM19NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTNTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BDTEswKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJGcmVxID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkZyZXEgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyRnJlcTsKK30KKworLyoqCisgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgc29tZSBwYXJhbWV0ZXJzIG9mIEkyUyBpbnRlcmZhY2UgZm9yIGdlbmVyYWwgcHVycG9zZSB1c2UuCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gdTMyTWFzdGVyU2xhdmUgSTJTIG9wZXJhdGlvbiBtb2RlLiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX01PREVfTUFTVEVSCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19NT0RFX1NMQVZFCisgICogQHBhcmFtW2luXSB1MzJTYW1wbGVSYXRlIFNhbXBsZSByYXRlCisgICogQHBhcmFtW2luXSB1MzJXb3JkV2lkdGggRGF0YSBsZW5ndGguIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfREFUQUJJVF84CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19EQVRBQklUXzE2CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19EQVRBQklUXzI0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19EQVRBQklUXzMyCisgICogQHBhcmFtW2luXSB1MzJDaGFubmVscyBBdWRpbyBmb3JtYXQuIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfTU9OTworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfU1RFUkVPCisgICogQHBhcmFtW2luXSB1MzJEYXRhRm9ybWF0IERhdGEgZm9ybWF0LiBWYWxpZCB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0ZPUk1BVF9JMlMKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0ZPUk1BVF9NU0IKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0ZPUk1BVF9QQ01BCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GT1JNQVRfUENNQgorICAqIEByZXR1cm4gUmVhbCBzYW1wbGUgcmF0ZSBvZiBtYXN0ZXIgbW9kZSBvciBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgb2Ygc2xhdmUgbW9kZS4KKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzZXQgU1BJL0kyUyBjb250cm9sbGVyIGFuZCBjb25maWd1cmUgSTJTIGNvbnRyb2xsZXIgYWNjb3JkaW5nIHRvIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLgorICAqICAgICAgICAgIFNldCBUWCBGSUZPIHRocmVzaG9sZCB0byAyIGFuZCBSWCBGSUZPIHRocmVzaG9sZCB0byAxLiBCb3RoIHRoZSBUWCBhbmQgUlggZnVuY3Rpb25zIHdpbGwgYmUgZW5hYmxlZC4KKyAgKiAgICAgICAgICBUaGUgYWN0dWFsIHNhbXBsZSByYXRlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdGFyZ2V0IHNhbXBsZSByYXRlLiBUaGUgcmVhbCBzYW1wbGUgcmF0ZSB3aWxsIGJlIHJldHVybmVkIGZvciByZWZlcmVuY2UuCisgICAgSW4gc2xhdmUgbW9kZSBmb3IgU2VjdXJlLCB0aGUgU1BJIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSB3aWxsIGVxdWFsIHRvIEFQQiBjbG9jayByYXRlLgorICAgIEluIHNsYXZlIG1vZGUgZm9yIE5vbi1TZWN1cmUsIHRoZSBTUEkgcGVyaXBoZXJhbCBjbG9jayByYXRlIHdpbGwgZXF1YWwgdG8gdGhlIGNsb2NrIHJhdGUgc2V0IGluIHNlY3VyZSBtb2RlLgorICAqLwordWludDMyX3QgU1BJSTJTX09wZW4oU1BJX1QgKmkycywgdWludDMyX3QgdTMyTWFzdGVyU2xhdmUsIHVpbnQzMl90IHUzMlNhbXBsZVJhdGUsIHVpbnQzMl90IHUzMldvcmRXaWR0aCwgdWludDMyX3QgdTMyQ2hhbm5lbHMsIHVpbnQzMl90IHUzMkRhdGFGb3JtYXQpCit7CisgICAgdWludDMyX3QgdTMyRGl2aWRlcjsKKyAgICB1aW50MzJfdCB1MzJCaXRSYXRlLCB1MzJTcmNDbGssIHUzMlJldFZhbHVlOworICAgIHVpbnQzMl90IHUzMlBDTEswRnJlcSwgdTMyUENMSzFGcmVxOworCisgICAgaWYoIShfX1BDKCkgJiBOU19PRkZTRVQpKQorICAgIHsKKyAgICAgICAgLyogUmVzZXQgU1BJL0kyUyAqLworICAgICAgICBpZigoaTJzID09IFNQSTApIHx8IChpMnMgPT0gU1BJMF9OUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNZUy0+SVBSU1QxIHw9IFNZU19JUFJTVDFfU1BJMFJTVF9Nc2s7CisgICAgICAgICAgICBTWVMtPklQUlNUMSAmPSB+U1lTX0lQUlNUMV9TUEkwUlNUX01zazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChpMnMgPT0gU1BJMSkgfHwgKGkycyA9PSBTUEkxX05TKSkKKyAgICAgICAgeworICAgICAgICAgICAgU1lTLT5JUFJTVDEgfD0gU1lTX0lQUlNUMV9TUEkxUlNUX01zazsKKyAgICAgICAgICAgIFNZUy0+SVBSU1QxICY9IH5TWVNfSVBSU1QxX1NQSTFSU1RfTXNrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKGkycyA9PSBTUEkyKSB8fCAoaTJzID09IFNQSTJfTlMpKQorICAgICAgICB7CisgICAgICAgICAgICBTWVMtPklQUlNUMSB8PSBTWVNfSVBSU1QxX1NQSTJSU1RfTXNrOworICAgICAgICAgICAgU1lTLT5JUFJTVDEgJj0gflNZU19JUFJTVDFfU1BJMlJTVF9Nc2s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBTWVMtPklQUlNUMiB8PSBTWVNfSVBSU1QyX1NQSTNSU1RfTXNrOworICAgICAgICAgICAgU1lTLT5JUFJTVDIgJj0gflNZU19JUFJTVDJfU1BJM1JTVF9Nc2s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDb25maWd1cmUgSTJTIGNvbnRyb2xsZXIgKi8KKyAgICBpMnMtPkkyU0NUTCA9IHUzMk1hc3RlclNsYXZlIHwgdTMyV29yZFdpZHRoIHwgdTMyQ2hhbm5lbHMgfCB1MzJEYXRhRm9ybWF0OworICAgIC8qIFNldCBUWCBGSUZPIHRocmVzaG9sZCB0byAyIGFuZCBSWCBGSUZPIHRocmVzaG9sZCB0byAxICovCisgICAgaTJzLT5GSUZPQ1RMID0gU1BJSTJTX0ZJRk9fVFhfTEVWRUxfV09SRF8yIHwgU1BJSTJTX0ZJRk9fUlhfTEVWRUxfV09SRF8yOworCisgICAgaWYodTMyTWFzdGVyU2xhdmUgPT0gU1BJSTJTX01PREVfTUFTVEVSKQorICAgIHsKKyAgICAgICAgLyogR2V0IHRoZSBzb3VyY2UgY2xvY2sgcmF0ZSAqLworICAgICAgICB1MzJTcmNDbGsgPSBTUElJMlNfR2V0U291cmNlQ2xvY2tGcmVxKGkycyk7CisKKyAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBiaXQgY2xvY2sgcmF0ZSAqLworICAgICAgICB1MzJCaXRSYXRlID0gdTMyU2FtcGxlUmF0ZSAqICgodTMyV29yZFdpZHRoID4+IFNQSV9JMlNDVExfV0RXSURUSF9Qb3MpICsgMVVMKSAqIDE2VUw7CisgICAgICAgIHUzMkRpdmlkZXIgPSAoKCgoKHUzMlNyY0NsayAqIDEwVUwpIC8gdTMyQml0UmF0ZSkgPj4gMVVMKSArIDVVTCkgLyAxMFVMKSAtIDFVTDsgLyogUm91bmQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciAqLworICAgICAgICAvKiBTZXQgQkNMS0RJViBzZXR0aW5nICovCisgICAgICAgIGkycy0+STJTQ0xLID0gKGkycy0+STJTQ0xLICYgflNQSV9JMlNDTEtfQkNMS0RJVl9Nc2spIHwgKHUzMkRpdmlkZXIgPDwgU1BJX0kyU0NMS19CQ0xLRElWX1Bvcyk7CisKKyAgICAgICAgLyogQ2FsY3VsYXRlIGJpdCBjbG9jayByYXRlICovCisgICAgICAgIHUzMkJpdFJhdGUgPSB1MzJTcmNDbGsgLyAoKHUzMkRpdmlkZXIgKyAxVUwpICogMlVMKTsKKyAgICAgICAgLyogQ2FsY3VsYXRlIHJlYWwgc2FtcGxlIHJhdGUgKi8KKyAgICAgICAgdTMyU2FtcGxlUmF0ZSA9IHUzMkJpdFJhdGUgLyAoKCh1MzJXb3JkV2lkdGggPj4gU1BJX0kyU0NUTF9XRFdJRFRIX1BvcykgKyAxVUwpICogMTZVTCk7CisKKyAgICAgICAgLyogRW5hYmxlIFRYIGZ1bmN0aW9uLCBSWCBmdW5jdGlvbiBhbmQgSTJTIG1vZGUuICovCisgICAgICAgIGkycy0+STJTQ1RMIHw9IChTUElfSTJTQ1RMX1JYRU5fTXNrIHwgU1BJX0kyU0NUTF9UWEVOX01zayB8IFNQSV9JMlNDVExfSTJTRU5fTXNrKTsKKworICAgICAgICAvKiBSZXR1cm4gdGhlIHJlYWwgc2FtcGxlIHJhdGUgKi8KKyAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJTYW1wbGVSYXRlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBTZXQgQkNMS0RJViA9IDAgKi8KKyAgICAgICAgaTJzLT5JMlNDTEsgJj0gflNQSV9JMlNDTEtfQkNMS0RJVl9Nc2s7CisgICAgICAgIC8qIEdldCBBUEIwIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgICAgICB1MzJQQ0xLMEZyZXEgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgICAgIC8qIEdldCBBUEIxIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgICAgICB1MzJQQ0xLMUZyZXEgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisKKyAgICAgICAgaWYoKGkycyA9PSBTUEkwKSB8fCAoaTJzID09IFNQSTBfTlMpKQorICAgICAgICB7CisgICAgICAgICAgICBpZighKF9fUEMoKSAmIE5TX09GRlNFVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgdG8gZXF1YWwgQVBCIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICBDTEstPkNMS1NFTDIgPSAoQ0xLLT5DTEtTRUwyICYgKH5DTEtfQ0xLU0VMMl9TUEkwU0VMX01zaykpIHwgQ0xLX0NMS1NFTDJfU1BJMFNFTF9QQ0xLMTsKKyAgICAgICAgICAgICAgICAvKiBSZXR1cm4gc2xhdmUgcGVyaXBoZXJhbCBjbG9jayByYXRlICovCisgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJQQ0xLMUZyZXE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ2hlY2sgY2xvY2sgc291cmNlIG9mIEkyUyAqLworICAgICAgICAgICAgICAgIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX0hYVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19IWFQ7IC8qIENsb2NrIHNvdXJjZSBpcyBIWFQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTBfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMFNFTF9QTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBMTCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMF9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTBTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkwU0VMX1BDTEsxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBDTEtfR2V0UENMSzFGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQQ0xLMSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSElSQzsgLyogQ2xvY2sgc291cmNlIGlzIEhJUkMgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBFbmFibGUgVFggZnVuY3Rpb24sIFJYIGZ1bmN0aW9uIGFuZCBJMlMgbW9kZS4gKi8KKyAgICAgICAgICAgIGkycy0+STJTQ1RMIHw9IChTUElfSTJTQ1RMX1JYRU5fTXNrIHwgU1BJX0kyU0NUTF9UWEVOX01zayB8IFNQSV9JMlNDVExfSTJTRU5fTXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKChpMnMgPT0gU1BJMSkgfHwgKGkycyA9PSBTUEkxX05TKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIShfX1BDKCkgJiBOU19PRkZTRVQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgcGVyaXBoZXJhbCBjbG9jayByYXRlIHRvIGVxdWFsIEFQQiBjbG9jayByYXRlICovCisgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJMVNFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTFTRUxfUENMSzA7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIHNsYXZlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyUENMSzBGcmVxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIENoZWNrIGNsb2NrIHNvdXJjZSBvZiBJMlMgKi8KKyAgICAgICAgICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9IWFQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkxX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMVNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTFTRUxfUExMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTFfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkxU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJMVNFTF9QQ0xLMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogRW5hYmxlIFRYIGZ1bmN0aW9uLCBSWCBmdW5jdGlvbiBhbmQgSTJTIG1vZGUuICovCisgICAgICAgICAgICBpMnMtPkkyU0NUTCB8PSAoU1BJX0kyU0NUTF9SWEVOX01zayB8IFNQSV9JMlNDVExfVFhFTl9Nc2sgfCBTUElfSTJTQ1RMX0kyU0VOX01zayk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoaTJzID09IFNQSTIpIHx8IChpMnMgPT0gU1BJMl9OUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCEoX19QQygpICYgTlNfT0ZGU0VUKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSB0byBlcXVhbCBBUEIgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIENMSy0+Q0xLU0VMMiA9IChDTEstPkNMS1NFTDIgJiAofkNMS19DTEtTRUwyX1NQSTJTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BDTEsxOworICAgICAgICAgICAgICAgIC8qIFJldHVybiBzbGF2ZSBwZXJpcGhlcmFsIGNsb2NrIHJhdGUgKi8KKyAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IHUzMlBDTEsxRnJlcTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDaGVjayBjbG9jayBzb3VyY2Ugb2YgSTJTICovCisgICAgICAgICAgICAgICAgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfSFhUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hYVDsgLyogQ2xvY2sgc291cmNlIGlzIEhYVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKChDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoU1BJMl9NT0RVTEUpIDw8IENMS19DTEtTRUwyX1NQSTJTRUxfUG9zKSA9PSBDTEtfQ0xLU0VMMl9TUEkyU0VMX1BMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUExMICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkyX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJMlNFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTJTRUxfUENMSzEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IENMS19HZXRQQ0xLMUZyZXEoKTsgLyogQ2xvY2sgc291cmNlIGlzIFBDTEsxICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gX19ISVJDOyAvKiBDbG9jayBzb3VyY2UgaXMgSElSQyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIEVuYWJsZSBUWCBmdW5jdGlvbiwgUlggZnVuY3Rpb24gYW5kIEkyUyBtb2RlLiAqLworICAgICAgICAgICAgaTJzLT5JMlNDVEwgfD0gKFNQSV9JMlNDVExfUlhFTl9Nc2sgfCBTUElfSTJTQ1RMX1RYRU5fTXNrIHwgU1BJX0kyU0NUTF9JMlNFTl9Nc2spOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIShfX1BDKCkgJiBOU19PRkZTRVQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgcGVyaXBoZXJhbCBjbG9jayByYXRlIHRvIGVxdWFsIEFQQiBjbG9jayByYXRlICovCisgICAgICAgICAgICAgICAgQ0xLLT5DTEtTRUwyID0gKENMSy0+Q0xLU0VMMiAmICh+Q0xLX0NMS1NFTDJfU1BJM1NFTF9Nc2spKSB8IENMS19DTEtTRUwyX1NQSTNTRUxfUENMSzA7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIHNsYXZlIHBlcmlwaGVyYWwgY2xvY2sgcmF0ZSAqLworICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gdTMyUENMSzBGcmVxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIENoZWNrIGNsb2NrIHNvdXJjZSBvZiBJMlMgKi8KKyAgICAgICAgICAgICAgICBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9IWFQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJSZXRWYWx1ZSA9IF9fSFhUOyAvKiBDbG9jayBzb3VyY2UgaXMgSFhUICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShTUEkzX01PRFVMRSkgPDwgQ0xLX0NMS1NFTDJfU1BJM1NFTF9Qb3MpID09IENMS19DTEtTRUwyX1NQSTNTRUxfUExMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBDTEtfR2V0UExMQ2xvY2tGcmVxKCk7IC8qIENsb2NrIHNvdXJjZSBpcyBQTEwgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigoQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFNQSTNfTU9EVUxFKSA8PCBDTEtfQ0xLU0VMMl9TUEkzU0VMX1BvcykgPT0gQ0xLX0NMS1NFTDJfU1BJM1NFTF9QQ0xLMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMlJldFZhbHVlID0gQ0xLX0dldFBDTEswRnJlcSgpOyAvKiBDbG9jayBzb3VyY2UgaXMgUENMSzAgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyUmV0VmFsdWUgPSBfX0hJUkM7IC8qIENsb2NrIHNvdXJjZSBpcyBISVJDICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogRW5hYmxlIFRYIGZ1bmN0aW9uLCBSWCBmdW5jdGlvbiBhbmQgSTJTIG1vZGUuICovCisgICAgICAgICAgICBpMnMtPkkyU0NUTCB8PSAoU1BJX0kyU0NUTF9SWEVOX01zayB8IFNQSV9JMlNDVExfVFhFTl9Nc2sgfCBTUElfSTJTQ1RMX0kyU0VOX01zayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyUmV0VmFsdWU7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBJMlMgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBEaXNhYmxlIEkyUyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgU1BJSTJTX0Nsb3NlKFNQSV9UICppMnMpCit7CisgICAgaTJzLT5JMlNDVEwgJj0gflNQSV9JMlNDVExfSTJTRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIGludGVycnVwdCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgICogICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuIFZhbGlkIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93LgorICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GSUZPX1RYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfRklGT19SWFRIX0lOVF9NQVNLCisgICogICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0ZJRk9fUlhPVl9JTlRfTUFTSworICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GSUZPX1JYVE9fSU5UX01BU0sKKyAgKiAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfVFhVRl9JTlRfTUFTSworICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19SSUdIVF9aQ19JTlRfTUFTSworICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19MRUZUX1pDX0lOVF9NQVNLCisgICogQHJldHVybiBOb25lCisgICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgYWNjb3JkaW5nIHRvIHRoZSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3ZvaWQgU1BJSTJTX0VuYWJsZUludChTUElfVCAqaTJzLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIC8qIEVuYWJsZSBUWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19GSUZPX1RYVEhfSU5UX01BU0spID09IFNQSUkyU19GSUZPX1RYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfVFhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJSTJTX0ZJRk9fUlhUSF9JTlRfTUFTSykgPT0gU1BJSTJTX0ZJRk9fUlhUSF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9SWFRISUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJSTJTX0ZJRk9fUlhPVl9JTlRfTUFTSykgPT0gU1BJSTJTX0ZJRk9fUlhPVl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+RklGT0NUTCB8PSBTUElfRklGT0NUTF9SWE9WSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19GSUZPX1JYVE9fSU5UX01BU0spID09IFNQSUkyU19GSUZPX1JYVE9fSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkZJRk9DVEwgfD0gU1BJX0ZJRk9DVExfUlhUT0lFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFRYIHVuZGVyZmxvdyBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJSTJTX1RYVUZfSU5UX01BU0spID09IFNQSUkyU19UWFVGX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgaTJzLT5GSUZPQ1RMIHw9IFNQSV9GSUZPQ1RMX1RYVUZJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSByaWdodCBjaGFubmVsIHplcm8gY3Jvc3MgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19SSUdIVF9aQ19JTlRfTUFTSykgPT0gU1BJSTJTX1JJR0hUX1pDX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgaTJzLT5JMlNDVEwgfD0gU1BJX0kyU0NUTF9SWkNJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBsZWZ0IGNoYW5uZWwgemVybyBjcm9zcyBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJSTJTX0xFRlRfWkNfSU5UX01BU0spID09IFNQSUkyU19MRUZUX1pDX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgaTJzLT5JMlNDVEwgfD0gU1BJX0kyU0NUTF9MWkNJRU5fTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmIERpc2FibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBlbmFibGUgYml0cy4KKyAgKiAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4gVmFsaWQgdmFsdWVzIGFyZSBsaXN0ZWQgYmVsb3cuCisgICogICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0ZJRk9fVFhUSF9JTlRfTUFTSworICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19GSUZPX1JYVEhfSU5UX01BU0sKKyAgKiAgICAgICAgICAgIC0gXHJlZiBTUElJMlNfRklGT19SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0ZJRk9fUlhUT19JTlRfTUFTSworICAqICAgICAgICAgICAgLSBccmVmIFNQSUkyU19UWFVGX0lOVF9NQVNLCisgICogICAgICAgICAgICAtIFxyZWYgU1BJSTJTX1JJR0hUX1pDX0lOVF9NQVNLCisgICogICAgICAgICAgICAtIFxyZWYgU1BJSTJTX0xFRlRfWkNfSU5UX01BU0sKKyAgKiBAcmV0dXJuIE5vbmUKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgYWNjb3JkaW5nIHRvIHRoZSB1MzJNYXNrIHBhcmFtZXRlci4KKyAgKi8KK3ZvaWQgU1BJSTJTX0Rpc2FibGVJbnQoU1BJX1QgKmkycywgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBEaXNhYmxlIFRYIHRocmVzaG9sZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJSTJTX0ZJRk9fVFhUSF9JTlRfTUFTSykgPT0gU1BJSTJTX0ZJRk9fVFhUSF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+RklGT0NUTCAmPSB+U1BJX0ZJRk9DVExfVFhUSElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCB0aHJlc2hvbGQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19GSUZPX1JYVEhfSU5UX01BU0spID09IFNQSUkyU19GSUZPX1JYVEhfSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkZJRk9DVEwgJj0gflNQSV9GSUZPQ1RMX1JYVEhJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJSTJTX0ZJRk9fUlhPVl9JTlRfTUFTSykgPT0gU1BJSTJTX0ZJRk9fUlhPVl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+RklGT0NUTCAmPSB+U1BJX0ZJRk9DVExfUlhPVklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCB0aW1lLW91dCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgU1BJSTJTX0ZJRk9fUlhUT19JTlRfTUFTSykgPT0gU1BJSTJTX0ZJRk9fUlhUT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+RklGT0NUTCAmPSB+U1BJX0ZJRk9DVExfUlhUT0lFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBUWCB1bmRlcmZsb3cgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19UWFVGX0lOVF9NQVNLKSA9PSBTUElJMlNfVFhVRl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIGkycy0+RklGT0NUTCAmPSB+U1BJX0ZJRk9DVExfVFhVRklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSByaWdodCBjaGFubmVsIHplcm8gY3Jvc3MgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFNQSUkyU19SSUdIVF9aQ19JTlRfTUFTSykgPT0gU1BJSTJTX1JJR0hUX1pDX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgaTJzLT5JMlNDVEwgJj0gflNQSV9JMlNDVExfUlpDSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIGxlZnQgY2hhbm5lbCB6ZXJvIGNyb3NzIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBTUElJMlNfTEVGVF9aQ19JTlRfTUFTSykgPT0gU1BJSTJTX0xFRlRfWkNfSU5UX01BU0spCisgICAgeworICAgICAgICBpMnMtPkkyU0NUTCAmPSB+U1BJX0kyU0NUTF9MWkNJRU5fTXNrOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgbWFzdGVyIGNsb2NrIChNQ0xLKS4KKyAgKiBAcGFyYW1baW5dIGkycyBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIEkyUyBtb2R1bGUuCisgICogQHBhcmFtW2luXSB1MzJCdXNDbG9jayBUaGUgdGFyZ2V0IE1DTEsgY2xvY2sgcmF0ZS4KKyAgKiBAcmV0dXJuIEFjdHVhbCBNQ0xLIGNsb2NrIHJhdGUKKyAgKiBAZGV0YWlscyBTZXQgdGhlIG1hc3RlciBjbG9jayByYXRlIGFjY29yZGluZyB0byB1MzJCdXNDbG9jayBwYXJhbWV0ZXIgYW5kIGVuYWJsZSBtYXN0ZXIgY2xvY2sgb3V0cHV0LgorICAqICAgICAgICAgIFRoZSBhY3R1YWwgbWFzdGVyIGNsb2NrIHJhdGUgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSB0YXJnZXQgbWFzdGVyIGNsb2NrIHJhdGUuIFRoZSByZWFsIG1hc3RlciBjbG9jayByYXRlIHdpbGwgYmUgcmV0dXJuZWQgZm9yIHJlZmVyZW5jZS4KKyAgKi8KK3VpbnQzMl90IFNQSUkyU19FbmFibGVNQ0xLKFNQSV9UICppMnMsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKQoreworICAgIHVpbnQzMl90IHUzMkRpdmlkZXI7CisgICAgdWludDMyX3QgdTMyU3JjQ2xrLCB1MzJSZXRWYWx1ZTsKKworICAgIHUzMlNyY0NsayA9IFNQSUkyU19HZXRTb3VyY2VDbG9ja0ZyZXEoaTJzKTsKKyAgICBpZih1MzJCdXNDbG9jayA9PSB1MzJTcmNDbGspCisgICAgeworICAgICAgICB1MzJEaXZpZGVyID0gMFVMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJEaXZpZGVyID0gKHUzMlNyY0NsayAvIHUzMkJ1c0Nsb2NrKSA+PiAxVUw7CisgICAgICAgIC8qIE1DTEtESVYgaXMgYSA3LWJpdCB3aWR0aCBjb25maWd1cmF0aW9uLiBUaGUgbWF4aW11bSB2YWx1ZSBpcyAweDdGLiAqLworICAgICAgICBpZih1MzJEaXZpZGVyID4gMHg3RlVMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJEaXZpZGVyID0gMHg3RlVMOworICAgICAgICB9CisgICAgfQorCisgICAgLyogV3JpdGUgdTMyRGl2aWRlciB0byBNQ0xLRElWIChTUElfSTJTQ0xLWzY6MF0pICovCisgICAgaTJzLT5JMlNDTEsgPSAoaTJzLT5JMlNDTEsgJiB+U1BJX0kyU0NMS19NQ0xLRElWX01zaykgfCAodTMyRGl2aWRlciA8PCBTUElfSTJTQ0xLX01DTEtESVZfUG9zKTsKKworICAgIC8qIEVuYWJsZSBNQ0xLIG91dHB1dCAqLworICAgIGkycy0+STJTQ1RMIHw9IFNQSV9JMlNDVExfTUNMS0VOX01zazsKKworICAgIGlmKHUzMkRpdmlkZXIgPT0gMFVMKQorICAgIHsKKyAgICAgICAgdTMyUmV0VmFsdWUgPSB1MzJTcmNDbGs7IC8qIElmIE1DTEtESVY9MCwgbWFzdGVyIGNsb2NrIHJhdGUgaXMgZXF1YWwgdG8gdGhlIHNvdXJjZSBjbG9jayByYXRlLiAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJSZXRWYWx1ZSA9ICgodTMyU3JjQ2xrID4+IDFVTCkgLyB1MzJEaXZpZGVyKTsgLyogSWYgTUNMS0RJVj4wLCBtYXN0ZXIgY2xvY2sgcmF0ZSA9IHNvdXJjZSBjbG9jayByYXRlIC8gKE1DTEtESVYgKiAyKSAqLworICAgIH0KKworICAgIHJldHVybiB1MzJSZXRWYWx1ZTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIG1hc3RlciBjbG9jayAoTUNMSykuCisgICogQHBhcmFtW2luXSBpMnMgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBJMlMgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIENsZWFyIE1DTEtFTiBiaXQgb2YgU1BJX0kyU0NUTCByZWdpc3RlciB0byBkaXNhYmxlIG1hc3RlciBjbG9jayBvdXRwdXQuCisgICovCit2b2lkIFNQSUkyU19EaXNhYmxlTUNMSyhTUElfVCAqaTJzKQoreworICAgIGkycy0+STJTQ1RMICY9IH5TUElfSTJTQ1RMX01DTEtFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIEZJRk8gdGhyZXNob2xkIHNldHRpbmcuCisgICogQHBhcmFtW2luXSAgaTJzIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgSTJTIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJUeFRocmVzaG9sZCBEZWNpZGVzIHRoZSBUWCBGSUZPIHRocmVzaG9sZC4gSXQgY291bGQgYmUgMCB+IDMuCisgICogQHBhcmFtW2luXSAgdTMyUnhUaHJlc2hvbGQgRGVjaWRlcyB0aGUgUlggRklGTyB0aHJlc2hvbGQuIEl0IGNvdWxkIGJlIDAgfiAzLgorICAqIEByZXR1cm4gTm9uZQorICAqIEBkZXRhaWxzIFNldCBUWCBGSUZPIHRocmVzaG9sZCBhbmQgUlggRklGTyB0aHJlc2hvbGQgY29uZmlndXJhdGlvbnMuCisgICovCit2b2lkIFNQSUkyU19TZXRGSUZPKFNQSV9UICppMnMsIHVpbnQzMl90IHUzMlR4VGhyZXNob2xkLCB1aW50MzJfdCB1MzJSeFRocmVzaG9sZCkKK3sKKyAgICBpMnMtPkZJRk9DVEwgPSAoaTJzLT5GSUZPQ1RMICYgfihTUElfRklGT0NUTF9UWFRIX01zayB8IFNQSV9GSUZPQ1RMX1JYVEhfTXNrKSkgfAorICAgICAgICAgICAgICAgICAgICh1MzJUeFRocmVzaG9sZCA8PCBTUElfRklGT0NUTF9UWFRIX1BvcykgfAorICAgICAgICAgICAgICAgICAgICh1MzJSeFRocmVzaG9sZCA8PCBTUElfRklGT0NUTF9SWFRIX1Bvcyk7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU1BJX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFNQSV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc3lzLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy9zeXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2RhYTAzCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvc3lzLmMKQEAgLTAsMCArMSwzODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzeXMuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFN5c3RlbSBNYW5hZ2VyIChTWVMpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBTWVNfRHJpdmVyIFNZUyBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIFNZU19FWFBPUlRFRF9GVU5DVElPTlMgU1lTIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgQ2xlYXIgcmVzZXQgc291cmNlCisgICogQHBhcmFtW2luXSAgdTMyU3JjIGlzIHN5c3RlbSByZXNldCBzb3VyY2UuIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIFNZU19SU1RTVFNfQ1BVTEtSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19DUFVSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19TWVNSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19CT0RSRl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1JTVFNUU19MVlJGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUlNUU1RTX1dEVFJGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUlNUU1RTX1BJTlJGX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUlNUU1RTX1BPUkZfTXNrCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gY2xlYXIgdGhlIHNlbGVjdGVkIHN5c3RlbSByZXNldCBzb3VyY2UuCisgICovCit2b2lkIFNZU19DbGVhclJlc2V0U3JjKHVpbnQzMl90IHUzMlNyYykKK3sKKyAgICBTWVMtPlJTVFNUUyA9IHUzMlNyYzsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IEJyb3duLW91dCBkZXRlY3RvciBvdXRwdXQgc3RhdHVzCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgU3lzdGVtIHZvbHRhZ2UgaXMgaGlnaGVyIHRoYW4gQk9EVkwgc2V0dGluZyBvciBCT0RFTiBpcyAwLgorICAqIEByZXR2YWwgICAgIDEgU3lzdGVtIHZvbHRhZ2UgaXMgbG93ZXIgdGhhbiBCT0RWTCBzZXR0aW5nLgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZ2V0IEJyb3duLW91dCBkZXRlY3RvciBvdXRwdXQgc3RhdHVzLgorICAqLwordWludDMyX3QgU1lTX0dldEJPRFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiAoKFNZUy0+Qk9EQ1RMICYgU1lTX0JPRENUTF9CT0RPVVRfTXNrKSA+PiBTWVNfQk9EQ1RMX0JPRE9VVF9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgcmVzZXQgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlCisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIFJlc2V0IHNvdXJjZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZ2V0IHRoZSBzeXN0ZW0gcmVzZXQgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlLgorICAqLwordWludDMyX3QgU1lTX0dldFJlc2V0U3JjKHZvaWQpCit7CisgICAgcmV0dXJuIChTWVMtPlJTVFNUUyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIENoZWNrIGlmIHJlZ2lzdGVyIGlzIGxvY2tlZCBub3Igbm90CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR2YWwgICAgIDAgV3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBpcyBkaXNhYmxlZC4KKyAgKiAgICAgICAgICAgICAxIFdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gaXMgZW5hYmxlZC4KKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gYml0IHNldHRpbmcuCisgICovCit1aW50MzJfdCBTWVNfSXNSZWdMb2NrZWQodm9pZCkKK3sKKyAgICByZXR1cm4gU1lTLT5SRUdMQ1RMICYgMVVMID8gMFVMIDogMVVMOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgcHJvZHVjdCBJRAorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBQcm9kdWN0IElECisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBnZXQgcHJvZHVjdCBJRC4KKyAgKi8KK3VpbnQzMl90ICBTWVNfUmVhZFBESUQodm9pZCkKK3sKKyAgICByZXR1cm4gU1lTLT5QRElEOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZXNldCBjaGlwIHdpdGggY2hpcCByZXNldAorICAqIEBwYXJhbSAgICAgIE5vbmUKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiByZXNldCBjaGlwIHdpdGggY2hpcCByZXNldC4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFNZU19SZXNldENoaXAodm9pZCkKK3sKKyAgICBTWVMtPklQUlNUMCB8PSBTWVNfSVBSU1QwX0NISVBSU1RfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZXNldCBjaGlwIHdpdGggQ1BVIHJlc2V0CisgICogQHBhcmFtICAgICAgTm9uZQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHJlc2V0IENQVSB3aXRoIENQVSByZXNldC4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFNZU19SZXNldENQVSh2b2lkKQoreworICAgIFNZUy0+SVBSU1QwIHw9IFNZU19JUFJTVDBfQ1BVUlNUX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgUmVzZXQgc2VsZWN0ZWQgbW9kdWxlCisgICogQHBhcmFtW2luXSAgdTMyTW9kdWxlSW5kZXggaXMgbW9kdWxlIGluZGV4LiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBQRE1BMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUERNQTFfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEVCSV9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVVNCSF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0RIMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgQ1JDX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBDUlBUX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBHUElPX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIwX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIxX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIyX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBUTVIzX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBBQ01QMDFfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEkyQzBfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEkyQzFfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEkyQzJfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFFTUEkwX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkwX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkxX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkyX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBTUEkzX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDFfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQyX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBVQVJUM19SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgVUFSVDRfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFVBUlQ1X1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBDQU4wX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBPVEdfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFVTQkRfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEVBRENfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEkyUzBfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFRSTkdfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFNDMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU0MxX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBTQzJfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIFVTQ0kwX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBVU0NJMV9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgREFDX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBFUFdNMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRVBXTTFfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEJQV00wX1JTVAorICAqICAgICAgICAgICAgIC0gXHJlZiBCUFdNMV9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUUVJMF9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgUUVJMV9SU1QKKyAgKiAgICAgICAgICAgICAtIFxyZWYgRUNBUDBfUlNUCisgICogICAgICAgICAgICAgLSBccmVmIEVDQVAxX1JTVAorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHJlc2V0IHNlbGVjdGVkIG1vZHVsZS4KKyAgKi8KK3ZvaWQgU1lTX1Jlc2V0TW9kdWxlKHVpbnQzMl90IHUzMk1vZHVsZUluZGV4KQoreworICAgIHVpbnQzMl90IHUzMlRtcFZhbCA9IDBVTCwgdTMyVG1wQWRkciA9IDBVTDsKKworICAgIC8qIEdlbmVyYXRlIHJlc2V0IHNpZ25hbCB0byB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgKi8KKyAgICB1MzJUbXBWYWwgPSAoMVVMIDw8ICh1MzJNb2R1bGVJbmRleCAmIDB4MDBmZmZmZmZVTCkpOworICAgIHUzMlRtcEFkZHIgPSAodWludDMyX3QpJlNZUy0+SVBSU1QwICsgKCh1MzJNb2R1bGVJbmRleCA+PiAyNFVMKSk7CisgICAgKih1aW50MzJfdCAqKXUzMlRtcEFkZHIgfD0gdTMyVG1wVmFsOworCisgICAgLyogUmVsZWFzZSBjb3JyZXNwb25kaW5nIG1vZHVsZSBmcm9tIHJlc2V0IHN0YXRlICovCisgICAgdTMyVG1wVmFsID0gfigxVUwgPDwgKHUzMk1vZHVsZUluZGV4ICYgMHgwMGZmZmZmZlVMKSk7CisgICAgKih1aW50MzJfdCAqKXUzMlRtcEFkZHIgJj0gdTMyVG1wVmFsOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgYW5kIGNvbmZpZ3VyZSBCcm93bi1vdXQgZGV0ZWN0b3IgZnVuY3Rpb24KKyAgKiBAcGFyYW1baW5dICBpMzJNb2RlIGlzIHJlc2V0IG9yIGludGVycnVwdCBtb2RlLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRF9SU1RfRU4KKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RfSU5URVJSVVBUX0VOCisgICogQHBhcmFtW2luXSAgdTMyQk9ETGV2ZWwgaXMgQnJvd24tb3V0IHZvbHRhZ2UgbGV2ZWwuIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMV82VgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzFfOFYKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8yXzBWCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMl8yVgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzJfNFYKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX0JPRENUTF9CT0RWTF8yXzZWCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19CT0RDVExfQk9EVkxfMl84VgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfQk9EQ1RMX0JPRFZMXzNfMFYKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBjb25maWd1cmUgQnJvd24tb3V0IGRldGVjdG9yIHJlc2V0IG9yIGludGVycnVwdCBtb2RlLCBlbmFibGUgQnJvd24tb3V0IGZ1bmN0aW9uIGFuZCBzZXQgQnJvd24tb3V0IHZvbHRhZ2UgbGV2ZWwuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBTWVNfRW5hYmxlQk9EKGludDMyX3QgaTMyTW9kZSwgdWludDMyX3QgdTMyQk9ETGV2ZWwpCit7CisgICAgLyogRW5hYmxlIEJyb3duLW91dCBEZXRlY3RvciBmdW5jdGlvbiAqLworICAgIFNZUy0+Qk9EQ1RMIHw9IFNZU19CT0RDVExfQk9ERU5fTXNrOworCisgICAgLyogRW5hYmxlIEJyb3duLW91dCBpbnRlcnJ1cHQgb3IgcmVzZXQgZnVuY3Rpb24gKi8KKyAgICBTWVMtPkJPRENUTCA9IChTWVMtPkJPRENUTCAmIH5TWVNfQk9EQ1RMX0JPRFJTVEVOX01zaykgfCAodWludDMyX3QpaTMyTW9kZTsKKworICAgIC8qIFNlbGVjdCBCcm93bi1vdXQgRGV0ZWN0b3IgdGhyZXNob2xkIHZvbHRhZ2UgKi8KKyAgICBTWVMtPkJPRENUTCA9IChTWVMtPkJPRENUTCAmIH5TWVNfQk9EQ1RMX0JPRFZMX01zaykgfCB1MzJCT0RMZXZlbDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBCcm93bi1vdXQgZGV0ZWN0b3IgZnVuY3Rpb24KKyAgKiBAcGFyYW0gICAgICBOb25lCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSBCcm93bi1vdXQgZGV0ZWN0b3IgZnVuY3Rpb24uCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBTWVNfRGlzYWJsZUJPRCh2b2lkKQoreworICAgIFNZUy0+Qk9EQ1RMICY9IH5TWVNfQk9EQ1RMX0JPREVOX01zazsKK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgUG93ZXIgTGV2ZWwKKyAgKiBAcGFyYW1baW5dICB1MzJQb3dlckxldmVsIGlzIHBvd2VyIGxldmVsIHNldHRpbmcuIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIFNZU19QTENUTF9QTFNFTF9QTDAKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1BMQ1RMX1BMU0VMX1BMMQorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHNlbGVjdCBwb3dlciBsZXZlbC4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFNZU19TZXRQb3dlckxldmVsKHVpbnQzMl90IHUzMlBvd2VyTGV2ZWwpCit7CisgICAgLyogU2V0IHBvd2VyIHZvbHRhZ2UgbGV2ZWwgKi8KKyAgICBTWVMtPlBMQ1RMID0gKFNZUy0+UExDVEwgJiAoflNZU19QTENUTF9QTFNFTF9Nc2spKSB8ICh1MzJQb3dlckxldmVsKTsKK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgTWFpbiBWb2x0YWdlIFJlZ3VsYXRvciBUeXBlCisgICogQHBhcmFtW2luXSAgdTMyUG93ZXJSZWd1bGF0b3IgaXMgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfUExDVExfTVZSU19MRE8KKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1BMQ1RMX01WUlNfRENEQworICAqIEByZXR2YWwgICAgIDAgIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBzZXR0aW5nIGlzIG5vdCBmaW5pc2hlZAorICAqIEByZXR2YWwgICAgIDEgIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBzZXR0aW5nIGlzIGZpbmlzaGVkCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBzZXQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlLgorICAqICAgICAgICAgICAgIFRoZSBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgc2V0dGluZyB0byBEQ0RDIGNhbm5vdCBmaW5pc2hlZCBpZiB0aGUgaW5kdWN0b3IgaXMgbm90IGRldGVjdGVkLgorICAqICAgICAgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3VpbnQzMl90IFNZU19TZXRQb3dlclJlZ3VsYXRvcih1aW50MzJfdCB1MzJQb3dlclJlZ3VsYXRvcikKK3sKKyAgICBpbnQzMl90IGkzMlRpbWVPdXRDbnQgPSA0MDA7CisgICAgdWludDMyX3QgdTMyUmV0ID0gMVU7CisgICAgdWludDMyX3QgdTMyUG93ZXJSZWdTdGF0dXM7CisKKyAgICAvKiBHZXQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIHN0YXR1cyAqLworICAgIHUzMlBvd2VyUmVnU3RhdHVzID0gU1lTLT5QTFNUUyAmIFNZU19QTFNUU19DVVJNVlJfTXNrOworCisgICAgLyogU2V0IG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSAqLworICAgIGlmKCh1MzJQb3dlclJlZ3VsYXRvciA9PSBTWVNfUExDVExfTVZSU19EQ0RDKSAmJiAodTMyUG93ZXJSZWdTdGF0dXMgPT0gU1lTX1BMU1RTX0NVUk1WUl9MRE8pKQorICAgIHsKKworICAgICAgICAvKiBTZXQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIHRvIERDREMgaWYgc3RhdHVzIGlzIExETyAqLworICAgICAgICBTWVMtPlBMQ1RMIHw9IFNZU19QTENUTF9NVlJTX01zazsKKworICAgICAgICAvKiBXYWl0IGluZHVjdGlvbiBkZXRlY3Rpb24gYW5kIG1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgcmVhZHkgKi8KKyAgICAgICAgd2hpbGUoKFNZUy0+UExTVFMgJiBTWVNfUExTVFNfQ1VSTVZSX01zaykgIT0gU1lTX1BMU1RTX0NVUk1WUl9EQ0RDKQorICAgICAgICB7CisgICAgICAgICAgICBpZihpMzJUaW1lT3V0Q250LS0gPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJSZXQgPSAwVTsgICAgLyogTWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSB0aW1lLW91dCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisgICAgZWxzZSBpZih1MzJQb3dlclJlZ3VsYXRvciA9PSBTWVNfUExDVExfTVZSU19MRE8pCisgICAgeworCisgICAgICAgIC8qIFNldCBtYWluIHZvbHRhZ2UgcmVndWxhdG9yIHR5cGUgdG8gTERPIGlmIHN0YXR1cyBpcyBEQ0RDICovCisgICAgICAgIFNZUy0+UExDVEwgJj0gKH5TWVNfUExDVExfTVZSU19Nc2spOworCisgICAgICAgIC8qIFdhaXQgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSByZWFkeSAqLworICAgICAgICB3aGlsZSgoU1lTLT5QTFNUUyAmIFNZU19QTFNUU19DVVJNVlJfTXNrKSAhPSBTWVNfUExTVFNfQ1VSTVZSX0xETykKKyAgICAgICAgeworICAgICAgICAgICAgaWYoaTMyVGltZU91dENudC0tIDw9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyUmV0ID0gMFU7ICAgIC8qIE1haW4gdm9sdGFnZSByZWd1bGF0b3IgdHlwZSBjaGFuZ2UgdGltZS1vdXQgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorCisgICAgLyogQ2xlYXIgbWFpbiB2b2x0YWdlIHJlZ3VsYXRvciB0eXBlIGNoYW5nZSBlcnJvciBmbGFnICovCisgICAgaWYoU1lTLT5QTFNUUyAmIFNZU19QTFNUU19NVlJDRVJSX01zaykKKyAgICB7CisgICAgICAgIFNZUy0+UExTVFMgPSBTWVNfUExTVFNfTVZSQ0VSUl9Nc2s7CisgICAgICAgIHUzMlJldCA9IDBVOworICAgIH0KKworICAgIHJldHVybiB1MzJSZXQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNldCBTeXN0ZW0gU1JBTSBQb3dlciBNb2RlCisgICogQHBhcmFtW2luXSAgdTMyU1JBTVNlbCBpcyBTUkFNIHJlZ2lvbiBzZWxlY3Rpb24uIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUENUTF9TUkFNMFBNMF9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QQ1RMX1NSQU0wUE0xX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBDVExfU1JBTTBQTTJfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUENUTF9TUkFNMFBNM19Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QQ1RMX1NSQU0xUE0wX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBDVExfU1JBTTFQTTFfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUENUTF9TUkFNMVBNMl9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QQ1RMX1NSQU0xUE0zX01zaworICAqIEBwYXJhbVtpbl0gIHUzMlBvd2VyTW9kZSBpcyBTUkFNIHBvd2VyIG1vZGUuIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUENUTF9TUkFNX05PUk1BTAorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBDVExfU1JBTV9SRVRFTlRJT04KKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QQ1RMX1NSQU1fUE9XRVJfU0hVVF9ET1dOCisgICogQHJldHVybiAgICAgTm9uZQorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gc2V0IHN5c3RlbSBTUkFNIHBvd2VyIG1vZGUuCisgICogICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBTWVNfU2V0U1NSQU1Qb3dlck1vZGUodWludDMyX3QgdTMyU1JBTVNlbCwgdWludDMyX3QgdTMyUG93ZXJNb2RlKQoreworICAgIHVpbnQzMl90IHUzMlNSQU1TZWxQb3MgPSA4VUw7CisKKyAgICAvKiBHZXQgc3lzdGVtIFNSQU0gcG93ZXIgbW9kZSBzZXR0aW5nIHBvc2l0aW9uICovCisgICAgd2hpbGUodTMyU1JBTVNlbFBvcyA8IDI0VUwpCisgICAgeworICAgICAgICBpZih1MzJTUkFNU2VsICYgKDEgPDwgdTMyU1JBTVNlbFBvcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyU1JBTVNlbFBvcysrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogU2V0IHN5c3RlbSBTUkFNIHBvd2VyIG1vZGUgc2V0dGluZyAqLworICAgIFNZUy0+U1JBTVBDVEwgPSAoU1lTLT5TUkFNUENUTCAmICh+dTMyU1JBTVNlbCkpIHwgKHUzMlBvd2VyTW9kZSA8PCB1MzJTUkFNU2VsUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IFBlcmlwaGVyYWwgU1JBTSBQb3dlciBNb2RlCisgICogQHBhcmFtW2luXSAgdTMyU1JBTVNlbCBpcyBTUkFNIHJlZ2lvbiBzZWxlY3Rpb24uIEluY2x1ZGluZyA6CisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUFBDVF9DQU5fTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUFBDVF9VU0JEX01zaworICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBQQ1RfUERNQTBfTXNrCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUFBDVF9QRE1BMV9Nc2sKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QUENUX0ZNQ19Nc2sKKyAgKiBAcGFyYW1baW5dICB1MzJQb3dlck1vZGUgaXMgU1JBTSBwb3dlciBtb2RlLiBJbmNsdWRpbmcgOgorICAqICAgICAgICAgICAgIC0gXHJlZiBTWVNfU1JBTVBQQ1RfU1JBTV9OT1JNQUwKKyAgKiAgICAgICAgICAgICAtIFxyZWYgU1lTX1NSQU1QUENUX1NSQU1fUkVURU5USU9OCisgICogICAgICAgICAgICAgLSBccmVmIFNZU19TUkFNUFBDVF9TUkFNX1BPV0VSX1NIVVRfRE9XTgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHNldCBwZXJpcGhlcmFsIFNSQU0gcG93ZXIgbW9kZS4KKyAgKiAgICAgICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFNZU19TZXRQU1JBTVBvd2VyTW9kZSh1aW50MzJfdCB1MzJTUkFNU2VsLCB1aW50MzJfdCB1MzJQb3dlck1vZGUpCit7CisgICAgdWludDMyX3QgdTMyU1JBTVNlbFBvcyA9IDBVTDsKKworICAgIC8qIEdldCBwZXJpcGhlcmFsIFNSQU0gcG93ZXIgbW9kZSBzZXR0aW5nIHBvc2l0aW9uICovCisgICAgd2hpbGUodTMyU1JBTVNlbFBvcyA8IDEwVUwpCisgICAgeworICAgICAgICBpZih1MzJTUkFNU2VsICYgKDEgPDwgdTMyU1JBTVNlbFBvcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyU1JBTVNlbFBvcysrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogU2V0IHBlcmlwaGVyYWwgU1JBTSBwb3dlciBtb2RlIHNldHRpbmcgKi8KKyAgICBTWVMtPlNSQU1QUENUID0gKFNZUy0+U1JBTVBQQ1QgJiAofnUzMlNSQU1TZWwpKSB8ICh1MzJQb3dlck1vZGUgPDwgdTMyU1JBTVNlbFBvcyk7Cit9CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTWVNfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU1lTX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy90aW1lci5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWVlNjJjCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdGltZXIuYwpAQCAtMCwwICsxLDM5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHRpbWVyLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIFRpbWVyIENvbnRyb2xsZXIoVGltZXIpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVElNRVJfRHJpdmVyIFRJTUVSIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFRJTUVSX0VYUE9SVEVEX0ZVTkNUSU9OUyBUSU1FUiBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICAqIEBicmllZiAgICAgIE9wZW4gVGltZXIgd2l0aCBPcGVyYXRlIE1vZGUgYW5kIEZyZXF1ZW5jeQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJNb2RlICAgICBPcGVyYXRpb24gbW9kZS4gUG9zc2libGUgb3B0aW9ucyBhcmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfT05FU0hPVF9NT0RFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX1BFUklPRElDX01PREUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfVE9HR0xFX01PREUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfQ09OVElOVU9VU19NT0RFCisgICogQHBhcmFtW2luXSAgdTMyRnJlcSAgICAgVGFyZ2V0IHdvcmtpbmcgZnJlcXVlbmN5CisgICoKKyAgKiBAcmV0dXJuICAgICBSZWFsIHRpbWVyIHdvcmtpbmcgZnJlcXVlbmN5CisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aW1lciB0byBvcGVyYXRlIGluIHNwZWNpZmllZCBtb2RlIGFuZCBmcmVxdWVuY3kuCisgICogICAgICAgICAgICAgSWYgdGltZXIgY2Fubm90IHdvcmsgaW4gdGFyZ2V0IGZyZXF1ZW5jeSwgYSBjbG9zZXN0IGZyZXF1ZW5jeSB3aWxsIGJlIGNob3NlIGFuZCByZXR1cm5lZC4KKyAgICAgICAgQWZ0ZXIgY2FsbGluZyB0aGlzIEFQSSwgVGltZXIgaXMgXGIgTk9UIHJ1bm5pbmcgeWV0LiBCdXQgY291bGQgc3RhcnQgdGltZXIgcnVubmluZyBiZSBjYWxsaW5nCisgICogICAgICAgICAgICAgXHJlZiBUSU1FUl9TdGFydCBtYWNybyBvciBwcm9ncmFtIHJlZ2lzdGVycyBkaXJlY3RseS4KKyAgKi8KK3VpbnQzMl90IFRJTUVSX09wZW4oVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMk1vZGUsIHVpbnQzMl90IHUzMkZyZXEpCit7CisgICAgdWludDMyX3QgdTMyQ2xrID0gVElNRVJfR2V0TW9kdWxlQ2xvY2sodGltZXIpOworICAgIHVpbnQzMl90IHUzMkNtcHIgPSAwVUwsIHUzMlByZXNjYWxlID0gMFVMOworCisgICAgLyogRmFzdGVzdCBwb3NzaWJsZSB0aW1lciB3b3JraW5nIGZyZXEgaXMgKHUzMkNsayAvIDIpLiBXaGlsZSBjbXByID0gMiwgcHJlc2NhbGVyID0gMC4gKi8KKyAgICBpZih1MzJGcmVxID4gKHUzMkNsayAvIDJVTCkpCisgICAgeworICAgICAgICB1MzJDbXByID0gMlVMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJDbXByID0gdTMyQ2xrIC8gdTMyRnJlcTsKKyAgICAgICAgdTMyUHJlc2NhbGUgPSAodTMyQ21wciA+PiAyNCk7ICAvKiBmb3IgMjQgYml0cyBDTVBEQVQgKi8KKyAgICAgICAgaWYgKHUzMlByZXNjYWxlID4gMFVMKQorICAgICAgICAgICAgdTMyQ21wciA9IHUzMkNtcHIgLyAodTMyUHJlc2NhbGUgKyAxVUwpOworICAgIH0KKworICAgIHRpbWVyLT5DVEwgPSB1MzJNb2RlIHwgdTMyUHJlc2NhbGU7CisgICAgdGltZXItPkNNUCA9IHUzMkNtcHI7CisKKyAgICByZXR1cm4odTMyQ2xrIC8gKHUzMkNtcHIgKiAodTMyUHJlc2NhbGUgKyAxVUwpKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFN0b3AgVGltZXIgQ291bnRpbmcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIHN0b3BzIHRpbWVyIGNvdW50aW5nIGFuZCBkaXNhYmxlIGFsbCB0aW1lciBpbnRlcnJ1cHQgZnVuY3Rpb24uCisgICovCit2b2lkIFRJTUVSX0Nsb3NlKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5DVEwgPSAwVUw7CisgICAgdGltZXItPkVYVENUTCA9IDBVTDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgQ3JlYXRlIGEgc3BlY2lmeSBEZWxheSBUaW1lCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMlVzZWMgICAgIERlbGF5IHBlcmlvZCBpbiBtaWNybyBzZWNvbmRzLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMTAwfjEwMDAwMDAgKDEwMCBtaWNybyBzZWNvbmQgfiAxIHNlY29uZCkuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGNyZWF0ZSBhIGRlbGF5IGxvb3AgZm9yIHUzMnVzZWMgbWljcm8gc2Vjb25kcyBieSB1c2luZyB0aW1lciBvbmUtc2hvdCBtb2RlLgorICAgICAgICBUaGlzIEFQSSBvdmVyd3JpdGVzIHRoZSByZWdpc3RlciBzZXR0aW5nIG9mIHRoZSB0aW1lciB1c2VkIHRvIGNvdW50IHRoZSBkZWxheSB0aW1lLgorICAgICAgICBUaGlzIEFQSSB1c2UgcG9sbGluZyBtb2RlLiBTbyB0aGVyZSBpcyBubyBuZWVkIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIHRoZSB0aW1lciBtb2R1bGUgdXNlZCB0byBnZW5lcmF0ZSBkZWxheS4KKyAgKi8KK3ZvaWQgVElNRVJfRGVsYXkoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMlVzZWMpCit7CisgICAgdWludDMyX3QgdTMyQ2xrID0gVElNRVJfR2V0TW9kdWxlQ2xvY2sodGltZXIpOworICAgIHVpbnQzMl90IHUzMlByZXNjYWxlID0gMFVMLCB1MzJEZWxheSA9IChTeXN0ZW1Db3JlQ2xvY2sgLyB1MzJDbGspICsgMVVMOworICAgIHVpbnQzMl90IHUzMkNtcHIsIHUzMk5zZWNQZXJUaWNrOworCisgICAgLyogQ2xlYXIgY3VycmVudCB0aW1lciBjb25maWd1cmF0aW9uICovCisgICAgdGltZXItPkNUTCA9IDBVTDsKKyAgICB0aW1lci0+RVhUQ1RMID0gMFVMOworCisgICAgaWYodTMyQ2xrIDw9IDEwMDAwMDBVTCkgICAvKiBtaW4gZGVsYXkgaXMgMTAwMCB1cyBpZiB0aW1lciBjbG9jayBzb3VyY2UgaXMgPD0gMSBNSHogKi8KKyAgICB7CisgICAgICAgIGlmKHUzMlVzZWMgPCAxMDAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlVzZWMgPSAxMDAwVUw7CisgICAgICAgIH0KKyAgICAgICAgaWYodTMyVXNlYyA+IDEwMDAwMDBVTCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyVXNlYyA9IDEwMDAwMDBVTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZih1MzJVc2VjIDwgMTAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMlVzZWMgPSAxMDBVTDsKKyAgICAgICAgfQorICAgICAgICBpZih1MzJVc2VjID4gMTAwMDAwMFVMKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJVc2VjID0gMTAwMDAwMFVMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYodTMyQ2xrIDw9IDEwMDAwMDBVTCkKKyAgICB7CisgICAgICAgIHUzMlByZXNjYWxlID0gMFVMOworICAgICAgICB1MzJOc2VjUGVyVGljayA9IDEwMDAwMDAwMDBVTCAvIHUzMkNsazsKKyAgICAgICAgdTMyQ21wciA9ICh1MzJVc2VjICogMTAwMFVMKSAvIHUzMk5zZWNQZXJUaWNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJDbXByID0gdTMyVXNlYyAqICh1MzJDbGsgLyAxMDAwMDAwVUwpOworICAgICAgICB1MzJQcmVzY2FsZSA9ICh1MzJDbXByID4+IDI0KTsgIC8qIGZvciAyNCBiaXRzIENNUERBVCAqLworICAgICAgICBpZiAodTMyUHJlc2NhbGUgPiAwVUwpCisgICAgICAgICAgICB1MzJDbXByID0gdTMyQ21wciAvICh1MzJQcmVzY2FsZSArIDFVTCk7CisgICAgfQorCisgICAgdGltZXItPkNNUCA9IHUzMkNtcHI7CisgICAgdGltZXItPkNUTCA9IFRJTUVSX0NUTF9DTlRFTl9Nc2sgfCBUSU1FUl9PTkVTSE9UX01PREUgfCB1MzJQcmVzY2FsZTsKKworICAgIC8qCisgICAgICAgIFdoZW4gc3lzdGVtIGNsb2NrIGlzIGZhc3RlciB0aGFuIHRpbWVyIGNsb2NrLCBpdCBpcyBwb3NzaWJsZSB0aW1lciBhY3RpdmUgYml0IGNhbm5vdCBzZXQgaW4gdGltZSB3aGlsZSB3ZSBjaGVjayBpdC4KKyAgICAgICAgQW5kIHRoZSB3aGlsZSBsb29wIGJlbG93IHJldHVybiBpbW1lZGlhdGVseSwgc28gcHV0IGEgdGlueSBkZWxheSBoZXJlIGFsbG93aW5nIHRpbWVyIHN0YXJ0IGNvdW50aW5nIGFuZCByYWlzZSBhY3RpdmUgZmxhZy4KKyAgICAqLworICAgIGZvcig7IHUzMkRlbGF5ID4gMFVMOyB1MzJEZWxheS0tKQorICAgIHsKKyAgICAgICAgX19OT1AoKTsKKyAgICB9CisKKyAgICB3aGlsZSh0aW1lci0+Q1RMICYgVElNRVJfQ1RMX0FDVFNUU19Nc2spIHt9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBUaW1lciBDYXB0dXJlIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkNhcE1vZGUgIFRpbWVyIGNhcHR1cmUgbW9kZS4gQ291bGQgYmUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfQ0FQVFVSRV9GUkVFX0NPVU5USU5HX01PREUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfQ0FQVFVSRV9DT1VOVEVSX1JFU0VUX01PREUKKyAgKiBAcGFyYW1baW5dICB1MzJFZGdlICAgICBUaW1lciBjYXB0dXJlIHRyaWdnZXIgZWRnZS4gUG9zc2libGUgdmFsdWVzIGFyZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUSU1FUl9DQVBUVVJFX0VWRU5UX0ZBTExJTkcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfQ0FQVFVSRV9FVkVOVF9SSVNJTkcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfQ0FQVFVSRV9FVkVOVF9GQUxMSU5HX1JJU0lORworICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUSU1FUl9DQVBUVVJFX0VWRU5UX1JJU0lOR19GQUxMSU5HCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX0NBUFRVUkVfRVZFTlRfR0VUX0xPV19QRVJJT0QKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfQ0FQVFVSRV9FVkVOVF9HRVRfSElHSF9QRVJJT0QKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZW5hYmxlIHRpbWVyIGNhcHR1cmUgZnVuY3Rpb24gd2l0aCBzcGVjaWZ5IGNhcHR1cmUgdHJpZ2dlciBlZGdlIFxuCisgICogICAgICAgICAgICAgdG8gZ2V0IGN1cnJlbnQgY291bnRlciB2YWx1ZSBvciByZXNldCBjb3VudGVyIHZhbHVlIHRvIDAuCisgICAgICAgIFRpbWVyIGZyZXF1ZW5jeSBzaG91bGQgYmUgY29uZmlndXJlZCBzZXBhcmF0ZWx5IGJ5IHVzaW5nIFxyZWYgVElNRVJfT3BlbiBBUEksIG9yIHByb2dyYW0gcmVnaXN0ZXJzIGRpcmVjdGx5LgorICAqLwordm9pZCBUSU1FUl9FbmFibGVDYXB0dXJlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJDYXBNb2RlLCB1aW50MzJfdCB1MzJFZGdlKQoreworICAgIHRpbWVyLT5FWFRDVEwgPSAodGltZXItPkVYVENUTCAmIH4oVElNRVJfRVhUQ1RMX0NBUEZVTkNTX01zayB8IFRJTUVSX0VYVENUTF9DQVBFREdFX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAgdTMyQ2FwTW9kZSB8IHUzMkVkZ2UgfCBUSU1FUl9FWFRDVExfQ0FQRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFRpbWVyIENhcHR1cmUgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgdGltZXIgY2FwdHVyZSBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgVElNRVJfRGlzYWJsZUNhcHR1cmUoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkVYVENUTCAmPSB+VElNRVJfRVhUQ1RMX0NBUEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFRpbWVyIENvdW50ZXIgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyRWRnZSAgICAgRGV0ZWN0aW9uIGVkZ2Ugb2YgY291bnRlciBwaW4uIENvdWxkIGJlIGV0aGVyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX0NPVU5URVJfRVZFTlRfRkFMTElORywgb3IKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfQ09VTlRFUl9FVkVOVF9SSVNJTkcKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgdGhlIHRpbWVyIGNvdW50ZXIgZnVuY3Rpb24gd2l0aCBzcGVjaWZ5IGRldGVjdGlvbiBlZGdlLgorICAgICAgICBUaW1lciBjb21wYXJlIHZhbHVlIHNob3VsZCBiZSBjb25maWd1cmVkIHNlcGFyYXRlbHkgYnkgdXNpbmcgXHJlZiBUSU1FUl9TRVRfQ01QX1ZBTFVFIG1hY3JvIG9yIHByb2dyYW0gcmVnaXN0ZXJzIGRpcmVjdGx5LgorICAgICAgICBXaGlsZSB1c2luZyBldmVudCBjb3VudGVyIGZ1bmN0aW9uLCBccmVmIFRJTUVSX1RPR0dMRV9NT0RFIGNhbm5vdCBzZXQgYXMgdGltZXIgb3BlcmF0aW9uIG1vZGUuCisgICovCit2b2lkIFRJTUVSX0VuYWJsZUV2ZW50Q291bnRlcihUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyRWRnZSkKK3sKKyAgICB0aW1lci0+RVhUQ1RMID0gKHRpbWVyLT5FWFRDVEwgJiB+VElNRVJfRVhUQ1RMX0NOVFBIQVNFX01zaykgfCB1MzJFZGdlOworICAgIHRpbWVyLT5DVEwgfD0gVElNRVJfQ1RMX0VYVENOVEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUaW1lciBDb3VudGVyIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIHRpbWVyIGV2ZW50IGNvdW50ZXIgZnVuY3Rpb24uCisgICovCit2b2lkIFRJTUVSX0Rpc2FibGVFdmVudENvdW50ZXIoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPkNUTCAmPSB+VElNRVJfQ1RMX0VYVENOVEVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgR2V0IFRpbWVyIENsb2NrIEZyZXF1ZW5jeQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgVGltZXIgY2xvY2sgZnJlcXVlbmN5CisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGdldCB0aGUgdGltZXIgY2xvY2sgZnJlcXVlbmN5LgorICAgICAgICBUaGlzIEFQSSBjYW5ub3QgcmV0dXJuIGNvcnJlY3QgY2xvY2sgcmF0ZSBpZiB0aW1lciBzb3VyY2UgaXMgZnJvbSBleHRlcm5hbCBjbG9jayBpbnB1dC4KKyAgKi8KK3VpbnQzMl90IFRJTUVSX0dldE1vZHVsZUNsb2NrKFRJTUVSX1QgKnRpbWVyKQoreworI2lmIDEKKyAgICByZXR1cm4gX19ISVJDOworI2Vsc2UKKyAgICB1aW50MzJfdCB1MzJTcmMsIHUzMkNsayA9IF9fSElSQzsKKyAgICBjb25zdCB1aW50MzJfdCBhdTMyQ2xrW10gPSB7X19IWFQsIF9fTFhULCAwVUwsIDBVTCwgMFVMLCBfX0xJUkMsIDBVTCwgX19ISVJDfTsKKworICAgIGlmKHRpbWVyID09IFRJTUVSMCkKKyAgICB7CisgICAgICAgIHUzMlNyYyA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShUTVIwX01PRFVMRSk7CisgICAgfQorICAgIGVsc2UgaWYodGltZXIgPT0gVElNRVIxKQorICAgIHsKKyAgICAgICAgdTMyU3JjID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFRNUjFfTU9EVUxFKTsKKyAgICB9CisgICAgZWxzZSBpZigodGltZXIgPT0gVElNRVIyKSB8fCAodGltZXIgPT0gVElNRVIyX05TKSkKKyAgICB7CisgICAgICAgIHUzMlNyYyA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShUTVIyX01PRFVMRSk7CisgICAgfQorICAgIGVsc2UgaWYoKHRpbWVyID09IFRJTUVSMykgfHwgKHRpbWVyID09IFRJTUVSM19OUykpCisgICAgeworICAgICAgICB1MzJTcmMgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVE1SM19NT0RVTEUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMFVMOworICAgIH0KKworICAgIGlmKHUzMlNyYyA9PSAyVUwpCisgICAgeworICAgICAgICBpZigodGltZXIgPT0gVElNRVIwKSB8fCAodGltZXIgPT0gVElNRVIxKSkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdTMyQ2xrID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMkNsayA9IGF1MzJDbGtbdTMyU3JjXTsKKyAgICB9CisKKyAgICByZXR1cm4gdTMyQ2xrOworI2VuZGlmCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBUaW1lciBGcmVxdWVuY3kgQ291bnRlciBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyRHJvcENvdW50ICAgIFRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaW4gdGhpcyBCU1AKKyAgKiBAcGFyYW1baW5dICB1MzJUaW1lb3V0ICAgICAgVGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdCBpbiB0aGlzIEJTUAorICAqIEBwYXJhbVtpbl0gIHUzMkVuYWJsZUludCAgICBFbmFibGUgaW50ZXJydXB0IGFzc2VydGlvbiBhZnRlciBjYXB0dXJlIGNvbXBsZXRlIG9yIG5vdC4gVmFsaWQgdmFsdWVzIGFyZSBUUlVFIGFuZCBGQUxTRQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBpbnB1dCBldmVudCBmcmVxdWVuY3kuIEFmdGVyIGVuYWJsZQorICAqICAgICAgICAgICAgIHRoaXMgZnVuY3Rpb24sIGEgcGFpciBvZiB0aW1lcnMsIFRJTUVSMCBhbmQgVElNRVIxLCBvciBUSU1FUjIgYW5kIFRJTUVSMworICAqICAgICAgICAgICAgIHdpbGwgYmUgY29uZmlndXJlZCBmb3IgdGhpcyBmdW5jdGlvbi4gVGhlIG1vZGUgdXNlZCB0byBjYWxjdWxhdGUgaW5wdXQKKyAgKiAgICAgICAgICAgICBldmVudCBmcmVxdWVuY3kgaXMgbWVudGlvbmVkIGFzICJJbnRlciBUaW1lciBUcmlnZ2VyIE1vZGUiIGluIFRlY2huaWNhbAorICAqICAgICAgICAgICAgIFJlZmVyZW5jZSBNYW51YWwuCisgICovCit2b2lkIFRJTUVSX0VuYWJsZUZyZXFDb3VudGVyKFRJTUVSX1QgKnRpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJEcm9wQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMlRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMkVuYWJsZUludCkKK3sKKyAgICBUSU1FUl9UICp0OyAgICAvKiBzdG9yZSB0aGUgdGltZXIgYmFzZSB0byBjb25maWd1cmUgY29tcGFyZSB2YWx1ZSAqLworCisgICAgKHZvaWQpdTMyRHJvcENvdW50OworICAgICh2b2lkKXUzMlRpbWVvdXQ7CisKKyAgICBpZih0aW1lciA9PSBUSU1FUjApCisgICAgeworICAgICAgICB0ID0gVElNRVIxOworICAgIH0KKyAgICBlbHNlIGlmKHRpbWVyID09IFRJTUVSMikKKyAgICB7CisgICAgICAgIHQgPSBUSU1FUjM7CisgICAgfQorICAgIGVsc2UgaWYodGltZXIgPT0gVElNRVIyX05TKQorICAgIHsKKyAgICAgICAgdCA9IFRJTUVSM19OUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdCA9IDBVTDsKKyAgICB9CisKKyAgICBpZih0ICE9IDApCisgICAgeworICAgICAgICB0LT5DTVAgPSAweEZGRkZGRlVMOworICAgICAgICB0LT5FWFRDVEwgPSB1MzJFbmFibGVJbnQgPyBUSU1FUl9FWFRDVExfQ0FQSUVOX01zayA6IDBVTDsKKyAgICAgICAgdGltZXItPkNUTCA9IFRJTUVSX0NUTF9JTlRSR0VOX01zayB8IFRJTUVSX0NUTF9DTlRFTl9Nc2s7CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFRpbWVyIEZyZXF1ZW5jeSBDb3VudGVyIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgVGltZXIgZnJlcXVlbmN5IGNvdW50ZXIgZnVuY3Rpb24uCisgICovCit2b2lkIFRJTUVSX0Rpc2FibGVGcmVxQ291bnRlcihUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+Q1RMICY9IH5USU1FUl9DVExfSU5UUkdFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNlbGVjdCBJbnRlcnJ1cHQgU291cmNlIHRvIFRyaWdnZXIgb3RoZXJzIE1vZHVsZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMlNyYyAgU2VsZWN0cyB0aGUgaW50ZXJydXB0IHNvdXJjZSB0byB0cmlnZ2VyIG90aGVyIG1vZHVsZXMuIENvdWxkIGJlOgorICAqICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRJTUVSX1RSR1NSQ19USU1FT1VUX0VWRU5UCisgICogICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfVFJHU1JDX0NBUFRVUkVfRVZFTlQKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZWxlY3QgdGhlIGludGVycnVwdCBzb3VyY2UgdXNlZCB0byB0cmlnZ2VyIG90aGVyIG1vZHVsZXMuCisgICovCit2b2lkIFRJTUVSX1NldFRyaWdnZXJTb3VyY2UoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMlNyYykKK3sKKyAgICB0aW1lci0+VFJHQ1RMID0gKHRpbWVyLT5UUkdDVEwgJiB+VElNRVJfVFJHQ1RMX1RSR1NTRUxfTXNrKSB8IHUzMlNyYzsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgU2V0IE1vZHVsZXMgVHJpZ2dlciBieSBUaW1lciBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBtYXNrIG9mIG1vZHVsZXMgKEVQV00sIEVBREMsIERBQyBhbmQgUERNQSkgdHJpZ2dlciBieSB0aW1lci4gSXMgdGhlIGNvbWJpbmF0aW9uIG9mCisgICogICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfVFJHX1RPX0VQV00sCisgICogICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfVFJHX1RPX0VBREMsCisgICogICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVElNRVJfVFJHX1RPX0RBQyBhbmQKKyAgKiAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUSU1FUl9UUkdfVE9fUERNQQorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBFUFdNLCBFQURDLCBEQUMgYW5kIFBETUEgbW9kdWxlIHRyaWdnZXJlZCBieSB0aW1lciBpbnRlcnJ1cHQgZXZlbnQuCisgICovCit2b2lkIFRJTUVSX1NldFRyaWdnZXJUYXJnZXQoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdGltZXItPlRSR0NUTCA9ICh0aW1lci0+VFJHQ1RMICYgfihUSU1FUl9UUkdDVExfVFJHRVBXTV9Nc2sgfCBUSU1FUl9UUkdDVExfVFJHREFDX01zayB8IFRJTUVSX1RSR0NUTF9UUkdFQURDX01zayB8IFRJTUVSX1RSR0NUTF9UUkdQRE1BX01zaykpIHwgdTMyTWFzazsKK30KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBUSU1FUl9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBUSU1FUl9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdGltZXJfcHdtLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy90aW1lcl9wd20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTdjYWJjCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdGltZXJfcHdtLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB0aW1lci5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBUaW1lciBQV00gQ29udHJvbGxlcihUaW1lciBQV00pIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVElNRVJfUFdNX0RyaXZlciBUSU1FUiBQV00gRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVElNRVJfUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyBUSU1FUiBQV00gRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgUFdNIENvdW50ZXIgQ2xvY2sgU291cmNlCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJDbnRDbGtTcmMgICAgUFdNIGNvdW50ZXIgY2xvY2sgc291cmNlLCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ05UUl9DTEtTUkNfVE1SX0NMSworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ05UUl9DTEtTUkNfVElNRVIwX0lOVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ05UUl9DTEtTUkNfVElNRVIxX0lOVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ05UUl9DTEtTUkNfVElNRVIyX0lOVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQ05UUl9DTEtTUkNfVElNRVIzX0lOVAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBQV00gY291bnRlciBjbG9jayBzb3VyY2UuCisgICovCit2b2lkIFRQV01fU2V0Q291bnRlckNsb2NrU291cmNlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJDbnRDbGtTcmMpCit7CisgICAgKHRpbWVyKS0+UFdNQ0xLU1JDID0gKCh0aW1lciktPlBXTUNMS1NSQyAmIH5USU1FUl9QV01DTEtTUkNfQ0xLU1JDX01zaykgfCB1MzJDbnRDbGtTcmM7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIENvbmZpZ3VyZSBQV00gT3V0cHV0IEZyZXF1ZW5jeSBhbmQgRHV0eSBDeWNsZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyRnJlcXVlbmN5ICAgIFRhcmdldCBnZW5lcmF0b3IgZnJlcXVlbmN5LgorICAqIEBwYXJhbVtpbl0gIHUzMkR1dHlDeWNsZSAgICBUYXJnZXQgZ2VuZXJhdG9yIGR1dHkgY3ljbGUgcGVyY2VudGFnZS4gVmFsaWQgcmFuZ2UgYXJlIGJldHdlZW4gMH4xMDAuIDEwIG1lYW5zIDEwJSwgMjAgbWVhbnMgMjAlLi4uCisgICoKKyAgKiBAcmV0dXJuICAgICBOZWFyZXN0IGZyZXF1ZW5jeSBjbG9jayBpbiBuYW5vIHNlY29uZAorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBjb25maWd1cmUgUFdNIG91dHB1dCBmcmVxdWVuY3kgYW5kIGR1dHkgY3ljbGUgaW4gdXAgY291bnQgdHlwZSBhbmQgYXV0by1yZWxvYWQgb3BlcmF0aW9uIG1vZGUuCisgICAgICAgIFRoaXMgQVBJIGlzIG9ubHkgYXZhaWxhYmxlIGlmIFRpbWVyIFBXTSBjb3VudGVyIGNsb2NrIHNvdXJjZSBpcyBmcm9tIFRNUnhfQ0xLLgorICAqLwordWludDMyX3QgVFBXTV9Db25maWdPdXRwdXRGcmVxQW5kRHV0eShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyRnJlcXVlbmN5LCB1aW50MzJfdCB1MzJEdXR5Q3ljbGUpCit7CisgICAgdWludDMyX3QgdTMyUFdNQ2xvY2tGcmVxLCB1MzJUYXJnZXRGcmVxOworICAgIHVpbnQzMl90IHUzMlByZXNjYWxlciA9IDB4MTAwMFVMLCB1MzJQZXJpb2QgPSAxVUwsIHUzMkNNUDsKKworICAgIGlmKCh0aW1lciA9PSBUSU1FUjApIHx8ICh0aW1lciA9PSBUSU1FUjEpKQorICAgIHsKKyAgICAgICAgdTMyUFdNQ2xvY2tGcmVxID0gQ0xLX0dldFBDTEswRnJlcSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJQV01DbG9ja0ZyZXEgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorCisgICAgLyogQ2FsY3VsYXRlIHUxNlBFUklPRCBhbmQgdTE2UFNDICovCisgICAgZm9yKHUzMlByZXNjYWxlciA9IDFVTDsgdTMyUHJlc2NhbGVyIDw9IDB4MTAwMFVMOyB1MzJQcmVzY2FsZXIrKykKKyAgICB7CisgICAgICAgIHUzMlBlcmlvZCA9ICh1MzJQV01DbG9ja0ZyZXEgLyB1MzJQcmVzY2FsZXIpIC8gdTMyRnJlcXVlbmN5OworCisgICAgICAgIC8qIElmIHRhcmdldCB1MzJQZXJpb2QgaXMgbGFyZ2VyIHRoYW4gMHgxMDAwMCwgbmVlZCB0byB1c2UgYSBsYXJnZXIgcHJlc2NhbGVyICovCisgICAgICAgIGlmKHUzMlBlcmlvZCA8PSAweDEwMDAwVUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIC8qIFN0b3JlIHJldHVybiB2YWx1ZSBoZXJlICdjb3Mgd2UncmUgZ29ubmEgY2hhbmdlIHUzMlByZXNjYWxlciAmIHUzMlBlcmlvZCB0byB0aGUgcmVhbCB2YWx1ZSB0byBmaWxsIGludG8gcmVnaXN0ZXIgKi8KKyAgICB1MzJUYXJnZXRGcmVxID0gKHUzMlBXTUNsb2NrRnJlcSAvIHUzMlByZXNjYWxlcikgLyB1MzJQZXJpb2Q7CisKKyAgICAvKiBTZXQgUFdNIHRvIHVwIGNvdW50IHR5cGUgKi8KKyAgICB0aW1lci0+UFdNQ1RMID0gKHRpbWVyLT5QV01DVEwgJiB+VElNRVJfUFdNQ1RMX0NOVFRZUEVfTXNrKSB8IChUUFdNX1VQX0NPVU5UIDw8IFRJTUVSX1BXTUNUTF9DTlRUWVBFX1Bvcyk7CisKKyAgICAvKiBTZXQgUFdNIHRvIGF1dG8tcmVsb2FkIG1vZGUgKi8KKyAgICB0aW1lci0+UFdNQ1RMID0gKHRpbWVyLT5QV01DVEwgJiB+VElNRVJfUFdNQ1RMX0NOVE1PREVfTXNrKSB8IChUUFdNX0FVVE9fUkVMT0FEX01PREUgPDwgVElNRVJfUFdNQ1RMX0NOVE1PREVfUG9zKTsKKworICAgIC8qIENvbnZlcnQgdG8gcmVhbCByZWdpc3RlciB2YWx1ZSAqLworICAgIFRQV01fU0VUX1BFUklPRCh0aW1lciwgKHUzMlBlcmlvZCAtIDFVTCkpOworICAgIGlmKHUzMkR1dHlDeWNsZSkKKyAgICB7CisgICAgICAgIHUzMkNNUCA9ICh1MzJEdXR5Q3ljbGUgKiB1MzJQZXJpb2QpIC8gMTAwVUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMkNNUCA9IDBVTDsKKyAgICB9CisKKyAgICBUUFdNX1NFVF9DTVBEQVQodGltZXIsIHUzMkNNUCk7CisKKyAgICBUUFdNX1NFVF9QUkVTQ0FMRVIodGltZXIsICh1MzJQcmVzY2FsZXIgLSAxVUwpKTsKKworICAgIHJldHVybiAodTMyVGFyZ2V0RnJlcSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBEZWFkLVRpbWUgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyRFRDb3VudCAgRGVhZC1UaW1lIGR1cmF0aW9uIGluIFBXTSBjbG9jayBjb3VudCwgdmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB4MH4weEZGRiwgYnV0IDB4MCBtZWFucyB0aGVyZSBpcyBubyBEZWFkLVRpbWUgaW5zZXJ0aW9uLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBEZWFkLVRpbWUgZnVuY3Rpb24gYW5kIGNvdW50ZXIgc291cmNlIGlzIHRoZSBzYW1lIGFzIFRpbWVyIFBXTSBjbG9jayBzb3VyY2UuCisgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgVFBXTV9FbmFibGVEZWFkVGltZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyRFRDb3VudCkKK3sKKyAgICB0aW1lci0+UFdNRFRDVEwgPSBUSU1FUl9QV01EVENUTF9EVEVOX01zayB8IHUzMkRUQ291bnQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBEZWFkLVRpbWUgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyRFRDb3VudCAgRGVhZC1UaW1lIGR1cmF0aW9uIGluIFBXTSBjbG9jayBjb3VudCwgdmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB4MH4weEZGRiwgYnV0IDB4MCBtZWFucyB0aGVyZSBpcyBubyBEZWFkLVRpbWUgaW5zZXJ0aW9uLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBEZWFkLVRpbWUgZnVuY3Rpb24gYW5kIGNvdW50ZXIgc291cmNlIGlzIHRoZSBUaW1lciBQV00gY2xvY2sgc291cmNlIHdpdGggcHJlc2NhbGUuCisgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgVFBXTV9FbmFibGVEZWFkVGltZVdpdGhQcmVzY2FsZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyRFRDb3VudCkKK3sKKyAgICB0aW1lci0+UFdNRFRDVEwgPSBUSU1FUl9QV01EVENUTF9EVENLU0VMX01zayB8IFRJTUVSX1BXTURUQ1RMX0RURU5fTXNrIHwgdTMyRFRDb3VudDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBEZWFkLVRpbWUgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBEZWFkLXRpbWUgb2Ygc2VsZWN0ZWQgY2hhbm5lbC4KKyAgICAgICAgVGhlIHJlZ2lzdGVyIHdyaXRlLXByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBUUFdNX0Rpc2FibGVEZWFkVGltZShUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+UFdNRFRDVEwgPSAweDBVTDsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIFBXTSBDb3VudGVyCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBQV00gZ2VuZXJhdG9yIGFuZCBzdGFydCBjb3VudGVyIGNvdW50aW5nLgorICAqLwordm9pZCBUUFdNX0VuYWJsZUNvdW50ZXIoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPlBXTUNUTCB8PSBUSU1FUl9QV01DVExfQ05URU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIFBXTSBHZW5lcmF0b3IKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBQV00gY291bnRlciBpbW1lZGlhdGVseSBieSBjbGVhciBDTlRFTiAoVElNRVJ4X1BXTUNUTFswXSkgYml0LgorICAqLwordm9pZCBUUFdNX0Rpc2FibGVDb3VudGVyKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5QV01DVEwgJj0gflRJTUVSX1BXTUNUTF9DTlRFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBUcmlnZ2VyIEFEQworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyQ29uZGl0aW9uICAgIFRoZSBjb25kaXRpb24gdG8gdHJpZ2dlciBBREMuIEl0IGNvdWxkIGJlIG9uZSBvZiBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RSSUdHRVJfQURDX0FUX1pFUk9fUE9JTlQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RSSUdHRVJfQURDX0FUX1BFUklPRF9QT0lOVAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVFJJR0dFUl9BRENfQVRfWkVST19PUl9QRVJJT0RfUE9JTlQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RSSUdHRVJfQURDX0FUX0NPTVBBUkVfVVBfQ09VTlRfUE9JTlQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RSSUdHRVJfQURDX0FUX0NPTVBBUkVfRE9XTl9DT1VOVF9QT0lOVAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBzcGVjaWZpZWQgY291bnRlciBjb21wYXJlIGV2ZW50IHRvIHRyaWdnZXIgQURDLgorICAqLwordm9pZCBUUFdNX0VuYWJsZVRyaWdnZXJBREMoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkNvbmRpdGlvbikKK3sKKyAgICB0aW1lci0+UFdNRUFEQ1RTID0gVElNRVJfUFdNRUFEQ1RTX1RSR0VOX01zayB8IHUzMkNvbmRpdGlvbjsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRGlzYWJsZSBUcmlnZ2VyIEFEQworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGNvdW50ZXIgY29tcGFyZSBldmVudCB0byB0cmlnZ2VyIEFEQy4KKyAgKi8KK3ZvaWQgVFBXTV9EaXNhYmxlVHJpZ2dlckFEQyhUSU1FUl9UICp0aW1lcikKK3sKKyAgICB0aW1lci0+UFdNRUFEQ1RTID0gMHgwVUw7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBGYXVsdCBCcmFrZSBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyQ0gwTGV2ZWwgICAgIFBXTXhfQ0gwIG91dHB1dCBsZXZlbCB3aGlsZSBmYXVsdCBicmFrZSBldmVudCBvY2N1cnMuIFZhbGlkIHZhbHVlIGlzIG9uZSBvZiBmb2xsb3dpbmcgc2V0dGluZworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fT1VUUFVUX1RPR0dMRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fT1VUUFVUX05PVEhJTkcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX09VVFBVVF9MT1cKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX09VVFBVVF9ISUdICisgICogQHBhcmFtW2luXSAgdTMyQ0gxTGV2ZWwgICAgIFBXTXhfQ0gxIG91dHB1dCBsZXZlbCB3aGlsZSBmYXVsdCBicmFrZSBldmVudCBvY2N1cnMuIFZhbGlkIHZhbHVlIGlzIG9uZSBvZiBmb2xsb3dpbmcgc2V0dGluZworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fT1VUUFVUX1RPR0dMRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fT1VUUFVUX05PVEhJTkcKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX09VVFBVVF9MT1cKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX09VVFBVVF9ISUdICisgICogQHBhcmFtW2luXSAgdTMyQnJha2VTb3VyY2UgIEZhdWx0IGJyYWtlIHNvdXJjZSwgY29tYmluYXRpb24gb2YgZm9sbG93aW5nIHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0VER0VfQUNNUDAKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9FREdFX0FDTVAxCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9TT1VSQ0VfRURHRV9CS1BJTgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0VER0VfU1lTX0NTUworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0VER0VfU1lTX0JPRAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0VER0VfU1lTX0NPUgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0VER0VfU1lTX1JBTQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX0FDTVAwCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfQUNNUDEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9MRVZFTF9CS1BJTgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX1NZU19DU1MKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX1NPVVJDRV9MRVZFTF9TWVNfQk9ECisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9TT1VSQ0VfTEVWRUxfU1lTX0NPUgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfU09VUkNFX0xFVkVMX1NZU19SQU0KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgZmF1bHQgYnJha2UgZnVuY3Rpb24uCisgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgVFBXTV9FbmFibGVGYXVsdEJyYWtlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJDSDBMZXZlbCwgdWludDMyX3QgdTMyQ0gxTGV2ZWwsIHVpbnQzMl90IHUzMkJyYWtlU291cmNlKQoreworICAgIHRpbWVyLT5QV01GQUlMQlJLIHw9ICgodTMyQnJha2VTb3VyY2UgPj4gMTYpICYgMHhGVUwpOworICAgIHRpbWVyLT5QV01CUktDVEwgPSAodGltZXItPlBXTUJSS0NUTCAmIH4oVElNRVJfUFdNQlJLQ1RMX0JSS0FFVkVOX01zayB8IFRJTUVSX1BXTUJSS0NUTF9CUktBT0REX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKHUzMkJyYWtlU291cmNlICYgMHhGRkZGVUwpIHwgKHUzMkNIMExldmVsIDw8IFRJTUVSX1BXTUJSS0NUTF9CUktBRVZFTl9Qb3MpIHwgKHUzMkNIMUxldmVsIDw8IFRJTUVSX1BXTUJSS0NUTF9CUktBT0REX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEVuYWJsZSBGYXVsdCBCcmFrZSBJbnRlcnJ1cHQKKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqIEBwYXJhbVtpbl0gIHUzMkludFNvdXJjZSAgICBJbnRlcnJ1cHQgc291cmNlLCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfRURHRQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQlJBS0VfTEVWRUwKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgZmF1bHQgYnJha2UgaW50ZXJydXB0LgorICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFRQV01fRW5hYmxlRmF1bHRCcmFrZUludChUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMySW50U291cmNlKQoreworICAgIHRpbWVyLT5QV01JTlRFTjEgfD0gdTMySW50U291cmNlOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIEZhdWx0IEJyYWtlIEludGVycnVwdAorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMySW50U291cmNlICAgIEludGVycnVwdCBzb3VyY2UsIGNvdWxkIGJlIG9uZSBvZiBmb2xsb3dpbmcgc291cmNlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9FREdFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9MRVZFTAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgZmF1bHQgYnJha2UgaW50ZXJydXB0LgorICAgICAgICBUaGUgcmVnaXN0ZXIgd3JpdGUtcHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgICovCit2b2lkIFRQV01fRGlzYWJsZUZhdWx0QnJha2VJbnQoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkludFNvdXJjZSkKK3sKKyAgICB0aW1lci0+UFdNSU5URU4xICY9IH51MzJJbnRTb3VyY2U7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIEluZGljYXRlIEZhdWx0IEJyYWtlIEludGVycnVwdCBGbGFnCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJJbnRTb3VyY2UgICAgSW50ZXJydXB0IHNvdXJjZSwgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX0VER0UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JSQUtFX0xFVkVMCisgICoKKyAgKiBAcmV0dXJuICAgICBGYXVsdCBicmFrZSBpbnRlcnJ1cHQgZmxhZyBvZiBzcGVjaWZpZWQgc291cmNlCisgICogQHJldHZhbCAgICAgMCAgICAgICBGYXVsdCBicmFrZSBpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cnJlZAorICAqIEByZXR2YWwgICAgIDEgICAgICAgRmF1bHQgYnJha2UgaW50ZXJydXB0IG9jY3VycmVkCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgZmF1bHQgYnJha2UgaW50ZXJydXB0IGZsYWcgb2NjdXJyZWQgb3Igbm90IG9mIHNlbGVjdGVkIHNvdXJjZS4KKyAgKi8KK3VpbnQzMl90IFRQV01fR2V0RmF1bHRCcmFrZUludEZsYWcoVElNRVJfVCAqdGltZXIsIHVpbnQzMl90IHUzMkludFNvdXJjZSkKK3sKKyAgICByZXR1cm4gKCh0aW1lci0+UFdNSU5UU1RTMSAmICgweDNVTCA8PCB1MzJJbnRTb3VyY2UpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIENsZWFyIEZhdWx0IEJyYWtlIEludGVycnVwdCBGbGFncworICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMySW50U291cmNlICAgIEludGVycnVwdCBzb3VyY2UsIGNvdWxkIGJlIG9uZSBvZiBmb2xsb3dpbmcgc291cmNlCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9FREdFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CUkFLRV9MRVZFTAorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIGZhdWx0IGJyYWtlIGludGVycnVwdCBmbGFncyBvZiBzZWxlY3RlZCBzb3VyY2UuCisgICAgICAgIFRoZSByZWdpc3RlciB3cml0ZS1wcm90ZWN0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKi8KK3ZvaWQgVFBXTV9DbGVhckZhdWx0QnJha2VJbnRGbGFnKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJJbnRTb3VyY2UpCit7CisgICAgdGltZXItPlBXTUlOVFNUUzEgPSAoMHgzVUwgPDwgdTMySW50U291cmNlKTsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIExvYWQgTW9kZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBUaW1lciBtb2R1bGUuIEl0IGNvdWxkIGJlIFRJTUVSMCwgVElNRVIxLCBUSU1FUjIsIFRJTUVSMy4KKyAgKiBAcGFyYW1baW5dICB1MzJMb2FkTW9kZSAgVGltZXIgUFdNIGNvdW50ZXIgbG9hZGluZyBtb2RlLCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIG1vZGUKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fTE9BRF9NT0RFX1BFUklPRAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9MT0FEX01PREVfSU1NRURJQVRFCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0xPQURfTU9ERV9DRU5URVIKKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgbG9hZCBtb2RlIG9mIHNlbGVjdGVkIGNoYW5uZWwuCisgICAgICAgIFRoZSBkZWZhdWx0IGxvYWRpbmcgbW9kZSBpcyBwZXJpb2QgbG9hZGluZyBtb2RlLgorICAqLwordm9pZCBUUFdNX1NldExvYWRNb2RlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJMb2FkTW9kZSkKK3sKKyAgICB0aW1lci0+UFdNQ1RMID0gKHRpbWVyLT5QV01DVEwgJiB+KFRJTUVSX1BXTUNUTF9JTU1MREVOX01zayB8IFRJTUVSX1BXTUNUTF9DVFJMRF9Nc2spKSB8IHUzMkxvYWRNb2RlOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBFbmFibGUgQnJha2UgUGluIE5vaXNlIEZpbHRlciBGdW5jdGlvbgorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyQnJha2VQaW5TcmMgIFRoZSBleHRlcm5hbCBicmFrZSBwaW4gc291cmNlLCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVE1fQlJBS0UwCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UTV9CUkFLRTEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RNX0JSQUtFMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVE1fQlJBS0UzCisgICogQHBhcmFtW2luXSAgdTMyRGVib3VuY2VDbnQgIFRoaXMgdmFsdWUgY29udHJvbHMgdGhlIHJlYWwgZGVib3VuY2Ugc2FtcGxlIHRpbWUuCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgZGVib3VuY2Ugc2FtcGxlIHRpbWUgaXMgKGRlYm91bmNlIHNhbXBsZSBjbG9jayBwZXJpb2QpICogKHUzMkRlYm91bmNlQ250KS4KKyAgKiBAcGFyYW1baW5dICB1MzJDbGtTcmNTZWwgICAgQnJha2UgcGluIGRldGVjdG9yIGRlYm91bmNlIGNsb2NrIHNvdXJjZSwgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl8xCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQktQX0RCQ0xLX1BDTEtfRElWXzQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl84CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMTYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX0JLUF9EQkNMS19QQ0xLX0RJVl8zMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fQktQX0RCQ0xLX1BDTEtfRElWXzY0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9CS1BfREJDTEtfUENMS19ESVZfMTI4CisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGV4dGVybmFsIGJyYWtlIHBpbiBkZXRlY3RvciBub2lzZSBmaWx0ZXIgZnVuY3Rpb24uCisgICovCit2b2lkIFRQV01fRW5hYmxlQnJha2VQaW5EZWJvdW5jZShUSU1FUl9UICp0aW1lciwgdWludDMyX3QgdTMyQnJha2VQaW5TcmMsIHVpbnQzMl90IHUzMkRlYm91bmNlQ250LCB1aW50MzJfdCB1MzJDbGtTcmNTZWwpCit7CisgICAgdGltZXItPlBXTUJORiA9ICh0aW1lci0+UFdNQk5GICYgfihUSU1FUl9QV01CTkZfQktQSU5TUkNfTXNrIHwgVElNRVJfUFdNQk5GX0JSS0ZDTlRfTXNrIHwgVElNRVJfUFdNQk5GX0JSS05GU0VMX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAgKHUzMkJyYWtlUGluU3JjIDw8IFRJTUVSX1BXTUJORl9CS1BJTlNSQ19Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgKHUzMkRlYm91bmNlQ250IDw8IFRJTUVSX1BXTUJORl9CUktGQ05UX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAodTMyQ2xrU3JjU2VsIDw8IFRJTUVSX1BXTUJORl9CUktORlNFTF9Qb3MpIHwgVElNRVJfUFdNQk5GX0JSS05GRU5fTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIEJyYWtlIFBpbiBOb2lzZSBGaWx0ZXIgRnVuY3Rpb24KKyAgKgorICAqIEBwYXJhbVtpbl0gIHRpbWVyICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBleHRlcm5hbCBicmFrZSBwaW4gZGV0ZWN0b3Igbm9pc2UgZmlsdGVyIGZ1bmN0aW9uLgorICAqLwordm9pZCBUUFdNX0Rpc2FibGVCcmFrZVBpbkRlYm91bmNlKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5QV01CTkYgJj0gflRJTUVSX1BXTUJORl9CUktORkVOX01zazsKK30KKworLyoqCisgICogQGJyaWVmICAgICAgRW5hYmxlIEJyYWtlIFBpbiBJbnZlcnNlIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBQV00gYnJha2UgcGluIGludmVyc2UgZnVuY3Rpb24uCisgICovCit2b2lkIFRQV01fRW5hYmxlQnJha2VQaW5JbnZlcnNlKFRJTUVSX1QgKnRpbWVyKQoreworICAgIHRpbWVyLT5QV01CTkYgfD0gVElNRVJfUFdNQk5GX0JSS1BJTlZfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBEaXNhYmxlIEJyYWtlIFBpbiBJbnZlcnNlIEZ1bmN0aW9uCisgICoKKyAgKiBAcGFyYW1baW5dICB0aW1lciAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFRpbWVyIG1vZHVsZS4gSXQgY291bGQgYmUgVElNRVIwLCBUSU1FUjEsIFRJTUVSMiwgVElNRVIzLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgUFdNIGJyYWtlIHBpbiBpbnZlcnNlIGZ1bmN0aW9uLgorICAqLwordm9pZCBUUFdNX0Rpc2FibGVCcmFrZVBpbkludmVyc2UoVElNRVJfVCAqdGltZXIpCit7CisgICAgdGltZXItPlBXTUJORiAmPSB+VElNRVJfUFdNQk5GX0JSS1BJTlZfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBTZXQgQnJha2UgUGluIFNvdXJjZQorICAqCisgICogQHBhcmFtW2luXSAgdGltZXIgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVGltZXIgbW9kdWxlLiBJdCBjb3VsZCBiZSBUSU1FUjAsIFRJTUVSMSwgVElNRVIyLCBUSU1FUjMuCisgICogQHBhcmFtW2luXSAgdTMyQnJha2VQaW5OdW0gIEJyYWtlIHBpbiBzZWxlY3Rpb24uIE9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVE1fQlJBS0UwCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVFBXTV9UTV9CUkFLRTEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBUUFdNX1RNX0JSQUtFMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFRQV01fVE1fQlJBS0UzCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IFBXTSBicmFrZSBwaW4gc291cmNlLgorICAqLwordm9pZCBUUFdNX1NldEJyYWtlUGluU291cmNlKFRJTUVSX1QgKnRpbWVyLCB1aW50MzJfdCB1MzJCcmFrZVBpbk51bSkKK3sKKyAgICB0aW1lci0+UFdNQk5GID0gKCgodGltZXIpLT5QV01CTkYgJiB+VElNRVJfUFdNQk5GX0JLUElOU1JDX01zaykgfCAodTMyQnJha2VQaW5OdW0gPDwgVElNRVJfUFdNQk5GX0JLUElOU1JDX1BvcykpOworfQorCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVElNRVJfUFdNX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFRJTUVSX1BXTV9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdWFydC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMThjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy91YXJ0LmMKQEAgLTAsMCArMSw2OTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1YXJ0LmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBVQVJUIEludGVyZmFjZSBDb250cm9sbGVyIChVQVJUKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVBUlRfRHJpdmVyIFVBUlQgRHJpdmVyCisgIEB7CisqLworCisKKy8qKiBAYWRkdG9ncm91cCBVQVJUX0VYUE9SVEVEX0ZVTkNUSU9OUyBVQVJUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENsZWFyIFVBUlQgc3BlY2lmaWVkIGludGVycnVwdCBmbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkludGVycnVwdEZsYWcgICAgVGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgb2YgVUFSVCBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5UU1RTX0xJTklOVF9Nc2sgICAgOiBMSU4gQnVzIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVFNUU19XS0lOVF9Nc2sgICAgIDogV2FrZS11cCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfQlVGRVJSSU5UX01zayA6IEJ1ZmZlciBFcnJvciBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfTU9ERU1JTlRfTXNrICA6IE1PREVNIFN0YXR1cyBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRTVFNfUkxTSU5UX01zayAgICA6IFJlY2VpdmUgTGluZSBTdGF0dXMgaW50ZXJydXB0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBVQVJUIHNwZWNpZmllZCBpbnRlcnJ1cHQgZmxhZy4KKyAqLwordm9pZCBVQVJUX0NsZWFySW50RmxhZyhVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMkludGVycnVwdEZsYWcpCit7CisKKyAgICBpZih1MzJJbnRlcnJ1cHRGbGFnICYgVUFSVF9JTlRTVFNfUkxTSU5UX01zaykgICAgICAgICAgIC8qIENsZWFyIFJlY2VpdmUgTGluZSBTdGF0dXMgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1YXJ0LT5GSUZPU1RTID0gVUFSVF9GSUZPU1RTX0JJRl9Nc2sgfCBVQVJUX0ZJRk9TVFNfRkVGX01zayB8IFVBUlRfRklGT1NUU19GRUZfTXNrIHwgVUFSVF9GSUZPU1RTX0FERFJERVRGX01zazsKKyAgICB9CisKKyAgICBpZih1MzJJbnRlcnJ1cHRGbGFnICYgVUFSVF9JTlRTVFNfTU9ERU1JTlRfTXNrKSAgICAgICAgIC8qIENsZWFyIE1PREVNIFN0YXR1cyBJbnRlcnJ1cHQgKi8KKyAgICB7CisgICAgICAgIHVhcnQtPk1PREVNU1RTIHw9IFVBUlRfTU9ERU1TVFNfQ1RTREVURl9Nc2s7CisgICAgfQorCisgICAgaWYodTMySW50ZXJydXB0RmxhZyAmIFVBUlRfSU5UU1RTX0JVRkVSUklOVF9Nc2spICAgICAgICAvKiBDbGVhciBCdWZmZXIgRXJyb3IgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1YXJ0LT5GSUZPU1RTID0gVUFSVF9GSUZPU1RTX1JYT1ZJRl9Nc2sgfCBVQVJUX0ZJRk9TVFNfVFhPVklGX01zazsKKyAgICB9CisKKyAgICBpZih1MzJJbnRlcnJ1cHRGbGFnICYgVUFSVF9JTlRTVFNfV0tJTlRfTXNrKSAgICAgICAgICAgIC8qIENsZWFyIFdha2UtdXAgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1YXJ0LT5XS1NUUyA9IFVBUlRfV0tTVFNfQ1RTV0tGX01zayAgfCBVQVJUX1dLU1RTX0RBVFdLRl9Nc2sgICB8CisgICAgICAgICAgICAgICAgICAgICAgVUFSVF9XS1NUU19SRlJUV0tGX01zayB8IFVBUlRfV0tTVFNfUlM0ODVXS0ZfTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgICBVQVJUX1dLU1RTX1RPVVRXS0ZfTXNrOworICAgIH0KKworICAgIGlmKHUzMkludGVycnVwdEZsYWcgJiBVQVJUX0lOVFNUU19MSU5JTlRfTXNrKSAgICAgICAgICAgLyogQ2xlYXIgTElOIEJ1cyBJbnRlcnJ1cHQgKi8KKyAgICB7CisgICAgICAgIHVhcnQtPklOVFNUUyA9IFVBUlRfSU5UU1RTX0xJTklGX01zazsKKyAgICAgICAgdWFydC0+TElOU1RTID0gVUFSVF9MSU5TVFNfQklURUZfTXNrICAgIHwgVUFSVF9MSU5TVFNfQlJLREVURl9Nc2sgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgVUFSVF9MSU5TVFNfU0xWU1lOQ0ZfTXNrIHwgVUFSVF9MSU5TVFNfU0xWSURQRUZfTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgICAgVUFSVF9MSU5TVFNfU0xWSEVGX01zayAgIHwgVUFSVF9MSU5TVFNfU0xWSERFVEZfTXNrIDsKKyAgICB9CisKK30KKworCisvKioKKyAqICBAYnJpZWYgICAgICBEaXNhYmxlIFVBUlQgaW50ZXJydXB0CisgKgorICogIEBwYXJhbVtpbl0gIHVhcnQgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAqCisgKiAgQHJldHVybiAgICAgTm9uZQorICoKKyAqICBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIFVBUlQgaW50ZXJydXB0LgorICovCit2b2lkIFVBUlRfQ2xvc2UoVUFSVF9UKiB1YXJ0KQoreworICAgIHVhcnQtPklOVEVOID0gMHVsOworfQorCisKKy8qKgorICogIEBicmllZiAgICAgIERpc2FibGUgVUFSVCBhdXRvIGZsb3cgY29udHJvbCBmdW5jdGlvbgorICoKKyAqICBAcGFyYW1baW5dICB1YXJ0IFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKgorICogIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiAgQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBVQVJUIGF1dG8gZmxvdyBjb250cm9sLgorICovCit2b2lkIFVBUlRfRGlzYWJsZUZsb3dDdHJsKFVBUlRfVCogdWFydCkKK3sKKyAgICB1YXJ0LT5JTlRFTiAmPSB+KFVBUlRfSU5URU5fQVRPUlRTRU5fTXNrIHwgVUFSVF9JTlRFTl9BVE9DVFNFTl9Nc2spOworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBEaXNhYmxlIFVBUlQgc3BlY2lmaWVkIGludGVycnVwdAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICAgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJJbnRlcnJ1cHRGbGFnICAgIFRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IG9mIFVBUlQgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1RYRU5ESUVOX01zayAgIDogVHJhbnNtaXR0ZXIgRW1wdHkgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fQUJSSUVOX01zayAgICAgOiBBdXRvLWJhdWQgUmF0ZSBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9MSU5JRU5fTXNrICAgICA6IExpbiBCdXMgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fV0tJRU5fTXNrICAgICAgOiBXYWtlLXVwIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX0JVRkVSUklFTl9Nc2sgIDogQnVmZmVyIEVycm9yIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JYVE9JRU5fTXNrICAgIDogUnggVGltZS1vdXQgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fTU9ERU1JRU5fTXNrICAgOiBNT0RFTSBTdGF0dXMgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUkxTSUVOX01zayAgICAgOiBSZWNlaXZlIExpbmUgU3RhdHVzIEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1RIUkVJRU5fTXNrICAgIDogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciBFbXB0eSBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9SREFJRU5fTXNrICAgICA6IFJlY2VpdmUgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0CisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIFVBUlQgc3BlY2lmaWVkIGludGVycnVwdCBhbmQgZGlzYWJsZSBOVklDIFVBUlQgSVJRLgorICovCit2b2lkIFVBUlRfRGlzYWJsZUludChVQVJUX1QqICB1YXJ0LCB1aW50MzJfdCB1MzJJbnRlcnJ1cHRGbGFnKQoreworICAgIC8qIERpc2FibGUgVUFSVCBzcGVjaWZpZWQgaW50ZXJydXB0ICovCisgICAgVUFSVF9ESVNBQkxFX0lOVCh1YXJ0LCB1MzJJbnRlcnJ1cHRGbGFnKTsKKworICAgIC8qIERpc2FibGUgTlZJQyBVQVJUIElSUSAqLworICAgIHN3aXRjaCgodWludDMyX3QpdWFydCkKKyAgICB7CisgICAgICAgIGNhc2UgVUFSVDBfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMF9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRGlzYWJsZUlSUShVQVJUMF9JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQxX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDFfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0Rpc2FibGVJUlEoVUFSVDFfSVJRbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUMl9CQVNFOgorICAgICAgICBjYXNlIFVBUlQyX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgTlZJQ19EaXNhYmxlSVJRKFVBUlQyX0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDNfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUM19CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRGlzYWJsZUlSUShVQVJUM19JUlFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQ0X0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDRfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICBOVklDX0Rpc2FibGVJUlEoVUFSVDRfSVJRbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUNV9CQVNFOgorICAgICAgICBjYXNlIFVBUlQ1X0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgTlZJQ19EaXNhYmxlSVJRKFVBUlQ1X0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEVuYWJsZSBVQVJUIGF1dG8gZmxvdyBjb250cm9sIGZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBFbmFibGUgVUFSVCBhdXRvIGZsb3cgY29udHJvbC4KKyAqLworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEVuYWJsZSBVQVJUIGF1dG8gZmxvdyBjb250cm9sIGZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBFbmFibGUgVUFSVCBhdXRvIGZsb3cgY29udHJvbC4KKyAqLwordm9pZCBVQVJUX0VuYWJsZUZsb3dDdHJsKFVBUlRfVCogdWFydCkKK3sKKyAgICAvKiBTZXQgUlRTIHBpbiBvdXRwdXQgaXMgbG93IGxldmVsIGFjdGl2ZSAqLworICAgIHVhcnQtPk1PREVNIHw9IFVBUlRfTU9ERU1fUlRTQUNUTFZfTXNrOworCisgICAgLyogU2V0IENUUyBwaW4gaW5wdXQgaXMgbG93IGxldmVsIGFjdGl2ZSAqLworICAgIHVhcnQtPk1PREVNU1RTIHw9IFVBUlRfTU9ERU1TVFNfQ1RTQUNUTFZfTXNrOworCisgICAgLyogU2V0IFJUUyBhbmQgQ1RTIGF1dG8gZmxvdyBjb250cm9sIGVuYWJsZSAqLworICAgIHVhcnQtPklOVEVOIHw9IFVBUlRfSU5URU5fQVRPUlRTRU5fTXNrIHwgVUFSVF9JTlRFTl9BVE9DVFNFTl9Nc2s7Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIEVuYWJsZSBVQVJUIHNwZWNpZmllZCBpbnRlcnJ1cHQKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMySW50ZXJydXB0RmxhZyAgICBUaGUgc3BlY2lmaWVkIGludGVycnVwdCBvZiBVQVJUIG1vZHVsZToKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9UWEVORElFTl9Nc2sgICA6IFRyYW5zbWl0dGVyIEVtcHR5IEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX0FCUklFTl9Nc2sgICAgIDogQXV0by1iYXVkIFJhdGUgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fTElOSUVOX01zayAgICAgOiBMaW4gQnVzIGludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1dLSUVOX01zayAgICAgIDogV2FrZS11cCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9CVUZFUlJJRU5fTXNrICA6IEJ1ZmZlciBFcnJvciBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9SWFRPSUVOX01zayAgICA6IFJ4IFRpbWUtb3V0IEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX01PREVNSUVOX01zayAgIDogTU9ERU0gU3RhdHVzIEludGVycnVwdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lOVEVOX1JMU0lFTl9Nc2sgICAgIDogUmVjZWl2ZSBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JTlRFTl9USFJFSUVOX01zayAgICA6IFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgSW50ZXJydXB0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfSU5URU5fUkRBSUVOX01zayAgICAgOiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIEludGVycnVwdAorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIFVBUlQgc3BlY2lmaWVkIGludGVycnVwdCBhbmQgZW5hYmxlIE5WSUMgVUFSVCBJUlEuCisgKi8KK3ZvaWQgVUFSVF9FbmFibGVJbnQoVUFSVF9UKiAgdWFydCwgdWludDMyX3QgdTMySW50ZXJydXB0RmxhZykKK3sKKworICAgIC8qIEVuYWJsZSBVQVJUIHNwZWNpZmllZCBpbnRlcnJ1cHQgKi8KKyAgICBVQVJUX0VOQUJMRV9JTlQodWFydCwgdTMySW50ZXJydXB0RmxhZyk7CisKKyAgICAvKiBFbmFibGUgTlZJQyBVQVJUIElSUSAqLworICAgIHN3aXRjaCgodWludDMyX3QpdWFydCkKKyAgICB7CisgICAgICAgIGNhc2UgVUFSVDBfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMF9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRW5hYmxlSVJRKFVBUlQwX0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDFfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMV9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRW5hYmxlSVJRKFVBUlQxX0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDJfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMl9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRW5hYmxlSVJRKFVBUlQyX0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDNfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUM19CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRW5hYmxlSVJRKFVBUlQzX0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDRfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUNF9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRW5hYmxlSVJRKFVBUlQ0X0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDVfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUNV9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIE5WSUNfRW5hYmxlSVJRKFVBUlQ1X0lSUW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgT3BlbiBhbmQgc2V0IFVBUlQgZnVuY3Rpb24KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJiYXVkcmF0ZSAgICAgVGhlIGJhdWRyYXRlIG9mIFVBUlQgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBmdW5jdGlvbiB1c2UgdG8gZW5hYmxlIFVBUlQgZnVuY3Rpb24gYW5kIHNldCBiYXVkLXJhdGUuCisgKi8KK3ZvaWQgVUFSVF9PcGVuKFVBUlRfVCogdWFydCwgdWludDMyX3QgdTMyYmF1ZHJhdGUpCit7CisgICAgdWludDMyX3QgdTMyVWFydENsa1NyY1NlbCwgdTMyVWFydENsa0Rpdk51bTsKKyAgICB1aW50MzJfdCBhdTMyQ2xrVGJsWzRdID0ge19fSFhULCAwdWwsIF9fTFhULCBfX0hJUkN9OworICAgIHVpbnQzMl90IHUzMkJhdWREaXYgPSAwdWw7CisKKyAgICAvKiBHZXQgVUFSVCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIGFuZCBVQVJUIGNsb2NrIGRpdmlkZXIgbnVtYmVyICovCisgICAgc3dpdGNoKCh1aW50MzJfdCl1YXJ0KQorICAgIHsKKyAgICAgICAgY2FzZSBVQVJUMF9CQVNFOgorICAgICAgICBjYXNlIFVBUlQwX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUMF9NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDBfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQxX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDFfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQxX01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUMV9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDJfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMl9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDJfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQyX01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUM19CQVNFOgorICAgICAgICBjYXNlIFVBUlQzX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUM19NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDNfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQ0X0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDRfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQ0X01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUNF9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDVfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUNV9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDVfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQ1X01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiA7CisgICAgfQorCisgICAgLyogU2VsZWN0IFVBUlQgZnVuY3Rpb24gKi8KKyAgICB1YXJ0LT5GVU5DU0VMID0gVUFSVF9GVU5DU0VMX1VBUlQ7CisKKyAgICAvKiBTZXQgVUFSVCBsaW5lIGNvbmZpZ3VyYXRpb24gKi8KKyAgICB1YXJ0LT5MSU5FID0gVUFSVF9XT1JEX0xFTl84IHwgVUFSVF9QQVJJVFlfTk9ORSB8IFVBUlRfU1RPUF9CSVRfMTsKKworICAgIC8qIFNldCBVQVJUIFJ4IGFuZCBSVFMgdHJpZ2dlciBsZXZlbCAqLworICAgIHVhcnQtPkZJRk8gJj0gfihVQVJUX0ZJRk9fUkZJVExfTXNrIHwgVUFSVF9GSUZPX1JUU1RSR0xWX01zayk7CisKKyAgICAvKiBHZXQgUExMIGNsb2NrIGZyZXF1ZW5jeSBpZiBVQVJUIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gaXMgUExMICovCisgICAgaWYodTMyVWFydENsa1NyY1NlbCA9PSAxdWwpCisgICAgeworICAgICAgICBhdTMyQ2xrVGJsW3UzMlVhcnRDbGtTcmNTZWxdID0gQ0xLX0dldFBMTENsb2NrRnJlcSgpOworICAgIH0KKworICAgIC8qIFNldCBVQVJUIGJhdWQgcmF0ZSAqLworICAgIGlmKHUzMmJhdWRyYXRlICE9IDB1bCkKKyAgICB7CisgICAgICAgIHUzMkJhdWREaXYgPSBVQVJUX0JBVURfTU9ERTJfRElWSURFUigoYXUzMkNsa1RibFt1MzJVYXJ0Q2xrU3JjU2VsXSkgLyAodTMyVWFydENsa0Rpdk51bSArIDF1bCksIHUzMmJhdWRyYXRlKTsKKworICAgICAgICBpZih1MzJCYXVkRGl2ID4gMHhGRkZGdWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVhcnQtPkJBVUQgPSAoVUFSVF9CQVVEX01PREUwIHwgVUFSVF9CQVVEX01PREUwX0RJVklERVIoKGF1MzJDbGtUYmxbdTMyVWFydENsa1NyY1NlbF0pIC8gKHUzMlVhcnRDbGtEaXZOdW0gKyAxdWwpLCB1MzJiYXVkcmF0ZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdWFydC0+QkFVRCA9IChVQVJUX0JBVURfTU9ERTIgfCB1MzJCYXVkRGl2KTsKKyAgICAgICAgfQorICAgIH0KK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgUmVhZCBVQVJUIGRhdGEKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICBwdThSeEJ1ZiAgICAgICAgVGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBkYXRhIG9mIHJlY2VpdmUgRklGTy4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyUmVhZEJ5dGVzICAgIFRoZSB0aGUgcmVhZCBieXRlcyBudW1iZXIgb2YgZGF0YS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIHUzMkNvdW50IFJlY2VpdmUgYnl0ZSBjb3VudAorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCBSeCBkYXRhIGZyb20gUlggRklGTyBhbmQgdGhlIGRhdGEgd2lsbCBiZSBzdG9yZWQgaW4gcHU4UnhCdWYuCisgKi8KK3VpbnQzMl90IFVBUlRfUmVhZChVQVJUX1QqIHVhcnQsIHVpbnQ4X3QgcHU4UnhCdWZbXSwgdWludDMyX3QgdTMyUmVhZEJ5dGVzKQoreworICAgIHVpbnQzMl90ICB1MzJDb3VudCwgdTMyZGVsYXlubzsKKyAgICB1aW50MzJfdCAgdTMyRXhpdCA9IDB1bDsKKworICAgIGZvcih1MzJDb3VudCA9IDB1bDsgdTMyQ291bnQgPCB1MzJSZWFkQnl0ZXM7IHUzMkNvdW50KyspCisgICAgeworICAgICAgICB1MzJkZWxheW5vID0gMHVsOworCisgICAgICAgIHdoaWxlKHVhcnQtPkZJRk9TVFMgJiBVQVJUX0ZJRk9TVFNfUlhFTVBUWV9Nc2spICAgLyogQ2hlY2sgUlggZW1wdHkgPT4gZmFpbGVkICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMmRlbGF5bm8rKzsKKyAgICAgICAgICAgIGlmKHUzMmRlbGF5bm8gPj0gMHg0MDAwMDAwMHVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkV4aXQgPSAxdWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZih1MzJFeGl0ID09IDF1bCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwdThSeEJ1Zlt1MzJDb3VudF0gPSAodWludDhfdCl1YXJ0LT5EQVQ7IC8qIEdldCBEYXRhIGZyb20gVUFSVCBSWCAgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB1MzJDb3VudDsKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgU2V0IFVBUlQgbGluZSBjb25maWd1cmF0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyYmF1ZHJhdGUgICAgIFRoZSByZWdpc3RlciB2YWx1ZSBvZiBiYXVkcmF0ZSBvZiBVQVJUIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHUzMmJhdWRyYXRlID0gMCwgVUFSVCBiYXVkcmF0ZSB3aWxsIG5vdCBjaGFuZ2UuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMmRhdGFfd2lkdGggICBUaGUgZGF0YSBsZW5ndGggb2YgVUFSVCBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9XT1JEX0xFTl81CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9XT1JEX0xFTl82CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9XT1JEX0xFTl83CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9XT1JEX0xFTl84CisgKiAgICBAcGFyYW1baW5dICAgIHUzMnBhcml0eSAgICAgICBUaGUgcGFyaXR5IHNldHRpbmcgKG5vbmUvb2RkL2V2ZW4vbWFyay9zcGFjZSkgb2YgVUFSVCBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9QQVJJVFlfTk9ORQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfUEFSSVRZX09ERAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfUEFSSVRZX0VWRU4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX1BBUklUWV9NQVJLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9QQVJJVFlfU1BBQ0UKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyc3RvcF9iaXRzICAgIFRoZSBzdG9wIGJpdCBsZW5ndGggKDEvMS41LzIgYml0KSBvZiBVQVJUIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX1NUT1BfQklUXzEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX1NUT1BfQklUXzFfNQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfU1RPUF9CSVRfMgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhpcyBmdW5jdGlvbiB1c2UgdG8gY29uZmlnIFVBUlQgbGluZSBzZXR0aW5nLgorICovCit2b2lkIFVBUlRfU2V0TGluZUNvbmZpZyhVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMmJhdWRyYXRlLCB1aW50MzJfdCB1MzJkYXRhX3dpZHRoLCB1aW50MzJfdCB1MzJwYXJpdHksIHVpbnQzMl90ICB1MzJzdG9wX2JpdHMpCit7CisgICAgdWludDMyX3QgdTMyVWFydENsa1NyY1NlbCwgdTMyVWFydENsa0Rpdk51bTsKKyAgICB1aW50MzJfdCBhdTMyQ2xrVGJsWzRdID0ge19fSFhULCAwdWwsIF9fTFhULCBfX0hJUkN9OworICAgIHVpbnQzMl90IHUzMkJhdWREaXYgPSAwdWw7CisKKyAgICAvKiBHZXQgVUFSVCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIGFuZCBVQVJUIGNsb2NrIGRpdmlkZXIgbnVtYmVyICovCisgICAgc3dpdGNoKCh1aW50MzJfdCl1YXJ0KQorICAgIHsKKyAgICAgICAgY2FzZSBVQVJUMF9CQVNFOgorICAgICAgICBjYXNlIFVBUlQwX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUMF9NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDBfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQxX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDFfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQxX01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUMV9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDJfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMl9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDJfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQyX01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUM19CQVNFOgorICAgICAgICBjYXNlIFVBUlQzX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUM19NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDNfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQ0X0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDRfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQ0X01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUNF9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDVfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUNV9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDVfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQ1X01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiA7CisgICAgfQorCisgICAgLyogR2V0IFBMTCBjbG9jayBmcmVxdWVuY3kgaWYgVUFSVCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIGlzIFBMTCAqLworICAgIGlmKHUzMlVhcnRDbGtTcmNTZWwgPT0gMXVsKQorICAgIHsKKyAgICAgICAgYXUzMkNsa1RibFt1MzJVYXJ0Q2xrU3JjU2VsXSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsKKyAgICB9CisKKyAgICAvKiBTZXQgVUFSVCBiYXVkIHJhdGUgKi8KKyAgICBpZih1MzJiYXVkcmF0ZSAhPSAwdWwpCisgICAgeworICAgICAgICB1MzJCYXVkRGl2ID0gVUFSVF9CQVVEX01PREUyX0RJVklERVIoKGF1MzJDbGtUYmxbdTMyVWFydENsa1NyY1NlbF0pIC8gKHUzMlVhcnRDbGtEaXZOdW0gKyAxdWwpLCB1MzJiYXVkcmF0ZSk7CisKKyAgICAgICAgaWYodTMyQmF1ZERpdiA+IDB4RkZGRnVsKQorICAgICAgICB7CisgICAgICAgICAgICB1YXJ0LT5CQVVEID0gKFVBUlRfQkFVRF9NT0RFMCB8IFVBUlRfQkFVRF9NT0RFMF9ESVZJREVSKChhdTMyQ2xrVGJsW3UzMlVhcnRDbGtTcmNTZWxdKSAvICh1MzJVYXJ0Q2xrRGl2TnVtICsgMXVsKSwgdTMyYmF1ZHJhdGUpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVhcnQtPkJBVUQgPSAoVUFSVF9CQVVEX01PREUyIHwgdTMyQmF1ZERpdik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTZXQgVUFSVCBsaW5lIGNvbmZpZ3VyYXRpb24gKi8KKyAgICB1YXJ0LT5MSU5FID0gdTMyZGF0YV93aWR0aCB8IHUzMnBhcml0eSB8IHUzMnN0b3BfYml0czsKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgU2V0IFJ4IHRpbWVvdXQgY291bnQKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyVE9DICBSeCB0aW1lb3V0IGNvdW50ZXIuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIGZ1bmN0aW9uIHVzZSB0byBzZXQgUnggdGltZW91dCBjb3VudC4KKyAqLwordm9pZCBVQVJUX1NldFRpbWVvdXRDbnQoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJUT0MpCit7CisgICAgLyogU2V0IHRpbWUtb3V0IGludGVycnVwdCBjb21wYXJhdG9yICovCisgICAgdWFydC0+VE9VVCA9ICh1YXJ0LT5UT1VUICYgflVBUlRfVE9VVF9UT0lDX01zaykgfCAodTMyVE9DKTsKKworICAgIC8qIFNldCB0aW1lLW91dCBjb3VudGVyIGVuYWJsZSAqLworICAgIHVhcnQtPklOVEVOIHw9IFVBUlRfSU5URU5fVE9DTlRFTl9Nc2s7Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFNlbGVjdCBhbmQgY29uZmlndXJlIElyREEgZnVuY3Rpb24KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJCdWFkcmF0ZSAgICAgVGhlIGJhdWRyYXRlIG9mIFVBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJEaXJlY3Rpb24gICAgVGhlIGRpcmVjdGlvbiBvZiBVQVJUIG1vZHVsZSBpbiBJckRBIG1vZGU6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9JUkRBX1RYRU4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0lSREFfUlhFTgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBJckRBIHJlbGF0aXZlIHNldHRpbmdzLiBJdCBjb25zaXN0cyBvZiBUWCBvciBSWCBtb2RlIGFuZCBiYXVkcmF0ZS4KKyAqLwordm9pZCBVQVJUX1NlbGVjdElyREFNb2RlKFVBUlRfVCogdWFydCwgdWludDMyX3QgdTMyQnVhZHJhdGUsIHVpbnQzMl90IHUzMkRpcmVjdGlvbikKK3sKKyAgICB1aW50MzJfdCB1MzJVYXJ0Q2xrU3JjU2VsLCB1MzJVYXJ0Q2xrRGl2TnVtOworICAgIHVpbnQzMl90IGF1MzJDbGtUYmxbNF0gPSB7X19IWFQsIDB1bCwgX19MWFQsIF9fSElSQ307CisgICAgdWludDMyX3QgdTMyQmF1ZERpdjsKKworICAgIC8qIFNlbGVjdCBJckRBIGZ1bmN0aW9uIG1vZGUgKi8KKyAgICB1YXJ0LT5GVU5DU0VMID0gVUFSVF9GVU5DU0VMX0lyREE7CisKKyAgICAvKiBHZXQgVUFSVCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIGFuZCBVQVJUIGNsb2NrIGRpdmlkZXIgbnVtYmVyICovCisgICAgc3dpdGNoKCh1aW50MzJfdCl1YXJ0KQorICAgIHsKKyAgICAgICAgY2FzZSBVQVJUMF9CQVNFOgorICAgICAgICBjYXNlIFVBUlQwX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUMF9NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDBfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQxX0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDFfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQxX01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUMV9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDJfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUMl9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDJfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQyX01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUM19CQVNFOgorICAgICAgICBjYXNlIFVBUlQzX0JBU0UrTlNfT0ZGU0VUOgorICAgICAgICAgICAgdTMyVWFydENsa1NyY1NlbCA9IENMS19HZXRNb2R1bGVDbG9ja1NvdXJjZShVQVJUM19NT0RVTEUpOworICAgICAgICAgICAgdTMyVWFydENsa0Rpdk51bSA9IENMS19HZXRNb2R1bGVDbG9ja0RpdmlkZXIoVUFSVDNfTU9EVUxFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlQ0X0JBU0U6CisgICAgICAgIGNhc2UgVUFSVDRfQkFTRStOU19PRkZTRVQ6CisgICAgICAgICAgICB1MzJVYXJ0Q2xrU3JjU2VsID0gQ0xLX0dldE1vZHVsZUNsb2NrU291cmNlKFVBUlQ0X01PRFVMRSk7CisgICAgICAgICAgICB1MzJVYXJ0Q2xrRGl2TnVtID0gQ0xLX0dldE1vZHVsZUNsb2NrRGl2aWRlcihVQVJUNF9NT0RVTEUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUFSVDVfQkFTRToKKyAgICAgICAgY2FzZSBVQVJUNV9CQVNFK05TX09GRlNFVDoKKyAgICAgICAgICAgIHUzMlVhcnRDbGtTcmNTZWwgPSBDTEtfR2V0TW9kdWxlQ2xvY2tTb3VyY2UoVUFSVDVfTU9EVUxFKTsKKyAgICAgICAgICAgIHUzMlVhcnRDbGtEaXZOdW0gPSBDTEtfR2V0TW9kdWxlQ2xvY2tEaXZpZGVyKFVBUlQ1X01PRFVMRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiA7CisgICAgfQorCisgICAgLyogR2V0IFBMTCBjbG9jayBmcmVxdWVuY3kgaWYgVUFSVCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIGlzIFBMTCAqLworICAgIGlmKHUzMlVhcnRDbGtTcmNTZWwgPT0gMXVsKQorICAgIHsKKyAgICAgICAgYXUzMkNsa1RibFt1MzJVYXJ0Q2xrU3JjU2VsXSA9IENMS19HZXRQTExDbG9ja0ZyZXEoKTsKKyAgICB9CisKKyAgICAvKiBTZXQgVUFSVCBJckRBIGJhdWQgcmF0ZSBpbiBtb2RlIDAgKi8KKyAgICBpZih1MzJCdWFkcmF0ZSAhPSAwdWwpCisgICAgeworICAgICAgICB1MzJCYXVkRGl2ID0gVUFSVF9CQVVEX01PREUwX0RJVklERVIoKGF1MzJDbGtUYmxbdTMyVWFydENsa1NyY1NlbF0pIC8gKHUzMlVhcnRDbGtEaXZOdW0gKyAxdWwpLCB1MzJCdWFkcmF0ZSk7CisKKyAgICAgICAgaWYodTMyQmF1ZERpdiA8IDB4RkZGRnVsKQorICAgICAgICB7CisgICAgICAgICAgICB1YXJ0LT5CQVVEID0gKFVBUlRfQkFVRF9NT0RFMCB8IHUzMkJhdWREaXYpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ29uZmlndXJlIElyREEgcmVsYXRpdmUgc2V0dGluZ3MgKi8KKyAgICBpZih1MzJEaXJlY3Rpb24gPT0gVUFSVF9JUkRBX1JYRU4pCisgICAgeworICAgICAgICB1YXJ0LT5JUkRBIHw9IFVBUlRfSVJEQV9SWElOVl9Nc2s7ICAgICAvKiBSeCBzaWduYWwgaXMgaW52ZXJzZSAqLworICAgICAgICB1YXJ0LT5JUkRBICY9IH5VQVJUX0lSREFfVFhFTl9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVhcnQtPklSREEgJj0gflVBUlRfSVJEQV9UWElOVl9Nc2s7ICAgIC8qIFR4IHNpZ25hbCBpcyBub3QgaW52ZXJzZSAqLworICAgICAgICB1YXJ0LT5JUkRBIHw9IFVBUlRfSVJEQV9UWEVOX01zazsKKyAgICB9CisKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgU2VsZWN0IGFuZCBjb25maWd1cmUgUlM0ODUgZnVuY3Rpb24KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVhcnQgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMk1vZGUgICAgIFRoZSBvcGVyYXRpb24gbW9kZShOTU0vQVVEL0FBRCkuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0FMVENUTF9SUzQ4NU5NTV9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVBUlRfQUxUQ1RMX1JTNDg1QVVEX01zaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9BTFRDVExfUlM0ODVBQURfTXNrCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkFkZHIgICAgIFRoZSBSUzQ4NSBhZGRyZXNzLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IFJTNDg1IHJlbGF0aXZlIHNldHRpbmcuCisgKi8KK3ZvaWQgVUFSVF9TZWxlY3RSUzQ4NU1vZGUoVUFSVF9UKiB1YXJ0LCB1aW50MzJfdCB1MzJNb2RlLCB1aW50MzJfdCB1MzJBZGRyKQoreworICAgIC8qIFNlbGVjdCBVQVJUIFJTNDg1IGZ1bmN0aW9uIG1vZGUgKi8KKyAgICB1YXJ0LT5GVU5DU0VMID0gVUFSVF9GVU5DU0VMX1JTNDg1OworCisgICAgLyogU2V0IFJTNTg1IGNvbmZpZ3VyYXRpb24gKi8KKyAgICB1YXJ0LT5BTFRDVEwgJj0gfihVQVJUX0FMVENUTF9SUzQ4NU5NTV9Nc2sgfCBVQVJUX0FMVENUTF9SUzQ4NUFVRF9Nc2sgfCBVQVJUX0FMVENUTF9SUzQ4NUFBRF9Nc2sgfCBVQVJUX0FMVENUTF9BRERSTVZfTXNrKTsKKyAgICB1YXJ0LT5BTFRDVEwgfD0gKHUzMk1vZGUgfCAodTMyQWRkciA8PCBVQVJUX0FMVENUTF9BRERSTVZfUG9zKSk7Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFNlbGVjdCBhbmQgY29uZmlndXJlIExJTiBmdW5jdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWFydCAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMk1vZGUgICAgICAgICBUaGUgTElOIGRpcmVjdGlvbiA6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUFSVF9BTFRDVExfTElOVFhFTl9Nc2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVQVJUX0FMVENUTF9MSU5SWEVOX01zaworICogICAgQHBhcmFtW2luXSAgICB1MzJCcmVha0xlbmd0aCAgVGhlIGJyZWFrZmllbGQgbGVuZ3RoLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IExJTiByZWxhdGl2ZSBzZXR0aW5nLgorICovCit2b2lkIFVBUlRfU2VsZWN0TElOTW9kZShVQVJUX1QqIHVhcnQsIHVpbnQzMl90IHUzMk1vZGUsIHVpbnQzMl90IHUzMkJyZWFrTGVuZ3RoKQoreworICAgIC8qIFNlbGVjdCBMSU4gZnVuY3Rpb24gbW9kZSAqLworICAgIHVhcnQtPkZVTkNTRUwgPSBVQVJUX0ZVTkNTRUxfTElOOworCisgICAgLyogU2VsZWN0IExJTiBmdW5jdGlvbiBzZXR0aW5nIDogVHggZW5hYmxlLCBSeCBlbmFibGUgYW5kIGJyZWFrIGZpZWxkIGxlbmd0aCAqLworICAgIHVhcnQtPkFMVENUTCAmPSB+KFVBUlRfQUxUQ1RMX0xJTlRYRU5fTXNrIHwgVUFSVF9BTFRDVExfTElOUlhFTl9Nc2sgfCBVQVJUX0FMVENUTF9CUktGTF9Nc2spOworICAgIHVhcnQtPkFMVENUTCB8PSAodTMyTW9kZSB8ICh1MzJCcmVha0xlbmd0aCA8PCBVQVJUX0FMVENUTF9CUktGTF9Qb3MpKTsKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgV3JpdGUgVUFSVCBkYXRhCisgKgorICogICAgQHBhcmFtW2luXSAgICB1YXJ0ICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgcHU4VHhCdWYgICAgICAgIFRoZSBidWZmZXIgdG8gc2VuZCB0aGUgZGF0YSB0byBVQVJUIHRyYW5zbWlzc2lvbiBGSUZPLgorICogICAgQHBhcmFtW291dF0gICB1MzJXcml0ZUJ5dGVzICAgVGhlIGJ5dGUgbnVtYmVyIG9mIGRhdGEuCisgKgorICogICAgQHJldHVybiAgICAgICB1MzJDb3VudCB0cmFuc2ZlciBieXRlIGNvdW50CisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdG8gd3JpdGUgZGF0YSBpbnRvIFRYIGJ1ZmZlciB0byB0cmFuc21pdCBkYXRhIGJ5IFVBUlQuCisgKi8KK3VpbnQzMl90IFVBUlRfV3JpdGUoVUFSVF9UKiB1YXJ0LCB1aW50OF90IHB1OFR4QnVmW10sIHVpbnQzMl90IHUzMldyaXRlQnl0ZXMpCit7CisgICAgdWludDMyX3QgIHUzMkNvdW50LCB1MzJkZWxheW5vOworICAgIHVpbnQzMl90ICB1MzJFeGl0ID0gMHVsOworCisgICAgZm9yKHUzMkNvdW50ID0gMHVsOyB1MzJDb3VudCAhPSB1MzJXcml0ZUJ5dGVzOyB1MzJDb3VudCsrKQorICAgIHsKKyAgICAgICAgdTMyZGVsYXlubyA9IDB1bDsKKyAgICAgICAgd2hpbGUoIFVBUlRfSVNfVFhfRlVMTCh1YXJ0KSApICAgLyogV2FpdCBUeCBub3QgZnVsbCBhbmQgVGltZS1vdXQgbWFubmVyICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMmRlbGF5bm8rKzsKKyAgICAgICAgICAgIGlmKHUzMmRlbGF5bm8gPj0gMHg0MDAwMDAwMHVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkV4aXQgPSAxdWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZih1MzJFeGl0ID09IDF1bCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1YXJ0LT5EQVQgPSBwdThUeEJ1Zlt1MzJDb3VudF07ICAgIC8qIFNlbmQgVUFSVCBEYXRhIGZyb20gYnVmZmVyICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdTMyQ291bnQ7Cit9CisKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVQVJUX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVBUlRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VzYmQuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VzYmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTQwZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdXNiZC5jCkBAIC0wLDAgKzEsNzg5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdXNiZC5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgVVNCRCBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxOC0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIk51TWljcm8uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworLyoqIEBhZGR0b2dyb3VwIFN0YW5kYXJkX0RyaXZlciBTdGFuZGFyZCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBVU0JEX0RyaXZlciBVU0JEIERyaXZlcgorICBAeworKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVVNCRF9FWFBPUlRFRF9GVU5DVElPTlMgVVNCRCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qIEdsb2JhbCB2YXJpYWJsZXMgZm9yIENvbnRyb2wgUGlwZSAqLwordWludDhfdCBnX1VTQkRfYXU4U2V0dXBQYWNrZXRbOF0gPSB7MFVMfTsgICAgICAgLyohPCBTZXR1cCBwYWNrZXQgYnVmZmVyICovCit2b2xhdGlsZSB1aW50OF90IGdfVVNCRF91OFJlbW90ZVdha2V1cEVuID0gMFVMOyAvKiE8IFJlbW90ZSB3YWtlIHVwIGZ1bmN0aW9uIGVuYWJsZSBmbGFnICovCisKKy8qKgorICogQGNvbmQgSElEREVOX1NZTUJPTFMKKyAqLworc3RhdGljIHVpbnQ4X3QgKnNfVVNCRF9wdThDdHJsSW5Qb2ludGVyID0gMDsKK3N0YXRpYyB1aW50OF90ICpzX1VTQkRfcHU4Q3RybE91dFBvaW50ZXIgPSAwOworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNfVVNCRF91MzJDdHJsSW5TaXplID0gMFVMOworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNfVVNCRF91MzJDdHJsT3V0U2l6ZSA9IDBVTDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBzX1VTQkRfdTMyQ3RybE91dFNpemVMaW1pdCA9IDBVTDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBzX1VTQkRfdTMyVXNiQWRkciA9IDBVTDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBzX1VTQkRfdTMyVXNiQ29uZmlnID0gMFVMOworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZSA9IDhVTDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBzX1VTQkRfdTMyVXNiQWx0SW50ZXJmYWNlID0gMFVMOworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNfVVNCRF91MzJDdHJsT3V0VG9nZ2xlID0gMDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50OF90ICBzX1VTQkRfdThDdHJsSW5aZXJvRmxhZyA9IDBVTDsKKy8qKgorICogQGVuZGNvbmQKKyAqLworCitjb25zdCBTX1VTQkRfSU5GT19UICpnX1VTQkRfc0luZm87ICAgICAgICAgICAgICAgICAgLyohPCBBIHBvaW50ZXIgZm9yIFVTQiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KKworVkVORE9SX1JFUSBnX1VTQkRfcGZuVmVuZG9yUmVxdWVzdCAgICAgICA9IE5VTEw7ICAgIC8qITwgVVNCIFZlbmRvciBSZXF1ZXN0IEZ1bmN0aW9uYWwgUG9pbnRlciAqLworQ0xBU1NfUkVRIGdfVVNCRF9wZm5DbGFzc1JlcXVlc3QgICAgICAgICA9IE5VTEw7ICAgIC8qITwgVVNCIENsYXNzIFJlcXVlc3QgRnVuY3Rpb25hbCBQb2ludGVyICovCitTRVRfSU5URVJGQUNFX1JFUSBnX1VTQkRfcGZuU2V0SW50ZXJmYWNlID0gTlVMTDsgICAgLyohPCBVU0IgU2V0IEludGVyZmFjZSBGdW5jdGlvbmFsIFBvaW50ZXIgKi8KK1NFVF9DT05GSUdfQ0IgZ19VU0JEX3BmblNldENvbmZpZ0NhbGxiYWNrID0gTlVMTDsgICAvKiE8IFVTQiBTZXQgY29uZmlndXJhdGlvbiBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyICovCit1aW50MzJfdCBnX1VTQkRfdTMyRXBTdGFsbExvY2sgICAgICAgICAgID0gMFVMOyAgICAgLyohPCBCaXQgbWFwIGZsYWcgdG8gbG9jayBzcGVjaWZpZWQgRVAgd2hlbiBTRVRfRkVBVFVSRSAqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIG1ha2VzIFVTQkQgbW9kdWxlIHRvIGJlIHJlYWR5IHRvIHVzZQorICAqCisgICogQHBhcmFtW2luXSAgcGFyYW0gICAgICAgICAgIFRoZSBzdHJ1Y3R1cmUgb2YgVVNCRCBpbmZvcm1hdGlvbi4KKyAgKiBAcGFyYW1baW5dICBwZm5DbGFzc1JlcSAgICAgVVNCIENsYXNzIHJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgcGZuU2V0SW50ZXJmYWNlIFVTQiBTZXQgSW50ZXJmYWNlIHJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24uCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlIFVTQiBjb250cm9sbGVyLCBVU0IgUEhZIHRyYW5zY2VpdmVyIGFuZCBwdWxsLXVwIHJlc2lzdG9yIG9mIFVTQl9EKyBwaW4uIFVTQiBQSFkgd2lsbCBkcml2ZSBTRTAgdG8gYnVzLgorICAqLwordm9pZCBVU0JEX09wZW4oY29uc3QgU19VU0JEX0lORk9fVCAqcGFyYW0sIENMQVNTX1JFUSBwZm5DbGFzc1JlcSwgU0VUX0lOVEVSRkFDRV9SRVEgcGZuU2V0SW50ZXJmYWNlKQoreworICAgIFVTQkRfVCAqcFVTQkQ7CisKKyAgICBpZigoX19QQygpICYgTlNfT0ZGU0VUKSA9PSBOU19PRkZTRVQpCisgICAgeworICAgICAgICBwVVNCRCA9IFVTQkRfTlM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRDsKKyAgICB9CisKKyAgICBnX1VTQkRfc0luZm8gPSBwYXJhbTsKKyAgICBnX1VTQkRfcGZuQ2xhc3NSZXF1ZXN0ID0gcGZuQ2xhc3NSZXE7CisgICAgZ19VU0JEX3BmblNldEludGVyZmFjZSA9IHBmblNldEludGVyZmFjZTsKKworICAgIC8qIGdldCBFUDAgbWF4aW11bSBwYWNrZXQgc2l6ZSAqLworICAgIHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZSA9IGdfVVNCRF9zSW5mby0+Z3U4RGV2RGVzY1s3XTsKKworICAgIC8qIEluaXRpYWwgVVNCIGVuZ2luZSAqLworI2lmZGVmIFNVUFBPUlRfTFBNCisgICAgcFVTQkQtPkFUVFIgPSAweDdEMFVMIHwgVVNCRF9MUE1BQ0s7CisjZWxzZQorICAgIHBVU0JELT5BVFRSID0gMHg3RDBVTDsKKyNlbmRpZgorICAgIC8qIEZvcmNlIFNFMCAqLworICAgIFVTQkRfU0VUX1NFMCgpOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgVGhpcyBmdW5jdGlvbiBtYWtlcyBVU0IgaG9zdCB0byByZWNvZ25pemUgdGhlIGRldmljZQorICAqCisgICogQHBhcmFtICAgIE5vbmUKKyAgKgorICAqIEByZXR1cm4gICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgRW5hYmxlIFdBS0VVUCwgRkxERVQsIFVTQiBhbmQgQlVTIGludGVycnVwdHMuIERpc2FibGUgc29mdHdhcmUtZGlzY29ubmVjdCBmdW5jdGlvbiBhZnRlciAxMDBtcyBkZWxheSB3aXRoIFN5c1RpY2sgdGltZXIuCisgICovCit2b2lkIFVTQkRfU3RhcnQodm9pZCkKK3sKKyAgICAvKiBEaXNhYmxlIHNvZnR3YXJlLWRpc2Nvbm5lY3QgZnVuY3Rpb24gKi8KKyAgICBVU0JEX0NMUl9TRTAoKTsKKworICAgIC8qIENsZWFyIFVTQi1yZWxhdGVkIGludGVycnVwdHMgYmVmb3JlIGVuYWJsZSBpbnRlcnJ1cHQgKi8KKyAgICBVU0JEX0NMUl9JTlRfRkxBRyhVU0JEX0lOVF9CVVMgfCBVU0JEX0lOVF9VU0IgfCBVU0JEX0lOVF9GTERFVCB8IFVTQkRfSU5UX1dBS0VVUCk7CisKKyAgICAvKiBFbmFibGUgVVNCLXJlbGF0ZWQgaW50ZXJydXB0cy4gKi8KKyAgICBVU0JEX0VOQUJMRV9JTlQoVVNCRF9JTlRfQlVTIHwgVVNCRF9JTlRfVVNCIHwgVVNCRF9JTlRfRkxERVQgfCBVU0JEX0lOVF9XQUtFVVApOworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBHZXQgdGhlIHJlY2VpdmVkIFNFVFVQIHBhY2tldAorICAqCisgICogQHBhcmFtW2luXSAgYnVmIEEgYnVmZmVyIHBvaW50ZXIgdXNlZCB0byBzdG9yZSA4LWJ5dGUgU0VUVVAgcGFja2V0LgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgU3RvcmUgU0VUVVAgcGFja2V0IHRvIGEgdXNlci1zcGVjaWZpZWQgYnVmZmVyLgorICAqCisgICovCit2b2lkIFVTQkRfR2V0U2V0dXBQYWNrZXQodWludDhfdCAqYnVmKQoreworICAgIFVTQkRfTWVtQ29weShidWYsIGdfVVNCRF9hdThTZXR1cFBhY2tldCwgOFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICAgIFByb2Nlc3MgU0VUVVAgcGFja2V0CisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBQYXJzZSBTRVRVUCBwYWNrZXQgYW5kIHBlcmZvcm0gdGhlIGNvcnJlc3BvbmRpbmcgYWN0aW9uLgorICAqCisgICovCit2b2lkIFVTQkRfUHJvY2Vzc1NldHVwUGFja2V0KHZvaWQpCit7CisgICAgc19VU0JEX3UzMkN0cmxPdXRUb2dnbGUgPSAwOworICAgIC8qIEdldCBTRVRVUCBwYWNrZXQgZnJvbSBVU0IgYnVmZmVyICovCisgICAgVVNCRF9NZW1Db3B5KGdfVVNCRF9hdThTZXR1cFBhY2tldCwgKHVpbnQ4X3QgKilVU0JEX0JVRl9CQVNFLCA4VUwpOworCisgICAgLyogQ2hlY2sgdGhlIHJlcXVlc3QgdHlwZSAqLworICAgIHN3aXRjaChnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMF0gJiAweDYwVUwpCisgICAgeworICAgICAgICBjYXNlIFJFUV9TVEFOREFSRDogICAvKiBTdGFuZGFyZCAqLworICAgICAgICB7CisgICAgICAgICAgICBVU0JEX1N0YW5kYXJkUmVxdWVzdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBSRVFfQ0xBU1M6ICAgLyogQ2xhc3MgKi8KKyAgICAgICAgeworICAgICAgICAgICAgaWYoZ19VU0JEX3BmbkNsYXNzUmVxdWVzdCAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdfVVNCRF9wZm5DbGFzc1JlcXVlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUkVRX1ZFTkRPUjogICAvKiBWZW5kb3IgKi8KKyAgICAgICAgeworICAgICAgICAgICAgaWYoZ19VU0JEX3BmblZlbmRvclJlcXVlc3QgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnX1VTQkRfcGZuVmVuZG9yUmVxdWVzdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogICAvKiByZXNlcnZlZCAqLworICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXR1cCBlcnJvciwgc3RhbGwgdGhlIGRldmljZSAqLworICAgICAgICAgICAgVVNCRF9TRVRfRVBfU1RBTEwoRVAwKTsKKyAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgIFByb2Nlc3MgR2V0RGVzY3JpcHRvciByZXF1ZXN0CisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBQYXJzZSBHZXREZXNjcmlwdG9yIHJlcXVlc3QgYW5kIHBlcmZvcm0gdGhlIGNvcnJlc3BvbmRpbmcgYWN0aW9uLgorICAqCisgICovCit2b2lkIFVTQkRfR2V0RGVzY3JpcHRvcih2b2lkKQoreworICAgIHVpbnQzMl90IHUzMkxlbjsKKworICAgIHNfVVNCRF91OEN0cmxJblplcm9GbGFnID0gKHVpbnQ4X3QpMFVMOworICAgIHUzMkxlbiA9IDBVTDsKKyAgICB1MzJMZW4gPSBnX1VTQkRfYXU4U2V0dXBQYWNrZXRbN107CisgICAgdTMyTGVuIDw8PSA4VUw7CisgICAgdTMyTGVuICs9IGdfVVNCRF9hdThTZXR1cFBhY2tldFs2XTsKKworICAgIHN3aXRjaChnX1VTQkRfYXU4U2V0dXBQYWNrZXRbM10pCisgICAgeworICAgICAgICAvKiBHZXQgRGV2aWNlIERlc2NyaXB0b3IgKi8KKyAgICAgICAgY2FzZSBERVNDX0RFVklDRToKKyAgICAgICAgeworICAgICAgICAgICAgdTMyTGVuID0gVVNCRF9NaW5pbXVtKHUzMkxlbiwgKHVpbnQzMl90KUxFTl9ERVZJQ0UpOworICAgICAgICAgICAgVVNCRF9QcmVwYXJlQ3RybEluKCh1aW50OF90ICopZ19VU0JEX3NJbmZvLT5ndThEZXZEZXNjLCB1MzJMZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyogR2V0IENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvciAqLworICAgICAgICBjYXNlIERFU0NfQ09ORklHOgorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCB1MzJUb3RhbExlbjsKKworICAgICAgICAgICAgdTMyVG90YWxMZW4gPSBnX1VTQkRfc0luZm8tPmd1OENvbmZpZ0Rlc2NbM107CisgICAgICAgICAgICB1MzJUb3RhbExlbiA9IGdfVVNCRF9zSW5mby0+Z3U4Q29uZmlnRGVzY1syXSArICh1MzJUb3RhbExlbiA8PCA4VUwpOworCisgICAgICAgICAgICBpZih1MzJMZW4gPiB1MzJUb3RhbExlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJMZW4gPSB1MzJUb3RhbExlbjsKKyAgICAgICAgICAgICAgICBpZigodTMyTGVuICUgc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKSA9PSAwVUwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzX1VTQkRfdThDdHJsSW5aZXJvRmxhZyA9ICh1aW50OF90KTFVTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBVU0JEX1ByZXBhcmVDdHJsSW4oKHVpbnQ4X3QgKilnX1VTQkRfc0luZm8tPmd1OENvbmZpZ0Rlc2MsIHUzMkxlbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvKiBHZXQgQk9TIERlc2NyaXB0b3IgKi8KKyAgICAgICAgY2FzZSBERVNDX0JPUzoKKyAgICAgICAgeworICAgICAgICAgICAgaWYoZ19VU0JEX3NJbmZvLT5ndThCb3NEZXNjID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfRVBfU1RBTEwoRVAwKTsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9FUF9TVEFMTChFUDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMkxlbiA9IFVTQkRfTWluaW11bSh1MzJMZW4sIExFTl9CT1MgKyBMRU5fQk9TQ0FQKTsKKyAgICAgICAgICAgICAgICBVU0JEX1ByZXBhcmVDdHJsSW4oKHVpbnQ4X3QgKilnX1VTQkRfc0luZm8tPmd1OEJvc0Rlc2MsIHUzMkxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvKiBHZXQgSElEIERlc2NyaXB0b3IgKi8KKyAgICAgICAgY2FzZSBERVNDX0hJRDoKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ1YzLjAgSElEIENsYXNzIERlc2NyaXB0b3IgVGVzdCwKKyAgICAgICAgICAgICAgIE5lZWQgdG8gaW5kaWNhdGUgaW5kZXggb2YgdGhlIEhJRCBEZXNjcmlwdG9yIHdpdGhpbiBndThDb25maWdEZXNjcmlwdG9yLCBzcGVjaWZpY2FsbHkgSElEIENvbXBvc2l0ZSBkZXZpY2UuICovCisgICAgICAgICAgICB1aW50MzJfdCB1MzJDb25maWdEZXNjT2Zmc2V0OyAgIC8qIHUzMkNvbmZpZ0Rlc2NPZmZzZXQgaXMgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIG9mZnNldCAoSElEIGRlc2NyaXB0b3Igc3RhcnQgaW5kZXgpICovCisgICAgICAgICAgICB1MzJMZW4gPSBVU0JEX01pbmltdW0odTMyTGVuLCBMRU5fSElEKTsKKyAgICAgICAgICAgIHUzMkNvbmZpZ0Rlc2NPZmZzZXQgPSBnX1VTQkRfc0luZm8tPmd1MzJDb25maWdIaWREZXNjSWR4W2dfVVNCRF9hdThTZXR1cFBhY2tldFs0XV07CisgICAgICAgICAgICBVU0JEX1ByZXBhcmVDdHJsSW4oKHVpbnQ4X3QgKikmZ19VU0JEX3NJbmZvLT5ndThDb25maWdEZXNjW3UzMkNvbmZpZ0Rlc2NPZmZzZXRdLCB1MzJMZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyogR2V0IFJlcG9ydCBEZXNjcmlwdG9yICovCisgICAgICAgIGNhc2UgREVTQ19ISURfUlBUOgorICAgICAgICB7CisgICAgICAgICAgICBpZih1MzJMZW4gPiBnX1VTQkRfc0luZm8tPmd1MzJIaWRSZXBvcnRTaXplW2dfVVNCRF9hdThTZXR1cFBhY2tldFs0XV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyTGVuID0gZ19VU0JEX3NJbmZvLT5ndTMySGlkUmVwb3J0U2l6ZVtnX1VTQkRfYXU4U2V0dXBQYWNrZXRbNF1dOworICAgICAgICAgICAgICAgIGlmKCh1MzJMZW4gJSBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUpID09IDBVTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNfVVNCRF91OEN0cmxJblplcm9GbGFnID0gKHVpbnQ4X3QpMVVMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFVTQkRfUHJlcGFyZUN0cmxJbigodWludDhfdCAqKWdfVVNCRF9zSW5mby0+Z3U4SGlkUmVwb3J0RGVzY1tnX1VTQkRfYXU4U2V0dXBQYWNrZXRbNF1dLCB1MzJMZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyogR2V0IFN0cmluZyBEZXNjcmlwdG9yICovCisgICAgICAgIGNhc2UgREVTQ19TVFJJTkc6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEdldCBTdHJpbmcgRGVzY3JpcHRvciAqLworICAgICAgICAgICAgaWYoZ19VU0JEX2F1OFNldHVwUGFja2V0WzJdIDwgNFVMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKHUzMkxlbiA+IGdfVVNCRF9zSW5mby0+Z3U4U3RyaW5nRGVzY1tnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMl1dWzBdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyTGVuID0gZ19VU0JEX3NJbmZvLT5ndThTdHJpbmdEZXNjW2dfVVNCRF9hdThTZXR1cFBhY2tldFsyXV1bMF07CisgICAgICAgICAgICAgICAgICAgIGlmKCh1MzJMZW4gJSBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUpID09IDBVTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc19VU0JEX3U4Q3RybEluWmVyb0ZsYWcgPSAodWludDhfdCkxVUw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVVNCRF9QcmVwYXJlQ3RybEluKCh1aW50OF90ICopZ19VU0JEX3NJbmZvLT5ndThTdHJpbmdEZXNjW2dfVVNCRF9hdThTZXR1cFBhY2tldFsyXV0sIHUzMkxlbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogTm90IHN1cHBvcnQuIFJlcGx5IFNUQUxMLiAqLworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMCk7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfRVBfU1RBTEwoRVAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogTm90IHN1cHBvcnQuIFJlcGx5IFNUQUxMLiAqLworICAgICAgICAgICAgVVNCRF9TRVRfRVBfU1RBTEwoRVAwKTsKKyAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICBQcm9jZXNzIHN0YW5kYXJkIHJlcXVlc3QKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIFBhcnNlIHN0YW5kYXJkIHJlcXVlc3QgYW5kIHBlcmZvcm0gdGhlIGNvcnJlc3BvbmRpbmcgYWN0aW9uLgorICAqCisgICovCit2b2lkIFVTQkRfU3RhbmRhcmRSZXF1ZXN0KHZvaWQpCit7CisgICAgdWludDMyX3QgdTMyQWRkcjsKKyAgICBVU0JEX1QgKnBVU0JEOworICAgIE9UR19UICpwT1RHOworCisgICAgaWYoKF9fUEMoKSAmIE5TX09GRlNFVCkgPT0gTlNfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgcFVTQkQgPSBVU0JEX05TOworICAgICAgICBwT1RHID0gT1RHX05TOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwVVNCRCA9IFVTQkQ7CisgICAgICAgIHBPVEcgPSBPVEc7CisgICAgfQorCisgICAgLyogY2xlYXIgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgbmV3IHJlcXVlc3QgKi8KKyAgICBzX1VTQkRfcHU4Q3RybEluUG9pbnRlciA9IDA7CisgICAgc19VU0JEX3UzMkN0cmxJblNpemUgPSAwVUw7CisKKyAgICBpZigoZ19VU0JEX2F1OFNldHVwUGFja2V0WzBdICYgMHg4MFVMKSA9PSAweDgwVUwpICAgIC8qIHJlcXVlc3QgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKyAgICB7CisgICAgICAgIC8qIERldmljZSB0byBob3N0ICovCisgICAgICAgIHN3aXRjaChnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgR0VUX0NPTkZJR1VSQVRJT046CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogUmV0dXJuIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nICovCisgICAgICAgICAgICAgICAgLyogRGF0YSBzdGFnZSAqLworICAgICAgICAgICAgICAgIHUzMkFkZHIgPSBVU0JEX0JVRl9CQVNFICsgVVNCRF9HRVRfRVBfQlVGX0FERFIoRVAwKTsKKyAgICAgICAgICAgICAgICBNOCh1MzJBZGRyKSA9ICh1aW50OF90KXNfVVNCRF91MzJVc2JDb25maWc7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfREFUQTEoRVAwKTsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDAsIDFVTCk7CisgICAgICAgICAgICAgICAgLyogU3RhdHVzIHN0YWdlICovCisgICAgICAgICAgICAgICAgVVNCRF9QcmVwYXJlQ3RybE91dCgwLCAwVUwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBHRVRfREVTQ1JJUFRPUjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVU0JEX0dldERlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgICAgICBVU0JEX1ByZXBhcmVDdHJsT3V0KDAsIDBVTCk7IC8qIEZvciBzdGF0dXMgc3RhZ2UgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR0VUX0lOVEVSRkFDRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY3VycmVudCBpbnRlcmZhY2Ugc2V0dGluZyAqLworICAgICAgICAgICAgICAgIC8qIERhdGEgc3RhZ2UgKi8KKyAgICAgICAgICAgICAgICB1MzJBZGRyID0gVVNCRF9CVUZfQkFTRSArIFVTQkRfR0VUX0VQX0JVRl9BRERSKEVQMCk7CisgICAgICAgICAgICAgICAgTTgodTMyQWRkcikgPSAodWludDhfdClzX1VTQkRfdTMyVXNiQWx0SW50ZXJmYWNlOworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0RBVEExKEVQMCk7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCAxVUwpOworICAgICAgICAgICAgICAgIC8qIFN0YXR1cyBzdGFnZSAqLworICAgICAgICAgICAgICAgIFVTQkRfUHJlcGFyZUN0cmxPdXQoMCwgMFVMKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR0VUX1NUQVRVUzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBEZXZpY2UgKi8KKyAgICAgICAgICAgICAgICBpZihnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMF0gPT0gMHg4MFVMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1OFRtcDsKKworICAgICAgICAgICAgICAgICAgICB1OFRtcCA9ICh1aW50OF90KTBVTDsKKyAgICAgICAgICAgICAgICAgICAgaWYoKGdfVVNCRF9zSW5mby0+Z3U4Q29uZmlnRGVzY1s3XSAmIDB4NDBVTCkgPT0gMHg0MFVMKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1OFRtcCB8PSAodWludDhfdCkxVUw7IC8qIFNlbGYtUG93ZXJlZC9CdXMtUG93ZXJlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZigoZ19VU0JEX3NJbmZvLT5ndThDb25maWdEZXNjWzddICYgMHgyMFVMKSA9PSAweDIwVUwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4VG1wIHw9ICh1aW50OF90KShnX1VTQkRfdThSZW1vdGVXYWtldXBFbiA8PCAxVUwpOyAvKiBSZW1vdGUgd2FrZSB1cCAqLworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdTMyQWRkciA9IFVTQkRfQlVGX0JBU0UgKyBVU0JEX0dFVF9FUF9CVUZfQUREUihFUDApOworICAgICAgICAgICAgICAgICAgICBNOCh1MzJBZGRyKSA9IHU4VG1wOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIEludGVyZmFjZSAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYoZ19VU0JEX2F1OFNldHVwUGFja2V0WzBdID09IDB4ODFVTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHUzMkFkZHIgPSBVU0JEX0JVRl9CQVNFICsgVVNCRF9HRVRfRVBfQlVGX0FERFIoRVAwKTsKKyAgICAgICAgICAgICAgICAgICAgTTgodTMyQWRkcikgPSAodWludDhfdCkwVUw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIEVuZHBvaW50ICovCisgICAgICAgICAgICAgICAgZWxzZSBpZihnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMF0gPT0gMHg4MlVMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcCA9ICh1aW50OF90KShnX1VTQkRfYXU4U2V0dXBQYWNrZXRbNF0gJiAweEZVTCk7CisgICAgICAgICAgICAgICAgICAgIHUzMkFkZHIgPSBVU0JEX0JVRl9CQVNFICsgVVNCRF9HRVRfRVBfQlVGX0FERFIoRVAwKTsKKyAgICAgICAgICAgICAgICAgICAgTTgodTMyQWRkcikgPSAodWludDhfdCkoVVNCRF9HZXRTdGFsbChlcCkgPyAxVUwgOiAwVUwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHUzMkFkZHIgPSBVU0JEX0JVRl9CQVNFICsgVVNCRF9HRVRfRVBfQlVGX0FERFIoRVAwKSArIDFVTDsKKyAgICAgICAgICAgICAgICBNOCh1MzJBZGRyKSA9ICh1aW50OF90KTBVTDsKKyAgICAgICAgICAgICAgICAvKiBEYXRhIHN0YWdlICovCisgICAgICAgICAgICAgICAgVVNCRF9TRVRfREFUQTEoRVAwKTsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDAsIDJVTCk7CisgICAgICAgICAgICAgICAgLyogU3RhdHVzIHN0YWdlICovCisgICAgICAgICAgICAgICAgVVNCRF9QcmVwYXJlQ3RybE91dCgwLCAwVUwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTZXR1cCBlcnJvciwgc3RhbGwgdGhlIGRldmljZSAqLworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0VQX1NUQUxMKEVQMCk7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfRVBfU1RBTEwoRVAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBIb3N0IHRvIGRldmljZSAqLworICAgICAgICBzd2l0Y2goZ19VU0JEX2F1OFNldHVwUGFja2V0WzFdKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIENMRUFSX0ZFQVRVUkU6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoZ19VU0JEX2F1OFNldHVwUGFja2V0WzJdID09IEZFQVRVUkVfRU5EUE9JTlRfSEFMVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVwTnVtLCBpOworCisgICAgICAgICAgICAgICAgICAgIC8qIEVQIG51bWJlciBzdGFsbCBpcyBub3QgYWxsb3cgdG8gYmUgY2xlYXIgaW4gTVNDIGNsYXNzICJFcnJvciBSZWNvdmVyeSBUZXN0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgYSBmbGFnOiBnX1VTQkRfdTMyRXBTdGFsbExvY2sgaXMgYWRkZWQgdG8gc3VwcG9ydCBpdCAqLworICAgICAgICAgICAgICAgICAgICBlcE51bSA9ICh1aW50OF90KShnX1VTQkRfYXU4U2V0dXBQYWNrZXRbNF0gJiAweEZVTCk7CisgICAgICAgICAgICAgICAgICAgIGZvcihpID0gMFVMOyBpIDwgVVNCRF9NQVhfRVA7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKChwVVNCRC0+RVBbaV0uQ0ZHICYgMHhGVUwpID09IGVwTnVtKSAmJiAoKGdfVVNCRF91MzJFcFN0YWxsTG9jayAmICgxVUwgPDwgaSkpID09IDBVTCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFVTQkQtPkVQW2ldLkNGR1AgJj0gflVTQkRfQ0ZHUF9TU1RBTExfTXNrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBVU0JELT5FUFtpXS5DRkcgJj0gflVTQkRfQ0ZHX0RTUVNZTkNfTXNrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoZ19VU0JEX2F1OFNldHVwUGFja2V0WzJdID09IEZFQVRVUkVfREVWSUNFX1JFTU9URV9XQUtFVVApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnX1VTQkRfdThSZW1vdGVXYWtldXBFbiA9ICh1aW50OF90KTBVTDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBTdGF0dXMgc3RhZ2UgKi8KKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9EQVRBMShFUDApOworICAgICAgICAgICAgICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMCwgMFVMKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU0VUX0FERFJFU1M6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc19VU0JEX3UzMlVzYkFkZHIgPSBnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMl07CisKKyAgICAgICAgICAgICAgICAvKiBEQVRBIElOIGZvciBlbmQgb2Ygc2V0dXAgKi8KKyAgICAgICAgICAgICAgICAvKiBTdGF0dXMgU3RhZ2UgKi8KKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9EQVRBMShFUDApOworICAgICAgICAgICAgICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMCwgMFVMKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU0VUX0NPTkZJR1VSQVRJT046CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc19VU0JEX3UzMlVzYkNvbmZpZyA9IGdfVVNCRF9hdThTZXR1cFBhY2tldFsyXTsKKworICAgICAgICAgICAgICAgIGlmKGdfVVNCRF9wZm5TZXRDb25maWdDYWxsYmFjaykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdfVVNCRF9wZm5TZXRDb25maWdDYWxsYmFjaygpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIERBVEEgSU4gZm9yIGVuZCBvZiBzZXR1cCAqLworICAgICAgICAgICAgICAgIC8qIFN0YXR1cyBzdGFnZSAqLworICAgICAgICAgICAgICAgIFVTQkRfU0VUX0RBVEExKEVQMCk7CisgICAgICAgICAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCAwVUwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBTRVRfRkVBVFVSRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigoZ19VU0JEX2F1OFNldHVwUGFja2V0WzBdICYgMHhGVUwpID09IDBVTCkgICAvKiAwOiBkZXZpY2UgKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKChnX1VTQkRfYXU4U2V0dXBQYWNrZXRbMl0gPT0gM1VMKSAmJiAoZ19VU0JEX2F1OFNldHVwUGFja2V0WzNdID09IDBVTCkpIC8qIDM6IEhOUCBlbmFibGUgKi8KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcE9URy0+Q1RMIHw9IChPVEdfQ1RMX0hOUFJFUUVOX01zayB8IE9UR19DVExfQlVTUkVRX01zayk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoZ19VU0JEX2F1OFNldHVwUGFja2V0WzJdID09IEZFQVRVUkVfRU5EUE9JTlRfSEFMVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVTQkRfU2V0U3RhbGwoKHVpbnQ4X3QpKGdfVVNCRF9hdThTZXR1cFBhY2tldFs0XSAmIDB4RlVMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoZ19VU0JEX2F1OFNldHVwUGFja2V0WzJdID09IEZFQVRVUkVfREVWSUNFX1JFTU9URV9XQUtFVVApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnX1VTQkRfdThSZW1vdGVXYWtldXBFbiA9ICh1aW50OF90KTFVTDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBTdGF0dXMgc3RhZ2UgKi8KKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9EQVRBMShFUDApOworICAgICAgICAgICAgICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMCwgMFVMKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU0VUX0lOVEVSRkFDRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzX1VTQkRfdTMyVXNiQWx0SW50ZXJmYWNlID0gZ19VU0JEX2F1OFNldHVwUGFja2V0WzJdOworICAgICAgICAgICAgICAgIGlmKGdfVVNCRF9wZm5TZXRJbnRlcmZhY2UgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdfVVNCRF9wZm5TZXRJbnRlcmZhY2Uoc19VU0JEX3UzMlVzYkFsdEludGVyZmFjZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogU3RhdHVzIHN0YWdlICovCisgICAgICAgICAgICAgICAgVVNCRF9TRVRfREFUQTEoRVAwKTsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDAsIDBVTCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNldHVwIGVycm9yLCBzdGFsbCB0aGUgZGV2aWNlICovCisgICAgICAgICAgICAgICAgVVNCRF9TRVRfRVBfU1RBTEwoRVAwKTsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9FUF9TVEFMTChFUDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBQcmVwYXJlIHRoZSBmaXJzdCBDb250cm9sIElOIHBpcGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHB1OEJ1ZiAgVGhlIHBvaW50ZXIgb2YgZGF0YSBzZW50IHRvIFVTQiBob3N0LgorICAqIEBwYXJhbVtpbl0gIHUzMlNpemUgVGhlIElOIHRyYW5zZmVyIHNpemUuCisgICoKKyAgKiBAcmV0dXJuICAgICBOb25lCisgICoKKyAgKiBAZGV0YWlscyAgICBQcmVwYXJlIGRhdGEgZm9yIENvbnRyb2wgSU4gdHJhbnNmZXIuCisgICoKKyAgKi8KK3ZvaWQgVVNCRF9QcmVwYXJlQ3RybEluKHVpbnQ4X3QgcHU4QnVmW10sIHVpbnQzMl90IHUzMlNpemUpCit7CisgICAgdWludDMyX3QgdTMyQWRkcjsKKworICAgIGlmKHUzMlNpemUgPiBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUpCisgICAgeworICAgICAgICAvKiBEYXRhIHNpemUgPiBNWFBMRCAqLworICAgICAgICBzX1VTQkRfcHU4Q3RybEluUG9pbnRlciA9IHB1OEJ1ZiArIHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZTsKKyAgICAgICAgc19VU0JEX3UzMkN0cmxJblNpemUgPSB1MzJTaXplIC0gc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplOworICAgICAgICBVU0JEX1NFVF9EQVRBMShFUDApOworICAgICAgICB1MzJBZGRyID0gVVNCRF9CVUZfQkFTRSArIFVTQkRfR0VUX0VQX0JVRl9BRERSKEVQMCk7CisgICAgICAgIFVTQkRfTWVtQ29weSgodWludDhfdCAqKXUzMkFkZHIsIHB1OEJ1Ziwgc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKTsKKyAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBEYXRhIHNpemUgPD0gTVhQTEQgKi8KKyAgICAgICAgc19VU0JEX3B1OEN0cmxJblBvaW50ZXIgPSAwOworICAgICAgICBzX1VTQkRfdTMyQ3RybEluU2l6ZSA9IDBVTDsKKyAgICAgICAgVVNCRF9TRVRfREFUQTEoRVAwKTsKKyAgICAgICAgdTMyQWRkciA9IFVTQkRfQlVGX0JBU0UgKyBVU0JEX0dFVF9FUF9CVUZfQUREUihFUDApOworICAgICAgICBVU0JEX01lbUNvcHkoKHVpbnQ4X3QgKil1MzJBZGRyLCBwdThCdWYsIHUzMlNpemUpOworICAgICAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDAsIHUzMlNpemUpOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgIFJlcGVhdCBDb250cm9sIElOIHBpcGUKKyAgKgorICAqIEBwYXJhbSAgICBOb25lCisgICoKKyAgKiBAcmV0dXJuICAgTm9uZQorICAqCisgICogQGRldGFpbHMgIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSByZW1haW5lZCBkYXRhIG9mIENvbnRyb2wgSU4gdHJhbnNmZXIuCisgICoKKyAgKi8KK3ZvaWQgVVNCRF9DdHJsSW4odm9pZCkKK3sKKyAgICB1aW50MzJfdCB1MzJBZGRyOworCisgICAgaWYoc19VU0JEX3UzMkN0cmxJblNpemUpCisgICAgeworICAgICAgICAvKiBQcm9jZXNzIHJlbWFpbmVkIGRhdGEgKi8KKyAgICAgICAgaWYoc19VU0JEX3UzMkN0cmxJblNpemUgPiBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERhdGEgc2l6ZSA+IE1YUExEICovCisgICAgICAgICAgICB1MzJBZGRyID0gVVNCRF9CVUZfQkFTRSArIFVTQkRfR0VUX0VQX0JVRl9BRERSKEVQMCk7CisgICAgICAgICAgICBVU0JEX01lbUNvcHkoKHVpbnQ4X3QgKil1MzJBZGRyLCAodWludDhfdCAqKXNfVVNCRF9wdThDdHJsSW5Qb2ludGVyLCBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUpOworICAgICAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUpOworICAgICAgICAgICAgc19VU0JEX3B1OEN0cmxJblBvaW50ZXIgKz0gc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplOworICAgICAgICAgICAgc19VU0JEX3UzMkN0cmxJblNpemUgLT0gc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogRGF0YSBzaXplIDw9IE1YUExEICovCisgICAgICAgICAgICB1MzJBZGRyID0gVVNCRF9CVUZfQkFTRSArIFVTQkRfR0VUX0VQX0JVRl9BRERSKEVQMCk7CisgICAgICAgICAgICBVU0JEX01lbUNvcHkoKHVpbnQ4X3QgKil1MzJBZGRyLCAodWludDhfdCAqKXNfVVNCRF9wdThDdHJsSW5Qb2ludGVyLCBzX1VTQkRfdTMyQ3RybEluU2l6ZSk7CisgICAgICAgICAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDAsIHNfVVNCRF91MzJDdHJsSW5TaXplKTsKKyAgICAgICAgICAgIHNfVVNCRF9wdThDdHJsSW5Qb2ludGVyID0gMDsKKyAgICAgICAgICAgIHNfVVNCRF91MzJDdHJsSW5TaXplID0gMFVMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogTm8gbW9yZSBkYXRhIGZvciBJTiB0b2tlbiAqLworICAgIHsKKyAgICAgICAgLyogSW4gQUNLIGZvciBTZXQgYWRkcmVzcyAqLworICAgICAgICBpZigoZ19VU0JEX2F1OFNldHVwUGFja2V0WzBdID09IFJFUV9TVEFOREFSRCkgJiYgKGdfVVNCRF9hdThTZXR1cFBhY2tldFsxXSA9PSBTRVRfQUREUkVTUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMkFkZHIgPSBVU0JEX0dFVF9BRERSKCk7CisgICAgICAgICAgICBpZigodTMyQWRkciAhPSBzX1VTQkRfdTMyVXNiQWRkcikgJiYgKHUzMkFkZHIgPT0gMFVMKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9BRERSKHNfVVNCRF91MzJVc2JBZGRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIEZvciB0aGUgY2FzZSBvZiBkYXRhIHNpemUgaXMgaW50ZWdyYWwgdGltZXMgbWF4aW11bSBwYWNrZXQgc2l6ZSAqLworICAgICAgICBpZihzX1VTQkRfdThDdHJsSW5aZXJvRmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAwLCAwVUwpOworICAgICAgICAgICAgc19VU0JEX3U4Q3RybEluWmVyb0ZsYWcgPSAodWludDhfdCkwVUw7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFByZXBhcmUgdGhlIGZpcnN0IENvbnRyb2wgT1VUIHBpcGUKKyAgKgorICAqIEBwYXJhbVtpbl0gIHB1OEJ1ZiAgVGhlIHBvaW50ZXIgb2YgZGF0YSByZWNlaXZlZCBmcm9tIFVTQiBob3N0LgorICAqIEBwYXJhbVtpbl0gIHUzMlNpemUgVGhlIE9VVCB0cmFuc2ZlciBzaXplLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHByZXBhcmUgdGhlIGZpcnN0IENvbnRyb2wgT1VUIHRyYW5zZmVyLgorICAqCisgICovCit2b2lkIFVTQkRfUHJlcGFyZUN0cmxPdXQodWludDhfdCAqcHU4QnVmLCB1aW50MzJfdCB1MzJTaXplKQoreworICAgIHNfVVNCRF9wdThDdHJsT3V0UG9pbnRlciA9IHB1OEJ1ZjsKKyAgICBzX1VTQkRfdTMyQ3RybE91dFNpemUgPSAwVUw7CisgICAgc19VU0JEX3UzMkN0cmxPdXRTaXplTGltaXQgPSB1MzJTaXplOworICAgIFVTQkRfU0VUX1BBWUxPQURfTEVOKEVQMSwgc19VU0JEX3UzMkN0cmxNYXhQa3RTaXplKTsKK30KKworLyoqCisgICogQGJyaWVmICAgIFJlcGVhdCBDb250cm9sIE9VVCBwaXBlCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgc3VjY2Vzc2l2ZSBDb250cm9sIE9VVCB0cmFuc2Zlci4KKyAgKgorICAqLwordm9pZCBVU0JEX0N0cmxPdXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1MzJTaXplOworICAgIHVpbnQzMl90IHUzMkFkZHI7CisgICAgVVNCRF9UICpwVVNCRDsKKworICAgIGlmKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCkKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRF9OUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcFVTQkQgPSBVU0JEOworICAgIH0KKworICAgIGlmKHNfVVNCRF91MzJDdHJsT3V0VG9nZ2xlICE9IChwVVNCRC0+RVBTVFMwICYgVVNCRF9FUFNUUzBfRVBTVFMxX01zaykpCisgICAgeworICAgICAgICBzX1VTQkRfdTMyQ3RybE91dFRvZ2dsZSA9IHBVU0JELT5FUFNUUzAgJiBVU0JEX0VQU1RTMF9FUFNUUzFfTXNrOworICAgICAgICBpZihzX1VTQkRfdTMyQ3RybE91dFNpemUgPCBzX1VTQkRfdTMyQ3RybE91dFNpemVMaW1pdCkKKyAgICAgICAgeworICAgICAgICAgICAgdTMyU2l6ZSA9IFVTQkRfR0VUX1BBWUxPQURfTEVOKEVQMSk7CisgICAgICAgICAgICB1MzJBZGRyID0gVVNCRF9CVUZfQkFTRSArIFVTQkRfR0VUX0VQX0JVRl9BRERSKEVQMSk7CisgICAgICAgICAgICBVU0JEX01lbUNvcHkoKHVpbnQ4X3QgKilzX1VTQkRfcHU4Q3RybE91dFBvaW50ZXIsICh1aW50OF90ICopdTMyQWRkciwgdTMyU2l6ZSk7CisgICAgICAgICAgICBzX1VTQkRfcHU4Q3RybE91dFBvaW50ZXIgKz0gdTMyU2l6ZTsKKyAgICAgICAgICAgIHNfVVNCRF91MzJDdHJsT3V0U2l6ZSArPSB1MzJTaXplOworCisgICAgICAgICAgICBpZihzX1VTQkRfdTMyQ3RybE91dFNpemUgPCBzX1VTQkRfdTMyQ3RybE91dFNpemVMaW1pdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVU0JEX1NFVF9QQVlMT0FEX0xFTihFUDEsIHNfVVNCRF91MzJDdHJsTWF4UGt0U2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVVNCRF9TRVRfUEFZTE9BRF9MRU4oRVAxLCBzX1VTQkRfdTMyQ3RybE1heFBrdFNpemUpOworICAgIH0KK30KKworLyoqCisgICogQGJyaWVmICAgIFJlc2V0IHNvZnR3YXJlIGZsYWdzCisgICoKKyAgKiBAcGFyYW0gICAgTm9uZQorICAqCisgICogQHJldHVybiAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICBUaGlzIGZ1bmN0aW9uIHJlc2V0cyBhbGwgdmFyaWFibGVzIGZvciBwcm90b2NvbCBhbmQgcmVzZXRzIFVTQiBkZXZpY2UgYWRkcmVzcyB0byAwLgorICAqCisgICovCit2b2lkIFVTQkRfU3dSZXNldCh2b2lkKQoreworICAgIHVpbnQzMl90IGk7CisgICAgVVNCRF9UICpwVVNCRDsKKworICAgIGlmKChfX1BDKCkgJiBOU19PRkZTRVQpID09IE5TX09GRlNFVCkKKyAgICB7CisgICAgICAgIHBVU0JEID0gVVNCRF9OUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcFVTQkQgPSBVU0JEOworICAgIH0KKworICAgIC8qIFJlc2V0IGFsbCB2YXJpYWJsZXMgZm9yIHByb3RvY29sICovCisgICAgc19VU0JEX3B1OEN0cmxJblBvaW50ZXIgPSAwOworICAgIHNfVVNCRF91MzJDdHJsSW5TaXplID0gMFVMOworICAgIHNfVVNCRF9wdThDdHJsT3V0UG9pbnRlciA9IDA7CisgICAgc19VU0JEX3UzMkN0cmxPdXRTaXplID0gMFVMOworICAgIHNfVVNCRF91MzJDdHJsT3V0U2l6ZUxpbWl0ID0gMFVMOworICAgIGdfVVNCRF91MzJFcFN0YWxsTG9jayA9IDBVTDsKKyAgICBtZW1zZXQoZ19VU0JEX2F1OFNldHVwUGFja2V0LCAwLCA4VUwpOworCisgICAgLyogUmVzZXQgUElEIERBVEEwICovCisgICAgZm9yKGkgPSAwVUw7IGkgPCBVU0JEX01BWF9FUDsgaSsrKQorICAgIHsKKyAgICAgICAgcFVTQkQtPkVQW2ldLkNGRyAmPSB+VVNCRF9DRkdfRFNRU1lOQ19Nc2s7CisgICAgfQorCisgICAgLyogUmVzZXQgVVNCIGRldmljZSBhZGRyZXNzICovCisgICAgVVNCRF9TRVRfQUREUigwVUwpOworfQorCisvKioKKyAqIEBicmllZiAgICAgICBVU0JEIFNldCBWZW5kb3IgUmVxdWVzdAorICoKKyAqIEBwYXJhbVtpbl0gICBwZm5WZW5kb3JSZXEgICAgVmVuZG9yIFJlcXVlc3QgQ2FsbGJhY2sgRnVuY3Rpb24KKyAqCisgKiBAcmV0dXJuICAgICAgTm9uZQorICoKKyAqIEBkZXRhaWxzICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IFVTQkQgdmVuZG9yIHJlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24KKyAqLwordm9pZCBVU0JEX1NldFZlbmRvclJlcXVlc3QoVkVORE9SX1JFUSBwZm5WZW5kb3JSZXEpCit7CisgICAgZ19VU0JEX3BmblZlbmRvclJlcXVlc3QgPSBwZm5WZW5kb3JSZXE7Cit9CisKKy8qKgorICogQGJyaWVmICAgICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBjYWxsZWQgd2hlbiBnZXQgU0VUIENPTkZJR1VSQVRJT04gcmVxdWVzdAorICoKKyAqIEBwYXJhbVtpbl0gICBwZm5TZXRDb25maWdDYWxsYmFjayAgICBDYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyIGZvciBTRVQgQ09ORklHVVJBVElPTiByZXF1ZXN0CisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgYXQgU0VUIENPTkZJR1VSQVRJT04gcmVxdWVzdC4KKyAqLwordm9pZCBVU0JEX1NldENvbmZpZ0NhbGxiYWNrKFNFVF9DT05GSUdfQ0IgcGZuU2V0Q29uZmlnQ2FsbGJhY2spCit7CisgICAgZ19VU0JEX3BmblNldENvbmZpZ0NhbGxiYWNrID0gcGZuU2V0Q29uZmlnQ2FsbGJhY2s7Cit9CisKKworLyoqCisgKiBAYnJpZWYgICAgICAgRVAgc3RhbGwgbG9jayBmdW5jdGlvbiB0byBhdm9pZCBzdGFsbCBjbGVhciBieSBVU0IgU0VUIEZFQVRVUkUgcmVxdWVzdC4KKyAqCisgKiBAcGFyYW1baW5dICAgdTMyRXBCaXRtYXAgICAgVXNlIGJpdG1hcCB0byBzZWxlY3Qgd2hpY2ggZW5kcG9pbnRzIHdpbGwgYmUgbG9ja2VkCisgKgorICogQHJldHVybiAgICAgIE5vbmUKKyAqCisgKiBAZGV0YWlscyAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxvY2sgcmVsYXRpdmUgZW5kcG9pbnQgdG8gYXZvaWQgc3RhbGwgY2xlYXIgYnkgU0VUIEZFQVRVUkUgcmVxdWVzdC4KKyAqICAgICAgICAgICAgICBJZiBlcCBzdGFsbCBsb2NrZWQsIHVzZXIgbmVlZHMgdG8gcmVzZXQgVVNCIGRldmljZSBvciByZS1jb25maWd1cmUgZGV2aWNlIHRvIGNsZWFyIGl0LgorICovCit2b2lkIFVTQkRfTG9ja0VwU3RhbGwodWludDMyX3QgdTMyRXBCaXRtYXApCit7CisgICAgZ19VU0JEX3UzMkVwU3RhbGxMb2NrID0gdTMyRXBCaXRtYXA7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNCRF9FWFBPUlRFRF9GVU5DVElPTlMgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBVU0JEX0RyaXZlciAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFN0YW5kYXJkX0RyaXZlciAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy91c2NpX2kyYy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdXNjaV9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTVmZjNkCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdXNjaV9pMmMuYwpAQCAtMCwwICsxLDE2NTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHVzY2lfaTJjLmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogJFJldmlzaW9uOiAxICQKKyAqICREYXRlOiAxNi8wNy8wNyA3OjUwcCAkCisgKiBAYnJpZWYgICAgTTIzNTEgc2VyaWVzIFVTQ0kgSTJDKFVJMkMpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfSTJDX0RyaXZlciBVU0NJX0kyQyBEcml2ZXIKKyAgQHsKKyovCisKKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfSTJDX0VYUE9SVEVEX0ZVTkNUSU9OUyBVU0NJX0kyQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIG1ha2VzIFVTQ0lfSTJDIG1vZHVsZSBiZSByZWFkeSBhbmQgc2V0IHRoZSB3YW50ZWQgYnVzIGNsb2NrCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMkJ1c0Nsb2NrICAgICBUaGUgdGFyZ2V0IGJ1cyBzcGVlZCBvZiBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBBY3R1YWwgVVNDSV9JMkMgYnVzIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIEVuYWJsZSBVU0NJX0kyQyBtb2R1bGUgYW5kIGNvbmZpZ3VyZSBVU0NJX0kyQyBtb2R1bGUoYnVzIGNsb2NrLCBkYXRhIGZvcm1hdCkuCisgKi8KK3VpbnQzMl90IFVJMkNfT3BlbihVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKQoreworICAgIHVpbnQzMl90IHUzMkNsa0RpdjsKKyAgICB1aW50MzJfdCB1MzJQY2xrOworCisgICAgaWYoKHVpMmMgPT0gVUkyQzEpIHx8ICh1aTJjID09IFVJMkMxX05TKSkKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorCisgICAgdTMyQ2xrRGl2ID0gKHVpbnQzMl90KSgoKCgoKHUzMlBjbGsgLyAydSkgKiAxMHUpIC8gKHUzMkJ1c0Nsb2NrKSkgKyA1dSkgLyAxMHUpIC0gMXUpOyAvKiBDb21wdXRlIHByb3BlciBkaXZpZGVyIGZvciBVU0NJX0kyQyBjbG9jayAqLworCisgICAgLyogRW5hYmxlIFVTQ0lfSTJDIHByb3RvY29sICovCisgICAgdWkyYy0+Q1RMICY9IH5VSTJDX0NUTF9GVU5NT0RFX01zazsKKyAgICB1aTJjLT5DVEwgPSA0dSA8PCBVSTJDX0NUTF9GVU5NT0RFX1BvczsKKworICAgIC8qIERhdGEgZm9ybWF0IGNvbmZpZ3VyYXRpb24gKi8KKyAgICAvKiA4IGJpdCBkYXRhIGxlbmd0aCAqLworICAgIHVpMmMtPkxJTkVDVEwgJj0gflVJMkNfTElORUNUTF9EV0lEVEhfTXNrOworICAgIHVpMmMtPkxJTkVDVEwgfD0gOHUgPDwgVUkyQ19MSU5FQ1RMX0RXSURUSF9Qb3M7CisKKyAgICAvKiBNU0IgZGF0YSBmb3JtYXQgKi8KKyAgICB1aTJjLT5MSU5FQ1RMICY9IH5VSTJDX0xJTkVDVExfTFNCX01zazsKKworICAgIC8qIFNldCBVU0NJX0kyQyBidXMgY2xvY2sgKi8KKyAgICB1aTJjLT5CUkdFTiAmPSB+VUkyQ19CUkdFTl9DTEtESVZfTXNrOworICAgIHVpMmMtPkJSR0VOIHw9ICh1MzJDbGtEaXYgPDwgVUkyQ19CUkdFTl9DTEtESVZfUG9zKTsKKyAgICB1aTJjLT5QUk9UQ1RMIHw9ICBVSTJDX1BST1RDVExfUFJPVEVOX01zazsKKworICAgIHJldHVybiAodTMyUGNsayAvICgodTMyQ2xrRGl2ICsgMXUpIDw8IDF1KSk7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIGNsb3NlcyB0aGUgVVNDSV9JMkMgbW9kdWxlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBDbG9zZSBVU0NJX0kyQyBwcm90b2NvbCBmdW5jdGlvbi4KKyAqLwordm9pZCBVSTJDX0Nsb3NlKFVJMkNfVCAqdWkyYykKK3sKKyAgICAvKiBEaXNhYmxlIFVTQ0lfSTJDIGZ1bmN0aW9uICovCisgICAgdWkyYy0+Q1RMICY9IH5VSTJDX0NUTF9GVU5NT0RFX01zazsKK30KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSB0aW1lLW91dCBmbGFnCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBDbGVhciB0aW1lLW91dCBmbGFnIHdoZW4gdGltZS1vdXQgZmxhZyBpcyBzZXQuCisgKi8KK3ZvaWQgVUkyQ19DbGVhclRpbWVvdXRGbGFnKFVJMkNfVCAqdWkyYykKK3sKKyAgICB1aTJjLT5QUk9UU1RTID0gVUkyQ19QUk9UU1RTX1RPSUZfTXNrOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjb250cm9sIGJpdCBvZiB0aGUgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1OFN0YXJ0ICAgICAgICAgU2V0IFNUQVJUIGJpdCB0byBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHU4U3RvcCBTZXQgICAgICBTVE9QIGJpdCB0byBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHU4UHRyZyBTZXQgICAgICBQVFJHIGJpdCB0byBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHU4QWNrIFNldCAgICAgICBBQ0sgYml0IHRvIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBzZXQgVVNDSV9JMkMgY29udHJvbCBiaXQgb2YgVVNDSV9JMkMgYnVzIHByb3RvY29sLgorICovCit2b2lkIFVJMkNfVHJpZ2dlcihVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTdGFydCwgdWludDhfdCB1OFN0b3AsIHVpbnQ4X3QgdThQdHJnLCB1aW50OF90IHU4QWNrKQoreworICAgIHVpbnQzMl90IHUzMlJlZyA9IDB1OworICAgIHVpbnQzMl90IHUzMlZhbCA9IHVpMmMtPlBST1RDVEwgJiB+KFVJMkNfUFJPVENUTF9TVEFfTXNrIHwgVUkyQ19QUk9UQ1RMX1NUT19Nc2sgfCBVSTJDX1BST1RDVExfQUFfTXNrKTsKKworICAgIGlmKHU4U3RhcnQpCisgICAgeworICAgICAgICB1MzJSZWcgfD0gVUkyQ19QUk9UQ1RMX1NUQV9Nc2s7CisgICAgfQorICAgIGlmKHU4U3RvcCkKKyAgICB7CisgICAgICAgIHUzMlJlZyB8PSBVSTJDX1BST1RDVExfU1RPX01zazsKKyAgICB9CisgICAgaWYodThQdHJnKQorICAgIHsKKyAgICAgICAgdTMyUmVnIHw9IFVJMkNfUFJPVENUTF9QVFJHX01zazsKKyAgICB9CisgICAgaWYodThBY2spCisgICAgeworICAgICAgICB1MzJSZWcgfD0gVUkyQ19QUk9UQ1RMX0FBX01zazsKKyAgICB9CisgICAgdWkyYy0+UFJPVENUTCA9IHUzMlZhbCB8IHUzMlJlZzsKK30KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGludGVycnVwdCBvZiBVU0NJX0kyQyBtb2R1bGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyTWFzayAgICAgICAgIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhbiBpbnRlcnJ1cHQgZW5hYmxlIGJpdC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0cyB3aWxsIGJlIGRpc2FibGVkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1RPX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19TVEFSX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19TVE9SX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19OQUNLX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19BUkJMT19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfRVJSX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19BQ0tfSU5UX01BU0sKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgVVNDSV9JMkMgYnVzIGludGVycnVwdCBldmVudHMuCisgKi8KK3ZvaWQgVUkyQ19EaXNhYmxlSW50KFVJMkNfVCAqdWkyYywgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBEaXNhYmxlIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX1RPX0lOVF9NQVNLKSA9PSBVSTJDX1RPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiAmPSB+VUkyQ19QUk9USUVOX1RPSUVOX01zazsKKyAgICB9CisgICAgLyogRGlzYWJsZSBzdGFydCBjb25kaXRpb24gcmVjZWl2ZWQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfU1RBUl9JTlRfTUFTSykgPT0gVUkyQ19TVEFSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiAmPSB+VUkyQ19QUk9USUVOX1NUQVJJRU5fTXNrOworICAgIH0KKyAgICAvKiBEaXNhYmxlIHN0b3AgY29uZGl0aW9uIHJlY2VpdmVkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX1NUT1JfSU5UX01BU0spID09IFVJMkNfU1RPUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gJj0gflVJMkNfUFJPVElFTl9TVE9SSUVOX01zazsKKyAgICB9CisgICAgLyogRGlzYWJsZSBub24tYWNrbm93bGVkZ2UgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfTkFDS19JTlRfTUFTSykgPT0gVUkyQ19OQUNLX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiAmPSB+VUkyQ19QUk9USUVOX05BQ0tJRU5fTXNrOworICAgIH0KKyAgICAvKiBEaXNhYmxlIGFyYml0cmF0aW9uIGxvc3QgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfQVJCTE9fSU5UX01BU0spID09IFVJMkNfQVJCTE9fSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9USUVOICY9IH5VSTJDX1BST1RJRU5fQVJCTE9JRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfRVJSX0lOVF9NQVNLKSA9PSBVSTJDX0VSUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gJj0gflVJMkNfUFJPVElFTl9FUlJJRU5fTXNrOworICAgIH0KKyAgICAvKiBEaXNhYmxlIGFja25vd2xlZGdlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX0FDS19JTlRfTUFTSykgPT0gVUkyQ19BQ0tfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9USUVOICY9IH5VSTJDX1BST1RJRU5fQUNLSUVOX01zazsKKyAgICB9Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGludGVycnVwdCBvZiBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyTWFzayAgICAgICAgIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBlbmFibGUgYml0LgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19UT19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfU1RBUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfU1RPUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfTkFDS19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfQVJCTE9fSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0VSUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfQUNLX0lOVF9NQVNLCisgKiAgICBAcmV0dXJuIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBVU0NJX0kyQyBidXMgaW50ZXJydXB0IGV2ZW50cy4KKyAqLwordm9pZCBVSTJDX0VuYWJsZUludChVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogRW5hYmxlIHRpbWUtb3V0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX1RPX0lOVF9NQVNLKSA9PSBVSTJDX1RPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiB8PSBVSTJDX1BST1RJRU5fVE9JRU5fTXNrOworICAgIH0KKyAgICAvKiBFbmFibGUgc3RhcnQgY29uZGl0aW9uIHJlY2VpdmVkIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX1NUQVJfSU5UX01BU0spID09IFVJMkNfU1RBUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gfD0gVUkyQ19QUk9USUVOX1NUQVJJRU5fTXNrOworICAgIH0KKyAgICAvKiBFbmFibGUgc3RvcCBjb25kaXRpb24gcmVjZWl2ZWQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfU1RPUl9JTlRfTUFTSykgPT0gVUkyQ19TVE9SX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiB8PSBVSTJDX1BST1RJRU5fU1RPUklFTl9Nc2s7CisgICAgfQorICAgIC8qIEVuYWJsZSBub24tYWNrbm93bGVkZ2UgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfTkFDS19JTlRfTUFTSykgPT0gVUkyQ19OQUNLX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiB8PSBVSTJDX1BST1RJRU5fTkFDS0lFTl9Nc2s7CisgICAgfQorICAgIC8qIEVuYWJsZSBhcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX0FSQkxPX0lOVF9NQVNLKSA9PSBVSTJDX0FSQkxPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiB8PSBVSTJDX1BST1RJRU5fQVJCTE9JRU5fTXNrOworICAgIH0KKyAgICAvKiBFbmFibGUgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfRVJSX0lOVF9NQVNLKSA9PSBVSTJDX0VSUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RJRU4gfD0gVUkyQ19QUk9USUVOX0VSUklFTl9Nc2s7CisgICAgfQorICAgIC8qIEVuYWJsZSBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19BQ0tfSU5UX01BU0spID09IFVJMkNfQUNLX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVElFTiB8PSBVSTJDX1BST1RJRU5fQUNLSUVOX01zazsKKyAgICB9Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlYWwgYnVzIGNsb2NrIG9mIFVTQ0lfSTJDIG1vZHVsZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgQWN0dWFsIFVTQ0lfSTJDIGJ1cyBjbG9jayBmcmVxdWVuY3kuCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWN0dWFsIFVTQ0lfSTJDIG1vZHVsZSBidXMgY2xvY2suCisgKi8KK3VpbnQzMl90IFVJMkNfR2V0QnVzQ2xvY2tGcmVxKFVJMkNfVCAqdWkyYykKK3sKKyAgICB1aW50MzJfdCB1MzJEaXZpZGVyOworICAgIHVpbnQzMl90IHUzMlBjbGs7CisKKyAgICBpZigodWkyYyA9PSBVSTJDMSkgfHwgKHVpMmMgPT0gVUkyQzFfTlMpKQorICAgIHsKKyAgICAgICAgdTMyUGNsayA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyUGNsayA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICB9CisgICAgdTMyRGl2aWRlciA9ICh1aTJjLT5CUkdFTiAmIFVJMkNfQlJHRU5fQ0xLRElWX01zaykgPj4gVUkyQ19CUkdFTl9DTEtESVZfUG9zOworCisgICAgcmV0dXJuICh1MzJQY2xrIC8gKCh1MzJEaXZpZGVyICsgMXUpIDw8IDF1KSk7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIHNldHMgYnVzIGNsb2NrIGZyZXF1ZW5jeSBvZiBVU0NJX0kyQyBtb2R1bGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyQnVzQ2xvY2sgICAgIFRoZSB0YXJnZXQgYnVzIHNwZWVkIG9mIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuIEFjdHVhbCBVU0NJX0kyQyBidXMgY2xvY2sgZnJlcXVlbmN5LgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVXNlIHRoaXMgZnVuY3Rpb24gc2V0IFVTQ0lfSTJDIGJ1cyBjbG9jayBmcmVxdWVuY3kgYW5kIHJldHVybiBhY3R1YWwgYnVzIGNsb2NrLgorICovCit1aW50MzJfdCBVSTJDX1NldEJ1c0Nsb2NrRnJlcShVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKQoreworICAgIHVpbnQzMl90IHUzMkNsa0RpdjsKKyAgICB1aW50MzJfdCB1MzJQY2xrOworCisgICAgaWYoKHVpMmMgPT0gVUkyQzEpIHx8ICh1aTJjID09IFVJMkMxX05TKSkKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorICAgIHUzMkNsa0RpdiA9ICh1aW50MzJfdCkoKCgoKCh1MzJQY2xrIC8gMnUpICogMTB1KSAvICh1MzJCdXNDbG9jaykpICsgNXUpIC8gMTB1KSAtIDF1KTsgLyogQ29tcHV0ZSBwcm9wZXIgZGl2aWRlciBmb3IgVVNDSV9JMkMgY2xvY2sgKi8KKworICAgIC8qIFNldCBVU0NJX0kyQyBidXMgY2xvY2sgKi8KKyAgICB1aTJjLT5CUkdFTiAmPSB+VUkyQ19CUkdFTl9DTEtESVZfTXNrOworICAgIHVpMmMtPkJSR0VOIHw9ICh1MzJDbGtEaXYgPDwgVUkyQ19CUkdFTl9DTEtESVZfUG9zKTsKKworICAgIHJldHVybiAodTMyUGNsayAvICgodTMyQ2xrRGl2ICsgMXUpIDw8IDF1KSk7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGludGVycnVwdCBmbGFnIG9mIFVTQ0lfSTJDIG1vZHVsZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJNYXNrICAgICAgICAgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIGludGVycnVwdCBzb3VyY2VzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgc291cmNlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSByZWFkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX1RPX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19TVEFSX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19TVE9SX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19OQUNLX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19BUkJMT19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfRVJSX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19BQ0tfSU5UX01BU0sKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIEludGVycnVwdCBmbGFncyBvZiBzZWxlY3RlZCBzb3VyY2VzLgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IFVTQ0lfSTJDIGludGVycnVwdCBmbGFnIHdoZW4gbW9kdWxlIG9jY3VycyBpbnRlcnJ1cHQgZXZlbnQuCisgKi8KK3VpbnQzMl90IFVJMkNfR2V0SW50RmxhZyhVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdWludDMyX3QgdTMySW50RmxhZyA9IDBVOworICAgIHVpbnQzMl90IHUzMlRtcFZhbHVlOworCisgICAgdTMyVG1wVmFsdWUgPSB1aTJjLT5QUk9UU1RTICYgVUkyQ19QUk9UU1RTX1RPSUZfTXNrOworICAgIC8qIENoZWNrIFRpbWUtb3V0IEludGVycnVwdCBGbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVSTJDX1RPX0lOVF9NQVNLKSAmJiAodTMyVG1wVmFsdWUpKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVSTJDX1RPX0lOVF9NQVNLOworICAgIH0KKworICAgIHUzMlRtcFZhbHVlID0gdWkyYy0+UFJPVFNUUyAmIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrOworICAgIC8qIENoZWNrIFN0YXJ0IENvbmRpdGlvbiBSZWNlaXZlZCBJbnRlcnJ1cHQgRmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19TVEFSX0lOVF9NQVNLKSAmJiAodTMyVG1wVmFsdWUpKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVSTJDX1NUQVJfSU5UX01BU0s7CisgICAgfQorCisgICAgdTMyVG1wVmFsdWUgPSB1aTJjLT5QUk9UU1RTICYgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2s7CisgICAgLyogQ2hlY2sgU3RvcCBDb25kaXRpb24gUmVjZWl2ZWQgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfU1RPUl9JTlRfTUFTSykgJiYgKHUzMlRtcFZhbHVlKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVUkyQ19TVE9SX0lOVF9NQVNLOworICAgIH0KKworICAgIHUzMlRtcFZhbHVlID0gdWkyYy0+UFJPVFNUUyAmIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrOworICAgIC8qIENoZWNrIE5vbi1BY2tub3dsZWRnZSBJbnRlcnJ1cHQgRmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19OQUNLX0lOVF9NQVNLKSAmJiAodTMyVG1wVmFsdWUpKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVSTJDX05BQ0tfSU5UX01BU0s7CisgICAgfQorCisgICAgdTMyVG1wVmFsdWUgPSB1aTJjLT5QUk9UU1RTICYgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOworICAgIC8qIENoZWNrIEFyYml0cmF0aW9uIExvc3QgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfQVJCTE9fSU5UX01BU0spICYmICh1MzJUbXBWYWx1ZSkpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVJMkNfQVJCTE9fSU5UX01BU0s7CisgICAgfQorCisgICAgdTMyVG1wVmFsdWUgPSB1aTJjLT5QUk9UU1RTICYgVUkyQ19QUk9UU1RTX0VSUklGX01zazsKKyAgICAvKiBDaGVjayBFcnJvciBJbnRlcnJ1cHQgRmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVUkyQ19FUlJfSU5UX01BU0spICYmICh1MzJUbXBWYWx1ZSkpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVJMkNfRVJSX0lOVF9NQVNLOworICAgIH0KKworICAgIHUzMlRtcFZhbHVlID0gdWkyYy0+UFJPVFNUUyAmIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s7CisgICAgLyogQ2hlY2sgQWNrbm93bGVkZ2UgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVJMkNfQUNLX0lOVF9NQVNLKSAmJiAodTMyVG1wVmFsdWUpKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVSTJDX0FDS19JTlRfTUFTSzsKKyAgICB9CisKKyAgICByZXR1cm4gdTMySW50RmxhZzsKK30KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBpbnRlcnJ1cHQgZmxhZyBvZiBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyTWFzayAgICAgICAgIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgc291cmNlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgY2xlYXJlZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19UT19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfU1RBUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfU1RPUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfTkFDS19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfQVJCTE9fSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0VSUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfQUNLX0lOVF9NQVNLCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBVc2UgdGhpcyBmdW5jdGlvbiB0byBjbGVhciBVU0NJX0kyQyBpbnRlcnJ1cHQgZmxhZyB3aGVuIG1vZHVsZSBvY2N1cnMgaW50ZXJydXB0IGV2ZW50IGFuZCBzZXQgZmxhZy4KKyAqLwordm9pZCBVSTJDX0NsZWFySW50RmxhZyhVSTJDX1QgKnVpMmMsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogQ2xlYXIgVGltZS1vdXQgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVUkyQ19UT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RTVFMgPSBVSTJDX1BST1RTVFNfVE9JRl9Nc2s7CisgICAgfQorICAgIC8qIENsZWFyIFN0YXJ0IENvbmRpdGlvbiBSZWNlaXZlZCBJbnRlcnJ1cHQgRmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVSTJDX1NUQVJfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9UU1RTID0gVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s7CisgICAgfQorICAgIC8qIENsZWFyIFN0b3AgQ29uZGl0aW9uIFJlY2VpdmVkIEludGVycnVwdCBGbGFnICovCisgICAgaWYodTMyTWFzayAmIFVJMkNfU1RPUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RTVFMgPSBVSTJDX1BST1RTVFNfU1RPUklGX01zazsKKyAgICB9CisgICAgLyogQ2xlYXIgTm9uLUFja25vd2xlZGdlIEludGVycnVwdCBGbGFnICovCisgICAgaWYodTMyTWFzayAmIFVJMkNfTkFDS19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVpMmMtPlBST1RTVFMgPSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazsKKyAgICB9CisgICAgLyogQ2xlYXIgQXJiaXRyYXRpb24gTG9zdCBJbnRlcnJ1cHQgRmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVSTJDX0FSQkxPX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdWkyYy0+UFJPVFNUUyA9IFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazsKKyAgICB9CisgICAgLyogQ2xlYXIgRXJyb3IgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVUkyQ19FUlJfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9UU1RTID0gVUkyQ19QUk9UU1RTX0VSUklGX01zazsKKyAgICB9CisgICAgLyogQ2xlYXIgQWNrbm93bGVkZ2UgSW50ZXJydXB0IEZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVUkyQ19BQ0tfSU5UX01BU0spCisgICAgeworICAgICAgICB1aTJjLT5QUk9UU1RTID0gVUkyQ19QUk9UU1RTX0FDS0lGX01zazsKKyAgICB9Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRhdGEgc3RvcmVkIGluIGRhdGEgcmVnaXN0ZXIgb2YgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgVVNDSV9JMkMgZGF0YS4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRvIHJlYWQgYSBieXRlIGRhdGEgZnJvbSBVU0NJX0kyQyBtb2R1bGUgcmVjZWl2ZSBkYXRhIHJlZ2lzdGVyLgorICovCit1aW50MzJfdCBVSTJDX0dldERhdGEoVUkyQ19UICp1aTJjKQoreworICAgIHJldHVybiAodWkyYy0+UlhEQVQpOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSBieXRlIGRhdGEgdG8gZGF0YSByZWdpc3RlciBvZiBVU0NJX0kyQyBtb2R1bGUKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdThEYXRhICAgICAgICAgIFRoZSBkYXRhIHdoaWNoIHdpbGwgYmUgd3JpdHRlbiB0byBkYXRhIHJlZ2lzdGVyIG9mIFVTQ0lfSTJDIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRvIHdyaXRlIGEgYnl0ZSBkYXRhIHRvIHRyYW5zbWl0IGRhdGEgcmVnaXN0ZXIgdG8gdHJhbnNtaXQgZGF0YS4KKyAqLwordm9pZCBVSTJDX1NldERhdGEoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4RGF0YSkKK3sKKyAgICB1aTJjLT5UWERBVCA9IHU4RGF0YTsKK30KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENvbmZpZ3VyZSBzbGF2ZSBhZGRyZXNzIGFuZCBlbmFibGUgR0MgbW9kZQorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdWkyYyAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1OFNsYXZlTm8gICAgICAgU2xhdmUgY2hhbm5lbCBudW1iZXIgWzAvMV0KKyAqICAgIEBwYXJhbVtpbl0gICAgdTE2U2xhdmVBZGRyICAgIFRoZSBzbGF2ZSBhZGRyZXNzLgorICogICAgQHBhcmFtW2luXSAgICB1OEdDTW9kZSAgICAgICAgR0MgbW9kZSBlbmFibGUgb3Igbm90LiBWYWxpZCB2YWx1ZXMgYXJlOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfR0NNT0RFX0VOQUJMRQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVJMkNfR0NNT0RFX0RJU0FCTEUKKyAqCisgKiAgICBAcmV0dXJuIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRvIGNvbmZpZ3VyZSBVU0NJX0kyQyBtb2R1bGUgc2xhdmUgYWRkcmVzcyBhbmQgR0MgbW9kZS4KKyAqLwordm9pZCBVSTJDX1NldFNsYXZlQWRkcihVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZU5vLCB1aW50MTZfdCB1MTZTbGF2ZUFkZHIsIHVpbnQ4X3QgdThHQ01vZGUpCit7CisgICAgaWYodThTbGF2ZU5vKQorICAgIHsKKyAgICAgICAgdWkyYy0+REVWQUREUjEgID0gdTE2U2xhdmVBZGRyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aTJjLT5ERVZBRERSMCAgPSB1MTZTbGF2ZUFkZHI7CisgICAgfQorICAgIHVpMmMtPlBST1RDVEwgID0gKHVpMmMtPlBST1RDVEwgJiB+VUkyQ19QUk9UQ1RMX0dDRlVOQ19Nc2spIHwgdThHQ01vZGU7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBDb25maWd1cmUgdGhlIG1hc2sgYml0IG9mIHNsYXZlIGFkZHJlc3MuCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1OFNsYXZlTm8gICAgICAgIFNsYXZlIGNoYW5ubGUgbnVtYmVyIFswLzFdCisgKiAgICBAcGFyYW1baW5dICAgIHUxNlNsYXZlQWRkck1hc2sgVGhlIHNsYXZlIGFkZHJlc3MgbWFzay4KKyAqCisgKiAgICBAcmV0dXJuIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRvIGNvbmZpZ3VyZSBVU0NJX0kyQyBtb2R1bGUgc2xhdmUgIGFkZHJlc3MgbWFzayBiaXQuCisgKiAgICBAbm90ZSAgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3MgYml0IGlzICJEb24ndCBDYXJlIi4KKyAqLwordm9pZCBVSTJDX1NldFNsYXZlQWRkck1hc2soVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVObywgdWludDE2X3QgdTE2U2xhdmVBZGRyTWFzaykKK3sKKyAgICBpZih1OFNsYXZlTm8pCisgICAgeworICAgICAgICB1aTJjLT5BRERSTVNLMSAgPSB1MTZTbGF2ZUFkZHJNYXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aTJjLT5BRERSTVNLMCAgPSB1MTZTbGF2ZUFkZHJNYXNrOworICAgIH0KK30KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aW1lLW91dCBmdW5jdGlvbiBhbmQgY29uZmlndXJlcyB0aW1lb3V0IGNvdW50ZXIKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyVGltZW91dENudCAgIFRpbWVvdXQgY291bnRlci4gVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDB+MHgzRkYuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyBlbmFibGUgVVNDSV9JMkMgYnVzIHRpbWUtb3V0IGZ1bmN0aW9uIGFuZCBzZXQgdGltZS1vdXQgY291bnRlci4KKyAqLwordm9pZCBVSTJDX0VuYWJsZVRpbWVvdXQoVUkyQ19UICp1aTJjLCB1aW50MzJfdCB1MzJUaW1lb3V0Q250KQoreworICAgIHVpMmMtPlBST1RDVEwgPSAodWkyYy0+UFJPVENUTCAmIH5VSTJDX1BST1RDVExfVE9DTlRfTXNrKSB8ICh1MzJUaW1lb3V0Q250IDw8IFVJMkNfUFJPVENUTF9UT0NOVF9Qb3MpOworICAgIHVpMmMtPkJSR0VOID0gKHVpMmMtPkJSR0VOICYgflVJMkNfQlJHRU5fVE1DTlRTUkNfTXNrKSB8IFVJMkNfQlJHRU5fVE1DTlRFTl9Nc2s7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRpbWUtb3V0IGZ1bmN0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyBkaXNhYmxlIFVTQ0lfSTJDIGJ1cyB0aW1lLW91dCBmdW5jdGlvbi4KKyAqLwordm9pZCBVSTJDX0Rpc2FibGVUaW1lb3V0KFVJMkNfVCAqdWkyYykKK3sKKyAgICB1aTJjLT5QUk9UQ1RMICY9IH5VSTJDX1BST1RDVExfVE9DTlRfTXNrOworICAgIHVpMmMtPkJSR0VOICY9IH5VSTJDX0JSR0VOX1RNQ05URU5fTXNrOworfQorCisvKioKKyAqICAgIEBicmllZiAgICAgICAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSB3YWtldXAgZnVuY3Rpb24gb2YgVVNDSV9JMkMgbW9kdWxlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHU4V2FrZXVwTW9kZSAgICBUaGUgd2FrZS11cCBtb2RlIHNlbGVjdGlvbi4gVmFsaWQgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVSTJDX0RBVEFfVE9HR0xFX1dLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVUkyQ19BRERSX01BVENIX1dLCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyBlbmFibGUgVVNDSV9JMkMgbW9kdWxlIHdha2UtdXAgZnVuY3Rpb24uCisgKi8KK3ZvaWQgVUkyQ19FbmFibGVXYWtldXAoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4V2FrZXVwTW9kZSkKK3sKKyAgICB1aTJjLT5XS0NUTCA9ICh1aTJjLT5XS0NUTCAmIH5VSTJDX1dLQ1RMX1dLQUREUkVOX01zaykgfCAodThXYWtldXBNb2RlIHwgVUkyQ19XS0NUTF9XS0VOX01zayk7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSB3YWtldXAgZnVuY3Rpb24gb2YgVVNDSV9JMkMgbW9kdWxlCisgKgorICogICAgQHBhcmFtW2luXSAgICB1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUbyBkaXNhYmxlIFVTQ0lfSTJDIG1vZHVsZSB3YWtlLXVwIGZ1bmN0aW9uLgorICovCit2b2lkIFVJMkNfRGlzYWJsZVdha2V1cChVSTJDX1QgKnVpMmMpCit7CisgICAgdWkyYy0+V0tDVEwgJj0gflVJMkNfV0tDVExfV0tFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIGEgYnl0ZSB0byBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICBkYXRhICAgICAgICAgICAgV3JpdGUgYSBieXRlIGRhdGEgdG8gU2xhdmUKKyAgKgorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICBXcml0ZSBkYXRhIHN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICAxICAgICAgICAgICAgICAgV3JpdGUgZGF0YSBmYWlsLCBvciBidXMgb2NjdXJzIGVycm9yIGV2ZW50cworICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIFVTQ0lfSTJDIE1hc3RlciB3cml0ZSBhIGJ5dGUgZGF0YSB0byBTbGF2ZS4KKyAgKgorICAqLworCit1aW50OF90IFVJMkNfV3JpdGVCeXRlKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCBkYXRhKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMVUsIHU4RXJyID0gMFUsIHU4Q3RybCA9IDBVOworICAgIGVudW0gVUkyQ19NQVNURVJfRVZFTlQgZUV2ZW50ID0gTUFTVEVSX1NFTkRfU1RBUlQ7CisKKyAgICBVSTJDX1NUQVJUKHVpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAvKiBDbGVhciBTVEFSVCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxVSkgfCAweDAwVSkpOyAgICAvKiBXcml0ZSBTTEErVyB0byBSZWdpc3RlciBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCBkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfREFUQTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfTkFDS0lGX01zayk7ICAgICAvKiBDbGVhciBOQUNLIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMVU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RPUklGX01zayk7ICAgICAvKiBDbGVhciBTVE9QIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQVJCTE9JRl9Nc2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMVU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19QUk9UQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgcmV0dXJuICh1OEVyciB8IHU4WGZlcmluZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIChTdWNjZXNzKS8oRmFpbCkgc3RhdHVzICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFdyaXRlIG11bHRpIGJ5dGVzIHRvIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqdWkyYyAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gICpkYXRhICAgICAgICAgICBQb2ludGVyIHRvIGFycmF5IHRvIHdyaXRlIGRhdGEgdG8gU2xhdmUKKyAgKiBAcGFyYW1baW5dICB1MzJ3TGVuICAgICAgICAgSG93IG1hbnkgYnl0ZXMgbmVlZCB0byB3cml0ZSB0byBTbGF2ZQorICAqCisgICogQHJldHVybiAgICAgQSBsZW5ndGggb2YgaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLgorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIFVTQ0lfSTJDIE1hc3RlciB3cml0ZSBtdWx0aSBieXRlcyBkYXRhIHRvIFNsYXZlLgorICAqCisgICovCisKK3VpbnQzMl90IFVJMkNfV3JpdGVNdWx0aUJ5dGVzKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgdTMyd0xlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDFVLCB1OEN0cmwgPSAwVTsKKyAgICB1aW50MzJfdCB1MzJ0eExlbiA9IDBVOworCisgICAgVUkyQ19TVEFSVCh1aTJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworCisgICAgd2hpbGUodThYZmVyaW5nKQorICAgIHsKKyAgICAgICAgd2hpbGUoIShVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpKTsgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBVSTJDIG5ldyBzdGF0dXMgb2NjdXIgKi8KKworICAgICAgICBzd2l0Y2goVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RBUlQgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMFUpKTsgICAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2spOyAgICAgIC8qIENsZWFyIEFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYodTMydHhMZW4gPCB1MzJ3TGVuKQorICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsIGRhdGFbdTMydHhMZW4rK10pOyAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGRhdGEgdG8gVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2spOyAgICAgLyogQ2xlYXIgTkFDSyBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RPUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUT1AgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisKKyAgICByZXR1cm4gdTMydHhMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYnl0ZXMgbGVuZ3RoIHRoYXQgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgYSBieXRlIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHdyaXRlIGEgYnl0ZSB0byBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1OERhdGFBZGRyICAgICAgU3BlY2lmeSBhIGFkZHJlc3MgKDEgYnl0ZSkgb2YgZGF0YSB3cml0ZSB0bworICAqIEBwYXJhbVtpbl0gIGRhdGEgICAgICAgICAgICBBIGJ5dGUgZGF0YSB0byB3cml0ZSBpdCB0byBTbGF2ZQorICAqCisgICogQHJldHZhbCAgICAgMCAgICAgICAgICAgICAgIFdyaXRlIGRhdGEgc3VjY2VzcworICAqIEByZXR2YWwgICAgIDEgICAgICAgICAgICAgICBXcml0ZSBkYXRhIGZhaWwsIG9yIGJ1cyBvY2N1cnMgZXJyb3IgZXZlbnRzCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgVVNDSV9JMkMgTWFzdGVyIHNwZWNpZnkgYSBhZGRyZXNzIHRoYXQgZGF0YSB3cml0ZSB0byBpbiBTbGF2ZS4KKyAgKgorICAqLworCit1aW50OF90IFVJMkNfV3JpdGVCeXRlT25lUmVnKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkciwgdWludDhfdCB1OERhdGFBZGRyLCB1aW50OF90IGRhdGEpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxVSwgdThFcnIgPSAwVSwgdThDdHJsID0gMFU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwVTsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKworICAgIHdoaWxlKHU4WGZlcmluZykKKyAgICB7CisgICAgICAgIHdoaWxlKCEoVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgVUkyQyBuZXcgc3RhdHVzIG9jY3VyICovCisKKyAgICAgICAgc3dpdGNoKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RBUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUQVJUIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDBVKSk7ICAgIC8qIFdyaXRlIFNMQStXIHRvIFJlZ2lzdGVyIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKHUzMnR4TGVuID09IDBVKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCB1OERhdGFBZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIGFkZHJlc3MgdG8gVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgICAgICB1MzJ0eExlbisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKHUzMnR4TGVuID09IDFVKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCBkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgdTMydHhMZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfTkFDS0lGX01zayk7ICAgICAvKiBDbGVhciBOQUNLIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMVU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RPUklGX01zayk7ICAgICAvKiBDbGVhciBTVE9QIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQVJCTE9JRl9Nc2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMVU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisKKyAgICByZXR1cm4gKHU4RXJyIHwgdThYZmVyaW5nKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gKFN1Y2Nlc3MpLyhGYWlsKSBzdGF0dXMgKi8KK30KKworCisvKioKKyAgKiBAYnJpZWYgICAgICBTcGVjaWZ5IGEgYnl0ZSByZWdpc3RlciBhZGRyZXNzIGFuZCB3cml0ZSBtdWx0aSBieXRlcyB0byBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1baW5dICB1OERhdGFBZGRyICAgICAgU3BlY2lmeSBhIGFkZHJlc3MgKDEgYnl0ZSkgb2YgZGF0YSB3cml0ZSB0bworICAqIEBwYXJhbVtpbl0gICpkYXRhICAgICAgICAgICBQb2ludGVyIHRvIGFycmF5IHRvIHdyaXRlIGRhdGEgdG8gU2xhdmUKKyAgKiBAcGFyYW1baW5dICB1MzJ3TGVuICAgICAgICAgSG93IG1hbnkgYnl0ZXMgbmVlZCB0byB3cml0ZSB0byBTbGF2ZQorICAqCisgICogQHJldHVybiAgICAgQSBsZW5ndGggb2YgaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLgorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIFVTQ0lfSTJDIE1hc3RlciBzcGVjaWZ5IGEgYnl0ZSBhZGRyZXNzIHRoYXQgbXVsdGkgZGF0YSBieXRlcyB3cml0ZSB0byBpbiBTbGF2ZS4KKyAgKgorICAqLworCit1aW50MzJfdCBVSTJDX1dyaXRlTXVsdGlCeXRlc09uZVJlZyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgdThEYXRhQWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgdTMyd0xlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDFVLCB1OEN0cmwgPSAwVTsKKyAgICB1aW50MzJfdCB1MzJ0eExlbiA9IDBVOworICAgIGVudW0gVUkyQ19NQVNURVJfRVZFTlQgZUV2ZW50ID0gTUFTVEVSX1NFTkRfU1RBUlQ7CisKKyAgICBVSTJDX1NUQVJUKHVpMmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAvKiBDbGVhciBTVEFSVCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxVSkgfCAweDAwVSkpOyAgICAvKiBXcml0ZSBTTEErVyB0byBSZWdpc3RlciBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCB1OERhdGFBZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIGFkZHJlc3MgdG8gVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9EQVRBOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZih1MzJ0eExlbiA8IHUzMndMZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsIGRhdGFbdTMydHhMZW4rK10pOyAgICAgICAgICAgICAgLyogV3JpdGUgZGF0YSB0byBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2spOyAgICAgLyogQ2xlYXIgTkFDSyBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RPUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUT1AgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisKKyAgICByZXR1cm4gdTMydHhMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYnl0ZXMgbGVuZ3RoIHRoYXQgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgdHdvIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIFdyaXRlIGEgYnl0ZSB0byBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdTE2RGF0YUFkZHIgICAgIFNwZWNpZnkgYSBhZGRyZXNzICgyIGJ5dGUpIG9mIGRhdGEgd3JpdGUgdG8KKyAgKiBAcGFyYW1baW5dICBkYXRhICAgICAgICAgICAgV3JpdGUgYSBieXRlIGRhdGEgdG8gU2xhdmUKKyAgKgorICAqIEByZXR2YWwgICAgIDAgICAgICAgICAgICAgICBXcml0ZSBkYXRhIHN1Y2Nlc3MKKyAgKiBAcmV0dmFsICAgICAxICAgICAgICAgICAgICAgV3JpdGUgZGF0YSBmYWlsLCBvciBidXMgb2NjdXJzIGVycm9yIGV2ZW50cworICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIFVTQ0lfSTJDIE1hc3RlciBzcGVjaWZ5IHR3byBieXRlcyBhZGRyZXNzIHRoYXQgZGF0YSB3cml0ZSB0byBpbiBTbGF2ZS4KKyAgKgorICAqLworCit1aW50OF90IFVJMkNfV3JpdGVCeXRlVHdvUmVncyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQxNl90IHUxNkRhdGFBZGRyLCB1aW50OF90IGRhdGEpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxVSwgdThFcnIgPSAwVSwgdThDdHJsID0gMFU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwVTsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIFNUQVJUICovCisKKyAgICB3aGlsZSh1OFhmZXJpbmcpCisgICAgeworICAgICAgICB3aGlsZSghKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkpOyAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IFVJMkMgbmV3IHN0YXR1cyBvY2N1ciAqLworCisgICAgICAgIHN3aXRjaChVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RBUklGX01zayk7ICAgICAgICAgLyogQ2xlYXIgU1RBUlQgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMFUpKTsgICAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAgICAgLyogQ2xlYXIgQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZih1MzJ0eExlbiA9PSAwVSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgKHVpbnQ4X3QpKHUxNkRhdGFBZGRyICYgMHhGRjAwVSkgPj4gOFUpOyAgLyogV3JpdGUgSGkgYnl0ZSBkYXRhIGFkZHJlc3MgdG8gVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgICAgICB1MzJ0eExlbisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKHUzMnR4TGVuID09IDFVKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAodWludDhfdCkodTE2RGF0YUFkZHIgJiAweEZGVSkpOyAgICAgICAgIC8qIFdyaXRlIExvIGJ5dGUgZGF0YSBhZGRyZXNzIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgdTMydHhMZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZih1MzJ0eExlbiA9PSAyVSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgZGF0YSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGRhdGEgdG8gVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgICAgICB1MzJ0eExlbisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrKTsgICAgICAgICAvKiBDbGVhciBOQUNLIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RPUCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMFU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBVSTJDX0NUTCByZWdpc3RlciAqLworICAgIH0KKworICAgIHJldHVybiAodThFcnIgfCB1OFhmZXJpbmcpOworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgdHdvIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHdyaXRlIG11bHRpIGJ5dGVzIHRvIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqdWkyYyAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHUxNkRhdGFBZGRyICAgICBTcGVjaWZ5IGEgYWRkcmVzcyAoMiBieXRlcykgb2YgZGF0YSB3cml0ZSB0bworICAqIEBwYXJhbVtpbl0gICpkYXRhICAgICAgICAgICBQb2ludGVyIHRvIGFycmF5IHRvIHdyaXRlIGRhdGEgdG8gU2xhdmUKKyAgKiBAcGFyYW1baW5dICB1MzJ3TGVuICAgICAgICAgSG93IG1hbnkgYnl0ZXMgbmVlZCB0byB3cml0ZSB0byBTbGF2ZQorICAqCisgICogQHJldHVybiAgICAgQSBsZW5ndGggb2YgaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLgorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIFVTQ0lfSTJDIE1hc3RlciBzcGVjaWZ5IGEgYnl0ZSBhZGRyZXNzIHRoYXQgbXVsdGkgZGF0YSB3cml0ZSB0byBpbiBTbGF2ZS4KKyAgKgorICAqLworCit1aW50MzJfdCBVSTJDX1dyaXRlTXVsdGlCeXRlc1R3b1JlZ3MoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgdTMyd0xlbikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDFVLCB1OEFkZHIgPSAxVSwgdThDdHJsID0gMFU7CisgICAgdWludDMyX3QgdTMydHhMZW4gPSAwVTsKKyAgICBlbnVtIFVJMkNfTUFTVEVSX0VWRU5UIGVFdmVudCA9IE1BU1RFUl9TRU5EX1NUQVJUOworCisgICAgVUkyQ19TVEFSVCh1aTJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKworICAgIHdoaWxlKHU4WGZlcmluZykKKyAgICB7CisgICAgICAgIHdoaWxlKCEoVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgVUkyQyBuZXcgc3RhdHVzIG9jY3VyICovCisKKyAgICAgICAgc3dpdGNoKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RBUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrKTsgICAgICAgICAvKiBDbGVhciBTVEFSVCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIFVJMkNfU0VUX0RBVEEodWkyYywgKCh1aW50OF90KSh1OFNsYXZlQWRkciA8PCAxVSkgfCAweDAwVSkpOyAgICAvKiBXcml0ZSBTTEErVyB0byBSZWdpc3RlciBVSTJDX1RYREFUICovCisgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX0FDS0lGX01zayk7ICAgICAgICAgIC8qIENsZWFyIEFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICh1aW50OF90KSh1MTZEYXRhQWRkciAmIDB4RkYwMFUpID4+IDhVKTsgIC8qIFdyaXRlIEhpIGJ5dGUgZGF0YSBhZGRyZXNzIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfREFUQTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfREFUQSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHU4QWRkcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAodWludDhfdCkodTE2RGF0YUFkZHIgJiAweEZGVSkpOyAgICAgICAgIC8qIFdyaXRlIExvIGJ5dGUgZGF0YSBhZGRyZXNzIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHU4QWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih1MzJ0eExlbiA8IHUzMndMZW4pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCBkYXRhW3UzMnR4TGVuKytdKTsgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBkYXRhIHRvIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2spOyAgICAgICAgIC8qIENsZWFyIE5BQ0sgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RPUCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMFU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFVJMkNfU0VUX0NPTlRST0xfUkVHKHVpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19DVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisKKyAgICByZXR1cm4gdTMydHhMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZCAqLworfQorCisvKioKKyAgKiBAYnJpZWYgICAgICBSZWFkIGEgYnl0ZSBmcm9tIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqdWkyYyAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqCisgICogQHJldHVybiAgICAgUmVhZCBhIGJ5dGUgZGF0YSBmcm9tIFNsYXZlCisgICoKKyAgKiBAZGV0YWlscyAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IgVVNDSV9JMkMgTWFzdGVyIHRvIHJlYWQgYSBieXRlIGRhdGEgZnJvbSBTbGF2ZS4KKyAgKgorICAqLwordWludDhfdCBVSTJDX1JlYWRCeXRlKFVJMkNfVCAqdWkyYywgdWludDhfdCB1OFNsYXZlQWRkcikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDFVLCB1OEVyciA9IDBVLCByZGF0YSA9IDBVLCB1OEN0cmwgPSAwVTsKKyAgICBlbnVtIFVJMkNfTUFTVEVSX0VWRU5UIGVFdmVudCA9IE1BU1RFUl9TRU5EX1NUQVJUOworCisgICAgVUkyQ19TVEFSVCh1aTJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBTVEFSVCAqLworCisgICAgd2hpbGUodThYZmVyaW5nKQorICAgIHsKKyAgICAgICAgd2hpbGUoIShVSTJDX0dFVF9QUk9UX1NUQVRVUyh1aTJjKSAmIDB4M0YwMFUpKTsgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBVSTJDIG5ldyBzdGF0dXMgb2NjdXIgKi8KKworICAgICAgICBzd2l0Y2goVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUQVJJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RBUlQgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMVUpKTsgICAgLyogV3JpdGUgU0xBK1IgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9TRU5EX0hfUkRfQUREUkVTUzsKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfQUNLSUZfTXNrKTsgICAgICAvKiBDbGVhciBBQ0sgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfUkVBRF9EQVRBOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2spOyAgICAgLyogQ2xlYXIgTkFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX0hfUkRfQUREUkVTUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4RXJyID0gMVU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJkYXRhID0gKHVuc2lnbmVkIGNoYXIpIFVJMkNfR0VUX0RBVEEodWkyYyk7ICAgICAgICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RPUCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMFU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIFVJMkNfUFJPVENUTCByZWdpc3RlciAqLworICAgIH0KKworICAgIGlmKHU4RXJyKQorICAgICAgICByZGF0YSA9IDBVOworCisgICAgcmV0dXJuIHJkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHJlYWQgZGF0YSAqLworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFJlYWQgbXVsdGkgYnl0ZXMgZnJvbSBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9JMkMgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHU4U2xhdmVBZGRyICAgICBBY2Nlc3MgU2xhdmUgYWRkcmVzcyg3LWJpdCkKKyAgKiBAcGFyYW1bb3V0XSAqcmRhdGEgICAgICAgICAgUG9pbnQgdG8gYXJyYXkgdG8gc3RvcmUgZGF0YSBmcm9tIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyckxlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gcmVhZCBmcm9tIFNsYXZlCisgICoKKyAgKiBAcmV0dXJuICAgICBBIGxlbmd0aCBvZiBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gcmVjZWl2ZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgdG8gcmVhZCBtdWx0aSBkYXRhIGJ5dGVzIGZyb20gU2xhdmUuCisgICoKKyAgKgorICAqLwordWludDMyX3QgVUkyQ19SZWFkTXVsdGlCeXRlcyhVSTJDX1QgKnVpMmMsIHVpbnQ4X3QgdThTbGF2ZUFkZHIsIHVpbnQ4X3QgKnJkYXRhLCB1aW50MzJfdCB1MzJyTGVuKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMVUsIHU4Q3RybCA9IDBVOworICAgIHVpbnQzMl90IHUzMnJ4TGVuID0gMFU7CisgICAgZW51bSBVSTJDX01BU1RFUl9FVkVOVCBlRXZlbnQgPSBNQVNURVJfU0VORF9TVEFSVDsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKworICAgIHdoaWxlKHU4WGZlcmluZykKKyAgICB7CisgICAgICAgIHdoaWxlKCEoVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgVUkyQyBuZXcgc3RhdHVzIG9jY3VyICovCisKKyAgICAgICAgc3dpdGNoKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RBUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUQVJUIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgVUkyQ19TRVRfREFUQSh1aTJjLCAoKHVpbnQ4X3QpKHU4U2xhdmVBZGRyIDw8IDFVKSB8IDB4MDFVKSk7IC8qIFdyaXRlIFNMQStSIHRvIFJlZ2lzdGVyIFVJMkNfVFhEQVQgKi8KKyAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9IX1JEX0FERFJFU1M7CisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQUNLSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX0FDS0lGX01zayk7ICAgICAgLyogQ2xlYXIgQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfSF9SRF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9BQSk7CisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9SRUFEX0RBVEE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJkYXRhW3UzMnJ4TGVuKytdID0gKHVuc2lnbmVkIGNoYXIpIFVJMkNfR0VUX0RBVEEodWkyYyk7ICAgIC8qIFJlY2VpdmUgRGF0YSAqLworCisgICAgICAgICAgICAgICAgICAgIGlmKHUzMnJ4TGVuIDwgKHUzMnJMZW4gLSAxVSkpCisgICAgICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX0FBKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrKTsgICAgIC8qIENsZWFyIE5BQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfUkVBRF9EQVRBKQorICAgICAgICAgICAgICAgICAgICByZGF0YVt1MzJyeExlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSBVSTJDX0dFVF9EQVRBKHVpMmMpOyAgICAvKiBSZWNlaXZlIERhdGEgKi8KKworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RPUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUT1AgSU5UIEZsYWcgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSAqLworICAgICAgICAgICAgICAgIHU4WGZlcmluZyA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19BUkJMT0lGX01zazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJiaXRyYXRpb24gTG9zdCAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25vdyBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTSSBhbmQgc2VuZCBTVE9QICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19QUk9UQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMnJ4TGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ5dGVzIGxlbmd0aCB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCAqLworfQorCisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgYSBieXRlIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHJlYWQgYSBieXRlIGZyb20gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICp1aTJjICAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHU4RGF0YUFkZHIgICAgICBTcGVjaWZ5IGEgYWRkcmVzcygxIGJ5dGUpIG9mIGRhdGEgcmVhZCBmcm9tCisgICoKKyAgKiBAcmV0dXJuICAgICBSZWFkIGEgYnl0ZSBkYXRhIGZyb20gU2xhdmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgc3BlY2lmeSBhIGJ5dGUgYWRkcmVzcyB0aGF0IGEgZGF0YSBieXRlIHJlYWQgZnJvbSBTbGF2ZS4KKyAgKgorICAqCisgICovCit1aW50OF90IFVJMkNfUmVhZEJ5dGVPbmVSZWcoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YUFkZHIpCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxVSwgdThFcnIgPSAwVSwgcmRhdGEgPSAwVSwgdThDdHJsID0gMFU7CisgICAgZW51bSBVSTJDX01BU1RFUl9FVkVOVCBlRXZlbnQgPSBNQVNURVJfU0VORF9TVEFSVDsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKworICAgIHdoaWxlKHU4WGZlcmluZykKKyAgICB7CisgICAgICAgIHdoaWxlKCEoVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgVUkyQyBuZXcgc3RhdHVzIG9jY3VyICovCisKKyAgICAgICAgc3dpdGNoKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RBUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUQVJUIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfU1RBUlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMFUpKTsgICAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9BRERSRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9SRVBFQVRfU1RBUlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMVUpKTsgICAgLyogV3JpdGUgU0xBK1IgdG8gUmVnaXN0ZXIgVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfSF9SRF9BRERSRVNTOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2spOyAgICAgIC8qIENsZWFyIEFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsIHU4RGF0YUFkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGRhdGEgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9EQVRBOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9EQVRBKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVEEpOyAgICAgICAgICAgICAgICAvKiBTZW5kIHJlcGVhdCBTVEFSVCBzaWduYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfUkVQRUFUX1NUQVJUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBTTEErUiBBQ0sgKi8KKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsKKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1JFQURfREFUQTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrKTsgICAgIC8qIENsZWFyIE5BQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfUkVBRF9EQVRBKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmRhdGEgPSAodWludDhfdCkgVUkyQ19HRVRfREFUQSh1aTJjKTsgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlIERhdGEgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThFcnIgPSAxVTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX1NUTyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfU1RPUklGX01zayk7ICAgICAvKiBDbGVhciBTVE9QIElOVCBGbGFnICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgKi8KKyAgICAgICAgICAgICAgICB1OFhmZXJpbmcgPSAwVTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfQVJCTE9JRl9Nc2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyYml0cmF0aW9uIExvc3QgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3cgc3RhdHVzICovCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgU0kgYW5kIHNlbmQgU1RPUCAqLworICAgICAgICAgICAgICAgIHU4RXJyID0gMVU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBVSTJDX1NFVF9DT05UUk9MX1JFRyh1aTJjLCB1OEN0cmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbnRyb2xiaXQgdG8gVUkyQ19QUk9UQ1RMIHJlZ2lzdGVyICovCisgICAgfQorCisgICAgaWYodThFcnIpCisgICAgICAgIHJkYXRhID0gMFU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG9jY3VycyBlcnJvciwgcmV0dXJuIDAgKi8KKworICAgIHJldHVybiByZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiByZWFkIGRhdGEgKi8KK30KKworLyoqCisgICogQGJyaWVmICAgICAgU3BlY2lmeSBhIGJ5dGUgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgcmVhZCBtdWx0aSBieXRlcyBmcm9tIFNsYXZlCisgICoKKyAgKiBAcGFyYW1baW5dICAqdWkyYyAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX0kyQyBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdThTbGF2ZUFkZHIgICAgIEFjY2VzcyBTbGF2ZSBhZGRyZXNzKDctYml0KQorICAqIEBwYXJhbVtpbl0gIHU4RGF0YUFkZHIgICAgICBTcGVjaWZ5IGEgYWRkcmVzcyAoMSBieXRlcykgb2YgZGF0YSByZWFkIGZyb20KKyAgKiBAcGFyYW1bb3V0XSAqcmRhdGEgICAgICAgICAgUG9pbnQgdG8gYXJyYXkgdG8gc3RvcmUgZGF0YSBmcm9tIFNsYXZlCisgICogQHBhcmFtW2luXSAgdTMyckxlbiAgICAgICAgIEhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gcmVhZCBmcm9tIFNsYXZlCisgICoKKyAgKiBAcmV0dXJuICAgICBBIGxlbmd0aCBvZiBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gcmVjZWl2ZWQKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvciBVU0NJX0kyQyBNYXN0ZXIgc3BlY2lmeSBhIGJ5dGUgYWRkcmVzcyB0aGF0IG11bHRpIGRhdGEgYnl0ZXMgcmVhZCBmcm9tIFNsYXZlLgorICAqCisgICoKKyAgKi8KK3VpbnQzMl90IFVJMkNfUmVhZE11bHRpQnl0ZXNPbmVSZWcoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50OF90IHU4RGF0YUFkZHIsIHVpbnQ4X3QgKnJkYXRhLCB1aW50MzJfdCB1MzJyTGVuKQoreworICAgIHVpbnQ4X3QgdThYZmVyaW5nID0gMVUsIHU4Q3RybCA9IDBVOworICAgIHVpbnQzMl90IHUzMnJ4TGVuID0gMFU7CisgICAgZW51bSBVSTJDX01BU1RFUl9FVkVOVCBlRXZlbnQgPSBNQVNURVJfU0VORF9TVEFSVDsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKworICAgIHdoaWxlKHU4WGZlcmluZykKKyAgICB7CisgICAgICAgIHdoaWxlKCEoVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgVUkyQyBuZXcgc3RhdHVzIG9jY3VyICovCisKKyAgICAgICAgc3dpdGNoKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RBUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUQVJUIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfU1RBUlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMFUpKTsgICAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9BRERSRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9SRVBFQVRfU1RBUlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMVUpKTsgICAgLyogV3JpdGUgU0xBK1IgdG8gUmVnaXN0ZXIgVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfSF9SRF9BRERSRVNTOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2spOyAgICAgIC8qIENsZWFyIEFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsIHU4RGF0YUFkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGRhdGEgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSBVSTJDX0NUTF9QVFJHOworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9EQVRBOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9EQVRBKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVEEpOyAgICAgICAgICAgICAgICAvKiBTZW5kIHJlcGVhdCBTVEFSVCBzaWduYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfUkVQRUFUX1NUQVJUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9IX1JEX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBTTEErUiBBQ0sgKi8KKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9BQSk7CisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9SRUFEX0RBVEE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJkYXRhW3UzMnJ4TGVuKytdID0gKHVpbnQ4X3QpIFVJMkNfR0VUX0RBVEEodWkyYyk7ICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisKKyAgICAgICAgICAgICAgICAgICAgaWYodTMycnhMZW4gPCB1MzJyTGVuIC0gMVUpCisgICAgICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX0FBKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrKTsgICAgIC8qIENsZWFyIE5BQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfUkVBRF9EQVRBKQorICAgICAgICAgICAgICAgICAgICByZGF0YVt1MzJyeExlbisrXSA9ICh1aW50OF90KSBVSTJDX0dFVF9EQVRBKHVpMmMpOyAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgRGF0YSAqLworCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RPUCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMFU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFVJMkNfU0VUX0NPTlRST0xfUkVHKHVpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBVSTJDX1BST1RDVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisKKyAgICByZXR1cm4gdTMycnhMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYnl0ZXMgbGVuZ3RoIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgdHdvIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHJlYWQgYSBieXRlIGZyb20gU2xhdmUKKyAgKgorICAqIEBwYXJhbVtpbl0gICp1aTJjICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdTE2RGF0YUFkZHIgICAgIFNwZWNpZnkgYSBhZGRyZXNzKDIgYnl0ZSkgb2YgZGF0YSByZWFkIGZyb20KKyAgKgorICAqIEByZXR1cm4gICAgIFJlYWQgYSBieXRlIGRhdGEgZnJvbSBTbGF2ZQorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIFVTQ0lfSTJDIE1hc3RlciBzcGVjaWZ5IHR3byBieXRlcyBhZGRyZXNzIHRoYXQgYSBkYXRhIGJ5dGUgcmVhZCBmcm9tIFNsYXZlLgorICAqCisgICoKKyAgKi8KK3VpbnQ4X3QgVUkyQ19SZWFkQnl0ZVR3b1JlZ3MoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkcikKK3sKKyAgICB1aW50OF90IHU4WGZlcmluZyA9IDFVLCB1OEVyciA9IDBVLCByZGF0YSA9IDBVLCB1OEFkZHIgPSAxVSwgdThDdHJsID0gMFU7CisgICAgZW51bSBVSTJDX01BU1RFUl9FVkVOVCBlRXZlbnQgPSBNQVNURVJfU0VORF9TVEFSVDsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKworICAgIHdoaWxlKHU4WGZlcmluZykKKyAgICB7CisgICAgICAgIHdoaWxlKCEoVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgVUkyQyBuZXcgc3RhdHVzIG9jY3VyICovCisKKyAgICAgICAgc3dpdGNoKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RBUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUQVJUIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfU1RBUlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMFUpKTsgICAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9BRERSRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9SRVBFQVRfU1RBUlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMVUpKTsgICAgLyogV3JpdGUgU0xBK1IgdG8gUmVnaXN0ZXIgVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfSF9SRF9BRERSRVNTOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2spOyAgICAgIC8qIENsZWFyIEFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICh1aW50OF90KSh1MTZEYXRhQWRkciAmIDB4RkYwMFUpID4+IDhVKTsgIC8qIFdyaXRlIEhpIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9EQVRBOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9EQVRBKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYodThBZGRyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICh1aW50OF90KSh1MTZEYXRhQWRkciAmIDB4RkZVKSk7ICAgICAgIC8qIFdyaXRlIExvIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgdThBZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RBKTsgICAgICAgICAgICAgICAgLyogU2VuZCByZXBlYXQgU1RBUlQgc2lnbmFsICovCisgICAgICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9SRVBFQVRfU1RBUlQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogU0xBK1IgQUNLICovCisgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9SRUFEX0RBVEE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX05BQ0tJRl9Nc2s6CisgICAgICAgICAgICAgICAgVUkyQ19DTFJfUFJPVF9JTlRfRkxBRyh1aTJjLCBVSTJDX1BST1RTVFNfTkFDS0lGX01zayk7ICAgICAvKiBDbGVhciBOQUNLIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1JFQURfREFUQSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJkYXRhID0gKHVpbnQ4X3QpIFVJMkNfR0VUX0RBVEEodWkyYyk7ICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHU4RXJyID0gMVU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RPUCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMFU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICB1OEVyciA9IDFVOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgVUkyQ19TRVRfQ09OVFJPTF9SRUcodWkyYywgdThDdHJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb250cm9sYml0IHRvIFVJMkNfUFJPVENUTCByZWdpc3RlciAqLworICAgIH0KKworICAgIGlmKHU4RXJyKQorICAgICAgICByZGF0YSA9IDBVOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBvY2N1cnMgZXJyb3IsIHJldHVybiAwICovCisKKyAgICByZXR1cm4gcmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gcmVhZCBkYXRhICovCit9CisKKy8qKgorICAqIEBicmllZiAgICAgIFNwZWNpZnkgdHdvIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIHJlYWQgbXVsdGkgYnl0ZXMgZnJvbSBTbGF2ZQorICAqCisgICogQHBhcmFtW2luXSAgKnVpMmMgICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfSTJDIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1OFNsYXZlQWRkciAgICAgQWNjZXNzIFNsYXZlIGFkZHJlc3MoNy1iaXQpCisgICogQHBhcmFtW2luXSAgdTE2RGF0YUFkZHIgICAgIFNwZWNpZnkgYSBhZGRyZXNzICgyIGJ5dGVzKSBvZiBkYXRhIHJlYWQgZnJvbQorICAqIEBwYXJhbVtvdXRdICpyZGF0YSAgICAgICAgICBQb2ludCB0byBhcnJheSB0byBzdG9yZSBkYXRhIGZyb20gU2xhdmUKKyAgKiBAcGFyYW1baW5dICB1MzJyTGVuICAgICAgICAgSG93IG1hbnkgYnl0ZXMgbmVlZCB0byByZWFkIGZyb20gU2xhdmUKKyAgKgorICAqIEByZXR1cm4gICAgIEEgbGVuZ3RoIG9mIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiByZWNlaXZlZAorICAqCisgICogQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIFVTQ0lfSTJDIE1hc3RlciBzcGVjaWZ5IHR3byBieXRlcyBhZGRyZXNzIHRoYXQgbXVsdGkgZGF0YSBieXRlcyByZWFkIGZyb20gU2xhdmUuCisgICoKKyAgKgorICAqLwordWludDMyX3QgVUkyQ19SZWFkTXVsdGlCeXRlc1R3b1JlZ3MoVUkyQ19UICp1aTJjLCB1aW50OF90IHU4U2xhdmVBZGRyLCB1aW50MTZfdCB1MTZEYXRhQWRkciwgdWludDhfdCAqcmRhdGEsIHVpbnQzMl90IHUzMnJMZW4pCit7CisgICAgdWludDhfdCB1OFhmZXJpbmcgPSAxVSwgdThBZGRyID0gMVUsIHU4Q3RybCA9IDBVOworICAgIHVpbnQzMl90IHUzMnJ4TGVuID0gMFU7CisgICAgZW51bSBVSTJDX01BU1RFUl9FVkVOVCBlRXZlbnQgPSBNQVNURVJfU0VORF9TVEFSVDsKKworICAgIFVJMkNfU1RBUlQodWkyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgU1RBUlQgKi8KKworICAgIHdoaWxlKHU4WGZlcmluZykKKyAgICB7CisgICAgICAgIHdoaWxlKCEoVUkyQ19HRVRfUFJPVF9TVEFUVVModWkyYykgJiAweDNGMDBVKSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgVUkyQyBuZXcgc3RhdHVzIG9jY3VyICovCisKKyAgICAgICAgc3dpdGNoKFVJMkNfR0VUX1BST1RfU1RBVFVTKHVpMmMpICYgMHgzRjAwVSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfU1RBUklGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19TVEFSSUZfTXNrKTsgICAgIC8qIENsZWFyIFNUQVJUIElOVCBGbGFnICovCisKKyAgICAgICAgICAgICAgICBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfU1RBUlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMFUpKTsgICAgLyogV3JpdGUgU0xBK1cgdG8gUmVnaXN0ZXIgVUkyQ19UWERBVCAqLworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9BRERSRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9SRVBFQVRfU1RBUlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICgodWludDhfdCkodThTbGF2ZUFkZHIgPDwgMVUpIHwgMHgwMVUpKTsgICAgLyogV3JpdGUgU0xBK1IgdG8gUmVnaXN0ZXIgVFhEQVQgKi8KKyAgICAgICAgICAgICAgICAgICAgZUV2ZW50ID0gTUFTVEVSX1NFTkRfSF9SRF9BRERSRVNTOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19BQ0tJRl9Nc2spOyAgICAgIC8qIENsZWFyIEFDSyBJTlQgRmxhZyAqLworCisgICAgICAgICAgICAgICAgaWYoZUV2ZW50ID09IE1BU1RFUl9TRU5EX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICh1aW50OF90KSh1MTZEYXRhQWRkciAmIDB4RkYwMFUpID4+IDhVKTsgIC8qIFdyaXRlIEhpIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9EQVRBOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGVFdmVudCA9PSBNQVNURVJfU0VORF9EQVRBKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYodThBZGRyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBVSTJDX1NFVF9EQVRBKHVpMmMsICh1aW50OF90KSh1MTZEYXRhQWRkciAmIDB4RkZVKSk7ICAgICAgIC8qIFdyaXRlIExvIGJ5dGUgYWRkcmVzcyBvZiByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgdThBZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RBKTsgICAgICAgICAgICAgICAgLyogU2VuZCByZXBlYXQgU1RBUlQgc2lnbmFsICovCisgICAgICAgICAgICAgICAgICAgICAgICBlRXZlbnQgPSBNQVNURVJfU0VORF9SRVBFQVRfU1RBUlQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihlRXZlbnQgPT0gTUFTVEVSX1NFTkRfSF9SRF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9BQSk7CisgICAgICAgICAgICAgICAgICAgIGVFdmVudCA9IE1BU1RFUl9SRUFEX0RBVEE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJkYXRhW3UzMnJ4TGVuKytdID0gKHVpbnQ4X3QpIFVJMkNfR0VUX0RBVEEodWkyYyk7ICAgICAgLyogUmVjZWl2ZSBEYXRhICovCisKKyAgICAgICAgICAgICAgICAgICAgaWYodTMycnhMZW4gPCB1MzJyTGVuIC0gMVUpCisgICAgICAgICAgICAgICAgICAgICAgICB1OEN0cmwgPSAoVUkyQ19DVExfUFRSRyB8IFVJMkNfQ1RMX0FBKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdThDdHJsID0gVUkyQ19DVExfUFRSRzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVSTJDX1BST1RTVFNfTkFDS0lGX01zazoKKyAgICAgICAgICAgICAgICBVSTJDX0NMUl9QUk9UX0lOVF9GTEFHKHVpMmMsIFVJMkNfUFJPVFNUU19OQUNLSUZfTXNrKTsgICAgIC8qIENsZWFyIE5BQ0sgSU5UIEZsYWcgKi8KKworICAgICAgICAgICAgICAgIGlmKGVFdmVudCA9PSBNQVNURVJfUkVBRF9EQVRBKQorICAgICAgICAgICAgICAgICAgICByZGF0YVt1MzJyeExlbisrXSA9ICh1aW50OF90KSBVSTJDX0dFVF9EQVRBKHVpMmMpOyAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgRGF0YSAqLworCisgICAgICAgICAgICAgICAgdThDdHJsID0gKFVJMkNfQ1RMX1BUUkcgfCBVSTJDX0NUTF9TVE8pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFVJMkNfUFJPVFNUU19TVE9SSUZfTXNrOgorICAgICAgICAgICAgICAgIFVJMkNfQ0xSX1BST1RfSU5UX0ZMQUcodWkyYywgVUkyQ19QUk9UU1RTX1NUT1JJRl9Nc2spOyAgICAgLyogQ2xlYXIgU1RPUCBJTlQgRmxhZyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IFVJMkNfQ1RMX1BUUkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJICovCisgICAgICAgICAgICAgICAgdThYZmVyaW5nID0gMFU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVUkyQ19QUk9UU1RTX0FSQkxPSUZfTXNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmJpdHJhdGlvbiBMb3N0ICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93IHN0YXR1cyAqLworICAgICAgICAgICAgICAgIHU4Q3RybCA9IChVSTJDX0NUTF9QVFJHIHwgVUkyQ19DVExfU1RPKTsgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFNJIGFuZCBzZW5kIFNUT1AgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFVJMkNfU0VUX0NPTlRST0xfUkVHKHVpMmMsIHU4Q3RybCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29udHJvbGJpdCB0byBVSTJDX1BST1RDVEwgcmVnaXN0ZXIgKi8KKyAgICB9CisKKyAgICByZXR1cm4gdTMycnhMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYnl0ZXMgbGVuZ3RoIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkICovCit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNDSV9JMkNfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNDSV9JMkNfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VzY2lfc3BpLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy91c2NpX3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZGQ5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy91c2NpX3NwaS5jCkBAIC0wLDAgKzEsNjM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICB1c2NpX3NwaS5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBNMjM1MSBzZXJpZXMgVVNDSV9TUEkgZHJpdmVyIHNvdXJjZSBmaWxlCisgKgorICogQGNvcHlyaWdodCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgVVNDSV9TUElfRHJpdmVyIFVTQ0lfU1BJIERyaXZlcgorICBAeworKi8KKworCisvKiogQGFkZHRvZ3JvdXAgVVNDSV9TUElfRVhQT1JURURfRlVOQ1RJT05TIFVTQ0lfU1BJIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIG1ha2UgVVNDSV9TUEkgbW9kdWxlIGJlIHJlYWR5IHRvIHRyYW5zZmVyLgorICAqICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIFVTQ0lfU1BJIHRyYW5zZmVyIHNlcXVlbmNlIGlzIE1TQiBmaXJzdCwgdGhlIHNsYXZlIHNlbGVjdGlvbgorICAqICAgICAgICAgc2lnbmFsIGlzIGFjdGl2ZSBsb3cgYW5kIHRoZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0IGZ1bmN0aW9uIGlzIGRpc2FibGVkLiBJbgorICAqICAgICAgICAgU2xhdmUgbW9kZSwgdGhlIHUzMkJ1c0Nsb2NrIG11c3QgYmUgTlVMTCBhbmQgdGhlIFVTQ0lfU1BJIGNsb2NrCisgICogICAgICAgICBkaXZpZGVyIHNldHRpbmcgd2lsbCBiZSAwLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzdGVyU2xhdmUgRGVjaWRlIHRoZSBVU0NJX1NQSSBtb2R1bGUgaXMgb3BlcmF0aW5nIGluIG1hc3RlciBtb2RlIG9yIGluIHNsYXZlIG1vZGUuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX1NMQVZFCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX01BU1RFUgorICAqIEBwYXJhbVtpbl0gIHUzMlNQSU1vZGUgRGVjaWRlIHRoZSB0cmFuc2ZlciB0aW1pbmcuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX01PREVfMAorICAqICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9NT0RFXzEKKyAgKiAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfTU9ERV8yCisgICogICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVU1BJX01PREVfMworICAqIEBwYXJhbVtpbl0gIHUzMkRhdGFXaWR0aCBUaGUgZGF0YSB3aWR0aCBvZiBhIFVTQ0lfU1BJIHRyYW5zYWN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHUzMkJ1c0Nsb2NrIFRoZSBleHBlY3RlZCBmcmVxdWVuY3kgb2YgVVNDSV9TUEkgYnVzIGNsb2NrIGluIEh6LgorICAqIEByZXR1cm4gQWN0dWFsIGZyZXF1ZW5jeSBvZiBVU0NJX1NQSSBwZXJpcGhlcmFsIGNsb2NrLgorICAqLwordWludDMyX3QgVVNQSV9PcGVuKFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzdGVyU2xhdmUsIHVpbnQzMl90IHUzMlNQSU1vZGUsICB1aW50MzJfdCB1MzJEYXRhV2lkdGgsIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKQoreworICAgIHVpbnQzMl90IHUzMkNsa0RpdiA9IDBVTDsKKyAgICB1aW50MzJfdCB1MzJQY2xrOworICAgIHVpbnQzMl90IHUzMlJldFZhbHVlID0gMFVMOworCisgICAgaWYoKHVzcGkgPT0gVVNQSTApIHx8ICh1c3BpID09IFVTUEkwX05TKSkKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorCisgICAgaWYodTMyQnVzQ2xvY2sgIT0gMFVMKQorICAgIHsKKyAgICAgICAgdTMyQ2xrRGl2ID0gKHVpbnQzMl90KSgoKCgoKHUzMlBjbGsgLyAyVUwpICogMTBVTCkgLyAodTMyQnVzQ2xvY2spKSArIDVVTCkgLyAxMFVMKSAtIDFVTCk7IC8qIENvbXB1dGUgcHJvcGVyIGRpdmlkZXIgZm9yIFVTQ0lfU1BJIGNsb2NrICovCisgICAgfQorCisgICAgLyogRW5hYmxlIFVTQ0lfU1BJIHByb3RvY29sICovCisgICAgdXNwaS0+Q1RMICY9IH5VU1BJX0NUTF9GVU5NT0RFX01zazsKKyAgICB1c3BpLT5DVEwgPSAxVUwgPDwgVVNQSV9DVExfRlVOTU9ERV9Qb3M7CisKKyAgICAvKiBEYXRhIGZvcm1hdCBjb25maWd1cmF0aW9uICovCisgICAgaWYodTMyRGF0YVdpZHRoID09IDE2VUwpCisgICAgeworICAgICAgICB1MzJEYXRhV2lkdGggPSAwVUw7CisgICAgfQorICAgIHVzcGktPkxJTkVDVEwgJj0gflVTUElfTElORUNUTF9EV0lEVEhfTXNrOworICAgIHVzcGktPkxJTkVDVEwgfD0gKHUzMkRhdGFXaWR0aCA8PCBVU1BJX0xJTkVDVExfRFdJRFRIX1Bvcyk7CisKKyAgICAvKiBNU0IgZGF0YSBmb3JtYXQgKi8KKyAgICB1c3BpLT5MSU5FQ1RMICY9IH5VU1BJX0xJTkVDVExfTFNCX01zazsKKworICAgIC8qIFNldCBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGFjdGl2ZSBsb3cgKi8KKyAgICBpZih1MzJNYXN0ZXJTbGF2ZSA9PSBVU1BJX01BU1RFUikKKyAgICB7CisgICAgICAgIHVzcGktPkxJTkVDVEwgfD0gVVNQSV9MSU5FQ1RMX0NUTE9JTlZfTXNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1c3BpLT5DVExJTjAgfD0gVVNQSV9DVExJTjBfSU5JTlZfTXNrOworICAgIH0KKworICAgIC8qIFNldCBvcGVyYXRpbmcgbW9kZSBhbmQgdHJhbnNmZXIgdGltaW5nICovCisgICAgdXNwaS0+UFJPVENUTCAmPSB+KFVTUElfUFJPVENUTF9TQ0xLTU9ERV9Nc2sgfCBVU1BJX1BST1RDVExfQVVUT1NTX01zayB8IFVTUElfUFJPVENUTF9TTEFWRV9Nc2spOworICAgIHVzcGktPlBST1RDVEwgfD0gKHUzMk1hc3RlclNsYXZlIHwgdTMyU1BJTW9kZSk7CisKKyAgICAvKiBTZXQgVVNDSV9TUEkgYnVzIGNsb2NrICovCisgICAgdXNwaS0+QlJHRU4gJj0gflVTUElfQlJHRU5fQ0xLRElWX01zazsKKyAgICB1c3BpLT5CUkdFTiB8PSAodTMyQ2xrRGl2IDw8IFVTUElfQlJHRU5fQ0xLRElWX1Bvcyk7CisgICAgdXNwaS0+UFJPVENUTCB8PSAgVVNQSV9QUk9UQ1RMX1BST1RFTl9Nc2s7CisKKyAgICBpZih1MzJCdXNDbG9jayAhPSAwVUwpCisgICAgeworICAgICAgICB1MzJSZXRWYWx1ZSA9ICh1MzJQY2xrIC8gKCh1MzJDbGtEaXYgKyAxVUwpIDw8IDFVTCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzJSZXRWYWx1ZSA9IDBVTDsKKyAgICB9CisKKyAgICByZXR1cm4gdTMyUmV0VmFsdWU7Cit9CisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIFVTQ0lfU1BJIGZ1bmN0aW9uIG1vZGUuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVVNQSV9DbG9zZShVU1BJX1QgKnVzcGkpCit7CisgICAgdXNwaS0+Q1RMICY9IH5VU1BJX0NUTF9GVU5NT0RFX01zazsKK30KKworLyoqCisgICogQGJyaWVmIENsZWFyIFJ4IGJ1ZmZlci4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBVU1BJX0NsZWFyUnhCdWYoVVNQSV9UICp1c3BpKQoreworICAgIHVzcGktPkJVRkNUTCB8PSBVU1BJX0JVRkNUTF9SWENMUl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiBDbGVhciBUeCBidWZmZXIuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVVNQSV9DbGVhclR4QnVmKFVTUElfVCAqdXNwaSkKK3sKKyAgICB1c3BpLT5CVUZDVEwgfD0gVVNQSV9CVUZDVExfVFhDTFJfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgRGlzYWJsZSB0aGUgYXV0b21hdGljIHNsYXZlIHNlbGVjdCBmdW5jdGlvbi4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBVU1BJX0Rpc2FibGVBdXRvU1MoVVNQSV9UICp1c3BpKQoreworICAgIHVzcGktPlBST1RDVEwgJj0gfihVU1BJX1BST1RDVExfQVVUT1NTX01zayB8IFVTUElfUFJPVENUTF9TU19Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgRW5hYmxlIHRoZSBhdXRvbWF0aWMgc2xhdmUgc2VsZWN0IGZ1bmN0aW9uLiBPbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMlNTUGluTWFzayBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZC4KKyAgKiBAcGFyYW1baW5dICB1MzJBY3RpdmVMZXZlbCBUaGUgYWN0aXZlIGxldmVsIG9mIHNsYXZlIHNlbGVjdCBzaWduYWwuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVNQSV9TU19BQ1RJVkVfSElHSAorICAqICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVTUElfU1NfQUNUSVZFX0xPVworICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBVU1BJX0VuYWJsZUF1dG9TUyhVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMlNTUGluTWFzaywgdWludDMyX3QgdTMyQWN0aXZlTGV2ZWwpCit7CisgICAgKHZvaWQpdTMyU1NQaW5NYXNrOworICAgIHVzcGktPkxJTkVDVEwgPSAodXNwaS0+TElORUNUTCAmIH5VU1BJX0xJTkVDVExfQ1RMT0lOVl9Nc2spIHwgdTMyQWN0aXZlTGV2ZWw7CisgICAgdXNwaS0+UFJPVENUTCB8PSBVU1BJX1BST1RDVExfQVVUT1NTX01zazsKK30KKworLyoqCisgICogQGJyaWVmIFNldCB0aGUgVVNDSV9TUEkgYnVzIGNsb2NrLiBPbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMkJ1c0Nsb2NrIFRoZSBleHBlY3RlZCBmcmVxdWVuY3kgb2YgVVNDSV9TUEkgYnVzIGNsb2NrLgorICAqIEByZXR1cm4gQWN0dWFsIGZyZXF1ZW5jeSBvZiBVU0NJX1NQSSBwZXJpcGhlcmFsIGNsb2NrLgorICAqLwordWludDMyX3QgVVNQSV9TZXRCdXNDbG9jayhVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMkJ1c0Nsb2NrKQoreworICAgIHVpbnQzMl90IHUzMkNsa0RpdjsKKyAgICB1aW50MzJfdCB1MzJQY2xrOworCisgICAgaWYoKHVzcGkgPT0gVVNQSTApIHx8ICh1c3BpID09IFVTUEkwX05TKSkKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlBjbGsgPSBDTEtfR2V0UENMSzFGcmVxKCk7CisgICAgfQorCisgICAgdTMyQ2xrRGl2ID0gKHVpbnQzMl90KSgoKCgoKHUzMlBjbGsgLyAyVUwpICogMTBVTCkgLyAodTMyQnVzQ2xvY2spKSArIDVVTCkgLyAxMFVMKSAtIDFVTCk7IC8qIENvbXB1dGUgcHJvcGVyIGRpdmlkZXIgZm9yIFVTQ0lfU1BJIGNsb2NrICovCisKKyAgICAvKiBTZXQgVVNDSV9TUEkgYnVzIGNsb2NrICovCisgICAgdXNwaS0+QlJHRU4gJj0gflVTUElfQlJHRU5fQ0xLRElWX01zazsKKyAgICB1c3BpLT5CUkdFTiB8PSAodTMyQ2xrRGl2IDw8IFVTUElfQlJHRU5fQ0xLRElWX1Bvcyk7CisKKyAgICByZXR1cm4gKHUzMlBjbGsgLyAoKHUzMkNsa0RpdiArIDFVTCkgPDwgMVVMKSk7Cit9CisKKy8qKgorICAqIEBicmllZiBHZXQgdGhlIGFjdHVhbCBmcmVxdWVuY3kgb2YgVVNDSV9TUEkgYnVzIGNsb2NrLiBPbmx5IGF2YWlsYWJsZSBpbiBNYXN0ZXIgbW9kZS4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEByZXR1cm4gQWN0dWFsIFVTQ0lfU1BJIGJ1cyBjbG9jayBmcmVxdWVuY3kuCisgICovCit1aW50MzJfdCBVU1BJX0dldEJ1c0Nsb2NrKFVTUElfVCAqdXNwaSkKK3sKKyAgICB1aW50MzJfdCB1MzJDbGtEaXYsIHUzMkJ1c0NsazsKKworICAgIHUzMkNsa0RpdiA9ICh1c3BpLT5CUkdFTiAmIFVTUElfQlJHRU5fQ0xLRElWX01zaykgPj4gVVNQSV9CUkdFTl9DTEtESVZfUG9zOworCisgICAgaWYoKHVzcGkgPT0gVVNQSTApIHx8ICh1c3BpID09IFVTUEkwX05TKSkKKyAgICB7CisgICAgICAgIHUzMkJ1c0NsayA9IChDTEtfR2V0UENMSzBGcmVxKCkgLyAoKHUzMkNsa0RpdiArIDFVTCkgPDwgMVVMKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMkJ1c0NsayA9IChDTEtfR2V0UENMSzFGcmVxKCkgLyAoKHUzMkNsa0RpdiArIDFVTCkgPDwgMVVMKSk7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkJ1c0NsazsKK30KKworLyoqCisgICogQGJyaWVmIEVuYWJsZSByZWxhdGVkIGludGVycnVwdHMgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICAqICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgYml0LgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TTFZUT19JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9UWFVEUl9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYU1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfVFhFTkRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfUlhTVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWEVORF9JTlRfTUFTSworICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBVU1BJX0VuYWJsZUludChVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogRW5hYmxlIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgaW5hY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU1NJTkFDVF9JTlRfTUFTSykgPT0gVVNQSV9TU0lOQUNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+UFJPVElFTiB8PSBVU1BJX1BST1RJRU5fU1NJTkFJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9TU0FDVF9JTlRfTUFTSykgPT0gVVNQSV9TU0FDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RJRU4gfD0gVVNQSV9QUk9USUVOX1NTQUNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgc2xhdmUgdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU0xWVE9fSU5UX01BU0spID09IFVTUElfU0xWVE9fSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9USUVOIHw9IFVTUElfUFJPVElFTl9TTFZUT0lFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHNsYXZlIGJpdCBjb3VudCBlcnJvciBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9TTFZCRV9JTlRfTUFTSykgPT0gVVNQSV9TTFZCRV9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RJRU4gfD0gVVNQSV9QUk9USUVOX1NMVkJFSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgVFggdW5kZXIgcnVuIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1RYVURSX0lOVF9NQVNLKSA9PSBVU1BJX1RYVURSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+QlVGQ1RMIHw9IFVTUElfQlVGQ1RMX1RYVURSSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9SWE9WX0lOVF9NQVNLKSA9PSBVU1BJX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5CVUZDVEwgfD0gVVNQSV9CVUZDVExfUlhPVklFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFRYIHN0YXJ0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1RYU1RfSU5UX01BU0spID09IFVTUElfVFhTVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPklOVEVOIHw9IFVTUElfSU5URU5fVFhTVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFRYIGVuZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9UWEVORF9JTlRfTUFTSykgPT0gVVNQSV9UWEVORF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPklOVEVOIHw9IFVTUElfSU5URU5fVFhFTkRJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBSWCBzdGFydCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9SWFNUX0lOVF9NQVNLKSA9PSBVU1BJX1JYU1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5JTlRFTiB8PSBVU1BJX0lOVEVOX1JYU1RJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBSWCBlbmQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfUlhFTkRfSU5UX01BU0spID09IFVTUElfUlhFTkRfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5JTlRFTiB8PSBVU1BJX0lOVEVOX1JYRU5ESUVOX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIHJlbGF0ZWQgaW50ZXJydXB0cyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgICogICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBiaXQuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdHMgd2lsbCBiZSBkaXNhYmxlZC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfU1NJTkFDVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TU0FDVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TTFZUT19JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TTFZCRV9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9UWFVEUl9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWE9WX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYU1RfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfVFhFTkRfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfUlhTVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWEVORF9JTlRfTUFTSworICAqIEByZXR1cm4gTm9uZQorICAqLwordm9pZCBVU1BJX0Rpc2FibGVJbnQoVVNQSV9UICp1c3BpLCB1aW50MzJfdCB1MzJNYXNrKQoreworICAgIC8qIERpc2FibGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBpbmFjdGl2ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9TU0lOQUNUX0lOVF9NQVNLKSA9PSBVU1BJX1NTSU5BQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9USUVOICY9IH5VU1BJX1BST1RJRU5fU1NJTkFJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU1NBQ1RfSU5UX01BU0spID09IFVTUElfU1NBQ1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9USUVOICY9IH5VU1BJX1BST1RJRU5fU1NBQ1RJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU0xWVE9fSU5UX01BU0spID09IFVTUElfU0xWVE9fSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9USUVOICY9IH5VU1BJX1BST1RJRU5fU0xWVE9JRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgc2xhdmUgYml0IGNvdW50IGVycm9yIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NMVkJFX0lOVF9NQVNLKSA9PSBVU1BJX1NMVkJFX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+UFJPVElFTiAmPSB+VVNQSV9QUk9USUVOX1NMVkJFSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9UWFVEUl9JTlRfTUFTSykgPT0gVVNQSV9UWFVEUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPkJVRkNUTCAmPSB+VVNQSV9CVUZDVExfVFhVRFJJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9SWE9WX0lOVF9NQVNLKSA9PSBVU1BJX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5CVUZDVEwgJj0gflVTUElfQlVGQ1RMX1JYT1ZJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgVFggc3RhcnQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfVFhTVF9JTlRfTUFTSykgPT0gVVNQSV9UWFNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+SU5URU4gJj0gflVTUElfSU5URU5fVFhTVElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBUWCBlbmQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfVFhFTkRfSU5UX01BU0spID09IFVTUElfVFhFTkRfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5JTlRFTiAmPSB+VVNQSV9JTlRFTl9UWEVORElFTl9Nc2s7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBSWCBzdGFydCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9SWFNUX0lOVF9NQVNLKSA9PSBVU1BJX1JYU1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5JTlRFTiAmPSB+VVNQSV9JTlRFTl9SWFNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFJYIGVuZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9SWEVORF9JTlRfTUFTSykgPT0gVVNQSV9SWEVORF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPklOVEVOICY9IH5VU1BJX0lOVEVOX1JYRU5ESUVOX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IGludGVycnVwdCBmbGFnLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHBhcmFtW2luXSAgdTMyTWFzayBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgICogICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdCBmbGFncyB3aWxsIGJlIHJlYWQuIEl0IGlzIGNvbWJpbmF0aW9uIG9mOgorICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TU0lOQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1NTQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1NMVlRPX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1NMVkJFX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYVURSX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1JYT1ZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfVFhTVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9UWEVORF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWFNUX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1JYRU5EX0lOVF9NQVNLCisgICogQHJldHVybiBJbnRlcnJ1cHQgZmxhZ3Mgb2Ygc2VsZWN0ZWQgc291cmNlcy4KKyAgKi8KK3VpbnQzMl90IFVTUElfR2V0SW50RmxhZyhVU1BJX1QgKnVzcGksIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgdWludDMyX3QgdTMyUHJvdFN0YXR1cywgdTMyQnVmU3RhdHVzOworICAgIHVpbnQzMl90IHUzMkludEZsYWcgPSAwVUw7CisKKyAgICB1MzJQcm90U3RhdHVzID0gdXNwaS0+UFJPVFNUUzsKKyAgICB1MzJCdWZTdGF0dXMgPSB1c3BpLT5CVUZTVFM7CisKKyAgICAvKiBDaGVjayBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGluYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NTSU5BQ1RfSU5UX01BU0spICYmICh1MzJQcm90U3RhdHVzICYgVVNQSV9QUk9UU1RTX1NTSU5BSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVVNQSV9TU0lOQUNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIHNsYXZlIHNlbGVjdGlvbiBzaWduYWwgYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1NTQUNUX0lOVF9NQVNLKSAmJiAodTMyUHJvdFN0YXR1cyAmIFVTUElfUFJPVFNUU19TU0FDVElGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVTUElfU1NBQ1RfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgc2xhdmUgdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU0xWVE9fSU5UX01BU0spICYmICh1MzJQcm90U3RhdHVzICYgVVNQSV9QUk9UU1RTX1NMVlRPSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVVNQSV9TTFZUT19JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBzbGF2ZSBiaXQgY291bnQgZXJyb3IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU0xWQkVfSU5UX01BU0spICYmICh1MzJQcm90U3RhdHVzICYgVVNQSV9QUk9UU1RTX1NMVkJFSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVVNQSV9TTFZCRV9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBUWCB1bmRlciBydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfVFhVRFJfSU5UX01BU0spICYmICh1MzJCdWZTdGF0dXMgJiBVU1BJX0JVRlNUU19UWFVEUklGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVTUElfVFhVRFJfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9SWE9WX0lOVF9NQVNLKSAmJiAodTMyQnVmU3RhdHVzICYgVVNQSV9CVUZTVFNfUlhPVklGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVTUElfUlhPVl9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBUWCBzdGFydCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9UWFNUX0lOVF9NQVNLKSAmJiAodTMyUHJvdFN0YXR1cyAmIFVTUElfUFJPVFNUU19UWFNUSUZfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVVNQSV9UWFNUX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYIGVuZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9UWEVORF9JTlRfTUFTSykgJiYgKHUzMlByb3RTdGF0dXMgJiBVU1BJX1BST1RTVFNfVFhFTkRJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVU1BJX1RYRU5EX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJYIHN0YXJ0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1JYU1RfSU5UX01BU0spICYmICh1MzJQcm90U3RhdHVzICYgVVNQSV9QUk9UU1RTX1JYU1RJRl9Nc2spKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVU1BJX1JYU1RfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUlggZW5kIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1JYRU5EX0lOVF9NQVNLKSAmJiAodTMyUHJvdFN0YXR1cyAmIFVTUElfUFJPVFNUU19SWEVORElGX01zaykpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVTUElfUlhFTkRfSU5UX01BU0s7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkludEZsYWc7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2xlYXIgaW50ZXJydXB0IGZsYWcuCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcGFyYW1baW5dICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgc291cmNlcy4KKyAgKiAgICAgICAgIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgaW50ZXJydXB0IHNvdXJjZS4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgY2xlYXJlZC4gSXQgY291bGQgYmUgdGhlIGNvbWJpbmF0aW9uIG9mOgorICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9TU0lOQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1NTQUNUX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1NMVlRPX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1NMVkJFX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYVURSX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1JYT1ZfSU5UX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfVFhTVF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9UWEVORF9JTlRfTUFTSworICAqICAgICAgICAgICAtIFxyZWYgVVNQSV9SWFNUX0lOVF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1JYRU5EX0lOVF9NQVNLCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFVTUElfQ2xlYXJJbnRGbGFnKFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICAvKiBDbGVhciBzbGF2ZSBzZWxlY3Rpb24gc2lnbmFsIGluYWN0aXZlIGludGVycnVwdCBmbGFnICovCisgICAgaWYodTMyTWFzayAmIFVTUElfU1NJTkFDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RTVFMgPSBVU1BJX1BST1RTVFNfU1NJTkFJRl9Nc2s7CisgICAgfQorCisgICAgLyogQ2xlYXIgc2xhdmUgc2VsZWN0aW9uIHNpZ25hbCBhY3RpdmUgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVVNQSV9TU0FDVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RTVFMgPSBVU1BJX1BST1RTVFNfU1NBQ1RJRl9Nc2s7CisgICAgfQorCisgICAgLyogQ2xlYXIgc2xhdmUgdGltZS1vdXQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVVNQSV9TTFZUT19JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RTVFMgPSBVU1BJX1BST1RTVFNfU0xWVE9JRl9Nc2s7CisgICAgfQorCisgICAgLyogQ2xlYXIgc2xhdmUgYml0IGNvdW50IGVycm9yIGludGVycnVwdCBmbGFnICovCisgICAgaWYodTMyTWFzayAmIFVTUElfU0xWQkVfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5QUk9UU1RTID0gVVNQSV9QUk9UU1RTX1NMVkJFSUZfTXNrOworICAgIH0KKworICAgIC8qIENsZWFyIFRYIHVuZGVyIHJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVU1BJX1RYVURSX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+QlVGU1RTID0gVVNQSV9CVUZTVFNfVFhVRFJJRl9Nc2s7CisgICAgfQorCisgICAgLyogQ2xlYXIgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVU1BJX1JYT1ZfSU5UX01BU0spCisgICAgeworICAgICAgICB1c3BpLT5CVUZTVFMgPSBVU1BJX0JVRlNUU19SWE9WSUZfTXNrOworICAgIH0KKworICAgIC8qIENsZWFyIFRYIHN0YXJ0IGludGVycnVwdCBmbGFnICovCisgICAgaWYodTMyTWFzayAmIFVTUElfVFhTVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RTVFMgPSBVU1BJX1BST1RTVFNfVFhTVElGX01zazsKKyAgICB9CisKKyAgICAvKiBDbGVhciBUWCBlbmQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVVNQSV9UWEVORF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHVzcGktPlBST1RTVFMgPSBVU1BJX1BST1RTVFNfVFhFTkRJRl9Nc2s7CisgICAgfQorCisgICAgLyogQ2xlYXIgUlggc3RhcnQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZih1MzJNYXNrICYgVVNQSV9SWFNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+UFJPVFNUUyA9IFVTUElfUFJPVFNUU19SWFNUSUZfTXNrOworICAgIH0KKworICAgIC8qIENsZWFyIFJYIGVuZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKHUzMk1hc2sgJiBVU1BJX1JYRU5EX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXNwaS0+UFJPVFNUUyA9IFVTUElfUFJPVFNUU19SWEVORElGX01zazsKKyAgICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IFVTQ0lfU1BJIHN0YXR1cy4KKyAgKiBAcGFyYW1baW5dICB1c3BpIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9TUEkgbW9kdWxlLgorICAqIEBwYXJhbVtpbl0gIHUzMk1hc2sgVGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZWxhdGVkIHNvdXJjZXMuCisgICogICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIHNvdXJjZS4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgd2hpY2ggZmxhZ3Mgd2lsbCBiZSByZWFkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfQlVTWV9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1JYX0VNUFRZX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfUlhfRlVMTF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1RYX0VNUFRZX01BU0sKKyAgKiAgICAgICAgICAgLSBccmVmIFVTUElfVFhfRlVMTF9NQVNLCisgICogICAgICAgICAgIC0gXHJlZiBVU1BJX1NTTElORV9TVFNfTUFTSworICAqIEByZXR1cm4gRmxhZ3Mgb2Ygc2VsZWN0ZWQgc291cmNlcy4KKyAgKi8KK3VpbnQzMl90IFVTUElfR2V0U3RhdHVzKFVTUElfVCAqdXNwaSwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICB1aW50MzJfdCB1MzJQcm90U3RhdHVzLCB1MzJCdWZTdGF0dXM7CisgICAgdWludDMyX3QgdTMyRmxhZyA9IDBVTDsKKworICAgIHUzMlByb3RTdGF0dXMgPSB1c3BpLT5QUk9UU1RTOworICAgIHUzMkJ1ZlN0YXR1cyA9IHVzcGktPkJVRlNUUzsKKworICAgIC8qIENoZWNrIGJ1c3kgc3RhdHVzICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX0JVU1lfTUFTSykgJiYgKHUzMlByb3RTdGF0dXMgJiBVU1BJX1BST1RTVFNfQlVTWV9Nc2spKQorICAgIHsKKyAgICAgICAgdTMyRmxhZyB8PSBVU1BJX0JVU1lfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCBlbXB0eSBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVU1BJX1JYX0VNUFRZX01BU0spICYmICh1MzJCdWZTdGF0dXMgJiBVU1BJX0JVRlNUU19SWEVNUFRZX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFVTUElfUlhfRU1QVFlfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSWCBmdWxsIGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfUlhfRlVMTF9NQVNLKSAmJiAodTMyQnVmU3RhdHVzICYgVVNQSV9CVUZTVFNfUlhGVUxMX01zaykpCisgICAgeworICAgICAgICB1MzJGbGFnIHw9IFVTUElfUlhfRlVMTF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYIGVtcHR5IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfVFhfRU1QVFlfTUFTSykgJiYgKHUzMkJ1ZlN0YXR1cyAmIFVTUElfQlVGU1RTX1RYRU1QVFlfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gVVNQSV9UWF9FTVBUWV9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFRYIGZ1bGwgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVNQSV9UWF9GVUxMX01BU0spICYmICh1MzJCdWZTdGF0dXMgJiBVU1BJX0JVRlNUU19UWEZVTExfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gVVNQSV9UWF9GVUxMX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVVNDSV9TUElfU1MgbGluZSBzdGF0dXMgKi8KKyAgICBpZigodTMyTWFzayAmIFVTUElfU1NMSU5FX1NUU19NQVNLKSAmJiAodTMyUHJvdFN0YXR1cyAmIFVTUElfUFJPVFNUU19TU0xJTkVfTXNrKSkKKyAgICB7CisgICAgICAgIHUzMkZsYWcgfD0gVVNQSV9TU0xJTkVfU1RTX01BU0s7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkZsYWc7Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIFVTQ0lfU1BJIFdha2UtdXAgRnVuY3Rpb24uCisgICogQHBhcmFtW2luXSAgdXNwaSBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfU1BJIG1vZHVsZS4KKyAgKiBAcmV0dXJuIE5vbmUKKyAgKi8KK3ZvaWQgVVNQSV9FbmFibGVXYWtldXAoVVNQSV9UICp1c3BpKQoreworICAgIHVzcGktPldLQ1RMIHw9IFVTUElfV0tDVExfV0tFTl9Nc2s7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBVU0NJX1NQSSBXYWtlLXVwIEZ1bmN0aW9uLgorICAqIEBwYXJhbVtpbl0gIHVzcGkgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1NQSSBtb2R1bGUuCisgICogQHJldHVybiBOb25lCisgICovCit2b2lkIFVTUElfRGlzYWJsZVdha2V1cChVU1BJX1QgKnVzcGkpCit7CisgICAgdXNwaS0+V0tDVEwgJj0gflVTUElfV0tDVExfV0tFTl9Nc2s7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNDSV9TUElfRVhQT1JURURfRlVOQ1RJT05TICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNDSV9TUElfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VzY2lfdWFydC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvdXNjaV91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhMGZlMgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9ic3AvTGlicmFyeS9TdGREcml2ZXIvc3JjL3VzY2lfdWFydC5jCkBAIC0wLDAgKzEsNzI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgdXNjaV91YXJ0LmMKKyAqIEB2ZXJzaW9uICBWMy4wMAorICogQGJyaWVmICAgIE0yMzUxIHNlcmllcyBVU0NJIFVBUlQgKFVVQVJUKSBkcml2ZXIgc291cmNlIGZpbGUKKyAqCisgKiBAY29weXJpZ2h0IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisvKiogQGFkZHRvZ3JvdXAgU3RhbmRhcmRfRHJpdmVyIFN0YW5kYXJkIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfVUFSVF9Ecml2ZXIgVVNDSV9VQVJUIERyaXZlcgorICBAeworKi8KKworLyoqIEBhZGR0b2dyb3VwIFVTQ0lfVUFSVF9FWFBPUlRFRF9GVU5DVElPTlMgVVNDSV9VQVJUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIENsZWFyIFVTQ0lfVUFSVCBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgc291cmNlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSBjbGVhcmVkLiBJdCBjb3VsZCBiZSB0aGUgY29tYmluYXRpb24gb2Y6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0FCUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9STFNfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfVFhTVF9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9UWEVORF9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9SWFNUX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1JYRU5EX0lOVF9NQVNLCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBVU0NJX1VBUlQgcmVsYXRlZCBpbnRlcnJ1cHQgZmxhZ3Mgc3BlY2lmaWVkIGJ5IHUzMk1hc2sgcGFyYW1ldGVyLgorICovCisKK3ZvaWQgVVVBUlRfQ2xlYXJJbnRGbGFnKFVVQVJUX1QqIHV1YXJ0LCB1aW50MzJfdCB1MzJNYXNrKQoreworCisgICAgaWYodTMyTWFzayAmIFVVQVJUX0FCUl9JTlRfTUFTSykgICAvKiBDbGVhciBBdXRvLWJhdWQgUmF0ZSBJbnRlcnJ1cHQgKi8KKyAgICB7CisgICAgICAgIHV1YXJ0LT5QUk9UU1RTID0gVVVBUlRfUFJPVFNUU19BQlJERVRJRl9Nc2s7CisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFVVQVJUX1JMU19JTlRfTUFTSykgICAvKiBDbGVhciBSZWNlaXZlIExpbmUgU3RhdHVzIEludGVycnVwdCAqLworICAgIHsKKyAgICAgICAgdXVhcnQtPlBST1RTVFMgPSAoVVVBUlRfUFJPVFNUU19CUkVBS19Nc2sgfCBVVUFSVF9QUk9UU1RTX0ZSTUVSUl9Nc2sgfCBVVUFSVF9QUk9UU1RTX1BBUklUWUVSUl9Nc2spOworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBVVUFSVF9CVUZfUlhPVl9JTlRfTUFTSykgICAvKiBDbGVhciBSZWNlaXZlIEJ1ZmZlciBPdmVyLXJ1biBFcnJvciBJbnRlcnJ1cHQgKi8KKyAgICB7CisgICAgICAgIHV1YXJ0LT5CVUZTVFMgPSBVVUFSVF9CVUZTVFNfUlhPVklGX01zazsKKyAgICB9CisKKyAgICBpZih1MzJNYXNrICYgVVVBUlRfVFhTVF9JTlRfTUFTSykgICAvKiBDbGVhciBUcmFuc21pdCBTdGFydCBJbnRlcnJ1cHQgKi8KKyAgICB7CisgICAgICAgIHV1YXJ0LT5QUk9UU1RTID0gVVVBUlRfUFJPVFNUU19UWFNUSUZfTXNrOworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBVVUFSVF9UWEVORF9JTlRfTUFTSykgICAvKiBDbGVhciBUcmFuc21pdCBFbmQgSW50ZXJydXB0ICovCisgICAgeworICAgICAgICB1dWFydC0+UFJPVFNUUyA9IFVVQVJUX1BST1RTVFNfVFhFTkRJRl9Nc2s7CisgICAgfQorCisgICAgaWYodTMyTWFzayAmIFVVQVJUX1JYU1RfSU5UX01BU0spICAgLyogQ2xlYXIgUmVjZWl2ZSBTdGFydCBJbnRlcnJ1cHQgKi8KKyAgICB7CisgICAgICAgIHV1YXJ0LT5QUk9UU1RTID0gVVVBUlRfUFJPVFNUU19SWFNUSUZfTXNrOworICAgIH0KKworICAgIGlmKHUzMk1hc2sgJiBVVUFSVF9SWEVORF9JTlRfTUFTSykgICAvKiBDbGVhciBSZWNlaXZlIEVuZCBJbnRlcnJ1cHQgKi8KKyAgICB7CisgICAgICAgIHV1YXJ0LT5QUk9UU1RTID0gVVVBUlRfUFJPVFNUU19SWEVORElGX01zazsKKyAgICB9CisKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgR2V0IFVTQ0lfVUFSVCBzcGVjaWZpZWQgaW50ZXJydXB0IGZsYWcKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgc291cmNlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBzb3VyY2UuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyB3aGljaCBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSByZWFkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfQUJSX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1JMU19JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9CVUZfUlhPVl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9UWFNUX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1RYRU5EX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1JYU1RfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUlhFTkRfSU5UX01BU0sKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIEludGVycnVwdCBmbGFncyBvZiBzZWxlY3RlZCBzb3VyY2VzLgorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IFVTQ0lfVUFSVCByZWxhdGVkIGludGVycnVwdCBmbGFncyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuCisgKi8KKwordWludDMyX3QgVVVBUlRfR2V0SW50RmxhZyhVVUFSVF9UKiB1dWFydCwgdWludDMyX3QgdTMyTWFzaykKK3sKKyAgICB1aW50MzJfdCB1MzJJbnRGbGFnID0gMHVsOworICAgIHVpbnQzMl90IHUzMlRtcDEsIHUzMlRtcDI7CisKKyAgICAvKiBDaGVjayBBdXRvLWJhdWQgUmF0ZSBJbnRlcnJ1cHQgRmxhZyAqLworICAgIHUzMlRtcDEgPSAodTMyTWFzayAmIFVVQVJUX0FCUl9JTlRfTUFTSyk7CisgICAgdTMyVG1wMiA9ICh1dWFydC0+UFJPVFNUUyAmIFVVQVJUX1BST1RTVFNfQUJSREVUSUZfTXNrKTsKKyAgICBpZih1MzJUbXAxICYmIHUzMlRtcDIpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVVQVJUX0FCUl9JTlRfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDaGVjayBSZWNlaXZlIExpbmUgU3RhdHVzIEludGVycnVwdCBGbGFnICovCisgICAgdTMyVG1wMSA9ICh1MzJNYXNrICYgVVVBUlRfUkxTX0lOVF9NQVNLKTsKKyAgICB1MzJUbXAyID0gKHV1YXJ0LT5QUk9UU1RTICYgKFVVQVJUX1BST1RTVFNfQlJFQUtfTXNrIHwgVVVBUlRfUFJPVFNUU19GUk1FUlJfTXNrIHwgVVVBUlRfUFJPVFNUU19QQVJJVFlFUlJfTXNrKSk7CisgICAgaWYodTMyVG1wMSAmJiB1MzJUbXAyKQorICAgIHsKKyAgICAgICAgdTMySW50RmxhZyB8PSBVVUFSVF9STFNfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUmVjZWl2ZSBCdWZmZXIgT3Zlci1ydW4gRXJyb3IgSW50ZXJydXB0IEZsYWcgKi8KKyAgICB1MzJUbXAxID0gKHUzMk1hc2sgJiBVVUFSVF9CVUZfUlhPVl9JTlRfTUFTSyk7CisgICAgdTMyVG1wMiA9ICh1dWFydC0+QlVGU1RTICYgVVVBUlRfQlVGU1RTX1JYT1ZJRl9Nc2spOworICAgIGlmKHUzMlRtcDEgJiYgdTMyVG1wMikKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVHJhbnNtaXQgU3RhcnQgSW50ZXJydXB0IEZsYWcgKi8KKyAgICB1MzJUbXAxID0gKHUzMk1hc2sgJiBVVUFSVF9UWFNUX0lOVF9NQVNLKTsKKyAgICB1MzJUbXAyID0gKHV1YXJ0LT5QUk9UU1RTICYgVVVBUlRfUFJPVFNUU19UWFNUSUZfTXNrKTsKKyAgICBpZih1MzJUbXAxICYmIHUzMlRtcDIpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVVQVJUX1RYU1RfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgVHJhbnNtaXQgRW5kIEludGVycnVwdCBGbGFnICovCisgICAgdTMyVG1wMSA9ICh1MzJNYXNrICYgVVVBUlRfVFhFTkRfSU5UX01BU0spOworICAgIHUzMlRtcDIgPSAodXVhcnQtPlBST1RTVFMgJiBVVUFSVF9QUk9UU1RTX1RYRU5ESUZfTXNrKTsKKyAgICBpZih1MzJUbXAxICYmIHUzMlRtcDIpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVVQVJUX1RYRU5EX0lOVF9NQVNLOworICAgIH0KKworICAgIC8qIENoZWNrIFJlY2VpdmUgU3RhcnQgSW50ZXJydXB0IEZsYWcgKi8KKyAgICB1MzJUbXAxID0gKHUzMk1hc2sgJiBVVUFSVF9SWFNUX0lOVF9NQVNLKTsKKyAgICB1MzJUbXAyID0gKHV1YXJ0LT5QUk9UU1RTICYgVVVBUlRfUFJPVFNUU19SWFNUSUZfTXNrKTsKKyAgICBpZih1MzJUbXAxICYmIHUzMlRtcDIpCisgICAgeworICAgICAgICB1MzJJbnRGbGFnIHw9IFVVQVJUX1JYU1RfSU5UX01BU0s7CisgICAgfQorCisgICAgLyogQ2hlY2sgUmVjZWl2ZSBFbmQgSW50ZXJydXB0IEZsYWcgKi8KKyAgICB1MzJUbXAxID0gKHUzMk1hc2sgJiBVVUFSVF9SWEVORF9JTlRfTUFTSyk7CisgICAgdTMyVG1wMiA9ICh1dWFydC0+UFJPVFNUUyAmIFVVQVJUX1BST1RTVFNfUlhFTkRJRl9Nc2spOworICAgIGlmKHUzMlRtcDEgJiYgdTMyVG1wMikKKyAgICB7CisgICAgICAgIHUzMkludEZsYWcgfD0gVVVBUlRfUlhFTkRfSU5UX01BU0s7CisgICAgfQorCisgICAgcmV0dXJuIHUzMkludEZsYWc7Cit9CisKKworLyoqCisgKiAgQGJyaWVmICAgICAgRGlzYWJsZSBVU0NJX1VBUlQgZnVuY3Rpb24gbW9kZQorICoKKyAqICBAcGFyYW1baW5dICB1dWFydCBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUuCisgKgorICogIEByZXR1cm4gICAgIE5vbmUKKyAqCisgKiAgQGRldGFpbHMgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBVU0NJX1VBUlQgZnVuY3Rpb24gbW9kZS4KKyAqLwordm9pZCBVVUFSVF9DbG9zZShVVUFSVF9UKiB1dWFydCkKK3sKKyAgICB1dWFydC0+Q1RMID0gMFVMOworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBEaXNhYmxlIGludGVycnVwdCBmdW5jdGlvbi4KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJNYXNrIFRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVsYXRlZCBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBpbnRlcnJ1cHQgZW5hYmxlIGJpdC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdHMgd2lsbCBiZSBkaXNhYmxlZC4gSXQgaXMgY29tYmluYXRpb24gb2Y6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0FCUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9STFNfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfVFhTVF9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9UWEVORF9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9SWFNUX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1JYRU5EX0lOVF9NQVNLCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlZCBVU0NJX1VBUlQgcmVsYXRlZCBpbnRlcnJ1cHRzIHNwZWNpZmllZCBieSB1MzJNYXNrIHBhcmFtZXRlci4KKyAqLwordm9pZCBVVUFSVF9EaXNhYmxlSW50KFVVQVJUX1QqIHV1YXJ0LCB1aW50MzJfdCB1MzJNYXNrKQoreworCisgICAgLyogRGlzYWJsZSBBdXRvLWJhdWQgcmF0ZSBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfQUJSX0lOVF9NQVNLKSA9PSBVVUFSVF9BQlJfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+UFJPVElFTiAmPSB+VVVBUlRfUFJPVElFTl9BQlJJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgcmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfUkxTX0lOVF9NQVNLKSA9PSBVVUFSVF9STFNfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+UFJPVElFTiAmPSB+VVVBUlRfUFJPVElFTl9STFNJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgUlggb3ZlcnJ1biBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfQlVGX1JYT1ZfSU5UX01BU0spID09IFVVQVJUX0JVRl9SWE9WX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPkJVRkNUTCAmPSB+VVVBUlRfQlVGQ1RMX1JYT1ZJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgVFggc3RhcnQgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVVQVJUX1RYU1RfSU5UX01BU0spID09IFVVQVJUX1RYU1RfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+SU5URU4gJj0gflVVQVJUX0lOVEVOX1RYU1RJRU5fTXNrOworICAgIH0KKworICAgIC8qIERpc2FibGUgVFggZW5kIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVVUFSVF9UWEVORF9JTlRfTUFTSykgPT0gVVVBUlRfVFhFTkRfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+SU5URU4gJj0gflVVQVJUX0lOVEVOX1RYRU5ESUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFJYIHN0YXJ0IGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVVUFSVF9SWFNUX0lOVF9NQVNLKSA9PSBVVUFSVF9SWFNUX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPklOVEVOICY9IH5VVUFSVF9JTlRFTl9SWFNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIFJYIGVuZCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfUlhFTkRfSU5UX01BU0spID09IFVVQVJUX1JYRU5EX0lOVF9NQVNLKQorICAgIHsKKyAgICAgICAgdXVhcnQtPklOVEVOICY9IH5VVUFSVF9JTlRFTl9SWEVORElFTl9Nc2s7CisgICAgfQorfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBFbmFibGUgaW50ZXJydXB0IGZ1bmN0aW9uLgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJNYXNrICAgICBUaGUgY29tYmluYXRpb24gb2YgYWxsIHJlbGF0ZWQgaW50ZXJydXB0IGVuYWJsZSBiaXRzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGludGVycnVwdCBlbmFibGUgYml0LgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoaWNoIGludGVycnVwdHMgd2lsbCBiZSBlbmFibGVkLiBJdCBpcyBjb21iaW5hdGlvbiBvZjoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX0FCUl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfUkxTX0lOVF9NQVNLCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9CVUZfUlhPVl9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfVFhTVF9JTlRfTUFTSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfVFhFTkRfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1JYU1RfSU5UX01BU0sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1JYRU5EX0lOVF9NQVNLCisgKgorICogICAgQHJldHVybiAgICAgICBOb25lCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgVVNDSV9VQVJUIHJlbGF0ZWQgaW50ZXJydXB0cyBzcGVjaWZpZWQgYnkgdTMyTWFzayBwYXJhbWV0ZXIuLgorICovCit2b2lkIFVVQVJUX0VuYWJsZUludChVVUFSVF9UKiAgdXVhcnQsIHVpbnQzMl90IHUzMk1hc2spCit7CisgICAgLyogRW5hYmxlIEF1dG8tYmF1ZCByYXRlIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVVUFSVF9BQlJfSU5UX01BU0spID09IFVVQVJUX0FCUl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHV1YXJ0LT5QUk9USUVOIHw9IFVVQVJUX1BST1RJRU5fQUJSSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgcmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfUkxTX0lOVF9NQVNLKSA9PSBVVUFSVF9STFNfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+UFJPVElFTiB8PSBVVUFSVF9QUk9USUVOX1JMU0lFTl9Nc2s7CisgICAgfQorCisgICAgLyogRW5hYmxlIFJYIG92ZXJydW4gaW50ZXJydXB0IGZsYWcgKi8KKyAgICBpZigodTMyTWFzayAmIFVVQVJUX0JVRl9SWE9WX0lOVF9NQVNLKSA9PSBVVUFSVF9CVUZfUlhPVl9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHV1YXJ0LT5CVUZDVEwgfD0gVVVBUlRfQlVGQ1RMX1JYT1ZJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBUWCBzdGFydCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfVFhTVF9JTlRfTUFTSykgPT0gVVVBUlRfVFhTVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHV1YXJ0LT5JTlRFTiB8PSBVVUFSVF9JTlRFTl9UWFNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgVFggZW5kIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVVUFSVF9UWEVORF9JTlRfTUFTSykgPT0gVVVBUlRfVFhFTkRfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+SU5URU4gfD0gVVVBUlRfSU5URU5fVFhFTkRJRU5fTXNrOworICAgIH0KKworICAgIC8qIEVuYWJsZSBSWCBzdGFydCBpbnRlcnJ1cHQgZmxhZyAqLworICAgIGlmKCh1MzJNYXNrICYgVVVBUlRfUlhTVF9JTlRfTUFTSykgPT0gVVVBUlRfUlhTVF9JTlRfTUFTSykKKyAgICB7CisgICAgICAgIHV1YXJ0LT5JTlRFTiB8PSBVVUFSVF9JTlRFTl9SWFNUSUVOX01zazsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgUlggZW5kIGludGVycnVwdCBmbGFnICovCisgICAgaWYoKHUzMk1hc2sgJiBVVUFSVF9SWEVORF9JTlRfTUFTSykgPT0gVVVBUlRfUlhFTkRfSU5UX01BU0spCisgICAgeworICAgICAgICB1dWFydC0+SU5URU4gfD0gVVVBUlRfSU5URU5fUlhFTkRJRU5fTXNrOworICAgIH0KK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgT3BlbiBhbmQgc2V0IFVTQ0lfVUFSVCBmdW5jdGlvbgorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgICAgICAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyYmF1ZHJhdGUgICAgIFRoZSBiYXVkIHJhdGUgb2YgVVNDSV9VQVJUIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIFJlYWwgYmF1ZCByYXRlIG9mIFVTQ0lfVUFSVCBtb2R1bGUuCisgKgorICogICAgQGRldGFpbHMgICAgICBUaGlzIGZ1bmN0aW9uIHVzZSB0byBlbmFibGUgVVNDSV9VQVJUIGZ1bmN0aW9uIGFuZCBzZXQgYmF1ZC1yYXRlLgorICovCit1aW50MzJfdCBVVUFSVF9PcGVuKFVVQVJUX1QqIHV1YXJ0LCB1aW50MzJfdCB1MzJiYXVkcmF0ZSkKK3sKKyAgICB1aW50MzJfdCB1MzJQQ0xLRnJlcSwgdTMyUERTQ250LCB1MzJEU0NudCwgdTMyQ2xrRGl2OworICAgIHVpbnQzMl90IHUzMlRtcCwgdTMyVG1wMiwgdTMyTWluLCB1MzJNaW5DbGtEaXYsIHUzMk1pbkRTQ250OworICAgIHVpbnQzMl90IHUzMkRpdjsKKworICAgIC8qIEdldCBQQ0xLIGZyZXF1ZW5jeSAqLworICAgIGlmKCh1dWFydCA9PSBVVUFSVDApIHx8ICh1dWFydCA9PSBVVUFSVDBfTlMpKQorICAgIHsKKyAgICAgICAgdTMyUENMS0ZyZXEgPSBDTEtfR2V0UENMSzBGcmVxKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUzMlBDTEtGcmVxID0gQ0xLX0dldFBDTEsxRnJlcSgpOworICAgIH0KKworICAgIC8qIENhbGN1bGF0ZSBiYXVkIHJhdGUgZGl2aWRlciAqLworICAgIHUzMkRpdiA9IHUzMlBDTEtGcmVxIC8gdTMyYmF1ZHJhdGU7CisgICAgdTMyVG1wID0gKHUzMlBDTEtGcmVxIC8gdTMyRGl2KSAtIHUzMmJhdWRyYXRlOworICAgIHUzMlRtcDIgPSB1MzJiYXVkcmF0ZSAtICh1MzJQQ0xLRnJlcSAvICh1MzJEaXYgKyAxdWwpKTsKKworICAgIGlmKHUzMlRtcCA+PSB1MzJUbXAyKSB1MzJEaXYgPSB1MzJEaXYgKyAxdWw7CisKKyAgICBpZih1MzJEaXYgPj0gNjU1MzZ1bCkKKyAgICB7CisKKyAgICAgICAgLyogU2V0IHRoZSBzbWFsbGVzdCBiYXVkIHJhdGUgdGhhdCBVU0NJX1VBUlQgY2FuIGdlbmVyYXRlICovCisgICAgICAgIHUzMlBEU0NudCA9IDB4NHVsOworICAgICAgICB1MzJNaW5EU0NudCA9IDB4MTB1bDsKKyAgICAgICAgdTMyTWluQ2xrRGl2ID0gMHg0MDB1bDsKKworICAgIH0KKyAgICBlbHNlCisgICAgeworCisgICAgICAgIHUzMlRtcCA9IDB4NDAwdWwgKiAweDEwdWw7CisgICAgICAgIGZvcih1MzJQRFNDbnQgPSAxdWw7IHUzMlBEU0NudCA8PSAweDA0dWw7IHUzMlBEU0NudCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZih1MzJEaXYgPD0gKHUzMlRtcCAqIHUzMlBEU0NudCkpIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYodTMyUERTQ250ID4gMHg0dWwpIHUzMlBEU0NudCA9IDB4NHVsOworCisgICAgICAgIHUzMkRpdiA9IHUzMkRpdiAvIHUzMlBEU0NudDsKKworICAgICAgICAvKiBGaW5kIGJlc3Qgc29sdXRpb24gKi8KKyAgICAgICAgdTMyTWluID0gKHVpbnQzMl90KSAtIDE7CisgICAgICAgIHUzMk1pbkRTQ250ID0gMHVsOworICAgICAgICB1MzJNaW5DbGtEaXYgPSAwdWw7CisgICAgICAgIHUzMlRtcCA9IDB1bDsKKworICAgICAgICBmb3IodTMyRFNDbnQgPSA2dWw7IHUzMkRTQ250IDw9IDB4MTB1bDsgdTMyRFNDbnQrKykgICAvKiBEU0NOVCBjb3VsZCBiZSAweDV+MHhGICovCisgICAgICAgIHsKKworICAgICAgICAgICAgdTMyQ2xrRGl2ID0gdTMyRGl2IC8gdTMyRFNDbnQ7CisKKyAgICAgICAgICAgIGlmKHUzMkNsa0RpdiA+IDB4NDAwdWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyQ2xrRGl2ID0gMHg0MDB1bDsKKyAgICAgICAgICAgICAgICB1MzJUbXAgPSB1MzJEaXYgLSAodTMyQ2xrRGl2ICogdTMyRFNDbnQpOworICAgICAgICAgICAgICAgIHUzMlRtcDIgPSB1MzJUbXAgKyAxdWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyVG1wID0gdTMyRGl2IC0gKHUzMkNsa0RpdiAqIHUzMkRTQ250KTsKKyAgICAgICAgICAgICAgICB1MzJUbXAyID0gKCh1MzJDbGtEaXYgKyAxdWwpICogdTMyRFNDbnQpIC0gdTMyRGl2OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZih1MzJUbXAgPj0gdTMyVG1wMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtEaXYgPSB1MzJDbGtEaXYgKyAxdWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHUzMlRtcDIgPSB1MzJUbXA7CisKKyAgICAgICAgICAgIGlmKHUzMlRtcDIgPCB1MzJNaW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyTWluID0gdTMyVG1wMjsKKyAgICAgICAgICAgICAgICB1MzJNaW5EU0NudCA9IHUzMkRTQ250OworICAgICAgICAgICAgICAgIHUzMk1pbkNsa0RpdiA9IHUzMkNsa0RpdjsKKworICAgICAgICAgICAgICAgIC8qIEJyZWFrIHdoZW4gZ2V0IGdvb2QgcmVzdWx0cyAqLworICAgICAgICAgICAgICAgIGlmKHUzMk1pbiA9PSAwdWwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKworICAgIC8qIEVuYWJsZSBVU0NJX1VBUlQgcHJvdG9jb2wgKi8KKyAgICB1dWFydC0+Q1RMICY9IH5VVUFSVF9DVExfRlVOTU9ERV9Nc2s7CisgICAgdXVhcnQtPkNUTCA9IDJ1bCA8PCBVVUFSVF9DVExfRlVOTU9ERV9Qb3M7CisKKyAgICAvKiBTZXQgVVNDSV9VQVJUIGxpbmUgY29uZmlndXJhdGlvbiAqLworICAgIHV1YXJ0LT5MSU5FQ1RMID0gVVVBUlRfV09SRF9MRU5fOCB8IFVVQVJUX0xJTkVDVExfTFNCX01zazsKKyAgICB1dWFydC0+REFUSU4wID0gKDJ1bCA8PCBVVUFSVF9EQVRJTjBfRURHRURFVF9Qb3MpOyAgLyogU2V0IGZhbGxpbmcgZWRnZSBkZXRlY3Rpb24gKi8KKworICAgIC8qIFNldCBVU0NJX1VBUlQgYmF1ZCByYXRlICovCisgICAgdXVhcnQtPkJSR0VOID0gKCh1MzJNaW5DbGtEaXYgLSAxdWwpIDw8IFVVQVJUX0JSR0VOX0NMS0RJVl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAoKHUzMk1pbkRTQ250IC0gMXVsKSA8PCBVVUFSVF9CUkdFTl9EU0NOVF9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAoKHUzMlBEU0NudCAtIDF1bCkgPDwgVVVBUlRfQlJHRU5fUERTQ05UX1Bvcyk7CisKKyAgICB1dWFydC0+UFJPVENUTCB8PSBVVUFSVF9QUk9UQ1RMX1BST1RFTl9Nc2s7CisKKyAgICByZXR1cm4gKHUzMlBDTEtGcmVxIC8gdTMyUERTQ250IC8gdTMyTWluRFNDbnQgLyB1MzJNaW5DbGtEaXYpOworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBSZWFkIFVTQ0lfVUFSVCBkYXRhCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICBwdThSeEJ1ZiAgICAgICAgVGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBkYXRhIG9mIHJlY2VpdmUgYnVmZmVyLgorICogICAgQHBhcmFtW2luXSAgICB1MzJSZWFkQnl0ZXMgICAgVGhlIHJlYWQgYnl0ZXMgbnVtYmVyIG9mIGRhdGEuCisgKgorICogICAgQHJldHVybiAgICAgICBSZWNlaXZlIGJ5dGUgY291bnQKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgUnggZGF0YSBmcm9tIFJYIGJ1ZmZlciBhbmQgdGhlIGRhdGEgd2lsbCBiZSBzdG9yZWQgaW4gcHU4UnhCdWYuCisgKi8KK3VpbnQzMl90IFVVQVJUX1JlYWQoVVVBUlRfVCogdXVhcnQsIHVpbnQ4X3QgcHU4UnhCdWZbXSwgdWludDMyX3QgdTMyUmVhZEJ5dGVzKQoreworICAgIHVpbnQzMl90ICB1MzJDb3VudCwgdTMyZGVsYXlubzsKKworICAgIGZvcih1MzJDb3VudCA9IDB1bDsgdTMyQ291bnQgPCB1MzJSZWFkQnl0ZXM7IHUzMkNvdW50KyspCisgICAgeworICAgICAgICB1MzJkZWxheW5vID0gMHVsOworCisgICAgICAgIHdoaWxlKHV1YXJ0LT5CVUZTVFMgJiBVVUFSVF9CVUZTVFNfUlhFTVBUWV9Nc2spICAgLyogQ2hlY2sgUlggZW1wdHkgPT4gZmFpbGVkICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMmRlbGF5bm8rKzsKKyAgICAgICAgICAgIGlmKHUzMmRlbGF5bm8gPj0gMHg0MDAwMDAwMHVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYodTMyZGVsYXlubyA+PSAweDQwMDAwMDAwdWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcHU4UnhCdWZbdTMyQ291bnRdID0gKHVpbnQ4X3QpdXVhcnQtPlJYREFUOyAgICAvKiBHZXQgRGF0YSBmcm9tIFVTQ0kgUlggICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMkNvdW50OworCit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIFNldCBVU0NJX1VBUlQgbGluZSBjb25maWd1cmF0aW9uCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgICAgICAgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgQHBhcmFtW2luXSAgICB1MzJiYXVkcmF0ZSAgICAgVGhlIHJlZ2lzdGVyIHZhbHVlIG9mIGJhdWQgcmF0ZSBvZiBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdTMyYmF1ZHJhdGUgPSAwLCBVU0NJX1VBUlQgYmF1ZCByYXRlIHdpbGwgbm90IGNoYW5nZS4KKyAqICAgIEBwYXJhbVtpbl0gICAgdTMyZGF0YV93aWR0aCAgIFRoZSBkYXRhIGxlbmd0aCBvZiBVU0NJX1VBUlQgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1dPUkRfTEVOXzYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9XT1JEX0xFTl83CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfV09SRF9MRU5fOAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1dPUkRfTEVOXzkKKyAqICAgIEBwYXJhbVtpbl0gICAgdTMycGFyaXR5ICAgICAgIFRoZSBwYXJpdHkgc2V0dGluZyAobm9uZS9vZGQvZXZlbikgb2YgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QQVJJVFlfTk9ORQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFVVQVJUX1BBUklUWV9PREQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QQVJJVFlfRVZFTgorICogICAgQHBhcmFtW2luXSAgICB1MzJzdG9wX2JpdHMgICAgVGhlIHN0b3AgYml0IGxlbmd0aCAoMS8yIGJpdCkgb2YgVVNDSV9VQVJUIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9TVE9QX0JJVF8xCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgVVVBUlRfU1RPUF9CSVRfMgorICoKKyAqICAgIEByZXR1cm4gICAgICAgUmVhbCBiYXVkIHJhdGUgb2YgVVNDSV9VQVJUIG1vZHVsZS4KKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoaXMgZnVuY3Rpb24gdXNlIHRvIGNvbmZpZyBVU0NJX1VBUlQgbGluZSBzZXR0aW5nLgorICovCit1aW50MzJfdCBVVUFSVF9TZXRMaW5lX0NvbmZpZyhVVUFSVF9UKiB1dWFydCwgdWludDMyX3QgdTMyYmF1ZHJhdGUsIHVpbnQzMl90IHUzMmRhdGFfd2lkdGgsIHVpbnQzMl90IHUzMnBhcml0eSwgdWludDMyX3QgdTMyc3RvcF9iaXRzKQoreworICAgIHVpbnQzMl90IHUzMlBDTEtGcmVxLCB1MzJQRFNDbnQsIHUzMkRTQ250LCB1MzJDbGtEaXY7CisgICAgdWludDMyX3QgdTMyVG1wLCB1MzJUbXAyLCB1MzJNaW4sIHUzMk1pbkNsa0RpdiwgdTMyTWluRFNDbnQ7CisgICAgdWludDMyX3QgdTMyRGl2OworCisgICAgLyogR2V0IFBDTEsgZnJlcXVlbmN5ICovCisgICAgaWYoKHV1YXJ0ID09IFVVQVJUMCkgfHwgKHV1YXJ0ID09IFVVQVJUMF9OUykpCisgICAgeworICAgICAgICB1MzJQQ0xLRnJlcSA9IENMS19HZXRQQ0xLMEZyZXEoKTsKKyAgICB9CisgICAgZWxzZSAgICAgLyogVVVBUlQxICovCisgICAgeworICAgICAgICB1MzJQQ0xLRnJlcSA9IENMS19HZXRQQ0xLMUZyZXEoKTsKKyAgICB9CisKKyAgICBpZih1MzJiYXVkcmF0ZSAhPSAwdWwpCisgICAgeworCisgICAgICAgIC8qIENhbGN1bGF0ZSBiYXVkIHJhdGUgZGl2aWRlciAqLworICAgICAgICB1MzJEaXYgPSB1MzJQQ0xLRnJlcSAvIHUzMmJhdWRyYXRlOworICAgICAgICB1MzJUbXAgPSAodTMyUENMS0ZyZXEgLyB1MzJEaXYpIC0gdTMyYmF1ZHJhdGU7CisgICAgICAgIHUzMlRtcDIgPSB1MzJiYXVkcmF0ZSAtICh1MzJQQ0xLRnJlcSAvICh1MzJEaXYgKyAxdWwpKTsKKworICAgICAgICBpZih1MzJUbXAgPj0gdTMyVG1wMikgdTMyRGl2ID0gdTMyRGl2ICsgMXVsOworCisgICAgICAgIGlmKHUzMkRpdiA+PSA2NTUzNnVsKQorICAgICAgICB7CisKKyAgICAgICAgICAgIC8qIFNldCB0aGUgc21hbGxlc3QgYmF1ZCByYXRlIHRoYXQgVVNDSV9VQVJUIGNhbiBnZW5lcmF0ZSAqLworICAgICAgICAgICAgdTMyUERTQ250ID0gMHg0dWw7CisgICAgICAgICAgICB1MzJNaW5EU0NudCA9IDB4MTB1bDsKKyAgICAgICAgICAgIHUzMk1pbkNsa0RpdiA9IDB4NDAwdWw7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKworICAgICAgICAgICAgdTMyVG1wID0gMHg0MDB1bCAqIDB4MTB1bDsKKyAgICAgICAgICAgIGZvcih1MzJQRFNDbnQgPSAxdWw7IHUzMlBEU0NudCA8PSAweDA0dWw7IHUzMlBEU0NudCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKHUzMkRpdiA8PSAodTMyVG1wICogdTMyUERTQ250KSkgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHUzMlBEU0NudCA+IDB4NHVsKSB1MzJQRFNDbnQgPSAweDR1bDsKKworICAgICAgICAgICAgdTMyRGl2ID0gdTMyRGl2IC8gdTMyUERTQ250OworCisgICAgICAgICAgICAvKiBGaW5kIGJlc3Qgc29sdXRpb24gKi8KKyAgICAgICAgICAgIHUzMk1pbiA9ICh1aW50MzJfdCkgLSAxOworICAgICAgICAgICAgdTMyTWluRFNDbnQgPSAwdWw7CisgICAgICAgICAgICB1MzJNaW5DbGtEaXYgPSAwdWw7CisKKyAgICAgICAgICAgIGZvcih1MzJEU0NudCA9IDZ1bDsgdTMyRFNDbnQgPD0gMHgxMHVsOyB1MzJEU0NudCsrKSAgIC8qIERTQ05UIGNvdWxkIGJlIDB4NX4weEYgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJDbGtEaXYgPSB1MzJEaXYgLyB1MzJEU0NudDsKKworICAgICAgICAgICAgICAgIGlmKHUzMkNsa0RpdiA+IDB4NDAwdWwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJDbGtEaXYgPSAweDQwMHVsOworICAgICAgICAgICAgICAgICAgICB1MzJUbXAgPSB1MzJEaXYgLSAodTMyQ2xrRGl2ICogdTMyRFNDbnQpOworICAgICAgICAgICAgICAgICAgICB1MzJUbXAyID0gdTMyVG1wICsgMXVsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MzJUbXAgPSB1MzJEaXYgLSAodTMyQ2xrRGl2ICogdTMyRFNDbnQpOworICAgICAgICAgICAgICAgICAgICB1MzJUbXAyID0gKCh1MzJDbGtEaXYgKyAxdWwpICogdTMyRFNDbnQpIC0gdTMyRGl2OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKHUzMlRtcCA+PSB1MzJUbXAyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyQ2xrRGl2ID0gdTMyQ2xrRGl2ICsgMXVsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHUzMlRtcDIgPSB1MzJUbXA7CisKKyAgICAgICAgICAgICAgICBpZih1MzJUbXAyIDwgdTMyTWluKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTMyTWluID0gdTMyVG1wMjsKKyAgICAgICAgICAgICAgICAgICAgdTMyTWluRFNDbnQgPSB1MzJEU0NudDsKKyAgICAgICAgICAgICAgICAgICAgdTMyTWluQ2xrRGl2ID0gdTMyQ2xrRGl2OworCisgICAgICAgICAgICAgICAgICAgIC8qIEJyZWFrIHdoZW4gZ2V0IGdvb2QgcmVzdWx0cyAqLworICAgICAgICAgICAgICAgICAgICBpZih1MzJNaW4gPT0gMHVsKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICAgICAgLyogU2V0IFVTQ0lfVUFSVCBiYXVkIHJhdGUgKi8KKyAgICAgICAgdXVhcnQtPkJSR0VOID0gKCh1MzJNaW5DbGtEaXYgLSAxdWwpIDw8IFVVQVJUX0JSR0VOX0NMS0RJVl9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKCh1MzJNaW5EU0NudCAtIDF1bCkgPDwgVVVBUlRfQlJHRU5fRFNDTlRfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICgodTMyUERTQ250IC0gMXVsKSA8PCBVVUFSVF9CUkdFTl9QRFNDTlRfUG9zKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdTMyUERTQ250ID0gKCh1dWFydC0+QlJHRU4gJiBVVUFSVF9CUkdFTl9QRFNDTlRfTXNrKSA+PiBVVUFSVF9CUkdFTl9QRFNDTlRfUG9zKSArIDF1bDsKKyAgICAgICAgdTMyTWluRFNDbnQgPSAoKHV1YXJ0LT5CUkdFTiAmIFVVQVJUX0JSR0VOX0RTQ05UX01zaykgPj4gVVVBUlRfQlJHRU5fRFNDTlRfUG9zKSArIDF1bDsKKyAgICAgICAgdTMyTWluQ2xrRGl2ID0gKCh1dWFydC0+QlJHRU4gJiBVVUFSVF9CUkdFTl9DTEtESVZfTXNrKSA+PiBVVUFSVF9CUkdFTl9DTEtESVZfUG9zKSArIDF1bDsKKyAgICB9CisKKyAgICAvKiBTZXQgVVNDSV9VQVJUIGxpbmUgY29uZmlndXJhdGlvbiAqLworICAgIHV1YXJ0LT5MSU5FQ1RMID0gKHV1YXJ0LT5MSU5FQ1RMICYgflVVQVJUX0xJTkVDVExfRFdJRFRIX01zaykgfCB1MzJkYXRhX3dpZHRoOworICAgIHV1YXJ0LT5QUk9UQ1RMID0gKHV1YXJ0LT5QUk9UQ1RMICYgfihVVUFSVF9QUk9UQ1RMX1NUSUNLRU5fTXNrIHwgVVVBUlRfUFJPVENUTF9FVkVOUEFSSVRZX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVVQVJUX1BST1RDVExfUEFSSVRZRU5fTXNrKSkgfCB1MzJwYXJpdHk7CisgICAgdXVhcnQtPlBST1RDVEwgPSAodXVhcnQtPlBST1RDVEwgJiB+VVVBUlRfUFJPVENUTF9TVE9QQl9Nc2spIHwgdTMyc3RvcF9iaXRzOworCisgICAgcmV0dXJuICh1MzJQQ0xLRnJlcSAvIHUzMlBEU0NudCAvIHUzMk1pbkRTQ250IC8gdTMyTWluQ2xrRGl2KTsKK30KKworCisvKioKKyAqICAgIEBicmllZiAgICAgICAgV3JpdGUgVVNDSV9VQVJUIGRhdGEKKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHB1OFR4QnVmICAgICAgICBUaGUgYnVmZmVyIHRvIHNlbmQgdGhlIGRhdGEgdG8gVVNDSSB0cmFuc21pc3Npb24gYnVmZmVyLgorICogICAgQHBhcmFtW291dF0gICB1MzJXcml0ZUJ5dGVzICAgVGhlIGJ5dGUgbnVtYmVyIG9mIGRhdGEuCisgKgorICogICAgQHJldHVybiAgICAgICBUcmFuc2ZlciBieXRlIGNvdW50CisgKgorICogICAgQGRldGFpbHMgICAgICBUaGUgZnVuY3Rpb24gaXMgdG8gd3JpdGUgZGF0YSBpbnRvIFRYIGJ1ZmZlciB0byB0cmFuc21pdCBkYXRhIGJ5IFVTQ0lfVUFSVC4KKyAqLwordWludDMyX3QgVVVBUlRfV3JpdGUoVVVBUlRfVCogdXVhcnQsIHVpbnQ4X3QgcHU4VHhCdWZbXSwgdWludDMyX3QgdTMyV3JpdGVCeXRlcykKK3sKKyAgICB1aW50MzJfdCAgdTMyQ291bnQsIHUzMmRlbGF5bm87CisKKyAgICBmb3IodTMyQ291bnQgPSAwdWw7IHUzMkNvdW50ICE9IHUzMldyaXRlQnl0ZXM7IHUzMkNvdW50KyspCisgICAgeworICAgICAgICB1MzJkZWxheW5vID0gMHVsOworICAgICAgICB3aGlsZSgodXVhcnQtPkJVRlNUUyAmIFVVQVJUX0JVRlNUU19UWEVNUFRZX01zaykgPT0gMHVsKSAgIC8qIFdhaXQgVHggZW1wdHkgKi8KKyAgICAgICAgeworICAgICAgICAgICAgdTMyZGVsYXlubysrOworICAgICAgICAgICAgaWYodTMyZGVsYXlubyA+PSAweDQwMDAwMDAwdWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZih1MzJkZWxheW5vID49IDB4NDAwMDAwMDB1bCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICB1dWFydC0+VFhEQVQgPSAodWludDhfdClwdThUeEJ1Zlt1MzJDb3VudF07ICAgIC8qIFNlbmQgVVNDSV9VQVJUIERhdGEgdG8gYnVmZmVyICovCisgICAgfQorCisgICAgcmV0dXJuIHUzMkNvdW50OworfQorCisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBFbmFibGUgVVNDSV9VQVJUIFdha2UtdXAgRnVuY3Rpb24KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgICAgICAgICBUaGUgcG9pbnRlciBvZiB0aGUgc3BlY2lmaWVkIFVTQ0lfVUFSVCBtb2R1bGUuCisgKiAgICBAcGFyYW1baW5dICAgIHUzMldha2V1cE1vZGUgICBUaGUgd2FrZXVwIG1vZGUgb2YgVVNDSV9VQVJUIG1vZHVsZS4KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9UQ1RMX0RBVFdLRU5fTXNrICAgIDogRGF0YSB3YWtlLXVwIE1vZGUKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBVVUFSVF9QUk9UQ1RMX0NUU1dLRU5fTXNrICAgIDogbkNUUyB3YWtlLXVwIE1vZGUKKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBXYWtlLXVwIGZ1bmN0aW9uIG9mIFVTQ0lfVUFSVC4KKyAqLwordm9pZCBVVUFSVF9FbmFibGVXYWtldXAoVVVBUlRfVCogdXVhcnQsIHVpbnQzMl90IHUzMldha2V1cE1vZGUpCit7CisgICAgdXVhcnQtPlBST1RDVEwgfD0gdTMyV2FrZXVwTW9kZTsKKyAgICB1dWFydC0+V0tDVEwgfD0gVVVBUlRfV0tDVExfV0tFTl9Nc2s7Cit9CisKKworLyoqCisgKiAgICBAYnJpZWYgICAgICAgIERpc2FibGUgVVNDSV9VQVJUIFdha2UtdXAgRnVuY3Rpb24KKyAqCisgKiAgICBAcGFyYW1baW5dICAgIHV1YXJ0ICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBXYWtlLXVwIGZ1bmN0aW9uIG9mIFVTQ0lfVUFSVC4KKyAqLwordm9pZCBVVUFSVF9EaXNhYmxlV2FrZXVwKFVVQVJUX1QqIHV1YXJ0KQoreworICAgIHV1YXJ0LT5QUk9UQ1RMICY9IH4oVVVBUlRfUFJPVENUTF9EQVRXS0VOX01zayB8IFVVQVJUX1BST1RDVExfQ1RTV0tFTl9Nc2spOworICAgIHV1YXJ0LT5XS0NUTCAmPSB+VVVBUlRfV0tDVExfV0tFTl9Nc2s7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBFbmFibGUgVVNDSV9VQVJUIGF1dG8gZmxvdyBjb250cm9sCisgKgorICogICAgQHBhcmFtW2luXSAgICB1dWFydCAgIFRoZSBwb2ludGVyIG9mIHRoZSBzcGVjaWZpZWQgVVNDSV9VQVJUIG1vZHVsZS4KKyAqCisgKiAgICBAcmV0dXJuICAgICAgIE5vbmUKKyAqCisgKiAgICBAZGV0YWlscyAgICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBVU0NJX1VBUlQgYXV0byBmbG93IGNvbnRyb2wuCisgKi8KK3ZvaWQgVVVBUlRfRW5hYmxlRmxvd0N0cmwoVVVBUlRfVCogdXVhcnQpCit7CisgICAgLyogU2V0IFJUUyBzaWduYWwgaXMgbG93IGxldmVsIGFjdGl2ZSAqLworICAgIHV1YXJ0LT5MSU5FQ1RMICY9IH5VVUFSVF9MSU5FQ1RMX0NUTE9JTlZfTXNrOworCisgICAgLyogU2V0IENUUyBzaWduYWwgaXMgbG93IGxldmVsIGFjdGl2ZSAqLworICAgIHV1YXJ0LT5DVExJTjAgJj0gflVVQVJUX0NUTElOMF9JTklOVl9Nc2s7CisKKyAgICAvKiBFbmFibGUgQ1RTIGFuZCBSVFMgYXV0byBmbG93IGNvbnRyb2wgZnVuY3Rpb24gKi8KKyAgICB1dWFydC0+UFJPVENUTCB8PSBVVUFSVF9QUk9UQ1RMX1JUU0FVVE9FTl9Nc2sgfCBVVUFSVF9QUk9UQ1RMX0NUU0FVVE9FTl9Nc2s7Cit9CisKKy8qKgorICogICAgQGJyaWVmICAgICAgICBEaXNhYmxlIFVTQ0lfVUFSVCBhdXRvIGZsb3cgY29udHJvbAorICoKKyAqICAgIEBwYXJhbVtpbl0gICAgdXVhcnQgICAgVGhlIHBvaW50ZXIgb2YgdGhlIHNwZWNpZmllZCBVU0NJX1VBUlQgbW9kdWxlLgorICoKKyAqICAgIEByZXR1cm4gICAgICAgTm9uZQorICoKKyAqICAgIEBkZXRhaWxzICAgICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBVU0NJX1VBUlQgYXV0byBmbG93IGNvbnRyb2wuCisgKi8KK3ZvaWQgVVVBUlRfRGlzYWJsZUZsb3dDdHJsKFVVQVJUX1QqIHV1YXJ0KQoreworICAgIC8qIERpc2FibGUgQ1RTIGFuZCBSVFMgYXV0byBmbG93IGNvbnRyb2wgZnVuY3Rpb24gKi8KKyAgICB1dWFydC0+UFJPVENUTCAmPSB+KFVVQVJUX1BST1RDVExfUlRTQVVUT0VOX01zayB8IFVVQVJUX1BST1RDVExfQ1RTQVVUT0VOX01zayk7Cit9CisKKworCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgVVNDSV9VQVJUX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFVTQ0lfVUFSVF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvd2R0LmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy93ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2ZhODc3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvd2R0LmMKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHdkdC5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBXYXRjaGRvZyBUaW1lcihXRFQpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgV0RUX0RyaXZlciBXRFQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgV0RUX0VYUE9SVEVEX0ZVTkNUSU9OUyBXRFQgRXhwb3J0ZWQgRnVuY3Rpb25zCisgIEB7CisqLworCisvKioKKyAgKiBAYnJpZWYgICAgICBJbml0aWFsaXplIFdEVCBhbmQgc3RhcnQgY291bnRpbmcKKyAgKgorICAqIEBwYXJhbVtpbl0gIHUzMlRpbWVvdXRJbnRlcnZhbCAgVGltZS1vdXQgaW50ZXJ2YWwgcGVyaW9kIG9mIFdEVCBtb2R1bGUuIFZhbGlkIHZhbHVlcyBhcmU6CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1RJTUVPVVRfMlBPVzQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXRFRfVElNRU9VVF8yUE9XNgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdEVF9USU1FT1VUXzJQT1c4CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1RJTUVPVVRfMlBPVzEwCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1RJTUVPVVRfMlBPVzEyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1RJTUVPVVRfMlBPVzE0CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1RJTUVPVVRfMlBPVzE2CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV0RUX1RJTUVPVVRfMlBPVzE4CisgICogQHBhcmFtW2luXSAgdTMyUmVzZXREZWxheSAgICAgICBDb25maWd1cmUgV0RUIHRpbWUtb3V0IHJlc2V0IGRlbGF5IHBlcmlvZC4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXRFRfUkVTRVRfREVMQVlfMTAyNkNMSworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdEVF9SRVNFVF9ERUxBWV8xMzBDTEsKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXRFRfUkVTRVRfREVMQVlfMThDTEsKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXRFRfUkVTRVRfREVMQVlfM0NMSworICAqIEBwYXJhbVtpbl0gIHUzMkVuYWJsZVJlc2V0ICAgICAgRW5hYmxlIFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gZnVuY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmUgVFJVRSBhbmQgRkFMU0UuCisgICogQHBhcmFtW2luXSAgdTMyRW5hYmxlV2FrZXVwICAgICBFbmFibGUgV0RUIHRpbWUtb3V0IHdha2UtdXAgc3lzdGVtIGZ1bmN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlIFRSVUUgYW5kIEZBTFNFLgorICAqCisgICogQHJldHVybiAgICAgTm9uZQorICAqCisgICogQGRldGFpbHMgICAgVGhpcyBmdW5jdGlvbiBtYWtlcyBXRFQgbW9kdWxlIHN0YXJ0IGNvdW50aW5nIHdpdGggZGlmZmVyZW50IHRpbWUtb3V0IGludGVydmFsLCByZXNldCBkZWxheSBwZXJpb2QgYW5kIGNob29zZSB0byBcbgorICAqICAgICAgICAgICAgIGVuYWJsZSBvciBkaXNhYmxlIFdEVCB0aW1lLW91dCByZXNldCBzeXN0ZW0gb3Igd2FrZS11cCBzeXN0ZW0uCisgICAgICAgIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCBSZWdpc3RlciBXcml0ZS1Qcm90ZWN0aW9uIEZ1bmN0aW9uIGhhcyBiZWVuIGRpc2FibGVkIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICAqLwordm9pZCBXRFRfT3Blbih1aW50MzJfdCB1MzJUaW1lb3V0SW50ZXJ2YWwsCisgICAgICAgICAgICAgIHVpbnQzMl90IHUzMlJlc2V0RGVsYXksCisgICAgICAgICAgICAgIHVpbnQzMl90IHUzMkVuYWJsZVJlc2V0LAorICAgICAgICAgICAgICB1aW50MzJfdCB1MzJFbmFibGVXYWtldXApCit7CisgICAgV0RULT5BTFRDVEwgPSB1MzJSZXNldERlbGF5OworCisgICAgV0RULT5DVEwgPSB1MzJUaW1lb3V0SW50ZXJ2YWwgfCBXRFRfQ1RMX1dEVEVOX01zayB8CisgICAgICAgICAgICAgICAodTMyRW5hYmxlUmVzZXQgPDwgV0RUX0NUTF9SU1RFTl9Qb3MpIHwKKyAgICAgICAgICAgICAgICh1MzJFbmFibGVXYWtldXAgPDwgV0RUX0NUTF9XS0VOX1Bvcyk7Cit9CisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgV0RUX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFdEVF9Ecml2ZXIgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8KKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvd3dkdC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2JzcC9MaWJyYXJ5L1N0ZERyaXZlci9zcmMvd3dkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWM3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvYnNwL0xpYnJhcnkvU3RkRHJpdmVyL3NyYy93d2R0LmMKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHd3ZHQuYworICogQHZlcnNpb24gIFYzLjAwCisgKiBAYnJpZWYgICAgV2luZG93IFdhdGNoZG9nIFRpbWVyKFdXRFQpIGRyaXZlciBzb3VyY2UgZmlsZQorICoKKyAqIEBjb3B5cmlnaHQgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisKKy8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyCisgIEB7CisqLworCisvKiogQGFkZHRvZ3JvdXAgV1dEVF9Ecml2ZXIgV1dEVCBEcml2ZXIKKyAgQHsKKyovCisKKy8qKiBAYWRkdG9ncm91cCBXV0RUX0VYUE9SVEVEX0ZVTkNUSU9OUyBXV0RUIEV4cG9ydGVkIEZ1bmN0aW9ucworICBAeworKi8KKworLyoqCisgICogQGJyaWVmICAgICAgT3BlbiBXV0RUIGFuZCBzdGFydCBjb3VudGluZworICAqCisgICogQHBhcmFtW2luXSAgdTMyUHJlU2NhbGUgICAgIFByZS1zY2FsZSBzZXR0aW5nIG9mIFdXRFQgY291bnRlci4gVmFsaWQgdmFsdWVzIGFyZToKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzEKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzIKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzgKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzE2CisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8zMgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV1dEVF9QUkVTQ0FMRVJfNjQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzEyOAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV1dEVF9QUkVTQ0FMRVJfMTkyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl8yNTYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzM4NAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFxyZWYgV1dEVF9QUkVTQ0FMRVJfNTEyCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gXHJlZiBXV0RUX1BSRVNDQUxFUl83NjgKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzEwMjQKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzE1MzYKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBccmVmIFdXRFRfUFJFU0NBTEVSXzIwNDgKKyAgKiBAcGFyYW1baW5dICB1MzJDbXBWYWx1ZSAgICAgU2V0dGluZyB0aGUgd2luZG93IGNvbXBhcmVkIHZhbHVlLiBWYWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMHgwIHRvIDB4M0YuCisgICogQHBhcmFtW2luXSAgdTMyRW5hYmxlSW50ICAgIEVuYWJsZSBXV0RUIHRpbWUtb3V0IGludGVycnVwdCBmdW5jdGlvbi4gVmFsaWQgdmFsdWVzIGFyZSBUUlVFIGFuZCBGQUxTRS4KKyAgKgorICAqIEByZXR1cm4gICAgIE5vbmUKKyAgKgorICAqIEBkZXRhaWxzICAgIFRoaXMgZnVuY3Rpb24gbWFrZXMgV1dEVCBtb2R1bGUgc3RhcnQgY291bnRpbmcgd2l0aCBkaWZmZXJlbnQgY291bnRlciBwZXJpb2QgYnkgcHJlLXNjYWxlIHNldHRpbmcgYW5kIGNvbXBhcmVkIHdpbmRvdyB2YWx1ZS4KKyAgICAgICAgQXBwbGljYXRpb24gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBvbmx5IG9uY2UgYWZ0ZXIgYm9vdCB1cC4KKyAgKi8KK3ZvaWQgV1dEVF9PcGVuKHVpbnQzMl90IHUzMlByZVNjYWxlLAorICAgICAgICAgICAgICAgdWludDMyX3QgdTMyQ21wVmFsdWUsCisgICAgICAgICAgICAgICB1aW50MzJfdCB1MzJFbmFibGVJbnQpCit7CisgICAgV1dEVC0+Q1RMID0gdTMyUHJlU2NhbGUgfAorICAgICAgICAgICAgICAgICh1MzJDbXBWYWx1ZSA8PCBXV0RUX0NUTF9DTVBEQVRfUG9zKSB8CisgICAgICAgICAgICAgICAgKCh1MzJFbmFibGVJbnQgPT0gKHVpbnQzMl90KVRSVUUpID8gV1dEVF9DVExfSU5URU5fTXNrIDogMFVMKSB8CisgICAgICAgICAgICAgICAgV1dEVF9DVExfV1dEVEVOX01zazsKK30KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBXV0RUX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIFdXRFRfRHJpdmVyICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgU3RhbmRhcmRfRHJpdmVyICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9jbXNpc19kcml2ZXJzL0RyaXZlcl9GbGFzaC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2Ntc2lzX2RyaXZlcnMvRHJpdmVyX0ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiNjk2OQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9jbXNpc19kcml2ZXJzL0RyaXZlcl9GbGFzaC5jCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTggQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7IHlvdSBtYXkKKyAqIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiB3d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiRHJpdmVyX0ZsYXNoLmgiCisjaW5jbHVkZSAiTnVNaWNyby5oIgorI2luY2x1ZGUgIlJURV9EZXZpY2UuaCIKKyNpbmNsdWRlICJmbGFzaF9sYXlvdXQuaCIKKyNpbmNsdWRlICJyZWdpb25fZGVmcy5oIgorCisjaWZuZGVmIEFSR19VTlVTRUQKKyNkZWZpbmUgQVJHX1VOVVNFRChhcmcpICAoKHZvaWQpYXJnKQorI2VuZGlmCisKKy8qIERyaXZlciB2ZXJzaW9uICovCisjZGVmaW5lIEFSTV9GTEFTSF9EUlZfVkVSU0lPTiAgICBBUk1fRFJJVkVSX1ZFUlNJT05fTUFKT1JfTUlOT1IoMSwgMCkKKworLyoKKyAqIEFSTSBGTEFTSCBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0cnVjdCBhcm1fZmxhc2hfZGV2X3QKK3sKKyAgICBjb25zdCB1aW50MzJfdCBtZW1vcnlfYmFzZTsgICAvKiE8IEZMQVNIIG1lbW9yeSBiYXNlIGFkZHJlc3MgKi8KKyAgICBBUk1fRkxBU0hfSU5GTyAqZGF0YTsgICAgICAgICAvKiE8IEZMQVNIIGRhdGEgKi8KK307CisKKy8qIEZsYXNoIFN0YXR1cyAqLworc3RhdGljIEFSTV9GTEFTSF9TVEFUVVMgRmxhc2hTdGF0dXMgPSB7MCwgMCwgMH07CisKKy8qIERyaXZlciBWZXJzaW9uICovCitzdGF0aWMgY29uc3QgQVJNX0RSSVZFUl9WRVJTSU9OIERyaXZlclZlcnNpb24gPQoreworICAgIEFSTV9GTEFTSF9BUElfVkVSU0lPTiwKKyAgICBBUk1fRkxBU0hfRFJWX1ZFUlNJT04KK307CisKKy8qIERyaXZlciBDYXBhYmlsaXRpZXMgKi8KK3N0YXRpYyBjb25zdCBBUk1fRkxBU0hfQ0FQQUJJTElUSUVTIERyaXZlckNhcGFiaWxpdGllcyA9Cit7CisgICAgMCwgLyogZXZlbnRfcmVhZHkgKi8KKyAgICAyLCAvKiBkYXRhX3dpZHRoID0gMDo4LWJpdCwgMToxNi1iaXQsIDI6MzItYml0ICovCisgICAgMSAgLyogZXJhc2VfY2hpcCAqLworfTsKKworc3RhdGljIGludDMyX3QgaXNfcmFuZ2VfdmFsaWQoc3RydWN0IGFybV9mbGFzaF9kZXZfdCAqZmxhc2hfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0KQoreworICAgIHVpbnQzMl90IGZsYXNoX2xpbWl0ID0gMDsKKyAgICBpbnQzMl90IHJjID0gMDsKKworICAgIGZsYXNoX2xpbWl0ID0gKGZsYXNoX2Rldi0+ZGF0YS0+c2VjdG9yX2NvdW50ICogZmxhc2hfZGV2LT5kYXRhLT5zZWN0b3Jfc2l6ZSkKKyAgICAgICAgICAgICAgICAgIC0gMTsKKworICAgIGlmKG9mZnNldCA+IGZsYXNoX2xpbWl0KQorICAgIHsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50MzJfdCBpc193cml0ZV9hbGlnbmVkKHN0cnVjdCBhcm1fZmxhc2hfZGV2X3QgKmZsYXNoX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcGFyYW0pCit7CisgICAgaW50MzJfdCByYyA9IDA7CisKKyAgICBpZigocGFyYW0gJSBmbGFzaF9kZXYtPmRhdGEtPnByb2dyYW1fdW5pdCkgIT0gMCkKKyAgICB7CisgICAgICAgIHJjID0gLTE7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludDMyX3QgaXNfc2VjdG9yX2FsaWduZWQoc3RydWN0IGFybV9mbGFzaF9kZXZfdCAqZmxhc2hfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0KQoreworICAgIGludDMyX3QgcmMgPSAwOworCisgICAgaWYoKG9mZnNldCAlIGZsYXNoX2Rldi0+ZGF0YS0+c2VjdG9yX3NpemUpICE9IDApCisgICAgeworICAgICAgICByYyA9IC0xOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKyNpZiAoUlRFX0ZMQVNIMCkKK3N0YXRpYyBBUk1fRkxBU0hfSU5GTyBBUk1fRkxBU0gwX0RFVl9EQVRBID0KK3sKKyAgICAuc2VjdG9yX2luZm8gID0gTlVMTCwgICAgICAgICAgICAgICAgICAvKiBVbmlmb3JtIHNlY3RvciBsYXlvdXQgKi8KKyAgICAuc2VjdG9yX2NvdW50ID0gRk1DX0FQUk9NX1NJWkUgLyBGTUNfRkxBU0hfUEFHRV9TSVpFLAorICAgIC5zZWN0b3Jfc2l6ZSAgPSBGTUNfRkxBU0hfUEFHRV9TSVpFLAorICAgIC5wYWdlX3NpemUgICAgPSBGTUNfRkxBU0hfUEFHRV9TSVpFLAorICAgIC5wcm9ncmFtX3VuaXQgPSA0LAorICAgIC5lcmFzZWRfdmFsdWUgPSAweEZGCit9OworCitzdGF0aWMgc3RydWN0IGFybV9mbGFzaF9kZXZfdCBBUk1fRkxBU0gwX0RFViA9Cit7CisjaWYgKF9fRE9NQUlOX05TID09IDEpCisgICAgLm1lbW9yeV9iYXNlID0gRkxBU0gwX0JBU0VfTlMsCisjZWxzZQorICAgIC5tZW1vcnlfYmFzZSA9IEZNQ19BUFJPTV9CQVNFLAorI2VuZGlmIC8qIF9fRE9NQUlOX05TID09IDEgKi8KKyAgICAuZGF0YSAgICAgICAgPSAmKEFSTV9GTEFTSDBfREVWX0RBVEEpCit9OworCitzdHJ1Y3QgYXJtX2ZsYXNoX2Rldl90ICpGTEFTSDBfREVWID0gJkFSTV9GTEFTSDBfREVWOworCisvKgorICogRnVuY3Rpb25zCisgKi8KKworc3RhdGljIEFSTV9EUklWRVJfVkVSU0lPTiBBUk1fRmxhc2hfR2V0VmVyc2lvbih2b2lkKQoreworICAgIHJldHVybiBEcml2ZXJWZXJzaW9uOworfQorCitzdGF0aWMgQVJNX0ZMQVNIX0NBUEFCSUxJVElFUyBBUk1fRmxhc2hfR2V0Q2FwYWJpbGl0aWVzKHZvaWQpCit7CisgICAgcmV0dXJuIERyaXZlckNhcGFiaWxpdGllczsKK30KKworc3RhdGljIGludDMyX3QgQVJNX0ZsYXNoX0luaXRpYWxpemUoQVJNX0ZsYXNoX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgQVJHX1VOVVNFRChjYl9ldmVudCk7CisgICAgLyogTm90aGluZyB0byBiZSBkb25lICovCisKKyAgICBGTUNfT3BlbigpOworICAgIEZNQ19FTkFCTEVfQVBfVVBEQVRFKCk7CisgICAgRk1DX0VOQUJMRV9MRF9VUERBVEUoKTsKKworCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9GbGFzaF9VbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGJlIGRvbmUgKi8KKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgQVJNX0ZsYXNoX1Bvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgc3dpdGNoKHN0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfRlVMTDoKKyAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gYmUgZG9uZSAqLworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFSTV9QT1dFUl9PRkY6CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgQVJNX0ZsYXNoX1JlYWREYXRhKHVpbnQzMl90IGFkZHIsIHZvaWQgKmRhdGEsIHVpbnQzMl90IGNudCkKK3sKKyAgICB1aW50MzJfdCBzdGFydF9hZGRyID0gRkxBU0gwX0RFVi0+bWVtb3J5X2Jhc2UgKyBhZGRyOworICAgIGludDMyX3QgcmMgPSAwOworICAgIHVpbnQ4X3QqIHB1ODsKKyAgICB1aW50MzJfdCBpLCB0YWRkcjsKKworICAgIC8qIENoZWNrIGZsYXNoIG1lbW9yeSBib3VuZGFyaWVzICovCisgICAgcmMgPSBpc19yYW5nZV92YWxpZChGTEFTSDBfREVWLCBhZGRyICsgY250IC0gMSk7CisgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgIH0KKworICAgIHB1OCA9ICh1aW50OF90KilkYXRhOworCisgICAgZm9yKGkgPSAwOyBpIDwgY250OyBpKyspCisgICAgeworICAgICAgICB0YWRkciA9IHN0YXJ0X2FkZHIgKyBpOworICAgICAgICBpZih0YWRkciA+PSAoRkxBU0hfQVJFQV8wX09GRlNFVCtGTEFTSF9TX1BBUlRJVElPTl9TSVpFKSkKKyAgICAgICAgICAgIHRhZGRyICs9IE5TX09GRlNFVDsKKyAgICAgICAgcHU4W2ldID0gKih1aW50OF90Kil0YWRkcjsKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgQVJNX0ZsYXNoX1Byb2dyYW1EYXRhKHVpbnQzMl90IGFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGNudCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBtZW1fYmFzZSA9IEZMQVNIMF9ERVYtPm1lbW9yeV9iYXNlOworICAgIHVpbnQzMl90IHN0YXJ0X2FkZHIgPSBtZW1fYmFzZSArIGFkZHI7CisgICAgaW50MzJfdCByYyA9IDA7CisgICAgaW50MzJfdCBpLGo7CisKKyAgICAvKiBDaGVjayBmbGFzaCBtZW1vcnkgYm91bmRhcmllcyBhbmQgYWxpZ25tZW50IHdpdGggbWluaW1hbCB3cml0ZSBzaXplICovCisgICAgcmMgID0gaXNfcmFuZ2VfdmFsaWQoRkxBU0gwX0RFViwgYWRkciArIGNudCAtIDEpOworICAgIHJjIHw9IGlzX3dyaXRlX2FsaWduZWQoRkxBU0gwX0RFViwgYWRkcik7CisgICAgcmMgfD0gaXNfd3JpdGVfYWxpZ25lZChGTEFTSDBfREVWLCBjbnQpOworICAgIGlmKHJjICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgfQorCisgICAgeworICAgICAgICB1aW50OF90ICpwdTg7CisgICAgICAgIHVpbnQzMl90IHUzMkRhdGE7CisKKyAgICAgICAgcHU4ID0gKHVpbnQ4X3QgKilkYXRhOyAvLyBOb3RlIHRoZSBkYXRhIGJ1ZmZlciBhZGRyZXNzIG1heSBub3QgYmUgd29yZCBhbGlnbm1lbnQKKworICAgICAgICB1MzJEYXRhID0gMDsKKyAgICAgICAgaiA9IDA7CisgICAgICAgIGZvcihpPTA7aTxjbnQ7aSsrKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJEYXRhICs9ICh1aW50MzJfdClwdThbaV0gPDwgKDgqaik7CisgICAgICAgICAgICBqKys7CisKKyAgICAgICAgICAgIGlmKGo+PTQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRk1DX1dyaXRlKHN0YXJ0X2FkZHIrKGkrMS00KSwgdTMyRGF0YSk7CisgICAgICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICAgICAgdTMyRGF0YSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZihqKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICAgICAgd2hpbGUoMSk7CisgICAgICAgIH0KKworICAgIH0KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fRmxhc2hfRXJhc2VTZWN0b3IodWludDMyX3QgYWRkcikKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBtZW1fYmFzZSA9IEZMQVNIMF9ERVYtPm1lbW9yeV9iYXNlOworICAgIHVpbnQzMl90IHN0YXJ0X2FkZHIgPSBtZW1fYmFzZSArIGFkZHI7CisgICAgdWludDMyX3QgcmMgPSAwOworCisgICAgcmMgID0gaXNfcmFuZ2VfdmFsaWQoRkxBU0gwX0RFViwgYWRkcik7CisgICAgcmMgfD0gaXNfc2VjdG9yX2FsaWduZWQoRkxBU0gwX0RFViwgYWRkcik7CisgICAgaWYocmMgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1BBUkFNRVRFUjsKKyAgICB9CisKKyAgICBGTUNfRXJhc2Uoc3RhcnRfYWRkcik7CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgQVJNX0ZsYXNoX0VyYXNlQ2hpcCh2b2lkKQoreworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgYWRkciA9IEZMQVNIMF9ERVYtPm1lbW9yeV9iYXNlOworICAgIGludDMyX3QgcmMgPSBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgLyogQ2hlY2sgZHJpdmVyIGNhcGFiaWxpdHkgZXJhc2VfY2hpcCBiaXQgKi8KKyAgICBpZihEcml2ZXJDYXBhYmlsaXRpZXMuZXJhc2VfY2hpcCA9PSAxKQorICAgIHsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgRkxBU0gwX0RFVi0+ZGF0YS0+c2VjdG9yX2NvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEZNQ19FcmFzZShhZGRyKTsKKyAgICAgICAgICAgIGFkZHIgKz0gRkxBU0gwX0RFVi0+ZGF0YS0+c2VjdG9yX3NpemU7CisgICAgICAgICAgICByYyA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgQVJNX0ZMQVNIX1NUQVRVUyBBUk1fRmxhc2hfR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEZsYXNoU3RhdHVzOworfQorCitzdGF0aWMgQVJNX0ZMQVNIX0lORk8gKiBBUk1fRmxhc2hfR2V0SW5mbyh2b2lkKQoreworICAgIHJldHVybiBGTEFTSDBfREVWLT5kYXRhOworfQorCitBUk1fRFJJVkVSX0ZMQVNIIERyaXZlcl9GTEFTSDAgPQoreworICAgIEFSTV9GbGFzaF9HZXRWZXJzaW9uLAorICAgIEFSTV9GbGFzaF9HZXRDYXBhYmlsaXRpZXMsCisgICAgQVJNX0ZsYXNoX0luaXRpYWxpemUsCisgICAgQVJNX0ZsYXNoX1VuaW5pdGlhbGl6ZSwKKyAgICBBUk1fRmxhc2hfUG93ZXJDb250cm9sLAorICAgIEFSTV9GbGFzaF9SZWFkRGF0YSwKKyAgICBBUk1fRmxhc2hfUHJvZ3JhbURhdGEsCisgICAgQVJNX0ZsYXNoX0VyYXNlU2VjdG9yLAorICAgIEFSTV9GbGFzaF9FcmFzZUNoaXAsCisgICAgQVJNX0ZsYXNoX0dldFN0YXR1cywKKyAgICBBUk1fRmxhc2hfR2V0SW5mbworfTsKKyNlbmRpZiAvKiBSVEVfRkxBU0gwICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9Ecml2ZXJfVVNBUlQuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9jbXNpc19kcml2ZXJzL0RyaXZlcl9VU0FSVC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OTBhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9Ecml2ZXJfVVNBUlQuYwpAQCAtMCwwICsxLDQyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE4IEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpOyB5b3UgbWF5CisgKiBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJEcml2ZXJfVVNBUlQuaCIKKyNpbmNsdWRlICJOdU1pY3JvLmgiCisjaW5jbHVkZSAiUlRFX0RldmljZS5oIgorCisKKyNpZm5kZWYgQVJHX1VOVVNFRAorI2RlZmluZSBBUkdfVU5VU0VEKGFyZykgICh2b2lkKWFyZworI2VuZGlmCisKKy8qIERyaXZlciB2ZXJzaW9uICovCisjZGVmaW5lIEFSTV9VU0FSVF9EUlZfVkVSU0lPTiAgQVJNX0RSSVZFUl9WRVJTSU9OX01BSk9SX01JTk9SKDIsIDIpCisKKy8qIERyaXZlciBWZXJzaW9uICovCitzdGF0aWMgY29uc3QgQVJNX0RSSVZFUl9WRVJTSU9OIERyaXZlclZlcnNpb24gPQoreworICAgIEFSTV9VU0FSVF9BUElfVkVSU0lPTiwKKyAgICBBUk1fVVNBUlRfRFJWX1ZFUlNJT04KK307CisKKy8qIERyaXZlciBDYXBhYmlsaXRpZXMgKi8KK3N0YXRpYyBjb25zdCBBUk1fVVNBUlRfQ0FQQUJJTElUSUVTIERyaXZlckNhcGFiaWxpdGllcyA9Cit7CisgICAgMSwgLyogc3VwcG9ydHMgVUFSVCAoQXN5bmNocm9ub3VzKSBtb2RlICovCisgICAgMCwgLyogc3VwcG9ydHMgU3luY2hyb25vdXMgTWFzdGVyIG1vZGUgKi8KKyAgICAwLCAvKiBzdXBwb3J0cyBTeW5jaHJvbm91cyBTbGF2ZSBtb2RlICovCisgICAgMCwgLyogc3VwcG9ydHMgVUFSVCBTaW5nbGUtd2lyZSBtb2RlICovCisgICAgMCwgLyogc3VwcG9ydHMgVUFSVCBJckRBIG1vZGUgKi8KKyAgICAwLCAvKiBzdXBwb3J0cyBVQVJUIFNtYXJ0IENhcmQgbW9kZSAqLworICAgIDAsIC8qIFNtYXJ0IENhcmQgQ2xvY2sgZ2VuZXJhdG9yIGF2YWlsYWJsZSAqLworICAgIDAsIC8qIFJUUyBGbG93IENvbnRyb2wgYXZhaWxhYmxlICovCisgICAgMCwgLyogQ1RTIEZsb3cgQ29udHJvbCBhdmFpbGFibGUgKi8KKyAgICAwLCAvKiBUcmFuc21pdCBjb21wbGV0ZWQgZXZlbnQ6IFxyZWYgQVJNX1VTQVJUeF9FVkVOVF9UWF9DT01QTEVURSAqLworICAgIDAsIC8qIFNpZ25hbCByZWNlaXZlIGNoYXJhY3RlciB0aW1lb3V0IGV2ZW50OiBccmVmIEFSTV9VU0FSVHhfRVZFTlRfUlhfVElNRU9VVCAqLworICAgIDAsIC8qIFJUUyBMaW5lOiAwPW5vdCBhdmFpbGFibGUsIDE9YXZhaWxhYmxlICovCisgICAgMCwgLyogQ1RTIExpbmU6IDA9bm90IGF2YWlsYWJsZSwgMT1hdmFpbGFibGUgKi8KKyAgICAwLCAvKiBEVFIgTGluZTogMD1ub3QgYXZhaWxhYmxlLCAxPWF2YWlsYWJsZSAqLworICAgIDAsIC8qIERTUiBMaW5lOiAwPW5vdCBhdmFpbGFibGUsIDE9YXZhaWxhYmxlICovCisgICAgMCwgLyogRENEIExpbmU6IDA9bm90IGF2YWlsYWJsZSwgMT1hdmFpbGFibGUgKi8KKyAgICAwLCAvKiBSSSBMaW5lOiAwPW5vdCBhdmFpbGFibGUsIDE9YXZhaWxhYmxlICovCisgICAgMCwgLyogU2lnbmFsIENUUyBjaGFuZ2UgZXZlbnQ6IFxyZWYgQVJNX1VTQVJUeF9FVkVOVF9DVFMgKi8KKyAgICAwLCAvKiBTaWduYWwgRFNSIGNoYW5nZSBldmVudDogXHJlZiBBUk1fVVNBUlR4X0VWRU5UX0RTUiAqLworICAgIDAsIC8qIFNpZ25hbCBEQ0QgY2hhbmdlIGV2ZW50OiBccmVmIEFSTV9VU0FSVHhfRVZFTlRfRENEICovCisgICAgMCwgLyogU2lnbmFsIFJJIGNoYW5nZSBldmVudDogXHJlZiBBUk1fVVNBUlR4X0VWRU5UX1JJICovCisgICAgMCAgLyogUmVzZXJ2ZWQgKi8KK307CisKK3N0YXRpYyBBUk1fRFJJVkVSX1ZFUlNJT04gQVJNX1VTQVJUX0dldFZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gRHJpdmVyVmVyc2lvbjsKK30KKworc3RhdGljIEFSTV9VU0FSVF9DQVBBQklMSVRJRVMgQVJNX1VTQVJUX0dldENhcGFiaWxpdGllcyh2b2lkKQoreworICAgIHJldHVybiBEcml2ZXJDYXBhYmlsaXRpZXM7Cit9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgVUFSVF9UKiBkZXY7ICAgICAgLyogVUFSVCBkZXZpY2Ugc3RydWN0dXJlICovCisgICAgdWludDMyX3QgdHhfbmJyX2J5dGVzOyAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJlZCAqLworICAgIHVpbnQzMl90IHJ4X25icl9ieXRlczsgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2V2aWVkICovCisgICAgQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQ7ICAvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZXZlbnRzICovCit9IFVBUlR4X1Jlc291cmNlczsKKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUeF9Jbml0aWFsaXplKFVBUlR4X1Jlc291cmNlcyogdWFydF9kZXYpCit7CisgICAgLyogSW5pdGlhbGl6ZXMgZ2VuZXJpYyBVQVJUIGRyaXZlciAqLworCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVHhfUG93ZXJDb250cm9sKFVBUlR4X1Jlc291cmNlcyogdWFydF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgQVJHX1VOVVNFRCh1YXJ0X2Rldik7CisKKyAgICBzd2l0Y2goc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIEFSTV9QT1dFUl9PRkY6CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICBjYXNlIEFSTV9QT1dFUl9GVUxMOgorICAgICAgICAgICAgLyogTm90aGluZyB0byBiZSBkb25lICovCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIC8qIGRlZmF1bHQ6ICBUaGUgZGVmYXVsdCBpcyBub3QgZGVmaW5lZCBpbnRlbnRpb25hbGx5IHRvIGZvcmNlIHRoZQorICAgICAgICAgICAgICogICAgICAgICAgIGNvbXBpbGVyIHRvIGNoZWNrIHRoYXQgYWxsIHRoZSBlbnVtZXJhdGlvbiB2YWx1ZXMgYXJlCisgICAgICAgICAgICAgKiAgICAgICAgICAgY292ZXJlZCBpbiB0aGUgc3dpdGNoLiovCisgICAgfQorfQorCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlR4X1NlbmQoVUFSVHhfUmVzb3VyY2VzKiB1YXJ0X2RldiwgY29uc3Qgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW0pCit7CisgICAgY29uc3QgdWludDhfdCogcF9kYXRhID0gKGNvbnN0IHVpbnQ4X3QqKWRhdGE7CisKKyAgICBpZigoZGF0YSA9PSBOVUxMKSB8fCAobnVtID09IDBVKSkKKyAgICB7CisgICAgICAgIC8qIEludmFsaWQgcGFyYW1ldGVycyAqLworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgfQorCisgICAgLyogUmVzZXRzIHByZXZpb3VzIFRYIGNvdW50ZXIgKi8KKyAgICB1YXJ0X2Rldi0+dHhfbmJyX2J5dGVzID0gMDsKKworICAgIHdoaWxlKHVhcnRfZGV2LT50eF9uYnJfYnl0ZXMgIT0gbnVtKQorICAgIHsKKyAgICAgICAgLyogV2FpdHMgdW50aWwgVUFSVCBpcyByZWFkeSB0byB0cmFuc21pdCAqLworICAgICAgICB3aGlsZSh1YXJ0X2Rldi0+ZGV2LT5GSUZPU1RTICYgVUFSVF9GSUZPU1RTX1RYRlVMTF9Nc2spOworCisgICAgICAgIC8qIEFzIFVBUlQgaXMgcmVhZHkgdG8gdHJhbnNtaXQgYXQgdGhpcyBwb2ludCwgdGhlIHdyaXRlIGZ1bmN0aW9uIGNhbgorICAgICAgICAgKiBub3QgcmV0dXJuIGFueSB0cmFuc21pdCBlcnJvciAqLworICAgICAgICB1YXJ0X2Rldi0+ZGV2LT5EQVQgPSAqcF9kYXRhOworCisgICAgICAgIHVhcnRfZGV2LT50eF9uYnJfYnl0ZXMrKzsKKyAgICAgICAgcF9kYXRhKys7CisgICAgfQorCisgICAgLyogV2FpdHMgdW50aWwgY2hhcmFjdGVyIGlzIHRyYW5zbWl0ZWQgKi8KKyAgICB3aGlsZSgodWFydF9kZXYtPmRldi0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19UWEVNUFRZX01zaykgPT0gMCk7CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUeF9SZWNlaXZlKFVBUlR4X1Jlc291cmNlcyogdWFydF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHVpbnQ4X3QqIHBfZGF0YSA9ICh1aW50OF90KilkYXRhOworCisgICAgaWYoKGRhdGEgPT0gTlVMTCkgfHwgKG51bSA9PSAwVSkpCisgICAgeworICAgICAgICAvLyBJbnZhbGlkIHBhcmFtZXRlcnMKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgIH0KKworICAgIC8qIFJlc2V0cyBwcmV2aW91cyBSWCBjb3VudGVyICovCisgICAgdWFydF9kZXYtPnJ4X25icl9ieXRlcyA9IDA7CisKKyAgICB3aGlsZSh1YXJ0X2Rldi0+cnhfbmJyX2J5dGVzICE9IG51bSkKKyAgICB7CisgICAgICAgIC8qIFdhaXRzIHVudGlsIG9uZSBjaGFyYWN0ZXIgaXMgcmVjZWl2ZWQgKi8KKyAgICAgICAgd2hpbGUodWFydF9kZXYtPmRldi0+RklGT1NUUyAmIFVBUlRfRklGT1NUU19SWEVNUFRZX01zayk7CisKKyAgICAgICAgLyogQXMgVUFSVCBoYXMgcmVjZWl2ZWQgb25lIGJ5dGUsIHRoZSByZWFkIGNhbiBub3QKKyAgICAgICAgICogcmV0dXJuIGFueSByZWNlaXZlIGVycm9yIGF0IHRoaXMgcG9pbnQgKi8KKyAgICAgICAgKnBfZGF0YSA9IHVhcnRfZGV2LT5kZXYtPkRBVDsKKworICAgICAgICB1YXJ0X2Rldi0+cnhfbmJyX2J5dGVzKys7CisgICAgICAgIHBfZGF0YSsrOworICAgIH0KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgdWludDMyX3QgQVJNX1VTQVJUeF9HZXRUeENvdW50KFVBUlR4X1Jlc291cmNlcyogdWFydF9kZXYpCit7CisgICAgcmV0dXJuIHVhcnRfZGV2LT50eF9uYnJfYnl0ZXM7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBBUk1fVVNBUlR4X0dldFJ4Q291bnQoVUFSVHhfUmVzb3VyY2VzKiB1YXJ0X2RldikKK3sKKyAgICByZXR1cm4gdWFydF9kZXYtPnJ4X25icl9ieXRlczsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUeF9Db250cm9sKFVBUlR4X1Jlc291cmNlcyogdWFydF9kZXYsIHVpbnQzMl90IGNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXJnKQoreworICAgIHN3aXRjaChjb250cm9sICYgQVJNX1VTQVJUX0NPTlRST0xfTXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfTU9ERV9BU1lOQ0hST05PVVM6CisgICAgICAgICAgICB1YXJ0X2Rldi0+ZGV2LT5MSU5FID0gVUFSVF9QQVJJVFlfTk9ORSB8IFVBUlRfU1RPUF9CSVRfMSB8IFVBUlRfV09SRF9MRU5fODsKKyAgICAgICAgICAgIHVhcnRfZGV2LT5kZXYtPkJBVUQgPSBVQVJUX0JBVURfTU9ERTIgfCBVQVJUX0JBVURfTU9ERTJfRElWSURFUihfX0hJUkMsIGFyZyk7CisKKyAgICAgICAgICAgIC8qIGF2b2lkIG5vaXNlIGluIHJlc2V0IHN0YXRlICovCisgICAgICAgICAgICB1YXJ0X2Rldi0+ZGV2LT5EQVQgPSAnXHInOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogVW5zdXBwb3J0ZWQgY29tbWFuZCAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgLyogVUFSVCBEYXRhIGJpdHMgKi8KKyAgICBpZihjb250cm9sICYgQVJNX1VTQVJUX0RBVEFfQklUU19Nc2spCisgICAgeworICAgICAgICAvKiBEYXRhIGJpdCBpcyBub3QgY29uZmlndXJhYmxlICovCisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8qIFVBUlQgUGFyaXR5ICovCisgICAgaWYoY29udHJvbCAmIEFSTV9VU0FSVF9QQVJJVFlfTXNrKQorICAgIHsKKyAgICAgICAgLyogUGFyaXR5IGlzIG5vdCBjb25maWd1cmFibGUgKi8KKyAgICAgICAgcmV0dXJuIEFSTV9VU0FSVF9FUlJPUl9QQVJJVFk7CisgICAgfQorCisgICAgLyogVVNBUlQgU3RvcCBiaXRzICovCisgICAgaWYoY29udHJvbCAmIEFSTV9VU0FSVF9TVE9QX0JJVFNfTXNrKQorICAgIHsKKyAgICAgICAgLyogU3RvcCBiaXQgaXMgbm90IGNvbmZpZ3VyYWJsZSAqLworICAgICAgICByZXR1cm4gQVJNX1VTQVJUX0VSUk9SX1NUT1BfQklUUzsKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworI2lmIChSVEVfVVNBUlQwKQorLyogVVNBUlQwIERyaXZlciB3cmFwcGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIFVBUlR4X1Jlc291cmNlcyBVU0FSVDBfREVWID0KK3sKKyAgICAuZGV2ID0gVUFSVDBfTlMsCisgICAgLnR4X25icl9ieXRlcyA9IDAsCisgICAgLnJ4X25icl9ieXRlcyA9IDAsCisgICAgLmNiX2V2ZW50ID0gTlVMTCwKK307CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVDBfSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBVU0FSVDBfREVWLmNiX2V2ZW50ID0gY2JfZXZlbnQ7CisKKyAgICByZXR1cm4gQVJNX1VTQVJUeF9Jbml0aWFsaXplKCZVU0FSVDBfREVWKTsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMF9VbmluaXRpYWxpemUodm9pZCkKK3sKKworICAgIC8qIE5vdGhpbmcgdG8gYmUgZG9uZSAqLworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQwX1Bvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEFSTV9VU0FSVHhfUG93ZXJDb250cm9sKCZVU0FSVDBfREVWLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVDBfU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIEFSTV9VU0FSVHhfU2VuZCgmVVNBUlQwX0RFViwgZGF0YSwgbnVtKTsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMF9SZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gQVJNX1VTQVJUeF9SZWNlaXZlKCZVU0FSVDBfREVWLCBkYXRhLCBudW0pOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQwX1RyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW0pCit7CisgICAgQVJHX1VOVVNFRChkYXRhX291dCk7CisgICAgQVJHX1VOVVNFRChkYXRhX2luKTsKKyAgICBBUkdfVU5VU0VEKG51bSk7CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKK30KKworc3RhdGljIHVpbnQzMl90IEFSTV9VU0FSVDBfR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X0dldFR4Q291bnQoJlVTQVJUMF9ERVYpOworfQorCitzdGF0aWMgdWludDMyX3QgQVJNX1VTQVJUMF9HZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEFSTV9VU0FSVHhfR2V0UnhDb3VudCgmVVNBUlQwX0RFVik7Cit9CitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQwX0NvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X0NvbnRyb2woJlVTQVJUMF9ERVYsIGNvbnRyb2wsIGFyZyk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIEFSTV9VU0FSVDBfR2V0U3RhdHVzKHZvaWQpCit7CisgICAgQVJNX1VTQVJUX1NUQVRVUyBzdGF0dXMgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMF9TZXRNb2RlbUNvbnRyb2woQVJNX1VTQVJUX01PREVNX0NPTlRST0wgY29udHJvbCkKK3sKKyAgICBBUkdfVU5VU0VEKGNvbnRyb2wpOworICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworfQorCitzdGF0aWMgQVJNX1VTQVJUX01PREVNX1NUQVRVUyBBUk1fVVNBUlQwX0dldE1vZGVtU3RhdHVzKHZvaWQpCit7CisgICAgQVJNX1VTQVJUX01PREVNX1NUQVRVUyBtb2RlbV9zdGF0dXMgPSB7MCwgMCwgMCwgMCwgMH07CisgICAgcmV0dXJuIG1vZGVtX3N0YXR1czsKK30KKworZXh0ZXJuIEFSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMDsKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMCA9Cit7CisgICAgQVJNX1VTQVJUX0dldFZlcnNpb24sCisgICAgQVJNX1VTQVJUX0dldENhcGFiaWxpdGllcywKKyAgICBBUk1fVVNBUlQwX0luaXRpYWxpemUsCisgICAgQVJNX1VTQVJUMF9VbmluaXRpYWxpemUsCisgICAgQVJNX1VTQVJUMF9Qb3dlckNvbnRyb2wsCisgICAgQVJNX1VTQVJUMF9TZW5kLAorICAgIEFSTV9VU0FSVDBfUmVjZWl2ZSwKKyAgICBBUk1fVVNBUlQwX1RyYW5zZmVyLAorICAgIEFSTV9VU0FSVDBfR2V0VHhDb3VudCwKKyAgICBBUk1fVVNBUlQwX0dldFJ4Q291bnQsCisgICAgQVJNX1VTQVJUMF9Db250cm9sLAorICAgIEFSTV9VU0FSVDBfR2V0U3RhdHVzLAorICAgIEFSTV9VU0FSVDBfU2V0TW9kZW1Db250cm9sLAorICAgIEFSTV9VU0FSVDBfR2V0TW9kZW1TdGF0dXMKK307CisjZW5kaWYgLyogUlRFX1VTQVJUMCAqLworCisjaWYgKFJURV9VU0FSVDEpCisvKiBVU0FSVDEgRHJpdmVyIHdyYXBwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgVUFSVHhfUmVzb3VyY2VzIFVTQVJUMV9ERVYgPQoreworICAgIC5kZXYgPSBVQVJUMSwKKyAgICAudHhfbmJyX2J5dGVzID0gMCwKKyAgICAucnhfbmJyX2J5dGVzID0gMCwKKyAgICAuY2JfZXZlbnQgPSBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMV9Jbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIFVTQVJUMV9ERVYuY2JfZXZlbnQgPSBjYl9ldmVudDsKKworICAgIHJldHVybiBBUk1fVVNBUlR4X0luaXRpYWxpemUoJlVTQVJUMV9ERVYpOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQxX1VuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIC8qIE5vdGhpbmcgdG8gYmUgZG9uZSAqLworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQxX1Bvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEFSTV9VU0FSVHhfUG93ZXJDb250cm9sKCZVU0FSVDFfREVWLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEFSTV9VU0FSVDFfU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIEFSTV9VU0FSVHhfU2VuZCgmVVNBUlQxX0RFViwgZGF0YSwgbnVtKTsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMV9SZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gQVJNX1VTQVJUeF9SZWNlaXZlKCZVU0FSVDFfREVWLCBkYXRhLCBudW0pOworfQorCitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQxX1RyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW0pCit7CisgICAgQVJHX1VOVVNFRChkYXRhX291dCk7CisgICAgQVJHX1VOVVNFRChkYXRhX2luKTsKKyAgICBBUkdfVU5VU0VEKG51bSk7CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKK30KKworc3RhdGljIHVpbnQzMl90IEFSTV9VU0FSVDFfR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X0dldFR4Q291bnQoJlVTQVJUMV9ERVYpOworfQorCitzdGF0aWMgdWludDMyX3QgQVJNX1VTQVJUMV9HZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEFSTV9VU0FSVHhfR2V0UnhDb3VudCgmVVNBUlQxX0RFVik7Cit9CitzdGF0aWMgaW50MzJfdCBBUk1fVVNBUlQxX0NvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBBUk1fVVNBUlR4X0NvbnRyb2woJlVTQVJUMV9ERVYsIGNvbnRyb2wsIGFyZyk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIEFSTV9VU0FSVDFfR2V0U3RhdHVzKHZvaWQpCit7CisgICAgQVJNX1VTQVJUX1NUQVRVUyBzdGF0dXMgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludDMyX3QgQVJNX1VTQVJUMV9TZXRNb2RlbUNvbnRyb2woQVJNX1VTQVJUX01PREVNX0NPTlRST0wgY29udHJvbCkKK3sKKyAgICBBUkdfVU5VU0VEKGNvbnRyb2wpOworICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworfQorCitzdGF0aWMgQVJNX1VTQVJUX01PREVNX1NUQVRVUyBBUk1fVVNBUlQxX0dldE1vZGVtU3RhdHVzKHZvaWQpCit7CisgICAgQVJNX1VTQVJUX01PREVNX1NUQVRVUyBtb2RlbV9zdGF0dXMgPSB7MCwgMCwgMCwgMCwgMH07CisgICAgcmV0dXJuIG1vZGVtX3N0YXR1czsKK30KKworZXh0ZXJuIEFSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMTsKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMSA9Cit7CisgICAgQVJNX1VTQVJUX0dldFZlcnNpb24sCisgICAgQVJNX1VTQVJUX0dldENhcGFiaWxpdGllcywKKyAgICBBUk1fVVNBUlQxX0luaXRpYWxpemUsCisgICAgQVJNX1VTQVJUMV9VbmluaXRpYWxpemUsCisgICAgQVJNX1VTQVJUMV9Qb3dlckNvbnRyb2wsCisgICAgQVJNX1VTQVJUMV9TZW5kLAorICAgIEFSTV9VU0FSVDFfUmVjZWl2ZSwKKyAgICBBUk1fVVNBUlQxX1RyYW5zZmVyLAorICAgIEFSTV9VU0FSVDFfR2V0VHhDb3VudCwKKyAgICBBUk1fVVNBUlQxX0dldFJ4Q291bnQsCisgICAgQVJNX1VTQVJUMV9Db250cm9sLAorICAgIEFSTV9VU0FSVDFfR2V0U3RhdHVzLAorICAgIEFSTV9VU0FSVDFfU2V0TW9kZW1Db250cm9sLAorICAgIEFSTV9VU0FSVDFfR2V0TW9kZW1TdGF0dXMKK307CisjZW5kaWYgLyogUlRFX1VTQVJUMSAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2Ntc2lzX2RyaXZlcnMvY29uZmlnL1JURV9EZXZpY2UuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9jbXNpc19kcml2ZXJzL2NvbmZpZy9SVEVfRGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlZjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9jbXNpc19kcml2ZXJzL2NvbmZpZy9SVEVfRGV2aWNlLmgKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCBBUk0gTGltaXRlZAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vLS0tLS0tLS0gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZm5kZWYgX19SVEVfREVWSUNFX0gKKyNkZWZpbmUgX19SVEVfREVWSUNFX0gKKworLy8gPGU+IFNQSSAoU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlKSBbRHJpdmVyX1NQSTBdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX1NQSTAgaW4gY29tcG9uZW50IDo6RHJpdmVyczpTUEkKKyNkZWZpbmUgICBSVEVfU1BJMCAgICAgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBTUEkgKFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSkgW0RyaXZlcl9TUEkwXQorCisvLyA8ZT4gU1BJIChTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UpIFtEcml2ZXJfU1BJMV0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfU1BJMSBpbiBjb21wb25lbnQgOjpEcml2ZXJzOlNQSQorI2RlZmluZSAgIFJURV9TUEkxICAgICAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFNQSSAoU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlKSBbRHJpdmVyX1NQSTFdCisKKy8vIDxlPiBTUEkgKFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSkgW0RyaXZlcl9TUEkyXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9TUEkyIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6U1BJCisjZGVmaW5lICAgUlRFX1NQSTIgICAgICAgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gU1BJIChTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UpIFtEcml2ZXJfU1BJMl0KKworLy8gPGU+IFNQSSAoU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlKSBbRHJpdmVyX1NQSTNdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX1NQSTMgaW4gY29tcG9uZW50IDo6RHJpdmVyczpTUEkKKyNkZWZpbmUgICBSVEVfU1BJMyAgICAgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBTUEkgKFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSkgW0RyaXZlcl9TUEkzXQorCisvLyA8ZT4gU1BJIChTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UpIFtEcml2ZXJfU1BJNF0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfU1BJNCBpbiBjb21wb25lbnQgOjpEcml2ZXJzOlNQSQorI2RlZmluZSAgIFJURV9TUEk0ICAgICAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFNQSSAoU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlKSBbRHJpdmVyX1NQSTRdCisKKy8vIDxlPiBJMkMgKEludGVyLWludGVncmF0ZWQgQ2lyY3VpdCBJbnRlcmZhY2UgMikgW0RyaXZlcl9JMkMwXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9JMkMwIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6STJDCisjZGVmaW5lICAgUlRFX0kyQzAgICAgICAgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gSTJDIChJbnRlci1pbnRlZ3JhdGVkIENpcmN1aXQgSW50ZXJmYWNlIDIpIFtEcml2ZXJfSTJDMF0KKworLy8gPGU+IEkyQyAoSW50ZXItaW50ZWdyYXRlZCBDaXJjdWl0IEludGVyZmFjZSAyKSBbRHJpdmVyX0kyQzFdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX0kyQzEgaW4gY29tcG9uZW50IDo6RHJpdmVyczpJMkMKKyNkZWZpbmUgICBSVEVfSTJDMSAgICAgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBJMkMgKEludGVyLWludGVncmF0ZWQgQ2lyY3VpdCBJbnRlcmZhY2UgMikgW0RyaXZlcl9JMkMxXQorCisvLyA8ZT4gSTJDIChJbnRlci1pbnRlZ3JhdGVkIENpcmN1aXQgSW50ZXJmYWNlIDIpIFtEcml2ZXJfSTJDMl0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfSTJDMiBpbiBjb21wb25lbnQgOjpEcml2ZXJzOkkyQworI2RlZmluZSAgIFJURV9JMkMyICAgICAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IEkyQyAoSW50ZXItaW50ZWdyYXRlZCBDaXJjdWl0IEludGVyZmFjZSAyKSBbRHJpdmVyX0kyQzJdCisKKy8vIDxlPiBJMkMgKEludGVyLWludGVncmF0ZWQgQ2lyY3VpdCBJbnRlcmZhY2UgMikgW0RyaXZlcl9JMkMzXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9JMkMzIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6STJDCisjZGVmaW5lICAgUlRFX0kyQzMgICAgICAgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gSTJDIChJbnRlci1pbnRlZ3JhdGVkIENpcmN1aXQgSW50ZXJmYWNlIDIpIFtEcml2ZXJfSTJDM10KKworLy8gPGU+IFVTQVJUIChVbml2ZXJzYWwgc3luY2hyb25vdXMgLSBhc3luY2hyb25vdXMgcmVjZWl2ZXIgdHJhbnNtaXR0ZXIpIFtEcml2ZXJfVVNBUlQwXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9VU0FSVDAgaW4gY29tcG9uZW50IDo6RHJpdmVyczpVU0FSVAorI2RlZmluZSAgIFJURV9VU0FSVDAgICAgICAgICAgICAgICAgICAgICAxCisvLyA8L2U+IFVTQVJUIChVbml2ZXJzYWwgc3luY2hyb25vdXMgLSBhc3luY2hyb25vdXMgcmVjZWl2ZXIgdHJhbnNtaXR0ZXIpIFtEcml2ZXJfVVNBUlQwXQorCisvLyA8ZT4gVVNBUlQgKFVuaXZlcnNhbCBzeW5jaHJvbm91cyAtIGFzeW5jaHJvbm91cyByZWNlaXZlciB0cmFuc21pdHRlcikgW0RyaXZlcl9VU0FSVDFdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX1VTQVJUMSBpbiBjb21wb25lbnQgOjpEcml2ZXJzOlVTQVJUCisjZGVmaW5lICAgUlRFX1VTQVJUMSAgICAgICAgICAgICAgICAgICAgIDEKKy8vIDwvZT4gVVNBUlQgKFVuaXZlcnNhbCBzeW5jaHJvbm91cyAtIGFzeW5jaHJvbm91cyByZWNlaXZlciB0cmFuc21pdHRlcikgW0RyaXZlcl9VU0FSVDFdCisKKy8vIDxlPiBVU0FSVCAoVW5pdmVyc2FsIHN5bmNocm9ub3VzIC0gYXN5bmNocm9ub3VzIHJlY2VpdmVyIHRyYW5zbWl0dGVyKSBbRHJpdmVyX1VTQVJUMl0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfVVNBUlQyIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6VVNBUlQKKyNkZWZpbmUgICBSVEVfVVNBUlQyICAgICAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBVU0FSVCAoVW5pdmVyc2FsIHN5bmNocm9ub3VzIC0gYXN5bmNocm9ub3VzIHJlY2VpdmVyIHRyYW5zbWl0dGVyKSBbRHJpdmVyX1VTQVJUMl0KKworLy8gPGU+IFVTQVJUIChVbml2ZXJzYWwgc3luY2hyb25vdXMgLSBhc3luY2hyb25vdXMgcmVjZWl2ZXIgdHJhbnNtaXR0ZXIpIFtEcml2ZXJfVVNBUlQzXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9VU0FSVDMgaW4gY29tcG9uZW50IDo6RHJpdmVyczpVU0FSVAorI2RlZmluZSAgIFJURV9VU0FSVDMgICAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFVTQVJUIChVbml2ZXJzYWwgc3luY2hyb25vdXMgLSBhc3luY2hyb25vdXMgcmVjZWl2ZXIgdHJhbnNtaXR0ZXIpIFtEcml2ZXJfVVNBUlQzXQorCisvLyA8ZT4gVVNBUlQgKFVuaXZlcnNhbCBzeW5jaHJvbm91cyAtIGFzeW5jaHJvbm91cyByZWNlaXZlciB0cmFuc21pdHRlcikgW0RyaXZlcl9VU0FSVDRdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX1VTQVJUNCBpbiBjb21wb25lbnQgOjpEcml2ZXJzOlVTQVJUCisjZGVmaW5lICAgUlRFX1VTQVJUNCAgICAgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gVVNBUlQgKFVuaXZlcnNhbCBzeW5jaHJvbm91cyAtIGFzeW5jaHJvbm91cyByZWNlaXZlciB0cmFuc21pdHRlcikgW0RyaXZlcl9VU0FSVDRdCisKKy8vIDxlPiBGTEFTSCAoRmxhc2ggTWVtb3J5KSBbRHJpdmVyX0ZMQVNIMF0KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfRkxBU0gwIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6RkxBU0gKKyNkZWZpbmUgICBSVEVfRkxBU0gwICAgICAgICAgICAgICAgICAgICAgMQorLy8gPC9lPiBGTEFTSCAoRmxhc2ggTWVtb3J5KSBbRHJpdmVyX0ZMQVNIMF0KKworLy8gPGU+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9JU1JBTTBfTVBDXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9JU1JBTTBfTVBDIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6TVBDCisjZGVmaW5lICAgUlRFX0lTUkFNMF9NUEMgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gTVBDIChNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0lTUkFNMF9NUENdCisKKy8vIDxlPiBNUEMgKE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfSVNSQU0xX01QQ10KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfSVNSQU0xX01QQyBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9JU1JBTTFfTVBDICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9JU1JBTTFfTVBDXQorCisvLyA8ZT4gTVBDIChNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0lTUkFNMl9NUENdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX0lTUkFNMl9NUEMgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfSVNSQU0yX01QQyAgICAgICAgICAgICAgICAgMAorLy8gPC9lPiBNUEMgKE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfSVNSQU0yX01QQ10KKworLy8gPGU+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9JU1JBTTNfTVBDXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9JU1JBTTNfTVBDIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6TVBDCisjZGVmaW5lICAgUlRFX0lTUkFNM19NUEMgICAgICAgICAgICAgICAgIDAKKy8vIDwvZT4gTVBDIChNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0lTUkFNM19NUENdCisKKy8vIDxlPiBNUEMgKE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfU1JBTTFfTVBDXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9TUkFNMV9NUEMgaW4gY29tcG9uZW50IDo6RHJpdmVyczpNUEMKKyNkZWZpbmUgICBSVEVfQ09ERV9TUkFNMV9NUEMgICAgICAgICAgICAgMQorLy8gPC9lPiBNUEMgKE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfU1JBTTFfTVBDXQorCisvLyA8ZT4gTVBDIChNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX1NSQU0yX01QQ10KKy8vIDxpPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBEcml2ZXJfU1JBTTJfTVBDIGluIGNvbXBvbmVudCA6OkRyaXZlcnM6TVBDCisjZGVmaW5lICAgUlRFX0NPREVfU1JBTTJfTVBDICAgICAgICAgICAgIDEKKy8vIDwvZT4gTVBDIChNZW1vcnkgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX1NSQU0yX01QQ10KKworLy8gPGU+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9TUkFNM19NUENdCisvLyA8aT4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgRHJpdmVyX1NSQU0zX01QQyBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9DT0RFX1NSQU0zX01QQyAgICAgICAgICAgICAwCisvLyA8L2U+IE1QQyAoTWVtb3J5IFByb3RlY3Rpb24gQ29udHJvbGxlcikgW0RyaXZlcl9TUkFNM19NUENdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FIQl9QUENFWFAwXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BSEJfUFBDRVhQMCBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BSEJfUFBDRVhQMCAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQUhCX1BQQ0VYUDBdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FIQl9QUENFWFAxXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BSEJfUFBDRVhQMSBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BSEJfUFBDRVhQMSAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQUhCX1BQQ0VYUDFdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FIQl9QUENFWFAyXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BSEJfUFBDRVhQMiBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BSEJfUFBDRVhQMiAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQUhCX1BQQ0VYUDJdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FIQl9QUENFWFAzXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BSEJfUFBDRVhQMyBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BSEJfUFBDRVhQMyAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQUhCX1BQQ0VYUDNdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUEMwXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BUEJfUFBDMCBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BUEJfUFBDMCAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQVBCX1BQQzBdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUEMxXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BUEJfUFBDMSBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BUEJfUFBDMSAgICAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQVBCX1BQQzFdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUENFWFAwXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BUEJfUFBDRVhQMCBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BUEJfUFBDRVhQMCAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQVBCX1BQQ0VYUDBdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUENFWFAxXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BUEJfUFBDRVhQMSBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BUEJfUFBDRVhQMSAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQVBCX1BQQ0VYUDFdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUENFWFAyXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BUEJfUFBDRVhQMiBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BUEJfUFBDRVhQMiAgICAgICAgICAgICAgICAxCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQVBCX1BQQ0VYUDJdCisKKy8vIDxlPiBQUEMgKFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyKSBbRHJpdmVyX0FQQl9QUENFWFAzXQorLy8gPGk+IENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIERyaXZlcl9BUEJfUFBDRVhQMyBpbiBjb21wb25lbnQgOjpEcml2ZXJzOk1QQworI2RlZmluZSAgIFJURV9BUEJfUFBDRVhQMyAgICAgICAgICAgICAgICAwCisvLyA8L2U+IFBQQyAoUGVyaXBoZXJhbCBQcm90ZWN0aW9uIENvbnRyb2xsZXIpIFtEcml2ZXJfQVBCX1BQQ0VYUDNdCisKKyNlbmRpZiAgLyogX19SVEVfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9jbXNpc19kcml2ZXJzL2NvbmZpZy9jbXNpc19kcml2ZXJfY29uZmlnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9jb25maWcvY21zaXNfZHJpdmVyX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjNiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvY21zaXNfZHJpdmVycy9jb25maWcvY21zaXNfZHJpdmVyX2NvbmZpZy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggQVJNIExpbWl0ZWQKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fQ01TSVNfRFJJVkVSX0NPTkZJR19IX18KKyNkZWZpbmUgX19DTVNJU19EUklWRVJfQ09ORklHX0hfXworCisjaW5jbHVkZSAicGxhdGZvcm1fcmV0YXJnZXRfZGV2LmgiCisjaW5jbHVkZSAiUlRFX0RldmljZS5oIgorI2luY2x1ZGUgInRhcmdldF9jZmcuaCIKKworI2lmZGVmIFJURV9VU0FSVDAKKyNkZWZpbmUgVUFSVDBfREVWICAgICAgIEFSTV9VQVJUMF9ERVZfTlMKKyNlbmRpZgorCisjaWZkZWYgUlRFX1VTQVJUMQorI2lmZGVmIFNFQ1VSRV9VQVJUMQorI2RlZmluZSBVQVJUMV9ERVYgICAgICAgQVJNX1VBUlQxX0RFVl9TCisjZWxzZQorI2RlZmluZSBVQVJUMV9ERVYgICAgICAgQVJNX1VBUlQxX0RFVl9OUworI2VuZGlmCisjZW5kaWYKKworI2VuZGlmICAvKiBfX0NNU0lTX0RSSVZFUl9DT05GSUdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2NvbmZpZy9kZXZpY2VfY2ZnLmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2NvbmZpZy9kZXZpY2VfY2ZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkY2RkMQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvY29uZmlnL2RldmljZV9jZmcuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE5IEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0RFVklDRV9DRkdfSF9fCisjZGVmaW5lIF9fREVWSUNFX0NGR19IX18KKworLyoqCisgKiBcZmlsZSBkZXZpY2VfY2ZnLmgKKyAqIFxicmllZgorICogVGhpcyBpcyB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gZmlsZSB3aXRoIG9ubHkgdXNlZCBwZXJpcGhlcmFscworICogZGVmaW5lZCBhbmQgY29uZmlndXJlZCB2aWEgdGhlIHNlY3VyZSBhbmQvb3Igbm9uLXNlY3VyZSBiYXNlIGFkZHJlc3MuCisgKi8KKworI2luY2x1ZGUgIk51TWljcm8uaCIKKworLyogQVJNIFVBUlQgQ01TREsgKi8KKyNkZWZpbmUgREVGQVVMVF9VQVJUX0JBVURSQVRFIDExNTIwMAorI2RlZmluZSBVQVJUMF9DTVNES19TCisjZGVmaW5lIFVBUlQwX0NNU0RLX05TCisKKy8qIENNU0RLIFRpbWVycyAqLworI2RlZmluZSBDTVNES19USU1FUjBfUworI2RlZmluZSBDTVNES19USU1FUjJfTlMKKworCisjZW5kaWYgIC8qIF9fREVWSUNFX0NGR19IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9jbXNpcy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9pbmNsdWRlL2Ntc2lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2MmU2MgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9jbXNpcy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQXJtIExpbWl0ZWQKKyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUworICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19DTVNJU19IX18KKyNkZWZpbmUgX19DTVNJU19IX18KKworLyogPT09PT09PT09PT09PT09PT09PT09PSAgU3RhcnQgb2Ygc2VjdGlvbiB1c2luZyBhbm9ueW1vdXMgdW5pb25zICA9PT09PT09PT09PT09PSAqLworI2lmICAgZGVmaW5lZCAoX19DQ19BUk0pCisgICNwcmFnbWEgcHVzaAorICAjcHJhZ21hIGFub25fdW5pb25zCisjZWxpZiBkZWZpbmVkIChfX0lDQ0FSTV9fKQorICAjcHJhZ21hIGxhbmd1YWdlPWV4dGVuZGVkCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjMTEtZXh0ZW5zaW9ucyIKKyAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcmVzZXJ2ZWQtaWQtbWFjcm8iCisjZWxpZiBkZWZpbmVkIChfX0dOVUNfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkIChfX1RNUzQ3MF9fKQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbGlmIGRlZmluZWQgKF9fVEFTS0lOR19fKQorICAjcHJhZ21hIHdhcm5pbmcgNTg2CisjZWxpZiBkZWZpbmVkIChfX0NTTUNfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxzZQorICAjd2FybmluZyBOb3Qgc3VwcG9ydGVkIGNvbXBpbGVyIHR5cGUKKyNlbmRpZgorCisKKy8qID09PT09PT09ICBDb25maWd1cmF0aW9uIG9mIENvcmUgUGVyaXBoZXJhbHMgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgX19DTTIzX1JFViAgICAgICAgICAgICAgICAweDAxMDBVICAgLyogQ29yZSByZXZpc2lvbiByMXAwICovCisjZGVmaW5lIF9fU0FVUkVHSU9OX1BSRVNFTlQgICAgICAgMVUgICAgICAgIC8qIFNBVSByZWdpb25zIHByZXNlbnQgKi8KKyNkZWZpbmUgX19NUFVfUFJFU0VOVCAgICAgICAgICAgICAxVSAgICAgICAgLyogTVBVIHByZXNlbnQgKi8KKyNkZWZpbmUgX19WVE9SX1BSRVNFTlQgICAgICAgICAgICAxVSAgICAgICAgLyogVlRPUiBwcmVzZW50ICovCisjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgMlUgICAgICAgIC8qIE51bWJlciBvZiBCaXRzIHVzZWQgZm9yIFByaW9yaXR5IExldmVscyAqLworI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVICAgICAgICAvKiBTZXQgdG8gMSBpZiBkaWZmZXJlbnQgU3lzVGljayBDb25maWcgaXMgdXNlZCAqLworCisjaW5jbHVkZSAicGxhdGZvcm1fZGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlIDxjb3JlX2NtMjMuaD4gICAgLyohPCBBUk0gQ29ydGV4LU0yMyBwcm9jZXNzb3IgYW5kIGNvcmUgcGVyaXBoZXJhbHMgKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09ICBFbmQgb2Ygc2VjdGlvbiB1c2luZyBhbm9ueW1vdXMgdW5pb25zICA9PT09PT09PT09PT09PT09ICovCisjaWYgICBkZWZpbmVkIChfX0NDX0FSTSkKKyAgI3ByYWdtYSBwb3AKKyNlbGlmIGRlZmluZWQgKF9fSUNDQVJNX18pCisgIC8qIGxlYXZlIGFub255bW91cyB1bmlvbnMgZW5hYmxlZCAqLworI2VsaWYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZWxpZiBkZWZpbmVkIChfX0dOVUNfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkIChfX1RNUzQ3MF9fKQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbGlmIGRlZmluZWQgKF9fVEFTS0lOR19fKQorICAjcHJhZ21hIHdhcm5pbmcgcmVzdG9yZQorI2VsaWYgZGVmaW5lZCAoX19DU01DX18pCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2Vsc2UKKyAgI3dhcm5pbmcgTm90IHN1cHBvcnRlZCBjb21waWxlciB0eXBlCisjZW5kaWYKKworI2VuZGlmICAvKiBfX0NNU0lTX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2luY2x1ZGUvZGV2aWNlX2RlZmluaXRpb24uaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9kZXZpY2VfZGVmaW5pdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzIzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL2luY2x1ZGUvZGV2aWNlX2RlZmluaXRpb24uaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBcZmlsZSBkZXZpY2VfZGVmaW5pdGlvbi5oCisgKiBcYnJpZWYgVGhlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGV4cG9ydGVkIGJhc2VkCisgKiBvbiB0aGUgcGVyaXBoZXJhbCBkZWZpbml0aW9ucyBmcm9tIGRldmljZV9jZmcuaC4KKyAqIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGEgaGVscGVyIGZvciBiYXJlbWV0YWwKKyAqIGFwcGxpY2F0aW9ucyBhbmQvb3IgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gY29uZmlndXJlIHRoZSBnZW5lcmljCisgKiBkcml2ZXIgc3RydWN0dXJlcy4KKyAqLworCisjaWZuZGVmIF9fREVWSUNFX0RFRklOSVRJT05fSF9fCisjZGVmaW5lIF9fREVWSUNFX0RFRklOSVRJT05fSF9fCisKKyNpbmNsdWRlICJkZXZpY2VfY2ZnLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogPT09PT09PSBQZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGRlY2xhcmF0aW9ucyA9PT09PT09ICovCisKKy8qIEFSTSBHUElPIGRyaXZlciBzdHJ1Y3R1cmVzICovCisjaWZkZWYgR1BJTzBfQ01TREtfUworI2luY2x1ZGUgImdwaW9fY21zZGtfZHJ2LmgiCitleHRlcm4gc3RydWN0IGdwaW9fY21zZGtfZGV2X3QgR1BJTzBfQ01TREtfREVWX1M7CisjZW5kaWYKKworLyogVUFSVCBDTVNESyBkcml2ZXIgc3RydWN0dXJlcyAqLworI2lmZGVmIFVBUlQwX0NNU0RLX1MKKyNpbmNsdWRlICJ1YXJ0X2Ntc2RrX2Rydi5oIgorZXh0ZXJuIHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90IEFSTV9VQVJUMF9ERVZfUzsKKyNlbmRpZgorI2lmZGVmIFVBUlQwX0NNU0RLX05TCisjaW5jbHVkZSAidWFydF9jbXNka19kcnYuaCIKK2V4dGVybiBzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCBBUk1fVUFSVDBfREVWX05TOworI2VuZGlmCisKKyNpZmRlZiBVQVJUMV9DTVNES19TCisjaW5jbHVkZSAidWFydF9jbXNka19kcnYuaCIKK2V4dGVybiBzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCBBUk1fVUFSVDFfREVWX1M7CisjZW5kaWYKKyNpZmRlZiBVQVJUMV9DTVNES19OUworI2luY2x1ZGUgInVhcnRfY21zZGtfZHJ2LmgiCitleHRlcm4gc3RydWN0IHVhcnRfY21zZGtfZGV2X3QgQVJNX1VBUlQxX0RFVl9OUzsKKyNlbmRpZgorCisvKiBDTVNESyBUaW1lciBkcml2ZXIgc3RydWN0dXJlcyAqLworI2lmZGVmIENNU0RLX1RJTUVSMF9TCisjaW5jbHVkZSAidGltZXJfY21zZGtfZHJ2LmgiCitleHRlcm4gc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90IENNU0RLX1RJTUVSMF9ERVZfUzsKKyNlbmRpZgorI2lmZGVmIENNU0RLX1RJTUVSMF9OUworI2luY2x1ZGUgInRpbWVyX2Ntc2RrX2Rydi5oIgorZXh0ZXJuIHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCBDTVNES19USU1FUjBfREVWX05TOworI2VuZGlmCisKKyNpZmRlZiBDTVNES19USU1FUjFfUworI2luY2x1ZGUgInRpbWVyX2Ntc2RrX2Rydi5oIgorZXh0ZXJuIHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCBDTVNES19USU1FUjFfREVWX1M7CisjZW5kaWYKKyNpZmRlZiBDTVNES19USU1FUjFfTlMKKyNpbmNsdWRlICJ0aW1lcl9jbXNka19kcnYuaCIKK2V4dGVybiBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QgQ01TREtfVElNRVIxX0RFVl9OUzsKKyNlbmRpZgorCisjaWZkZWYgQ01TREtfVElNRVIyX1MKKyNpbmNsdWRlICJ0aW1lcl9jbXNka19kcnYuaCIKK2V4dGVybiBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QgQ01TREtfVElNRVIyX0RFVl9TOworI2VuZGlmCisjaWZkZWYgQ01TREtfVElNRVIyX05TCisjaW5jbHVkZSAidGltZXJfY21zZGtfZHJ2LmgiCitleHRlcm4gc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90IENNU0RLX1RJTUVSMl9ERVZfTlM7CisjZW5kaWYKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLyogX19ERVZJQ0VfREVGSU5JVElPTl9IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9wbGF0Zm9ybV9kZXNjcmlwdGlvbi5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9pbmNsdWRlL3BsYXRmb3JtX2Rlc2NyaXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwMGZhZQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9wbGF0Zm9ybV9kZXNjcmlwdGlvbi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQXJtIExpbWl0ZWQKKyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUworICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19QTEFURk9STV9ERVNDUklQVElPTl9IX18KKyNkZWZpbmUgX19QTEFURk9STV9ERVNDUklQVElPTl9IX18KKworI2luY2x1ZGUgIk51TWljcm8uaCIKKworI2VuZGlmICAvKiBfX1BMQVRGT1JNX0RFU0NSSVBUSU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9pbmNsdWRlL3N5c3RlbV9jb3JlX2luaXQuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9zeXN0ZW1fY29yZV9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzZTVjZAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2UvaW5jbHVkZS9zeXN0ZW1fY29yZV9pbml0LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDE5IEFybSBMaW1pdGVkCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmF0aXZlIG9mIENNU0lTIFY1LjAwIHN5c3RlbV9BUk1DTTIzLmMKKyAqLworCisjaWZuZGVmIF9fU1lTVEVNX0NPUkVfQ0xLX0hfXworI2RlZmluZSBfX1NZU1RFTV9DT1JFX0NMS19IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2V4dGVybiB1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2s7ICAvKiE8IFN5c3RlbSBDbG9jayBGcmVxdWVuY3kgKENvcmUgQ2xvY2spICAqLworZXh0ZXJuIHVpbnQzMl90IFBlcmlwaGVyYWxDbG9jazsgIC8qITwgUGVyaXBoZXJhbCBDbG9jayBGcmVxdWVuY3kgKi8KKworLyoqCisgKiBcYnJpZWYgIEluaXRpYWxpemVzIHRoZSBzeXN0ZW0KKyAqLworZXh0ZXJuIHZvaWQgU3lzdGVtSW5pdCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgIFJlc3RvcmVzIHN5c3RlbSBjb3JlIGNsb2NrCisgKi8KK2V4dGVybiB2b2lkIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fU1lTVEVNX0NPUkVfQ0xLX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvbTIzNTFfYmwyLnNjdCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX2JsMi5zY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5YmRkZgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX2JsMi5zY3QKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJyZWdpb25fZGVmcy5oIgorCitMUl9DT0RFIEJMMl9DT0RFX1NUQVJUIHsKKyAgICBFUl9DT0RFIEJMMl9DT0RFX1NUQVJUIEJMMl9DT0RFX1NJWkUgeworICAgICAgICAqLm8gKFJFU0VUICtGaXJzdCkKKyAgICAgICAgKiAoK1JPKQorICAgIH0KKworICAgIC8qIEJhc2UgYWRkcmVzcyBvZiBib290bG9hZGVyIGRhdGEgYXJlYSAqLworICAgIEJMMl9EQVRBX1NUQVJUIFNfREFUQV9TVEFSVCB7CisgICAgfQorCisgICAgVEZNX1NIQVJFRF9EQVRBICswIEFMSUdOIDMyIEVNUFRZIEJPT1RfVEZNX1NIQVJFRF9EQVRBX1NJWkUgeworICAgIH0KKworICAgIEVSX0RBVEEgKzAgeworICAgICAgICAqICgrWkkgK1JXKQorICAgIH0KKworICAgIC8qIE1TUCAqLworICAgIEFSTV9MSUJfU1RBQ0sgKzAgQUxJR04gMzIgRU1QVFkgQkwyX01TUF9TVEFDS19TSVpFIHsKKyAgICB9CisKKyAgICBBUk1fTElCX0hFQVAgKzAgQUxJR04gOCBFTVBUWSBCTDJfSEVBUF9TSVpFIHsKKyAgICB9CisKKyAgICAvKiBUaGlzIGVtcHR5LCB6ZXJvIGxvbmcgZXhlY3V0aW9uIHJlZ2lvbiBpcyBoZXJlIHRvIG1hcmsgdGhlIGxpbWl0IGFkZHJlc3MKKyAgICAgKiBvZiB0aGUgbGFzdCBleGVjdXRpb24gcmVnaW9uIHRoYXQgaXMgYWxsb2NhdGVkIGluIFNSQU0uCisgICAgICovCisgICAgU1JBTV9XQVRFUk1BUksgKzAgRU1QVFkgMHgwIHsKKyAgICB9CisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc2VjdGlvbnMgYWxsb2NhdGVkIGluIHRoZSBTUkFNIGRvZXMgbm90IGV4Y2VlZCB0aGUKKyAgICAgKiBzaXplIG9mIHRoZSBTUkFNIGF2YWlsYWJsZS4KKyAgICAgKi8KKyAgICBTY2F0dGVyQXNzZXJ0KEltYWdlTGltaXQoU1JBTV9XQVRFUk1BUkspIDw9IEJMMl9EQVRBX1NUQVJUICsgQkwyX0RBVEFfU0laRSkKK30KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX25zLnNjdCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX25zLnNjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjViMmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvbTIzNTFfbnMuc2N0CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKworTFJfQ09ERSBOU19DT0RFX1NUQVJUIHsKKyAgICBFUl9DT0RFIE5TX0NPREVfU1RBUlQgTlNfQ09ERV9TSVpFIHsKKyAgICAgICAgKi5vIChSRVNFVCArRmlyc3QpCisgICAgICAgICogKCtSTykKKyAgICB9CisKKyAgICBFUl9EQVRBIE5TX0RBVEFfU1RBUlQgeworICAgICAgICAqICgrWkkgK1JXKQorICAgIH0KKworICAgIC8qIE1TUCAqLworICAgIEFSTV9MSUJfU1RBQ0tfTVNQICswIEFMSUdOIDMyIEVNUFRZIE5TX01TUF9TVEFDS19TSVpFIHsKKyAgICB9CisKKyAgICAvKiBQU1AgKi8KKyAgICBBUk1fTElCX1NUQUNLICswIEFMSUdOIDMyIEVNUFRZIE5TX1BTUF9TVEFDS19TSVpFIHsKKyAgICB9CisKKyAgICBBUk1fTElCX0hFQVAgKzAgQUxJR04gOCBFTVBUWSBOU19IRUFQX1NJWkUgeworICAgIH0KKworICAgIC8qIFRoaXMgZW1wdHksIHplcm8gbG9uZyBleGVjdXRpb24gcmVnaW9uIGlzIGhlcmUgdG8gbWFyayB0aGUgbGltaXQgYWRkcmVzcworICAgICAqIG9mIHRoZSBsYXN0IGV4ZWN1dGlvbiByZWdpb24gdGhhdCBpcyBhbGxvY2F0ZWQgaW4gU1JBTS4KKyAgICAgKi8KKyAgICBTUkFNX1dBVEVSTUFSSyArMCBFTVBUWSAweDAgeworICAgIH0KKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBzZWN0aW9ucyBhbGxvY2F0ZWQgaW4gdGhlIFNSQU0gZG9lcyBub3QgZXhjZWVkIHRoZQorICAgICAqIHNpemUgb2YgdGhlIFNSQU0gYXZhaWxhYmxlLgorICAgICAqLworICAgIFNjYXR0ZXJBc3NlcnQoSW1hZ2VMaW1pdChTUkFNX1dBVEVSTUFSSykgPD0gTlNfREFUQV9TVEFSVCArIE5TX0RBVEFfU0laRSkKK30KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX3Muc2N0IGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvbTIzNTFfcy5zY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0MmRlYQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL20yMzUxX3Muc2N0CkBAIC0wLDAgKzEsNTQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqKioqKioqKioqIFdBUk5JTkc6IFRoaXMgaXMgYW4gYXV0by1nZW5lcmF0ZWQgZmlsZS4gRG8gbm90IGVkaXQhICoqKioqKioqKioqLworCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKworTFJfQ09ERSBTX0NPREVfU1RBUlQgeworCisgICAgLyoqKiogIFRoaXMgaW5pdGlhbCBzZWN0aW9uIGNvbnRhaW5zIGNvbW1vbiBjb2RlIGZvciBzZWN1cmUgYmluYXJ5ICovCisgICAgRVJfVEZNX0NPREUgU19DT0RFX1NUQVJUIFNfQ09ERV9TSVpFIHsKKyAgICAgICAgKi5vIChSRVNFVCArRmlyc3QpCisgICAgICAgICogKCtSTykKKyAgICB9CisKKyAgICAvKioqKiBVbnByaXZpbGVnZWQgU2VjdXJlIGNvZGUgc3RhcnQgaGVyZSAqLworICAgIFRGTV9VTlBSSVZfQ09ERSArMCBBTElHTiAzMiB7CisgICAgICAgIHRmbV9zcG1fc2VydmljZXMubyAoK1JPKQorICAgICAgICBwbGF0Zm9ybV9yZXRhcmdldF9kZXYubyAoK1JPKQorICAgICAgICBkZXZpY2VfZGVmaW5pdGlvbi5vICgrUk8pCisgICAgICAgICooU0ZOKQorICAgICAgICAqYXJtbGliKgorICAgICAgICAqbGlidGZtc3BydC5hICgrUk8pCisgICAgfQorCisgICAgLyoqKiogUFNBIFJvVCBSTyBwYXJ0IChDT0RFICsgUk9EQVRBKSBzdGFydCBoZXJlICovCisgICAgLyoKKyAgICAgKiBUaGlzIGVtcHR5LCB6ZXJvIGxvbmcgZXhlY3V0aW9uIHJlZ2lvbiBpcyBoZXJlIHRvIG1hcmsgdGhlIHN0YXJ0IGFkZHJlc3MKKyAgICAgKiBvZiBQU0EgUm9UIGNvZGUuCisgICAgICovCisgICAgVEZNX1BTQV9DT0RFX1NUQVJUICswIEFMSUdOIDMyIEVNUFRZIDB4MCB7CisgICAgfQorCisjaWZkZWYgVEZNX1BBUlRJVElPTl9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0UKKyAgICBURk1fU1BfSVRTX0xJTktFUiArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1faW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlKiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9JVFNfQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0UgKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fQVVESVRfTE9HCisgICAgVEZNX1NQX0FVRElUX0xPR19MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX2F1ZGl0KiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9BVURJVF9MT0dfQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9BVURJVF9MT0cgKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fQ1JZUFRPCisgICAgVEZNX1NQX0NSWVBUT19MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX2NyeXB0byogKCtSTykKKyAgICAgICAgKihURk1fU1BfQ1JZUFRPX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fQ1JZUFRPICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1BMQVRGT1JNCisgICAgVEZNX1NQX1BMQVRGT1JNX0xJTktFUiArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fcGxhdGZvcm0qICgrUk8pCisgICAgICAgICooVEZNX1NQX1BMQVRGT1JNX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fUExBVEZPUk0gKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fSU5JVElBTF9BVFRFU1RBVElPTgorICAgIFRGTV9TUF9JTklUSUFMX0FUVEVTVEFUSU9OX0xJTktFUiArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fYXR0ZXN0KiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9JTklUSUFMX0FUVEVTVEFUSU9OX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fSU5JVElBTF9BVFRFU1RBVElPTiAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX0NPUkUKKyAgICBURk1fU1BfQ09SRV9URVNUX0xJTktFUiArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fc3NfY29yZV90ZXN0LiogKCtSTykKKyAgICAgICAgKihURk1fU1BfQ09SRV9URVNUX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1RFU1RfU0VDVVJFX1NFUlZJQ0VTCisgICAgVEZNX1NQX1NFQ1VSRV9URVNUX1BBUlRJVElPTl9MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3NlY3VyZV9jbGllbnRfc2VydmljZS4qICgrUk8pCisgICAgICAgICp0ZXN0X2ZyYW1ld29yayogKCtSTykKKyAgICAgICAgKnVhcnRfc3Rkb3V0LiogKCtSTykKKyAgICAgICAgKkRyaXZlcl9VU0FSVC4qICgrUk8pCisgICAgICAgICphcm1fdWFydF9kcnYuKiAoK1JPKQorICAgICAgICAqdWFydF9wbDAxMV9kcnYuKiAoK1JPKQorICAgICAgICAqdWFydF9jbXNka19kcnYqICgrUk8pCisgICAgICAgICpzZWN1cmVfc3VpdGVzLiogKCtSTykKKyAgICAgICAgKmF0dGVzdGF0aW9uX3NfaW50ZXJmYWNlX3Rlc3RzdWl0ZS4qICgrUk8pCisgICAgICAgICooVEZNX1NQX1NFQ1VSRV9URVNUX1BBUlRJVElPTl9BVFRSX0ZOKQorICAgIH0KKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX1RFU1RfU0VDVVJFX1NFUlZJQ0VTICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1RFU1RfQ09SRV9JUEMKKyAgICBURk1fU1BfSVBDX1NFUlZJQ0VfVEVTVF9MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqaXBjX3NlcnZpY2VfdGVzdC4qICgrUk8pCisgICAgICAgICooVEZNX1NQX0lQQ19TRVJWSUNFX1RFU1RfQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX0NPUkVfSVBDICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1RFU1RfUFMKKyAgICBURk1fU1BfUFNfVEVTVF9MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3BzX3Rlc3Rfc2VydmljZS4qICgrUk8pCisgICAgICAgICooVEZNX1NQX1BTX1RFU1RfQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX1BTICovCisKKyAgICAvKgorICAgICAqIFRoaXMgZW1wdHksIHplcm8gbG9uZyBleGVjdXRpb24gcmVnaW9uIGlzIGhlcmUgdG8gbWFyayB0aGUgZW5kIGFkZHJlc3MKKyAgICAgKiBvZiBQU0EgUm9UIGNvZGUuCisgICAgICovCisgICAgVEZNX1BTQV9DT0RFX0VORCArMCBBTElHTiAzMiBFTVBUWSAweDAgeworICAgIH0KKworICAgIC8qKioqIEFQUExJQ0FUSU9OIFJvVCBSTyBwYXJ0IChDT0RFICsgUk9EQVRBKSBzdGFydCBoZXJlICovCisgICAgLyoKKyAgICAgKiBUaGlzIGVtcHR5LCB6ZXJvIGxvbmcgZXhlY3V0aW9uIHJlZ2lvbiBpcyBoZXJlIHRvIG1hcmsgdGhlIHN0YXJ0IGFkZHJlc3MKKyAgICAgKiBvZiBBUFAgUm9UIGNvZGUuCisgICAgICovCisgICAgVEZNX0FQUF9DT0RFX1NUQVJUICswIEFMSUdOIDMyIEVNUFRZIDB4MCB7CisgICAgfQorCisjaWZkZWYgVEZNX1BBUlRJVElPTl9QUk9URUNURURfU1RPUkFHRQorICAgIFRGTV9TUF9QU19MSU5LRVIgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3N0b3JhZ2UqICgrUk8pCisgICAgICAgICp0ZXN0X3BzX252X2NvdW50ZXJzLiogKCtSTykKKyAgICAgICAgKihURk1fU1BfUFNfQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9QUk9URUNURURfU1RPUkFHRSAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX0NPUkUKKyAgICBURk1fU1BfQ09SRV9URVNUXzJfTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9zc19jb3JlX3Rlc3RfMi4qICgrUk8pCisgICAgICAgICooVEZNX1NQX0NPUkVfVEVTVF8yX0FUVFJfRk4pCisgICAgfQorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1RFU1RfQ09SRV9JUEMKKyAgICBURk1fU1BfSVBDX0NMSUVOVF9URVNUX0xJTktFUiArMCBBTElHTiAzMiB7CisgICAgICAgICppcGNfY2xpZW50X3Rlc3QuKiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9JUENfQ0xJRU5UX1RFU1RfQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX0NPUkVfSVBDICovCisKKyNpZmRlZiBURk1fRU5BQkxFX0lSUV9URVNUCisgICAgVEZNX0lSUV9URVNUXzFfTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9pcnFfdGVzdF9zZXJ2aWNlXzEuKiAoK1JPKQorICAgICAgICAqdGltZXJfY21zZGsqICgrUk8pCisgICAgICAgICooVEZNX0lSUV9URVNUXzFfQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX0VOQUJMRV9JUlFfVEVTVCAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX1NFQ1VSRV9TRVJWSUNFUworICAgIFRGTV9TUF9TRUNVUkVfQ0xJRU5UXzJfTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9zZWN1cmVfY2xpZW50XzIuKiAoK1JPKQorICAgICAgICAqKFRGTV9TUF9TRUNVUkVfQ0xJRU5UXzJfQVRUUl9GTikKKyAgICB9CisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX1NFQ1VSRV9TRVJWSUNFUyAqLworCisjaWZkZWYgVEZNX01VTFRJX0NPUkVfVEVTVAorICAgIFRGTV9TUF9NVUxUSV9DT1JFX1RFU1RfTElOS0VSICswIEFMSUdOIDMyIHsKKyAgICAgICAgKm11bHRpX2NvcmVfdGVzdC4qICgrUk8pCisgICAgICAgICooVEZNX1NQX01VTFRJX0NPUkVfVEVTVF9BVFRSX0ZOKQorICAgIH0KKyNlbmRpZiAvKiBURk1fTVVMVElfQ09SRV9URVNUICovCisKKyAgICAvKgorICAgICAqIFRoaXMgZW1wdHksIHplcm8gbG9uZyBleGVjdXRpb24gcmVnaW9uIGlzIGhlcmUgdG8gbWFyayB0aGUgZW5kIGFkZHJlc3MKKyAgICAgKiBvZiBBUFAgUm9UIGNvZGUuCisgICAgICovCisgICAgVEZNX0FQUF9DT0RFX0VORCArMCBBTElHTiAzMiBFTVBUWSAweDAgeworICAgIH0KKworI2lmIGRlZmluZWQoU19DT0RFX1NSQU1fQUxJQVNfQkFTRSkKKyAgICAvKiBlRmxhc2ggZHJpdmVyIGNvZGUgdGhhdCBnZXRzIGNvcGllZCBmcm9tIEZsYXNoIHRvIFNSQU0gKi8KKyAgICBFUl9DT0RFX1NSQU0gU19DT0RFX1NSQU1fQUxJQVNfQkFTRSBBTElHTiA0IHsKKyAgICAgICAgRHJpdmVyX0dGQzEwMF9FRmxhc2gubyAoK1JPKQorICAgICAgICBnZmMxMDBfZWZsYXNoX2Rydi5vICgrUk8pCisgICAgICAgIG11c2NhX2IxX2VmbGFzaF9kcnYubyAoK1JPKQorICAgIH0KKyNlbmRpZgorCisgICAgLyoqKiogQmFzZSBhZGRyZXNzIG9mIHNlY3VyZSBkYXRhIGFyZWEgKi8KKyAgICBURk1fU0VDVVJFX0RBVEFfU1RBUlQgU19EQVRBX1NUQVJUIHsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1QVSBvbiBBcm12Ni1NL3Y3LU0gY29yZSBpbiBtdWx0aS1jb3JlIHRvcG9sb2d5IG1heSByZXF1aXJlIG1vcmUgc3RyaWN0CisgICAgICogYWxpZ25tZW50IHRoYXQgTVBVIHJlZ2lvbiBiYXNlIGFkZHJlc3MgbXVzdCBhbGlnbiB3aXRoIHRoZSBNUFUgcmVnaW9uCisgICAgICogc2l6ZS4KKyAgICAgKiBBcyBhIHJlc3VsdCwgaW4gbXVsdGktY29yZSB0b3BvbG9neSwgdG8gc2F2ZSBtZW1vcnkgcmVzb3VyY2UgYW5kIE1QVQorICAgICAqIHJlZ2lvbnMsIHVucHJpdmlsZWdlZCBkYXRhIHNlY3Rpb25zIGFuZCBwcml2aWxlZ2VkIGRhdGEgc2VjdGlvbnMgYXJlCisgICAgICogc2VwYXJhdGVkIGFuZCBnYXRoZXJlZCBpbiB1bnByaXZpbGVnZWQvcHJpdmlsZWdlZCBkYXRhIGFyZWEgcmVzcGVjdGl2ZWx5LgorICAgICAqIEtlZXAgQkwyIHNoYXJlZCBkYXRhIGFuZCBNU1Agc3RhY2sgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdXJlIGRhdGEKKyAgICAgKiBhcmVhIGluIHNpbmdsZSBBcm12OC1NIHRvcG9sb2d5LCB3aGlsZSBtb3ZlIHRoZSB0d28gYXJlYXMgdG8gdGhlCisgICAgICogYmVnaW5uaW5nIG9mIHByaXZpbGVnZWQgZGF0YSByZWdpb24gaW4gbXVsdGktY29yZSB0b3BvbG9neS4KKyAgICAgKi8KKyNpZm5kZWYgVEZNX01VTFRJX0NPUkVfVE9QT0xPR1kKKyAgICAvKiBTaGFyZWQgYXJlYSBiZXR3ZWVuIEJMMiBhbmQgcnVudGltZSB0byBleGNoYW5nZSBkYXRhICovCisgICAgVEZNX1NIQVJFRF9EQVRBICswIEFMSUdOIDMyIE9WRVJMQVkgRU1QVFkgQk9PVF9URk1fU0hBUkVEX0RBVEFfU0laRSB7CisgICAgfQorCisgICAgLyogTVNQICovCisgICAgQVJNX0xJQl9TVEFDS19NU1AgKzAgQUxJR04gMzIgT1ZFUkxBWSBFTVBUWSBTX01TUF9TVEFDS19TSVpFIHsKKyAgICB9CisKKyAgICAvKiBQU1AgaXMgdW5wcml2aWxlZ2VkIGluIHNpbmdsZS1jb3JlIHRvcG9sb2d5ICovCisgICAgQVJNX0xJQl9TVEFDSyArMCBBTElHTiAzMiBFTVBUWSBTX1BTUF9TVEFDS19TSVpFIHsKKyAgICB9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TRUNVUkVfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4MjAwMCB7CisgICAgfQorI2VuZGlmIC8qICFkZWZpbmVkKFRGTV9QU0FfQVBJKSAqLworCisgICAgVEZNX1VOUFJJVl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICB9CisKKyAgICAvKioqKiBBUFAgUm9UIERBVEEgc3RhcnQgaGVyZSAqLworICAgIC8qCisgICAgICogVGhpcyBlbXB0eSwgemVybyBsb25nIGV4ZWN1dGlvbiByZWdpb24gaXMgaGVyZSB0byBtYXJrIHRoZSBzdGFydCBhZGRyZXNzCisgICAgICogb2YgQVBQIFJvVCBSVyBhbmQgU3RhY2suCisgICAgICovCisgICAgVEZNX0FQUF9SV19TVEFDS19TVEFSVCArMCBBTElHTiAzMiBFTVBUWSAweDAgeworICAgIH0KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fUFJPVEVDVEVEX1NUT1JBR0UKKyAgICBURk1fU1BfUFNfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3N0b3JhZ2UqICgrUlcgK1pJKQorICAgICAgICAqdGVzdF9wc19udl9jb3VudGVycy4qICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9QU19BVFRSX1JXKQorICAgICAgICAqKFRGTV9TUF9QU19BVFRSX1pJKQorICAgIH0KKworI2lmIGRlZmluZWQgKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TUF9QU19MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4ODAwIHsKKyAgICB9CisjZW5kaWYKKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX1BST1RFQ1RFRF9TVE9SQUdFICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1RFU1RfQ09SRQorICAgIFRGTV9TUF9DT1JFX1RFU1RfMl9MSU5LRVJfREFUQSArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fc3NfY29yZV90ZXN0XzIuKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfQ09SRV9URVNUXzJfQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfQ09SRV9URVNUXzJfQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fU1BfQ09SRV9URVNUXzJfTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDAyODAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9DT1JFICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1RFU1RfQ09SRV9JUEMKKyAgICBURk1fU1BfSVBDX0NMSUVOVF9URVNUX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKmlwY19jbGllbnRfdGVzdC4qICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9JUENfQ0xJRU5UX1RFU1RfQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfSVBDX0NMSUVOVF9URVNUX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX0lQQ19DTElFTlRfVEVTVF9MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4MDMwMCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX0NPUkVfSVBDICovCisKKyNpZmRlZiBURk1fRU5BQkxFX0lSUV9URVNUCisgICAgVEZNX0lSUV9URVNUXzFfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX2lycV90ZXN0X3NlcnZpY2VfMS4qICgrUlcgK1pJKQorICAgICAgICAqdGltZXJfY21zZGsqICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9JUlFfVEVTVF8xX0FUVFJfUlcpCisgICAgICAgICooVEZNX0lSUV9URVNUXzFfQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fSVJRX1RFU1RfMV9MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4MDQwMCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX0VOQUJMRV9JUlFfVEVTVCAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX1NFQ1VSRV9TRVJWSUNFUworICAgIFRGTV9TUF9TRUNVUkVfQ0xJRU5UXzJfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3NlY3VyZV9jbGllbnRfMi4qICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9TRUNVUkVfQ0xJRU5UXzJfQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfU0VDVVJFX0NMSUVOVF8yX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX1NFQ1VSRV9DTElFTlRfMl9MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4MzAwIHsKKyAgICB9CisjZW5kaWYKKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX1RFU1RfU0VDVVJFX1NFUlZJQ0VTICovCisKKyNpZmRlZiBURk1fTVVMVElfQ09SRV9URVNUCisgICAgVEZNX1NQX01VTFRJX0NPUkVfVEVTVF9MSU5LRVJfREFUQSArMCBBTElHTiAzMiB7CisgICAgICAgICptdWx0aV9jb3JlX3Rlc3QuKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfTVVMVElfQ09SRV9URVNUX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX01VTFRJX0NPUkVfVEVTVF9BVFRSX1pJKQorICAgIH0KKworI2lmIGRlZmluZWQgKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TUF9NVUxUSV9DT1JFX1RFU1RfTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDAxMDAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9NVUxUSV9DT1JFX1RFU1QgKi8KKworICAgIC8qCisgICAgICogVGhpcyBlbXB0eSwgemVybyBsb25nIGV4ZWN1dGlvbiByZWdpb24gaXMgaGVyZSB0byBtYXJrIHRoZSBlbmQgYWRkcmVzcworICAgICAqIG9mIEFQUCBSb1QgUlcgYW5kIFN0YWNrLgorICAgICAqLworICAgIFRGTV9BUFBfUldfU1RBQ0tfRU5EICswIEFMSUdOIDMyIEVNUFRZIDB4MCB7CisgICAgfQorCisjaWZkZWYgVEZNX01VTFRJX0NPUkVfVE9QT0xPR1kKKyNpZmRlZiBTX0RBVEFfUFJJVl9TVEFSVAorICAgIC8qKioqIFByaXZpbGVnZWQgZGF0YSBhcmVhIGJhc2UgYWRkcmVzcyBzcGVjaWZpZWQgYnkgbXVsdGktY29yZSBwbGF0Zm9ybSAqLworICAgIFRGTV9TRUNVUkVfUFJJVl9EQVRBX0JPVU5EQVJZIFNfREFUQV9QUklWX1NUQVJUIHsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogTW92ZSBCTDIgc2hhcmVkIGFyZWEgYW5kIE1TUCBzdGFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHByaXZpbGVnZWQgZGF0YQorICAgICAqIGFyZWEgaW4gbXVsdGktY29yZSB0b3BvbG9neS4KKyAgICAgKi8KKyAgICAvKiBTaGFyZWQgYXJlYSBiZXR3ZWVuIEJMMiBhbmQgcnVudGltZSB0byBleGNoYW5nZSBkYXRhICovCisgICAgVEZNX1NIQVJFRF9EQVRBICswIEFMSUdOIDMyIE9WRVJMQVkgRU1QVFkgQk9PVF9URk1fU0hBUkVEX0RBVEFfU0laRSB7CisgICAgfQorCisgICAgLyogTVNQICovCisgICAgQVJNX0xJQl9TVEFDS19NU1AgKzAgQUxJR04gMzIgT1ZFUkxBWSBFTVBUWSBTX01TUF9TVEFDS19TSVpFIHsKKyAgICB9CisKKyAgICAvKiBQU1AgaXMgcHJpdmlsZWdlZCBpbiBtdWx0aS1jb3JlIHRvcG9sb2d5ICovCisgICAgQVJNX0xJQl9TVEFDSyArMCBBTElHTiAzMiBFTVBUWSBTX1BTUF9TVEFDS19TSVpFIHsKKyAgICB9CisjZW5kaWYKKworICAgIEFSTV9MSUJfSEVBUCArMCBBTElHTiA4IEVNUFRZIFNfSEVBUF9TSVpFIHsKKyAgICB9CisKKyAgICBFUl9URk1fREFUQSArMCB7CisgICAgICAgICogKCtSVyArWkkpCisgICAgfQorCisgICAgLyoqKiogUFNBIFJvVCBEQVRBIHN0YXJ0IGhlcmUgKi8KKyAgICAvKgorICAgICAqIFRoaXMgZW1wdHksIHplcm8gbG9uZyBleGVjdXRpb24gcmVnaW9uIGlzIGhlcmUgdG8gbWFyayB0aGUgc3RhcnQgYWRkcmVzcworICAgICAqIG9mIFBTQSBSb1QgUlcgYW5kIFN0YWNrLgorICAgICAqLworICAgIFRGTV9QU0FfUldfU1RBQ0tfU1RBUlQgKzAgQUxJR04gMzIgRU1QVFkgMHgwIHsKKyAgICB9CisKKyNpZmRlZiBURk1fUEFSVElUSU9OX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRQorICAgIFRGTV9TUF9JVFNfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZSogKCtSVyArWkkpCisgICAgICAgICooVEZNX1NQX0lUU19BVFRSX1JXKQorICAgICAgICAqKFRGTV9TUF9JVFNfQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fU1BfSVRTX0xJTktFUl9TVEFDSyArMCBBTElHTiAxMjggRU1QVFkgMHg2ODAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX0FVRElUX0xPRworICAgIFRGTV9TUF9BVURJVF9MT0dfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX2F1ZGl0KiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfQVVESVRfTE9HX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX0FVRElUX0xPR19BVFRSX1pJKQorICAgIH0KKworI2lmIGRlZmluZWQgKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TUF9BVURJVF9MT0dfTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAwIHsKKyAgICB9CisjZW5kaWYKKyNlbmRpZiAvKiBURk1fUEFSVElUSU9OX0FVRElUX0xPRyAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9DUllQVE8KKyAgICBURk1fU1BfQ1JZUFRPX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9jcnlwdG8qICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9DUllQVE9fQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfQ1JZUFRPX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX0NSWVBUT19MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4MjAwMCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9DUllQVE8gKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fUExBVEZPUk0KKyAgICBURk1fU1BfUExBVEZPUk1fTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3BsYXRmb3JtKiAoK1JXICtaSSkKKyAgICAgICAgKihURk1fU1BfUExBVEZPUk1fQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfUExBVEZPUk1fQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fU1BfUExBVEZPUk1fTElOS0VSX1NUQUNLICswIEFMSUdOIDEyOCBFTVBUWSAweDA0MDAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fUExBVEZPUk0gKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fSU5JVElBTF9BVFRFU1RBVElPTgorICAgIFRGTV9TUF9JTklUSUFMX0FUVEVTVEFUSU9OX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9hdHRlc3QqICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9JTklUSUFMX0FUVEVTVEFUSU9OX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX0lOSVRJQUxfQVRURVNUQVRJT05fQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fU1BfSU5JVElBTF9BVFRFU1RBVElPTl9MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4MEE4MCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9JTklUSUFMX0FUVEVTVEFUSU9OICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1RFU1RfQ09SRQorICAgIFRGTV9TUF9DT1JFX1RFU1RfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqdGZtX3NzX2NvcmVfdGVzdC4qICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9DT1JFX1RFU1RfQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfQ09SRV9URVNUX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX0NPUkVfVEVTVF9MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4MDM4MCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX0NPUkUgKi8KKworI2lmZGVmIFRGTV9QQVJUSVRJT05fVEVTVF9TRUNVUkVfU0VSVklDRVMKKyAgICBURk1fU1BfU0VDVVJFX1RFU1RfUEFSVElUSU9OX0xJTktFUl9EQVRBICswIEFMSUdOIDMyIHsKKyAgICAgICAgKnRmbV9zZWN1cmVfY2xpZW50X3NlcnZpY2UuKiAoK1JXICtaSSkKKyAgICAgICAgKnRlc3RfZnJhbWV3b3JrKiAoK1JXICtaSSkKKyAgICAgICAgKnVhcnRfc3Rkb3V0LiogKCtSVyArWkkpCisgICAgICAgICpEcml2ZXJfVVNBUlQuKiAoK1JXICtaSSkKKyAgICAgICAgKmFybV91YXJ0X2Rydi4qICgrUlcgK1pJKQorICAgICAgICAqdWFydF9wbDAxMV9kcnYuKiAoK1JXICtaSSkKKyAgICAgICAgKnVhcnRfY21zZGtfZHJ2KiAoK1JXICtaSSkKKyAgICAgICAgKnNlY3VyZV9zdWl0ZXMuKiAoK1JXICtaSSkKKyAgICAgICAgKmF0dGVzdGF0aW9uX3NfaW50ZXJmYWNlX3Rlc3RzdWl0ZS4qICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9TRUNVUkVfVEVTVF9QQVJUSVRJT05fQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfU0VDVVJFX1RFU1RfUEFSVElUSU9OX0FUVFJfWkkpCisgICAgfQorCisjaWYgZGVmaW5lZCAoVEZNX1BTQV9BUEkpCisgICAgVEZNX1NQX1NFQ1VSRV9URVNUX1BBUlRJVElPTl9MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4MEQwMCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX1NFQ1VSRV9TRVJWSUNFUyAqLworCisjaWZkZWYgVEZNX1BBUlRJVElPTl9URVNUX0NPUkVfSVBDCisgICAgVEZNX1NQX0lQQ19TRVJWSUNFX1RFU1RfTElOS0VSX0RBVEEgKzAgQUxJR04gMzIgeworICAgICAgICAqaXBjX3NlcnZpY2VfdGVzdC4qICgrUlcgK1pJKQorICAgICAgICAqKFRGTV9TUF9JUENfU0VSVklDRV9URVNUX0FUVFJfUlcpCisgICAgICAgICooVEZNX1NQX0lQQ19TRVJWSUNFX1RFU1RfQVRUUl9aSSkKKyAgICB9CisKKyNpZiBkZWZpbmVkIChURk1fUFNBX0FQSSkKKyAgICBURk1fU1BfSVBDX1NFUlZJQ0VfVEVTVF9MSU5LRVJfU1RBQ0sgKzAgQUxJR04gMTI4IEVNUFRZIDB4MDIyMCB7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLyogVEZNX1BBUlRJVElPTl9URVNUX0NPUkVfSVBDICovCisKKyNpZmRlZiBURk1fUEFSVElUSU9OX1RFU1RfUFMKKyAgICBURk1fU1BfUFNfVEVTVF9MSU5LRVJfREFUQSArMCBBTElHTiAzMiB7CisgICAgICAgICp0Zm1fcHNfdGVzdF9zZXJ2aWNlLiogKCtSVyArWkkpCisgICAgICAgICooVEZNX1NQX1BTX1RFU1RfQVRUUl9SVykKKyAgICAgICAgKihURk1fU1BfUFNfVEVTVF9BVFRSX1pJKQorICAgIH0KKworI2lmIGRlZmluZWQgKFRGTV9QU0FfQVBJKQorICAgIFRGTV9TUF9QU19URVNUX0xJTktFUl9TVEFDSyArMCBBTElHTiAxMjggRU1QVFkgMHg1MDAgeworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8qIFRGTV9QQVJUSVRJT05fVEVTVF9QUyAqLworCisgICAgLyoKKyAgICAgKiBUaGlzIGVtcHR5LCB6ZXJvIGxvbmcgZXhlY3V0aW9uIHJlZ2lvbiBpcyBoZXJlIHRvIG1hcmsgdGhlIGVuZCBhZGRyZXNzCisgICAgICogb2YgUFNBIFJvVCBSVyBhbmQgU3RhY2suCisgICAgICovCisgICAgVEZNX1BTQV9SV19TVEFDS19FTkQgKzAgQUxJR04gMzIgRU1QVFkgMHgwIHsKKyAgICB9CisKKyNpZiBkZWZpbmVkIChTX1JBTV9DT0RFX1NUQVJUKQorICAgIC8qIEV4ZWN1dGFibGUgY29kZSBhbGxvY2F0ZWQgaW4gUkFNICovCisgICAgVEZNX1JBTV9DT0RFIFNfUkFNX0NPREVfU1RBUlQgeworICAgICAgICAqICgucmFtZnVuYykKKyAgICB9CisjZW5kaWYKKworICAgIC8qIFRoaXMgZW1wdHksIHplcm8gbG9uZyBleGVjdXRpb24gcmVnaW9uIGlzIGhlcmUgdG8gbWFyayB0aGUgbGltaXQgYWRkcmVzcworICAgICAqIG9mIHRoZSBsYXN0IGV4ZWN1dGlvbiByZWdpb24gdGhhdCBpcyBhbGxvY2F0ZWQgaW4gU1JBTS4KKyAgICAgKi8KKyAgICBTUkFNX1dBVEVSTUFSSyArMCBFTVBUWSAweDAgeworICAgIH0KKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBzZWN0aW9ucyBhbGxvY2F0ZWQgaW4gdGhlIFNSQU0gZG9lcyBub3QgZXhjZWVkIHRoZQorICAgICAqIHNpemUgb2YgdGhlIFNSQU0gYXZhaWxhYmxlLgorICAgICAqLworICAgIFNjYXR0ZXJBc3NlcnQoSW1hZ2VMaW1pdChTUkFNX1dBVEVSTUFSSykgPD0gU19EQVRBX1NUQVJUICsgU19EQVRBX1NJWkUpCit9CisKKyNpZm5kZWYgVEZNX01VTFRJX0NPUkVfVE9QT0xPR1kKK0xSX1ZFTkVFUiBDTVNFX1ZFTkVFUl9SRUdJT05fU1RBUlQgeworICAgIC8qCisgICAgICogUGxhY2UgdGhlIENNU0UgVmVuZWVycyAoY29udGFpbmluZyB0aGUgU0cgaW5zdHJ1Y3Rpb24pIGluIGEgc2VwYXJhdGUKKyAgICAgKiAzMiBieXRlcyBhbGlnbmVkIHJlZ2lvbiBzbyB0aGF0IHRoZSBTQVUgY2FuIGJlIHByb2dyYW1tZWQgdG8KKyAgICAgKiBqdXN0IHNldCB0aGlzIHJlZ2lvbiBhcyBOb24tU2VjdXJlIENhbGxhYmxlLgorICAgICAqLworICAgIEVSX0NPREVfQ01TRV9WRU5FRVIgQ01TRV9WRU5FRVJfUkVHSU9OX1NUQVJUIENNU0VfVkVORUVSX1JFR0lPTl9TSVpFIHsKKyAgICAgICAgKihWZW5lZXIkJENNU0UpCisgICAgfQorfQorI2VuZGlmCisKK0xSX05TX1BBUlRJVElPTiBOU19QQVJUSVRJT05fU1RBUlQgeworICAgIC8qIFJlc2VydmVkIHBsYWNlIGZvciBOUyBhcHBsaWNhdGlvbi4KKyAgICAgKiBObyBjb2RlIHdpbGwgYmUgcGxhY2VkIGhlcmUsIGp1c3QgYWRkcmVzcyBvZiB0aGlzIHJlZ2lvbiBpcyB1c2VkIGluIHRoZQorICAgICAqIHNlY3VyZSBjb2RlIHRvIGNvbmZpZ3VyZSBjZXJ0YWluIEhXIGNvbXBvbmVudHMuIFRoaXMgZ2VuZXJhdGVzIGFuIGVtcHR5CisgICAgICogZXhlY3V0aW9uIHJlZ2lvbiBkZXNjcmlwdGlvbiB3YXJuaW5nIGR1cmluZyBsaW5raW5nLgorICAgICAqLworICAgIEVSX05TX1BBUlRJVElPTiBOU19QQVJUSVRJT05fU1RBUlQgVU5JTklUIE5TX1BBUlRJVElPTl9TSVpFIHsKKyAgICB9Cit9CisKKyNpZmRlZiBCTDIKK0xSX1NFQ09OREFSWV9QQVJUSVRJT04gU0VDT05EQVJZX1BBUlRJVElPTl9TVEFSVCB7CisgICAgLyogUmVzZXJ2ZWQgcGxhY2UgZm9yIG5ldyBpbWFnZSBpbiBjYXNlIG9mIGZpcm13YXJlIHVwZ3JhZGUuCisgICAgICogTm8gY29kZSB3aWxsIGJlIHBsYWNlZCBoZXJlLCBqdXN0IGFkZHJlc3Mgb2YgdGhpcyByZWdpb24gaXMgdXNlZCBpbiB0aGUKKyAgICAgKiBzZWN1cmUgY29kZSB0byBjb25maWd1cmUgY2VydGFpbiBIVyBjb21wb25lbnRzLiBUaGlzIGdlbmVyYXRlcyBhbiBlbXB0eQorICAgICAqIGV4ZWN1dGlvbiByZWdpb24gZGVzY3JpcHRpb24gd2FybmluZyBkdXJpbmcgbGlua2luZy4KKyAgICAgKi8KKyAgICBFUl9TRUNPTkRBUllfUEFSVElUSU9OIFNFQ09OREFSWV9QQVJUSVRJT05fU1RBUlQgXAorICAgICAgICBVTklOSVQgU0VDT05EQVJZX1BBUlRJVElPTl9TSVpFIHsKKyAgICB9Cit9CisjZW5kaWYgLyogQkwyICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9zdGFydHVwX2Ntc2RrX20yMzUxX2JsMi5zIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvc3RhcnR1cF9jbXNka19tMjM1MV9ibDIucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2EyMzhhCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvc3RhcnR1cF9jbXNka19tMjM1MV9ibDIucwpAQCAtMCwwICsxLDQzNSBAQAorOy8qCis7ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTggQVJNIExpbWl0ZWQKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKzsgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKzsgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCis7ICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cis7ICoKKzsgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCis7ICoKKzsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCis7ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKzsgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKzsgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCis7ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCis7ICovCis7Cis7IFRoaXMgZmlsZSBpcyBkZXJpdmF0aXZlIG9mIENNU0lTIFY1LjAwIHN0YXJ0dXBfQVJNdjhNTUwucworCis7LyoKKzsvLy0tLS0tLS0tIDw8PCBVc2UgQ29uZmlndXJhdGlvbiBXaXphcmQgaW4gQ29udGV4dCBNZW51ID4+PiAtLS0tLS0tLS0tLS0tLS0tLS0KKzsqLworCisKKzsgPGg+IFN0YWNrIENvbmZpZ3VyYXRpb24KKzsgICA8bz4gU3RhY2sgU2l6ZSAoaW4gQnl0ZXMpIDwweDAtMHhGRkZGRkZGRjo4PgorOyA8L2g+CisKKyAgICAgICAgICAgICAgICBJTVBPUlQgfEltYWdlJCRBUk1fTElCX1NUQUNLJCRaSSQkTGltaXR8CisKKzsgVmVjdG9yIFRhYmxlIE1hcHBlZCB0byBBZGRyZXNzIDAgYXQgUmVzZXQKKworICAgICAgICAgICAgICAgIEFSRUEgICAgUkVTRVQsIERBVEEsIFJFQURPTkxZCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIF9fVmVjdG9yc19FbmQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIF9fVmVjdG9yc19TaXplCisKK19fVmVjdG9ycyAgICAgICBEQ0QgICAgIHxJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0fCAgOyBUb3Agb2YgU3RhY2sKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFJlc2V0X0hhbmRsZXIgICAgICAgICAgICAgOyBSZXNldCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgIDsgTk1JIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgOyBIYXJkIEZhdWx0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgU1ZDX0hhbmRsZXIgICAgICAgICAgICAgICA7IFNWQ2FsbCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgUGVuZFNWX0hhbmRsZXIgICAgICAgICAgICA7IFBlbmRTViBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBTeXNUaWNrX0hhbmRsZXIgICAgICAgICAgIDsgU3lzVGljayBIYW5kbGVyCisKKyAgICAgICAgICAgICAgICA7IEV4dGVybmFsIEludGVycnVwdHMKKworICAgICAgICAgICAgICAgIERDRCAgICAgQk9EX0lSUUhhbmRsZXIJCSAgICAgICA7IDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorICAgICAgICAgICAgICAgIERDRCAgICAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCisgICAgICAgICAgICAgICAgRENEICAgICBTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA1CisgICAgICAgICAgICAgICAgRENEICAgICBSVENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworICAgICAgICAgICAgICAgIERDRCAgICAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CisgICAgICAgICAgICAgICAgRENEICAgICBXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgIDsgMjQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMjcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMzAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRGTV9USU1FUjBfSVJRX0hhbmRsZXIgICAgIDsgMzIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNDUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQR19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNzIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJQV00wX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFFSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDVV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgMTAwCisgICAgICAgICAgICAgICAgRENEICAgICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorX19WZWN0b3JzX0VuZAorCitfX1ZlY3RvcnNfU2l6ZSAgRVFVICAgICBfX1ZlY3RvcnNfRW5kIC0gX19WZWN0b3JzCisKKyAgICAgICAgICAgICAgICBBUkVBICAgIHwudGV4dHwsIENPREUsIFJFQURPTkxZCisKKworOyBSZXNldCBIYW5kbGVyCisKK1Jlc2V0X0hhbmRsZXIgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIElNUE9SVCAgU3lzdGVtSW5pdAorICAgICAgICAgICAgICAgIElNUE9SVCAgX19tYWluCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPVN5c3RlbUluaXQKKyAgICAgICAgICAgICAgICBCTFggICAgIFIwCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPV9fbWFpbgorICAgICAgICAgICAgICAgIEJYICAgICAgUjAKKyAgICAgICAgICAgICAgICBFTkRQCisKKworOyBEdW1teSBFeGNlcHRpb24gSGFuZGxlcnMgKGluZmluaXRlIGxvb3BzIHdoaWNoIGNhbiBiZSBtb2RpZmllZCkKKworTk1JX0hhbmRsZXIgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIE5NSV9IYW5kbGVyICAgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorSGFyZEZhdWx0X0hhbmRsZXJcCisgICAgICAgICAgICAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgSGFyZEZhdWx0X0hhbmRsZXIgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitNZW1NYW5hZ2VfSGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBNZW1NYW5hZ2VfSGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKKworU1ZDX0hhbmRsZXIgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNWQ19IYW5kbGVyICAgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorUGVuZFNWX0hhbmRsZXIgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBlbmRTVl9IYW5kbGVyICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorU3lzVGlja19IYW5kbGVyIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFN5c1RpY2tfSGFuZGxlciAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorTVBDX0hhbmRsZXIgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIE1QQ19IYW5kbGVyICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitQUENfSGFuZGxlciAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgUFBDX0hhbmRsZXIgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKKworCitEZWZhdWx0X0hhbmRsZXIgUFJPQworCisgICAgICAgICAgICAgICAgRVhQT1JUICBCT0RfSVJRSGFuZGxlcgkJICAgICAgW1dFQUtdIDsgMAorICAgICAgICAgICAgICAgIEVYUE9SVCAgSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyAxCisgICAgICAgICAgICAgICAgRVhQT1JUICBQV1JXVV9JUlFIYW5kbGVyICAgICAgICAgIFtXRUFLXSA7IDIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNSQU1fSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMworICAgICAgICAgICAgICAgIEVYUE9SVCAgQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICBbV0VBS10gOyA0CisgICAgICAgICAgICAgICA7RVhQT1JUICAwICAgICAgICAgICAgICAgICAgICAgICAgIFtXRUFLXSA7IDUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFJUQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNgorICAgICAgICAgICAgICAgIEVYUE9SVCAgVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICBbV0VBS10gOyA3CisgICAgICAgICAgICAgICAgRVhQT1JUICBXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFdXRFRfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgOQorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAxMAorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUlOVDFfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAxMQorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAxMgorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAxMworICAgICAgICAgICAgICAgIEVYUE9SVCAgRUlOVDRfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAxNAorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAxNQorICAgICAgICAgICAgICAgIEVYUE9SVCAgR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyAxNgorICAgICAgICAgICAgICAgIEVYUE9SVCAgR1BCX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyAxNworICAgICAgICAgICAgICAgIEVYUE9SVCAgR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyAxOAorICAgICAgICAgICAgICAgIEVYUE9SVCAgR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyAxOQorICAgICAgICAgICAgICAgIEVYUE9SVCAgR1BFX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyAyMAorICAgICAgICAgICAgICAgIEVYUE9SVCAgR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyAyMQorICAgICAgICAgICAgICAgIEVYUE9SVCAgUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAyMgorICAgICAgICAgICAgICAgIEVYUE9SVCAgU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAyMworICAgICAgICAgICAgICAgIEVYUE9SVCAgQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICBbV0VBS10gOyAyNAorICAgICAgICAgICAgICAgIEVYUE9SVCAgRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICBbV0VBS10gOyAyNQorICAgICAgICAgICAgICAgIEVYUE9SVCAgRVBXTTBfUDFfSVJRSGFuZGxlciAgICAgICBbV0VBS10gOyAyNgorICAgICAgICAgICAgICAgIEVYUE9SVCAgRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICBbV0VBS10gOyAyNworICAgICAgICAgICAgICAgIEVYUE9SVCAgQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICBbV0VBS10gOyAyOAorICAgICAgICAgICAgICAgIEVYUE9SVCAgRVBXTTFfUDBfSVJRSGFuZGxlciAgICAgICBbV0VBS10gOyAyOQorICAgICAgICAgICAgICAgIEVYUE9SVCAgRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICBbV0VBS10gOyAzMAorICAgICAgICAgICAgICAgIEVYUE9SVCAgRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICBbV0VBS10gOyAzMQorICAgICAgICAgICAgICAgIEVYUE9SVCAgVEZNX1RJTUVSMF9JUlFfSGFuZGxlciAgICBbV0VBS10gOyAzMgorICAgICAgICAgICAgICAgIEVYUE9SVCAgVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAzMworICAgICAgICAgICAgICAgIEVYUE9SVCAgVE1SMl9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAzNAorICAgICAgICAgICAgICAgIEVYUE9SVCAgVE1SM19JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAzNQorICAgICAgICAgICAgICAgIEVYUE9SVCAgVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAzNgorICAgICAgICAgICAgICAgIEVYUE9SVCAgVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAzNworICAgICAgICAgICAgICAgIEVYUE9SVCAgSTJDMF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAzOAorICAgICAgICAgICAgICAgIEVYUE9SVCAgSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyAzOQorICAgICAgICAgICAgICAgIEVYUE9SVCAgUERNQTBfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA0MAorICAgICAgICAgICAgICAgIEVYUE9SVCAgREFDX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA0MQorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA0MgorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA0MworICAgICAgICAgICAgICAgIEVYUE9SVCAgQUNNUDAxX0lSUUhhbmRsZXIgICAgICAgICBbV0VBS10gOyA0NAorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA0NQorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA0NgorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUFEQzNfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA0NworICAgICAgICAgICAgICAgIEVYUE9SVCAgVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA0OAorICAgICAgICAgICAgICAgIEVYUE9SVCAgVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA0OQorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA1MAorICAgICAgICAgICAgICAgIEVYUE9SVCAgU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA1MQorICAgICAgICAgICAgICAgIEVYUE9SVCAgU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA1MgorICAgICAgICAgICAgICAgIEVYUE9SVCAgVVNCRF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA1MworICAgICAgICAgICAgICAgIEVYUE9SVCAgVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA1NAorICAgICAgICAgICAgICAgIEVYUE9SVCAgVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICBbV0VBS10gOyA1NQorICAgICAgICAgICAgICAgIEVYUE9SVCAgQ0FOMF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA1NgorICAgICAgICAgICAgICAgIEVYUE9SVCAgQ0FOMV9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA1NworICAgICAgICAgICAgICAgIEVYUE9SVCAgU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA1OAorICAgICAgICAgICAgICAgIEVYUE9SVCAgU0MxX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA1OQorICAgICAgICAgICAgICAgIEVYUE9SVCAgU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA2MAorICAgICAgICAgICAgICAgIEVYUE9SVCAgU0MzX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA2MQorICAgICAgICAgICAgICAgIEVYUE9SVCAgU1BJM19JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA2MgorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA2MworICAgICAgICAgICAgICAgIEVYUE9SVCAgU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA2NAorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA2NQorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA2NgorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA2NworICAgICAgICAgICAgICAgIEVYUE9SVCAgSTJTMF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA2OAorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA2OQorICAgICAgICAgICAgICAgIEVYUE9SVCAgT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA3MAorICAgICAgICAgICAgICAgIEVYUE9SVCAgQ1JQVF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA3MQorICAgICAgICAgICAgICAgIEVYUE9SVCAgR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA3MgorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA3MworICAgICAgICAgICAgICAgIEVYUE9SVCAgVUFSVDRfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA3NAorICAgICAgICAgICAgICAgIEVYUE9SVCAgVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA3NQorICAgICAgICAgICAgICAgIEVYUE9SVCAgVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA3NgorICAgICAgICAgICAgICAgIEVYUE9SVCAgVVNDSTFfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA3NworICAgICAgICAgICAgICAgIEVYUE9SVCAgQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA3OAorICAgICAgICAgICAgICAgIEVYUE9SVCAgQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA3OQorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA4MAorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA4MQorICAgICAgICAgICAgICAgIEVYUE9SVCAgSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA4MgorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA4MworICAgICAgICAgICAgICAgIEVYUE9SVCAgUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA4NAorICAgICAgICAgICAgICAgIEVYUE9SVCAgUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA4NQorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUNBUDBfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA4NgorICAgICAgICAgICAgICAgIEVYUE9SVCAgRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA4NworICAgICAgICAgICAgICAgIEVYUE9SVCAgR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA4OAorICAgICAgICAgICAgICAgRVhQT1JUICAgRUlOVDdfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA4OQorICAgICAgICAgICAgICAgIEVYUE9SVCAgU0RIMV9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA5MAorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA5MQorICAgICAgICAgICAgICAgO0VYUE9SVCAgVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICBbV0VBS10gOyA5MgorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA5MworICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA5NAorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA5NQorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA5NgorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA5NworICAgICAgICAgICAgICAgIEVYUE9SVCAgUERNQTFfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyA5OAorICAgICAgICAgICAgICAgO0VYUE9SVCAgU0NVX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA5OQorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyAxMDAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRSTkdfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMTAxCisKKworCisgICAgICAgICAgICAgICAgRVhQT1JUCURFRkFVTFRfSVJRSGFuZGxlcgkJICBbV0VBS10KKworQk9EX0lSUUhhbmRsZXIJCSAgICAgICA7IDAKK0lSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCitTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMKK0NMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNQorUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CitUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgICA7IDcKK1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CitFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDEwCitFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCitFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCitFSU5UM19JUlFIYW5kbGVyICAgICAgICAgICA7IDEzCitFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CitFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CitHUEFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE2CitHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CitHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CitHUERfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE5CitHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCitHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCitRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDIyCitTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCitCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CitFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI1CitFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CitFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CitCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgICA7IDI4CitFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CitFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCitFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgICA7IDMxCitURk1fVElNRVIwX0lSUV9IYW5kbGVyICAgICA7IDMyCitUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCitUTVIyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM0CitUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CitVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CitVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDM3CitJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CitJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CitQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQwCitEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCitFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCitFQURDMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDQzCitBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA0NQorRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NgorRUFEQzNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NworVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OAorVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNTAKK1NQSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTEKK1NQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKK1VTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKK1VTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTQKK1VTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKK0NBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKK0NBTjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTcKK1NDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKK1NDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKK1NDMl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjAKK1NDM19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjEKK1NQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDYzCitTREgwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjYKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY3CitJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2OQorT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MAorQ1JQVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MQorR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA3MgorRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICAgOyA3MworVUFSVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NAorVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NQorVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NgorVVNDSTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NworQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OAorQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODAKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgxCitJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDgyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MworUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NAorUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NQorRUNBUDBfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NgorRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NworR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4OAorRUlOVDdfSVJRSGFuZGxlciAgICAgICAgICAgOyA4OQorU0RIMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTEKKztVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MworOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk1Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTcKK1BETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKK1NDVV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOTkKKzswICAgICAgICAgICAgICAgICAgICAgICAgIDsgMTAwCitUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorREVGQVVMVF9JUlFIYW5kbGVyCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorCisgICAgICAgICAgICAgICAgQUxJR04KKworICAgICAgICAgICAgICAgIEVORApkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvc3RhcnR1cF9jbXNka19tMjM1MV9ucy5zIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvc3RhcnR1cF9jbXNka19tMjM1MV9ucy5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZmMzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9hcm1jbGFuZy9zdGFydHVwX2Ntc2RrX20yMzUxX25zLnMKQEAgLTAsMCArMSw0MjggQEAKKzsvKgorOyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIEFSTSBMaW1pdGVkCis7ICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCis7ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOyAqCis7ICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOyAqCis7ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorOyAqLworOworOyBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiBDTVNJUyBWNS4wMCBzdGFydHVwX0FSTXY4TU1MLnMKKworOy8qCis7Ly8tLS0tLS0tLSA8PDwgVXNlIENvbmZpZ3VyYXRpb24gV2l6YXJkIGluIENvbnRleHQgTWVudSA+Pj4gLS0tLS0tLS0tLS0tLS0tLS0tCis7Ki8KKworCis7IDxoPiBTdGFjayBDb25maWd1cmF0aW9uCis7ICAgPG8+IFN0YWNrIFNpemUgKGluIEJ5dGVzKSA8MHgwLTB4RkZGRkZGRkY6OD4KKzsgPC9oPgorCisgICAgICAgICAgICAgICAgSU1QT1JUIHxJbWFnZSQkQVJNX0xJQl9TVEFDS19NU1AkJFpJJCRMaW1pdHwKKyAgICAgICAgICAgICAgICBJTVBPUlQgfEltYWdlJCRBUk1fTElCX1NUQUNLJCRaSSQkTGltaXR8CisKKzsgVmVjdG9yIFRhYmxlIE1hcHBlZCB0byBBZGRyZXNzIDAgYXQgUmVzZXQKKworICAgICAgICAgICAgICAgIEFSRUEgICAgUkVTRVQsIERBVEEsIFJFQURPTkxZCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIF9fVmVjdG9yc19FbmQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIF9fVmVjdG9yc19TaXplCisKK19fVmVjdG9ycyAgICAgICBEQ0QgICAgIHxJbWFnZSQkQVJNX0xJQl9TVEFDS19NU1AkJFpJJCRMaW1pdHwgIDsgVG9wIG9mIFN0YWNrCisgICAgICAgICAgICAgICAgRENEICAgICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgIDsgUmVzZXQgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgTk1JX0hhbmRsZXIgICAgICAgICAgICAgICA7IE5NSSBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBIYXJkRmF1bHRfSGFuZGxlciAgICAgICAgIDsgSGFyZCBGYXVsdCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNWQ19IYW5kbGVyICAgICAgICAgICAgICAgOyBTVkNhbGwgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBlbmRTVl9IYW5kbGVyICAgICAgICAgICAgOyBQZW5kU1YgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgU3lzVGlja19IYW5kbGVyICAgICAgICAgICA7IFN5c1RpY2sgSGFuZGxlcgorCisKKyAgICAgICAgICAgICAgICA7IEV4dGVybmFsIEludGVycnVwdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbWF4aW11bSBvZiAzMiBFeHRlcm5hbCBJbnRlcnJ1cHRzIGFyZSBwb3NzaWJsZQorICAgICAgICAgICAgICAgIERDRCAgICAgQk9EX0lSUUhhbmRsZXIJCSAgICAgICA7IDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorICAgICAgICAgICAgICAgIERDRCAgICAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCisgICAgICAgICAgICAgICAgRENEICAgICBTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA1CisgICAgICAgICAgICAgICAgRENEICAgICBSVENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworICAgICAgICAgICAgICAgIERDRCAgICAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CisgICAgICAgICAgICAgICAgRENEICAgICBXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgIDsgMjQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMjcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMzAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRJTUVSMV9IYW5kbGVyICAgICAgICAgICAgIDsgVE1SMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNCA7ICJUSU1FUjFfSGFuZGxlciIgaXMganVzdCBoYW5kbGVyLCBub3QgcmVhbCB0aW1lcjEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNDUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQR19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNzIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJQV00wX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFFSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgMTAwCisgICAgICAgICAgICAgICAgRENEICAgICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorX19WZWN0b3JzX0VuZAorCitfX1ZlY3RvcnNfU2l6ZSAgRVFVICAgICBfX1ZlY3RvcnNfRW5kIC0gX19WZWN0b3JzCisKKyAgICAgICAgICAgICAgICBBUkVBICAgIHwudGV4dHwsIENPREUsIFJFQURPTkxZCisKKworOyBSZXNldCBIYW5kbGVyCisKK1Jlc2V0X0hhbmRsZXIgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIElNUE9SVCAgX19tYWluCisgICAgICAgICAgICAgICAgTVJTICAgICBSMCwgY29udHJvbCAgICA7IEdldCBjb250cm9sIHZhbHVlCisgICAgICAgICAgICAgICAgTU9WUyAgICBSMSwgIzIKKyAgICAgICAgICAgICAgICBPUlJTICAgIFIwLCBSMCwgUjEgICAgIDsgU2VsZWN0IHN3aXRjaCB0byBQU1AKKyAgICAgICAgICAgICAgICBNU1IgICAgIGNvbnRyb2wsIFIwCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPXxJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0fAorICAgICAgICAgICAgICAgIE1PViAgICAgU1AsIFIwICAgICAgICAgOyBJbml0aWFsaXNlIFBTUAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1fX21haW4KKyAgICAgICAgICAgICAgICBCWCAgICAgIFIwCisgICAgICAgICAgICAgICAgRU5EUAorCisKKzsgRHVtbXkgRXhjZXB0aW9uIEhhbmRsZXJzIChpbmZpbml0ZSBsb29wcyB3aGljaCBjYW4gYmUgbW9kaWZpZWQpCisKK05NSV9IYW5kbGVyICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK0hhcmRGYXVsdF9IYW5kbGVyXAorICAgICAgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorCitTVkNfSGFuZGxlciAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgU1ZDX0hhbmRsZXIgICAgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitQZW5kU1ZfSGFuZGxlciAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgUGVuZFNWX0hhbmRsZXIgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitTeXNUaWNrX0hhbmRsZXIgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgU3lzVGlja19IYW5kbGVyICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCisKKworRGVmYXVsdF9IYW5kbGVyIFBST0MKKworICAgICAgICAgICAgICAgIEVYUE9SVCAgQk9EX0lSUUhhbmRsZXIJCSAgICAgIFtXRUFLXSA7IDAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMQorICAgICAgICAgICAgICAgIEVYUE9SVCAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAyCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgW1dFQUtdIDsgNAorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA1CisgICAgICAgICAgICAgICAgRVhQT1JUICBSVENfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgNworICAgICAgICAgICAgICAgIEVYUE9SVCAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA4CisgICAgICAgICAgICAgICAgRVhQT1JUICBXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMjAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQRl9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMjEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMjIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMjMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgMjQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgMjgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMzAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMzEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRNUjBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRNUjFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRJTUVSMV9IYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMzQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMzYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMzcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQzFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNDEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgNDQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNDUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDkKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNTAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgNTUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENBTjFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNTgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNTkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDMl9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNjAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDM19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNjEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNjIKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNjQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjUKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjYKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNjgKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNzAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNzEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQR19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNzIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJQV00wX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzkKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgODAKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgODEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgODIKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgODMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFFFSTBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgODQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgODUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgODYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgODcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgODgKKyAgICAgICAgICAgICAgIEVYUE9SVCAgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgODkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNESDFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgOTAKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTEKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgOTIKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTMKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTUKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTYKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgOTgKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIFNDVV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgOTkKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgMTAwCisgICAgICAgICAgICAgICAgRVhQT1JUICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDEwMQorCisKKworICAgICAgICAgICAgICAgIEVYUE9SVAlERUZBVUxUX0lSUUhhbmRsZXIJCSAgW1dFQUtdCisKK0JPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCitJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKK1BXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCitDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUKK1JUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CitXRFRfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDgKK1dXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorRUlOVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMQorRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworRUlOVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNAorRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorR1BCX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNworR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorR1BFX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMAorR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAyMworQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorRVBXTTBfUDFfSVJRSGFuZGxlciAgICAgICAgOyAyNgorRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorRVBXTTFfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyOQorRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorVE1SMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMgorVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworVElNRVIxX0hhbmRsZXIgICAgICAgICAgICAgOyAzNAorVE1SM19JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNQorVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworSTJDMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOAorSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorREFDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA0MQorRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworQUNNUDAxX0lSUUhhbmRsZXIgICAgICAgICAgOyA0NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNDUKK0VBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKK0VBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKK1VBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDgKK1VBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUwCitTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCitTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCitVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCitVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CitVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CitDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CitDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU3CitTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CitTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CitTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCitTQzNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYxCitTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2MworU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjUKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NworSTJTMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2OAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjkKK09QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKK0NSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKK0dQR19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNzIKK0VJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKK1VBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKK1VBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzUKK1VTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKK1VTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKK0JQV00wX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzgKK0JQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MQorSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODMKK1FFSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODQKK1FFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKK0VDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKK0VDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODcKK0dQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKK0VJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKK1NESDFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTAKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDkxCis7VVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTMKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTYKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk3CitQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4Cis7U0NVX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA5OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyAxMDAKK1RSTkdfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMTAxCitERUZBVUxUX0lSUUhhbmRsZXIKKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKworICAgICAgICAgICAgICAgIEVORFAKKworICAgICAgICAgICAgICAgIEFMSUdOCisKKyAgICAgICAgICAgICAgICBFTkQKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfcy5zIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvYXJtY2xhbmcvc3RhcnR1cF9jbXNka19tMjM1MV9zLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkMWU3MQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbTIzNTFfcy5zCkBAIC0wLDAgKzEsNDM2IEBACis7LyoKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCBBUk0gTGltaXRlZAorOyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworOyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworOyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKzsgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKzsgKgorOyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKzsgKgorOyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKzsgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorOyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorOyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKzsgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKzsgKi8KKzsKKzsgVGhpcyBmaWxlIGlzIGRlcml2YXRpdmUgb2YgQ01TSVMgVjUuMDAgc3RhcnR1cF9BUk12OE1NTC5zCisKKzsvKgorOy8vLS0tLS0tLS0gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+IC0tLS0tLS0tLS0tLS0tLS0tLQorOyovCisKKworOyA8aD4gU3RhY2sgQ29uZmlndXJhdGlvbgorOyAgIDxvPiBTdGFjayBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+Cis7IDwvaD4KKworICAgICAgICAgICAgICAgIElNUE9SVCB8SW1hZ2UkJEFSTV9MSUJfU1RBQ0tfTVNQJCRaSSQkTGltaXR8CisgICAgICAgICAgICAgICAgSU1QT1JUIHxJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0fAorCis7IFZlY3RvciBUYWJsZSBNYXBwZWQgdG8gQWRkcmVzcyAwIGF0IFJlc2V0CisKKyAgICAgICAgICAgICAgICBBUkVBICAgIFJFU0VULCBEQVRBLCBSRUFET05MWQorICAgICAgICAgICAgICAgIEVYUE9SVCAgX19WZWN0b3JzCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnNfRW5kCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnNfU2l6ZQorICAgICAgICAgICAgICAgIElNUE9SVCAgU0NVX0lSUUhhbmRsZXIKKworICAgICAgICAgICAgICAgIFBSRVNFUlZFOAorCitfX1ZlY3RvcnMgICAgICAgRENEICAgICB8SW1hZ2UkJEFSTV9MSUJfU1RBQ0tfTVNQJCRaSSQkTGltaXR8ICA7IFRvcCBvZiBTdGFjaworICAgICAgICAgICAgICAgIERDRCAgICAgUmVzZXRfSGFuZGxlciAgICAgICAgICAgICA7IFJlc2V0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIE5NSV9IYW5kbGVyICAgICAgICAgICAgICAgOyBOTUkgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgSGFyZEZhdWx0X0hhbmRsZXIgICAgICAgICA7IEhhcmQgRmF1bHQgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICBTVkNfSGFuZGxlciAgICAgICAgICAgICAgIDsgU1ZDYWxsIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICBQZW5kU1ZfSGFuZGxlciAgICAgICAgICAgIDsgUGVuZFNWIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFN5c1RpY2tfSGFuZGxlciAgICAgICAgICAgOyBTeXNUaWNrIEhhbmRsZXIKKworICAgICAgICAgICAgICAgIDsgRXh0ZXJuYWwgSW50ZXJydXB0cworICAgICAgICAgICAgICAgIERDRCAgICAgQk9EX0lSUUhhbmRsZXIJCSAgICAgICA7IDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorICAgICAgICAgICAgICAgIERDRCAgICAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCisgICAgICAgICAgICAgICAgRENEICAgICBTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA1CisgICAgICAgICAgICAgICAgRENEICAgICBSVENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworICAgICAgICAgICAgICAgIERDRCAgICAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CisgICAgICAgICAgICAgICAgRENEICAgICBXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgIDsgMjQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMjcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMzAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRGTV9USU1FUjBfSVJRX0hhbmRsZXIgICAgIDsgMzIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRJTUVSMV9IYW5kbGVyICAgICAgICAgICAgIDsgMzQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNDUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQR19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNzIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJQV00wX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFFSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDVV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgMTAwCisgICAgICAgICAgICAgICAgRENEICAgICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorCitfX1ZlY3RvcnNfRW5kCisKK19fVmVjdG9yc19TaXplICBFUVUgICAgIF9fVmVjdG9yc19FbmQgLSBfX1ZlY3RvcnMKKworICAgICAgICAgICAgICAgIEFSRUEgICAgfC50ZXh0fCwgQ09ERSwgUkVBRE9OTFkKKworCis7IFJlc2V0IEhhbmRsZXIKKworUmVzZXRfSGFuZGxlciAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFJlc2V0X0hhbmRsZXIgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgSU1QT1JUICBTeXN0ZW1Jbml0CisgICAgICAgICAgICAgICAgSU1QT1JUICBfX21haW4KKyAgICAgICAgICAgICAgICBDUFNJRCAgIGkgICAgICAgICAgICAgIDsgRGlzYWJsZSBJUlFzCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPVN5c3RlbUluaXQKKyAgICAgICAgICAgICAgICBCTFggICAgIFIwCisgICAgICAgICAgICAgICAgTVJTICAgICBSMCwgY29udHJvbCAgICA7IEdldCBjb250cm9sIHZhbHVlCisgICAgICAgICAgICAgICAgTU9WUyAgICBSMSwgIzIKKyAgICAgICAgICAgICAgICBPUlJTICAgIFIwLCBSMCwgUjEgICAgIDsgU2VsZWN0IHN3aXRjaCB0byBQU1AKKyAgICAgICAgICAgICAgICBNU1IgICAgIGNvbnRyb2wsIFIwCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPXxJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0fAorICAgICAgICAgICAgICAgIE1PVlMgICAgUjEsICM3CisgICAgICAgICAgICAgICAgQklDUyAgICBSMCwgUjEgICAgICAgICA7IE1ha2Ugc3VyZSB0aGF0IHRoZSBTUCBhZGRyZXNzIGlzIGFsaWduZWQgdG8gOAorICAgICAgICAgICAgICAgIE1PViAgICAgU1AsIFIwICAgICAgICAgOyBJbml0aWFsaXNlIFBTUAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1fX21haW4KKyAgICAgICAgICAgICAgICBCWCAgICAgIFIwCisgICAgICAgICAgICAgICAgRU5EUAorCisKKzsgRHVtbXkgRXhjZXB0aW9uIEhhbmRsZXJzIChpbmZpbml0ZSBsb29wcyB3aGljaCBjYW4gYmUgbW9kaWZpZWQpCisKK05NSV9IYW5kbGVyICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK0hhcmRGYXVsdF9IYW5kbGVyXAorICAgICAgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorCitTVkNfSGFuZGxlciAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgU1ZDX0hhbmRsZXIgICAgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitQZW5kU1ZfSGFuZGxlciAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgUGVuZFNWX0hhbmRsZXIgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitTeXNUaWNrX0hhbmRsZXIgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgU3lzVGlja19IYW5kbGVyICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCisKKworRGVmYXVsdF9IYW5kbGVyIFBST0MKKworICAgICAgICAgICAgICAgIEVYUE9SVCAgQk9EX0lSUUhhbmRsZXIJCSAgICAgIFtXRUFLXSA7IDAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMQorICAgICAgICAgICAgICAgIEVYUE9SVCAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICBbV0VBS10gOyAyCisgICAgICAgICAgICAgICAgRVhQT1JUICBTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgW1dFQUtdIDsgNAorICAgICAgICAgICAgICAgO0VYUE9SVCAgMCAgICAgICAgICAgICAgICAgICAgICAgICBbV0VBS10gOyA1CisgICAgICAgICAgICAgICAgRVhQT1JUICBSVENfSVJRSGFuZGxlciAgICAgICAgICAgIFtXRUFLXSA7IDYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgNworICAgICAgICAgICAgICAgIEVYUE9SVCAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICBbV0VBS10gOyA4CisgICAgICAgICAgICAgICAgRVhQT1JUICBXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMTUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMTkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMjAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQRl9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMjEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMjIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMjMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgMjQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgMjgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMjkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMzAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgW1dFQUtdIDsgMzEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRGTV9USU1FUjBfSVJRX0hhbmRsZXIgICAgW1dFQUtdIDsgMzIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRNUjFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRJTUVSMV9IYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgMzQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMzYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgMzcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQzFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgMzkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNDEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgNDQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNDUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNDkKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNTAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgW1dFQUtdIDsgNTUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENBTjFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNTcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNTgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNTkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDMl9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNjAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNDM19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNjEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNjIKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNjQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjUKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjYKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNjgKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgNjkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNzAKKyAgICAgICAgICAgICAgICBFWFBPUlQgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgNzEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQR19JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgNzIKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJQV00wX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzgKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgNzkKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgODAKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgODEKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgODIKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgODMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFFFSTBfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgODQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgODUKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgODYKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEVDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgODcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgODgKKyAgICAgICAgICAgICAgIEVYUE9SVCAgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgODkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNESDFfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgOTAKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTEKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgW1dFQUtdIDsgOTIKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTMKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTQKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTUKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTYKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgOTcKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgW1dFQUtdIDsgOTgKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIFNDVV9JUlFIYW5kbGVyICAgICAgICAgICAgW1dFQUtdIDsgOTkKKyAgICAgICAgICAgICAgIDtFWFBPUlQgIDAgICAgICAgICAgICAgICAgICAgICAgICAgW1dFQUtdIDsgMTAwCisgICAgICAgICAgICAgICAgRVhQT1JUICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgIFtXRUFLXSA7IDEwMQorCisKKworICAgICAgICAgICAgICAgIEVYUE9SVAlERUZBVUxUX0lSUUhhbmRsZXIJCSAgW1dFQUtdCisKK0JPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCitJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKK1BXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCitDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUKK1JUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CitXRFRfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDgKK1dXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorRUlOVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMQorRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworRUlOVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNAorRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorR1BCX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNworR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorR1BFX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMAorR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAyMworQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorRVBXTTBfUDFfSVJRSGFuZGxlciAgICAgICAgOyAyNgorRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorRVBXTTFfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyOQorRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorVEZNX1RJTUVSMF9JUlFfSGFuZGxlciAgICAgOyAzMgorVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworVElNRVIxX0hhbmRsZXIgICAgICAgICAgICAgOyAzNAorVE1SM19JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNQorVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworSTJDMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOAorSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorREFDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA0MQorRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworQUNNUDAxX0lSUUhhbmRsZXIgICAgICAgICAgOyA0NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNDUKK0VBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKK0VBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKK1VBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDgKK1VBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUwCitTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCitTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCitVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCitVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CitVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CitDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CitDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU3CitTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CitTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CitTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCitTQzNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYxCitTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2MworU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjUKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NworSTJTMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2OAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjkKK09QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKK0NSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKK0dQR19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNzIKK0VJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKK1VBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKK1VBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzUKK1VTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKK1VTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKK0JQV00wX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzgKK0JQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MQorSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODMKK1FFSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODQKK1FFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKK0VDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKK0VDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODcKK0dQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKK0VJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKK1NESDFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTAKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDkxCis7VVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTMKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTYKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk3CitQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4Cis7U0NVX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA5OQorOzAgICAgICAgICAgICAgICAgICAgICAgICAgOyAxMDAKK1RSTkdfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMTAxCitERUZBVUxUX0lSUUhhbmRsZXIKKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKworICAgICAgICAgICAgICAgIEVORFAKKworICAgICAgICAgICAgICAgIEFMSUdOCisKKyAgICAgICAgICAgICAgICBFTkQKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2RldmljZV9kZWZpbml0aW9uLmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9kZXZpY2VfZGVmaW5pdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDYwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9kZXZpY2VfZGVmaW5pdGlvbi5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIFxmaWxlIGRldmljZV9kZWZpbml0aW9uLmMKKyAqIFxicmllZiBUaGlzIGZpbGUgZGVmaW5lcyBleHBvcnRzIHRoZSBzdHJ1Y3R1cmVzIGJhc2VkIG9uIHRoZSBwZXJpcGhlcmFsCisgKiBkZWZpbml0aW9ucyBmcm9tIGRldmljZV9jZmcuaC4KKyAqIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGEgaGVscGVyIGZvciBiYXJlbWV0YWwKKyAqIGFwcGxpY2F0aW9ucyBhbmQvb3IgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gY29uZmlndXJlIHRoZSBnZW5lcmljCisgKiBkcml2ZXIgc3RydWN0dXJlcy4KKyAqLworCisjaW5jbHVkZSAiZGV2aWNlX2NmZy5oIgorI2luY2x1ZGUgImRldmljZV9kZWZpbml0aW9uLmgiCisjaW5jbHVkZSAicGxhdGZvcm1fZGVzY3JpcHRpb24uaCIKKworLyogPT09PT09PSBQZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGRlZmluaXRpb25zID09PT09PT0gKi8KKworLyogQ01TREsgR1BJTyBkcml2ZXIgc3RydWN0dXJlcyAqLworI2lmZGVmIEdQSU8wX0NNU0RLX1MKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19jbXNka19kZXZfY2ZnX3QgR1BJTzBfQ01TREtfREVWX0NGR19TID0geworICAgIC5iYXNlID0gTVVTQ0FfUzFfR1BJT19TX0JBU0V9Oworc3RydWN0IGdwaW9fY21zZGtfZGV2X3QgR1BJTzBfQ01TREtfREVWX1MgPSB7JihHUElPMF9DTVNES19ERVZfQ0ZHX1MpfTsKKyNlbmRpZgorCisvKiBDTVNESyBUaW1lcnMgZHJpdmVyIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDTVNES19USU1FUjBfUworc3RhdGljIGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfY2ZnX3QgQ01TREtfVElNRVIwX0RFVl9DRkdfUyA9IHsKKyAgICAuYmFzZSA9IFRNUjAxX0JBU0V9Oworc3RhdGljIHN0cnVjdCB0aW1lcl9jbXNka19kZXZfZGF0YV90IENNU0RLX1RJTUVSMF9ERVZfREFUQV9TID0geworICAgIC5pc19pbml0aWFsaXplZCA9IDB9Oworc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90IENNU0RLX1RJTUVSMF9ERVZfUyA9IHsmKENNU0RLX1RJTUVSMF9ERVZfQ0ZHX1MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKENNU0RLX1RJTUVSMF9ERVZfREFUQV9TKX07CisjZW5kaWYKKworI2lmZGVmIENNU0RLX1RJTUVSMV9TCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl9jZmdfdCBDTVNES19USU1FUjFfREVWX0NGR19TID0geworICAgIC5iYXNlID0gVE1SfTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X2RhdGFfdCBDTVNES19USU1FUjFfREVWX0RBVEFfUyA9IHsKKyAgICAuaXNfaW5pdGlhbGl6ZWQgPSAwfTsKK3N0cnVjdCB0aW1lcl9jbXNka19kZXZfdCBDTVNES19USU1FUjFfREVWX1MgPSB7JihDTVNES19USU1FUjFfREVWX0NGR19TKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihDTVNES19USU1FUjFfREVWX0RBVEFfUyl9OworI2VuZGlmCisKKyNpZmRlZiBDTVNES19USU1FUjJfTlMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X2NmZ190IENNU0RLX1RJTUVSMl9ERVZfQ0ZHX05TID0geworICAgIC5iYXNlID0gVE1SMjNfQkFTRStOU19PRkZTRVQgfTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X2RhdGFfdCBDTVNES19USU1FUjJfREVWX0RBVEFfTlMgPSB7CisgICAgLmlzX2luaXRpYWxpemVkID0gMCB9Oworc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90IENNU0RLX1RJTUVSMl9ERVZfTlMgPSB7ICYoQ01TREtfVElNRVIyX0RFVl9DRkdfTlMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihDTVNES19USU1FUjJfREVWX0RBVEFfTlMpIH07CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZ2NjL20yMzUxX2JsMi5sZCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9tMjM1MV9ibDIubGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4ZWFlMwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9tMjM1MV9ibDIubGQKQEAgLTAsMCArMSwxOTAgQEAKKzsvKgorOyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IEFybSBMaW1pdGVkCis7ICoKKzsgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKzsgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCis7ICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cis7ICoKKzsgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCis7ICoKKzsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCis7ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKzsgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKzsgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCis7ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCis7ICoKKzsgKgorOyAqIFRoaXMgZmlsZSBpcyBkZXJpdmF0aXZlIG9mIENNU0lTIFY1LjAwIGdjY19hcm0ubGQKKzsgKi8KKworLyogTGlua2VyIHNjcmlwdCB0byBjb25maWd1cmUgbWVtb3J5IHJlZ2lvbnMuICovCisvKiBUaGlzIGZpbGUgd2lsbCBiZSBydW4gdHJvdWdoIHRoZSBwcmUtcHJvY2Vzc29yLiAqLworCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKworTUVNT1JZCit7CisgIEZMQVNIIChyeCkgIDogT1JJR0lOID0gQkwyX0NPREVfU1RBUlQsIExFTkdUSCA9IEJMMl9DT0RFX1NJWkUKKyAgUkFNICAgKHJ3eCkgOiBPUklHSU4gPSBCTDJfREFUQV9TVEFSVCwgTEVOR1RIID0gQkwyX0RBVEFfU0laRQorfQorCitfX2hlYXBfc2l6ZV9fICA9IEJMMl9IRUFQX1NJWkU7CitfX21zcF9zdGFja19zaXplX18gPSBCTDJfTVNQX1NUQUNLX1NJWkU7CisKKy8qIExpYnJhcnkgY29uZmlndXJhdGlvbnMgKi8KK0dST1VQKGxpYmdjYy5hIGxpYmMuYSBsaWJtLmEgbGlibm9zeXMuYSkKKworRU5UUlkoUmVzZXRfSGFuZGxlcikKKworU0VDVElPTlMKK3sKKyAgICAudGV4dCA6CisgICAgeworICAgICAgICBLRUVQKCooLnZlY3RvcnMpKQorICAgICAgICBfX1ZlY3RvcnNfRW5kID0gLjsKKyAgICAgICAgX19WZWN0b3JzX1NpemUgPSBfX1ZlY3RvcnNfRW5kIC0gX19WZWN0b3JzOworICAgICAgICBfX2VuZF9fID0gLjsKKworICAgICAgICAqKC50ZXh0KikKKworICAgICAgICBLRUVQKCooLmluaXQpKQorICAgICAgICBLRUVQKCooLmZpbmkpKQorCisKKyAgICAgICAgLyogLmN0b3JzICovCisgICAgICAgICpjcnRiZWdpbi5vKC5jdG9ycykKKyAgICAgICAgKmNydGJlZ2luPy5vKC5jdG9ycykKKyAgICAgICAgKihFWENMVURFX0ZJTEUoKmNydGVuZD8ubyAqY3J0ZW5kLm8pIC5jdG9ycykKKyAgICAgICAgKihTT1JUKC5jdG9ycy4qKSkKKyAgICAgICAgKiguY3RvcnMpCisKKyAgICAgICAgLyogLmR0b3JzICovCisgICAgICAgICAqY3J0YmVnaW4ubyguZHRvcnMpCisgICAgICAgICAqY3J0YmVnaW4/Lm8oLmR0b3JzKQorICAgICAgICAgKihFWENMVURFX0ZJTEUoKmNydGVuZD8ubyAqY3J0ZW5kLm8pIC5kdG9ycykKKyAgICAgICAgICooU09SVCguZHRvcnMuKikpCisgICAgICAgICAqKC5kdG9ycykKKworICAgICAgICAqKC5yb2RhdGEqKQorCisgICAgICAgIEtFRVAoKiguZWhfZnJhbWUqKSkKKyAgICB9ID4gRkxBU0gKKworICAgIC5BUk0uZXh0YWIgOgorICAgIHsKKyAgICAgICAgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopCisgICAgfSA+IEZMQVNICisKKyAgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgICAuQVJNLmV4aWR4IDoKKyAgICB7CisgICAgICAgICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKQorICAgIH0gPiBGTEFTSAorICAgIF9fZXhpZHhfZW5kID0gLjsKKworICAgIC8qIFRvIGNvcHkgbXVsdGlwbGUgUk9NIHRvIFJBTSBzZWN0aW9ucywKKyAgICAgKiBkZWZpbmUgZXRleHQyL2RhdGEyX3N0YXJ0L2RhdGEyX2VuZCBhbmQKKyAgICAgKiBkZWZpbmUgX19TVEFSVFVQX0NPUFlfTVVMVElQTEUgaW4gc3RhcnR1cF9jbXNka19tcHMyX2FuNTE5X2JsMi5TICovCisgICAgLmNvcHkudGFibGUgOgorICAgIHsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX2NvcHlfdGFibGVfc3RhcnRfXyA9IC47CisgICAgICAgIExPTkcgKF9fZXRleHQpCisgICAgICAgIExPTkcgKF9fZGF0YV9zdGFydF9fKQorICAgICAgICBMT05HIChfX2RhdGFfZW5kX18gLSBfX2RhdGFfc3RhcnRfXykKKyAgICAgICAgTE9ORyAoREVGSU5FRChfX2V0ZXh0MikgPyBfX2V0ZXh0MiA6IDApCisgICAgICAgIExPTkcgKERFRklORUQoX19kYXRhMl9zdGFydF9fKSA/IF9fZGF0YTJfc3RhcnRfXyA6IDApCisgICAgICAgIExPTkcgKERFRklORUQoX19kYXRhMl9zdGFydF9fKSA/IF9fZGF0YTJfZW5kX18gLSBfX2RhdGEyX3N0YXJ0X18gOiAwKQorICAgICAgICBfX2NvcHlfdGFibGVfZW5kX18gPSAuOworICAgIH0gPiBGTEFTSAorCisgICAgLyogVG8gY2xlYXIgbXVsdGlwbGUgQlNTIHNlY3Rpb25zLAorICAgICAqIHVuY29tbWVudCAuemVyby50YWJsZSBzZWN0aW9uIGFuZCwKKyAgICAgKiBkZWZpbmUgX19TVEFSVFVQX0NMRUFSX0JTU19NVUxUSVBMRSBpbiBzdGFydHVwX2Ntc2RrX21wczJfYW41MTlfYmwyLlMgKi8KKyAgICAuemVyby50YWJsZSA6CisgICAgeworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9femVyb190YWJsZV9zdGFydF9fID0gLjsKKyAgICAgICAgTE9ORyAoX19ic3Nfc3RhcnRfXykKKyAgICAgICAgTE9ORyAoX19ic3NfZW5kX18gLSBfX2Jzc19zdGFydF9fKQorICAgICAgICBMT05HIChERUZJTkVEKF9fYnNzMl9zdGFydF9fKSA/IF9fYnNzMl9zdGFydF9fIDogMCkKKyAgICAgICAgTE9ORyAoREVGSU5FRChfX2JzczJfc3RhcnRfXykgPyBfX2JzczJfZW5kX18gLSBfX2JzczJfc3RhcnRfXyA6IDApCisgICAgICAgIF9femVyb190YWJsZV9lbmRfXyA9IC47CisgICAgfSA+IEZMQVNICisKKyAgICBfX2V0ZXh0ID0gLjsKKworICAgIC50Zm1fYmwyX3NoYXJlZF9kYXRhIDogQUxJR04oMzIpCisgICAgeworICAgICAgICAuICs9IEJPT1RfVEZNX1NIQVJFRF9EQVRBX1NJWkU7CisgICAgfSA+IFJBTQorICAgIEltYWdlJCRTSEFSRURfREFUQSQkUlckJEJhc2UgPSBBRERSKC50Zm1fYmwyX3NoYXJlZF9kYXRhKTsKKyAgICBJbWFnZSQkU0hBUkVEX0RBVEEkJFJXJCRMaW1pdCA9IEFERFIoLnRmbV9ibDJfc2hhcmVkX2RhdGEpICsgU0laRU9GKC50Zm1fYmwyX3NoYXJlZF9kYXRhKTsKKworICAgIC5kYXRhIDogQVQgKF9fZXRleHQpCisgICAgeworICAgICAgICBfX2RhdGFfc3RhcnRfXyA9IC47CisgICAgICAgICoodnRhYmxlKQorICAgICAgICAqKC5kYXRhKikKKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC8qIHByZWluaXQgZGF0YSAqLworICAgICAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgICAgIEtFRVAoKigucHJlaW5pdF9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgICAgIEtFRVAoKiguaW5pdF9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisKKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC8qIGZpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgICAgIEtFRVAoKiguZmluaV9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisKKyAgICAgICAgS0VFUCgqKC5qY3IqKSkKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBBbGwgZGF0YSBlbmQgKi8KKyAgICAgICAgX19kYXRhX2VuZF9fID0gLjsKKworICAgIH0gPiBSQU0KKyAgICBJbWFnZSQkRVJfREFUQSQkQmFzZSA9IEFERFIoLmRhdGEpOworCisgICAgLmJzcyA6CisgICAgeworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9fYnNzX3N0YXJ0X18gPSAuOworICAgICAgICAqKC5ic3MqKQorICAgICAgICAqKENPTU1PTikKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX2Jzc19lbmRfXyA9IC47CisgICAgfSA+IFJBTQorCisgICAgYnNzX3NpemUgPSBfX2Jzc19lbmRfXyAtIF9fYnNzX3N0YXJ0X187CisKKyAgICAubXNwX3N0YWNrIDogQUxJR04oMzIpCisgICAgeworICAgICAgICAuICs9IF9fbXNwX3N0YWNrX3NpemVfXzsKKyAgICB9ID4gUkFNCisgICAgSW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRCYXNlID0gQUREUigubXNwX3N0YWNrKTsKKyAgICBJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0ID0gQUREUigubXNwX3N0YWNrKSArIFNJWkVPRigubXNwX3N0YWNrKTsKKworICAgIC5oZWFwIDogQUxJR04oOCkKKyAgICB7CisgICAgICAgIF9fZW5kX18gPSAuOworICAgICAgICBQUk9WSURFKGVuZCA9IC4pOworICAgICAgICBfX0hlYXBCYXNlID0gLjsKKyAgICAgICAgLiArPSBfX2hlYXBfc2l6ZV9fOworICAgICAgICBfX0hlYXBMaW1pdCA9IC47CisgICAgICAgIF9faGVhcF9saW1pdCA9IC47IC8qIEFkZCBmb3IgX3NicmsgKi8KKyAgICB9ID4gUkFNCisgICAgSW1hZ2UkJEFSTV9MSUJfSEVBUCQkWkkkJExpbWl0ID0gQUREUiguaGVhcCkgKyBTSVpFT0YoLmhlYXApOworCisgICAgUFJPVklERShfX3N0YWNrID0gSW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRMaW1pdCk7Cit9CmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2MvbTIzNTFfbnMubGQgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2MvbTIzNTFfbnMubGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkY2JmYgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9tMjM1MV9ucy5sZApAQCAtMCwwICsxLDE4OCBAQAorOy8qCis7ICogQ29weXJpZ2h0IChjKSAyMDE4IEFSTSBMaW1pdGVkCis7ICoKKzsgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKzsgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCis7ICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cis7ICoKKzsgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCis7ICoKKzsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCis7ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKzsgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKzsgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCis7ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCis7ICoKKzsgKgorOyAqIFRoaXMgZmlsZSBpcyBkZXJpdmF0aXZlIG9mIENNU0lTIFY1LjAwIGdjY19hcm0ubGQKKzsgKi8KKworLyogTGlua2VyIHNjcmlwdCB0byBjb25maWd1cmUgbWVtb3J5IHJlZ2lvbnMuICovCisvKiBUaGlzIGZpbGUgd2lsbCBiZSBydW4gdHJvdWdoIHRoZSBwcmUtcHJvY2Vzc29yLiAqLworCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKworTUVNT1JZCit7CisgIEZMQVNIIChyeCkgIDogT1JJR0lOID0gTlNfQ09ERV9TVEFSVCwgTEVOR1RIID0gTlNfQ09ERV9TSVpFCisgIFJBTSAgIChyd3gpIDogT1JJR0lOID0gTlNfREFUQV9TVEFSVCwgTEVOR1RIID0gTlNfREFUQV9TSVpFCit9CisKK19faGVhcF9zaXplX18gID0gTlNfSEVBUF9TSVpFOworX19wc3Bfc3RhY2tfc2l6ZV9fID0gTlNfUFNQX1NUQUNLX1NJWkU7CitfX21zcF9zdGFja19zaXplX18gPSBOU19NU1BfU1RBQ0tfU0laRTsKKworLyogTGlicmFyeSBjb25maWd1cmF0aW9ucyAqLworR1JPVVAobGliZ2NjLmEgbGliYy5hIGxpYm0uYSBsaWJub3N5cy5hKQorCitFTlRSWShSZXNldF9IYW5kbGVyKQorCitTRUNUSU9OUworeworICAgIC50ZXh0IDoKKyAgICB7CisgICAgICAgIEtFRVAoKigudmVjdG9ycykpCisgICAgICAgIF9fVmVjdG9yc19FbmQgPSAuOworICAgICAgICBfX1ZlY3RvcnNfU2l6ZSA9IF9fVmVjdG9yc19FbmQgLSBfX1ZlY3RvcnM7CisgICAgICAgIF9fZW5kX18gPSAuOworCisgICAgICAgICooLnRleHQqKQorCisgICAgICAgIEtFRVAoKiguaW5pdCkpCisgICAgICAgIEtFRVAoKiguZmluaSkpCisKKworICAgICAgICAvKiAuY3RvcnMgKi8KKyAgICAgICAgKmNydGJlZ2luLm8oLmN0b3JzKQorICAgICAgICAqY3J0YmVnaW4/Lm8oLmN0b3JzKQorICAgICAgICAqKEVYQ0xVREVfRklMRSgqY3J0ZW5kPy5vICpjcnRlbmQubykgLmN0b3JzKQorICAgICAgICAqKFNPUlQoLmN0b3JzLiopKQorICAgICAgICAqKC5jdG9ycykKKworICAgICAgICAvKiAuZHRvcnMgKi8KKyAgICAgICAgICpjcnRiZWdpbi5vKC5kdG9ycykKKyAgICAgICAgICpjcnRiZWdpbj8ubyguZHRvcnMpCisgICAgICAgICAqKEVYQ0xVREVfRklMRSgqY3J0ZW5kPy5vICpjcnRlbmQubykgLmR0b3JzKQorICAgICAgICAgKihTT1JUKC5kdG9ycy4qKSkKKyAgICAgICAgICooLmR0b3JzKQorCisgICAgICAgICooLnJvZGF0YSopCisKKyAgICAgICAgS0VFUCgqKC5laF9mcmFtZSopKQorICAgIH0gPiBGTEFTSAorCisgICAgLkFSTS5leHRhYiA6CisgICAgeworICAgICAgICAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikKKyAgICB9ID4gRkxBU0gKKworICAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAgIC5BUk0uZXhpZHggOgorICAgIHsKKyAgICAgICAgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopCisgICAgfSA+IEZMQVNICisgICAgX19leGlkeF9lbmQgPSAuOworCisgICAgLyogVG8gY29weSBtdWx0aXBsZSBST00gdG8gUkFNIHNlY3Rpb25zLAorICAgICAqIGRlZmluZSBldGV4dDIvZGF0YTJfc3RhcnQvZGF0YTJfZW5kIGFuZAorICAgICAqIGRlZmluZSBfX1NUQVJUVVBfQ09QWV9NVUxUSVBMRSBpbiBzdGFydHVwX2Ntc2RrX21wczJfYW41MTlfbnMuUyAqLworICAgIC5jb3B5LnRhYmxlIDoKKyAgICB7CisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX19jb3B5X3RhYmxlX3N0YXJ0X18gPSAuOworICAgICAgICBMT05HIChfX2V0ZXh0KQorICAgICAgICBMT05HIChfX2RhdGFfc3RhcnRfXykKKyAgICAgICAgTE9ORyAoX19kYXRhX2VuZF9fIC0gX19kYXRhX3N0YXJ0X18pCisgICAgICAgIExPTkcgKERFRklORUQoX19ldGV4dDIpID8gX19ldGV4dDIgOiAwKQorICAgICAgICBMT05HIChERUZJTkVEKF9fZGF0YTJfc3RhcnRfXykgPyBfX2RhdGEyX3N0YXJ0X18gOiAwKQorICAgICAgICBMT05HIChERUZJTkVEKF9fZGF0YTJfc3RhcnRfXykgPyBfX2RhdGEyX2VuZF9fIC0gX19kYXRhMl9zdGFydF9fIDogMCkKKyAgICAgICAgX19jb3B5X3RhYmxlX2VuZF9fID0gLjsKKyAgICB9ID4gRkxBU0gKKworICAgIC8qIFRvIGNsZWFyIG11bHRpcGxlIEJTUyBzZWN0aW9ucywKKyAgICAgKiB1bmNvbW1lbnQgLnplcm8udGFibGUgc2VjdGlvbiBhbmQsCisgICAgICogZGVmaW5lIF9fU1RBUlRVUF9DTEVBUl9CU1NfTVVMVElQTEUgaW4gc3RhcnR1cF9jbXNka19tcHMyX2FuNTE5X25zLlMgKi8KKyAgICAuemVyby50YWJsZSA6CisgICAgeworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9femVyb190YWJsZV9zdGFydF9fID0gLjsKKyAgICAgICAgTE9ORyAoX19ic3Nfc3RhcnRfXykKKyAgICAgICAgTE9ORyAoX19ic3NfZW5kX18gLSBfX2Jzc19zdGFydF9fKQorICAgICAgICBMT05HIChERUZJTkVEKF9fYnNzMl9zdGFydF9fKSA/IF9fYnNzMl9zdGFydF9fIDogMCkKKyAgICAgICAgTE9ORyAoREVGSU5FRChfX2JzczJfc3RhcnRfXykgPyBfX2JzczJfZW5kX18gLSBfX2JzczJfc3RhcnRfXyA6IDApCisgICAgICAgIF9femVyb190YWJsZV9lbmRfXyA9IC47CisgICAgfSA+IEZMQVNICisKKyAgICBfX2V0ZXh0ID0gLjsKKworICAgIC5kYXRhIDogQVQgKF9fZXRleHQpCisgICAgeworICAgICAgICBfX2RhdGFfc3RhcnRfXyA9IC47CisgICAgICAgICoodnRhYmxlKQorICAgICAgICAqKC5kYXRhKikKKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC8qIHByZWluaXQgZGF0YSAqLworICAgICAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgICAgIEtFRVAoKigucHJlaW5pdF9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgICAgIEtFRVAoKiguaW5pdF9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisKKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC8qIGZpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgICAgIEtFRVAoKiguZmluaV9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisKKyAgICAgICAgS0VFUCgqKC5qY3IqKSkKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBBbGwgZGF0YSBlbmQgKi8KKyAgICAgICAgX19kYXRhX2VuZF9fID0gLjsKKworICAgIH0gPiBSQU0KKworICAgIC5ic3MgOgorICAgIHsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX2Jzc19zdGFydF9fID0gLjsKKyAgICAgICAgKiguYnNzKikKKyAgICAgICAgKihDT01NT04pCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX19ic3NfZW5kX18gPSAuOworICAgIH0gPiBSQU0KKworICAgIGJzc19zaXplID0gX19ic3NfZW5kX18gLSBfX2Jzc19zdGFydF9fOworCisgICAgLm1zcF9zdGFjayA6IEFMSUdOKDMyKQorICAgIHsKKyAgICAgICAgLiArPSBfX21zcF9zdGFja19zaXplX187CisgICAgfSA+IFJBTQorICAgIEltYWdlJCRBUk1fTElCX1NUQUNLX01TUCQkWkkkJExpbWl0ID0gQUREUigubXNwX3N0YWNrKSArIFNJWkVPRigubXNwX3N0YWNrKTsKKworICAgIC5wc3Bfc3RhY2sgOiBBTElHTigzMikKKyAgICB7CisgICAgICAgIC4gKz0gX19wc3Bfc3RhY2tfc2l6ZV9fOworICAgIH0gPiBSQU0KKyAgICBJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJEJhc2UgPSBBRERSKC5wc3Bfc3RhY2spOworICAgIEltYWdlJCRBUk1fTElCX1NUQUNLJCRaSSQkTGltaXQgPSBBRERSKC5wc3Bfc3RhY2spICsgU0laRU9GKC5wc3Bfc3RhY2spOworCisgICAgLmhlYXAgOiBBTElHTig4KQorICAgIHsKKyAgICAgICAgX19lbmRfXyA9IC47CisgICAgICAgIFBST1ZJREUoZW5kID0gLik7CisgICAgICAgIF9fSGVhcEJhc2UgPSAuOworICAgICAgICAuICs9IF9faGVhcF9zaXplX187CisgICAgICAgIF9fSGVhcExpbWl0ID0gLjsKKyAgICAgICAgX19oZWFwX2xpbWl0ID0gLjsgLyogQWRkIGZvciBfc2JyayAqLworICAgIH0gPiBSQU0KKworICAgIFBST1ZJREUoX19zdGFjayA9IEltYWdlJCRBUk1fTElCX1NUQUNLJCRaSSQkTGltaXQpOworfQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZ2NjL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLlMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9nY2Mvc3RhcnR1cF9jbXNka19tMjM1MV9ibDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzUxMjVjCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZ2NjL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLlMKQEAgLTAsMCArMSw0MjcgQEAKKzsvKgorOyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDE4IEFSTSBMaW1pdGVkCis7ICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCis7ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOyAqCis7ICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOyAqCis7ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorOyAqCis7ICoKKzsgKiBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiBDTVNJUyBWNS4zLjEgc3RhcnR1cF9BUk1DTTIzLlMKKzsgKi8KKworICAgIC5zeW50YXggICAgdW5pZmllZAorICAgIC5hcmNoICAgIGFybXY4LW0uYmFzZQorCisgICAgLnNlY3Rpb24gLnZlY3RvcnMKKyAgICAuYWxpZ24gMgorICAgIC5nbG9ibCAgICBfX1ZlY3RvcnMKK19fVmVjdG9yczoKKyAgICAubG9uZyAgICBJbWFnZSQkQVJNX0xJQl9TVEFDSyQkWkkkJExpbWl0ICAgLyogVG9wIG9mIFN0YWNrICovCisKKyAgICAvKiBDb3JlIGludGVycnVwdHMgKi8KKyAgICAubG9uZyAgICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgICAgICAgLyogUmVzZXQgSGFuZGxlciAqLworICAgIC5sb25nICAgIE5NSV9IYW5kbGVyICAgICAgICAgICAgICAgICAgICAvKiBOTUkgSGFuZGxlciAqLworICAgIC5sb25nICAgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgICAgICAvKiBIYXJkIEZhdWx0IEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICBTVkNfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgLyogU1ZDYWxsIEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAubG9uZyAgICBQZW5kU1ZfSGFuZGxlciAgICAgICAgICAgICAgICAgLyogUGVuZFNWIEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICBTeXNUaWNrX0hhbmRsZXIgICAgICAgICAgICAgICAgLyogU3lzVGljayBIYW5kbGVyICovCisKKyAgICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHRzICovCisgICAgLmxvbmcgICBCT0RfSVJRSGFuZGxlciAgICAgICAgLyogMCAgICovCisgICAgLmxvbmcgICBJUkNfSVJRSGFuZGxlciAgICAgICAgLyogMSAgICovCisgICAgLmxvbmcgICBQV1JXVV9JUlFIYW5kbGVyICAgICAgLyogMiAgICovCisgICAgLmxvbmcgICBTUkFNX0lSUUhhbmRsZXIgICAgICAgLyogMyAgICovCisgICAgLmxvbmcgICBDTEtGQUlMX0lSUUhhbmRsZXIgICAgLyogNCAgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNSAgICovCisgICAgLmxvbmcgICBSVENfSVJRSGFuZGxlciAgICAgICAgLyogNiAgICovCisgICAgLmxvbmcgICBUQU1QRVJfSVJRSGFuZGxlciAgICAgLyogNyAgICovCisgICAgLmxvbmcgICBXRFRfSVJRSGFuZGxlciAgICAgICAgLyogOCAgICovCisgICAgLmxvbmcgICBXV0RUX0lSUUhhbmRsZXIgICAgICAgLyogOSAgICovCisgICAgLmxvbmcgICBFSU5UMF9JUlFIYW5kbGVyICAgICAgLyogMTAgICovCisgICAgLmxvbmcgICBFSU5UMV9JUlFIYW5kbGVyICAgICAgLyogMTEgICovCisgICAgLmxvbmcgICBFSU5UMl9JUlFIYW5kbGVyICAgICAgLyogMTIgICovCisgICAgLmxvbmcgICBFSU5UM19JUlFIYW5kbGVyICAgICAgLyogMTMgICovCisgICAgLmxvbmcgICBFSU5UNF9JUlFIYW5kbGVyICAgICAgLyogMTQgICovCisgICAgLmxvbmcgICBFSU5UNV9JUlFIYW5kbGVyICAgICAgLyogMTUgICovCisgICAgLmxvbmcgICBHUEFfSVJRSGFuZGxlciAgICAgICAgLyogMTYgICovCisgICAgLmxvbmcgICBHUEJfSVJRSGFuZGxlciAgICAgICAgLyogMTcgICovCisgICAgLmxvbmcgICBHUENfSVJRSGFuZGxlciAgICAgICAgLyogMTggICovCisgICAgLmxvbmcgICBHUERfSVJRSGFuZGxlciAgICAgICAgLyogMTkgICovCisgICAgLmxvbmcgICBHUEVfSVJRSGFuZGxlciAgICAgICAgLyogMjAgICovCisgICAgLmxvbmcgICBHUEZfSVJRSGFuZGxlciAgICAgICAgLyogMjEgICovCisgICAgLmxvbmcgICBRU1BJMF9JUlFIYW5kbGVyICAgICAgLyogMjIgICovCisgICAgLmxvbmcgICBTUEkwX0lSUUhhbmRsZXIgICAgICAgLyogMjMgICovCisgICAgLmxvbmcgICBCUkFLRTBfSVJRSGFuZGxlciAgICAgLyogMjQgICovCisgICAgLmxvbmcgICBFUFdNMF9QMF9JUlFIYW5kbGVyICAgLyogMjUgICovCisgICAgLmxvbmcgICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgLyogMjYgICovCisgICAgLmxvbmcgICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgLyogMjcgICovCisgICAgLmxvbmcgICBCUkFLRTFfSVJRSGFuZGxlciAgICAgLyogMjggICovCisgICAgLmxvbmcgICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgLyogMjkgICovCisgICAgLmxvbmcgICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgLyogMzAgICovCisgICAgLmxvbmcgICBFUFdNMV9QMl9JUlFIYW5kbGVyICAgLyogMzEgICovCisgICAgLmxvbmcgICBUTVIwX0lSUUhhbmRsZXIgICAgICAgLyogMzIgICovCisgICAgLmxvbmcgICBUTVIxX0lSUUhhbmRsZXIgICAgICAgLyogMzMgICovCisgICAgLmxvbmcgICBUTVIyX0lSUUhhbmRsZXIgICAgICAgLyogMzQgICovCisgICAgLmxvbmcgICBUTVIzX0lSUUhhbmRsZXIgICAgICAgLyogMzUgICovCisgICAgLmxvbmcgICBVQVJUMF9JUlFIYW5kbGVyICAgICAgLyogMzYgICovCisgICAgLmxvbmcgICBVQVJUMV9JUlFIYW5kbGVyICAgICAgLyogMzcgICovCisgICAgLmxvbmcgICBJMkMwX0lSUUhhbmRsZXIgICAgICAgLyogMzggICovCisgICAgLmxvbmcgICBJMkMxX0lSUUhhbmRsZXIgICAgICAgLyogMzkgICovCisgICAgLmxvbmcgICBQRE1BMF9JUlFIYW5kbGVyICAgICAgLyogNDAgICovCisgICAgLmxvbmcgICBEQUNfSVJRSGFuZGxlciAgICAgICAgLyogNDEgICovCisgICAgLmxvbmcgICBFQURDMF9JUlFIYW5kbGVyICAgICAgLyogNDIgICovCisgICAgLmxvbmcgICBFQURDMV9JUlFIYW5kbGVyICAgICAgLyogNDMgICovCisgICAgLmxvbmcgICBBQ01QMDFfSVJRSGFuZGxlciAgICAgLyogNDQgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNDUgICovCisgICAgLmxvbmcgICBFQURDMl9JUlFIYW5kbGVyICAgICAgLyogNDYgICovCisgICAgLmxvbmcgICBFQURDM19JUlFIYW5kbGVyICAgICAgLyogNDcgICovCisgICAgLmxvbmcgICBVQVJUMl9JUlFIYW5kbGVyICAgICAgLyogNDggICovCisgICAgLmxvbmcgICBVQVJUM19JUlFIYW5kbGVyICAgICAgLyogNDkgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNTAgICovCisgICAgLmxvbmcgICBTUEkxX0lSUUhhbmRsZXIgICAgICAgLyogNTEgICovCisgICAgLmxvbmcgICBTUEkyX0lSUUhhbmRsZXIgICAgICAgLyogNTIgICovCisgICAgLmxvbmcgICBVU0JEX0lSUUhhbmRsZXIgICAgICAgLyogNTMgICovCisgICAgLmxvbmcgICBVU0JIX0lSUUhhbmRsZXIgICAgICAgLyogNTQgICovCisgICAgLmxvbmcgICBVU0JPVEdfSVJRSGFuZGxlciAgICAgLyogNTUgICovCisgICAgLmxvbmcgICBDQU4wX0lSUUhhbmRsZXIgICAgICAgLyogNTYgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNTcgICovCisgICAgLmxvbmcgICBTQzBfSVJRSGFuZGxlciAgICAgICAgLyogNTggICovCisgICAgLmxvbmcgICBTQzFfSVJRSGFuZGxlciAgICAgICAgLyogNTkgICovCisgICAgLmxvbmcgICBTQzJfSVJRSGFuZGxlciAgICAgICAgLyogNjAgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjEgICovCisgICAgLmxvbmcgICBTUEkzX0lSUUhhbmRsZXIgICAgICAgLyogNjIgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjMgICovCisgICAgLmxvbmcgICBTREgwX0lSUUhhbmRsZXIgICAgICAgLyogNjQgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjUgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjYgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjcgICovCisgICAgLmxvbmcgICBJMlMwX0lSUUhhbmRsZXIgICAgICAgLyogNjggICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjkgICovCisgICAgLmxvbmcgICBPUEEwX0lSUUhhbmRsZXIgICAgICAgLyogNzAgICovCisgICAgLmxvbmcgICBDUlBUX0lSUUhhbmRsZXIgICAgICAgLyogNzEgICovCisgICAgLmxvbmcgICBHUEdfSVJRSGFuZGxlciAgICAgICAgLyogNzIgICovCisgICAgLmxvbmcgICBFSU5UNl9JUlFIYW5kbGVyICAgICAgLyogNzMgICovCisgICAgLmxvbmcgICBVQVJUNF9JUlFIYW5kbGVyICAgICAgLyogNzQgICovCisgICAgLmxvbmcgICBVQVJUNV9JUlFIYW5kbGVyICAgICAgLyogNzUgICovCisgICAgLmxvbmcgICBVU0NJMF9JUlFIYW5kbGVyICAgICAgLyogNzYgICovCisgICAgLmxvbmcgICBVU0NJMV9JUlFIYW5kbGVyICAgICAgLyogNzcgICovCisgICAgLmxvbmcgICBCUFdNMF9JUlFIYW5kbGVyICAgICAgLyogNzggICovCisgICAgLmxvbmcgICBCUFdNMV9JUlFIYW5kbGVyICAgICAgLyogNzkgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogODAgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogODEgICovCisgICAgLmxvbmcgICBJMkMyX0lSUUhhbmRsZXIgICAgICAgLyogODIgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogODMgICovCisgICAgLmxvbmcgICBRRUkwX0lSUUhhbmRsZXIgICAgICAgLyogODQgICovCisgICAgLmxvbmcgICBRRUkxX0lSUUhhbmRsZXIgICAgICAgLyogODUgICovCisgICAgLmxvbmcgICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgLyogODYgICovCisgICAgLmxvbmcgICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgLyogODcgICovCisgICAgLmxvbmcgICBHUEhfSVJRSGFuZGxlciAgICAgICAgLyogODggICovCisgICAgLmxvbmcgICBFSU5UN19JUlFIYW5kbGVyICAgICAgLyogODkgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTAgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTEgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTIgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTMgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTQgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTUgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTYgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTcgICovCisgICAgLmxvbmcgICBQRE1BMV9JUlFIYW5kbGVyICAgICAgLyogOTggICovCisgICAgLmxvbmcgICBTQ1VfSVJRSGFuZGxlciAgICAgICAgLyogOTkgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogMTAwICovCisgICAgLmxvbmcgICBUUk5HX0lSUUhhbmRsZXIgICAgICAgLyogMTAxICovCisKKworICAgIC5zaXplICAgIF9fVmVjdG9ycywgLiAtIF9fVmVjdG9ycworCisgICAgLnRleHQKKyAgICAudGh1bWIKKyAgICAudGh1bWJfZnVuYworICAgIC5hbGlnbiAgICAyCisgICAgLmdsb2JsICAgIFJlc2V0X0hhbmRsZXIKKyAgICAudHlwZSAgICBSZXNldF9IYW5kbGVyLCAlZnVuY3Rpb24KK1Jlc2V0X0hhbmRsZXI6CisvKiAgRmlyc3RseSBpdCBjb3BpZXMgZGF0YSBmcm9tIHJlYWQgb25seSBtZW1vcnkgdG8gUkFNLiBUaGVyZSBhcmUgdHdvIHNjaGVtZXMKKyAqICB0byBjb3B5LiBPbmUgY2FuIGNvcHkgbW9yZSB0aGFuIG9uZSBzZWN0aW9ucy4gQW5vdGhlciBjYW4gb25seSBjb3B5CisgKiAgb25lIHNlY3Rpb24uICBUaGUgZm9ybWVyIHNjaGVtZSBuZWVkcyBtb3JlIGluc3RydWN0aW9ucyBhbmQgcmVhZC1vbmx5CisgKiAgZGF0YSB0byBpbXBsZW1lbnQgdGhhbiB0aGUgbGF0dGVyLgorICogIE1hY3JvIF9fU1RBUlRVUF9DT1BZX01VTFRJUExFIGlzIHVzZWQgdG8gY2hvb3NlIGJldHdlZW4gdHdvIHNjaGVtZXMuICAqLworCisjaWZkZWYgX19TVEFSVFVQX0NPUFlfTVVMVElQTEUKKy8qICBNdWx0aXBsZSBzZWN0aW9ucyBzY2hlbWUuCisgKgorICogIEJldHdlZW4gc3ltYm9sIGFkZHJlc3MgX19jb3B5X3RhYmxlX3N0YXJ0X18gYW5kIF9fY29weV90YWJsZV9lbmRfXywKKyAqICB0aGVyZSBhcmUgYXJyYXkgb2YgdHJpcGxldHMsIGVhY2ggb2Ygd2hpY2ggc3BlY2lmeToKKyAqICAgIG9mZnNldCAwOiBMTUEgb2Ygc3RhcnQgb2YgYSBzZWN0aW9uIHRvIGNvcHkgZnJvbQorICogICAgb2Zmc2V0IDQ6IFZNQSBvZiBzdGFydCBvZiBhIHNlY3Rpb24gdG8gY29weSB0bworICogICAgb2Zmc2V0IDg6IHNpemUgb2YgdGhlIHNlY3Rpb24gdG8gY29weS4gTXVzdCBiZSBtdWx0aXBseSBvZiA0CisgKgorICogIEFsbCBhZGRyZXNzZXMgbXVzdCBiZSBhbGlnbmVkIHRvIDQgYnl0ZXMgYm91bmRhcnkuCisgKi8KKyAgICBsZHIgICAgcjQsID1fX2NvcHlfdGFibGVfc3RhcnRfXworICAgIGxkciAgICByNSwgPV9fY29weV90YWJsZV9lbmRfXworCisuTF9sb29wMDoKKyAgICBjbXAgICAgcjQsIHI1CisgICAgYmdlICAgIC5MX2xvb3AwX2RvbmUKKyAgICBsZHIgICAgcjEsIFtyNF0KKyAgICBsZHIgICAgcjIsIFtyNCwgIzRdCisgICAgbGRyICAgIHIzLCBbcjQsICM4XQorCisuTF9sb29wMF8wOgorICAgIHN1YnMgICAgcjMsICM0CisgICAgYmx0ICAgIC5MX2xvb3AwXzBfZG9uZQorICAgIGxkciAgICByMCwgW3IxLCByM10KKyAgICBzdHIgICAgcjAsIFtyMiwgcjNdCisgICAgYiAgICAuTF9sb29wMF8wCisKKy5MX2xvb3AwXzBfZG9uZToKKyAgICBhZGRzICAgIHI0LCAjMTIKKyAgICBiICAgIC5MX2xvb3AwCisKKy5MX2xvb3AwX2RvbmU6CisjZWxzZQorLyogIFNpbmdsZSBzZWN0aW9uIHNjaGVtZS4KKyAqCisgKiAgVGhlIHJhbmdlcyBvZiBjb3B5IGZyb20vdG8gYXJlIHNwZWNpZmllZCBieSBmb2xsb3dpbmcgc3ltYm9scworICogICAgX19ldGV4dDogTE1BIG9mIHN0YXJ0IG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkgZnJvbS4gVXN1YWxseSBlbmQgb2YgdGV4dAorICogICAgX19kYXRhX3N0YXJ0X186IFZNQSBvZiBzdGFydCBvZiB0aGUgc2VjdGlvbiB0byBjb3B5IHRvCisgKiAgICBfX2RhdGFfZW5kX186IFZNQSBvZiBlbmQgb2YgdGhlIHNlY3Rpb24gdG8gY29weSB0bworICoKKyAqICBBbGwgYWRkcmVzc2VzIG11c3QgYmUgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5LgorICovCisgICAgbGRyICAgIHIxLCA9X19ldGV4dAorICAgIGxkciAgICByMiwgPV9fZGF0YV9zdGFydF9fCisgICAgbGRyICAgIHIzLCA9X19kYXRhX2VuZF9fCisKKyAgICBzdWJzICAgIHIzLCByMgorICAgIGJsZSAgICAuTF9sb29wMV9kb25lCisKKy5MX2xvb3AxOgorICAgIHN1YnMgICAgcjMsICM0CisgICAgbGRyICAgIHIwLCBbcjEscjNdCisgICAgc3RyICAgIHIwLCBbcjIscjNdCisgICAgYmd0ICAgIC5MX2xvb3AxCisKKy5MX2xvb3AxX2RvbmU6CisjZW5kaWYgLypfX1NUQVJUVVBfQ09QWV9NVUxUSVBMRSAqLworCisvKiAgVGhpcyBwYXJ0IG9mIHdvcmsgdXN1YWxseSBpcyBkb25lIGluIEMgbGlicmFyeSBzdGFydHVwIGNvZGUuIE90aGVyd2lzZSwKKyAqICBkZWZpbmUgdGhpcyBtYWNybyB0byBlbmFibGUgaXQgaW4gdGhpcyBzdGFydHVwLgorICoKKyAqICBUaGVyZSBhcmUgdHdvIHNjaGVtZXMgdG9vLiBPbmUgY2FuIGNsZWFyIG11bHRpcGxlIEJTUyBzZWN0aW9ucy4gQW5vdGhlcgorICogIGNhbiBvbmx5IGNsZWFyIG9uZSBzZWN0aW9uLiBUaGUgZm9ybWVyIGlzIG1vcmUgc2l6ZSBleHBlbnNpdmUgdGhhbiB0aGUKKyAqICBsYXR0ZXIuCisgKgorICogIERlZmluZSBtYWNybyBfX1NUQVJUVVBfQ0xFQVJfQlNTX01VTFRJUExFIHRvIGNob29zZSB0aGUgZm9ybWVyLgorICogIE90aGVyd2lzZSBlZmluZSBtYWNybyBfX1NUQVJUVVBfQ0xFQVJfQlNTIHRvIGNob29zZSB0aGUgbGF0ZXIuCisgKi8KKyNpZmRlZiBfX1NUQVJUVVBfQ0xFQVJfQlNTX01VTFRJUExFCisvKiAgTXVsdGlwbGUgc2VjdGlvbnMgc2NoZW1lLgorICoKKyAqICBCZXR3ZWVuIHN5bWJvbCBhZGRyZXNzIF9fY29weV90YWJsZV9zdGFydF9fIGFuZCBfX2NvcHlfdGFibGVfZW5kX18sCisgKiAgdGhlcmUgYXJlIGFycmF5IG9mIHR1cGxlcyBzcGVjaWZ5aW5nOgorICogICAgb2Zmc2V0IDA6IFN0YXJ0IG9mIGEgQlNTIHNlY3Rpb24KKyAqICAgIG9mZnNldCA0OiBTaXplIG9mIHRoaXMgQlNTIHNlY3Rpb24uIE11c3QgYmUgbXVsdGlwbHkgb2YgNAorICovCisgICAgbGRyICAgIHIzLCA9X196ZXJvX3RhYmxlX3N0YXJ0X18KKyAgICBsZHIgICAgcjQsID1fX3plcm9fdGFibGVfZW5kX18KKworLkxfbG9vcDI6CisgICAgY21wICAgIHIzLCByNAorICAgIGJnZSAgICAuTF9sb29wMl9kb25lCisgICAgbGRyICAgIHIxLCBbcjNdCisgICAgbGRyICAgIHIyLCBbcjMsICM0XQorICAgIG1vdnMgICAgcjAsIDAKKworLkxfbG9vcDJfMDoKKyAgICBzdWJzICAgIHIyLCAjNAorICAgIGJsdCAgICAuTF9sb29wMl8wX2RvbmUKKyAgICBzdHIgICAgcjAsIFtyMSwgcjJdCisgICAgYiAgICAuTF9sb29wMl8wCisuTF9sb29wMl8wX2RvbmU6CisKKyAgICBhZGRzICAgIHIzLCAjOAorICAgIGIgICAgLkxfbG9vcDIKKy5MX2xvb3AyX2RvbmU6CisjZWxpZiBkZWZpbmVkIChfX1NUQVJUVVBfQ0xFQVJfQlNTKQorLyogIFNpbmdsZSBCU1Mgc2VjdGlvbiBzY2hlbWUuCisgKgorICogIFRoZSBCU1Mgc2VjdGlvbiBpcyBzcGVjaWZpZWQgYnkgZm9sbG93aW5nIHN5bWJvbHMKKyAqICAgIF9fYnNzX3N0YXJ0X186IHN0YXJ0IG9mIHRoZSBCU1Mgc2VjdGlvbi4KKyAqICAgIF9fYnNzX2VuZF9fOiBlbmQgb2YgdGhlIEJTUyBzZWN0aW9uLgorICoKKyAqICBCb3RoIGFkZHJlc3NlcyBtdXN0IGJlIGFsaWduZWQgdG8gNCBieXRlcyBib3VuZGFyeS4KKyAqLworICAgIGxkciAgICByMSwgPV9fYnNzX3N0YXJ0X18KKyAgICBsZHIgICAgcjIsID1fX2Jzc19lbmRfXworCisgICAgbW92cyAgICByMCwgMAorCisgICAgc3VicyAgICByMiwgcjEKKyAgICBibGUgICAgLkxfbG9vcDNfZG9uZQorCisuTF9sb29wMzoKKyAgICBzdWJzICAgIHIyLCAjNAorICAgIHN0ciAgICByMCwgW3IxLCByMl0KKyAgICBiZ3QgICAgLkxfbG9vcDMKKy5MX2xvb3AzX2RvbmU6CisjZW5kaWYgLyogX19TVEFSVFVQX0NMRUFSX0JTU19NVUxUSVBMRSB8fCBfX1NUQVJUVVBfQ0xFQVJfQlNTICovCisKKyAgICBibCAgICBTeXN0ZW1Jbml0CisKKyNpZm5kZWYgX19TVEFSVAorI2RlZmluZSBfX1NUQVJUIF9zdGFydAorI2VuZGlmCisgICAgYmwgICAgX19TVEFSVAorCisgICAgLnBvb2wKKyAgICAuc2l6ZSAgICBSZXNldF9IYW5kbGVyLCAuIC0gUmVzZXRfSGFuZGxlcgorCisgICAgLmFsaWduICAyCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayAgIERlZmF1bHRfSGFuZGxlcgorICAgIC50eXBlICAgRGVmYXVsdF9IYW5kbGVyLCAlIGZ1bmN0aW9uCisKK0RlZmF1bHRfSGFuZGxlcjoKKyAgICBiICAgLgorICAgIC5zaXplICAgRGVmYXVsdF9IYW5kbGVyLCAuIC0gRGVmYXVsdF9IYW5kbGVyCisKKworCisKKy8qICBNYWNybyB0byBkZWZpbmUgZGVmYXVsdCBoYW5kbGVycy4gKi8KKyAgICAubWFjcm8gICAgZGVmX2lycV9oYW5kbGVyICAgIGhhbmRsZXJfbmFtZQorICAgIC5hbGlnbiAgICAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayAgICBcaGFuZGxlcl9uYW1lCisgICAgXGhhbmRsZXJfbmFtZToKKyAgICBiICAgICAgICBcaGFuZGxlcl9uYW1lCisgICAgLmVuZG0KKworICAgIGRlZl9pcnFfaGFuZGxlciBOTUlfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBIYXJkRmF1bHRfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTVkNfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBQZW5kU1ZfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTeXNUaWNrX0hhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBCT0RfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBJUkNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBQV1JXVV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNSQU1fSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBDTEtGQUlMX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBSVENfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBUQU1QRVJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBXRFRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBXV0RUX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UNF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQ1X0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BBX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BCX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BEX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BFX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BGX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUVNQSTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTUEkwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlJBS0UwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTBfUDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMF9QMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00wX1AyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlJBS0UxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTFfUDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMV9QMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00xX1AyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVE1SMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFRNUjFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBUTVIyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVE1SM19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBJMkMwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSTJDMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFBETUEwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgREFDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUFEQzBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQURDMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEFDTVAwMV9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUFEQzJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQURDM19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDNfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFNQSTFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTUEkyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNCRF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQkhfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0JPVEdfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBDQU4wX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBTQzBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTQzFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTQzJfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFNQSTNfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFNESDBfSVJRSGFuZGxlcgorCisKKworICAgIGRlZl9pcnFfaGFuZGxlciBJMlMwX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBPUEEwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQ1JQVF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQR19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQ2X0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUNV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQ0kwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNDSTFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBCUFdNMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJQV00xX0lSUUhhbmRsZXIKKworCisgICAgZGVmX2lycV9oYW5kbGVyIEkyQzJfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFFFSTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBRRUkxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUNBUDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQ0FQMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEdQSF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQ3X0lSUUhhbmRsZXIKKworCisKKworCisKKworCisgICAgZGVmX2lycV9oYW5kbGVyIFBETUExX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0NVX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBUUk5HX0lSUUhhbmRsZXIKKyAgICAgICAgLmVuZApkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZ2NjL3N0YXJ0dXBfY21zZGtfbTIzNTFfbnMuUyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX25zLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3OGQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX25zLlMKQEAgLTAsMCArMSw0MzEgQEAKKzsvKgorOyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDIwIEFSTSBMaW1pdGVkCis7ICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCis7ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOyAqCis7ICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOyAqCis7ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorOyAqCis7ICoKKzsgKiBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiBDTVNJUyBWNS4zLjEgc3RhcnR1cF9BUk1DTTIzLlMKKzsgKi8KKworICAgIC5zeW50YXggICAgdW5pZmllZAorICAgIC5hcmNoICAgIGFybXY4LW0uYmFzZQorCisgICAgLnNlY3Rpb24gLnZlY3RvcnMKKyAgICAuYWxpZ24gMgorICAgIC5nbG9ibCAgICBfX1ZlY3RvcnMKK19fVmVjdG9yczoKKyAgICAubG9uZyAgICBJbWFnZSQkQVJNX0xJQl9TVEFDS19NU1AkJFpJJCRMaW1pdCAgIC8qIFRvcCBvZiBTdGFjayAqLworCisgICAgLyogQ29yZSBpbnRlcnJ1cHRzICovCisgICAgLmxvbmcgICAgUmVzZXRfSGFuZGxlciAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgLyogTk1JIEhhbmRsZXIgKi8KKyAgICAubG9uZyAgICBIYXJkRmF1bHRfSGFuZGxlciAgICAgICAgICAgICAgLyogSGFyZCBGYXVsdCBIYW5kbGVyICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgU1ZDX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgIC8qIFNWQ2FsbCBIYW5kbGVyICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgLmxvbmcgICAgUGVuZFNWX0hhbmRsZXIgICAgICAgICAgICAgICAgIC8qIFBlbmRTViBIYW5kbGVyICovCisgICAgLmxvbmcgICAgU3lzVGlja19IYW5kbGVyICAgICAgICAgICAgICAgIC8qIFN5c1RpY2sgSGFuZGxlciAqLworCisgICAgLyogRXh0ZXJuYWwgaW50ZXJydXB0cyAqLworICAgIC5sb25nICAgQk9EX0lSUUhhbmRsZXIgICAgICAgIC8qIDAgICAqLworICAgIC5sb25nICAgSVJDX0lSUUhhbmRsZXIgICAgICAgIC8qIDEgICAqLworICAgIC5sb25nICAgUFdSV1VfSVJRSGFuZGxlciAgICAgIC8qIDIgICAqLworICAgIC5sb25nICAgU1JBTV9JUlFIYW5kbGVyICAgICAgIC8qIDMgICAqLworICAgIC5sb25nICAgQ0xLRkFJTF9JUlFIYW5kbGVyICAgIC8qIDQgICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDUgICAqLworICAgIC5sb25nICAgUlRDX0lSUUhhbmRsZXIgICAgICAgIC8qIDYgICAqLworICAgIC5sb25nICAgVEFNUEVSX0lSUUhhbmRsZXIgICAgIC8qIDcgICAqLworICAgIC5sb25nICAgV0RUX0lSUUhhbmRsZXIgICAgICAgIC8qIDggICAqLworICAgIC5sb25nICAgV1dEVF9JUlFIYW5kbGVyICAgICAgIC8qIDkgICAqLworICAgIC5sb25nICAgRUlOVDBfSVJRSGFuZGxlciAgICAgIC8qIDEwICAqLworICAgIC5sb25nICAgRUlOVDFfSVJRSGFuZGxlciAgICAgIC8qIDExICAqLworICAgIC5sb25nICAgRUlOVDJfSVJRSGFuZGxlciAgICAgIC8qIDEyICAqLworICAgIC5sb25nICAgRUlOVDNfSVJRSGFuZGxlciAgICAgIC8qIDEzICAqLworICAgIC5sb25nICAgRUlOVDRfSVJRSGFuZGxlciAgICAgIC8qIDE0ICAqLworICAgIC5sb25nICAgRUlOVDVfSVJRSGFuZGxlciAgICAgIC8qIDE1ICAqLworICAgIC5sb25nICAgR1BBX0lSUUhhbmRsZXIgICAgICAgIC8qIDE2ICAqLworICAgIC5sb25nICAgR1BCX0lSUUhhbmRsZXIgICAgICAgIC8qIDE3ICAqLworICAgIC5sb25nICAgR1BDX0lSUUhhbmRsZXIgICAgICAgIC8qIDE4ICAqLworICAgIC5sb25nICAgR1BEX0lSUUhhbmRsZXIgICAgICAgIC8qIDE5ICAqLworICAgIC5sb25nICAgR1BFX0lSUUhhbmRsZXIgICAgICAgIC8qIDIwICAqLworICAgIC5sb25nICAgR1BGX0lSUUhhbmRsZXIgICAgICAgIC8qIDIxICAqLworICAgIC5sb25nICAgUVNQSTBfSVJRSGFuZGxlciAgICAgIC8qIDIyICAqLworICAgIC5sb25nICAgU1BJMF9JUlFIYW5kbGVyICAgICAgIC8qIDIzICAqLworICAgIC5sb25nICAgQlJBS0UwX0lSUUhhbmRsZXIgICAgIC8qIDI0ICAqLworICAgIC5sb25nICAgRVBXTTBfUDBfSVJRSGFuZGxlciAgIC8qIDI1ICAqLworICAgIC5sb25nICAgRVBXTTBfUDFfSVJRSGFuZGxlciAgIC8qIDI2ICAqLworICAgIC5sb25nICAgRVBXTTBfUDJfSVJRSGFuZGxlciAgIC8qIDI3ICAqLworICAgIC5sb25nICAgQlJBS0UxX0lSUUhhbmRsZXIgICAgIC8qIDI4ICAqLworICAgIC5sb25nICAgRVBXTTFfUDBfSVJRSGFuZGxlciAgIC8qIDI5ICAqLworICAgIC5sb25nICAgRVBXTTFfUDFfSVJRSGFuZGxlciAgIC8qIDMwICAqLworICAgIC5sb25nICAgRVBXTTFfUDJfSVJRSGFuZGxlciAgIC8qIDMxICAqLworICAgIC5sb25nICAgVE1SMF9JUlFIYW5kbGVyICAgICAgIC8qIDMyICAqLworICAgIC5sb25nICAgVE1SMV9JUlFIYW5kbGVyICAgICAgIC8qIDMzICAqLworICAgIC5sb25nICAgVElNRVIxX0hhbmRsZXIgICAgICAgIC8qIDM0ICAqLyAvKiAiVElNRVIxX0hhbmRsZXIiIGlzIGp1c3QgaGFuZGxlciwgbm90IHJlYWwgdGltZXIxICovCisgICAgLmxvbmcgICBUTVIzX0lSUUhhbmRsZXIgICAgICAgLyogMzUgICovCisgICAgLmxvbmcgICBVQVJUMF9JUlFIYW5kbGVyICAgICAgLyogMzYgICovCisgICAgLmxvbmcgICBVQVJUMV9JUlFIYW5kbGVyICAgICAgLyogMzcgICovCisgICAgLmxvbmcgICBJMkMwX0lSUUhhbmRsZXIgICAgICAgLyogMzggICovCisgICAgLmxvbmcgICBJMkMxX0lSUUhhbmRsZXIgICAgICAgLyogMzkgICovCisgICAgLmxvbmcgICBQRE1BMF9JUlFIYW5kbGVyICAgICAgLyogNDAgICovCisgICAgLmxvbmcgICBEQUNfSVJRSGFuZGxlciAgICAgICAgLyogNDEgICovCisgICAgLmxvbmcgICBFQURDMF9JUlFIYW5kbGVyICAgICAgLyogNDIgICovCisgICAgLmxvbmcgICBFQURDMV9JUlFIYW5kbGVyICAgICAgLyogNDMgICovCisgICAgLmxvbmcgICBBQ01QMDFfSVJRSGFuZGxlciAgICAgLyogNDQgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNDUgICovCisgICAgLmxvbmcgICBFQURDMl9JUlFIYW5kbGVyICAgICAgLyogNDYgICovCisgICAgLmxvbmcgICBFQURDM19JUlFIYW5kbGVyICAgICAgLyogNDcgICovCisgICAgLmxvbmcgICBVQVJUMl9JUlFIYW5kbGVyICAgICAgLyogNDggICovCisgICAgLmxvbmcgICBVQVJUM19JUlFIYW5kbGVyICAgICAgLyogNDkgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNTAgICovCisgICAgLmxvbmcgICBTUEkxX0lSUUhhbmRsZXIgICAgICAgLyogNTEgICovCisgICAgLmxvbmcgICBTUEkyX0lSUUhhbmRsZXIgICAgICAgLyogNTIgICovCisgICAgLmxvbmcgICBVU0JEX0lSUUhhbmRsZXIgICAgICAgLyogNTMgICovCisgICAgLmxvbmcgICBVU0JIX0lSUUhhbmRsZXIgICAgICAgLyogNTQgICovCisgICAgLmxvbmcgICBVU0JPVEdfSVJRSGFuZGxlciAgICAgLyogNTUgICovCisgICAgLmxvbmcgICBDQU4wX0lSUUhhbmRsZXIgICAgICAgLyogNTYgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNTcgICovCisgICAgLmxvbmcgICBTQzBfSVJRSGFuZGxlciAgICAgICAgLyogNTggICovCisgICAgLmxvbmcgICBTQzFfSVJRSGFuZGxlciAgICAgICAgLyogNTkgICovCisgICAgLmxvbmcgICBTQzJfSVJRSGFuZGxlciAgICAgICAgLyogNjAgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjEgICovCisgICAgLmxvbmcgICBTUEkzX0lSUUhhbmRsZXIgICAgICAgLyogNjIgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjMgICovCisgICAgLmxvbmcgICBTREgwX0lSUUhhbmRsZXIgICAgICAgLyogNjQgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjUgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjYgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjcgICovCisgICAgLmxvbmcgICBJMlMwX0lSUUhhbmRsZXIgICAgICAgLyogNjggICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogNjkgICovCisgICAgLmxvbmcgICBPUEEwX0lSUUhhbmRsZXIgICAgICAgLyogNzAgICovCisgICAgLmxvbmcgICBDUlBUX0lSUUhhbmRsZXIgICAgICAgLyogNzEgICovCisgICAgLmxvbmcgICBHUEdfSVJRSGFuZGxlciAgICAgICAgLyogNzIgICovCisgICAgLmxvbmcgICBFSU5UNl9JUlFIYW5kbGVyICAgICAgLyogNzMgICovCisgICAgLmxvbmcgICBVQVJUNF9JUlFIYW5kbGVyICAgICAgLyogNzQgICovCisgICAgLmxvbmcgICBVQVJUNV9JUlFIYW5kbGVyICAgICAgLyogNzUgICovCisgICAgLmxvbmcgICBVU0NJMF9JUlFIYW5kbGVyICAgICAgLyogNzYgICovCisgICAgLmxvbmcgICBVU0NJMV9JUlFIYW5kbGVyICAgICAgLyogNzcgICovCisgICAgLmxvbmcgICBCUFdNMF9JUlFIYW5kbGVyICAgICAgLyogNzggICovCisgICAgLmxvbmcgICBCUFdNMV9JUlFIYW5kbGVyICAgICAgLyogNzkgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogODAgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogODEgICovCisgICAgLmxvbmcgICBJMkMyX0lSUUhhbmRsZXIgICAgICAgLyogODIgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogODMgICovCisgICAgLmxvbmcgICBRRUkwX0lSUUhhbmRsZXIgICAgICAgLyogODQgICovCisgICAgLmxvbmcgICBRRUkxX0lSUUhhbmRsZXIgICAgICAgLyogODUgICovCisgICAgLmxvbmcgICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgLyogODYgICovCisgICAgLmxvbmcgICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgLyogODcgICovCisgICAgLmxvbmcgICBHUEhfSVJRSGFuZGxlciAgICAgICAgLyogODggICovCisgICAgLmxvbmcgICBFSU5UN19JUlFIYW5kbGVyICAgICAgLyogODkgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTAgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTEgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTIgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTMgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTQgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTUgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTYgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogOTcgICovCisgICAgLmxvbmcgICBQRE1BMV9JUlFIYW5kbGVyICAgICAgLyogOTggICovCisgICAgLmxvbmcgICBTQ1VfSVJRSGFuZGxlciAgICAgICAgLyogOTkgICovCisgICAgLmxvbmcgICBEZWZhdWx0X0hhbmRsZXIgICAgICAgLyogMTAwICovCisgICAgLmxvbmcgICBUUk5HX0lSUUhhbmRsZXIgICAgICAgLyogMTAxICovCisKKyAgICAuc2l6ZSAgICBfX1ZlY3RvcnMsIC4gLSBfX1ZlY3RvcnMKKworICAgIC50ZXh0CisgICAgLnRodW1iCisgICAgLnRodW1iX2Z1bmMKKyAgICAuYWxpZ24gICAgMgorICAgIC5nbG9ibCAgICBSZXNldF9IYW5kbGVyCisgICAgLnR5cGUgICAgUmVzZXRfSGFuZGxlciwgJWZ1bmN0aW9uCitSZXNldF9IYW5kbGVyOgorLyogIEZpcnN0bHkgaXQgY29waWVzIGRhdGEgZnJvbSByZWFkIG9ubHkgbWVtb3J5IHRvIFJBTS4gVGhlcmUgYXJlIHR3byBzY2hlbWVzCisgKiAgdG8gY29weS4gT25lIGNhbiBjb3B5IG1vcmUgdGhhbiBvbmUgc2VjdGlvbnMuIEFub3RoZXIgY2FuIG9ubHkgY29weQorICogIG9uZSBzZWN0aW9uLiAgVGhlIGZvcm1lciBzY2hlbWUgbmVlZHMgbW9yZSBpbnN0cnVjdGlvbnMgYW5kIHJlYWQtb25seQorICogIGRhdGEgdG8gaW1wbGVtZW50IHRoYW4gdGhlIGxhdHRlci4KKyAqICBNYWNybyBfX1NUQVJUVVBfQ09QWV9NVUxUSVBMRSBpcyB1c2VkIHRvIGNob29zZSBiZXR3ZWVuIHR3byBzY2hlbWVzLiAgKi8KKworI2lmZGVmIF9fU1RBUlRVUF9DT1BZX01VTFRJUExFCisvKiAgTXVsdGlwbGUgc2VjdGlvbnMgc2NoZW1lLgorICoKKyAqICBCZXR3ZWVuIHN5bWJvbCBhZGRyZXNzIF9fY29weV90YWJsZV9zdGFydF9fIGFuZCBfX2NvcHlfdGFibGVfZW5kX18sCisgKiAgdGhlcmUgYXJlIGFycmF5IG9mIHRyaXBsZXRzLCBlYWNoIG9mIHdoaWNoIHNwZWNpZnk6CisgKiAgICBvZmZzZXQgMDogTE1BIG9mIHN0YXJ0IG9mIGEgc2VjdGlvbiB0byBjb3B5IGZyb20KKyAqICAgIG9mZnNldCA0OiBWTUEgb2Ygc3RhcnQgb2YgYSBzZWN0aW9uIHRvIGNvcHkgdG8KKyAqICAgIG9mZnNldCA4OiBzaXplIG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkuIE11c3QgYmUgbXVsdGlwbHkgb2YgNAorICoKKyAqICBBbGwgYWRkcmVzc2VzIG11c3QgYmUgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5LgorICovCisgICAgbGRyICAgIHI0LCA9X19jb3B5X3RhYmxlX3N0YXJ0X18KKyAgICBsZHIgICAgcjUsID1fX2NvcHlfdGFibGVfZW5kX18KKworLkxfbG9vcDA6CisgICAgY21wICAgIHI0LCByNQorICAgIGJnZSAgICAuTF9sb29wMF9kb25lCisgICAgbGRyICAgIHIxLCBbcjRdCisgICAgbGRyICAgIHIyLCBbcjQsICM0XQorICAgIGxkciAgICByMywgW3I0LCAjOF0KKworLkxfbG9vcDBfMDoKKyAgICBzdWJzICAgIHIzLCAjNAorICAgIGJsdCAgICAuTF9sb29wMF8wX2RvbmUKKyAgICBsZHIgICAgcjAsIFtyMSwgcjNdCisgICAgc3RyICAgIHIwLCBbcjIsIHIzXQorICAgIGIgICAgLkxfbG9vcDBfMAorCisuTF9sb29wMF8wX2RvbmU6CisgICAgYWRkcyAgICByNCwgIzEyCisgICAgYiAgICAuTF9sb29wMAorCisuTF9sb29wMF9kb25lOgorI2Vsc2UKKy8qICBTaW5nbGUgc2VjdGlvbiBzY2hlbWUuCisgKgorICogIFRoZSByYW5nZXMgb2YgY29weSBmcm9tL3RvIGFyZSBzcGVjaWZpZWQgYnkgZm9sbG93aW5nIHN5bWJvbHMKKyAqICAgIF9fZXRleHQ6IExNQSBvZiBzdGFydCBvZiB0aGUgc2VjdGlvbiB0byBjb3B5IGZyb20uIFVzdWFsbHkgZW5kIG9mIHRleHQKKyAqICAgIF9fZGF0YV9zdGFydF9fOiBWTUEgb2Ygc3RhcnQgb2YgdGhlIHNlY3Rpb24gdG8gY29weSB0bworICogICAgX19kYXRhX2VuZF9fOiBWTUEgb2YgZW5kIG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkgdG8KKyAqCisgKiAgQWxsIGFkZHJlc3NlcyBtdXN0IGJlIGFsaWduZWQgdG8gNCBieXRlcyBib3VuZGFyeS4KKyAqLworICAgIGxkciAgICByMSwgPV9fZXRleHQKKyAgICBsZHIgICAgcjIsID1fX2RhdGFfc3RhcnRfXworICAgIGxkciAgICByMywgPV9fZGF0YV9lbmRfXworCisgICAgc3VicyAgICByMywgcjIKKyAgICBibGUgICAgLkxfbG9vcDFfZG9uZQorCisuTF9sb29wMToKKyAgICBzdWJzICAgIHIzLCAjNAorICAgIGxkciAgICByMCwgW3IxLHIzXQorICAgIHN0ciAgICByMCwgW3IyLHIzXQorICAgIGJndCAgICAuTF9sb29wMQorCisuTF9sb29wMV9kb25lOgorI2VuZGlmIC8qX19TVEFSVFVQX0NPUFlfTVVMVElQTEUgKi8KKworLyogIFRoaXMgcGFydCBvZiB3b3JrIHVzdWFsbHkgaXMgZG9uZSBpbiBDIGxpYnJhcnkgc3RhcnR1cCBjb2RlLiBPdGhlcndpc2UsCisgKiAgZGVmaW5lIHRoaXMgbWFjcm8gdG8gZW5hYmxlIGl0IGluIHRoaXMgc3RhcnR1cC4KKyAqCisgKiAgVGhlcmUgYXJlIHR3byBzY2hlbWVzIHRvby4gT25lIGNhbiBjbGVhciBtdWx0aXBsZSBCU1Mgc2VjdGlvbnMuIEFub3RoZXIKKyAqICBjYW4gb25seSBjbGVhciBvbmUgc2VjdGlvbi4gVGhlIGZvcm1lciBpcyBtb3JlIHNpemUgZXhwZW5zaXZlIHRoYW4gdGhlCisgKiAgbGF0dGVyLgorICoKKyAqICBEZWZpbmUgbWFjcm8gX19TVEFSVFVQX0NMRUFSX0JTU19NVUxUSVBMRSB0byBjaG9vc2UgdGhlIGZvcm1lci4KKyAqICBPdGhlcndpc2UgZWZpbmUgbWFjcm8gX19TVEFSVFVQX0NMRUFSX0JTUyB0byBjaG9vc2UgdGhlIGxhdGVyLgorICovCisjaWZkZWYgX19TVEFSVFVQX0NMRUFSX0JTU19NVUxUSVBMRQorLyogIE11bHRpcGxlIHNlY3Rpb25zIHNjaGVtZS4KKyAqCisgKiAgQmV0d2VlbiBzeW1ib2wgYWRkcmVzcyBfX2NvcHlfdGFibGVfc3RhcnRfXyBhbmQgX19jb3B5X3RhYmxlX2VuZF9fLAorICogIHRoZXJlIGFyZSBhcnJheSBvZiB0dXBsZXMgc3BlY2lmeWluZzoKKyAqICAgIG9mZnNldCAwOiBTdGFydCBvZiBhIEJTUyBzZWN0aW9uCisgKiAgICBvZmZzZXQgNDogU2l6ZSBvZiB0aGlzIEJTUyBzZWN0aW9uLiBNdXN0IGJlIG11bHRpcGx5IG9mIDQKKyAqLworICAgIGxkciAgICByMywgPV9femVyb190YWJsZV9zdGFydF9fCisgICAgbGRyICAgIHI0LCA9X196ZXJvX3RhYmxlX2VuZF9fCisKKy5MX2xvb3AyOgorICAgIGNtcCAgICByMywgcjQKKyAgICBiZ2UgICAgLkxfbG9vcDJfZG9uZQorICAgIGxkciAgICByMSwgW3IzXQorICAgIGxkciAgICByMiwgW3IzLCAjNF0KKyAgICBtb3ZzICAgIHIwLCAwCisKKy5MX2xvb3AyXzA6CisgICAgc3VicyAgICByMiwgIzQKKyAgICBibHQgICAgLkxfbG9vcDJfMF9kb25lCisgICAgc3RyICAgIHIwLCBbcjEsIHIyXQorICAgIGIgICAgLkxfbG9vcDJfMAorLkxfbG9vcDJfMF9kb25lOgorCisgICAgYWRkcyAgICByMywgIzgKKyAgICBiICAgIC5MX2xvb3AyCisuTF9sb29wMl9kb25lOgorI2VsaWYgZGVmaW5lZCAoX19TVEFSVFVQX0NMRUFSX0JTUykKKy8qICBTaW5nbGUgQlNTIHNlY3Rpb24gc2NoZW1lLgorICoKKyAqICBUaGUgQlNTIHNlY3Rpb24gaXMgc3BlY2lmaWVkIGJ5IGZvbGxvd2luZyBzeW1ib2xzCisgKiAgICBfX2Jzc19zdGFydF9fOiBzdGFydCBvZiB0aGUgQlNTIHNlY3Rpb24uCisgKiAgICBfX2Jzc19lbmRfXzogZW5kIG9mIHRoZSBCU1Mgc2VjdGlvbi4KKyAqCisgKiAgQm90aCBhZGRyZXNzZXMgbXVzdCBiZSBhbGlnbmVkIHRvIDQgYnl0ZXMgYm91bmRhcnkuCisgKi8KKyAgICBsZHIgICAgcjEsID1fX2Jzc19zdGFydF9fCisgICAgbGRyICAgIHIyLCA9X19ic3NfZW5kX18KKworICAgIG1vdnMgICAgcjAsIDAKKworICAgIHN1YnMgICAgcjIsIHIxCisgICAgYmxlICAgIC5MX2xvb3AzX2RvbmUKKworLkxfbG9vcDM6CisgICAgc3VicyAgICByMiwgIzQKKyAgICBzdHIgICAgcjAsIFtyMSwgcjJdCisgICAgYmd0ICAgIC5MX2xvb3AzCisuTF9sb29wM19kb25lOgorI2VuZGlmIC8qIF9fU1RBUlRVUF9DTEVBUl9CU1NfTVVMVElQTEUgfHwgX19TVEFSVFVQX0NMRUFSX0JTUyAqLworCisgICAgbXJzICAgICByMCwgY29udHJvbCAgICAvKiBHZXQgY29udHJvbCB2YWx1ZSAqLworICAgIG1vdnMgICAgcjEsICMyCisgICAgb3JycyAgICByMCwgcjAsIHIxICAgICAvKiBTZWxlY3Qgc3dpdGNoIHRvIFBTUCAqLworICAgIG1zciAgICAgY29udHJvbCwgcjAKKyAgICBsZHIgICAgIHIwLCA9SW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRMaW1pdAorICAgIG1zciAgICAgcHNwLCByMAorCisjaWZuZGVmIF9fU1RBUlQKKyNkZWZpbmUgX19TVEFSVCBfc3RhcnQKKyNlbmRpZgorICAgIGJsICAgIF9fU1RBUlQKKworICAgIC5wb29sCisgICAgLnNpemUgICAgUmVzZXRfSGFuZGxlciwgLiAtIFJlc2V0X0hhbmRsZXIKKworICAgIC5hbGlnbiAgMgorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgICBEZWZhdWx0X0hhbmRsZXIKKyAgICAudHlwZSAgIERlZmF1bHRfSGFuZGxlciwgJSBmdW5jdGlvbgorCitEZWZhdWx0X0hhbmRsZXI6CisgICAgYiAgIC4KKyAgICAuc2l6ZSAgIERlZmF1bHRfSGFuZGxlciwgLiAtIERlZmF1bHRfSGFuZGxlcgorCisKKy8qICBNYWNybyB0byBkZWZpbmUgZGVmYXVsdCBoYW5kbGVycy4gKi8KKyAgICAubWFjcm8gICAgZGVmX2lycV9oYW5kbGVyICAgIGhhbmRsZXJfbmFtZQorICAgIC5hbGlnbiAgICAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayAgICBcaGFuZGxlcl9uYW1lCisgICAgXGhhbmRsZXJfbmFtZToKKyAgICBiICAgICAgICBcaGFuZGxlcl9uYW1lCisgICAgLmVuZG0KKworICAgIGRlZl9pcnFfaGFuZGxlciBOTUlfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBIYXJkRmF1bHRfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTVkNfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBQZW5kU1ZfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTeXNUaWNrX0hhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBCT0RfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBJUkNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBQV1JXVV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNSQU1fSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBDTEtGQUlMX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBSVENfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBUQU1QRVJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBXRFRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBXV0RUX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UNF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQ1X0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BBX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BCX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BEX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BFX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BGX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUVNQSTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTUEkwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlJBS0UwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTBfUDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMF9QMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00wX1AyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlJBS0UxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTFfUDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMV9QMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00xX1AyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVE1SMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFRNUjFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBUSU1FUjFfSGFuZGxlciAvKkp1c3QgYSBoYW5kbGVyIHRvIHVzZSBUTVIyIGhhcmR3YXJlICovCisgICAgZGVmX2lycV9oYW5kbGVyIFRNUjNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgSTJDMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEkyQzFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBQRE1BMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIERBQ19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVBREMwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUFEQzFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBBQ01QMDFfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIEVBREMyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUFEQzNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQzX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBTUEkxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1BJMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQkRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0JIX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNCT1RHX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQ0FOMF9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0MwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0MxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0MyX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBTUEkzX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBTREgwX0lSUUhhbmRsZXIKKworCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgSTJTMF9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgT1BBMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIENSUFRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBHUEdfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UNl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQ0X0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDVfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0NJMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQ0kxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlBXTTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBCUFdNMV9JUlFIYW5kbGVyCisKKworICAgIGRlZl9pcnFfaGFuZGxlciBJMkMyX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBRRUkwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUUVJMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVDQVAwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUNBUDFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBHUEhfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UN19JUlFIYW5kbGVyCisKKworCisKKworCisKKworICAgIGRlZl9pcnFfaGFuZGxlciBQRE1BMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNDVV9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgVFJOR19JUlFIYW5kbGVyCisKKworICAgIC5lbmQKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX3MuUyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2djYy9zdGFydHVwX2Ntc2RrX20yMzUxX3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM4MGUwCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvZ2NjL3N0YXJ0dXBfY21zZGtfbTIzNTFfcy5TCkBAIC0wLDAgKzEsNDMzIEBACis7LyoKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxOCBBUk0gTGltaXRlZAorOyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworOyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworOyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKzsgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKzsgKgorOyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKzsgKgorOyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKzsgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorOyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorOyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKzsgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKzsgKgorOyAqCis7ICogVGhpcyBmaWxlIGlzIGRlcml2YXRpdmUgb2YgQ01TSVMgVjUuMy4xIHN0YXJ0dXBfQVJNQ00yMy5TCis7ICovCisKKyAgICAuc3ludGF4ICAgIHVuaWZpZWQKKyAgICAuYXJjaCAgICBhcm12OC1tLmJhc2UKKworICAgIC5zZWN0aW9uIC52ZWN0b3JzCisgICAgLmFsaWduIDIKKyAgICAuZ2xvYmwgICAgX19WZWN0b3JzCitfX1ZlY3RvcnM6CisgICAgLmxvbmcgICAgSW1hZ2UkJEFSTV9MSUJfU1RBQ0tfTVNQJCRaSSQkTGltaXQgICAvKiBUb3Agb2YgU3RhY2sgKi8KKworICAgIC8qIENvcmUgaW50ZXJydXB0cyAqLworICAgIC5sb25nICAgIFJlc2V0X0hhbmRsZXIgICAgICAgICAgICAgICAgICAvKiBSZXNldCBIYW5kbGVyICovCisgICAgLmxvbmcgICAgTk1JX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgIC8qIE5NSSBIYW5kbGVyICovCisgICAgLmxvbmcgICAgSGFyZEZhdWx0X0hhbmRsZXIgICAgICAgICAgICAgIC8qIEhhcmQgRmF1bHQgSGFuZGxlciAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIFNWQ19IYW5kbGVyICAgICAgICAgICAgICAgICAgICAvKiBTVkNhbGwgSGFuZGxlciAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgIC5sb25nICAgIFBlbmRTVl9IYW5kbGVyICAgICAgICAgICAgICAgICAvKiBQZW5kU1YgSGFuZGxlciAqLworICAgIC5sb25nICAgIFN5c1RpY2tfSGFuZGxlciAgICAgICAgICAgICAgICAvKiBTeXNUaWNrIEhhbmRsZXIgKi8KKworICAgIC8qIEV4dGVybmFsIGludGVycnVwdHMgKi8KKyAgICAubG9uZyAgIEJPRF9JUlFIYW5kbGVyICAgICAgICAvKiAwICAgKi8KKyAgICAubG9uZyAgIElSQ19JUlFIYW5kbGVyICAgICAgICAvKiAxICAgKi8KKyAgICAubG9uZyAgIFBXUldVX0lSUUhhbmRsZXIgICAgICAvKiAyICAgKi8KKyAgICAubG9uZyAgIFNSQU1fSVJRSGFuZGxlciAgICAgICAvKiAzICAgKi8KKyAgICAubG9uZyAgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAvKiA0ICAgKi8KKyAgICAubG9uZyAgIERlZmF1bHRfSGFuZGxlciAgICAgICAvKiA1ICAgKi8KKyAgICAubG9uZyAgIFJUQ19JUlFIYW5kbGVyICAgICAgICAvKiA2ICAgKi8KKyAgICAubG9uZyAgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAvKiA3ICAgKi8KKyAgICAubG9uZyAgIFdEVF9JUlFIYW5kbGVyICAgICAgICAvKiA4ICAgKi8KKyAgICAubG9uZyAgIFdXRFRfSVJRSGFuZGxlciAgICAgICAvKiA5ICAgKi8KKyAgICAubG9uZyAgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAvKiAxMCAgKi8KKyAgICAubG9uZyAgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAvKiAxMSAgKi8KKyAgICAubG9uZyAgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAvKiAxMiAgKi8KKyAgICAubG9uZyAgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAvKiAxMyAgKi8KKyAgICAubG9uZyAgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAvKiAxNCAgKi8KKyAgICAubG9uZyAgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAvKiAxNSAgKi8KKyAgICAubG9uZyAgIEdQQV9JUlFIYW5kbGVyICAgICAgICAvKiAxNiAgKi8KKyAgICAubG9uZyAgIEdQQl9JUlFIYW5kbGVyICAgICAgICAvKiAxNyAgKi8KKyAgICAubG9uZyAgIEdQQ19JUlFIYW5kbGVyICAgICAgICAvKiAxOCAgKi8KKyAgICAubG9uZyAgIEdQRF9JUlFIYW5kbGVyICAgICAgICAvKiAxOSAgKi8KKyAgICAubG9uZyAgIEdQRV9JUlFIYW5kbGVyICAgICAgICAvKiAyMCAgKi8KKyAgICAubG9uZyAgIEdQRl9JUlFIYW5kbGVyICAgICAgICAvKiAyMSAgKi8KKyAgICAubG9uZyAgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAvKiAyMiAgKi8KKyAgICAubG9uZyAgIFNQSTBfSVJRSGFuZGxlciAgICAgICAvKiAyMyAgKi8KKyAgICAubG9uZyAgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAvKiAyNCAgKi8KKyAgICAubG9uZyAgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAvKiAyNSAgKi8KKyAgICAubG9uZyAgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAvKiAyNiAgKi8KKyAgICAubG9uZyAgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAvKiAyNyAgKi8KKyAgICAubG9uZyAgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAvKiAyOCAgKi8KKyAgICAubG9uZyAgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAvKiAyOSAgKi8KKyAgICAubG9uZyAgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAvKiAzMCAgKi8KKyAgICAubG9uZyAgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAvKiAzMSAgKi8KKyAgICAubG9uZyAgIFRGTV9USU1FUjBfSVJRX0hhbmRsZXIgLyogMzIgICovCisgICAgLmxvbmcgICBUTVIxX0lSUUhhbmRsZXIgICAgICAgLyogMzMgICovCisgICAgLmxvbmcgICBUSU1FUjFfSGFuZGxlciAgICAgICAgLyogVE1SMl9JUlFIYW5kbGVyIDM0ICAqLworICAgIC5sb25nICAgVE1SM19JUlFIYW5kbGVyICAgICAgIC8qIDM1ICAqLworICAgIC5sb25nICAgVUFSVDBfSVJRSGFuZGxlciAgICAgIC8qIDM2ICAqLworICAgIC5sb25nICAgVUFSVDFfSVJRSGFuZGxlciAgICAgIC8qIDM3ICAqLworICAgIC5sb25nICAgSTJDMF9JUlFIYW5kbGVyICAgICAgIC8qIDM4ICAqLworICAgIC5sb25nICAgSTJDMV9JUlFIYW5kbGVyICAgICAgIC8qIDM5ICAqLworICAgIC5sb25nICAgUERNQTBfSVJRSGFuZGxlciAgICAgIC8qIDQwICAqLworICAgIC5sb25nICAgREFDX0lSUUhhbmRsZXIgICAgICAgIC8qIDQxICAqLworICAgIC5sb25nICAgRUFEQzBfSVJRSGFuZGxlciAgICAgIC8qIDQyICAqLworICAgIC5sb25nICAgRUFEQzFfSVJRSGFuZGxlciAgICAgIC8qIDQzICAqLworICAgIC5sb25nICAgQUNNUDAxX0lSUUhhbmRsZXIgICAgIC8qIDQ0ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDQ1ICAqLworICAgIC5sb25nICAgRUFEQzJfSVJRSGFuZGxlciAgICAgIC8qIDQ2ICAqLworICAgIC5sb25nICAgRUFEQzNfSVJRSGFuZGxlciAgICAgIC8qIDQ3ICAqLworICAgIC5sb25nICAgVUFSVDJfSVJRSGFuZGxlciAgICAgIC8qIDQ4ICAqLworICAgIC5sb25nICAgVUFSVDNfSVJRSGFuZGxlciAgICAgIC8qIDQ5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDUwICAqLworICAgIC5sb25nICAgU1BJMV9JUlFIYW5kbGVyICAgICAgIC8qIDUxICAqLworICAgIC5sb25nICAgU1BJMl9JUlFIYW5kbGVyICAgICAgIC8qIDUyICAqLworICAgIC5sb25nICAgVVNCRF9JUlFIYW5kbGVyICAgICAgIC8qIDUzICAqLworICAgIC5sb25nICAgVVNCSF9JUlFIYW5kbGVyICAgICAgIC8qIDU0ICAqLworICAgIC5sb25nICAgVVNCT1RHX0lSUUhhbmRsZXIgICAgIC8qIDU1ICAqLworICAgIC5sb25nICAgQ0FOMF9JUlFIYW5kbGVyICAgICAgIC8qIDU2ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDU3ICAqLworICAgIC5sb25nICAgU0MwX0lSUUhhbmRsZXIgICAgICAgIC8qIDU4ICAqLworICAgIC5sb25nICAgU0MxX0lSUUhhbmRsZXIgICAgICAgIC8qIDU5ICAqLworICAgIC5sb25nICAgU0MyX0lSUUhhbmRsZXIgICAgICAgIC8qIDYwICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDYxICAqLworICAgIC5sb25nICAgU1BJM19JUlFIYW5kbGVyICAgICAgIC8qIDYyICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDYzICAqLworICAgIC5sb25nICAgU0RIMF9JUlFIYW5kbGVyICAgICAgIC8qIDY0ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY1ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY2ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY3ICAqLworICAgIC5sb25nICAgSTJTMF9JUlFIYW5kbGVyICAgICAgIC8qIDY4ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDY5ICAqLworICAgIC5sb25nICAgT1BBMF9JUlFIYW5kbGVyICAgICAgIC8qIDcwICAqLworICAgIC5sb25nICAgQ1JQVF9JUlFIYW5kbGVyICAgICAgIC8qIDcxICAqLworICAgIC5sb25nICAgR1BHX0lSUUhhbmRsZXIgICAgICAgIC8qIDcyICAqLworICAgIC5sb25nICAgRUlOVDZfSVJRSGFuZGxlciAgICAgIC8qIDczICAqLworICAgIC5sb25nICAgVUFSVDRfSVJRSGFuZGxlciAgICAgIC8qIDc0ICAqLworICAgIC5sb25nICAgVUFSVDVfSVJRSGFuZGxlciAgICAgIC8qIDc1ICAqLworICAgIC5sb25nICAgVVNDSTBfSVJRSGFuZGxlciAgICAgIC8qIDc2ICAqLworICAgIC5sb25nICAgVVNDSTFfSVJRSGFuZGxlciAgICAgIC8qIDc3ICAqLworICAgIC5sb25nICAgQlBXTTBfSVJRSGFuZGxlciAgICAgIC8qIDc4ICAqLworICAgIC5sb25nICAgQlBXTTFfSVJRSGFuZGxlciAgICAgIC8qIDc5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDgwICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDgxICAqLworICAgIC5sb25nICAgSTJDMl9JUlFIYW5kbGVyICAgICAgIC8qIDgyICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDgzICAqLworICAgIC5sb25nICAgUUVJMF9JUlFIYW5kbGVyICAgICAgIC8qIDg0ICAqLworICAgIC5sb25nICAgUUVJMV9JUlFIYW5kbGVyICAgICAgIC8qIDg1ICAqLworICAgIC5sb25nICAgRUNBUDBfSVJRSGFuZGxlciAgICAgIC8qIDg2ICAqLworICAgIC5sb25nICAgRUNBUDFfSVJRSGFuZGxlciAgICAgIC8qIDg3ICAqLworICAgIC5sb25nICAgR1BIX0lSUUhhbmRsZXIgICAgICAgIC8qIDg4ICAqLworICAgIC5sb25nICAgRUlOVDdfSVJRSGFuZGxlciAgICAgIC8qIDg5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkwICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkxICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkyICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDkzICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk0ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk1ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk2ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDk3ICAqLworICAgIC5sb25nICAgUERNQTFfSVJRSGFuZGxlciAgICAgIC8qIDk4ICAqLworICAgIC5sb25nICAgU0NVX0lSUUhhbmRsZXIgICAgICAgIC8qIDk5ICAqLworICAgIC5sb25nICAgRGVmYXVsdF9IYW5kbGVyICAgICAgIC8qIDEwMCAqLworICAgIC5sb25nICAgVFJOR19JUlFIYW5kbGVyICAgICAgIC8qIDEwMSAqLworCisgICAgLnNpemUgICAgX19WZWN0b3JzLCAuIC0gX19WZWN0b3JzCisKKyAgICAudGV4dAorICAgIC50aHVtYgorICAgIC50aHVtYl9mdW5jCisgICAgLmFsaWduICAgIDIKKyAgICAuZ2xvYmwgICAgUmVzZXRfSGFuZGxlcgorICAgIC50eXBlICAgIFJlc2V0X0hhbmRsZXIsICVmdW5jdGlvbgorUmVzZXRfSGFuZGxlcjoKKy8qICBGaXJzdGx5IGl0IGNvcGllcyBkYXRhIGZyb20gcmVhZCBvbmx5IG1lbW9yeSB0byBSQU0uIFRoZXJlIGFyZSB0d28gc2NoZW1lcworICogIHRvIGNvcHkuIE9uZSBjYW4gY29weSBtb3JlIHRoYW4gb25lIHNlY3Rpb25zLiBBbm90aGVyIGNhbiBvbmx5IGNvcHkKKyAqICBvbmUgc2VjdGlvbi4gIFRoZSBmb3JtZXIgc2NoZW1lIG5lZWRzIG1vcmUgaW5zdHJ1Y3Rpb25zIGFuZCByZWFkLW9ubHkKKyAqICBkYXRhIHRvIGltcGxlbWVudCB0aGFuIHRoZSBsYXR0ZXIuCisgKiAgTWFjcm8gX19TVEFSVFVQX0NPUFlfTVVMVElQTEUgaXMgdXNlZCB0byBjaG9vc2UgYmV0d2VlbiB0d28gc2NoZW1lcy4gICovCisKKyNpZmRlZiBfX1NUQVJUVVBfQ09QWV9NVUxUSVBMRQorLyogIE11bHRpcGxlIHNlY3Rpb25zIHNjaGVtZS4KKyAqCisgKiAgQmV0d2VlbiBzeW1ib2wgYWRkcmVzcyBfX2NvcHlfdGFibGVfc3RhcnRfXyBhbmQgX19jb3B5X3RhYmxlX2VuZF9fLAorICogIHRoZXJlIGFyZSBhcnJheSBvZiB0cmlwbGV0cywgZWFjaCBvZiB3aGljaCBzcGVjaWZ5OgorICogICAgb2Zmc2V0IDA6IExNQSBvZiBzdGFydCBvZiBhIHNlY3Rpb24gdG8gY29weSBmcm9tCisgKiAgICBvZmZzZXQgNDogVk1BIG9mIHN0YXJ0IG9mIGEgc2VjdGlvbiB0byBjb3B5IHRvCisgKiAgICBvZmZzZXQgODogc2l6ZSBvZiB0aGUgc2VjdGlvbiB0byBjb3B5LiBNdXN0IGJlIG11bHRpcGx5IG9mIDQKKyAqCisgKiAgQWxsIGFkZHJlc3NlcyBtdXN0IGJlIGFsaWduZWQgdG8gNCBieXRlcyBib3VuZGFyeS4KKyAqLworICAgIGxkciAgICByNCwgPV9fY29weV90YWJsZV9zdGFydF9fCisgICAgbGRyICAgIHI1LCA9X19jb3B5X3RhYmxlX2VuZF9fCisKKy5MX2xvb3AwOgorICAgIGNtcCAgICByNCwgcjUKKyAgICBiZ2UgICAgLkxfbG9vcDBfZG9uZQorICAgIGxkciAgICByMSwgW3I0XQorICAgIGxkciAgICByMiwgW3I0LCAjNF0KKyAgICBsZHIgICAgcjMsIFtyNCwgIzhdCisKKy5MX2xvb3AwXzA6CisgICAgc3VicyAgICByMywgIzQKKyAgICBibHQgICAgLkxfbG9vcDBfMF9kb25lCisgICAgbGRyICAgIHIwLCBbcjEsIHIzXQorICAgIHN0ciAgICByMCwgW3IyLCByM10KKyAgICBiICAgIC5MX2xvb3AwXzAKKworLkxfbG9vcDBfMF9kb25lOgorICAgIGFkZHMgICAgcjQsICMxMgorICAgIGIgICAgLkxfbG9vcDAKKworLkxfbG9vcDBfZG9uZToKKyNlbHNlCisvKiAgU2luZ2xlIHNlY3Rpb24gc2NoZW1lLgorICoKKyAqICBUaGUgcmFuZ2VzIG9mIGNvcHkgZnJvbS90byBhcmUgc3BlY2lmaWVkIGJ5IGZvbGxvd2luZyBzeW1ib2xzCisgKiAgICBfX2V0ZXh0OiBMTUEgb2Ygc3RhcnQgb2YgdGhlIHNlY3Rpb24gdG8gY29weSBmcm9tLiBVc3VhbGx5IGVuZCBvZiB0ZXh0CisgKiAgICBfX2RhdGFfc3RhcnRfXzogVk1BIG9mIHN0YXJ0IG9mIHRoZSBzZWN0aW9uIHRvIGNvcHkgdG8KKyAqICAgIF9fZGF0YV9lbmRfXzogVk1BIG9mIGVuZCBvZiB0aGUgc2VjdGlvbiB0byBjb3B5IHRvCisgKgorICogIEFsbCBhZGRyZXNzZXMgbXVzdCBiZSBhbGlnbmVkIHRvIDQgYnl0ZXMgYm91bmRhcnkuCisgKi8KKyAgICBsZHIgICAgcjEsID1fX2V0ZXh0CisgICAgbGRyICAgIHIyLCA9X19kYXRhX3N0YXJ0X18KKyAgICBsZHIgICAgcjMsID1fX2RhdGFfZW5kX18KKworICAgIHN1YnMgICAgcjMsIHIyCisgICAgYmxlICAgIC5MX2xvb3AxX2RvbmUKKworLkxfbG9vcDE6CisgICAgc3VicyAgICByMywgIzQKKyAgICBsZHIgICAgcjAsIFtyMSxyM10KKyAgICBzdHIgICAgcjAsIFtyMixyM10KKyAgICBiZ3QgICAgLkxfbG9vcDEKKworLkxfbG9vcDFfZG9uZToKKyNlbmRpZiAvKl9fU1RBUlRVUF9DT1BZX01VTFRJUExFICovCisKKy8qICBUaGlzIHBhcnQgb2Ygd29yayB1c3VhbGx5IGlzIGRvbmUgaW4gQyBsaWJyYXJ5IHN0YXJ0dXAgY29kZS4gT3RoZXJ3aXNlLAorICogIGRlZmluZSB0aGlzIG1hY3JvIHRvIGVuYWJsZSBpdCBpbiB0aGlzIHN0YXJ0dXAuCisgKgorICogIFRoZXJlIGFyZSB0d28gc2NoZW1lcyB0b28uIE9uZSBjYW4gY2xlYXIgbXVsdGlwbGUgQlNTIHNlY3Rpb25zLiBBbm90aGVyCisgKiAgY2FuIG9ubHkgY2xlYXIgb25lIHNlY3Rpb24uIFRoZSBmb3JtZXIgaXMgbW9yZSBzaXplIGV4cGVuc2l2ZSB0aGFuIHRoZQorICogIGxhdHRlci4KKyAqCisgKiAgRGVmaW5lIG1hY3JvIF9fU1RBUlRVUF9DTEVBUl9CU1NfTVVMVElQTEUgdG8gY2hvb3NlIHRoZSBmb3JtZXIuCisgKiAgT3RoZXJ3aXNlIGVmaW5lIG1hY3JvIF9fU1RBUlRVUF9DTEVBUl9CU1MgdG8gY2hvb3NlIHRoZSBsYXRlci4KKyAqLworI2lmZGVmIF9fU1RBUlRVUF9DTEVBUl9CU1NfTVVMVElQTEUKKy8qICBNdWx0aXBsZSBzZWN0aW9ucyBzY2hlbWUuCisgKgorICogIEJldHdlZW4gc3ltYm9sIGFkZHJlc3MgX19jb3B5X3RhYmxlX3N0YXJ0X18gYW5kIF9fY29weV90YWJsZV9lbmRfXywKKyAqICB0aGVyZSBhcmUgYXJyYXkgb2YgdHVwbGVzIHNwZWNpZnlpbmc6CisgKiAgICBvZmZzZXQgMDogU3RhcnQgb2YgYSBCU1Mgc2VjdGlvbgorICogICAgb2Zmc2V0IDQ6IFNpemUgb2YgdGhpcyBCU1Mgc2VjdGlvbi4gTXVzdCBiZSBtdWx0aXBseSBvZiA0CisgKi8KKyAgICBsZHIgICAgcjMsID1fX3plcm9fdGFibGVfc3RhcnRfXworICAgIGxkciAgICByNCwgPV9femVyb190YWJsZV9lbmRfXworCisuTF9sb29wMjoKKyAgICBjbXAgICAgcjMsIHI0CisgICAgYmdlICAgIC5MX2xvb3AyX2RvbmUKKyAgICBsZHIgICAgcjEsIFtyM10KKyAgICBsZHIgICAgcjIsIFtyMywgIzRdCisgICAgbW92cyAgICByMCwgMAorCisuTF9sb29wMl8wOgorICAgIHN1YnMgICAgcjIsICM0CisgICAgYmx0ICAgIC5MX2xvb3AyXzBfZG9uZQorICAgIHN0ciAgICByMCwgW3IxLCByMl0KKyAgICBiICAgIC5MX2xvb3AyXzAKKy5MX2xvb3AyXzBfZG9uZToKKworICAgIGFkZHMgICAgcjMsICM4CisgICAgYiAgICAuTF9sb29wMgorLkxfbG9vcDJfZG9uZToKKyNlbGlmIGRlZmluZWQgKF9fU1RBUlRVUF9DTEVBUl9CU1MpCisvKiAgU2luZ2xlIEJTUyBzZWN0aW9uIHNjaGVtZS4KKyAqCisgKiAgVGhlIEJTUyBzZWN0aW9uIGlzIHNwZWNpZmllZCBieSBmb2xsb3dpbmcgc3ltYm9scworICogICAgX19ic3Nfc3RhcnRfXzogc3RhcnQgb2YgdGhlIEJTUyBzZWN0aW9uLgorICogICAgX19ic3NfZW5kX186IGVuZCBvZiB0aGUgQlNTIHNlY3Rpb24uCisgKgorICogIEJvdGggYWRkcmVzc2VzIG11c3QgYmUgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5LgorICovCisgICAgbGRyICAgIHIxLCA9X19ic3Nfc3RhcnRfXworICAgIGxkciAgICByMiwgPV9fYnNzX2VuZF9fCisKKyAgICBtb3ZzICAgIHIwLCAwCisKKyAgICBzdWJzICAgIHIyLCByMQorICAgIGJsZSAgICAuTF9sb29wM19kb25lCisKKy5MX2xvb3AzOgorICAgIHN1YnMgICAgcjIsICM0CisgICAgc3RyICAgIHIwLCBbcjEsIHIyXQorICAgIGJndCAgICAuTF9sb29wMworLkxfbG9vcDNfZG9uZToKKyNlbmRpZiAvKiBfX1NUQVJUVVBfQ0xFQVJfQlNTX01VTFRJUExFIHx8IF9fU1RBUlRVUF9DTEVBUl9CU1MgKi8KKworICAgIGNwc2lkICAgaSAgICAgICAgICAgICAgLyogRGlzYWJsZSBJUlFzICovCisgICAgYmwgICAgU3lzdGVtSW5pdAorCisgICAgbXJzICAgICByMCwgY29udHJvbCAgICAvKiBHZXQgY29udHJvbCB2YWx1ZSAqLworICAgIG1vdnMgICAgcjEsICMyCisgICAgb3JycyAgICByMCwgcjAsIHIxICAgICAvKiBTZWxlY3Qgc3dpdGNoIHRvIFBTUCAqLworICAgIG1zciAgICAgY29udHJvbCwgcjAKKyAgICBsZHIgICAgIHIwLCA9SW1hZ2UkJEFSTV9MSUJfU1RBQ0skJFpJJCRMaW1pdAorICAgIG1zciAgICAgcHNwLCByMAorCisjaWZuZGVmIF9fU1RBUlQKKyNkZWZpbmUgX19TVEFSVCBfc3RhcnQKKyNlbmRpZgorICAgIGJsICAgIF9fU1RBUlQKKworICAgIC5wb29sCisgICAgLnNpemUgICAgUmVzZXRfSGFuZGxlciwgLiAtIFJlc2V0X0hhbmRsZXIKKworICAgIC5hbGlnbiAgMgorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgICBEZWZhdWx0X0hhbmRsZXIKKyAgICAudHlwZSAgIERlZmF1bHRfSGFuZGxlciwgJSBmdW5jdGlvbgorCitEZWZhdWx0X0hhbmRsZXI6CisgICAgYiAgIC4KKyAgICAuc2l6ZSAgIERlZmF1bHRfSGFuZGxlciwgLiAtIERlZmF1bHRfSGFuZGxlcgorCisKKy8qICBNYWNybyB0byBkZWZpbmUgZGVmYXVsdCBoYW5kbGVycy4gKi8KKyAgICAubWFjcm8gICAgZGVmX2lycV9oYW5kbGVyICAgIGhhbmRsZXJfbmFtZQorICAgIC5hbGlnbiAgICAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayAgICBcaGFuZGxlcl9uYW1lCisgICAgXGhhbmRsZXJfbmFtZToKKyAgICBiICAgICAgICBcaGFuZGxlcl9uYW1lCisgICAgLmVuZG0KKworICAgIGRlZl9pcnFfaGFuZGxlciBOTUlfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBIYXJkRmF1bHRfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTVkNfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBQZW5kU1ZfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTeXNUaWNrX0hhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBCT0RfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBJUkNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBQV1JXVV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNSQU1fSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBDTEtGQUlMX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBSVENfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBUQU1QRVJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBXRFRfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBXV0RUX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFSU5UNF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVJTlQ1X0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BBX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BCX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BDX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BEX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BFX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BGX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUVNQSTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTUEkwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlJBS0UwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTBfUDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMF9QMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00wX1AyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlJBS0UxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRVBXTTFfUDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFUFdNMV9QMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVQV00xX1AyX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVEZNX1RJTUVSMF9JUlFfSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBUTVIxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVElNRVIxX0hhbmRsZXIgLypKdXN0IGEgaGFuZGxlciB0byB1c2UgVE1SMiBoYXJkd2FyZSAqLworICAgIGRlZl9pcnFfaGFuZGxlciBUTVIzX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEkyQzBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBJMkMxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgUERNQTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBEQUNfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQURDMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVBREMxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQUNNUDAxX0lSUUhhbmRsZXIKKworICAgIGRlZl9pcnFfaGFuZGxlciBFQURDMl9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVBREMzX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVUFSVDJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUM19JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1BJMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNQSTJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0JEX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNCSF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVTQk9UR19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIENBTjBfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFNDMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNDMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFNDMl9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgU1BJM19JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgU0RIMF9JUlFIYW5kbGVyCisKKworCisgICAgZGVmX2lycV9oYW5kbGVyIEkyUzBfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIE9QQTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBDUlBUX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BHX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDZfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVQVJUNF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFVBUlQ1X0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgVVNDSTBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBVU0NJMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEJQV00wX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgQlBXTTFfSVJRSGFuZGxlcgorCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgSTJDMl9JUlFIYW5kbGVyCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgUUVJMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIFFFSTFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBFQ0FQMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyIEVDQVAxX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgR1BIX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgRUlOVDdfSVJRSGFuZGxlcgorCisKKworCisKKworCisKKyAgICBkZWZfaXJxX2hhbmRsZXIgUERNQTFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciBTQ1VfSVJRSGFuZGxlcgorCisgICAgZGVmX2lycV9oYW5kbGVyIFRSTkdfSVJRSGFuZGxlcgorCisgICAgLmVuZApkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL20yMzUxX2JsMi5pY2YgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvbTIzNTFfYmwyLmljZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmUxNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL20yMzUxX2JsMi5pY2YKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBBcm0gTGltaXRlZAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqCisgKiBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiAuLi9hcm1jbGFuZy9tcHMyX2FuNTE5X2JsMi5zY3QKKyAqLworCisvKiBMaW5rZXIgc2NyaXB0IHRvIGNvbmZpZ3VyZSBtZW1vcnkgcmVnaW9ucy4gKi8KKy8qIFRoaXMgZmlsZSB3aWxsIGJlIHJ1biB0cm91Z2ggdGhlIHByZS1wcm9jZXNzb3IuICovCisKKyNpbmNsdWRlICJyZWdpb25fZGVmcy5oIgorCitkZWZpbmUgbWVtb3J5IG1lbSB3aXRoIHNpemUgPSA0RzsKKworZGVmaW5lIHJlZ2lvbiBCTDJfQ09ERV9yZWdpb24gID0gICBtZW06W2Zyb20gQkwyX0NPREVfU1RBUlQgc2l6ZSBCTDJfQ09ERV9TSVpFXTsKKworZGVmaW5lIHJlZ2lvbiBCTDJfUkFNX3JlZ2lvbiAgID0gIG1lbTpbZnJvbSBCTDJfREFUQV9TVEFSVCBzaXplIEJMMl9EQVRBX1NJWkVdOworCitkbyBub3QgaW5pdGlhbGl6ZSAgeyBzZWN0aW9uIC5ub2luaXQgfTsKK2luaXRpYWxpemUgYnkgY29weSB7IHJlYWR3cml0ZSB9OworCitkZWZpbmUgYmxvY2sgRVJfQ09ERSAgICAgICAgd2l0aCBmaXhlZCBvcmRlciwgYWxpZ25tZW50ID0gOCB7CisgICAgICAgc2VjdGlvbiAuaW50dmVjLAorICAgICAgIHJlYWRvbmx5CisgICAgICAgfTsKKworZGVmaW5lIGJsb2NrIFRGTV9TSEFSRURfREFUQSB3aXRoIGFsaWdubWVudCA9IDMyLCBzaXplID0gQk9PVF9URk1fU0hBUkVEX0RBVEFfU0laRSB7IH07CitrZWVwIHtibG9jayBURk1fU0hBUkVEX0RBVEF9OworCitkZWZpbmUgYmxvY2sgRVJfREFUQSAgICAgICAgd2l0aCBtYXhpbXVtIHNpemUgPSBCTDJfREFUQV9TSVpFLCBhbGlnbm1lbnQgPSAzMiB7cmVhZHdyaXRlfTsKKyAgICAvKiBNU1AgKi8KKworZGVmaW5lIGJsb2NrIEFSTV9MSUJfU1RBQ0sgICAgICB3aXRoIGFsaWdubWVudCA9IDMyLCBzaXplID0gQkwyX01TUF9TVEFDS19TSVpFIHsgfTsKK2RlZmluZSBibG9jayBIRUFQICAgICAgICAgICAgICAgd2l0aCBhbGlnbm1lbnQgPSA4LCBzaXplID0gQkwyX0hFQVBfU0laRSB7IH07CitkZWZpbmUgYmxvY2sgQVJNX0xJQl9IRUFQICAgICAgIHdpdGggYWxpZ25tZW50ID0gOCwgc2l6ZSA9IEJMMl9IRUFQX1NJWkUgeyB9OworZGVmaW5lIG92ZXJsYXkgSEVBUF9PVkwgICAgICAgICB7YmxvY2sgSEVBUH07CitkZWZpbmUgb3ZlcmxheSBIRUFQX09WTCAgICAgICAgIHtibG9jayBBUk1fTElCX0hFQVB9OworCitpZiAoaXNkZWZpbmVkc3ltYm9sKF9fVVNFX0RMSUJfUEVSVEhSRUFEKSkKK3sKKyAgLy8gUmVxdWlyZWQgaW4gYSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbgorICBpbml0aWFsaXplIGJ5IGNvcHkgd2l0aCBwYWNraW5nID0gbm9uZSB7IHNlY3Rpb24gX19ETElCX1BFUlRIUkVBRCB9OworfQorCitkZWZpbmUgYmxvY2sgTFJfQ09ERSB3aXRoIGZpeGVkIG9yZGVyIHtibG9jayBFUl9DT0RFfTsKK2RlZmluZSBibG9jayBEQVRBIHdpdGggZml4ZWQgb3JkZXIge2Jsb2NrIFRGTV9TSEFSRURfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrIEVSX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayBBUk1fTElCX1NUQUNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheSBIRUFQX09WTH07CisKK3BsYWNlIGluIEJMMl9DT0RFX3JlZ2lvbiAgICAgICAgIHsgYmxvY2sgTFJfQ09ERSB9OworcGxhY2UgaW4gQkwyX1JBTV9yZWdpb24gICAgICAgICAgeyBibG9jayBEQVRBfTsKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2lhci9tMjM1MV9ucy5pY2YgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvbTIzNTFfbnMuaWNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Mzg4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvbTIzNTFfbnMuaWNmCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgQXJtIExpbWl0ZWQKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKgorICogVGhpcyBmaWxlIGlzIGRlcml2YXRpdmUgb2YgLi4vYXJtY2xhbmcvbXBzMl9hbjUyMV9ucy5zY3QKKyAqLworCisvKiBMaW5rZXIgc2NyaXB0IHRvIGNvbmZpZ3VyZSBtZW1vcnkgcmVnaW9ucy4gKi8KKy8qIFRoaXMgZmlsZSB3aWxsIGJlIHJ1biB0cm91Z2ggdGhlIHByZS1wcm9jZXNzb3IuICovCisKKyNpbmNsdWRlICJyZWdpb25fZGVmcy5oIgorCitkZWZpbmUgbWVtb3J5IG1lbSB3aXRoIHNpemUgPSA0RzsKKworZGVmaW5lIHJlZ2lvbiBOU19DT0RFX3JlZ2lvbiA9ICAgbWVtOltmcm9tIE5TX0NPREVfU1RBUlQgc2l6ZSBOU19DT0RFX1NJWkVdOworCitkZWZpbmUgcmVnaW9uIE5TX1JBTV9yZWdpb24gID0gIG1lbTpbZnJvbSBOU19EQVRBX1NUQVJUIHNpemUgTlNfREFUQV9TSVpFXTsKKworZGVmaW5lIGJsb2NrIEFSTV9MSUJfU1RBQ0tfTVNQICB3aXRoIGFsaWdubWVudCA9IDgsIHNpemUgPSBOU19NU1BfU1RBQ0tfU0laRSB7IH07CitkZWZpbmUgYmxvY2sgQVJNX0xJQl9TVEFDSyAgICAgIHdpdGggYWxpZ25tZW50ID0gOCwgc2l6ZSA9IE5TX1BTUF9TVEFDS19TSVpFIHsgfTsKK2RlZmluZSBibG9jayBIRUFQICAgICAgICAgICAgICAgd2l0aCBhbGlnbm1lbnQgPSA4LCBzaXplID0gTlNfSEVBUF9TSVpFIHsgfTsKK2RlZmluZSBibG9jayBBUk1fTElCX0hFQVAgICAgICAgd2l0aCBhbGlnbm1lbnQgPSA4LCBzaXplID0gTlNfSEVBUF9TSVpFIHsgfTsKK2RlZmluZSBvdmVybGF5IEhFQVBfT1ZMICAgICAgICAge2Jsb2NrIEhFQVB9OworZGVmaW5lIG92ZXJsYXkgSEVBUF9PVkwgICAgICAgICB7YmxvY2sgQVJNX0xJQl9IRUFQfTsKKworZGVmaW5lIGJsb2NrIEVSX0NPREUgICAgICAgICAgICB3aXRoIGZpeGVkIG9yZGVyLCBhbGlnbm1lbnQgPSA4IHsKKyAgICAgICBzZWN0aW9uIC5pbnR2ZWMsCisgICAgICAgcmVhZG9ubHl9OworCitkZWZpbmUgYmxvY2sgRVJfREFUQSB3aXRoIGFsaWdubWVudCA9IDgge3JlYWR3cml0ZX07CisKK2RvIG5vdCBpbml0aWFsaXplICB7IHNlY3Rpb24gLm5vaW5pdCB9OworaW5pdGlhbGl6ZSBieSBjb3B5IHsgcmVhZHdyaXRlIH07CitpZiAoaXNkZWZpbmVkc3ltYm9sKF9fVVNFX0RMSUJfUEVSVEhSRUFEKSkKK3sKKyAgLy8gUmVxdWlyZWQgaW4gYSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbgorICBpbml0aWFsaXplIGJ5IGNvcHkgd2l0aCBwYWNraW5nID0gbm9uZSB7IHNlY3Rpb24gX19ETElCX1BFUlRIUkVBRCB9OworfQorCitkZWZpbmUgYmxvY2sgTFJfQ09ERSB3aXRoIGZpeGVkIG9yZGVyIHtibG9jayBFUl9DT0RFfTsKK2RlZmluZSBibG9jayBEQVRBIHdpdGggZml4ZWQgb3JkZXIge2Jsb2NrIEVSX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayBBUk1fTElCX1NUQUNLX01TUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrIEFSTV9MSUJfU1RBQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5IEhFQVBfT1ZMfTsKKworcGxhY2UgaW4gTlNfQ09ERV9yZWdpb24gIHsgYmxvY2sgTFJfQ09ERSB9OworcGxhY2UgaW4gTlNfUkFNX3JlZ2lvbiAgIHsgYmxvY2sgREFUQSB9OwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLnMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvc3RhcnR1cF9jbXNka19tMjM1MV9ibDIucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDRkZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL2RldmljZS9zb3VyY2UvaWFyL3N0YXJ0dXBfY21zZGtfbTIzNTFfYmwyLnMKQEAgLTAsMCArMSw0MTQgQEAKKzsvKgorOyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIEFSTSBMaW1pdGVkCis7ICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorOyAqCis7ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOyAqCis7ICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOyAqCis7ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorOyAqLworOworOyBUaGlzIGZpbGUgaXMgZGVyaXZhdGl2ZSBvZiAuLi9hcm1jbGFuZy9zdGFydHVwX2Ntc2RrX21wczJfYW41MTlfYmwyLnMKKworOy8qCis7Ly8tLS0tLS0tLSA8PDwgVXNlIENvbmZpZ3VyYXRpb24gV2l6YXJkIGluIENvbnRleHQgTWVudSA+Pj4gLS0tLS0tLS0tLS0tLS0tLS0tCis7Ki8KKworCis7IDxoPiBTdGFjayBDb25maWd1cmF0aW9uCis7ICAgPG8+IFN0YWNrIFNpemUgKGluIEJ5dGVzKSA8MHgwLTB4RkZGRkZGRkY6OD4KKzsgPC9oPgorCisgICAgICAgICAgICAgICAgTU9EVUxFICAgP2NzdGFydHVwCisKKyAgICAgICAgICAgICAgICA7OyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHNlY3Rpb25zLgorICAgICAgICAgICAgICAgIFNFQ1RJT04gIEFSTV9MSUJfU1RBQ0s6REFUQTpOT1JPT1QoMykKKworICAgICAgICAgICAgICAgIFNFQ1RJT04gIC5pbnR2ZWM6Q09ERTpOT1JPT1QoMikKKworICAgICAgICAgICAgICAgIEVYVEVSTiAgIF9faWFyX3Byb2dyYW1fc3RhcnQKKyAgICAgICAgICAgICAgICBFWFRFUk4gICBTeXN0ZW1Jbml0CisgICAgICAgICAgICAgICAgRVhURVJOICAgU0NVX0lSUUhhbmRsZXIKKyAgICAgICAgICAgICAgICBQVUJMSUMgICBfX3ZlY3Rvcl90YWJsZQorICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fVmVjdG9ycworICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fVmVjdG9yc19FbmQKKyAgICAgICAgICAgICAgICBQVUJMSUMgICBfX1ZlY3RvcnNfU2l6ZQorICAgICAgICAgICAgICAgIERBVEEKKworCitfX3ZlY3Rvcl90YWJsZSAgRENEICAgICBzZmUoQVJNX0xJQl9TVEFDSykgICAgICAgIDsgVG9wIG9mIFN0YWNrCisgICAgICAgICAgICAgICAgRENEICAgICBSZXNldF9IYW5kbGVyICAgICAgICAgICAgIDsgUmVzZXQgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgTk1JX0hhbmRsZXIgICAgICAgICAgICAgICA7IE5NSSBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBIYXJkRmF1bHRfSGFuZGxlciAgICAgICAgIDsgSGFyZCBGYXVsdCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNWQ19IYW5kbGVyICAgICAgICAgICAgICAgOyBTVkNhbGwgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBlbmRTVl9IYW5kbGVyICAgICAgICAgICAgOyBQZW5kU1YgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgU3lzVGlja19IYW5kbGVyICAgICAgICAgICA7IFN5c1RpY2sgSGFuZGxlcgorCisgICAgOyBFeHRlcm5hbCBJbnRlcnJ1cHRzCisgICAgRENEICAgICBCT0RfSVJRSGFuZGxlcgkJICAgICAgIDsgMAorICAgIERDRCAgICAgSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCisgICAgRENEICAgICBQV1JXVV9JUlFIYW5kbGVyICAgICAgICAgICA7IDIKKyAgICBEQ0QgICAgIFNSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworICAgIERDRCAgICAgQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0CisgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDUKKyAgICBEQ0QgICAgIFJUQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNgorICAgIERDRCAgICAgVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CisgICAgRENEICAgICBXRFRfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDgKKyAgICBEQ0QgICAgIFdXRFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOQorICAgIERDRCAgICAgRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorICAgIERDRCAgICAgRUlOVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMQorICAgIERDRCAgICAgRUlOVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMgorICAgIERDRCAgICAgRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworICAgIERDRCAgICAgRUlOVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNAorICAgIERDRCAgICAgRUlOVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyAxNQorICAgIERDRCAgICAgR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorICAgIERDRCAgICAgR1BCX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNworICAgIERDRCAgICAgR1BDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOAorICAgIERDRCAgICAgR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorICAgIERDRCAgICAgR1BFX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMAorICAgIERDRCAgICAgR1BGX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAyMQorICAgIERDRCAgICAgUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorICAgIERDRCAgICAgU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAyMworICAgIERDRCAgICAgQlJBS0UwX0lSUUhhbmRsZXIgICAgICAgICAgOyAyNAorICAgIERDRCAgICAgRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorICAgIERDRCAgICAgRVBXTTBfUDFfSVJRSGFuZGxlciAgICAgICAgOyAyNgorICAgIERDRCAgICAgRVBXTTBfUDJfSVJRSGFuZGxlciAgICAgICAgOyAyNworICAgIERDRCAgICAgQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorICAgIERDRCAgICAgRVBXTTFfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyOQorICAgIERDRCAgICAgRVBXTTFfUDFfSVJRSGFuZGxlciAgICAgICAgOyAzMAorICAgIERDRCAgICAgRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorICAgIERDRCAgICAgVE1SMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMgorICAgIERDRCAgICAgVE1SMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzMworICAgIERDRCAgICAgVE1SMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNAorICAgIERDRCAgICAgVE1SM19JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNQorICAgIERDRCAgICAgVUFSVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNgorICAgIERDRCAgICAgVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworICAgIERDRCAgICAgSTJDMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOAorICAgIERDRCAgICAgSTJDMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzOQorICAgIERDRCAgICAgUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorICAgIERDRCAgICAgREFDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA0MQorICAgIERDRCAgICAgRUFEQzBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MgorICAgIERDRCAgICAgRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworICAgIERDRCAgICAgQUNNUDAxX0lSUUhhbmRsZXIgICAgICAgICAgOyA0NAorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA0NQorICAgIERDRCAgICAgRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NgorICAgIERDRCAgICAgRUFEQzNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NworICAgIERDRCAgICAgVUFSVDJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OAorICAgIERDRCAgICAgVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OQorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA1MAorICAgIERDRCAgICAgU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorICAgIERDRCAgICAgU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorICAgIERDRCAgICAgVVNCRF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MworICAgIERDRCAgICAgVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorICAgIERDRCAgICAgVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorICAgIERDRCAgICAgQ0FOMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NgorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA1NworICAgIERDRCAgICAgU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorICAgIERDRCAgICAgU0MxX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OQorICAgIERDRCAgICAgU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2MQorICAgIERDRCAgICAgU1BJM19JUlFIYW5kbGVyICAgICAgICAgICAgOyA2MgorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2MworICAgIERDRCAgICAgU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2NQorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2NgorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2NworICAgIERDRCAgICAgSTJTMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2OAorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA2OQorICAgIERDRCAgICAgT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MAorICAgIERDRCAgICAgQ1JQVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MQorICAgIERDRCAgICAgR1BHX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA3MgorICAgIERDRCAgICAgRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICAgOyA3MworICAgIERDRCAgICAgVUFSVDRfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NAorICAgIERDRCAgICAgVUFSVDVfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NQorICAgIERDRCAgICAgVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NgorICAgIERDRCAgICAgVVNDSTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NworICAgIERDRCAgICAgQlBXTTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OAorICAgIERDRCAgICAgQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OQorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA4MAorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA4MQorICAgIERDRCAgICAgSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA4MworICAgIERDRCAgICAgUUVJMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NAorICAgIERDRCAgICAgUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NQorICAgIERDRCAgICAgRUNBUDBfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NgorICAgIERDRCAgICAgRUNBUDFfSVJRSGFuZGxlciAgICAgICAgICAgOyA4NworICAgIERDRCAgICAgR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4OAorICAgIERDRCAgICAgRUlOVDdfSVJRSGFuZGxlciAgICAgICAgICAgOyA4OQorICAgIERDRCAgICAgU0RIMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5MAorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5MQorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5MgorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5MworICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5NAorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5NQorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5NgorICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA5NworICAgIERDRCAgICAgUERNQTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA5OAorICAgIERDRCAgICAgU0NVX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA5OQorICAgIERDRCAgICAgTENEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxMDAKKyAgICBEQ0QgICAgIFRSTkdfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMTAxCitfX1ZlY3RvcnNfRW5kCisKK19fVmVjdG9ycyAgICAgICBFUVUgICAgIF9fdmVjdG9yX3RhYmxlCitfX1ZlY3RvcnNfU2l6ZSAgRVFVICAgICBfX1ZlY3RvcnNfRW5kIC0gX19WZWN0b3JzCisKKzsgUmVzZXQgSGFuZGxlcgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFJlc2V0X0hhbmRsZXIKKyAgICAgICAgICAgICAgICBTRUNUSU9OICAudGV4dDpDT0RFOlJFT1JERVI6Tk9ST09UKDIpCitSZXNldF9IYW5kbGVyCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPVN5c3RlbUluaXQKKyAgICAgICAgICAgICAgICBCTFggICAgIFIwCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPV9faWFyX3Byb2dyYW1fc3RhcnQKKyAgICAgICAgICAgICAgICBCWCAgICAgIFIwCisKKzsgRHVtbXkgRXhjZXB0aW9uIEhhbmRsZXJzIChpbmZpbml0ZSBsb29wcyB3aGljaCBjYW4gYmUgbW9kaWZpZWQpCitEZWZhdWx0X0hhbmRsZXIyIE1BQ1JPIGhhbmRsZXJfbmFtZQorICAgICAgICAgICAgICAgIFBVQldFQUsgIGhhbmRsZXJfbmFtZQoraGFuZGxlcl9uYW1lCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5ETQorCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBOTUlfSGFuZGxlcgorICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgSGFyZEZhdWx0X0hhbmRsZXIKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIE1lbU1hbmFnZV9IYW5kbGVyCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBTVkNfSGFuZGxlcgorICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgUGVuZFNWX0hhbmRsZXIKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIFN5c1RpY2tfSGFuZGxlcgorCisgICAgICAgICAgUFVCV0VBSyAgQk9EX0lSUUhhbmRsZXIJICAgICAgOyAwCisgICAgICAgICAgUFVCV0VBSyAgSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCisgICAgICAgICAgUFVCV0VBSyAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCisgICAgICAgICAgUFVCV0VBSyAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCisgICAgICAgICAgUFVCV0VBSyAgQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0CisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1CisgICAgICAgICAgUFVCV0VBSyAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CisgICAgICAgICAgUFVCV0VBSyAgVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CisgICAgICAgICAgUFVCV0VBSyAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CisgICAgICAgICAgUFVCV0VBSyAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CisgICAgICAgICAgUFVCV0VBSyAgRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorICAgICAgICAgIFBVQldFQUsgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKKyAgICAgICAgICBQVUJXRUFLICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCisgICAgICAgICAgUFVCV0VBSyAgRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworICAgICAgICAgIFBVQldFQUsgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKKyAgICAgICAgICBQVUJXRUFLICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CisgICAgICAgICAgUFVCV0VBSyAgR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorICAgICAgICAgIFBVQldFQUsgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKKyAgICAgICAgICBQVUJXRUFLICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CisgICAgICAgICAgUFVCV0VBSyAgR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorICAgICAgICAgIFBVQldFQUsgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKKyAgICAgICAgICBQVUJXRUFLICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCisgICAgICAgICAgUFVCV0VBSyAgUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorICAgICAgICAgIFBVQldFQUsgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKKyAgICAgICAgICBQVUJXRUFLICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CisgICAgICAgICAgUFVCV0VBSyAgRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorICAgICAgICAgIFBVQldFQUsgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKKyAgICAgICAgICBQVUJXRUFLICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CisgICAgICAgICAgUFVCV0VBSyAgQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorICAgICAgICAgIFBVQldFQUsgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKKyAgICAgICAgICBQVUJXRUFLICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCisgICAgICAgICAgUFVCV0VBSyAgRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorICAgICAgICAgIFBVQldFQUsgIFRNUjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzIKKyAgICAgICAgICBQVUJXRUFLICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCisgICAgICAgICAgUFVCV0VBSyAgVE1SMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNAorICAgICAgICAgIFBVQldFQUsgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKKyAgICAgICAgICBQVUJXRUFLICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CisgICAgICAgICAgUFVCV0VBSyAgVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworICAgICAgICAgIFBVQldFQUsgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKKyAgICAgICAgICBQVUJXRUFLICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CisgICAgICAgICAgUFVCV0VBSyAgUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorICAgICAgICAgIFBVQldFQUsgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKKyAgICAgICAgICBQVUJXRUFLICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCisgICAgICAgICAgUFVCV0VBSyAgRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworICAgICAgICAgIFBVQldFQUsgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDQ1CisgICAgICAgICAgUFVCV0VBSyAgRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NgorICAgICAgICAgIFBVQldFQUsgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKKyAgICAgICAgICBQVUJXRUFLICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CisgICAgICAgICAgUFVCV0VBSyAgVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OQorICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNTAKKyAgICAgICAgICBQVUJXRUFLICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCisgICAgICAgICAgUFVCV0VBSyAgU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorICAgICAgICAgIFBVQldFQUsgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKKyAgICAgICAgICBQVUJXRUFLICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CisgICAgICAgICAgUFVCV0VBSyAgVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorICAgICAgICAgIFBVQldFQUsgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKKyAgICAgICAgICBQVUJXRUFLICBDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU3CisgICAgICAgICAgUFVCV0VBSyAgU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorICAgICAgICAgIFBVQldFQUsgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKKyAgICAgICAgICBQVUJXRUFLICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCisgICAgICAgICAgUFVCV0VBSyAgU0MzX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MQorICAgICAgICAgIFBVQldFQUsgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDYzCisgICAgICAgICAgUFVCV0VBSyAgU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjUKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY2CisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NworICAgICAgICAgIFBVQldFQUsgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY5CisgICAgICAgICAgUFVCV0VBSyAgT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MAorICAgICAgICAgIFBVQldFQUsgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKKyAgICAgICAgICBQVUJXRUFLICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCisgICAgICAgICAgUFVCV0VBSyAgRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICAgOyA3MworICAgICAgICAgIFBVQldFQUsgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKKyAgICAgICAgICBQVUJXRUFLICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CisgICAgICAgICAgUFVCV0VBSyAgVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NgorICAgICAgICAgIFBVQldFQUsgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKKyAgICAgICAgICBQVUJXRUFLICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CisgICAgICAgICAgUFVCV0VBSyAgQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OQorICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODAKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgxCisgICAgICAgICAgUFVCV0VBSyAgSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODMKKyAgICAgICAgICBQVUJXRUFLICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CisgICAgICAgICAgUFVCV0VBSyAgUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NQorICAgICAgICAgIFBVQldFQUsgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKKyAgICAgICAgICBQVUJXRUFLICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CisgICAgICAgICAgUFVCV0VBSyAgR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4OAorICAgICAgICAgIFBVQldFQUsgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKKyAgICAgICAgICBQVUJXRUFLICBTREgxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkwCisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MQorICAgICAgICAgO1BVQldFQUsgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTIKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDkzCisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NAorICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTUKKyAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk2CisgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NworICAgICAgICAgIFBVQldFQUsgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKKyAgICAgICAgIDtQVUJXRUFLICBTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDk5CisgICAgICAgICAgUFVCV0VBSyAgTENEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxMDAKKyAgICAgICAgICBQVUJXRUFLICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorCisKKworICAgICAgICAgIFBVQldFQUsJREVGQVVMVF9JUlFIYW5kbGVyCisKKzsgQ29yZSBJb1QgSW50ZXJydXB0cworRGVmYXVsdF9IYW5kbGVyCisKK05NSV9IYW5kbGVyCitTVkNfSGFuZGxlcgorUGVuZFNWX0hhbmRsZXIKK1N5c1RpY2tfSGFuZGxlcgorCitCT0RfSVJRSGFuZGxlcgkJICAgICAgIDsgMAorSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCitQV1JXVV9JUlFIYW5kbGVyICAgICAgICAgICA7IDIKK1NSQU1fSVJRSGFuZGxlciAgICAgICAgICAgIDsgMworQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1CitSVENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYKK1RBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CitXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkKK0VJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKK0VJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKK0VJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTIKK0VJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKK0VJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKK0VJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTUKK0dQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKK0dQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKK0dQQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTgKK0dQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKK0dQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKK0dQRl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjEKK1FTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKK1NQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKK0JSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgIDsgMjQKK0VQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKK0VQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKK0VQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMjcKK0JSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKK0VQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKK0VQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMzAKK0VQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKK1RNUjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzIKK1RNUjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzMKK1RNUjJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzQKK1RNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKK1VBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzYKK1VBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKK0kyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKK0kyQzFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzkKK1BETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKK0RBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKK0VBREMwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDIKK0VBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKK0FDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDQ1CitFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CitFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CitVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CitVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1MAorU1BJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MQorU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorVVNCRF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MworVVNCSF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NAorVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorQ0FOMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NgorQ0FOMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1NworU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorU0MxX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OQorU0MyX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MAorU0MzX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MQorU1BJM19JUlFIYW5kbGVyICAgICAgICAgICAgOyA2MgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjMKK1NESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY1Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NgorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjcKK0kyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY5CitPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCitDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCitHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCitFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCitVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CitVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CitVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CitVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CitCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CitCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA4MAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODEKK0kyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgzCitRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CitRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CitFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CitFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CitHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CitFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CitTREgxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MQorO1VTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTIKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDkzCis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NAorOzAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTUKKzswICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NworUERNQTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA5OAorO1NDVV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOTkKK0xDRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTAwCitUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorREVGQVVMVF9JUlFIYW5kbGVyCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisKKyAgICAgICAgICAgICAgICBFTkQKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2lhci9zdGFydHVwX2Ntc2RrX20yMzUxX25zLnMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvc3RhcnR1cF9jbXNka19tMjM1MV9ucy5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OTI1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvc3RhcnR1cF9jbXNka19tMjM1MV9ucy5zCkBAIC0wLDAgKzEsNDA4IEBACis7LyoKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBBUk0gTGltaXRlZAorOyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKzsgKgorOyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworOyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKzsgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKzsgKgorOyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKzsgKgorOyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKzsgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorOyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorOyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKzsgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKzsgKi8KKworOy8qCis7Ly8tLS0tLS0tLSA8PDwgVXNlIENvbmZpZ3VyYXRpb24gV2l6YXJkIGluIENvbnRleHQgTWVudSA+Pj4gLS0tLS0tLS0tLS0tLS0tLS0tCis7Ki8KKworCis7IDxoPiBTdGFjayBDb25maWd1cmF0aW9uCis7ICAgPG8+IFN0YWNrIFNpemUgKGluIEJ5dGVzKSA8MHgwLTB4RkZGRkZGRkY6OD4KKzsgPC9oPgorCisgICAgICAgICAgICAgICAgTU9EVUxFICAgP2NzdGFydHVwCisKKyAgICAgICAgICAgICAgICA7OyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHNlY3Rpb25zLgorICAgICAgICAgICAgICAgIFNFQ1RJT04gIEFSTV9MSUJfU1RBQ0tfTVNQOkRBVEE6Tk9ST09UKDMpCisgICAgICAgICAgICAgICAgU0VDVElPTiAgQVJNX0xJQl9TVEFDSzpEQVRBOk5PUk9PVCgzKQorCisgICAgICAgICAgICAgICAgU0VDVElPTiAgLmludHZlYzpDT0RFOk5PUk9PVCgyKQorCisgICAgICAgICAgICAgICAgRVhURVJOICAgX19pYXJfcHJvZ3JhbV9zdGFydAorICAgICAgICAgICAgICAgIEVYVEVSTiAgIFN5c3RlbUluaXQKKyAgICAgICAgICAgICAgICBFWFRFUk4gICBTQ1VfSVJRSGFuZGxlcgorICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fdmVjdG9yX3RhYmxlCisgICAgICAgICAgICAgICAgUFVCTElDICAgX19WZWN0b3JzCisgICAgICAgICAgICAgICAgUFVCTElDICAgX19WZWN0b3JzX0VuZAorICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fVmVjdG9yc19TaXplCisKKyAgICAgICAgICAgICAgICBEQVRBCisKK19fdmVjdG9yX3RhYmxlICBEQ0QgICAgIHNmZShBUk1fTElCX1NUQUNLX01TUCkgICAgOyBUb3Agb2YgU3RhY2sKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFJlc2V0X0hhbmRsZXIgICAgICAgICAgICAgOyBSZXNldCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBOTUlfSGFuZGxlciAgICAgICAgICAgICAgIDsgTk1JIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgOyBIYXJkIEZhdWx0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgU1ZDX0hhbmRsZXIgICAgICAgICAgICAgICA7IFNWQ2FsbCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgUGVuZFNWX0hhbmRsZXIgICAgICAgICAgICA7IFBlbmRTViBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBTeXNUaWNrX0hhbmRsZXIgICAgICAgICAgIDsgU3lzVGljayBIYW5kbGVyCisKKyAgICAgICAgICAgICAgICA7IEludGVycnVwdHMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCisgICAgICAgICAgICAgICAgRENEICAgICBJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorICAgICAgICAgICAgICAgIERDRCAgICAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCisgICAgICAgICAgICAgICAgRENEICAgICBDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNQorICAgICAgICAgICAgICAgIERDRCAgICAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CisgICAgICAgICAgICAgICAgRENEICAgICBUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgICA7IDcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFdEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorICAgICAgICAgICAgICAgIERDRCAgICAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDEwCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UM19JUlFIYW5kbGVyICAgICAgICAgICA7IDEzCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CisgICAgICAgICAgICAgICAgRENEICAgICBHUEFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE2CisgICAgICAgICAgICAgICAgRENEICAgICBHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CisgICAgICAgICAgICAgICAgRENEICAgICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CisgICAgICAgICAgICAgICAgRENEICAgICBHUERfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE5CisgICAgICAgICAgICAgICAgRENEICAgICBHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCisgICAgICAgICAgICAgICAgRENEICAgICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCisgICAgICAgICAgICAgICAgRENEICAgICBRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDIyCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI1CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CisgICAgICAgICAgICAgICAgRENEICAgICBCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgICA7IDI4CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCisgICAgICAgICAgICAgICAgRENEICAgICBFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgICA7IDMxCisgICAgICAgICAgICAgICAgRENEICAgICBURk1fVElNRVIwX0lSUV9IYW5kbGVyICAgICA7IDMyCisgICAgICAgICAgICAgICAgRENEICAgICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCisgICAgICAgICAgICAgICAgRENEICAgICBUTVIyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM0CisgICAgICAgICAgICAgICAgRENEICAgICBUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDM3CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CisgICAgICAgICAgICAgICAgRENEICAgICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQwCisgICAgICAgICAgICAgICAgRENEICAgICBEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDQzCisgICAgICAgICAgICAgICAgRENEICAgICBBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDQ1CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CisgICAgICAgICAgICAgICAgRENEICAgICBFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDUwCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCisgICAgICAgICAgICAgICAgRENEICAgICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CisgICAgICAgICAgICAgICAgRENEICAgICBVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CisgICAgICAgICAgICAgICAgRENEICAgICBDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDU3CisgICAgICAgICAgICAgICAgRENEICAgICBTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CisgICAgICAgICAgICAgICAgRENEICAgICBTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CisgICAgICAgICAgICAgICAgRENEICAgICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYxCisgICAgICAgICAgICAgICAgRENEICAgICBTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDYzCisgICAgICAgICAgICAgICAgRENEICAgICBTREgwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY3CisgICAgICAgICAgICAgICAgRENEICAgICBJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDY5CisgICAgICAgICAgICAgICAgRENEICAgICBPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCisgICAgICAgICAgICAgICAgRENEICAgICBDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCisgICAgICAgICAgICAgICAgRENEICAgICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CisgICAgICAgICAgICAgICAgRENEICAgICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CisgICAgICAgICAgICAgICAgRENEICAgICBVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CisgICAgICAgICAgICAgICAgRENEICAgICBCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgxCisgICAgICAgICAgICAgICAgRENEICAgICBJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDgyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDgzCisgICAgICAgICAgICAgICAgRENEICAgICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CisgICAgICAgICAgICAgICAgRENEICAgICBRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CisgICAgICAgICAgICAgICAgRENEICAgICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CisgICAgICAgICAgICAgICAgRENEICAgICBHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CisgICAgICAgICAgICAgICAgRENEICAgICBFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkwCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkxCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkyCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDkzCisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk0CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk1CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk2CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDk3CisgICAgICAgICAgICAgICAgRENEICAgICBQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4CisgICAgICAgICAgICAgICAgRENEICAgICBTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDk5CisgICAgICAgICAgICAgICAgRENEICAgICBERUZBVUxUX0lSUUhhbmRsZXIgICAgICAgICA7IDEwMAorICAgICAgICAgICAgICAgIERDRCAgICAgVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKK19fVmVjdG9yc19FbmQKKworX19WZWN0b3JzICAgICAgIEVRVSAgICAgX192ZWN0b3JfdGFibGUKK19fVmVjdG9yc19TaXplICBFUVUgICAgIF9fVmVjdG9yc19FbmQgLSBfX1ZlY3RvcnMKKworOyBSZXNldCBIYW5kbGVyCisKK1Jlc2V0X0hhbmRsZXIKKyAgICAgICAgICAgICAgICBNUlMgICAgIFIwLCBjb250cm9sICAgIDsgR2V0IGNvbnRyb2wgdmFsdWUKKyAgICAgICAgICAgICAgICBNT1ZTICAgIFIxLCAjMQorICAgICAgICAgICAgICAgIE9SUlMgICAgUjAsIFIwLCBSMSAgICAgOyBTZWxlY3Qgc3dpdGNoIHRvIHVucHJpdmlsZWdlZCBtb2RlCisgICAgICAgICAgICAgICAgTU9WUyAgICBSMSwgIzIKKyAgICAgICAgICAgICAgICBPUlJTICAgIFIwLCBSMCwgUjEgICAgIDsgU2VsZWN0IHN3aXRjaCB0byBQU1AKKyAgICAgICAgICAgICAgICBNU1IgICAgIGNvbnRyb2wsIFIwCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPXNmZShBUk1fTElCX1NUQUNLKSA7IEVuZCBvZiBBUk1fTElCX1NUQUNLCisgICAgICAgICAgICAgICAgTU9WICAgICBTUCwgUjAgICAgICAgICA7IEluaXRpYWxpc2UgUFNQCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPV9faWFyX3Byb2dyYW1fc3RhcnQKKyAgICAgICAgICAgICAgICBCWCAgICAgIFIwCisKKzsgRHVtbXkgRXhjZXB0aW9uIEhhbmRsZXJzIChpbmZpbml0ZSBsb29wcyB3aGljaCBjYW4gYmUgbW9kaWZpZWQpCisKK0RlZmF1bHRfSGFuZGxlcjIgTUFDUk8gaGFuZGxlcl9uYW1lCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgaGFuZGxlcl9uYW1lCitoYW5kbGVyX25hbWUKKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRNCisKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIE5NSV9IYW5kbGVyCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBIYXJkRmF1bHRfSGFuZGxlcgorICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgU1ZDX0hhbmRsZXIKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIFBlbmRTVl9IYW5kbGVyCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBTeXNUaWNrX0hhbmRsZXIKKworOyBJbnRlcnJ1cHRzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQk9EX0lSUUhhbmRsZXIJICAgICAgICAgICAgOyAwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFRNUjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzIKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVE1SMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzNAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworICAgICAgICAgICAgICAgIFBVQldFQUsgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorICAgICAgICAgICAgICAgIFBVQldFQUsgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworICAgICAgICAgICAgICAgIFBVQldFQUsgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDQ1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OQorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNTAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorICAgICAgICAgICAgICAgIFBVQldFQUsgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0MzX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDYzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjUKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY2CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NworICAgICAgICAgICAgICAgIFBVQldFQUsgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MAorICAgICAgICAgICAgICAgIFBVQldFQUsgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICAgOyA3MworICAgICAgICAgICAgICAgIFBVQldFQUsgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OQorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODAKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4OAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTREgxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkwCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MQorICAgICAgICAgICAgICAgO1BVQldFQUsgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTIKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDkzCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NAorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTUKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk2CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NworICAgICAgICAgICAgICAgIFBVQldFQUsgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICBTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDk5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgTENEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxMDAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorCis7IEludGVycnVwdHMKK0JPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCitJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKK1BXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCitDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKzswICAgICAgICAgICAgICAgICAgICAgICAgIDsgNQorUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CitUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgICA7IDcKK1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CitFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDEwCitFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCitFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCitFSU5UM19JUlFIYW5kbGVyICAgICAgICAgICA7IDEzCitFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CitFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CitHUEFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE2CitHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CitHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CitHUERfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE5CitHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCitHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCitRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDIyCitTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCitCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CitFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI1CitFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CitFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CitCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgICA7IDI4CitFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CitFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCitFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgICA7IDMxCitURk1fVElNRVIwX0lSUV9IYW5kbGVyICAgICA7IDMyCitUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCitUTVIyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM0CitUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CitVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CitVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDM3CitJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CitJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CitQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQwCitEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCitFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCitFQURDMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDQzCitBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDQ1CitFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CitFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CitVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CitVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDUwCitTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCitTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCitVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCitVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CitVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CitDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CitDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU3CitTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CitTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CitTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCitTQzNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYxCitTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDYzCitTREgwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDY1Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDY2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDY3CitJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDY5CitPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCitDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCitHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCitFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCitVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CitVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CitVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CitVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CitCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CitCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDgwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDgxCitJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDgyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDgzCitRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CitRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CitFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CitFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CitHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CitFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CitTREgxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDkxCis7VVNCSF9JUlFIYW5kbGVyICAgICAgICAgICA7IDkyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDkzCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDk0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDk1Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDk2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDk3CitQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4Cis7U0NVX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDk5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDEwMAorVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKK0RFRkFVTFRfSVJRSGFuZGxlcgorICAgICAgICAgICAgICAgIEIgICAgICAgLgorCisgICAgICAgICAgICAgICAgRU5ECmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvc3RhcnR1cF9jbXNka19tMjM1MV9zLnMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9pYXIvc3RhcnR1cF9jbXNka19tMjM1MV9zLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3NjFkNAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL2lhci9zdGFydHVwX2Ntc2RrX20yMzUxX3MucwpAQCAtMCwwICsxLDQxNiBAQAorOy8qCis7ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgQVJNIExpbWl0ZWQKKzsgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCis7ICoKKzsgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKzsgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCis7ICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cis7ICoKKzsgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCis7ICoKKzsgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCis7ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKzsgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKzsgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCis7ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCis7ICovCis7Cis7IFRoaXMgZmlsZSBpcyBkZXJpdmF0aXZlIG9mIC4uL2FybWNsYW5nL3N0YXJ0dXBfY21zZGtfbXBzMl9hbjUyMV9zLnMKKworOy8qCis7Ly8tLS0tLS0tLSA8PDwgVXNlIENvbmZpZ3VyYXRpb24gV2l6YXJkIGluIENvbnRleHQgTWVudSA+Pj4gLS0tLS0tLS0tLS0tLS0tLS0tCis7Ki8KKworCis7IDxoPiBTdGFjayBDb25maWd1cmF0aW9uCis7ICAgPG8+IFN0YWNrIFNpemUgKGluIEJ5dGVzKSA8MHgwLTB4RkZGRkZGRkY6OD4KKzsgPC9oPgorCisgICAgICAgICAgICAgICAgTU9EVUxFICAgP2NzdGFydHVwCisKKyAgICAgICAgICAgICAgICA7OyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHNlY3Rpb25zLgorICAgICAgICAgICAgICAgIFNFQ1RJT04gIEFSTV9MSUJfU1RBQ0tfTVNQOkRBVEE6Tk9ST09UKDMpCisgICAgICAgICAgICAgICAgU0VDVElPTiAgQVJNX0xJQl9TVEFDSzpEQVRBOk5PUk9PVCgzKQorCisgICAgICAgICAgICAgICAgU0VDVElPTiAgLmludHZlYzpDT0RFOk5PUk9PVCgyKQorCisgICAgICAgICAgICAgICAgRVhURVJOICAgX19pYXJfcHJvZ3JhbV9zdGFydAorICAgICAgICAgICAgICAgIEVYVEVSTiAgIFN5c3RlbUluaXQKKyAgICAgICAgICAgICAgICBFWFRFUk4gICBTQ1VfSVJRSGFuZGxlcgorICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fdmVjdG9yX3RhYmxlCisgICAgICAgICAgICAgICAgUFVCTElDICAgX19WZWN0b3JzCisgICAgICAgICAgICAgICAgUFVCTElDICAgX19WZWN0b3JzX0VuZAorICAgICAgICAgICAgICAgIFBVQkxJQyAgIF9fVmVjdG9yc19TaXplCisKKyAgICAgICAgICAgICAgICBEQVRBCisKK19fdmVjdG9yX3RhYmxlICAgICAgO0NvcmUgSW50ZXJydXB0cworICAgICAgICAgICAgICAgIERDRCAgICAgc2ZlKEFSTV9MSUJfU1RBQ0tfTVNQKSAgICA7IFRvcCBvZiBTdGFjaworICAgICAgICAgICAgICAgIERDRCAgICAgUmVzZXRfSGFuZGxlciAgICAgICAgICAgICA7IFJlc2V0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIE5NSV9IYW5kbGVyICAgICAgICAgICAgICAgOyBOTUkgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgSGFyZEZhdWx0X0hhbmRsZXIgICAgICAgICA7IEhhcmQgRmF1bHQgSGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICBTVkNfSGFuZGxlciAgICAgICAgICAgICAgIDsgU1ZDYWxsIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICBQZW5kU1ZfSGFuZGxlciAgICAgICAgICAgIDsgUGVuZFNWIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFN5c1RpY2tfSGFuZGxlciAgICAgICAgICAgOyBTeXNUaWNrIEhhbmRsZXIKKworICAgICAgICAgICAgICAgIDsgSW50ZXJydXB0cworICAgICAgICAgICAgICAgIERDRCAgICAgQk9EX0lSUUhhbmRsZXIJCSAgICAgICA7IDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIElSQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMQorICAgICAgICAgICAgICAgIERDRCAgICAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCisgICAgICAgICAgICAgICAgRENEICAgICBTUkFNX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENMS0ZBSUxfSVJRSGFuZGxlciAgICAgICAgIDsgNAorICAgICAgICAgICAgICAgIERDRCAgICAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyA1CisgICAgICAgICAgICAgICAgRENEICAgICBSVENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRBTVBFUl9JUlFIYW5kbGVyICAgICAgICAgIDsgNworICAgICAgICAgICAgICAgIERDRCAgICAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CisgICAgICAgICAgICAgICAgRENEICAgICBXV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQRl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMjIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJSQUtFMF9JUlFIYW5kbGVyICAgICAgICAgIDsgMjQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00wX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMjcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJSQUtFMV9JUlFIYW5kbGVyICAgICAgICAgIDsgMjgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMzAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVQV00xX1AyX0lSUUhhbmRsZXIgICAgICAgIDsgMzEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRGTV9USU1FUjBfSVJRX0hhbmRsZXIgICAgIDsgMzIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRJTUVSMV9IYW5kbGVyICAgICAgICAgICAgIDsgMzQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMzcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBETUEwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNDUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQyX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQk9UR19JUlFIYW5kbGVyICAgICAgICAgIDsgNTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDMl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNjAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNESDBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgNjkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIE9QQTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQR19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNzIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ2X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVBUlQ1X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQ0kwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJQV00wX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJQV00xX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEkyQzJfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgODMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFFSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFFFSTFfSVJRSGFuZGxlciAgICAgICAgICAgIDsgODUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVDQVAxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQSF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgODgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTYKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgOTcKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNDVV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOTkKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERFRkFVTFRfSVJRSGFuZGxlciAgICAgICAgIDsgMTAwCisgICAgICAgICAgICAgICAgRENEICAgICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorX19WZWN0b3JzX0VuZAorCitfX1ZlY3RvcnMgICAgICAgRVFVICAgICBfX3ZlY3Rvcl90YWJsZQorX19WZWN0b3JzX1NpemUgIEVRVSAgICAgX19WZWN0b3JzX0VuZCAtIF9fVmVjdG9ycworCis7IFJlc2V0IEhhbmRsZXIKKworICAgICAgICAgICAgICAgIFBVQldFQUsgIFJlc2V0X0hhbmRsZXIKKyAgICAgICAgICAgICAgICBTRUNUSU9OICAudGV4dDpDT0RFOlJFT1JERVI6Tk9ST09UKDIpCitSZXNldF9IYW5kbGVyCisgICAgICAgICAgICAgICAgQ1BTSUQgICBpICAgICAgICAgICAgICA7IERpc2FibGUgSVJRcworICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1TeXN0ZW1Jbml0CisgICAgICAgICAgICAgICAgQkxYICAgICBSMAorICAgICAgICAgICAgICAgIE1SUyAgICAgUjAsIGNvbnRyb2wgICAgOyBHZXQgY29udHJvbCB2YWx1ZQorICAgICAgICAgICAgICAgIE1PVlMgICAgUjEsICMyCisgICAgICAgICAgICAgICAgT1JSUyAgICBSMCwgUjAsIFIxICAgICA7IFNlbGVjdCBzd2l0Y2ggdG8gUFNQCisgICAgICAgICAgICAgICAgTVNSICAgICBjb250cm9sLCBSMAorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1zZmUoQVJNX0xJQl9TVEFDSykgICAgICA7IEVuZCBvZiBQUk9DX1NUQUNLCisgICAgICAgICAgICAgICAgTU9WUyAgICBSMSwgIzcKKyAgICAgICAgICAgICAgICBCSUNTICAgIFIwLCBSMSAgICAgICAgIDsgTWFrZSBzdXJlIHRoYXQgdGhlIFNQIGFkZHJlc3MgaXMgYWxpZ25lZCB0byA4CisgICAgICAgICAgICAgICAgTU9WICAgICBTUCwgUjAgICAgICAgICA7IEluaXRpYWxpc2UgUFNQCisgICAgICAgICAgICAgICAgTERSICAgICBSMCwgPV9faWFyX3Byb2dyYW1fc3RhcnQKKyAgICAgICAgICAgICAgICBCWCAgICAgIFIwCisKKzsgRHVtbXkgRXhjZXB0aW9uIEhhbmRsZXJzIChpbmZpbml0ZSBsb29wcyB3aGljaCBjYW4gYmUgbW9kaWZpZWQpCitEZWZhdWx0X0hhbmRsZXIyIE1BQ1JPIGhhbmRsZXJfbmFtZQorICAgICAgICAgICAgICAgIFBVQldFQUsgIGhhbmRsZXJfbmFtZQoraGFuZGxlcl9uYW1lCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5ETQorCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBOTUlfSGFuZGxlcgorICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgSGFyZEZhdWx0X0hhbmRsZXIKKyAgICAgICAgICAgICAgICBEZWZhdWx0X0hhbmRsZXIyIFNWQ19IYW5kbGVyCisgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyMiBQZW5kU1ZfSGFuZGxlcgorICAgICAgICAgICAgICAgIERlZmF1bHRfSGFuZGxlcjIgU3lzVGlja19IYW5kbGVyCisKK0RlZmF1bHRfSGFuZGxlcgorOyBJbnRlcnJ1cHRzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQk9EX0lSUUhhbmRsZXIJICAgICAgICAgICAgOyAwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgSVJDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUFdSV1VfSVJRSGFuZGxlciAgICAgICAgICAgOyAyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQ0xLRkFJTF9JUlFIYW5kbGVyICAgICAgICAgOyA0CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVEFNUEVSX0lSUUhhbmRsZXIgICAgICAgICAgOyA3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgV0RUX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDBfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyAxMworICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgMTQKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BBX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxNgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQQl9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMTcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BEX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyAxOQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEdQRV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgMjAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUVNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyAyMgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNQSTBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMjMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRVBXTTBfUDBfSVJRSGFuZGxlciAgICAgICAgOyAyNQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVQV00wX1AxX0lSUUhhbmRsZXIgICAgICAgIDsgMjYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQlJBS0UxX0lSUUhhbmRsZXIgICAgICAgICAgOyAyOAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVQV00xX1AwX0lSUUhhbmRsZXIgICAgICAgIDsgMjkKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRVBXTTFfUDJfSVJRSGFuZGxlciAgICAgICAgOyAzMQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFRGTV9USU1FUjBfSVJRX0hhbmRsZXIgICAgIDsgMzIKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVElNRVIxX0hhbmRsZXIgICAgICAgICAgICAgOyAzNAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFRNUjNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzUKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDFfSVJRSGFuZGxlciAgICAgICAgICAgOyAzNworICAgICAgICAgICAgICAgIFBVQldFQUsgIEkyQzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgMzgKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MAorICAgICAgICAgICAgICAgIFBVQldFQUsgIERBQ19JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNDEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUFEQzFfSVJRSGFuZGxlciAgICAgICAgICAgOyA0MworICAgICAgICAgICAgICAgIFBVQldFQUsgIEFDTVAwMV9JUlFIYW5kbGVyICAgICAgICAgIDsgNDQKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDQ1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUFEQzJfSVJRSGFuZGxlciAgICAgICAgICAgOyA0NgorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVBREMzX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNDcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVUFSVDNfSVJRSGFuZGxlciAgICAgICAgICAgOyA0OQorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNTAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU1BJMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA1MgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVTQkRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVVNCT1RHX0lSUUhhbmRsZXIgICAgICAgICAgOyA1NQorICAgICAgICAgICAgICAgIFBVQldFQUsgIENBTjBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNTYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0MwX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA1OAorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNDMV9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgNTkKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0MzX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2MQorICAgICAgICAgICAgICAgIFBVQldFQUsgIFNQSTNfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjIKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDYzCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgU0RIMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA2NAorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgNjUKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY2CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA2NworICAgICAgICAgICAgICAgIFBVQldFQUsgIEkyUzBfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNjgKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDY5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgT1BBMF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA3MAorICAgICAgICAgICAgICAgIFBVQldFQUsgIENSUFRfSVJRSGFuZGxlciAgICAgICAgICAgIDsgNzEKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgRUlOVDZfSVJRSGFuZGxlciAgICAgICAgICAgOyA3MworICAgICAgICAgICAgICAgIFBVQldFQUsgIFVBUlQ0X0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzQKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgVVNDSTBfSVJRSGFuZGxlciAgICAgICAgICAgOyA3NgorICAgICAgICAgICAgICAgIFBVQldFQUsgIFVTQ0kxX0lSUUhhbmRsZXIgICAgICAgICAgIDsgNzcKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgQlBXTTFfSVJRSGFuZGxlciAgICAgICAgICAgOyA3OQorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODAKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDgxCisgICAgICAgICAgICAgICAgUFVCV0VBSyAgSTJDMl9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4MgorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgODMKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgUUVJMV9JUlFIYW5kbGVyICAgICAgICAgICAgOyA4NQorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVDQVAwX0lSUUhhbmRsZXIgICAgICAgICAgIDsgODYKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgR1BIX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA4OAorICAgICAgICAgICAgICAgIFBVQldFQUsgIEVJTlQ3X0lSUUhhbmRsZXIgICAgICAgICAgIDsgODkKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBTREgxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkwCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5MQorICAgICAgICAgICAgICAgO1BVQldFQUsgIFVTQkhfSVJRSGFuZGxlciAgICAgICAgICAgIDsgOTIKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDkzCisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NAorICAgICAgICAgICAgICAgO1BVQldFQUsgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgOTUKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICAwICAgICAgICAgICAgICAgICAgICAgICAgICA7IDk2CisgICAgICAgICAgICAgICA7UFVCV0VBSyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyA5NworICAgICAgICAgICAgICAgIFBVQldFQUsgIFBETUExX0lSUUhhbmRsZXIgICAgICAgICAgIDsgOTgKKyAgICAgICAgICAgICAgIDtQVUJXRUFLICBTQ1VfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDk5CisgICAgICAgICAgICAgICAgUFVCV0VBSyAgREVGQVVMVF9JUlFIYW5kbGVyICAgICAgICAgOyAxMDAKKyAgICAgICAgICAgICAgICBQVUJXRUFLICBUUk5HX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDEwMQorCis7IEludGVycnVwdHMKK0JPRF9JUlFIYW5kbGVyCQkgICAgICAgOyAwCitJUkNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDEKK1BXUldVX0lSUUhhbmRsZXIgICAgICAgICAgIDsgMgorU1JBTV9JUlFIYW5kbGVyICAgICAgICAgICAgOyAzCitDTEtGQUlMX0lSUUhhbmRsZXIgICAgICAgICA7IDQKKzswICAgICAgICAgICAgICAgICAgICAgICAgIDsgNQorUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgOyA2CitUQU1QRVJfSVJRSGFuZGxlciAgICAgICAgICA7IDcKK1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgIDsgOAorV1dEVF9JUlFIYW5kbGVyICAgICAgICAgICAgOyA5CitFSU5UMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDEwCitFSU5UMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDExCitFSU5UMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDEyCitFSU5UM19JUlFIYW5kbGVyICAgICAgICAgICA7IDEzCitFSU5UNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDE0CitFSU5UNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDE1CitHUEFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE2CitHUEJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE3CitHUENfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE4CitHUERfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDE5CitHUEVfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIwCitHUEZfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDIxCitRU1BJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDIyCitTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDIzCitCUkFLRTBfSVJRSGFuZGxlciAgICAgICAgICA7IDI0CitFUFdNMF9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI1CitFUFdNMF9QMV9JUlFIYW5kbGVyICAgICAgICA7IDI2CitFUFdNMF9QMl9JUlFIYW5kbGVyICAgICAgICA7IDI3CitCUkFLRTFfSVJRSGFuZGxlciAgICAgICAgICA7IDI4CitFUFdNMV9QMF9JUlFIYW5kbGVyICAgICAgICA7IDI5CitFUFdNMV9QMV9JUlFIYW5kbGVyICAgICAgICA7IDMwCitFUFdNMV9QMl9JUlFIYW5kbGVyICAgICAgICA7IDMxCitURk1fVElNRVIwX0lSUV9IYW5kbGVyICAgICA7IDMyCitUTVIxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDMzCitUSU1FUjFfSGFuZGxlciAgICAgICAgICAgICA7IDM0CitUTVIzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM1CitVQVJUMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDM2CitVQVJUMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDM3CitJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM4CitJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDM5CitQRE1BMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQwCitEQUNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDQxCitFQURDMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDQyCitFQURDMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDQzCitBQ01QMDFfSVJRSGFuZGxlciAgICAgICAgICA7IDQ0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDQ1CitFQURDMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ2CitFQURDM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ3CitVQVJUMl9JUlFIYW5kbGVyICAgICAgICAgICA7IDQ4CitVQVJUM19JUlFIYW5kbGVyICAgICAgICAgICA7IDQ5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDUwCitTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUxCitTUEkyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUyCitVU0JEX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDUzCitVU0JIX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU0CitVU0JPVEdfSVJRSGFuZGxlciAgICAgICAgICA7IDU1CitDQU4wX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU2CitDQU4xX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDU3CitTQzBfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU4CitTQzFfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDU5CitTQzJfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYwCitTQzNfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDYxCitTUEkzX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDYyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDYzCitTREgwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDY1Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDY2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDY3CitJMlMwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDY4Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDY5CitPUEEwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcwCitDUlBUX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDcxCitHUEdfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDcyCitFSU5UNl9JUlFIYW5kbGVyICAgICAgICAgICA7IDczCitVQVJUNF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc0CitVQVJUNV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc1CitVU0NJMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc2CitVU0NJMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc3CitCUFdNMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDc4CitCUFdNMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDc5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDgwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDgxCitJMkMyX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDgyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDgzCitRRUkwX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg0CitRRUkxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDg1CitFQ0FQMF9JUlFIYW5kbGVyICAgICAgICAgICA7IDg2CitFQ0FQMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDg3CitHUEhfSVJRSGFuZGxlciAgICAgICAgICAgICA7IDg4CitFSU5UN19JUlFIYW5kbGVyICAgICAgICAgICA7IDg5CitTREgxX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDkwCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDkxCis7VVNCSF9JUlFIYW5kbGVyICAgICAgICAgICA7IDkyCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDkzCis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDk0Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDk1Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDk2Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDk3CitQRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICA7IDk4Cis7U0NVX0lSUUhhbmRsZXIgICAgICAgICAgICA7IDk5Cis7MCAgICAgICAgICAgICAgICAgICAgICAgICA7IDEwMAorVFJOR19JUlFIYW5kbGVyICAgICAgICAgICAgOyAxMDEKK0RFRkFVTFRfSVJRSGFuZGxlcgorICAgICAgICAgICAgICAgIEIgICAgICAgLgorCisgICAgICAgICAgICAgICAgRU5ECmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9zeXN0ZW1fY29yZV9pbml0LmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvZGV2aWNlL3NvdXJjZS9zeXN0ZW1fY29yZV9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4ODEzMAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9kZXZpY2Uvc291cmNlL3N5c3RlbV9jb3JlX2luaXQuYwpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDE5IEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmF0aXZlIG9mIENNU0lTIFY1LjAxIFxEZXZpY2VcQVJNXEFSTUNNMzNcU291cmNlXHN5c3RlbV9BUk1DTTMzLmMKKyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9BUk0tc29mdHdhcmUvQ01TSVNfNS90cmVlLzUuMC4xCisgKiBHaXQgU0hBOiA4YTFkOWQ2ZWUxOGIxNDNhZTViZWZlZmExNGQ4OWZiNWIzZjk5Yzc1CisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgIk51TWljcm8uaCIKKyNpbmNsdWRlICJzeXN0ZW1fY29yZV9pbml0LmgiCisjaW5jbHVkZSAicGxhdGZvcm1fZGVzY3JpcHRpb24uaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlZmluZSBjbG9ja3MKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgIFNZU1RFTV9DTE9DSyAgICAoNjQwMDAwMDBVTCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEV4dGVybmFscworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN5c3RlbSBDb3JlIENsb2NrIFZhcmlhYmxlCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordWludDMyX3QgU3lzdGVtQ29yZUNsb2NrID0gU1lTVEVNX0NMT0NLOwordWludDMyX3QgUGVyaXBoZXJhbENsb2NrID0gU1lTVEVNX0NMT0NLOwordWludDMyX3QgUmVmQ2xvY2sgICAgICAgID0gU1lTVEVNX0NMT0NLOwordWludDMyX3QgQ3ljbGVzUGVyVXMgICAgID0gU1lTVEVNX0NMT0NLIC8gMTAwMDAwMDsKK3VpbnQzMl90IFBsbENsb2NrICAgICAgICA9IFNZU1RFTV9DTE9DSzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN5c3RlbSBDb3JlIENsb2NrIHVwZGF0ZSBmdW5jdGlvbgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgU3lzdGVtQ29yZUNsb2NrVXBkYXRlICh2b2lkKQoreworICBTeXN0ZW1Db3JlQ2xvY2sgPSBTWVNURU1fQ0xPQ0s7CisgIFBlcmlwaGVyYWxDbG9jayA9IFNZU1RFTV9DTE9DSzsKKyAgUmVmQ2xvY2sgICAgICAgID0gU1lTVEVNX0NMT0NLOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3lzdGVtIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBTeXN0ZW1Jbml0ICh2b2lkKQoreworI2lmIGRlZmluZWQgKF9fVlRPUl9QUkVTRU5UKSAmJiAoX19WVE9SX1BSRVNFTlQgPT0gMVUpCisgIGV4dGVybiB1aW50MzJfdCBfX1ZlY3RvcnM7CisgIFNDQi0+VlRPUiA9ICh1aW50MzJfdCkgJl9fVmVjdG9yczsKKyNlbmRpZgorCisvLyNpZiBfX0RPTUFJTl9OUyA9PSAwCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNMKQorCisgIC8qIEluaXRpYWwgdGhlIHN5c3RlbSAqLworICBTWVNfVW5sb2NrUmVnKCk7CisKKyAgLyogRW5hYmxlIEhJUkMgYW5kIHdhaXRpbmcgZm9yIHN0YWJsZSAqLworICBDTEstPlBXUkNUTCB8PSBDTEtfUFdSQ1RMX0hJUkNFTl9Nc2s7CisgIHdoaWxlKChDTEstPlNUQVRVUyAmIENMS19TVEFUVVNfSElSQ1NUQl9Nc2spID09IDApOworCisgIC8qIEVuYWJsZSBQTEwgYW5kIHdhaXRpbmcgZm9yIHN0YWJsZSAqLworICBDTEstPlBMTENUTCA9IENMS19QTExDVExfNjRNSHpfSElSQzsKKyAgd2hpbGUoKENMSy0+U1RBVFVTICYgQ0xLX1NUQVRVU19QTExTVEJfTXNrKSA9PSAwKTsKKworICAvKiBTZXQgc3lzdGVtIHRvIHVzZSBQTEwgd2l0aCBIQ0xLX0RJViA9IDEgKi8KKyAgQ0xLLT5DTEtTRUwwID0gQ0xLX0NMS1NFTDBfSENMS1NFTF9QTEw7CisgIENMSy0+Q0xLRElWMCA9IDA7CisKKyAgLyogU3dpdGNoIEhDTEsgY2xvY2sgc291cmNlIHRvIFBMTCAqLworICBDTEstPkNMS1NFTDAgPSAoQ0xLLT5DTEtTRUwwICYgKH5DTEtfQ0xLU0VMMF9IQ0xLU0VMX01zaykpIHwgQ0xLX0NMS1NFTDBfSENMS1NFTF9QTEw7CisKKyAgLyogRW5hYmxlIElQIGNsb2NrICovCisgIENMSy0+QVBCQ0xLMCB8PSBDTEtfQVBCQ0xLMF9VQVJUMENLRU5fTXNrIHwgQ0xLX0FQQkNMSzBfVE1SMENLRU5fTXNrIHwgQ0xLX0FQQkNMSzBfVE1SMkNLRU5fTXNrOworCisgIC8qIFNlbGVjdCBVQVJUIGNsb2NrIHNvdXJjZSAqLworICBDTEstPkNMS1NFTDEgPSAoQ0xLLT5DTEtTRUwxICYgKH5DTEtfQ0xLU0VMMV9VQVJUMFNFTF9Nc2spKSB8IENMS19DTEtTRUwxX1VBUlQwU0VMX0hJUkM7CisKKyAgLyogVGltZXIgY2xvY2sgc291cmNlICovCisgIENMSy0+Q0xLU0VMMSA9IChDTEstPkNMS1NFTDEgJiAofkNMS19DTEtTRUwxX1RNUjBTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMV9UTVIwU0VMX0hJUkM7CisgIENMSy0+Q0xLU0VMMSA9IChDTEstPkNMS1NFTDEgJiAofkNMS19DTEtTRUwxX1RNUjJTRUxfTXNrKSkgfCBDTEtfQ0xLU0VMMV9UTVIyU0VMX0hJUkM7CisKKyAgLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgZm9yIFVBUlQwIFJYRCBhbmQgVFhEICovCisgIFNZUy0+R1BCX01GUEggPSAoU1lTLT5HUEJfTUZQSCAmICh+KFVBUlQwX1JYRF9QQjEyX01zayB8IFVBUlQwX1RYRF9QQjEzX01zaykpKSB8IFVBUlQwX1JYRF9QQjEyIHwgVUFSVDBfVFhEX1BCMTM7CisKKyAgLyogU2V0IFVBUlQgMCB0byBOb24tc2VjdXJlICovCisgIFNDVV9TRVRfUE5TU0VUKFVBUlQwX0F0dHIpOworCisgIC8qIFNldCBTQVUgKi8KKyAgU0FVLT5STlIgPSAzOworICBTQVUtPlJCQVIgPSAweDUwMDAwMDAwOworICBTQVUtPlJMQVIgPSAoMHg1RkZGRkZGRiAmIFNBVV9STEFSX0xBRERSX01zaykgfCBTQVVfUkxBUl9FTkFCTEVfTXNrOworCisgIC8qIEluaXQgRVRNIFRyYWNlICovCisgIFNZUy0+R1BFX01GUEggPSAoU1lTLT5HUEVfTUZQSCAmICh+KFRSQUNFX0NMS19QRTEyX01zayB8IFRSQUNFX0RBVEEwX1BFMTFfTXNrIHwgVFJBQ0VfREFUQTFfUEUxMF9Nc2sgfCBUUkFDRV9EQVRBMl9QRTlfTXNrIHwgVFJBQ0VfREFUQTNfUEU4X01zaykpKSB8CisgICAgICBUUkFDRV9DTEtfUEUxMiB8IFRSQUNFX0RBVEEwX1BFMTEgfCBUUkFDRV9EQVRBMV9QRTEwIHwgVFJBQ0VfREFUQTJfUEU5IHwgVFJBQ0VfREFUQTNfUEU4OworCisKKworI2VuZGlmCisKKworICBTeXN0ZW1Db3JlQ2xvY2sgPSBTWVNURU1fQ0xPQ0s7Cit9CmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvbXB1X2FybXY4bV9kcnYuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy9tcHVfYXJtdjhtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOWVmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvbXB1X2FybXY4bV9kcnYuYwpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICovCisKKyNpbmNsdWRlICJtcHVfYXJtdjhtX2Rydi5oIgorI2luY2x1ZGUgImNtc2lzLmgiCisKKy8qCisgKiBGaXhNZToKKyAqIFRoaXMgaXMgYSBiZXRhIHF1YWxpdHkgZHJpdmVyIGZvciBNUFUgaW4gdjhNLiBUbyBiZSBmaW5hbGl6ZWQuCisgKi8KKworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2FybXY4bV9lbmFibGUoc3RydWN0IG1wdV9hcm12OG1fZGV2X3QgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHByaXZkZWZfZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZm5taV9lbikKK3sKKyAgICAvKk5vIGVycm9yIGNoZWNraW5nKi8KKworICAgIE1QVV9UeXBlICptcHUgPSAoTVBVX1R5cGUgKilkZXYtPmJhc2U7CisKKyAgICAvKgorICAgICAqIEZpeE1lOiBTZXQgMyBwcmUtZGVmaW5lZCBNQUlSX0FUVFIgZm9yIG1lbW9yeS4gVGhlIGF0dHJpYnV0ZXMgY29tZQorICAgICAqIGZyb20gZGVmYXVsdCBtZW1vcnkgbWFwLCBuZWVkIHRvIGNoZWNrIGlmIGZpbmUtdHVuZSBpcyBuZWNlc3NhcnkuCisgICAgICoKKyAgICAgKiBNQUlSMF8wOiBQZXJpcGhlcmFsLCBEZXZpY2UtbkduUkUuCisgICAgICogTUFJUjBfMTogQ29kZSwgV1QgUkEuIFNhbWUgYXR0ciBmb3IgT3V0ZXIgYW5kIElubmVyLgorICAgICAqIE1BSVIwXzI6IFNSQU0sIFdCV0EgUkEuIFNhbWUgYXR0ciBmb3IgT3V0ZXIgYW5kIElubmVyLgorICAgICAqLworICAgIG1wdS0+TUFJUjAgPSAoTVBVX0FSTVY4TV9NQUlSX0FUVFJfREVWSUNFX1ZBTCA8PCBNUFVfTUFJUjBfQXR0cjBfUG9zKSB8CisgICAgICAgICAgICAgICAgIChNUFVfQVJNVjhNX01BSVJfQVRUUl9DT0RFX1ZBTCA8PCBNUFVfTUFJUjBfQXR0cjFfUG9zKSB8CisgICAgICAgICAgICAgICAgIChNUFVfQVJNVjhNX01BSVJfQVRUUl9EQVRBX1ZBTCA8PCBNUFVfTUFJUjBfQXR0cjJfUG9zKTsKKworICAgIG1wdS0+Q1RSTCA9CisgICAgICAgICAgICAocHJpdmRlZl9lbiA/IE1QVV9DVFJMX1BSSVZERUZFTkFfTXNrIDogMCkgfAorICAgICAgICAgICAgKGhmbm1pX2VuICAgPyBNUFVfQ1RSTF9IRk5NSUVOQV9Nc2sgICA6IDApOworCisgICAgLypFbnN1cmUgYWxsIGNvbmZpZ3VyYXRpb24gaXMgd3JpdHRlbiBiZWZvcmUgZW5hYmxlKi8KKworICAgIG1wdS0+Q1RSTCB8PSBNUFVfQ1RSTF9FTkFCTEVfTXNrOworCisgICAgLyogRW5hYmxlIE1QVSBiZWZvcmUgbmV4dCBpbnN0cnVjdGlvbiAqLworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgICByZXR1cm4gTVBVX0FSTVY4TV9PSzsKK30KKworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2FybXY4bV9kaXNhYmxlKHN0cnVjdCBtcHVfYXJtdjhtX2Rldl90ICpkZXYpCit7CisgICAgTVBVX1R5cGUgKm1wdSA9IChNUFVfVHlwZSAqKWRldi0+YmFzZTsKKworICAgIC8qIFJlc2V0IGFsbCBmaWVsZHMgYXMgZW5hYmxlIGRvZXMgZnVsbCBzZXR1cCAqLworICAgIG1wdS0+Q1RSTCA9IDA7CisKKyAgICByZXR1cm4gTVBVX0FSTVY4TV9PSzsKK30KKworCitlbnVtIG1wdV9hcm12OG1fZXJyb3JfdCBtcHVfYXJtdjhtX3JlZ2lvbl9lbmFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtcHVfYXJtdjhtX2Rldl90ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtcHVfYXJtdjhtX3JlZ2lvbl9jZmdfdCAqcmVnaW9uX2NmZykKK3sKKyAgICBNUFVfVHlwZSAqbXB1ID0gKE1QVV9UeXBlICopZGV2LT5iYXNlOworCisgICAgZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgcmV0X3ZhbCA9IE1QVV9BUk1WOE1fT0s7CisgICAgdWludDMyX3QgY3RybF9iZWZvcmU7CisgICAgdWludDMyX3QgYmFzZV9jZmc7CisgICAgdWludDMyX3QgbGltaXRfY2ZnOworCisgICAgLypGSVhNRSA6IEFkZCBjb21wbGV0ZSBlcnJvciBjaGVja2luZyovCisgICAgaWYgKChyZWdpb25fY2ZnLT5yZWdpb25fYmFzZSAmIH5NUFVfUkJBUl9CQVNFX01zaykgIT0gMCkgeworICAgICAgICByZXR1cm4gTVBVX0FSTVY4TV9FUlJPUjsKKyAgICB9CisgICAgLyogcmVnaW9uX2xpbWl0IGRvZXNuJ3QgbmVlZCB0byBiZSBhbGlnbmVkIGJ1dCB0aGUgc2NhdHRlcgorICAgICAqIGZpbGUgbmVlZHMgdG8gYmUgc2V0dXAgdG8gZW5zdXJlIHRoYXQgcGFydGl0aW9ucyBkbyBub3Qgb3ZlcmxhcC4KKyAgICAgKi8KKworICAgIGN0cmxfYmVmb3JlID0gbXB1LT5DVFJMOworICAgIG1wdS0+Q1RSTCA9IDA7CisKKyAgICBtcHUtPlJOUiAgPSByZWdpb25fY2ZnLT5yZWdpb25fbnIgJiBNUFVfUk5SX1JFR0lPTl9Nc2s7CisKKyAgICAvKiBUaGlzIDBzIHRoZSBsb3dlciBiaXRzIG9mIHRoZSBiYXNlIGFkZHJlc3MgKi8KKyAgICBiYXNlX2NmZyA9IHJlZ2lvbl9jZmctPnJlZ2lvbl9iYXNlICYgTVBVX1JCQVJfQkFTRV9Nc2s7CisgICAgYmFzZV9jZmcgfD0gKHJlZ2lvbl9jZmctPmF0dHJfc2ggPDwgTVBVX1JCQVJfU0hfUG9zKSAmIE1QVV9SQkFSX1NIX01zazsKKyAgICBiYXNlX2NmZyB8PSAocmVnaW9uX2NmZy0+YXR0cl9hY2Nlc3MgPDwgTVBVX1JCQVJfQVBfUG9zKSAmIE1QVV9SQkFSX0FQX01zazsKKyAgICBiYXNlX2NmZyB8PSAocmVnaW9uX2NmZy0+YXR0cl9leGVjIDw8IE1QVV9SQkFSX1hOX1BvcykgJiBNUFVfUkJBUl9YTl9Nc2s7CisKKyAgICBtcHUtPlJCQVIgPSBiYXNlX2NmZzsKKworICAgIC8qVGhpcyAwcyB0aGUgbG93ZXIgYml0cyBvZiBiYXNlIGFkZHJlc3MgYnV0IHRoZXkgYXJlIHRyZWF0ZWQgYXMgMSAqLworICAgIGxpbWl0X2NmZyA9IChyZWdpb25fY2ZnLT5yZWdpb25fbGltaXQtMSkgJiBNUFVfUkxBUl9MSU1JVF9Nc2s7CisKKyAgICBsaW1pdF9jZmcgfD0gKHJlZ2lvbl9jZmctPnJlZ2lvbl9hdHRyaWR4IDw8IE1QVV9STEFSX0F0dHJJbmR4X1BvcykgJgorICAgICAgICAgICAgICAgICBNUFVfUkxBUl9BdHRySW5keF9Nc2s7CisKKyAgICBsaW1pdF9jZmcgfD0gTVBVX1JMQVJfRU5fTXNrOworCisgICAgbXB1LT5STEFSID0gbGltaXRfY2ZnOworCisgICAgLypSZXN0b3JlIG1haW4gTVBVIGNvbnRyb2wqLworICAgIG1wdS0+Q1RSTCA9IGN0cmxfYmVmb3JlOworCisgICAgLyogRW5hYmxlIE1QVSBiZWZvcmUgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gKi8KKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisKKyAgICByZXR1cm4gcmV0X3ZhbDsKK30KKworCitlbnVtIG1wdV9hcm12OG1fZXJyb3JfdCBtcHVfYXJtdjhtX3JlZ2lvbl9kaXNhYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXB1X2FybXY4bV9kZXZfdCAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWdpb25fbnIpCit7CisKKyAgICBNUFVfVHlwZSAqbXB1ID0gKE1QVV9UeXBlICopZGV2LT5iYXNlOworCisgICAgZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgcmV0X3ZhbCA9IE1QVV9BUk1WOE1fT0s7CisgICAgdWludDMyX3QgY3RybF9iZWZvcmU7CisKKyAgICAvKkZJWE1FIDogQWRkIGNvbXBsZXRlIGVycm9yIGNoZWNraW5nKi8KKworICAgIGN0cmxfYmVmb3JlID0gbXB1LT5DVFJMOworICAgIG1wdS0+Q1RSTCA9IDA7CisKKyAgICBtcHUtPlJOUiAgPSByZWdpb25fbnIgJiBNUFVfUk5SX1JFR0lPTl9Nc2s7CisKKyAgICBtcHUtPlJCQVIgPSAwOworICAgIG1wdS0+UkxBUiA9IDA7CisKKyAgICAvKlJlc3RvcmUgbWFpbiBNUFUgY29udHJvbCovCisgICAgbXB1LT5DVFJMID0gY3RybF9iZWZvcmU7CisKKyAgICByZXR1cm4gcmV0X3ZhbDsKK30KKworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2FybXY4bV9jbGVhbihzdHJ1Y3QgbXB1X2FybXY4bV9kZXZfdCAqZGV2KQoreworICAgIE1QVV9UeXBlICptcHUgPSAoTVBVX1R5cGUgKilkZXYtPmJhc2U7CisgICAgdWludDMyX3QgaSA9IChtcHUtPlRZUEUgJiBNUFVfVFlQRV9EUkVHSU9OX01zaykgPj4gTVBVX1RZUEVfRFJFR0lPTl9Qb3M7CisKKyAgICB3aGlsZSAoaSA+IDApIHsKKyAgICAgICAgbXB1X2FybXY4bV9yZWdpb25fZGlzYWJsZShkZXYsIGktMSk7CisgICAgICAgIGktLTsKKyAgICB9CisKKyAgICByZXR1cm4gTVBVX0FSTVY4TV9PSzsKKworfQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL21wdV9hcm12OG1fZHJ2LmggYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvbXB1X2FybXY4bV9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI3NjA0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL21wdV9hcm12OG1fZHJ2LmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOSwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqLworCisjaWZuZGVmIF9fTVBVX0FSTVY4TV9EUlZfSF9fCisjZGVmaW5lIF9fTVBVX0FSTVY4TV9EUlZfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIFBSSVZJTEVHRURfREVGQVVMVF9FTkFCTEUgMQorI2RlZmluZSBIQVJERkFVTFRfTk1JX0VOQUJMRSAgICAgIDEKKworLyogTUFJUl9BVFRSICovCisjZGVmaW5lIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0RFVklDRV9WQUwgICAgICAweDA0CisjZGVmaW5lIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0RFVklDRV9JRFggICAgICAwCisjZGVmaW5lIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0NPREVfVkFMICAgICAgICAweEFBCisjZGVmaW5lIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0NPREVfSURYICAgICAgICAxCisjZGVmaW5lIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0RBVEFfVkFMICAgICAgICAweEZGCisjZGVmaW5lIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0RBVEFfSURYICAgICAgICAyCisKK3N0cnVjdCBtcHVfYXJtdjhtX2Rldl90IHsKKyAgICBjb25zdCB1aW50MzJfdCBiYXNlOworfTsKKworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgeworICAgIE1QVV9BUk1WOE1fT0ssCisgICAgTVBVX0FSTVY4TV9FUlJPUgorfTsKKworZW51bSBtcHVfYXJtdjhtX2F0dHJfZXhlY190IHsKKyAgICBNUFVfQVJNVjhNX1hOX0VYRUNfT0ssCisgICAgTVBVX0FSTVY4TV9YTl9FWEVDX05FVkVSCit9OworCitlbnVtIG1wdV9hcm12OG1fYXR0cl9hY2Nlc3NfdCB7CisgICAgTVBVX0FSTVY4TV9BUF9SV19QUklWX09OTFksCisgICAgTVBVX0FSTVY4TV9BUF9SV19QUklWX1VOUFJJViwKKyAgICBNUFVfQVJNVjhNX0FQX1JPX1BSSVZfT05MWSwKKyAgICBNUFVfQVJNVjhNX0FQX1JPX1BSSVZfVU5QUklWCit9OworCitlbnVtIG1wdV9hcm12OG1fYXR0cl9zaGFyZWRfdCB7CisgICAgTVBVX0FSTVY4TV9TSF9OT05FLAorICAgIE1QVV9BUk1WOE1fU0hfVU5VU0VELAorICAgIE1QVV9BUk1WOE1fU0hfT1VURVIsCisgICAgTVBVX0FSTVY4TV9TSF9JTk5FUgorfTsKKworc3RydWN0IG1wdV9hcm12OG1fcmVnaW9uX2NmZ190IHsKKyAgICB1aW50MzJfdCByZWdpb25fbnI7CisgICAgdWludDMyX3QgcmVnaW9uX2Jhc2U7CisgICAgdWludDMyX3QgcmVnaW9uX2xpbWl0OworICAgIHVpbnQzMl90IHJlZ2lvbl9hdHRyaWR4OworICAgIGVudW0gbXB1X2FybXY4bV9hdHRyX2V4ZWNfdCAgICAgYXR0cl9leGVjOworICAgIGVudW0gbXB1X2FybXY4bV9hdHRyX2FjY2Vzc190ICAgYXR0cl9hY2Nlc3M7CisgICAgZW51bSBtcHVfYXJtdjhtX2F0dHJfc2hhcmVkX3QgICBhdHRyX3NoOworfTsKKworc3RydWN0IG1wdV9hcm12OG1fcmVnaW9uX2NmZ19yYXdfdCB7CisgICAgdWludDMyX3QgcmVnaW9uX25yOworICAgIHVpbnQzMl90IHJlZ2lvbl9iYXNlOworICAgIHVpbnQzMl90IHJlZ2lvbl9saW1pdDsKK307CisKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIE1QVQorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICAgICAgICAgICAgTVBVIGRldmljZSBccmVmIG1wdV9hcm12OG1fZGV2X3QKKyAqIFxwYXJhbVtpbl0gcHJpdmRlZl9lbiAgICAgcHJpdmlsZWdlIGRlZmF1bHQgcmVnaW9uIDE6ZW5hYmxlIDA6ZGlzYWJsZQorICogXHBhcmFtW2luXSBoZm5taV9lbiAgICAgICBtcHUgZm9yIGhhcmQgZmF1bHQgJiBubWkgIDE6ZW5hYmxlIDA6ZGlzYWJsZQorICoKKyAqIFxyZXR1cm4gRXJyb3IgY29kZSBccmVmIG1wdV9hcm12OG1fZXJyb3JfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLworCitlbnVtIG1wdV9hcm12OG1fZXJyb3JfdCBtcHVfYXJtdjhtX2VuYWJsZShzdHJ1Y3QgbXB1X2FybXY4bV9kZXZfdCAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHJpdmRlZl9lbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhmbm1pX2VuKTsKKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBNUFUKKyAqCisgKiBccGFyYW1baW5dIGRldiAgICAgICAgICAgIE1QVSBkZXZpY2UgXHJlZiBtcHVfYXJtdjhtX2Rldl90CisgKgorICogXHJldHVybiBFcnJvciBjb2RlIFxyZWYgYXJtX21wdV9lcnJvcl90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCitlbnVtIG1wdV9hcm12OG1fZXJyb3JfdCBtcHVfYXJtdjhtX2Rpc2FibGUoc3RydWN0IG1wdV9hcm12OG1fZGV2X3QgKmRldik7CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgTVBVIGFuZCBjbGVhbiBhbGwgcmVnaW9ucworICoKKyAqIFxwYXJhbVtpbl0gZGV2ICAgICAgICAgICAgTVBVIGRldmljZSBccmVmIG1wdV9hcm12OG1fZGV2X3QKKyAqCisgKiBccmV0dXJuIEVycm9yIGNvZGUgXHJlZiBhcm1fbXB1X2Vycm9yX3QKKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwuCisgKi8KK2VudW0gbXB1X2FybXY4bV9lcnJvcl90IG1wdV9hcm12OG1fY2xlYW4oc3RydWN0IG1wdV9hcm12OG1fZGV2X3QgKmRldik7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBNUFUgUmVnaW9uCisgKgorICogXHBhcmFtW2luXSBkZXYgICAgICAgICAgICBNUFUgZGV2aWNlIFxyZWYgbXB1X2FybXY4bV9kZXZfdAorICogXHBhcmFtW2luXSByZWdpb25fY2ZnICAgICBNUFUgcmVnaW9uIGNvbmZpZyBccmVmIG1wdV9hcm12OG1fcmVnaW9uX2NmZ190CisgKgorICogXHJldHVybiBFcnJvciBjb2RlIFxyZWYgYXJtX21wdV9lcnJvcl90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCitlbnVtIG1wdV9hcm12OG1fZXJyb3JfdCBtcHVfYXJtdjhtX3JlZ2lvbl9lbmFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtcHVfYXJtdjhtX2Rldl90ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtcHVfYXJtdjhtX3JlZ2lvbl9jZmdfdCAqcmVnaW9uX2NmZyk7CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgTVBVIFJlZ2lvbgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICAgICAgICAgICAgTVBVIGRldmljZSBccmVmIG1wdV9hcm12OG1fZGV2X3QKKyAqIFxwYXJhbVtpbl0gcmVnaW9uX25yICAgICAgICAgICAgUmVnaW9uIG51bWJlcgorICoKKyAqIFxyZXR1cm4gRXJyb3IgY29kZSBccmVmIGFybV9tcHVfZXJyb3JfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X2FybXY4bV9yZWdpb25fZGlzYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1wdV9hcm12OG1fZGV2X3QgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVnaW9uX25yKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fTVBVX0FSTVY4TV9EUlZfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvdGltZXJfY21zZGtfZHJ2LmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvdGltZXJfY21zZGtfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1ODZjNgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy90aW1lcl9jbXNka19kcnYuYwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE5IEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJOdU1pY3JvLmgiCisjaW5jbHVkZSAidGltZXJfY21zZGtfZHJ2LmgiCisKKwordm9pZCB0aW1lcl9jbXNka19pbml0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKworICAgIGlmIChkZXYtPmRhdGEtPmlzX2luaXRpYWxpemVkID09IDApCisgICAgeworCisgICAgICAgIE5WSUNfRW5hYmxlSVJRKFRNUjBfSVJRbik7CisgICAgICAgIE5WSUNfRW5hYmxlSVJRKFRNUjJfSVJRbik7CisKKyAgICAgICAgVElNRVJfT3Blbih0bXIsIFRJTUVSX1BFUklPRElDX01PREUsIDEwMDApOworICAgICAgICBkZXYtPmRhdGEtPmlzX2luaXRpYWxpemVkID0gMTsKKyAgICB9Cit9CisKK2Jvb2wgdGltZXJfY21zZGtfaXNfaW5pdGlhbGl6ZWQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgcmV0dXJuIGRldi0+ZGF0YS0+aXNfaW5pdGlhbGl6ZWQ7Cit9CisKK3ZvaWQgdGltZXJfY21zZGtfZW5hYmxlX2V4dGVybmFsX2lucHV0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKyAgICBUSU1FUl9FbmFibGVDYXB0dXJlKHRtciwgVElNRVJfQ0FQVFVSRV9DT1VOVEVSX1JFU0VUX01PREUsIFRJTUVSX0NBUFRVUkVfRVZFTlRfUklTSU5HKTsKK30KKwordm9pZCB0aW1lcl9jbXNka19kaXNhYmxlX2V4dGVybmFsX2lucHV0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKyAgICBUSU1FUl9EaXNhYmxlQ2FwdHVyZSh0bXIpOworfQorCitib29sIHRpbWVyX2Ntc2RrX2lzX2V4dGVybmFsX2lucHV0X2VuYWJsZWQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgcmV0dXJuICgoKChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZSktPkVYVENUTCAmIFRJTUVSX0VYVENUTF9DQVBFTl9Nc2spICE9IDApOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX3NldF9jbG9ja190b19pbnRlcm5hbChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisgICAgVElNRVJfRGlzYWJsZUV2ZW50Q291bnRlcih0bXIpOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX3NldF9jbG9ja190b19leHRlcm5hbChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisgICAgVElNRVJfRW5hYmxlRXZlbnRDb3VudGVyKHRtciwgVElNRVJfQ09VTlRFUl9FVkVOVF9SSVNJTkcpOworfQorCitib29sIHRpbWVyX2Ntc2RrX2lzX2Nsb2NrX2V4dGVybmFsKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIHJldHVybiAoKCgoVElNRVJfVCAqKWRldi0+Y2ZnLT5iYXNlKS0+Q1RMICYgVElNRVJfQ1RMX0VYVENOVEVOX01zaykgIT0gMCk7Cit9CisKK3ZvaWQgdGltZXJfY21zZGtfZW5hYmxlKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKyAgICBUSU1FUl9TdGFydCh0bXIpOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX2Rpc2FibGUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgVElNRVJfVCogdG1yID0gKFRJTUVSX1QqKWRldi0+Y2ZnLT5iYXNlOworICAgIFRJTUVSX1N0b3AodG1yKTsKK30KKworYm9vbCB0aW1lcl9jbXNka19pc19lbmFibGVkKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIHJldHVybiAoKCgoVElNRVJfVCAqKWRldi0+Y2ZnLT5iYXNlKS0+Q1RMICYgVElNRVJfQ1RMX0NOVEVOX01zaykgIT0gMCk7Cit9CisKK3ZvaWQgdGltZXJfY21zZGtfZW5hYmxlX2ludGVycnVwdChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBUSU1FUl9UKiB0bXIgPSAoVElNRVJfVCopZGV2LT5jZmctPmJhc2U7CisgICAgVElNRVJfRW5hYmxlSW50KHRtcik7Cit9CisKK3ZvaWQgdGltZXJfY21zZGtfZGlzYWJsZV9pbnRlcnJ1cHQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgVElNRVJfVCogdG1yID0gKFRJTUVSX1QqKWRldi0+Y2ZnLT5iYXNlOworICAgIFRJTUVSX0Rpc2FibGVJbnQodG1yKTsKK30KKworYm9vbCB0aW1lcl9jbXNka19pc19pbnRlcnJ1cHRfZW5hYmxlZChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICByZXR1cm4gKCgoKFRJTUVSX1QgKilkZXYtPmNmZy0+YmFzZSktPkNUTCAmIFRJTUVSX0NUTF9JTlRFTl9Nc2spICE9IDApOworfQorCitib29sIHRpbWVyX2Ntc2RrX2lzX2ludGVycnVwdF9hY3RpdmUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgcmV0dXJuICgoKChUSU1FUl9UICopZGV2LT5jZmctPmJhc2UpLT5JTlRTVFMgJiBUSU1FUl9JTlRTVFNfVElGX01zaykgIT0gMCk7Cit9CisKK3ZvaWQgdGltZXJfY21zZGtfY2xlYXJfaW50ZXJydXB0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKyAgICBUSU1FUl9DbGVhckludEZsYWcodG1yKTsKK30KKwordWludDMyX3QgdGltZXJfY21zZGtfZ2V0X2N1cnJlbnRfdmFsdWUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgVElNRVJfVCogdG1yID0gKFRJTUVSX1QqKWRldi0+Y2ZnLT5iYXNlOworICAgIHJldHVybiBUSU1FUl9HZXRDb3VudGVyKHRtcik7Cit9CisKK3ZvaWQgdGltZXJfY21zZGtfc2V0X3JlbG9hZF92YWx1ZShjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVsb2FkKQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKworICAgIC8qIHJlbG9hZCB2YWx1ZSBtdXN0ID4gMSAqLworICAgIGlmKHJlbG9hZCA8IDIpCisgICAgeworICAgICAgICByZWxvYWQgPSAyOworICAgIH0KKworICAgIFRJTUVSX1NFVF9DTVBfVkFMVUUodG1yLCByZWxvYWQpOworfQorCit2b2lkIHRpbWVyX2Ntc2RrX3Jlc2V0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KQoreworICAgIFRJTUVSX1QqIHRtciA9IChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZTsKKyAgICBUSU1FUl9SZXNldENvdW50ZXIodG1yKTsKK30KKwordWludDMyX3QgdGltZXJfY21zZGtfZ2V0X3JlbG9hZF92YWx1ZShjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICByZXR1cm4gKChUSU1FUl9UKilkZXYtPmNmZy0+YmFzZSktPkNNUDsKK30KKwordWludDMyX3QgdGltZXJfY21zZGtfZ2V0X2VsYXBzZWRfdmFsdWUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgVElNRVJfVCAqdG1yOworCisgICAgdG1yID0gKFRJTUVSX1QqKWRldi0+Y2ZnLT5iYXNlOworICAgIHJldHVybiB0bXItPkNNUCAtIHRtci0+Q05UOworfQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL3RpbWVyX2Ntc2RrX2Rydi5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL3RpbWVyX2Ntc2RrX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTlmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvdGltZXJfY21zZGtfZHJ2LmgKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOSBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fVElNRVJfQ01TREtfRFJWX0hfXworI2RlZmluZSBfX1RJTUVSX0NNU0RLX0RSVl9IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBNYXhpbXVtIHJlbG9hZCB2YWx1ZSAqLworI2RlZmluZSBUSU1FUl9DTVNES19NQVhfUkVMT0FEICAgICAgICBVSU5UMzJfTUFYIC8qIG1heCBvZiAzMi1iaXQgKi8KKyNkZWZpbmUgVElNRVJfQ01TREtfREVGQVVMVF9SRUxPQUQgICAgVElNRVJfQ01TREtfTUFYX1JFTE9BRAorCisvKiogQ01TREsgdGltZXIgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCitzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X2NmZ190IHsKKyAgICBjb25zdCB1aW50cHRyX3QgYmFzZTsgIC8qITwgVGltZXIgYmFzZSBhZGRyZXNzICovCit9OworCisvKiogQ01TREsgdGltZXIgZGV2aWNlIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X2RhdGFfdCB7CisgICAgYm9vbCBpc19pbml0aWFsaXplZDsgIC8qITwgSW5kaWNhdGVzIGlmIHRoZSB0aW1lciBpcyBpbml0aWFsaXplZCAqLworfTsKKworLyogQ01TREsgdGltZXIgZGV2aWNlIHN0cnVjdHVyZSAqLworc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90IHsKKyAgICBjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X2NmZ190KiBjb25zdCBjZmc7ICAvKiE8IFRpbWVyIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X2RhdGFfdCogY29uc3QgZGF0YTsgICAgICAvKiE8IFRpbWVyIGRhdGEgKi8KK307CisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemVzIHRpbWVyIHRvIGEga25vd24gZGVmYXVsdCBzdGF0ZSwgd2hpY2ggaXM6CisgKiAgICAgICAgICAtIHRpbWVyIGRpc2FibGVkCisgKiAgICAgICAgICAtIHRpbWVyIGludGVycnVwdCBkaXNhYmxlZAorICogICAgICAgICAgLSBjbG9jayBzb3VyY2Ugc2V0IHRvIGludGVybmFsCisgKiAgICAgICAgICAtIGV4dGVybmFsIGlucHV0IGRpc2FibGVkCisgKiAgICAgICAgICAtIHJlbG9hZCB2YWx1ZSBtYXhlZCBvdXQKKyAqICAgICAgICBJbml0IHNob3VsZCBiZSBjYWxsZWQgcHJpb3IgdG8gYW55IG90aGVyIHByb2Nlc3MgYW5kCisgKiAgICAgICAgaXQncyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZm9sbG93IHByb3BlciBjYWxsIG9yZGVyLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2IFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICovCit2b2lkIHRpbWVyX2Ntc2RrX2luaXQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBDaGVja3MgaWYgYSB0aW1lciBpcyBpbml0aWFsaXplZC4KKyAqCisgKiBccGFyYW1baW5dIGRldiBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgaW5pdGlhbGl6ZWQsIGZhbHNlIG90aGVyd2lzZQorICovCitib29sIHRpbWVyX2Ntc2RrX2lzX2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlcyBleHRlcm5hbCBpbnB1dCwgd2hpY2ggY291bGQgYmUgdXNlZCBhcyBjbG9jayBzb3VyY2UKKyAqICAgICAgICBieSBjYWxsaW5nIFxyZWYgdGltZXJfY21zZGtfc2V0X2Nsb2NrX3RvX2V4dGVybmFsLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqLwordm9pZCB0aW1lcl9jbXNka19lbmFibGVfZXh0ZXJuYWxfaW5wdXQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlcyBleHRlcm5hbCBpbnB1dC4KKyAqICAgICAgICBNYWtlIHN1cmUgaWYgdGhlIHRpbWVyIGlzIGV4cGxpY2l0bHkgd2FudGVkIHRvIGJlIHN0b3BwZWQgb3Igc2V0CisgKiAgICAgICAgdGhlIGNsb2NrIHNvdXJjZSB0byBpbnRlcm5hbCBieSBccmVmIHRpbWVyX2Ntc2RrX3NldF9jbG9ja190b19pbnRlcm5hbC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKi8KK3ZvaWQgdGltZXJfY21zZGtfZGlzYWJsZV9leHRlcm5hbF9pbnB1dChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIENoZWNrcyBpZiBleHRlcm5hbCBpbnB1dCBpcyBlbmFibGVkLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK2Jvb2wgdGltZXJfY21zZGtfaXNfZXh0ZXJuYWxfaW5wdXRfZW5hYmxlZChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIFNldHMgdGhlIGNsb2NrIHNvdXJjZSB0byBpbnRlcm5hbC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKi8KK3ZvaWQgdGltZXJfY21zZGtfc2V0X2Nsb2NrX3RvX2ludGVybmFsKGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgU2V0cyB0aGUgY2xvY2sgc291cmNlIHRvIGV4dGVybmFsLgorICogICAgICAgIE1ha2Ugc3VyZSBleHRlcm5hbCBpbnB1dCBpcyBlbmFibGVkIGNvcnJlc3BvbmRpbmdseQorICogICAgICAgIGJ5IFxyZWYgdGltZXJfY21zZGtfZW5hYmxlX2V4dGVybmFsX2lucHV0LgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqLwordm9pZCB0aW1lcl9jbXNka19zZXRfY2xvY2tfdG9fZXh0ZXJuYWwoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBDaGVja3MgaWYgY2xvY2sgc291cmNlIGlzIGV4dGVybmFsIGlucHV0LgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgZXh0ZXJuYWwsIGZhbHNlIGlmIGludGVybmFsCisgKi8KK2Jvb2wgdGltZXJfY21zZGtfaXNfY2xvY2tfZXh0ZXJuYWwoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBFbmFibGVzIHRpbWVyIG9wZXJhdGlvbi4KKyAqCisgKiBccGFyYW1baW5dIGRldiBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqLwordm9pZCB0aW1lcl9jbXNka19lbmFibGUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlcyB0aGUgZ2l2ZW4gaGFyZHdhcmUgdGltZXIuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICovCit2b2lkIHRpbWVyX2Ntc2RrX2Rpc2FibGUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBDaGVja3MgaWYgYSB0aW1lciBpcyBlbmFibGVkLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK2Jvb2wgdGltZXJfY21zZGtfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZXMgdGltZXIgaW50ZXJydXB0LgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICAgICAgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICovCit2b2lkIHRpbWVyX2Ntc2RrX2VuYWJsZV9pbnRlcnJ1cHQoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlcyB0aW1lciBpbnRlcnJ1cHQuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICovCit2b2lkIHRpbWVyX2Ntc2RrX2Rpc2FibGVfaW50ZXJydXB0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2tzIGlmIGEgdGltZXIgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UKKyAqLworYm9vbCB0aW1lcl9jbXNka19pc19pbnRlcnJ1cHRfZW5hYmxlZChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGltZXIgaW50ZXJydXB0IHN0YXR1cworICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqCisgKiAqIFxyZXR1cm4gdHJ1ZSBpZiBhY3RpdmUsIGZhbHNlIG90aGVyd2lzZQorICovCitib29sIHRpbWVyX2Ntc2RrX2lzX2ludGVycnVwdF9hY3RpdmUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBDbGVhcnMgdGltZXIgaW50ZXJydXB0CisgKiAgICAgICAgVGhlIGludGVycnVwdCByZXF1ZXN0IGlzIGhlbGQgdW50aWwgaXQgaXMgY2xlYXJlZC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKi8KK3ZvaWQgdGltZXJfY21zZGtfY2xlYXJfaW50ZXJydXB0KGNvbnN0IHN0cnVjdCB0aW1lcl9jbXNka19kZXZfdCogZGV2KTsKKworLyoqCisgKiBcYnJpZWYgUmVhZHMgdGltZXIgY3VycmVudCB2YWx1ZS4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiBUaW1lciB2YWx1ZQorICovCit1aW50MzJfdCB0aW1lcl9jbXNka19nZXRfY3VycmVudF92YWx1ZShjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIFNldHMgdGhlIHJlbG9hZCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgdGltZXIuCisgKgorICogICAgICAgIE5ldyByZWxvYWQgdmFsdWUgdGFrZXMgZWZmZWN0IHdoZW46CisgKiAgICAgICAgLSB0aW1lciBpcyByZXN0YXJ0ZWQKKyAqICAgICAgICAtIG9uIHRpbWVyIHVuZGVyZmxvdworICogICAgICAgIC0gd2hlbiB0aW1lcl9jbXNka19yZXNldCBpcyBjYWxsZWQKKyAqCisgKiBcbm90ZSAgSW4gcjFwMCB0ZWNobmljYWwgcmVmZXJlbmNlIG1hbnVhbCBpdCdzIGluY29ycmVjdGx5IHN0YXRlZAorICogICAgICAgIHdyaXRpbmcgdGhlIHJlbG9hZCB2YWx1ZSBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIGN1cnJlbnQgdmFsdWUgYWxzby4KKyAqICAgICAgICByMXAxIHRlY2huaWNhbCByZWZlcmVuY2UgbWFudWFsIGluY2x1ZGVzIHRoZSBmaXguCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICogXHBhcmFtW2luXSByZWxvYWQgVGltZXIgcmVsb2FkIHZhbHVlIHRvIHNldC4KKyAqICAgICAgICAgICAgVGhpcyBpcyB0aGUgc3RhcnQgdmFsdWUgb2YgdGhlIDMyLWJpdCBkb3duIGNvdW50ZXIsCisgKiAgICAgICAgICAgIHdoaWNoIGF1dG9tYXRpY2FsbHkgcmVsb2FkZWQgaWYgMCBpcyByZWFjaGVkLgorICovCit2b2lkIHRpbWVyX2Ntc2RrX3NldF9yZWxvYWRfdmFsdWUoY29uc3Qgc3RydWN0IHRpbWVyX2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVsb2FkKTsKKworLyoqCisgKiBcYnJpZWYgUmVzZXRzIHRoZSB0aW1lciBjb3VudGVyIHRvIHRoZSByZWxvYWQgdmFsdWUgaW5zdGFudGx5CisgKiAgICAgICAgKGkuZS4gd2l0aG91dCB3YWl0aW5nIGZvciB1bmRlcmZsb3cpLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBUaW1lciBjb25maWd1cmF0aW9uIFxyZWYgdGltZXJfY21zZGtfZGV2X3QKKyAqLwordm9pZCB0aW1lcl9jbXNka19yZXNldChjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIHJlbG9hZCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgdGltZXIuCisgKiAgICAgICAgVGhpcyBpcyB0aGUgc3RhcnQgdmFsdWUgb2YgdGhlIDMyLWJpdCBkb3duIGNvdW50ZXIsCisgKiAgICAgICAgd2hpY2ggaXMgYXV0b21hdGljYWxseSByZWxvYWRlZCBpZiAwIGlzIHJlYWNoZWQgYnkgdGhlIGNvdW50ZXIuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFRpbWVyIGNvbmZpZ3VyYXRpb24gXHJlZiB0aW1lcl9jbXNka19kZXZfdAorICoKKyAqIFxyZXR1cm4gUmVsb2FkIHZhbHVlIG9mIHRoZSBzZWxlY3RlZCB0aW1lci4KKyAqLwordWludDMyX3QgdGltZXJfY21zZGtfZ2V0X3JlbG9hZF92YWx1ZShjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIFJlYWRzIHRoZSBudW1iZXIgb2YgdGlja3MgZWxhcHNlZCBpbiB0aGUgY3VycmVudCBjeWNsZS4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVGltZXIgY29uZmlndXJhdGlvbiBccmVmIHRpbWVyX2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiBHZXQgZWxhcHNlZCBudW1iZXIgb2YgdGlja3Mgc2luY2UgbGFzdCByZWxvYWQgd2FzIHNldC4KKyAqICAgICAgICAgRWxhcHNlZCA9IChSZWxvYWQgdmFsdWUgLSBDdXJyZW50IHZhbHVlKQorICovCit1aW50MzJfdCB0aW1lcl9jbXNka19nZXRfZWxhcHNlZF92YWx1ZShjb25zdCBzdHJ1Y3QgdGltZXJfY21zZGtfZGV2X3QqIGRldik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogX19USU1FUl9DTVNES19EUlZfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvdWFydF9jbXNka19kcnYuYyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy91YXJ0X2Ntc2RrX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZDEyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvbmF0aXZlX2RyaXZlcnMvdWFydF9jbXNka19kcnYuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE5IEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJ1YXJ0X2Ntc2RrX2Rydi5oIgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIFVBUlQgcmVnaXN0ZXIgbWFwIHN0cnVjdHVyZSAqLworc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCB7CisgICAgdm9sYXRpbGUgdWludDMyX3QgZGF0YTsgICAvKiBPZmZzZXQ6IDB4MDAwIChSL1cpIGRhdGEgcmVnaXN0ZXIgICAgKi8KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBzdGF0ZTsgIC8qIE9mZnNldDogMHgwMDQgKFIvVykgc3RhdHVzIHJlZ2lzdGVyICAqLworICAgIHZvbGF0aWxlIHVpbnQzMl90IGN0cmw7ICAgLyogT2Zmc2V0OiAweDAwOCAoUi9XKSBjb250cm9sIHJlZ2lzdGVyICovCisgICAgdW5pb24geworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCBpbnRyc3RhdHVzOyAgLyogT2Zmc2V0OiAweDAwYyAoUi8gKSBpbnRlcnJ1cHQgc3RhdHVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgaW50cmNsZWFyOyAgIC8qIE9mZnNldDogMHgwMGMgKCAvVykgaW50ZXJydXB0IGNsZWFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB9aW50cl9yZWc7CisgICAgdm9sYXRpbGUgdWludDMyX3QgYmF1ZGRpdjsgICAgICAgIC8qIE9mZnNldDogMHgwMTAgKFIvVykgQmF1ZHJhdGUgZGl2aWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfTsKKworLyogQ1RSTCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0NNU0RLX1RYX0VOICAgICAgICgxdWwgPDwgMCkKKyNkZWZpbmUgVUFSVF9DTVNES19SWF9FTiAgICAgICAoMXVsIDw8IDEpCisjZGVmaW5lIFVBUlRfQ01TREtfVFhfSU5UUl9FTiAgKDF1bCA8PCAyKQorI2RlZmluZSBVQVJUX0NNU0RLX1JYX0lOVFJfRU4gICgxdWwgPDwgMykKKworLyogU1RBVEUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9DTVNES19UWF9CRiAgKDF1bCA8PCAwKQorI2RlZmluZSBVQVJUX0NNU0RLX1JYX0JGICAoMXVsIDw8IDEpCisKKy8qIElOVFNUQVRVUyBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX0NNU0RLX1RYX0lOVFIgICgxdWwgPDwgMCkKKyNkZWZpbmUgVUFSVF9DTVNES19SWF9JTlRSICAoMXVsIDw8IDEpCisKKy8qIFVBUlQgc3RhdGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVUFSVF9DTVNES19JTklUSUFMSVpFRCAgKDF1bCA8PCAwKQorCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX2luaXQoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN5c3RlbV9jbGspCit7CisgICAgc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCogcF91YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KilkZXYtPmNmZy0+YmFzZTsKKyAgICBpZihzeXN0ZW1fY2xrID09IDApIHsKKyAgICAgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX0lOVkFMSURfQVJHOworICAgIH0KKworICAgIC8qIFNldHMgYmF1ZHJhdGUgYW5kIHN5c3RlbSBjbG9jayAqLworICAgIGRldi0+ZGF0YS0+c3lzdGVtX2NsayA9IHN5c3RlbV9jbGs7CisgICAgZGV2LT5kYXRhLT5iYXVkcmF0ZSA9IGRldi0+Y2ZnLT5kZWZhdWx0X2JhdWRyYXRlOworCisgICAgLyogU2V0cyBiYXVkcmF0ZSAqLworICAgIHBfdWFydC0+YmF1ZGRpdiA9IChkZXYtPmRhdGEtPnN5c3RlbV9jbGsgLyBkZXYtPmNmZy0+ZGVmYXVsdF9iYXVkcmF0ZSk7CisKKyAgICAvKiBFbmFibGVzIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciAqLworICAgIHBfdWFydC0+Y3RybCA9IFVBUlRfQ01TREtfUlhfRU4gfCBVQVJUX0NNU0RLX1RYX0VOOworCisgICAgZGV2LT5kYXRhLT5zdGF0ZSA9IFVBUlRfQ01TREtfSU5JVElBTElaRUQ7CisKKyAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9ORTsKK30KKworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka19zZXRfYmF1ZHJhdGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmF1ZHJhdGUpCit7CisgICAgdWludDMyX3QgYmF1ZGRpdjsKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoYmF1ZHJhdGUgPT0gMCkgeworICAgICAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfSU5WQUxJRF9CQVVEOworICAgIH0KKworICAgIGlmKCEoZGV2LT5kYXRhLT5zdGF0ZSAmIFVBUlRfQ01TREtfSU5JVElBTElaRUQpKSB7CisgICAgICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9OT1RfSU5JVDsKKyAgICB9CisKKyAgICAvKiBTZXRzIGJhdWRyYXRlICovCisgICAgYmF1ZGRpdiA9IChkZXYtPmRhdGEtPnN5c3RlbV9jbGsgLyBiYXVkcmF0ZSk7CisgICAgZGV2LT5kYXRhLT5iYXVkcmF0ZSA9IGJhdWRyYXRlOworCisgICAgLyogTWluaW11bSBiYXVkZGl2IHZhbHVlICovCisgICAgaWYoYmF1ZGRpdiA8IDE2KSB7CisgICAgICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9JTlZBTElEX0JBVUQ7CisgICAgfQorCisgICAgcF91YXJ0LT5iYXVkZGl2ID0gYmF1ZGRpdjsKKworICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9OT05FOworfQorCit1aW50MzJfdCB1YXJ0X2Ntc2RrX2dldF9iYXVkcmF0ZShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2KQoreworICAgIHJldHVybiBkZXYtPmRhdGEtPmJhdWRyYXRlOworfQorCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX3NldF9jbG9jayhzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzeXN0ZW1fY2xrKQoreworICAgIHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqIHBfdWFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCopZGV2LT5jZmctPmJhc2U7CisKKyAgICBpZihzeXN0ZW1fY2xrID09IDApIHsKKyAgICAgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX0lOVkFMSURfQVJHOworICAgIH0KKworICAgIGlmKCEoZGV2LT5kYXRhLT5zdGF0ZSAmIFVBUlRfQ01TREtfSU5JVElBTElaRUQpKSB7CisgICAgICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9OT1RfSU5JVDsKKyAgICB9CisKKyAgICAvKiBTZXRzIHN5c3RlbSBjbG9jayAqLworICAgIGRldi0+ZGF0YS0+c3lzdGVtX2NsayA9IHN5c3RlbV9jbGs7CisKKyAgICAvKiBVcGRhdGVzIGJhdWRyYXRlIGRpdmlkZXIgKi8KKyAgICBwX3VhcnQtPmJhdWRkaXYgPSAoZGV2LT5kYXRhLT5zeXN0ZW1fY2xrIC8gZGV2LT5kYXRhLT5iYXVkcmF0ZSk7CisKKyAgICAvKiBFbmFibGVzIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciAqLworICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9OT05FOworfQorCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX3JlYWQoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogYnl0ZSkKK3sKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoIShwX3VhcnQtPnN0YXRlICYgVUFSVF9DTVNES19SWF9CRikpIHsKKyAgICAgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX05PVF9SRUFEWTsKKyAgICB9CisKKyAgICAvKiBSZWFkcyBkYXRhICovCisgICAgKmJ5dGUgPSAodWludDhfdClwX3VhcnQtPmRhdGE7CisKKyAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9ORTsKK30KKworZW51bSB1YXJ0X2Ntc2RrX2Vycm9yX3QgdWFydF9jbXNka193cml0ZShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBieXRlKQoreworICAgIHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqIHBfdWFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCopZGV2LT5jZmctPmJhc2U7CisKKyAgICBpZihwX3VhcnQtPnN0YXRlICYgVUFSVF9DTVNES19UWF9CRikgeworICAgICAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9UX1JFQURZOworICAgIH0KKworICAgIC8qIFNlbmRzIGRhdGEgKi8KKyAgICBwX3VhcnQtPmRhdGEgPSBieXRlOworCisgICAgcmV0dXJuIFVBUlRfQ01TREtfRVJSX05PTkU7Cit9CisKK2VudW0gdWFydF9jbXNka19lcnJvcl90IHVhcnRfY21zZGtfaXJxX3R4X2VuYWJsZShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2KQoreworICAgIHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqIHBfdWFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCopZGV2LT5jZmctPmJhc2U7CisKKyAgICBpZighKGRldi0+ZGF0YS0+c3RhdGUgJiBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEKSkgeworICAgICAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9UX0lOSVQ7CisgICAgfQorCisgICAgcF91YXJ0LT5jdHJsIHw9IFVBUlRfQ01TREtfVFhfSU5UUl9FTjsKKworICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9OT05FOworfQorCit2b2lkIHVhcnRfY21zZGtfaXJxX3R4X2Rpc2FibGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoZGV2LT5kYXRhLT5zdGF0ZSAmIFVBUlRfQ01TREtfSU5JVElBTElaRUQgKSB7CisgICAgICAgIHBfdWFydC0+Y3RybCAmPSB+VUFSVF9DTVNES19UWF9JTlRSX0VOOworICAgIH0KK30KKwordWludDMyX3QgdWFydF9jbXNka190eF9yZWFkeShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2KQoreworICAgIHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqIHBfdWFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCopZGV2LT5jZmctPmJhc2U7CisKKyAgICBpZighKGRldi0+ZGF0YS0+c3RhdGUgJiBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gIShwX3VhcnQtPnN0YXRlICYgVUFSVF9DTVNES19UWF9CRik7Cit9CisKK2VudW0gdWFydF9jbXNka19lcnJvcl90IHVhcnRfY21zZGtfaXJxX3J4X2VuYWJsZShzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2KQoreworICAgIHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqIHBfdWFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCopZGV2LT5jZmctPmJhc2U7CisKKyAgICBpZighKGRldi0+ZGF0YS0+c3RhdGUgJiBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEKSkgeworICAgICAgICByZXR1cm4gVUFSVF9DTVNES19FUlJfTk9UX0lOSVQ7CisgICAgfQorCisgICAgcF91YXJ0LT5jdHJsIHw9IFVBUlRfQ01TREtfUlhfSU5UUl9FTjsKKworICAgIHJldHVybiBVQVJUX0NNU0RLX0VSUl9OT05FOworfQorCit2b2lkIHVhcnRfY21zZGtfaXJxX3J4X2Rpc2FibGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoZGV2LT5kYXRhLT5zdGF0ZSAmIFVBUlRfQ01TREtfSU5JVElBTElaRUQpIHsKKyAgICAgICAgcF91YXJ0LT5jdHJsICY9IH5VQVJUX0NNU0RLX1JYX0lOVFJfRU47CisgICAgfQorfQorCit1aW50MzJfdCB1YXJ0X2Ntc2RrX3J4X3JlYWR5KHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpCit7CisgICAgc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCogcF91YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IF91YXJ0X2Ntc2RrX3JlZ19tYXBfdCopZGV2LT5jZmctPmJhc2U7CisKKyAgICBpZighKGRldi0+ZGF0YS0+c3RhdGUgJiBVQVJUX0NNU0RLX0lOSVRJQUxJWkVEKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gKHBfdWFydC0+c3RhdGUgJiBVQVJUX0NNU0RLX1JYX0JGKTsKK30KKwordm9pZCB1YXJ0X2Ntc2RrX2NsZWFyX2ludGVycnVwdChzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB1YXJ0X2Ntc2RrX2lycV90IGlycSkKK3sKKyAgICBzdHJ1Y3QgX3VhcnRfY21zZGtfcmVnX21hcF90KiBwX3VhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfdWFydF9jbXNka19yZWdfbWFwX3QqKWRldi0+Y2ZnLT5iYXNlOworCisgICAgaWYoZGV2LT5kYXRhLT5zdGF0ZSAmIFVBUlRfQ01TREtfSU5JVElBTElaRUQpIHsKKyAgICAgICAgLyogQ2xlYXJzIHBlbmRpbmcgaW50ZXJydXB0cyAqLworICAgICAgICBzd2l0Y2goaXJxKSB7CisgICAgICAgIGNhc2UgVUFSVF9DTVNES19JUlFfUlg6CisgICAgICAgICAgICBwX3VhcnQtPmludHJfcmVnLmludHJjbGVhciA9IFVBUlRfQ01TREtfUlhfSU5UUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVBUlRfQ01TREtfSVJRX1RYOgorICAgICAgICAgICAgcF91YXJ0LT5pbnRyX3JlZy5pbnRyY2xlYXIgPSBVQVJUX0NNU0RLX1RYX0lOVFI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQVJUX0NNU0RLX0lSUV9DT01CSU5FRDoKKyAgICAgICAgICAgIHBfdWFydC0+aW50cl9yZWcuaW50cmNsZWFyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVBUlRfQ01TREtfUlhfSU5UUiB8IFVBUlRfQ01TREtfVFhfSU5UUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogZGVmYXVsdDogbm90IGRlZmluZWQgdG8gZm9yY2UgYWxsIGNhc2VzIHRvIGJlIGhhbmRsZWQgKi8KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy91YXJ0X2Ntc2RrX2Rydi5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL25hdGl2ZV9kcml2ZXJzL3VhcnRfY21zZGtfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzMjc4ZQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9uYXRpdmVfZHJpdmVycy91YXJ0X2Ntc2RrX2Rydi5oCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTkgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBcZmlsZSB1YXJ0X2Ntc2RrX2Rydi5oCisgKiBcYnJpZWYgR2VuZXJpYyBkcml2ZXIgZm9yIEFSTSBVQVJULgorICovCisKKyNpZm5kZWYgX19VQVJUX0NNU0RLX0RSVl9IX18KKyNkZWZpbmUgX19VQVJUX0NNU0RLX0RSVl9IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEFSTSBVQVJUIGRldmljZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworc3RydWN0IHVhcnRfY21zZGtfZGV2X2NmZ190IHsKKyAgICBjb25zdCB1aW50MzJfdCBiYXNlOyAgICAgICAgICAgICAgLyohPCBVQVJUIGJhc2UgYWRkcmVzcyAqLworICAgIGNvbnN0IHVpbnQzMl90IGRlZmF1bHRfYmF1ZHJhdGU7ICAvKiE8IERlZmF1bHQgYmF1ZHJhdGUgKi8KK307CisKKy8qIEFSTSBVQVJUIGRldmljZSBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IHVhcnRfY21zZGtfZGV2X2RhdGFfdCB7CisgICAgdWludDMyX3Qgc3RhdGU7ICAgICAgIC8qITwgSW5kaWNhdGVzIGlmIHRoZSB1YXJ0IGRyaXZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGlzIGluaXRpYWxpemVkIGFuZCBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVpbnQzMl90IHN5c3RlbV9jbGs7ICAvKiE8IFN5c3RlbSBjbG9jayAqLworICAgIHVpbnQzMl90IGJhdWRyYXRlOyAgICAvKiE8IEJhdWRyYXRlICovCit9OworCisvKiBBUk0gVUFSVCBkZXZpY2Ugc3RydWN0dXJlICovCitzdHJ1Y3QgdWFydF9jbXNka19kZXZfdCB7CisgICAgY29uc3Qgc3RydWN0IHVhcnRfY21zZGtfZGV2X2NmZ190KiBjb25zdCBjZmc7ICAvKiE8IFVBUlQgY29uZmlndXJhdGlvbiAqLworICAgIHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl9kYXRhX3QqIGNvbnN0IGRhdGE7ICAgICAgLyohPCBVQVJUIGRhdGEgKi8KK307CisKKy8qIEFSTSBVQVJUIGVudW1lcmF0aW9uIHR5cGVzICovCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB7CisgICAgVUFSVF9DTVNES19FUlJfTk9ORSA9IDAsICAgICAgLyohPCBObyBlcnJvciAqLworICAgIFVBUlRfQ01TREtfRVJSX0lOVkFMSURfQVJHLCAgIC8qITwgRXJyb3IgaW52YWxpZCBpbnB1dCBhcmd1bWVudCAqLworICAgIFVBUlRfQ01TREtfRVJSX0lOVkFMSURfQkFVRCwgIC8qITwgSW52YWxpZCBiYXVkcmF0ZSAqLworICAgIFVBUlRfQ01TREtfRVJSX05PVF9JTklULCAgICAgIC8qITwgRXJyb3IgVUFSVCBub3QgaW5pdGlhbGl6ZWQgKi8KKyAgICBVQVJUX0NNU0RLX0VSUl9OT1RfUkVBRFksICAgICAvKiE8IEVycm9yIFVBUlQgbm90IHJlYWR5ICovCit9OworCitlbnVtIHVhcnRfY21zZGtfaXJxX3QgeworICAgIFVBUlRfQ01TREtfSVJRX1JYLCAgICAgICAvKiE8IFJYIGludGVycnVwdCBzb3VyY2UgKi8KKyAgICBVQVJUX0NNU0RLX0lSUV9UWCwgICAgICAgLyohPCBUWCBpbnRlcnJ1cHQgc291cmNlICovCisgICAgVUFSVF9DTVNES19JUlFfQ09NQklORUQgIC8qITwgUlgtVFggY29tYmluZWQgaW50ZXJydXB0IHNvdXJjZSAqLworfTsKKworLyoqCisgKiBcYnJpZWYgSW5pdGlhbGl6ZXMgVUFSVC4gSXQgdXNlcyB0aGUgZGVmYXVsdCBiYXVkcmF0ZSB0byBjb25maWd1cmUKKyAqIHRoZSBwZXJpcGhlcmFsIGF0IHRoaXMgcG9pbnQuCisgKgorICogXHBhcmFtW2luXSBkZXYgICAgICAgICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKiBccGFyYW1baW5dIHN5c3RlbV9jbGsgIFN5c3RlbSBjbG9jayB1c2VkIGJ5IHRoZSBkZXZpY2UuCisgKgorICogXHJldHVybiBSZXR1cm5zIGVycm9yIGNvZGUgYXMgc3BlY2lmaWVkIGluIFxyZWYgdWFydF9jbXNka19lcnJvcl90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX2luaXQoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN5c3RlbV9jbGspOworCisvKioKKyAqIFxicmllZiBTZXRzIHRoZSBVQVJUIGJhdWRyYXRlLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICAgICAgIFVBUlQgZGV2aWNlIHN0cnVjdCBccmVmIHVhcnRfY21zZGtfZGV2X3QKKyAqIFxwYXJhbVtpbl0gYmF1ZHJhdGUgIE5ldyBiYXVkcmF0ZS4KKyAqCisgKiBccmV0dXJuIFJldHVybnMgZXJyb3IgY29kZSBhcyBzcGVjaWZpZWQgaW4gXHJlZiB1YXJ0X2Ntc2RrX2Vycm9yX3QKKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwuCisgKi8KK2VudW0gdWFydF9jbXNka19lcnJvcl90IHVhcnRfY21zZGtfc2V0X2JhdWRyYXRlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJhdWRyYXRlKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgVUFSVCBiYXVkcmF0ZS4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVUFSVCBkZXZpY2Ugc3RydWN0IFxyZWYgdWFydF9jbXNka19kZXZfdAorICoKKyAqIFxyZXR1cm4gUmV0dXJucyB0aGUgVUFSVCBiYXVkcmF0ZS4KKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwuCisgKi8KK3VpbnQzMl90IHVhcnRfY21zZGtfZ2V0X2JhdWRyYXRlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiBTZXRzIHN5c3RlbSBjbG9jay4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgICAgICAgIFVBUlQgZGV2aWNlIHN0cnVjdCBccmVmIHVhcnRfY21zZGtfZGV2X3QKKyAqIFxwYXJhbVtpbl0gc3lzdGVtX2NsayAgU3lzdGVtIGNsb2NrIHVzZWQgYnkgdGhlIGRldmljZS4KKyAqCisgKiBccmV0dXJuIFJldHVybnMgZXJyb3IgY29kZSBhcyBzcGVjaWZpZWQgaW4gXHJlZiB1YXJ0X2Ntc2RrX2Vycm9yX3QKKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwuCisgKi8KK2VudW0gdWFydF9jbXNka19lcnJvcl90IHVhcnRfY21zZGtfc2V0X2Nsb2NrKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN5c3RlbV9jbGspOworLyoqCisgKiBcYnJpZWYgUmVhZHMgb25lIGJ5dGUgZnJvbSBVQVJUIGRldi4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgIFVBUlQgZGV2aWNlIHN0cnVjdCBccmVmIHVhcnRfY21zZGtfZGV2X3QKKyAqIFxwYXJhbVtpbl0gYnl0ZSAgUG9pbnRlciB0byBieXRlLgorICoKKyAqIFxyZXR1cm4gUmV0dXJucyBlcnJvciBjb2RlIGFzIHNwZWNpZmllZCBpbiBccmVmIHVhcnRfY21zZGtfZXJyb3JfdAorICoKKyAqIFxub3RlIEZvciBiZXR0ZXIgcGVyZm9ybWFuY2UsIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgYW5kIGJ5dGUKKyAqIHBvaW50ZXIgYXJlIE5VTEwsIGFuZCBpZiB0aGUgZHJpdmVyIGlzIGluaXRpYWxpemVkLgorICovCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX3JlYWQoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBieXRlKTsKKworLyoqCisgKiBcYnJpZWYgV3JpdGVzIGEgYnl0ZSB0byBVQVJUIGRldi4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgIFVBUlQgZGV2aWNlIHN0cnVjdCBccmVmIHVhcnRfY21zZGtfZGV2X3QKKyAqIFxwYXJhbVtpbl0gYnl0ZSAgQnl0ZSB0byB3cml0ZS4KKyAqCisgKiBccmV0dXJuIFJldHVybnMgZXJyb3IgY29kZSBhcyBzcGVjaWZpZWQgaW4gXHJlZiB1YXJ0X2Ntc2RrX2Vycm9yX3QKKyAqCisgKiBcbm90ZSBGb3IgYmV0dGVyIHBlcmZvcm1hbmNlLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwgYW5kCisgKiBpZiB0aGUgZHJpdmVyIGlzIGluaXRpYWxpemVkIHRvIGhhdmUgYmV0dGVyIHBlcmZvcm1hbmNlLgorICovCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX3dyaXRlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZSk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZXMgVFggaW50ZXJydXB0LgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiBSZXR1cm5zIGVycm9yIGNvZGUgYXMgc3BlY2lmaWVkIGluIFxyZWYgdWFydF9jbXNka19lcnJvcl90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX2lycV90eF9lbmFibGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIERpc2FibGVzIFRYIGludGVycnVwdC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVUFSVCBkZXZpY2Ugc3RydWN0IFxyZWYgdWFydF9jbXNka19kZXZfdAorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpZiBkZXYgaXMgTlVMTC4KKyAqLwordm9pZCB1YXJ0X2Ntc2RrX2lycV90eF9kaXNhYmxlKHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYpOworCisvKioKKyAqIFxicmllZiAgVmVyaWZpZXMgaWYgVHggaXMgcmVhZHkgdG8gc2VuZCBtb3JlIGRhdGEuCisgKgorICogXHBhcmFtW2luXSBkZXYgIFVBUlQgZGV2aWNlIHN0cnVjdCBccmVmIHVhcnRfY21zZGtfZGV2X3QKKyAqCisgKiBccmV0dXJuICAxIGlmIFRYIGlzIHJlYWR5LCAwIG90aGVyd2lzZS4KKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwuCisgKi8KK3VpbnQzMl90IHVhcnRfY21zZGtfdHhfcmVhZHkoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZXMgUlggaW50ZXJydXB0LgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiBSZXR1cm5zIGVycm9yIGNvZGUgYXMgc3BlY2lmaWVkIGluIFxyZWYgdWFydF9jbXNka19lcnJvcl90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCitlbnVtIHVhcnRfY21zZGtfZXJyb3JfdCB1YXJ0X2Ntc2RrX2lycV9yeF9lbmFibGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIERpc2FibGVzIFJYIGludGVycnVwdAorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCit2b2lkIHVhcnRfY21zZGtfaXJxX3J4X2Rpc2FibGUoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIFZlcmlmaWVzIGlmIFJ4IGhhcyBkYXRhLgorICoKKyAqIFxwYXJhbVtpbl0gZGV2ICBVQVJUIGRldmljZSBzdHJ1Y3QgXHJlZiB1YXJ0X2Ntc2RrX2Rldl90CisgKgorICogXHJldHVybiAxIGlmIFJYIGhhcyBkYXRhLCAwIG90aGVyd2lzZS4KKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaWYgZGV2IGlzIE5VTEwuCisgKi8KK3VpbnQzMl90IHVhcnRfY21zZGtfcnhfcmVhZHkoc3RydWN0IHVhcnRfY21zZGtfZGV2X3QqIGRldik7CisKKy8qKgorICogXGJyaWVmIENsZWFycyBVQVJUIGludGVycnVwdC4KKyAqCisgKiBccGFyYW1baW5dIGRldiAgVUFSVCBkZXZpY2Ugc3RydWN0IFxyZWYgdWFydF9jbXNka19kZXZfdAorICogXHBhcmFtW2luXSBpcnEgIElSUSBzb3VyY2UgdG8gY2xlYW4gXHJlZiB1YXJ0X2Ntc2RrX2lycV90CisgKgorICogXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNoZWNrIGlmIGRldiBpcyBOVUxMLgorICovCit2b2lkIHVhcnRfY21zZGtfY2xlYXJfaW50ZXJydXB0KHN0cnVjdCB1YXJ0X2Ntc2RrX2Rldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHVhcnRfY21zZGtfaXJxX3QgaXJxKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiBfX1VBUlRfQ01TREtfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3BhcnRpdGlvbi9mbGFzaF9sYXlvdXQuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wYXJ0aXRpb24vZmxhc2hfbGF5b3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2ZWRkOQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wYXJ0aXRpb24vZmxhc2hfbGF5b3V0LmgKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fRkxBU0hfTEFZT1VUX0hfXworI2RlZmluZSBfX0ZMQVNIX0xBWU9VVF9IX18KKworLyogRmxhc2ggbGF5b3V0IG9uIE0yMzUxIHdpdGggQkwyIChzaW5nbGUgaW1hZ2UgYm9vdCk6CisgKgorICogMHgwMDAwXzAwMDAgQkwyIC0gTUNVQm9vdCAoMzJLQikKKyAqIDB4MDAwMF84MDAwIFByb3RlY3RlZCBTdG9yYWdlIEFyZWEgKDE2IEtCKQorICogMHgwMDAwX0MwMDAgSW50ZXJuYWwgVHJ1c3RlZCBTdG9yYWdlIEFyZWEgKDEyIEtCKQorICogMHgwMDAwX0YwMDAgTlYgY291bnRlcnMgYXJlYSAoNCBLQikKKyAqIDB4MDAwMV8wMDAwIFByaW1hcnkgaW1hZ2UgYXJlYSAoMjU2S0IpOgorICogICAgMHgwMDAxXzAwMDAgU2VjdXJlICAgICBpbWFnZSBwcmltYXJ5CisgKiAgICAweDAwMDVfMDAwMCBOb24tc2VjdXJlIGltYWdlIHByaW1hcnkKKyAqIDB4MDAxMF8wMDAwIFNjcmF0Y2ggYXJlYSAoNEtCKQorICoKKyAqLworCisvKiBUaGlzIGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkIGZyb20gbGlua2VyIHNjYXR0ZXIgZmlsZSBhcyB3ZWxsLCB3aGVyZSBvbmx5IGEKKyAqIGxpbWl0ZWQgQyBjb25zdHJ1Y3RzIGFyZSBhbGxvd2VkLiBUaGVyZWZvcmUgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUKKyAqIGhlcmUgdGhlIHBsYXRmb3JtX3JldGFyZ2V0LmggdG8gYWNjZXNzIGZsYXNoIHJlbGF0ZWQgZGVmaW5lcy4gVG8gcmVzb2x2ZSB0aGlzCisgKiBzb21lIG9mIHRoZSB2YWx1ZXMgYXJlIHJlZGVmaW5lZCBoZXJlIHdpdGggZGlmZmVyZW50IG5hbWVzLCB0aGVzZSBhcmUgbWFya2VkCisgKiB3aXRoIGNvbW1lbnQuCisgKi8KKworLyogU2l6ZSBvZiBhIFNlY3VyZSBhbmQgb2YgYSBOb24tc2VjdXJlIGltYWdlICovCisjZGVmaW5lIEZMQVNIX1NfUEFSVElUSU9OX1NJWkUgICAgICAgICAgKDB4NDAwMDApICAgICAgICAvKiBTIHBhcnRpdGlvbiA6IDE5Mis2NCBLQiAqLworI2RlZmluZSBGTEFTSF9OU19QQVJUSVRJT05fU0laRSAgICAgICAgICgweDMwMDAwKSAgICAgICAgLyogTlMgcGFydGl0aW9uOiAyNTYtNjQgS0IgKi8KKyNkZWZpbmUgRkxBU0hfTUFYX1BBUlRJVElPTl9TSVpFICAgICAgICAoKEZMQVNIX1NfUEFSVElUSU9OX1NJWkUgPiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX05TX1BBUlRJVElPTl9TSVpFKSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfU19QQVJUSVRJT05fU0laRSA6ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUpCisKKy8qIFNlY3RvciBzaXplIG9mIHRoZSBmbGFzaCBoYXJkd2FyZTsgc2FtZSBhcyBGTEFTSDBfU0VDVE9SX1NJWkUgKi8KKyNkZWZpbmUgRkxBU0hfQVJFQV9JTUFHRV9TRUNUT1JfU0laRSAgICAoMHg4MDApICAgLyogMiBLQiAqLworLyogU2FtZSBhcyBGTEFTSDBfU0laRSAqLworI2RlZmluZSBGTEFTSF9UT1RBTF9TSVpFICAgICAgICAgICAgICAgICgweDAwMDgwMDAwKSAvKiA1MTIgS0IgKi8KKworLyogRmxhc2ggbGF5b3V0IGluZm8gZm9yIEJMMiBib290bG9hZGVyICovCisvKiBTYW1lIGFzIEZMQVNIMF9CQVNFX1MgKi8KKyNkZWZpbmUgRkxBU0hfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKworLyogT2Zmc2V0IGFuZCBzaXplIGRlZmluaXRpb25zIG9mIHRoZSBmbGFzaCBwYXJ0aXRpb25zIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhlCisgKiBib290bG9hZGVyLiBUaGUgaW1hZ2Ugc3dhcHBpbmcgaXMgZG9uZSBiZXR3ZWVuIElNQUdFX1BSSU1BUlkgYW5kCisgKiBJTUFHRV9TRUNPTkRBUlksIFNDUkFUQ0ggaXMgdXNlZCBhcyBhIHRlbXBvcmFyeSBzdG9yYWdlIGR1cmluZyBpbWFnZQorICogc3dhcHBpbmcuCisgKi8KKyNkZWZpbmUgRkxBU0hfQVJFQV9CTDJfT0ZGU0VUICAgICAgKDB4MCkKKyNkZWZpbmUgRkxBU0hfQVJFQV9CTDJfU0laRSAgICAgICAgKDB4ODAwMCkgLyogMzIgS0IgKi8KKworI2lmICFkZWZpbmVkKE1DVUJPT1RfSU1BR0VfTlVNQkVSKSB8fCAoTUNVQk9PVF9JTUFHRV9OVU1CRVIgPT0gMSkKKy8qIFNlY3VyZSArIE5vbi1zZWN1cmUgaW1hZ2UgcHJpbWFyeSBzbG90ICovCisjZGVmaW5lIEZMQVNIX0FSRUFfMF9JRCAgICAgICAgICAgICgxKQorI2RlZmluZSBGTEFTSF9BUkVBXzBfT0ZGU0VUICAgICAgICAoRkxBU0hfQVJFQV9CTDJfT0ZGU0VUICsgRkxBU0hfQVJFQV9CTDJfU0laRSArIDB4ODAwMCkgICAgICAgIC8qIDB4MTAwMDAgKi8KKyNkZWZpbmUgRkxBU0hfQVJFQV8wX1NJWkUgICAgICAgICAgKEZMQVNIX1NfUEFSVElUSU9OX1NJWkUgKyBGTEFTSF9OU19QQVJUSVRJT05fU0laRSkgICAvKiA0ODAgS0IgKi8KKy8qIFNlY3VyZSArIE5vbi1zZWN1cmUgc2Vjb25kYXJ5IHNsb3QgKi8KKyNkZWZpbmUgRkxBU0hfQVJFQV8yX0lEICAgICAgICAgICAgKEZMQVNIX0FSRUFfMF9JRCArIDEpCisjZGVmaW5lIEZMQVNIX0FSRUFfMl9PRkZTRVQgICAgICAgICgweDEwMDAwMCkKKyNkZWZpbmUgRkxBU0hfQVJFQV8yX1NJWkUgICAgICAgICAgKDB4ODAwKQorCisvKiBTY3JhdGNoIGFyZWEgKi8KKyNkZWZpbmUgRkxBU0hfQVJFQV9TQ1JBVENIX0lEICAgICAgKEZMQVNIX0FSRUFfMl9JRCArIDEpCisjZGVmaW5lIEZMQVNIX0FSRUFfU0NSQVRDSF9PRkZTRVQgICgweDEwMDgwMCkKKyNkZWZpbmUgRkxBU0hfQVJFQV9TQ1JBVENIX1NJWkUgICAgKDB4ODAwKQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhdHVzIGVudHJpZXMgc3VwcG9ydGVkIGJ5IHRoZSBib290bG9hZGVyLiAqLworI2RlZmluZSBNQ1VCT09UX1NUQVRVU19NQVhfRU5UUklFUyAoKEZMQVNIX1NfUEFSVElUSU9OX1NJWkUgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUpIC8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQVJFQV9TQ1JBVENIX1NJWkUpCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGltYWdlIHNlY3RvcnMgc3VwcG9ydGVkIGJ5IHRoZSBib290bG9hZGVyLiAqLworI2RlZmluZSBNQ1VCT09UX01BWF9JTUdfU0VDVE9SUyAgICAoKEZMQVNIX1NfUEFSVElUSU9OX1NJWkUgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUpIC8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQVJFQV9JTUFHRV9TRUNUT1JfU0laRSkKKworI2Vsc2UKKyNlcnJvciAiT25seSBNQ1VCT09UX0lNQUdFX05VTUJFUiAxIGFyZSBzdXBwb3J0ZWQhIgorI2VuZGlmIC8qIE1DVUJPT1RfSU1BR0VfTlVNQkVSICovCisKKy8qIFByb3RlY3RlZCBTdG9yYWdlIChQUykgU2VydmljZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBGTEFTSF9QU19BUkVBX09GRlNFVCAgICAgICAgICAgICgweDgwMDApCisjZGVmaW5lIEZMQVNIX1BTX0FSRUFfU0laRSAgICAgICAgICAgICAgKDB4NDAwMCkKKworLyogSW50ZXJuYWwgVHJ1c3RlZCBTdG9yYWdlIChJVFMpIFNlcnZpY2UgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRkxBU0hfSVRTX0FSRUFfT0ZGU0VUICAgICAgICAgICAoRkxBU0hfUFNfQVJFQV9PRkZTRVQgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX1BTX0FSRUFfU0laRSkKKyNkZWZpbmUgRkxBU0hfSVRTX0FSRUFfU0laRSAgICAgICAgICAgICAoMHgzMDAwKQorCisvKiBOViBDb3VudGVycyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBGTEFTSF9OVl9DT1VOVEVSU19BUkVBX09GRlNFVCAgIChGTEFTSF9JVFNfQVJFQV9PRkZTRVQgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0lUU19BUkVBX1NJWkUpCisjZGVmaW5lIEZMQVNIX05WX0NPVU5URVJTX0FSRUFfU0laRSAgICAgKEZMQVNIX0FSRUFfSU1BR0VfU0VDVE9SX1NJWkUpCisKKy8qIE9mZnNldCBhbmQgc2l6ZSBkZWZpbml0aW9uIGluIGZsYXNoIGFyZWEgdXNlZCBieSBhc3NlbWJsZS5weSAqLworI2RlZmluZSBTRUNVUkVfSU1BR0VfT0ZGU0VUICAgICAgICAgICAgICgweDApCisjZGVmaW5lIFNFQ1VSRV9JTUFHRV9NQVhfU0laRSAgICAgICAgICAgRkxBU0hfU19QQVJUSVRJT05fU0laRQorCisjZGVmaW5lIE5PTl9TRUNVUkVfSU1BR0VfT0ZGU0VUICAgICAgICAgKFNFQ1VSRV9JTUFHRV9PRkZTRVQgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ1VSRV9JTUFHRV9NQVhfU0laRSkKKyNkZWZpbmUgTk9OX1NFQ1VSRV9JTUFHRV9NQVhfU0laRSAgICAgICBGTEFTSF9OU19QQVJUSVRJT05fU0laRQorCisvKiBGbGFzaCBkZXZpY2UgbmFtZSB1c2VkIGJ5IEJMMgorICogTmFtZSBpcyBkZWZpbmVkIGluIGZsYXNoIGRyaXZlciBmaWxlOiBEcml2ZXJfRmxhc2guYworICovCisjZGVmaW5lIEZMQVNIX0RFVl9OQU1FIERyaXZlcl9GTEFTSDAKKworLyogUHJvdGVjdGVkIFN0b3JhZ2UgKFBTKSBTZXJ2aWNlIGRlZmluaXRpb25zCisgKiBOb3RlOiBGdXJ0aGVyIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgZGVmaW5pdGlvbnMgY2FuIGJlIGZvdW5kIGluIHRoZQorICogVEYtTSBQUyBJbnRlZ3JhdGlvbiBHdWlkZS4KKyAqLworI2RlZmluZSBQU19GTEFTSF9ERVZfTkFNRSBEcml2ZXJfRkxBU0gwCisKKy8qIEluIHRoaXMgdGFyZ2V0IHRoZSBDTVNJUyBkcml2ZXIgcmVxdWlyZXMgb25seSB0aGUgb2Zmc2V0IGZyb20gdGhlIGJhc2UKKyAqIGFkZHJlc3MgaW5zdGVhZCBvZiB0aGUgZnVsbCBtZW1vcnkgYWRkcmVzcy4KKyAqLworI2RlZmluZSBQU19GTEFTSF9BUkVBX0FERFIgICAgIEZMQVNIX1BTX0FSRUFfT0ZGU0VUCisvKiBEZWRpY2F0ZWQgZmxhc2ggYXJlYSBmb3IgUFMgKi8KKyNkZWZpbmUgUFNfRkxBU0hfQVJFQV9TSVpFICAgICBGTEFTSF9QU19BUkVBX1NJWkUKKyNkZWZpbmUgUFNfU0VDVE9SX1NJWkUgICAgICAgICBGTEFTSF9BUkVBX0lNQUdFX1NFQ1RPUl9TSVpFCisvKiBOdW1iZXIgb2YgUFNfU0VDVE9SX1NJWkUgcGVyIGJsb2NrICovCisjZGVmaW5lIFBTX1NFQ1RPUlNfUEVSX0JMT0NLICAgKDB4MSkKKy8qIFNwZWNpZmllcyB0aGUgc21hbGxlc3QgZmxhc2ggcHJvZ3JhbW1hYmxlIHVuaXQgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgUFNfRkxBU0hfUFJPR1JBTV9VTklUICAoMHg0KQorLyogVGhlIG1heGltdW0gYXNzZXQgc2l6ZSB0byBiZSBzdG9yZWQgaW4gdGhlIFBTIGFyZWEgKi8KKyNkZWZpbmUgUFNfTUFYX0FTU0VUX1NJWkUgICAgICAoNTEyKQorLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzc2V0cyB0byBiZSBzdG9yZWQgaW4gdGhlIFBTIGFyZWEgKi8KKyNkZWZpbmUgUFNfTlVNX0FTU0VUUyAgICAgICAgICAoMTIpCisKKy8qIEludGVybmFsIFRydXN0ZWQgU3RvcmFnZSAoSVRTKSBTZXJ2aWNlIGRlZmluaXRpb25zCisgKiBOb3RlOiBGdXJ0aGVyIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgZGVmaW5pdGlvbnMgY2FuIGJlIGZvdW5kIGluIHRoZQorICogVEYtTSBJVFMgSW50ZWdyYXRpb24gR3VpZGUuIFRoZSBJVFMgc2hvdWxkIGJlIGluIHRoZSBpbnRlcm5hbCBmbGFzaCwgYnV0IGlzCisgKiBhbGxvY2F0ZWQgaW4gdGhlIGV4dGVybmFsIGZsYXNoIGp1c3QgZm9yIGRldmVsb3BtZW50IHBsYXRmb3JtcyB0aGF0IGRvbid0CisgKiBoYXZlIGludGVybmFsIGZsYXNoIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBJVFNfRkxBU0hfREVWX05BTUUgRHJpdmVyX0ZMQVNIMAorCisvKiBJbiB0aGlzIHRhcmdldCB0aGUgQ01TSVMgZHJpdmVyIHJlcXVpcmVzIG9ubHkgdGhlIG9mZnNldCBmcm9tIHRoZSBiYXNlCisgKiBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIGZ1bGwgbWVtb3J5IGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgSVRTX0ZMQVNIX0FSRUFfQUREUiAgICAgRkxBU0hfSVRTX0FSRUFfT0ZGU0VUCisvKiBEZWRpY2F0ZWQgZmxhc2ggYXJlYSBmb3IgSVRTICovCisjZGVmaW5lIElUU19GTEFTSF9BUkVBX1NJWkUgICAgIEZMQVNIX0lUU19BUkVBX1NJWkUKKyNkZWZpbmUgSVRTX1NFQ1RPUl9TSVpFICAgICAgICAgRkxBU0hfQVJFQV9JTUFHRV9TRUNUT1JfU0laRQorLyogTnVtYmVyIG9mIElUU19TRUNUT1JfU0laRSBwZXIgYmxvY2sgKi8KKyNkZWZpbmUgSVRTX1NFQ1RPUlNfUEVSX0JMT0NLICAgKDB4MSkKKy8qIFNwZWNpZmllcyB0aGUgc21hbGxlc3QgZmxhc2ggcHJvZ3JhbW1hYmxlIHVuaXQgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgSVRTX0ZMQVNIX1BST0dSQU1fVU5JVCAgKDB4NCkKKy8qIFRoZSBtYXhpbXVtIGFzc2V0IHNpemUgdG8gYmUgc3RvcmVkIGluIHRoZSBJVFMgYXJlYSAqLworI2RlZmluZSBJVFNfTUFYX0FTU0VUX1NJWkUgICAgICAoNTEyKQorLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzc2V0cyB0byBiZSBzdG9yZWQgaW4gdGhlIElUUyBhcmVhICovCisjZGVmaW5lIElUU19OVU1fQVNTRVRTICAgICAgICAgICgxMikKKworLyogTlYgQ291bnRlcnMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVEZNX05WX0NPVU5URVJTX0FSRUFfQUREUiAgICBGTEFTSF9OVl9DT1VOVEVSU19BUkVBX09GRlNFVAorI2RlZmluZSBURk1fTlZfQ09VTlRFUlNfQVJFQV9TSVpFICAgICgweDE4KSAvKiAyNCBCeXRlcyAqLworI2RlZmluZSBURk1fTlZfQ09VTlRFUlNfU0VDVE9SX0FERFIgIEZMQVNIX05WX0NPVU5URVJTX0FSRUFfT0ZGU0VUCisjZGVmaW5lIFRGTV9OVl9DT1VOVEVSU19TRUNUT1JfU0laRSAgRkxBU0hfQVJFQV9JTUFHRV9TRUNUT1JfU0laRQorCisvKiBVc2UgU1JBTTEgbWVtb3J5IHRvIHN0b3JlIENvZGUgZGF0YSAqLworI2RlZmluZSBTX1JPTV9BTElBU19CQVNFICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTlNfUk9NX0FMSUFTX0JBU0UgKDB4MTAwMDAwMDApCisKKy8qIEZJWE1FOiBVc2UgU1JBTTIgbWVtb3J5IHRvIHN0b3JlIFJXIGRhdGEgKi8KKyNkZWZpbmUgU19SQU1fQUxJQVNfQkFTRSAgKDB4MjAwMDAwMDApCisjZGVmaW5lIE5TX1JBTV9BTElBU19CQVNFICgweDMwMDAwMDAwKQorCisjZGVmaW5lIFRPVEFMX1JPTV9TSVpFIEZMQVNIX1RPVEFMX1NJWkUKKyNkZWZpbmUgVE9UQUxfUkFNX1NJWkUgKDB4MDAwMTgwMDApICAgICAvKiA5NiBLQiAqLworCisjZW5kaWYgLyogX19GTEFTSF9MQVlPVVRfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcGFydGl0aW9uL3BhcnRpdGlvbl9NMjM1MS5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3BhcnRpdGlvbi9wYXJ0aXRpb25fTTIzNTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjY0YmJlCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3BhcnRpdGlvbi9wYXJ0aXRpb25fTTIzNTEuaApAQCAtMCwwICsxLDgyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIHBhcnRpdGlvbl9NMjM1MS5jCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBicmllZiAgICBTQVUgY29uZmlndXJhdGlvbiBmb3Igc2VjdXJlL25vbnNlY3VyZSByZWdpb24gc2V0dGluZ3MuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqIENvcHlyaWdodCAoQykgMjAxNiBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFBBUlRJVElPTl9NMjM1MQorI2RlZmluZSBQQVJUSVRJT05fTTIzNTEKKworCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKworLyoKKy8vLS0tLS0tLS0gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+IC0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKy8qCisgICAgU1JBTU5TU0VUCisqLworLyoKKy8vIEJpdCAwLi4xNgorLy8gPG8uMC4uMTY+IFNlY3VyZSBTUkFNIFNpemUgICAgICAgICAgICAgIDwwPT4gMCBLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweDIwMDA9PiA4S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHg0MDAwPT4gMTZLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweDYwMDA9PiAyNEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4ODAwMD0+IDMyS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHhhMDAwPT4gNDBLQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwweGMwMDA9PiA0OEtCCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDB4ZTAwMD0+IDU2S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxMDAwMD0+IDY0S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxMjAwMD0+IDcyS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxNDAwMD0+IDgwS0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxNjAwMD0+IDg4S0IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MHgxODAwMD0+IDk2S0IKKyovCisjZGVmaW5lIFNDVV9TRUNVUkVfU1JBTV9TSVpFICAgICAgMHgxMjAwMAorI2RlZmluZSBOT05fU0VDVVJFX1NSQU1fQkFTRSAgICAoMHgzMDAwMDAwMCArIFNDVV9TRUNVUkVfU1JBTV9TSVpFKQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgICAgTlNCQQorKi8KKyNkZWZpbmUgRk1DX0lOSVRfTlNCQSAgICAgICAgICAxCisvKgorICAgICA8bz5TZWN1cmUgRmxhc2ggUk9NIFNpemUgPDB4ODAwLTB4N0ZGRkY6MHg4MDA+CisqLworCisjZGVmaW5lIEZNQ19TRUNVUkVfUk9NX1NJWkUgICAgICAoU0VDVVJFX0lNQUdFX01BWF9TSVpFKzB4MTAwMDApCisKKyNkZWZpbmUgRk1DX05PTl9TRUNVUkVfQkFTRSAgICAgKDB4MTAwMDAwMDAgKyBGTUNfU0VDVVJFX1JPTV9TSVpFKQorCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBGTUNfTlNCQV9TZXR1cCh2b2lkKQoreworICAgIC8qIFNraXAgTlNCQSBTZXR1cHQgYWNjb3JkaW5nIGNvbmZpZyAqLworICAgIGlmKEZNQ19JTklUX05TQkEgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogQ2hlY2sgaWYgTlNCQSB2YWx1ZSB3aXRoIGN1cnJlbnQgYWN0aXZlIE5TQkEgKi8KKyAgICBpZihTQ1UtPkZOU0FERFIgIT0gRk1DX1NFQ1VSRV9ST01fU0laRSkKKyAgICB7CisgICAgICAgIC8qIFVubG9jayBQcm90ZWN0ZWQgUmVnaXN0ZXIgKi8KKyAgICAgICAgU1lTX1VubG9ja1JlZygpOworCisgICAgICAgIC8qIEVuYWJsZSBJU1AgYW5kIGNvbmZpZyB1cGRhdGUgKi8KKyAgICAgICAgRk1DLT5JU1BDVEwgPSBGTUNfSVNQQ1RMX0lTUEVOX01zayB8IEZNQ19JU1BDVExfQ0ZHVUVOX01zazsKKworICAgICAgICAvKiBDb25maWcgQmFzZSBvZiBOU0JBICovCisgICAgICAgIEZNQy0+SVNQQUREUiA9IDB4MjAwODAwOworCisgICAgICAgIC8qIFJlYWQgTm9uLXNlY3VyZSBiYXNlIGFkZHJlc3MgY29uZmlnICovCisgICAgICAgIEZNQy0+SVNQQ01EID0gRk1DX0lTUENNRF9SRUFEOworICAgICAgICBGTUMtPklTUFRSRyA9IEZNQ19JU1BUUkdfSVNQR09fTXNrOworICAgICAgICB3aGlsZShGTUMtPklTUFRSRyk7CisKKyAgICAgICAgLyogU2V0dGluZyBOU0JBIHdoZW4gaXQgaXMgZW1wdHkgKi8KKyAgICAgICAgaWYoRk1DLT5JU1BEQVQgPT0gMHhmZmZmZmZmZnVsKQorICAgICAgICB7CisgICAgICAgICAgICBGTUMtPklTUERBVCA9IEZNQ19TRUNVUkVfUk9NX1NJWkU7CisgICAgICAgICAgICBGTUMtPklTUENNRCA9IEZNQ19JU1BDTURfUFJPR1JBTTsKKyAgICAgICAgICAgIEZNQy0+SVNQVFJHID0gRk1DX0lTUFRSR19JU1BHT19Nc2s7CisgICAgICAgICAgICB3aGlsZShGTUMtPklTUFRSRyk7CisKKyAgICAgICAgICAgIC8qIEZvcmNlIENoaXAgUmVzZXQgdG8gdmFsaWQgbmV3IHNldHRpbmcgKi8KKyAgICAgICAgICAgIFNZUy0+SVBSU1QwID0gU1lTX0lQUlNUMF9DSElQUlNUX01zazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZhdGFsIEVycm9yOgorICAgICAgICAgICBGTUMgTlNCQSBzZXR0aW5nIGlzIGRpZmZlcmVudCB0byBGTUNfSU5JVF9OU0JBX1ZBTC4KKyAgICAgICAgICAgVXNlciBtdXN0IGRvdWJsZSBjb25maXJtIHdoaWNoIG9uZSBpcyB3cm9uZy4KKworICAgICAgICAgICBJZiB1c2VyIG5lZWQgdG8gY2hhbmdlIE5TQkEgY29uZmlnIG9mIEZNQywgdXNlciBtdXN0IGRvIE1hc3MtZXJhc2UgYnkKKyAgICAgICAgICAgSVNQIG9yIElDUC4KKyAgICAgICAgKi8KKyAgICAgICAgd2hpbGUoMSk7CisgICAgfQorCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyoKKy8vIDxoPiBQZXJpcGhlcmFsIFNlY3VyZSBBdHRyaWJ1dGlvbiBDb25maWd1cmF0aW9uCisqLworCisvKgorICAgIFBOU1NFVDAKKyovCisvKgorLy8gTW9kdWxlIDAuLjMxCisvLyAgIDxvLjk+ICBVU0JIICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xMz4gIFNEMCAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNj4gIEVCSSAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjQ+ICBQRE1BMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorKi8KKyNkZWZpbmUgU0NVX0lOSVRfUE5TU0VUMF9WQUwgICAgICAweDAKKy8qCisgICAgUE5TU0VUMQorKi8KKy8qCisvLyBNb2R1bGUgMC4uMzEKKy8vICAgPG8uMTc+ICBDUkMgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE4PiAgQ1JQVCAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorKi8KKyNkZWZpbmUgU0NVX0lOSVRfUE5TU0VUMV9WQUwgICAgICAweDAKKy8qCisgICAgUE5TU0VUMgorKi8KKy8qCisvLyBNb2R1bGUgMC4uMzEKKy8vICAgPG8uMT4gIFJUQyAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMz4gIEVBREMgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uNT4gIEFDTVAwMSAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLworLy8gICA8by43PiAgREFDICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjg+ICBJMlMwICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjEzPiAgT1RHICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE3PiAgVE1SMjMgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPGg+IEVQV00KKy8vICAgPG8uMjQ+ICBFUFdNMCAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yNT4gIEVQV00xICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI2PiAgQlBXTTAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjc+ICBCUFdNMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisqLworI2RlZmluZSBTQ1VfSU5JVF9QTlNTRVQyX1ZBTCAgICAgIDB4MAorLyoKKyAgICBQTlNTRVQzCisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8aD4gIFNQSQorLy8gICA8by4wPiAgUVNQSTAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMT4gIFNQSTAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI+ICBTUEkxICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4zPiAgU1BJMiAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uND4gIFNQSTMgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKy8vICAgPGg+IFVBUlQKKy8vICAgPG8uMTY+ICBVQVJUMCAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNz4gIFVBUlQxICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE4PiAgVUFSVDIgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTk+ICBVQVJUMyAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMD4gIFVBUlQ0ICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjIxPiAgVUFSVDUgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorKi8KKyNkZWZpbmUgU0NVX0lOSVRfUE5TU0VUM19WQUwgICAgICAweDEwMDA0CisvKgorICAgIFBOU1NFVDQKKyovCisvKgorLy8gTW9kdWxlIDAuLjMxCisvLyAgIDxoPiBJMkMKKy8vICAgPG8uMD4gIEkyQzAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE+ICBJMkMxICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI+ICBJMkMyICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKy8vICAgPGg+IFNtYXJ0IENhcmQKKy8vICAgPG8uMTY+ICBTQzAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTc+ICBTQzEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTg+ICBTQzIgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorKi8KKyNkZWZpbmUgU0NVX0lOSVRfUE5TU0VUNF9WQUwgICAgICAweDAKKy8qCisgICAgUE5TU0VUNQorKi8KKy8qCisvLyBNb2R1bGUgMC4uMzEKKy8vICAgPG8uMD4gIENBTjAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxoPiBRRUkKKy8vICAgPG8uMTY+ICBRRUkwICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE3PiAgUUVJMSAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisvLyAgIDxoPiBFQ0FQCisvLyAgIDxvLjIwPiAgRUNBUDAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjIxPiAgRUNBUDEgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorLy8gICA8by4yNT4gIFRSTkcgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisqLworI2RlZmluZSBTQ1VfSU5JVF9QTlNTRVQ1X1ZBTCAgICAgIDB4MAorLyoKKyAgICBQTlNTRVQ2CisqLworLyoKKy8vIE1vZHVsZSAwLi4zMQorLy8gICA8by4wPiAgVVNCRCAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPGg+IFVTQ0kKKy8vICAgPG8uMTY+ICBVU0NJMCAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNz4gIFVTQ0kxICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKyovCisjZGVmaW5lIFNDVV9JTklUX1BOU1NFVDZfVkFMICAgICAgMHgwCisvKgorLy8gPC9oPgorKi8KKworCisKKy8qCisvLyA8aD4gR1BJTyBTZWN1cmUgQXR0cmlidXRpb24gQ29uZmlndXJhdGlvbgorKi8KKworLyoKKyAgICBJT05TU0VUCisqLworLyoKKy8vIEJpdCAwLi4zMQorLy8gICA8by4wPiAgUEEgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE+ICBQQiAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yPiAgUEMgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMz4gIFBEICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by40PiAgUEUgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uNT4gIFBGICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjY+ICBQRyAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by43PiAgUEggICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKyovCisjZGVmaW5lIFNDVV9JTklUX0lPTlNTRVRfVkFMICAgICAgMHgxCisvKgorLy8gPC9oPgorKi8KKworCisKKy8qKgorICBcYnJpZWYgICBTZXR1cCBTQ1UgQ29uZmlndXJhdGlvbiBVbml0CisgIFxkZXRhaWxzCisKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NVX1NldHVwKHZvaWQpCit7CisgICAgaW50MzJfdCBpOworCisgICAgU0NVLT5QTlNTRVRbMF0gPSBTQ1VfSU5JVF9QTlNTRVQwX1ZBTDsKKyAgICBTQ1UtPlBOU1NFVFsxXSA9IFNDVV9JTklUX1BOU1NFVDFfVkFMOworICAgIFNDVS0+UE5TU0VUWzJdID0gU0NVX0lOSVRfUE5TU0VUMl9WQUw7CisgICAgU0NVLT5QTlNTRVRbM10gPSBTQ1VfSU5JVF9QTlNTRVQzX1ZBTDsKKyAgICBTQ1UtPlBOU1NFVFs0XSA9IFNDVV9JTklUX1BOU1NFVDRfVkFMOworICAgIFNDVS0+UE5TU0VUWzVdID0gU0NVX0lOSVRfUE5TU0VUNV9WQUw7CisgICAgU0NVLT5QTlNTRVRbNl0gPSBTQ1VfSU5JVF9QTlNTRVQ2X1ZBTDsKKworICAgIFNDVS0+SU9OU1NFVCA9IFNDVV9JTklUX0lPTlNTRVRfVkFMOworCisgICAgLyogU2V0IE5vbi1zZWN1cmUgU1JBTSAqLworICAgIGZvcihpID0gMTE7IGkgPj0gU19EQVRBX1NJWkUgLyA4MTkyOyBpLS0pCisgICAgeworICAgICAgICBTQ1UtPlNSQU1OU1NFVCB8PSAoMVUgPDwgaSk7CisgICAgfQorCisKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisvLyA8ZT5TZWN1cmUgQXR0cmlidXRlIFVuaXQgKFNBVSkgQ29udHJvbAorKi8KKyNkZWZpbmUgU0FVX0lOSVRfQ1RSTCAxCisKKy8qCisvLyAgIDxxPiBFbmFibGUgU0FVCisvLyAgIDxpPiBUbyBlbmFibGUgU2VjdXJlIEF0dHJpYnV0ZSBVbml0IChTQVUpLgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfQ1RSTF9FTkFCTEUgMQorCisvKgorLy8gICA8bz4gQWxsIE1lbW9yeSBBdHRyaWJ1dGUgV2hlbiBTQVUgaXMgZGlzYWJsZWQKKy8vICAgICA8MD0+IEFsbCBNZW1vcnkgaXMgU2VjdXJlCisvLyAgICAgPDE9PiBBbGwgTWVtb3J5IGlzIE5vbi1TZWN1cmUKKy8vICAgPGk+IFRvIHNldCB0aGUgQUxMTlMgYml0IGluIFNBVSBDVFJMLgorLy8gICA8aT4gV2hlbiBhbGwgTWVtb3J5IGlzIE5vbi1TZWN1cmUgKEFMTE5TIGlzIDEpLCBJREFVIGNhbiBvdmVycmlkZSBtZW1vcnkgbWFwIGNvbmZpZ3VyYXRpb24uCisqLworI2RlZmluZSBTQVVfSU5JVF9DVFJMX0FMTE5TICAwCisKKy8qCisvLyA8L2U+CisqLworCisKKy8qCisvLyA8aD5FbmFibGUgYW5kIFNldCBTZWN1cmUvTm9uLVNlY3VyZSByZWdpb24KKyovCisjZGVmaW5lIFNBVV9SRUdJT05TX01BWCAgIDggICAgICAgICAgICAgICAgIC8qIE1heC4gbnVtYmVyIG9mIFNBVSByZWdpb25zICovCisKKy8qCisvLyAgIDxlPlNBVSBSZWdpb24gMAorLy8gICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiAwCisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT04wICAgIDAKKy8qCisvLyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQwICAgICAweDAwMDNGMDAwICAgICAgLyogc3RhcnQgYWRkcmVzcyBvZiBTQVUgcmVnaW9uIDAgKi8KKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDAgICAgICAgMHgwMDAzRkZGRiAgICAgIC8qIGVuZCBhZGRyZXNzIG9mIFNBVSByZWdpb24gMCAqLworLyoKKy8vICAgICA8bz5SZWdpb24gaXMKKy8vICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKy8vICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDMCAgICAgICAxCisvKgorLy8gICA8L2U+CisqLworCisvKgorLy8gICA8ZT5TQVUgUmVnaW9uIDEKKy8vICAgPGk+IFNldHVwIFNBVSBSZWdpb24gMQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9OMSAgICAwCisvKgorLy8gICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUMSAgICAgMHgxMDA2MDAwMAorLyoKKy8vICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5EMSAgICAgICAweDEwMDdGRkZGCisvKgorLy8gICAgIDxvPlJlZ2lvbiBpcworLy8gICAgICAgICA8MD0+Tm9uLVNlY3VyZQorLy8gICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0MxICAgICAgIDAKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPlNBVSBSZWdpb24gMgorLy8gICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiAyCisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT04yICAgIDAKKy8qCisvLyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQyICAgICAweDIwMDBGMDAwCisvKgorLy8gICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQyICAgICAgIDB4MjAwMEZGRkYKKy8qCisvLyAgICAgPG8+UmVnaW9uIGlzCisvLyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisvLyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzIgICAgICAgMQorLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+U0FVIFJlZ2lvbiAzCisvLyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDMKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjMgICAgMAorLyoKKy8vICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDMgICAgIDB4MDAwM0YwMDAKKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDMgICAgICAgMHgwMDAzRjdGRgorLyoKKy8vICAgICA8bz5SZWdpb24gaXMKKy8vICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKy8vICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDMyAgICAgICAxCisvKgorLy8gICA8L2U+CisqLworCisvKgorICAgPGU+U0FVIFJlZ2lvbiA0CisgICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiA0CisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT040ICAgIDAKKy8qCisgICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUNCAgICAgRk1DX05PTl9TRUNVUkVfQkFTRSAgICAgIC8qIHN0YXJ0IGFkZHJlc3Mgb2YgU0FVIHJlZ2lvbiA0ICovCisKKy8qCisgICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQ0ICAgICAgIDB4MTAwN0ZGRkYgICAgICAvKiBlbmQgYWRkcmVzcyBvZiBTQVUgcmVnaW9uIDQgKi8KKworLyoKKyAgICAgPG8+UmVnaW9uIGlzCisgICAgICAgICA8MD0+Tm9uLVNlY3VyZQorICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDNCAgICAgICAwCisvKgorICAgPC9lPgorKi8KKworLyoKKyAgIDxlPlNBVSBSZWdpb24gNQorICAgPGk+IFNldHVwIFNBVSBSZWdpb24gNQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9ONSAgICAxCisKKy8qCisgICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUNSAgICAgMHgwMDgwN0UwMAorCisvKgorICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5ENSAgICAgICAweDAwODA3RkZGCisKKy8qCisgICAgIDxvPlJlZ2lvbiBpcworICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzUgICAgICAgMQorLyoKKyAgIDwvZT4KKyovCisKKy8qCisgICA8ZT5TQVUgUmVnaW9uIDYKKyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDYKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjYgICAgMAorCisvKgorICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDYgICAgIE5PTl9TRUNVUkVfU1JBTV9CQVNFCisKKy8qCisgICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQ2ICAgICAgIDB4MzAwMTdGRkYKKworLyoKKyAgICAgPG8+UmVnaW9uIGlzCisgICAgICAgICA8MD0+Tm9uLVNlY3VyZQorICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDNiAgICAgICAwCisvKgorICAgPC9lPgorKi8KKworLyoKKyAgIDxlPlNBVSBSZWdpb24gNworICAgPGk+IFNldHVwIFNBVSBSZWdpb24gNworKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9ONyAgICAwCisKKy8qCisgICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUNyAgICAgMHg1MDAwMDAwMAorCisvKgorICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5ENyAgICAgICAweDVGRkZGRkZGCisKKy8qCisgICAgIDxvPlJlZ2lvbiBpcworICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzcgICAgICAgMAorLyoKKyAgIDwvZT4KKyovCisKKy8qCisvLyA8L2g+CisqLworCisvKgorLy8gPGU+U2V0dXAgYmVoYXZpb3Igb2YgU2xlZXAgYW5kIEV4Y2VwdGlvbiBIYW5kbGluZworKi8KKyNkZWZpbmUgU0NCX0NTUl9BSVJDUl9JTklUICAxCisKKy8qCisvLyAgIDxvPiBEZWVwIFNsZWVwIGNhbiBiZSBlbmFibGVkIGJ5CisvLyAgICAgPDA9PlNlY3VyZSBhbmQgTm9uLVNlY3VyZSBzdGF0ZQorLy8gICAgIDwxPT5TZWN1cmUgc3RhdGUgb25seQorLy8gICA8aT4gVmFsdWUgZm9yIFNDQi0+Q1NSIHJlZ2lzdGVyIGJpdCBERUVQU0xFRVBTCisqLworI2RlZmluZSBTQ0JfQ1NSX0RFRVBTTEVFUFNfVkFMICAwCisKKy8qCisvLyAgIDxvPlN5c3RlbSByZXNldCByZXF1ZXN0IGFjY2Vzc2libGUgZnJvbQorLy8gICAgIDwwPT4gU2VjdXJlIGFuZCBOb24tU2VjdXJlIHN0YXRlCisvLyAgICAgPDE9PiBTZWN1cmUgc3RhdGUgb25seQorLy8gICA8aT4gVmFsdWUgZm9yIFNDQi0+QUlSQ1IgcmVnaXN0ZXIgYml0IFNZU1JFU0VUUkVRUworKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRU19WQUwgIDAKKworLyoKKy8vICAgPG8+UHJpb3JpdHkgb2YgTm9uLVNlY3VyZSBleGNlcHRpb25zIGlzCisvLyAgICAgPDA9PiBOb3QgYWx0ZXJlZAorLy8gICAgIDwxPT4gTG93ZXJlZCB0byAweDgwLTB4RkYKKy8vICAgPGk+IFZhbHVlIGZvciBTQ0ItPkFJUkNSIHJlZ2lzdGVyIGJpdCBQUklTCisqLworI2RlZmluZSBTQ0JfQUlSQ1JfUFJJU19WQUwgICAgICAwCisKKy8qIEFzc2lnbiBIYXJkRmF1bHQgdG8gYmUgYWx3YXlzIHNlY3VyZSBmb3Igc2FmZSAqLworI2RlZmluZSBTQ0JfQUlSQ1JfQkZIRk5NSU5TX1ZBTCAwCisKKy8qCisvLyA8L2U+CisqLworCisKKy8qCisvLyA8aD5Bc3NpZ24gSW50ZXJydXB0IHRvIFNlY3VyZSBvciBOb24tc2VjdXJlIFZlY3RvcgorKi8KKworCisvKgorICAgIEluaXRpYWxpemUgSVROUyAwIChJbnRlcnJ1cHRzIDAuLjMxKQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMwICAgIDEKKy8qCisvLyBCT0RPVVQgICAgICAgQWx3YXlzIHNlY3VyZQorLy8gSVJDICAgICAgICAgIEFsd2F5cyBzZWN1cmUKKy8vIFBXUldVXyAgICAgICBBbHdheXMgc2VjdXJlCisvLyBTUkFNX1BFUlIgICAgQWx3YXlzIHNlY3VyZQorLy8gQ0xLRkFJTCAgICAgIEFsd2F5cyBzZWN1cmUKKworLy8gICA8by42PiAgUlRDICAgICAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by43PiAgVEFNUEVSICAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gV0RUICBBbHdheXMgc2VjdXJlCisvLyBXV0RUIEFsd2F5cyBzZWN1cmUKKy8vICAgPGg+IEVJTlQKKy8vICAgPG8uMTA+IEVJTlQwICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTE+IEVJTlQxICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTI+IEVJTlQyICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTM+IEVJTlQzICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTQ+IEVJTlQ0ICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTU+IEVJTlQ1ICAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPC9oPgorLy8gICA8aD4gR1BJTworLy8gICA8by4xNj4gR1BBICAgICAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNz4gR1BCICAgICAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xOD4gR1BDICAgICAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xOT4gR1BEICAgICAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMD4gR1BFICAgICAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMT4gR1BGICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDwvaD4KKy8vICAgPG8uMjI+IFFTUEkwICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMz4gU1BJMCAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxoPiBFUFdNCisvLyAgIDxvLjI0PiBCUkFLRTAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjU+IEVQV00wX1AwICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yNj4gRVBXTTBfUDEgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI3PiBFUFdNMF9QMiAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjg+IEJSQUtFMSAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yOT4gRVBXTTFfUDAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjMwPiBFUFdNMV9QMSAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMzE+IEVQV00xX1AyICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisvLworKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMwX1ZBTCAgICAgIDB4NDAwMDAKKworLyoKKyAgICBJbml0aWFsaXplIElUTlMgMSAoSW50ZXJydXB0cyAwLi4zMSkKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMSAgICAxCisvKgorLy8gICA8aD4gVElNRVIKKy8vIFRNUjAgQWx3YXlzIHNlY3VyZQorLy8gVE1SMSBBbHdheXMgc2VjdXJlCisvLyAgIDxvLjI+ICBUTVIyICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMz4gIFRNUjMgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisvLyAgIDxvLjQ+ICBVQVJUMCAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uNT4gIFVBUlQxICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by42PiAgSTJDMCAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjc+ICBJMkMxICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vIFBETUEwIGlzIHNlY3VyZSBvbmx5CisvLyAgIDxvLjk+ICBEQUMgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTA+IEVBREMwICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xMT4gRUFEQzEgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjEyPiBBQ01QMDEgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKworLy8gICA8by4xND4gRUFEQzIgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjE1PiBFQURDMyAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTY+IFVBUlQyICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNz4gVUFSVDMgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisKKy8vICAgPG8uMTk+IFNQSTEgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMD4gU1BJMiAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjIxPiBVU0JEICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjI+IFVTQkggICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMz4gVVNCT1RHICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI0PiBDQU4wICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKworLy8gICA8aD4gU21hcnQgQ2FyZAorLy8gICA8by4yNj4gU0MwICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI3PiBTQzEgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjg+IFNDMiAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8L2g+CisKKy8vICAgPG8uMzA+IFNQSTMgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorCisvLworKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxX1ZBTCAgICAgIDB4MTAKKworLyoKKyAgICBJbml0aWFsaXplIElUTlMgMiAoSW50ZXJydXB0cyAwLi4zMSkKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMiAgICAxCisvKgorLy8gICA8by4wPiAgU0RIMCAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisKKworCisvLyAgIDxvLjQ+ICBJMlMwICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKworLy8KKy8vICAgPG8uNz4gIENSWVBUTyAgICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uOD4gIEdQRyAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by45PiAgRUlOVDYgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjEwPiBVQVJUNCAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTE+IFVBUlQ1ICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xMj4gVVNDSTAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjEzPiBVU0NJMSAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMTQ+IEJQV00wICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4xNT4gQlBXTTEgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisKKworLy8gICA8by4xOD4gSTJDMiAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisKKy8vICAgPG8uMjA+IFFFSTAgICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yMT4gUUVJMSAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjIyPiBFQ0FQMCAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKy8vICAgPG8uMjM+IEVDQVAxICAgICAgICAgICAgIDwwPT4gU2VjdXJlIDwxPT4gTm9uLVNlY3VyZQorLy8gICA8by4yND4gR1BIICAgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyAgIDxvLjI1PiBFSU5UNyAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKworCisvLyAgIDxvLjI4PiBVU0JIICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKworCisKKy8vCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzJfVkFMICAgICAgMHgwCisKKworLyoKKyAgICBJbml0aWFsaXplIElUTlMgMyAoSW50ZXJydXB0cyAwLi4zMSkKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMyAgICAxCisvKgorLy8gICA8by4yPiAgUERNQTEgICAgICAgICAgICAgPDA9PiBTZWN1cmUgPDE9PiBOb24tU2VjdXJlCisvLyBTQ1UgIEFsd2F5cyBzZWN1cmUKKy8vCisvLyAgIDxvLjU+ICBUUk5HICAgICAgICAgICAgICA8MD0+IFNlY3VyZSA8MT0+IE5vbi1TZWN1cmUKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TM19WQUwgICAgICAweDAKKworCisKKy8qCisvLyA8L2g+CisqLworCisKKworLyoKKyAgICBtYXggMTI4IFNBVSByZWdpb25zLgorICAgIFNBVSByZWdpb25zIGFyZSBkZWZpbmVkIGluIHBhcnRpdGlvbi5oCisgKi8KKworI2RlZmluZSBTQVVfSU5JVF9SRUdJT04obikgXAorICAgIFNBVS0+Uk5SICA9ICAobiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFNBVV9STlJfUkVHSU9OX01zayk7IFwKKyAgICBTQVUtPlJCQVIgPSAgKFNBVV9JTklUX1NUQVJUIyNuICAgICAgICAgICAgICAgICAgICAgJiBTQVVfUkJBUl9CQUREUl9Nc2spOyBcCisgICAgU0FVLT5STEFSID0gIChTQVVfSU5JVF9FTkQjI24gICAgICAgICAgICAgICAgICAgICAgICYgU0FVX1JMQVJfTEFERFJfTXNrKSB8IFwKKyAgICAgICAgICAgICAgICAoKFNBVV9JTklUX05TQyMjbiA8PCBTQVVfUkxBUl9OU0NfUG9zKSAgJiBTQVVfUkxBUl9OU0NfTXNrKSAgIHwgMVUKKworLyoqCisgIFxicmllZiAgIFNldHVwIGEgU0FVIFJlZ2lvbgorICBcZGV0YWlscyBXcml0ZXMgdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gU0FVX1JlZ2lvbiB0byB0aGUKKyAgICAgICAgICAgcmVnaXN0ZXJzIFNBVV9STlIsIFNBVV9SQkFSLCBhbmQgU0FVX1JMQVIKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgVFpfU0FVX1NldHVwKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkIChfX1NBVV9QUkVTRU5UKSAmJiAoX19TQVVfUFJFU0VOVCA9PSAxVSkKKworI2lmIGRlZmluZWQgKFNBVV9JTklUX1JFR0lPTjApICYmIChTQVVfSU5JVF9SRUdJT04wID09IDFVKQorICAgIFNBVV9JTklUX1JFR0lPTigwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9OMSkgJiYgKFNBVV9JTklUX1JFR0lPTjEgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDEpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQVVfSU5JVF9SRUdJT04yKSAmJiAoU0FVX0lOSVRfUkVHSU9OMiA9PSAxVSkKKyAgICBTQVVfSU5JVF9SRUdJT04oMik7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNBVV9JTklUX1JFR0lPTjMpICYmIChTQVVfSU5JVF9SRUdJT04zID09IDFVKQorICAgIFNBVV9JTklUX1JFR0lPTigzKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9ONCkgJiYgKFNBVV9JTklUX1JFR0lPTjQgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDQpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTQVVfSU5JVF9SRUdJT041KSAmJiAoU0FVX0lOSVRfUkVHSU9ONSA9PSAxVSkKKyAgICBTQVVfSU5JVF9SRUdJT04oNSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKFNBVV9JTklUX1JFR0lPTjYpICYmIChTQVVfSU5JVF9SRUdJT042ID09IDFVKQorICAgIFNBVV9JTklUX1JFR0lPTig2KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9ONykgJiYgKFNBVV9JTklUX1JFR0lPTjcgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDcpOworI2VuZGlmCisKKyAgICAvKiByZXBlYXQgdGhpcyBmb3IgYWxsIHBvc3NpYmxlIFNBVSByZWdpb25zICovCisKKworI2lmIGRlZmluZWQgKFNBVV9JTklUX0NUUkwpICYmIChTQVVfSU5JVF9DVFJMID09IDFVKQorICAgIFNBVS0+Q1RSTCA9ICgoU0FVX0lOSVRfQ1RSTF9FTkFCTEUgPDwgU0FVX0NUUkxfRU5BQkxFX1BvcykgJiBTQVVfQ1RSTF9FTkFCTEVfTXNrKSB8CisgICAgICAgICAgICAgICAgKChTQVVfSU5JVF9DVFJMX0FMTE5TICA8PCBTQVVfQ1RSTF9BTExOU19Qb3MpICAmIFNBVV9DVFJMX0FMTE5TX01zaykgICA7CisjZW5kaWYKKworI2VuZGlmIC8qIGRlZmluZWQgKF9fU0FVX1BSRVNFTlQpICYmIChfX1NBVV9QUkVTRU5UID09IDFVKSAqLworCisjaWYgZGVmaW5lZCAoU0NCX0NTUl9BSVJDUl9JTklUKSAmJiAoU0NCX0NTUl9BSVJDUl9JTklUID09IDFVKQorICAgIFNDQi0+U0NSICAgPSAoU0NCLT5TQ1IgICAmIH4oU0NCX1NDUl9TTEVFUERFRVBTX01zaykpIHwKKyAgICAgICAgICAgICAgICAgKChTQ0JfQ1NSX0RFRVBTTEVFUFNfVkFMICAgICA8PCBTQ0JfU0NSX1NMRUVQREVFUFNfUG9zKSAgICAgJiBTQ0JfU0NSX1NMRUVQREVFUFNfTXNrKTsKKworLy8gICAgU0NCLT5BSVJDUiA9IChTQ0ItPkFJUkNSICYgfihTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFTX01zayB8IFNDQl9BSVJDUl9CRkhGTk1JTlNfTXNrIHwgIFNDQl9BSVJDUl9QUklTX01zaykpIHwKKy8vICAgICAgICAgICAgICAgICAoKFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfVkFMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfUG9zKSAmIFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfTXNrKSB8CisvLyAgICAgICAgICAgICAgICAgKChTQ0JfQUlSQ1JfQkZIRk5NSU5TX1ZBTCAgICA8PCBTQ0JfQUlSQ1JfQkZIRk5NSU5TX1BvcykgICAgJiBTQ0JfQUlSQ1JfQkZIRk5NSU5TX01zaykgICAgfAorLy8gICAgICAgICAgICAgICAgICgoU0NCX0FJUkNSX1BSSVNfVkFMICAgICAgICAgPDwgU0NCX0FJUkNSX1BSSVNfUG9zKSAgICAgICAgICYgU0NCX0FJUkNSX1BSSVNfTXNrKTsKKworICAgIFNDQi0+QUlSQ1IgPSAoMHgwNUZBIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICgoU0NCX0FJUkNSX1NZU1JFU0VUUkVRU19WQUwgPDwgU0NCX0FJUkNSX1NZU1JFU0VUUkVRU19Qb3MpICYgU0NCX0FJUkNSX1NZU1JFU0VUUkVRU19Nc2spIHwKKyAgICAgICAgICAgICAgICAgKChTQ0JfQUlSQ1JfQkZIRk5NSU5TX1ZBTCAgICA8PCBTQ0JfQUlSQ1JfQkZIRk5NSU5TX1BvcykgICAgJiBTQ0JfQUlSQ1JfQkZIRk5NSU5TX01zaykgICAgfAorICAgICAgICAgICAgICAgICAoKFNDQl9BSVJDUl9QUklTX1ZBTCAgICAgICAgIDw8IFNDQl9BSVJDUl9QUklTX1BvcykgICAgICAgICAmIFNDQl9BSVJDUl9QUklTX01zayk7CisKKworCisjZW5kaWYgLyogZGVmaW5lZCAoU0NCX0NTUl9BSVJDUl9JTklUKSAmJiAoU0NCX0NTUl9BSVJDUl9JTklUID09IDFVKSAqLworCisjaWYgZGVmaW5lZCAoU0NCX0lDU1JfSU5JVCkgJiYgKFNDQl9JQ1NSX0lOSVQgPT0gMVUpCisgICAgU0NCLT5JQ1NSICA9IChTQ0ItPklDU1IgICYgfihTQ0JfSUNTUl9TVFROU19Nc2spKSB8CisgICAgICAgICAgICAgICAgICgoU0NCX0lDU1JfU1RUTlNfVkFMICAgICAgICAgPDwgU0NCX0lDU1JfU1RUTlNfUG9zKSAgICAgICAgICYgU0NCX0lDU1JfU1RUTlNfTXNrKTsKKyNlbmRpZiAvKiBkZWZpbmVkIChTQ0JfSUNTUl9JTklUKSAmJiAoU0NCX0lDU1JfSU5JVCA9PSAxVSkgKi8KKworI2lmIGRlZmluZWQgKE5WSUNfSU5JVF9JVE5TMCkgJiYgKE5WSUNfSU5JVF9JVE5TMCA9PSAxVSkKKyAgICBOVklDLT5JVE5TWzBdID0gTlZJQ19JTklUX0lUTlMwX1ZBTDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlMxKSAmJiAoTlZJQ19JTklUX0lUTlMxID09IDFVKQorICAgIE5WSUMtPklUTlNbMV0gPSBOVklDX0lOSVRfSVROUzFfVkFMOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOVklDX0lOSVRfSVROUzIpICYmIChOVklDX0lOSVRfSVROUzIgPT0gMVUpCisgICAgTlZJQy0+SVROU1syXSA9IE5WSUNfSU5JVF9JVE5TMl9WQUw7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE5WSUNfSU5JVF9JVE5TMykgJiYgKE5WSUNfSU5JVF9JVE5TMyA9PSAxVSkKKyAgICBOVklDLT5JVE5TWzNdID0gTlZJQ19JTklUX0lUTlMzX1ZBTDsKKyNlbmRpZgorCisKKyAgICAvKiByZXBlYXQgdGhpcyBmb3IgYWxsIHBvc3NpYmxlIElUTlMgZWxlbWVudHMgKi8KKworfQorCisKKyNlbmRpZiAgLyogUEFSVElUSU9OX00yMzUxICovCisKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wYXJ0aXRpb24vcmVnaW9uX2RlZnMuaCBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wYXJ0aXRpb24vcmVnaW9uX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTZjYmJhCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3BhcnRpdGlvbi9yZWdpb25fZGVmcy5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX1JFR0lPTl9ERUZTX0hfXworI2RlZmluZSBfX1JFR0lPTl9ERUZTX0hfXworCisjaW5jbHVkZSAiZmxhc2hfbGF5b3V0LmgiCisKKyNkZWZpbmUgQkwyX0hFQVBfU0laRSAgICAgICAgICAgKDB4MDAwMTAwMCkKKyNkZWZpbmUgQkwyX01TUF9TVEFDS19TSVpFICAgICAgKDB4MDAwMTgwMCkKKworI2RlZmluZSBTX0hFQVBfU0laRSAgICAgICAgICAgICAoMHgwMDAxMDAwKQorI2RlZmluZSBTX01TUF9TVEFDS19TSVpFX0lOSVQgICAoMHgwMDAwNDAwKQorI2RlZmluZSBTX01TUF9TVEFDS19TSVpFICAgICAgICAoMHgwMDAwODAwKQorI2RlZmluZSBTX1BTUF9TVEFDS19TSVpFICAgICAgICAoMHgwMDAwODAwKQorCisjZGVmaW5lIE5TX0hFQVBfU0laRSAgICAgICAgICAgICgweDAwMDEwMDApCisjZGVmaW5lIE5TX01TUF9TVEFDS19TSVpFICAgICAgICgweDAwMDA4MDApCisjZGVmaW5lIE5TX1BTUF9TVEFDS19TSVpFICAgICAgICgweDAwMDA4MDApCisKKy8qIFRoaXMgc2l6ZSBvZiBidWZmZXIgaXMgYmlnIGVub3VnaCB0byBzdG9yZSBhbiBhdHRlc3RhdGlvbgorICogdG9rZW4gcHJvZHVjZWQgYnkgaW5pdGlhbCBhdHRlc3RhdGlvbiBzZXJ2aWNlCisgKi8KKyNkZWZpbmUgUFNBX0lOSVRJQUxfQVRURVNUX1RPS0VOX01BWF9TSVpFICAgKDB4MjUwKQorCisvKiBNUEMgZ3JhbnVsYXJpdHkgaXMgMTI4IEtCIG9uIEFONTE5IE1QUzIgRlBHQSBpbWFnZS4gQWxpZ25tZW50CisgKiBvZiBwYXJ0aXRpb25zIGlzIGRlZmluZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgY29uc3RyYWludC4KKyAqLworCisjaWZkZWYgQkwyCisjaWZuZGVmIExJTktfVE9fU0VDT05EQVJZX1BBUlRJVElPTgorI2RlZmluZSBTX0lNQUdFX1BSSU1BUllfUEFSVElUSU9OX09GRlNFVCAgIChGTEFTSF9BUkVBXzBfT0ZGU0VUKQorI2RlZmluZSBTX0lNQUdFX1NFQ09OREFSWV9QQVJUSVRJT05fT0ZGU0VUIChGTEFTSF9BUkVBXzBfT0ZGU0VUKQorI2Vsc2UKKyNlcnJvciAiTm8gc2Vjb25kYXJ5IHBhcnRpdGlvbiBzdXBwb3J0ZWQhIgorI2VuZGlmIC8qICFMSU5LX1RPX1NFQ09OREFSWV9QQVJUSVRJT04gKi8KKyNlbHNlCisjZGVmaW5lIFNfSU1BR0VfUFJJTUFSWV9QQVJUSVRJT05fT0ZGU0VUICgweDApCisjZW5kaWYgLyogQkwyICovCisKKyNpZm5kZWYgTElOS19UT19TRUNPTkRBUllfUEFSVElUSU9OCisjZGVmaW5lIE5TX0lNQUdFX1BSSU1BUllfUEFSVElUSU9OX09GRlNFVCAoRkxBU0hfQVJFQV8wX09GRlNFVCArIEZMQVNIX1NfUEFSVElUSU9OX1NJWkUpCisjZWxzZQorI2Vycm9yICJObyBzZWNvbmRhcnkgcGFydGl0aW9uIHN1cHBvcnRlZCEiCisjZW5kaWYgLyogIUxJTktfVE9fU0VDT05EQVJZX1BBUlRJVElPTiAqLworCisvKiBCb290IHBhcnRpdGlvbiBzdHJ1Y3R1cmUgaWYgTUNVQm9vdCBpcyB1c2VkOgorICogMHgwXzAwMDAgQm9vdGxvYWRlciBoZWFkZXIKKyAqIDB4MF8wNDAwIEltYWdlIGFyZWEKKyAqIDB4N18wMDAwIFRyYWlsZXIKKyAqLworLyogSU1BR0VfQ09ERV9TSVpFIGlzIHRoZSBzcGFjZSBhdmFpbGFibGUgZm9yIHRoZSBzb2Z0d2FyZSBiaW5hcnkgaW1hZ2UuCisgKiBJdCBpcyBsZXNzIHRoYW4gdGhlIEZMQVNIX1NfUEFSVElUSU9OX1NJWkUgKyBGTEFTSF9OU19QQVJUSVRJT05fU0laRQorICogYmVjYXVzZSB3ZSByZXNlcnZlIHNwYWNlIGZvciB0aGUgaW1hZ2UgaGVhZGVyIGFuZCB0cmFpbGVyIGludHJvZHVjZWQKKyAqIGJ5IHRoZSBib290bG9hZGVyLgorICovCisjaWZkZWYgQkwyCisjZGVmaW5lIEJMMl9IRUFERVJfU0laRSAgICAgICgweDQwMCkgICAgICAgLyogMSBLQiAqLworI2RlZmluZSBCTDJfVFJBSUxFUl9TSVpFICAgICAoMHg4MDApICAgICAgIC8qIDIgS0IgKi8KKyNlbHNlCisvKiBObyBoZWFkZXIgaWYgbm8gYm9vdGxvYWRlciwgYnV0IGtlZXAgSU1BR0VfQ09ERV9TSVpFIHRoZSBzYW1lICovCisjZGVmaW5lIEJMMl9IRUFERVJfU0laRSAgICAgICgweDApCisjZGVmaW5lIEJMMl9UUkFJTEVSX1NJWkUgICAgICgweDgwMCkKKyNlbmRpZiAvKiBCTDIgKi8KKworI2RlZmluZSBJTUFHRV9TX0NPREVfU0laRSAgICAoRkxBU0hfU19QQVJUSVRJT05fU0laRSAtIEJMMl9IRUFERVJfU0laRSAtIEJMMl9UUkFJTEVSX1NJWkUpCisjZGVmaW5lIElNQUdFX05TX0NPREVfU0laRSAgIChGTEFTSF9OU19QQVJUSVRJT05fU0laRSAtIEJMMl9IRUFERVJfU0laRSAtIEJMMl9UUkFJTEVSX1NJWkUpCisKKyNkZWZpbmUgQ01TRV9WRU5FRVJfUkVHSU9OX1NJWkUgICAgICgweDM0MCkKKworLyogQWxpYXMgZGVmaW5pdGlvbnMgZm9yIHNlY3VyZSBhbmQgbm9uLXNlY3VyZSBhcmVhcyovCisjZGVmaW5lIFNfUk9NX0FMSUFTKHgpICAoU19ST01fQUxJQVNfQkFTRSArICh4KSkKKyNkZWZpbmUgTlNfUk9NX0FMSUFTKHgpIChOU19ST01fQUxJQVNfQkFTRSArICh4KSkKKworI2RlZmluZSBTX1JBTV9BTElBUyh4KSAgKFNfUkFNX0FMSUFTX0JBU0UgKyAoeCkpCisjZGVmaW5lIE5TX1JBTV9BTElBUyh4KSAoTlNfUkFNX0FMSUFTX0JBU0UgKyAoeCkpCisKKy8qIFNlY3VyZSByZWdpb25zICovCisjZGVmaW5lIFNfSU1BR0VfUFJJTUFSWV9BUkVBX09GRlNFVCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoU19JTUFHRV9QUklNQVJZX1BBUlRJVElPTl9PRkZTRVQgKyBCTDJfSEVBREVSX1NJWkUpICAgICAgIC8qIDB4ODQwMCAqLworI2RlZmluZSBTX0NPREVfU1RBUlQgICAgKFNfUk9NX0FMSUFTKFNfSU1BR0VfUFJJTUFSWV9BUkVBX09GRlNFVCkpICAgICAgICAgICAgICAgICAvKiAweDg0MDAgKi8KKyNkZWZpbmUgU19DT0RFX1NJWkUgICAgIChJTUFHRV9TX0NPREVfU0laRSAtIENNU0VfVkVORUVSX1JFR0lPTl9TSVpFKQorI2RlZmluZSBTX0NPREVfTElNSVQgICAgKFNfQ09ERV9TVEFSVCArIFNfQ09ERV9TSVpFIC0gMSkKKworI2RlZmluZSBTX0RBVEFfU1RBUlQgICAgKFNfUkFNX0FMSUFTKDB4MCkpCisjZGVmaW5lIFNfREFUQV9TSVpFICAgICAoNjQgKiAxMDI0KQorI2RlZmluZSBTX0RBVEFfTElNSVQgICAgKFNfREFUQV9TVEFSVCArIFNfREFUQV9TSVpFIC0gMSkKKworLyogQ01TRSBWZW5lZXJzIHJlZ2lvbiAqLworI2RlZmluZSBDTVNFX1ZFTkVFUl9SRUdJT05fU1RBUlQgIChTX0NPREVfTElNSVQgKyAxKQorCisvKiBOb24tc2VjdXJlIHJlZ2lvbnMgKi8KKyNkZWZpbmUgTlNfSU1BR0VfUFJJTUFSWV9BUkVBX09GRlNFVCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoTlNfSU1BR0VfUFJJTUFSWV9QQVJUSVRJT05fT0ZGU0VUICsgQkwyX0hFQURFUl9TSVpFKQorI2RlZmluZSBOU19DT0RFX1NUQVJUICAgKE5TX1JPTV9BTElBUyhOU19JTUFHRV9QUklNQVJZX0FSRUFfT0ZGU0VUKSkKKyNkZWZpbmUgTlNfQ09ERV9TSVpFICAgIChJTUFHRV9OU19DT0RFX1NJWkUpCisjZGVmaW5lIE5TX0NPREVfTElNSVQgICAoTlNfQ09ERV9TVEFSVCArIE5TX0NPREVfU0laRSAtIDEpCisKKyNkZWZpbmUgTlNfREFUQV9TVEFSVCAgIChOU19SQU1fQUxJQVMoU19EQVRBX1NJWkUpKQorI2RlZmluZSBOU19EQVRBX1NJWkUgICAgKFRPVEFMX1JBTV9TSVpFIC0gU19EQVRBX1NJWkUpCisjZGVmaW5lIE5TX0RBVEFfTElNSVQgICAoTlNfREFUQV9TVEFSVCArIE5TX0RBVEFfU0laRSAtIDEpCisKKy8qIE5TIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBNUEMgYW5kIFNBVSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIE5TX1BBUlRJVElPTl9TVEFSVCBcCisgICAgICAgICAgICAoTlNfUk9NX0FMSUFTKE5TX0lNQUdFX1BSSU1BUllfUEFSVElUSU9OX09GRlNFVCkpCisjZGVmaW5lIE5TX1BBUlRJVElPTl9TSVpFIChGTEFTSF9OU19QQVJUSVRJT05fU0laRSkKKworLyogU2Vjb25kYXJ5IHBhcnRpdGlvbiBmb3IgbmV3IGltYWdlcyBpbiBjYXNlIG9mIGZpcm13YXJlIHVwZ3JhZGUgKi8KKyNkZWZpbmUgU0VDT05EQVJZX1BBUlRJVElPTl9TVEFSVCBcCisgICAgICAgICAgICAoTlNfUk9NX0FMSUFTKFNfSU1BR0VfU0VDT05EQVJZX1BBUlRJVElPTl9PRkZTRVQpKQorI2RlZmluZSBTRUNPTkRBUllfUEFSVElUSU9OX1NJWkUgKEZMQVNIX1NfUEFSVElUSU9OX1NJWkUgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfTlNfUEFSVElUSU9OX1NJWkUpCisKKyNpZmRlZiBCTDIKKy8qIEJvb3Rsb2FkZXIgcmVnaW9ucyAqLworI2RlZmluZSBCTDJfQ09ERV9TVEFSVCAgICAoU19ST01fQUxJQVMoRkxBU0hfQVJFQV9CTDJfT0ZGU0VUKSkKKyNkZWZpbmUgQkwyX0NPREVfU0laRSAgICAgKEZMQVNIX0FSRUFfQkwyX1NJWkUpCisjZGVmaW5lIEJMMl9DT0RFX0xJTUlUICAgIChCTDJfQ09ERV9TVEFSVCArIEJMMl9DT0RFX1NJWkUgLSAxKQorCisjZGVmaW5lIEJMMl9EQVRBX1NUQVJUICAgIChTX1JBTV9BTElBUygweDApKQorI2RlZmluZSBCTDJfREFUQV9TSVpFICAgICAoVE9UQUxfUkFNX1NJWkUpCisjZGVmaW5lIEJMMl9EQVRBX0xJTUlUICAgIChCTDJfREFUQV9TVEFSVCArIEJMMl9EQVRBX1NJWkUgLSAxKQorI2VuZGlmIC8qIEJMMiAqLworCisvKiBTaGFyZWQgZGF0YSBhcmVhIGJldHdlZW4gYm9vdGxvYWRlciBhbmQgcnVudGltZSBmaXJtd2FyZS4KKyAqIFNoYXJlZCBkYXRhIGFyZWEgaXMgYWxsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFJBTSwgaXQgaXMgb3ZlcmxhcHBpbmcKKyAqIHdpdGggVEYtTSBTZWN1cmUgY29kZSdzIE1TUCBzdGFjaworICovCisjZGVmaW5lIEJPT1RfVEZNX1NIQVJFRF9EQVRBX0JBU0UgU19SQU1fQUxJQVNfQkFTRQorI2RlZmluZSBCT09UX1RGTV9TSEFSRURfREFUQV9TSVpFICgweDQwMCkKKyNkZWZpbmUgQk9PVF9URk1fU0hBUkVEX0RBVEFfTElNSVQgKEJPT1RfVEZNX1NIQVJFRF9EQVRBX0JBU0UgKyBCT09UX1RGTV9TSEFSRURfREFUQV9TSVpFIC0gMSkKKworI2VuZGlmIC8qIF9fUkVHSU9OX0RFRlNfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcGxhdF90ZXN0LmMgYi9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvcGxhdF90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NTcyYQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wbGF0X3Rlc3QuYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjAsIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKi8KKworI2luY2x1ZGUgInRpbWVyX2Ntc2RrX2Rydi5oIgorI2luY2x1ZGUgInRmbV9wbGF0X2RlZnMuaCIKKyNpbmNsdWRlICJ0Zm1fcGxhdF90ZXN0LmgiCisjaW5jbHVkZSAiZGV2aWNlX2RlZmluaXRpb24uaCIKKworI2RlZmluZSBVU0VSTEVEX01BU0sgICAgICAgICAgICAgICAgKDB4MykKKyNkZWZpbmUgQlROX1dBSVRfSU5JVF9DT1VOVEVSX1ZBTFVFICgxMDAwMHUpCisjZGVmaW5lIFRJTUVSX1JFTE9BRF9WQUxVRSAgICAgICAgICAoMTIwMDAwMDApCisKKy8qKgorICogXGJyaWVmIFN0b3JlIHRoZSBzdGF0ZSBvZiB0aGUgbW9ja2VkIExFRAorICoKKyAqIFRoaXMgdmFyaWFibGUgaGF2ZSB0byBiZSBsaW5rZWQgdG8gdGhlIGRhdGEgc2VjdGlvbiBvZiB0aGUgcGFydGl0aW9uCisgKiBURk1fU1BfQ09SRV9URVNUIHNvIHRoYXQgaW4gY2FzZSBvZiBpbiBjYXNlIG9mIGlzb2xhdGlvbiB3aXRoaW4gdGhlIHNlY3VyZQorICogZG9tYWluIHRoZSBDb3JlIFRlc3Qgc2VydmljZSBjYW4gYWNjZXNzIGl0LgorICovCit1aW50MzJfdCBsZWRfc3RhdHVzCisgICAgVEZNX0xJTktfU0VUX1JXX0lOX1BBUlRJVElPTl9TRUNUSU9OKCJURk1fU1BfQ09SRV9URVNUIikKKyAgICA9IDB4MDJ1OworCisvKioKKyAqIFxicmllZiBTaW11bGF0ZSB1c2VyIHJlYWN0aW9uIHRpbWUKKyAqLworc3RhdGljIHZvaWQgYnVzeV93YWl0X3RvX3NpbXVsYXRlX3VzZXIodm9pZCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBjb3VudGVyID0gQlROX1dBSVRfSU5JVF9DT1VOVEVSX1ZBTFVFOworICAgIHdoaWxlIChjb3VudGVyKQorICAgIHsKKyAgICAgICAgLS1jb3VudGVyOworICAgIH0KK30KKwordm9pZCB0Zm1fcGxhdF90ZXN0X3dhaXRfdXNlcl9idXR0b25fcHJlc3NlZCh2b2lkKQoreworICAgIGJ1c3lfd2FpdF90b19zaW11bGF0ZV91c2VyKCk7Cit9CisKK3ZvaWQgdGZtX3BsYXRfdGVzdF93YWl0X3VzZXJfYnV0dG9uX3JlbGVhc2VkKHZvaWQpCit7CisgICAgYnVzeV93YWl0X3RvX3NpbXVsYXRlX3VzZXIoKTsKK30KKwordWludDMyX3QgdGZtX3BsYXRfdGVzdF9nZXRfbGVkX3N0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBsZWRfc3RhdHVzOworfQorCit2b2lkIHRmbV9wbGF0X3Rlc3Rfc2V0X2xlZF9zdGF0dXModWludDMyX3Qgc3RhdHVzKQoreworICAgIGxlZF9zdGF0dXMgPSBzdGF0dXMgJiBVU0VSTEVEX01BU0s7Cit9CisKK3VpbnQzMl90IHRmbV9wbGF0X3Rlc3RfZ2V0X3VzZXJsZWRfbWFzayh2b2lkKQoreworICAgIHJldHVybiBVU0VSTEVEX01BU0s7Cit9CisKK3ZvaWQgdGZtX3BsYXRfdGVzdF9ub25fc2VjdXJlX3RpbWVyX3N0YXJ0KHZvaWQpCit7CisgICAgaWYoIXRpbWVyX2Ntc2RrX2lzX2luaXRpYWxpemVkKCZDTVNES19USU1FUjJfREVWX05TKSkgeworICAgICAgICB0aW1lcl9jbXNka19pbml0KCZDTVNES19USU1FUjJfREVWX05TKTsKKyAgICB9CisKKyAgICB0aW1lcl9jbXNka19zZXRfcmVsb2FkX3ZhbHVlKCZDTVNES19USU1FUjJfREVWX05TLCBUSU1FUl9SRUxPQURfVkFMVUUpOworICAgIHRpbWVyX2Ntc2RrX2VuYWJsZSgmQ01TREtfVElNRVIyX0RFVl9OUyk7CisgICAgdGltZXJfY21zZGtfZW5hYmxlX2ludGVycnVwdCgmQ01TREtfVElNRVIyX0RFVl9OUyk7Cit9CisKK3ZvaWQgdGZtX3BsYXRfdGVzdF9ub25fc2VjdXJlX3RpbWVyX3N0b3Aodm9pZCkKK3sKKyAgICB0aW1lcl9jbXNka19kaXNhYmxlKCZDTVNES19USU1FUjJfREVWX05TKTsKKyAgICB0aW1lcl9jbXNka19kaXNhYmxlX2ludGVycnVwdCgmQ01TREtfVElNRVIyX0RFVl9OUyk7CisgICAgdGltZXJfY21zZGtfY2xlYXJfaW50ZXJydXB0KCZDTVNES19USU1FUjJfREVWX05TKTsKK30KKwordm9pZCB0Zm1fcGxhdF90ZXN0X3NlY3VyZV90aW1lcl9zdGFydCh2b2lkKQoreworICAgIGlmICghdGltZXJfY21zZGtfaXNfaW5pdGlhbGl6ZWQoJkNNU0RLX1RJTUVSMF9ERVZfUykpIHsKKyAgICAgICAgdGltZXJfY21zZGtfaW5pdCgmQ01TREtfVElNRVIwX0RFVl9TKTsKKyAgICB9CisgICAgdGltZXJfY21zZGtfc2V0X3JlbG9hZF92YWx1ZSgmQ01TREtfVElNRVIwX0RFVl9TLCBUSU1FUl9SRUxPQURfVkFMVUUpOworICAgIHRpbWVyX2Ntc2RrX2VuYWJsZSgmQ01TREtfVElNRVIwX0RFVl9TKTsKKyAgICB0aW1lcl9jbXNka19lbmFibGVfaW50ZXJydXB0KCZDTVNES19USU1FUjBfREVWX1MpOworfQorCit2b2lkIHRmbV9wbGF0X3Rlc3Rfc2VjdXJlX3RpbWVyX3N0b3Aodm9pZCkKK3sKKyAgICB0aW1lcl9jbXNka19kaXNhYmxlKCZDTVNES19USU1FUjBfREVWX1MpOworICAgIHRpbWVyX2Ntc2RrX2Rpc2FibGVfaW50ZXJydXB0KCZDTVNES19USU1FUjBfREVWX1MpOworICAgIHRpbWVyX2Ntc2RrX2NsZWFyX2ludGVycnVwdCgmQ01TREtfVElNRVIwX0RFVl9TKTsKK30KZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wcmVsb2FkLmNtYWtlIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3ByZWxvYWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIwYThlYQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9wcmVsb2FkLmNtYWtlCkBAIC0wLDAgKzEsMjAgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvcHlyaWdodCAoYykgMjAyMCwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgcHJlbG9hZC5jbWFrZSBpcyB1c2VkIHRvIHNldCB0aGluZ3MgdGhhdCByZWxhdGVkIHRvIHRoZSBwbGF0Zm9ybSB0aGF0IGFyZSBib3RoCisjIGltbXV0YWJsZSBhbmQgZ2xvYmFsLCB3aGljaCBpcyB0byBzYXkgdGhleSBzaG91bGQgYXBwbHkgdG8gYW55IGtpbmQgb2YgcHJvamVjdAorIyB0aGF0IHVzZXMgdGhpcyBwbGF0Zm9ybS4gSW4gcHJhY3Rpc2UgdGhpcyBpcyBub3JtYWxseSBjb21waWxlciBkZWZpbml0aW9ucyBhbmQKKyMgdmFyaWFibGVzIHJlbGF0ZWQgdG8gaGFyZHdhcmUuCisKKyMgU2V0IGFyY2hpdGVjdHVyZSBhbmQgQ1BVCitzZXQoVEZNX1NZU1RFTV9QUk9DRVNTT1IgY29ydGV4LW0yMykKK3NldChURk1fU1lTVEVNX0FSQ0hJVEVDVFVSRSBhcm12OC1tLmJhc2UpCisKK3NldChNQ1VCT09UX0lNQUdFX05VTUJFUiAxKQorCisjIFJlbG9hZCBjb21waWxlciB0byBnZW5lcmF0ZSBvcHRpb25zIGZyb20gdGhlIENQVSBhbmQgYXJjaGl0ZWN0dXJlCitfY29tcGlsZXJfcmVsb2FkKCkKZGlmZiAtLWdpdCBhL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9zZXJ2aWNlcy9zcmMvdGZtX3BsYXRmb3JtX3N5c3RlbS5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3NlcnZpY2VzL3NyYy90Zm1fcGxhdGZvcm1fc3lzdGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmYWZiYwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXRmb3JtL2V4dC90YXJnZXQvbnV2b3Rvbi9tMjM1MS9zZXJ2aWNlcy9zcmMvdGZtX3BsYXRmb3JtX3N5c3RlbS5jCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqLworCisjaW5jbHVkZSAidGZtX3BsYXRmb3JtX3N5c3RlbS5oIgorI2luY2x1ZGUgImNtc2lzLmgiCisKK3ZvaWQgdGZtX3BsYXRmb3JtX2hhbF9zeXN0ZW1fcmVzZXQodm9pZCkKK3sKKyAgICAvKiBSZXNldCB0aGUgc3lzdGVtICovCisgICAgTlZJQ19TeXN0ZW1SZXNldCgpOworfQorCitlbnVtIHRmbV9wbGF0Zm9ybV9lcnJfdCB0Zm1fcGxhdGZvcm1faGFsX2lvY3RsKHRmbV9wbGF0Zm9ybV9pb2N0bF9yZXFfdCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfaW52ZWMgICppbl92ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9vdXR2ZWMgKm91dF92ZWMpCit7CisgICAgKHZvaWQpcmVxdWVzdDsKKyAgICAodm9pZClpbl92ZWM7CisgICAgKHZvaWQpb3V0X3ZlYzsKKworICAgIC8qIE5vdCBuZWVkZWQgZm9yIHRoaXMgcGxhdGZvcm0gKi8KKyAgICByZXR1cm4gVEZNX1BMQVRGT1JNX0VSUl9OT1RfU1VQUE9SVEVEOworfQorCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvc3BtX2hhbC5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3NwbV9oYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOThmOThiCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3NwbV9oYWwuYwpAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwLCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImNtc2lzLmgiCisjaW5jbHVkZSAidGZtX3NwbV9oYWwuaCIKKyNpbmNsdWRlICJ0Zm1fcGxhdGZvcm1fY29yZV9hcGkuaCIKKyNpbmNsdWRlICJ0YXJnZXRfY2ZnLmgiCisjaW5jbHVkZSAiRHJpdmVyX01QQy5oIgorI2luY2x1ZGUgIm1wdV9hcm12OG1fZHJ2LmgiCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKyNpbmNsdWRlICJ1dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJyZWdpb24uaCIKKworI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpL3NpemVvZihhcnJbMF0pKQorCisvKiBJbXBvcnQgTVBDIGRyaXZlciAqLworZXh0ZXJuIEFSTV9EUklWRVJfTVBDIERyaXZlcl9TUkFNMV9NUEM7CisKKy8qIEdldCBhZGRyZXNzIG9mIG1lbW9yeSByZWdpb25zIHRvIGNvbmZpZ3VyZSBNUFUgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgbWVtb3J5X3JlZ2lvbl9saW1pdHMgbWVtb3J5X3JlZ2lvbnM7CisKK3N0cnVjdCBtcHVfYXJtdjhtX2Rldl90IGRldl9tcHVfcyA9IHsgTVBVX0JBU0UgfTsKKworZW51bSB0Zm1fcGxhdF9lcnJfdCB0Zm1fc3BtX2hhbF9pbml0X2lzb2xhdGlvbl9odyh2b2lkKQoreworICAgIGludDMyX3QgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAvKiBDb25maWd1cmVzIG5vbi1zZWN1cmUgbWVtb3J5IHNwYWNlcyBpbiB0aGUgdGFyZ2V0ICovCisgICAgc2F1X2FuZF9pZGF1X2NmZygpOworICAgIHJldCA9IG1wY19pbml0X2NmZygpOworICAgIGlmIChyZXQgIT0gQVJNX0RSSVZFUl9PSykgeworICAgICAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NZU1RFTV9FUlI7CisgICAgfQorICAgIHBwY19pbml0X2NmZygpOworICAgIHJldHVybiBURk1fUExBVF9FUlJfU1VDQ0VTUzsKK30KKworZW51bSB0Zm1fcGxhdF9lcnJfdCB0Zm1fc3BtX2hhbF9jb25maWd1cmVfZGVmYXVsdF9pc29sYXRpb24oCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwYXJ0aXRpb25faWR4LAorICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRmbV9zcG1fcGFydGl0aW9uX3BsYXRmb3JtX2RhdGFfdCAqcGxhdGZvcm1fZGF0YSkKK3sKKyAgICBib29sIHByaXZpbGVnZWQgPSB0Zm1faXNfcGFydGl0aW9uX3ByaXZpbGVnZWQocGFydGl0aW9uX2lkeCk7CisKKyAgICBpZiAoIXBsYXRmb3JtX2RhdGEpIHsKKyAgICAgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9JTlZBTElEX0lOUFVUOworICAgIH0KKworICAgIGlmIChwbGF0Zm9ybV9kYXRhLT5wZXJpcGhfcHBjX2JhbmsgIT0gUFBDX1NQX0RPX05PVF9DT05GSUdVUkUpIHsKKyAgICAgICAgcHBjX2NvbmZpZ3VyZV90b19zZWN1cmUocGxhdGZvcm1fZGF0YS0+cGVyaXBoX3BwY19iYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9kYXRhLT5wZXJpcGhfcHBjX2xvYyk7CisgICAgICAgIGlmIChwcml2aWxlZ2VkKSB7CisgICAgICAgICAgICBwcGNfY2xyX3NlY3VyZV91bnByaXYocGxhdGZvcm1fZGF0YS0+cGVyaXBoX3BwY19iYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2RhdGEtPnBlcmlwaF9wcGNfbG9jKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBwY19lbl9zZWN1cmVfdW5wcml2KHBsYXRmb3JtX2RhdGEtPnBlcmlwaF9wcGNfYmFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2RhdGEtPnBlcmlwaF9wcGNfbG9jKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisKKyNpZmRlZiBDT05GSUdfVEZNX0VOQUJMRV9NRU1PUllfUFJPVEVDVAorCisjZGVmaW5lIE1QVV9SRUdJT05fVkVORUVSUyAgICAgICAgICAgMAorI2RlZmluZSBNUFVfUkVHSU9OX1RGTV9VTlBSSVZfQ09ERSAgIDEKKyNkZWZpbmUgTVBVX1JFR0lPTl9URk1fVU5QUklWX0RBVEEgICAyCisjZGVmaW5lIE1QVV9SRUdJT05fTlNfU1RBQ0sgICAgICAgICAgMworI2RlZmluZSBQQVJUSVRJT05fUkVHSU9OX1JPICAgICAgICAgIDQKKyNkZWZpbmUgUEFSVElUSU9OX1JFR0lPTl9SV19TVEFDSyAgICA1CisjZGVmaW5lIFBBUlRJVElPTl9SRUdJT05fUEVSSVBIICAgICAgNgorCitSRUdJT05fREVDTEFSRShMb2FkJCRMUiQkLCBMUl9WRU5FRVIsICQkQmFzZSk7CitSRUdJT05fREVDTEFSRShMb2FkJCRMUiQkLCBMUl9WRU5FRVIsICQkTGltaXQpOworUkVHSU9OX0RFQ0xBUkUoSW1hZ2UkJCwgVEZNX1VOUFJJVl9DT0RFLCAkJFJPJCRCYXNlKTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIFRGTV9VTlBSSVZfQ09ERSwgJCRSTyQkTGltaXQpOworUkVHSU9OX0RFQ0xBUkUoSW1hZ2UkJCwgVEZNX1VOUFJJVl9EQVRBLCAkJFJXJCRCYXNlKTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIFRGTV9VTlBSSVZfREFUQSwgJCRaSSQkTGltaXQpOworUkVHSU9OX0RFQ0xBUkUoSW1hZ2UkJCwgVEZNX0FQUF9DT0RFX1NUQVJULCAkJEJhc2UpOworUkVHSU9OX0RFQ0xBUkUoSW1hZ2UkJCwgVEZNX0FQUF9DT0RFX0VORCwgJCRCYXNlKTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIFRGTV9BUFBfUldfU1RBQ0tfU1RBUlQsICQkQmFzZSk7CitSRUdJT05fREVDTEFSRShJbWFnZSQkLCBURk1fQVBQX1JXX1NUQUNLX0VORCwgJCRCYXNlKTsKK1JFR0lPTl9ERUNMQVJFKEltYWdlJCQsIEFSTV9MSUJfU1RBQ0ssICQkWkkkJEJhc2UpOworUkVHSU9OX0RFQ0xBUkUoSW1hZ2UkJCwgQVJNX0xJQl9TVEFDSywgJCRaSSQkTGltaXQpOworCitjb25zdCBzdHJ1Y3QgbXB1X2FybXY4bV9yZWdpb25fY2ZnX3QgcmVnaW9uX2NmZ1tdID0geworICAgICAgICAgICAvKiBWZW5lZXIgcmVnaW9uICovCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIE1QVV9SRUdJT05fVkVORUVSUywKKyAgICAgICAgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoTG9hZCQkTFIkJCwgTFJfVkVORUVSLCAkJEJhc2UpLAorICAgICAgICAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShMb2FkJCRMUiQkLCBMUl9WRU5FRVIsICQkTGltaXQpLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9NQUlSX0FUVFJfQ09ERV9JRFgsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX1hOX0VYRUNfT0ssCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX0FQX1JPX1BSSVZfVU5QUklWLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9TSF9OT05FCisgICAgICAgICAgIH0sCisgICAgICAgICAgIC8qIFRGTSBDb3JlIHVucHJpdmlsZWdlZCBjb2RlIHJlZ2lvbiAqLworICAgICAgICAgICB7CisgICAgICAgICAgICAgICBNUFVfUkVHSU9OX1RGTV9VTlBSSVZfQ09ERSwKKyAgICAgICAgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoSW1hZ2UkJCwgVEZNX1VOUFJJVl9DT0RFLCAkJFJPJCRCYXNlKSwKKyAgICAgICAgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoSW1hZ2UkJCwgVEZNX1VOUFJJVl9DT0RFLCAkJFJPJCRMaW1pdCksCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX01BSVJfQVRUUl9DT0RFX0lEWCwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fWE5fRVhFQ19PSywKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fQVBfUk9fUFJJVl9VTlBSSVYsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX1NIX05PTkUKKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgLyogVEZNIENvcmUgdW5wcml2aWxlZ2VkIGRhdGEgcmVnaW9uICovCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIE1QVV9SRUdJT05fVEZNX1VOUFJJVl9EQVRBLAorICAgICAgICAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShJbWFnZSQkLCBURk1fVU5QUklWX0RBVEEsICQkUlckJEJhc2UpLAorICAgICAgICAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShJbWFnZSQkLCBURk1fVU5QUklWX0RBVEEsICQkWkkkJExpbWl0KSwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fTUFJUl9BVFRSX0RBVEFfSURYLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9YTl9FWEVDX05FVkVSLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9BUF9SV19QUklWX1VOUFJJViwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fU0hfTk9ORQorICAgICAgICAgICB9LAorICAgICAgICAgICAvKiBOU1BNIFBTUCAqLworICAgICAgICAgICB7CisgICAgICAgICAgICAgICBNUFVfUkVHSU9OX05TX1NUQUNLLAorICAgICAgICAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShJbWFnZSQkLCBBUk1fTElCX1NUQUNLLCAkJFpJJCRCYXNlKSwKKyAgICAgICAgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoSW1hZ2UkJCwgQVJNX0xJQl9TVEFDSywgJCRaSSQkTGltaXQpLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9NQUlSX0FUVFJfREFUQV9JRFgsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX1hOX0VYRUNfTkVWRVIsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX0FQX1JXX1BSSVZfVU5QUklWLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9TSF9OT05FCisgICAgICAgICAgIH0sCisgICAgICAgICAgIC8qIFJPIHJlZ2lvbiAqLworICAgICAgICAgICB7CisgICAgICAgICAgICAgICBQQVJUSVRJT05fUkVHSU9OX1JPLAorICAgICAgICAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShJbWFnZSQkLCBURk1fQVBQX0NPREVfU1RBUlQsICQkQmFzZSksCisgICAgICAgICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKEltYWdlJCQsIFRGTV9BUFBfQ09ERV9FTkQsICQkQmFzZSksCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX01BSVJfQVRUUl9DT0RFX0lEWCwKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fWE5fRVhFQ19PSywKKyAgICAgICAgICAgICAgIE1QVV9BUk1WOE1fQVBfUk9fUFJJVl9VTlBSSVYsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX1NIX05PTkUKKyAgICAgICAgICAgfSwKKyAgICAgICAgICAgLyogUlcsIFpJIGFuZCBzdGFjayBhcyBvbmUgcmVnaW9uICovCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIFBBUlRJVElPTl9SRUdJT05fUldfU1RBQ0ssCisgICAgICAgICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKEltYWdlJCQsIFRGTV9BUFBfUldfU1RBQ0tfU1RBUlQsICQkQmFzZSksCisgICAgICAgICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKEltYWdlJCQsIFRGTV9BUFBfUldfU1RBQ0tfRU5ELCAkJEJhc2UpLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9NQUlSX0FUVFJfREFUQV9JRFgsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX1hOX0VYRUNfTkVWRVIsCisgICAgICAgICAgICAgICBNUFVfQVJNVjhNX0FQX1JXX1BSSVZfVU5QUklWLAorICAgICAgICAgICAgICAgTVBVX0FSTVY4TV9TSF9OT05FCisgICAgICAgICAgIH0KKyAgICAgICB9OworCitzdGF0aWMgZW51bSB0Zm1fcGxhdF9lcnJfdCB0Zm1fc3BtX21wdV9pbml0KHZvaWQpCit7CisgICAgaW50MzJfdCBpOworCisgICAgbXB1X2FybXY4bV9jbGVhbigmZGV2X21wdV9zKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ2lvbl9jZmcpOyBpKyspIHsKKyAgICAgICAgaWYgKG1wdV9hcm12OG1fcmVnaW9uX2VuYWJsZSgmZGV2X21wdV9zLAorICAgICAgICAgICAgKHN0cnVjdCBtcHVfYXJtdjhtX3JlZ2lvbl9jZmdfdCAqKSZyZWdpb25fY2ZnW2ldKQorICAgICAgICAgICAgIT0gTVBVX0FSTVY4TV9PSykgeworICAgICAgICAgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TWVNURU1fRVJSOworICAgICAgICB9CisgICAgfQorCisgICAgbXB1X2FybXY4bV9lbmFibGUoJmRldl9tcHVfcywgUFJJVklMRUdFRF9ERUZBVUxUX0VOQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICBIQVJERkFVTFRfTk1JX0VOQUJMRSk7CisKKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisKK2VudW0gdGZtX3BsYXRfZXJyX3QgdGZtX3NwbV9oYWxfc2V0dXBfaXNvbGF0aW9uX2h3KHZvaWQpCit7CisgICAgaWYgKHRmbV9zcG1fbXB1X2luaXQoKSAhPSBURk1fUExBVF9FUlJfU1VDQ0VTUykgeworICAgICAgICBFUlJPUl9NU0coIkZhaWxlZCB0byBzZXQgdXAgaW5pdGlhbCBNUFUgY29uZmlndXJhdGlvbiEgSGFsdGluZy4iKTsKKyAgICAgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TWVNURU1fRVJSOworICAgIH0KKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisjZW5kaWYgLyogQ09ORklHX1RGTV9FTkFCTEVfTUVNT1JZX1BST1RFQ1QgKi8KKwordm9pZCBTQ1VfSVJRSGFuZGxlcih2b2lkKQoreworICAgIEVSUk9SX01TRygiT29wcy4uLiBzZWN1cmUgdmlvbGF0aW9uIGZhdWx0ISEhIik7CisKKyAgICAvKiBJbmZvcm0gVEYtTSBjb3JlIHRoYXQgaXNvbGF0aW9uIGJvdW5kYXJ5IGhhcyBiZWVuIHZpb2xhdGVkICovCisgICAgdGZtX2FjY2Vzc192aW9sYXRpb25faGFuZGxlcigpOworfQorCit2b2lkIE1QQ19IYW5kbGVyKHZvaWQpCit7CisgICAgLyogUHJpbnQgZmF1bHQgbWVzc2FnZSBhbmQgYmxvY2sgZXhlY3V0aW9uICovCisgICAgRVJST1JfTVNHKCJPb3BzLi4uIFVuZXhwZWN0ZWQgZmF1bHQhISEiKTsKKworICAgIC8qIEluZm9ybSBURi1NIGNvcmUgdGhhdCBpc29sYXRpb24gYm91bmRhcnkgaGFzIGJlZW4gdmlvbGF0ZWQgKi8KKyAgICB0Zm1fYWNjZXNzX3Zpb2xhdGlvbl9oYW5kbGVyKCk7Cit9CisKK3ZvaWQgUFBDX0hhbmRsZXIodm9pZCkKK3sKKyAgICAvKiBQcmludCBmYXVsdCBtZXNzYWdlIGFuZCBibG9jayBleGVjdXRpb24gKi8KKyAgICBFUlJPUl9NU0coIk9vcHMuLi4gVW5leHBlY3RlZCBmYXVsdCEhISIpOworCisgICAgLyogSW5mb3JtIFRGLU0gY29yZSB0aGF0IGlzb2xhdGlvbiBib3VuZGFyeSBoYXMgYmVlbiB2aW9sYXRlZCAqLworICAgIHRmbV9hY2Nlc3NfdmlvbGF0aW9uX2hhbmRsZXIoKTsKK30KKwordWludDMyX3QgdGZtX3NwbV9oYWxfZ2V0X25zX1ZUT1Iodm9pZCkKK3sKKyAgICByZXR1cm4gbWVtb3J5X3JlZ2lvbnMubm9uX3NlY3VyZV9jb2RlX3N0YXJ0OworfQorCit1aW50MzJfdCB0Zm1fc3BtX2hhbF9nZXRfbnNfTVNQKHZvaWQpCit7CisgICAgcmV0dXJuICooKHVpbnQzMl90ICopbWVtb3J5X3JlZ2lvbnMubm9uX3NlY3VyZV9jb2RlX3N0YXJ0KTsKK30KKwordWludDMyX3QgdGZtX3NwbV9oYWxfZ2V0X25zX2VudHJ5X3BvaW50KHZvaWQpCit7CisgICAgcmV0dXJuICooKHVpbnQzMl90ICopKG1lbW9yeV9yZWdpb25zLm5vbl9zZWN1cmVfY29kZV9zdGFydCsgNCkpOworfQorCitlbnVtIHRmbV9wbGF0X2Vycl90IHRmbV9zcG1faGFsX3NldF9zZWN1cmVfaXJxX3ByaW9yaXR5KElSUW5fVHlwZSBpcnFfbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHJpb3JpdHkpCit7CisgICAgdWludDMyX3QgcXVhbnRpemVkX3ByaW9yaXR5ID0gcHJpb3JpdHkgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUyk7CisgICAgTlZJQ19TZXRQcmlvcml0eShpcnFfbGluZSwgcXVhbnRpemVkX3ByaW9yaXR5KTsKKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisKK3ZvaWQgdGZtX3NwbV9oYWxfY2xlYXJfcGVuZGluZ19pcnEoSVJRbl9UeXBlIGlycV9saW5lKQoreworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKGlycV9saW5lKTsKK30KKwordm9pZCB0Zm1fc3BtX2hhbF9lbmFibGVfaXJxKElSUW5fVHlwZSBpcnFfbGluZSkKK3sKKyAgICBOVklDX0VuYWJsZUlSUShpcnFfbGluZSk7Cit9CisKK3ZvaWQgdGZtX3NwbV9oYWxfZGlzYWJsZV9pcnEoSVJRbl9UeXBlIGlycV9saW5lKQoreworICAgIE5WSUNfRGlzYWJsZUlSUShpcnFfbGluZSk7Cit9CisKK2VudW0gaXJxX3RhcmdldF9zdGF0ZV90IHRmbV9zcG1faGFsX3NldF9pcnFfdGFyZ2V0X3N0YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUW5fVHlwZSBpcnFfbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGlycV90YXJnZXRfc3RhdGVfdCB0YXJnZXRfc3RhdGUpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICAgaWYgKHRhcmdldF9zdGF0ZSA9PSBURk1fSVJRX1RBUkdFVF9TVEFURV9TRUNVUkUpIHsKKyAgICAgICAgcmVzdWx0ID0gTlZJQ19DbGVhclRhcmdldFN0YXRlKGlycV9saW5lKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHQgPSBOVklDX1NldFRhcmdldFN0YXRlKGlycV9saW5lKTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIHJldHVybiBURk1fSVJRX1RBUkdFVF9TVEFURV9OT05fU0VDVVJFOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBURk1fSVJRX1RBUkdFVF9TVEFURV9TRUNVUkU7CisgICAgfQorfQorCitlbnVtIHRmbV9wbGF0X2Vycl90IHRmbV9zcG1faGFsX2VuYWJsZV9mYXVsdF9oYW5kbGVycyh2b2lkKQoreworICAgIHJldHVybiBlbmFibGVfZmF1bHRfaGFuZGxlcnMoKTsKK30KKworZW51bSB0Zm1fcGxhdF9lcnJfdCB0Zm1fc3BtX2hhbF9zeXN0ZW1fcmVzZXRfY2ZnKHZvaWQpCit7CisgICAgcmV0dXJuIHN5c3RlbV9yZXNldF9jZmcoKTsKK30KKworZW51bSB0Zm1fcGxhdF9lcnJfdCB0Zm1fc3BtX2hhbF9pbml0X2RlYnVnKHZvaWQpCit7CisgICAgcmV0dXJuIGluaXRfZGVidWcoKTsKK30KKworZW51bSB0Zm1fcGxhdF9lcnJfdCB0Zm1fc3BtX2hhbF9udmljX2ludGVycnVwdF90YXJnZXRfc3RhdGVfY2ZnKHZvaWQpCit7CisgICAgcmV0dXJuIG52aWNfaW50ZXJydXB0X3RhcmdldF9zdGF0ZV9jZmcoKTsKK30KKworZW51bSB0Zm1fcGxhdF9lcnJfdCB0Zm1fc3BtX2hhbF9udmljX2ludGVycnVwdF9lbmFibGUodm9pZCkKK3sKKyAgICByZXR1cm4gbnZpY19pbnRlcnJ1cHRfZW5hYmxlKCk7Cit9CmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvdGFyZ2V0X2NmZy5jIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3RhcmdldF9jZmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmNhYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3RhcmdldF9jZmcuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIEFybSBMaW1pdGVkCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgImNtc2lzLmgiCisjaW5jbHVkZSAidGFyZ2V0X2NmZy5oIgorI2luY2x1ZGUgIkRyaXZlcl9NUEMuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybV9kZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgImRldmljZV9kZWZpbml0aW9uLmgiCisjaW5jbHVkZSAicmVnaW9uX2RlZnMuaCIKKyNpbmNsdWRlICJ0Zm1fcGxhdF9kZWZzLmgiCisjaW5jbHVkZSAicmVnaW9uLmgiCisjaW5jbHVkZSAidGZtX3NlY3VyZV9hcGkuaCIKKworI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpL3NpemVvZihhcnJbMF0pKQorCisvKiBUaGUgc2VjdGlvbiBuYW1lcyBjb21lIGZyb20gdGhlIHNjYXR0ZXIgZmlsZSAqLworUkVHSU9OX0RFQ0xBUkUoTG9hZCQkTFIkJCwgTFJfTlNfUEFSVElUSU9OLCAkJEJhc2UpOworUkVHSU9OX0RFQ0xBUkUoTG9hZCQkTFIkJCwgTFJfVkVORUVSLCAkJEJhc2UpOworUkVHSU9OX0RFQ0xBUkUoTG9hZCQkTFIkJCwgTFJfVkVORUVSLCAkJExpbWl0KTsKKyNpZmRlZiBCTDIKK1JFR0lPTl9ERUNMQVJFKExvYWQkJExSJCQsIExSX1NFQ09OREFSWV9QQVJUSVRJT04sICQkQmFzZSk7CisjZW5kaWYgLyogQkwyICovCisKK2NvbnN0IHN0cnVjdCBtZW1vcnlfcmVnaW9uX2xpbWl0cyBtZW1vcnlfcmVnaW9ucyA9IHsKKyAgICAubm9uX3NlY3VyZV9jb2RlX3N0YXJ0ID0KKyAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShMb2FkJCRMUiQkLCBMUl9OU19QQVJUSVRJT04sICQkQmFzZSkgKworICAgICAgICBCTDJfSEVBREVSX1NJWkUsCisKKyAgICAubm9uX3NlY3VyZV9wYXJ0aXRpb25fYmFzZSA9CisgICAgICAgICh1aW50MzJfdCkmUkVHSU9OX05BTUUoTG9hZCQkTFIkJCwgTFJfTlNfUEFSVElUSU9OLCAkJEJhc2UpLAorCisgICAgLm5vbl9zZWN1cmVfcGFydGl0aW9uX2xpbWl0ID0KKyAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShMb2FkJCRMUiQkLCBMUl9OU19QQVJUSVRJT04sICQkQmFzZSkgKworICAgICAgICBOU19QQVJUSVRJT05fU0laRSAtIDEsCisKKyAgICAudmVuZWVyX2Jhc2UgPQorICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKExvYWQkJExSJCQsIExSX1ZFTkVFUiwgJCRCYXNlKSwKKworICAgIC52ZW5lZXJfbGltaXQgPQorICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKExvYWQkJExSJCQsIExSX1ZFTkVFUiwgJCRMaW1pdCksCisKKyNpZmRlZiBCTDIKKyAgICAuc2Vjb25kYXJ5X3BhcnRpdGlvbl9iYXNlID0KKyAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShMb2FkJCRMUiQkLCBMUl9TRUNPTkRBUllfUEFSVElUSU9OLCAkJEJhc2UpLAorCisgICAgLnNlY29uZGFyeV9wYXJ0aXRpb25fbGltaXQgPQorICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKExvYWQkJExSJCQsIExSX1NFQ09OREFSWV9QQVJUSVRJT04sICQkQmFzZSkgKworICAgICAgICBTRUNPTkRBUllfUEFSVElUSU9OX1NJWkUgLSAxLAorI2VuZGlmIC8qIEJMMiAqLworfTsKKworLyogQWxsb3dzIHNvZnR3YXJlLCB2aWEgU0FVLCB0byBkZWZpbmUgdGhlIGNvZGUgcmVnaW9uIGFzIGEgTlNDICovCisjZGVmaW5lIE5TQ0NGR19DT0RFTlNDICAxCisKKy8qIEltcG9ydCBNUEMgZHJpdmVyICovCitleHRlcm4gQVJNX0RSSVZFUl9NUEMgRHJpdmVyX1NSQU0xX01QQywgRHJpdmVyX1NSQU0yX01QQzsKKworLyogRGVmaW5lIFBlcmlwaGVyYWxzIE5TIGFkZHJlc3MgcmFuZ2UgZm9yIHRoZSBwbGF0Zm9ybSAqLworI2RlZmluZSBQRVJJUEhFUkFMU19CQVNFX05TX1NUQVJUICgweDQwMDAwMDAwKQorI2RlZmluZSBQRVJJUEhFUkFMU19CQVNFX05TX0VORCAgICgweDRGRkZGRkZGKQorCisvKiBFbmFibGUgc3lzdGVtIHJlc2V0IHJlcXVlc3QgZm9yIENQVSAwICovCisjZGVmaW5lIEVOQUJMRV9DUFUwX1NZU1RFTV9SRVNFVF9SRVFVRVNUICgxVSA8PCA0VSkKKworLyogVG8gd3JpdGUgaW50byBBSVJDUiByZWdpc3RlciwgMHg1RkEgdmFsdWUgbXVzdCBiZSB3cml0ZSB0byB0aGUgVkVDVEtFWSBmaWVsZCwKKyAqIG90aGVyd2lzZSB0aGUgcHJvY2Vzc29yIGlnbm9yZXMgdGhlIHdyaXRlLgorICovCisjZGVmaW5lIFNDQl9BSVJDUl9XUklURV9NQVNLICgoMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpKQorCisvKiBEZWJ1ZyBjb25maWd1cmF0aW9uIGZsYWdzICovCisjZGVmaW5lIFNQTklERU5fU0VMX1NUQVRVUyAoMHgwMXUgPDwgNykKKyNkZWZpbmUgU1BOSURFTl9TVEFUVVMgICAgICgweDAxdSA8PCA2KQorI2RlZmluZSBTUElERU5fU0VMX1NUQVRVUyAgKDB4MDF1IDw8IDUpCisjZGVmaW5lIFNQSURFTl9TVEFUVVMgICAgICAoMHgwMXUgPDwgNCkKKyNkZWZpbmUgTklERU5fU0VMX1NUQVRVUyAgICgweDAxdSA8PCAzKQorI2RlZmluZSBOSURFTl9TVEFUVVMgICAgICAgKDB4MDF1IDw8IDIpCisjZGVmaW5lIERCR0VOX1NFTF9TVEFUVVMgICAoMHgwMXUgPDwgMSkKKyNkZWZpbmUgREJHRU5fU1RBVFVTICAgICAgICgweDAxdSA8PCAwKQorCisjZGVmaW5lIEFsbF9TRUxfU1RBVFVTIChTUE5JREVOX1NFTF9TVEFUVVMgfCBTUElERU5fU0VMX1NUQVRVUyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5JREVOX1NFTF9TVEFUVVMgfCBEQkdFTl9TRUxfU1RBVFVTKQorCitzdHJ1Y3QgdGZtX3NwbV9wYXJ0aXRpb25fcGxhdGZvcm1fZGF0YV90IHRmbV9wZXJpcGhlcmFsX3N0ZF91YXJ0ID0geworICAgICAgICBVQVJUMF9CQVNFICsgTlNfT0ZGU0VULAorICAgICAgICBVQVJUMF9CQVNFICsgTlNfT0ZGU0VUICsgMHhGRkYsCisgICAgICAgIFBQQ19TUF9ET19OT1RfQ09ORklHVVJFLAorICAgICAgICAtMQorfTsKKworc3RydWN0IHRmbV9zcG1fcGFydGl0aW9uX3BsYXRmb3JtX2RhdGFfdCB0Zm1fcGVyaXBoZXJhbF91YXJ0MSA9IHsKKyAgICAgICAgVUFSVDFfQkFTRSwKKyAgICAgICAgVUFSVDFfQkFTRSArIDB4RkZGLAorICAgICAgICBQUENfU1BfRE9fTk9UX0NPTkZJR1VSRSwKKyAgICAgICAgLTEKK307CisKK3N0cnVjdCB0Zm1fc3BtX3BhcnRpdGlvbl9wbGF0Zm9ybV9kYXRhX3QgdGZtX3BlcmlwaGVyYWxfdGltZXIwID0geworICAgICAgICBUTVIwMV9CQVNFLAorICAgICAgICBUTVIwMV9CQVNFICsgMHhGRkYsCisgICAgICAgIFBQQ19TUF9ET19OT1RfQ09ORklHVVJFLAorICAgICAgICAtMQorfTsKKworZW51bSB0Zm1fcGxhdF9lcnJfdCBlbmFibGVfZmF1bHRfaGFuZGxlcnModm9pZCkKK3sKKyAgICAvKiBTZWN1cmUgZmF1bHQgaXMgbm90IHByZXNlbnQgaW4gdGhlIEJhc2VsaW5lIGltcGxlbWVudGF0aW9uLiAqLworICAgIC8qIEZhdWx0IGhhbmRsZXIgZW5hYmxlIHJlZ2lzdGVycyBhcmUgbm90IHByZXNlbnQgaW4gYSBCYXNlbGluZQorICAgICAqIGltcGxlbWVudGF0aW9uLgorICAgICAqLworICAgIHJldHVybiBURk1fUExBVF9FUlJfU1VDQ0VTUzsKK30KKworZW51bSB0Zm1fcGxhdF9lcnJfdCBzeXN0ZW1fcmVzZXRfY2ZnKHZvaWQpCit7CisgICAgdWludDMyX3QgcmVnX3ZhbHVlID0gU0NCLT5BSVJDUjsKKworICAgIC8qIENsZWFyIFNDQl9BSVJDUl9WRUNUS0VZIHZhbHVlICovCisgICAgcmVnX3ZhbHVlICY9IH4odWludDMyX3QpKFNDQl9BSVJDUl9WRUNUS0VZX01zayk7CisKKyAgICAvKiBFbmFibGUgc3lzdGVtIHJlc2V0IHJlcXVlc3QgZm9yIHRoZSBzZWN1cmUgd29ybGQgb25seSAqLworICAgIHJlZ192YWx1ZSB8PSAodWludDMyX3QpKFNDQl9BSVJDUl9XUklURV9NQVNLIHwgU0NCX0FJUkNSX1NZU1JFU0VUUkVRU19Nc2spOworCisgICAgU0NCLT5BSVJDUiA9IHJlZ192YWx1ZTsKKworICAgIHJldHVybiBURk1fUExBVF9FUlJfU1VDQ0VTUzsKK30KKworZW51bSB0Zm1fcGxhdF9lcnJfdCBpbml0X2RlYnVnKHZvaWQpCit7CisgICAgLyogU2V0IFVBUlQwIHRvIE5TIGZvciBkZWJ1ZyBtZXNzYWdlICovCisgICAgU0NVX1NFVF9QTlNTRVQoVUFSVDBfQXR0cik7CisKKyAgICByZXR1cm4gVEZNX1BMQVRfRVJSX1NVQ0NFU1M7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLSBOVklDIGludGVycnVwdCB0YXJnZXQgc3RhdGUgdG8gTlMgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tKi8KK2VudW0gdGZtX3BsYXRfZXJyX3QgbnZpY19pbnRlcnJ1cHRfdGFyZ2V0X3N0YXRlX2NmZyh2b2lkKQoreworICAgIC8qIFRhcmdldCBldmVyeSBpbnRlcnJ1cHQgdG8gTlM7IHVuaW1wbGVtZW50ZWQgaW50ZXJydXB0cyB3aWxsIGJlIFdJICovCisgICAgZm9yICh1aW50OF90IGk9MDsgaTxzaXplb2YoTlZJQy0+SVROUykvc2l6ZW9mKE5WSUMtPklUTlNbMF0pOyBpKyspIHsKKyAgICAgICAgTlZJQy0+SVROU1tpXSA9IDB4RkZGRkZGRkY7CisgICAgfQorCisjaWZkZWYgU0VDVVJFX1VBUlQxCisgICAgLyogVUFSVDEgaXMgYSBzZWN1cmUgcGVyaXBoZXJhbCwgc28gaXRzIElSUXMgaGF2ZSB0byB0YXJnZXQgUyBzdGF0ZSAqLworICAgIE5WSUNfQ2xlYXJUYXJnZXRTdGF0ZShVQVJUUlgxX0lSUW4pOworICAgIE5WSUNfQ2xlYXJUYXJnZXRTdGF0ZShVQVJUVFgxX0lSUW4pOworICAgIE5WSUNfQ2xlYXJUYXJnZXRTdGF0ZShVQVJUMV9JUlFuKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TVUNDRVNTOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tIE5WSUMgaW50ZXJydXB0IGVuYWJsaW5nIGZvciBTIHBlcmlwaGVyYWxzIC0tLS0tLS0tLS0tLS0tLS0qLworZW51bSB0Zm1fcGxhdF9lcnJfdCBudmljX2ludGVycnVwdF9lbmFibGUodm9pZCkKK3sKKworICAgIHJldHVybiBURk1fUExBVF9FUlJfU1VDQ0VTUzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tIFNBVS9JREFVIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBzYXVfY2ZnX3QgeworICAgIHVpbnQzMl90IFJCQVI7CisgICAgdWludDMyX3QgUkxBUjsKKyAgICBib29sIG5zYzsKK307CisKK2NvbnN0IHN0cnVjdCBzYXVfY2ZnX3Qgc2F1X2NmZ1tdID0geworICAgIHsKKyAgICAgICAgKCh1aW50MzJfdCkmUkVHSU9OX05BTUUoTG9hZCQkTFIkJCwgTFJfTlNfUEFSVElUSU9OLCAkJEJhc2UpKSwKKyAgICAgICAgKCh1aW50MzJfdCkmUkVHSU9OX05BTUUoTG9hZCQkTFIkJCwgTFJfTlNfUEFSVElUSU9OLCAkJEJhc2UpICsKKyAgICAgICAgTlNfUEFSVElUSU9OX1NJWkUgLSAxKSwKKyAgICAgICAgZmFsc2UsCisgICAgfSwKKyAgICB7CisgICAgICAgIE5TX0RBVEFfU1RBUlQsCisgICAgICAgIE5TX0RBVEFfTElNSVQsCisgICAgICAgIGZhbHNlLAorICAgIH0sCisgICAgeworICAgICAgICAodWludDMyX3QpJlJFR0lPTl9OQU1FKExvYWQkJExSJCQsIExSX1ZFTkVFUiwgJCRCYXNlKSwKKyAgICAgICAgKHVpbnQzMl90KSZSRUdJT05fTkFNRShMb2FkJCRMUiQkLCBMUl9WRU5FRVIsICQkTGltaXQpLAorICAgICAgICB0cnVlLAorICAgIH0sCisgICAgeworICAgICAgICAoUEVSSVBIX0JBU0UgKyBOU19PRkZTRVQpLAorICAgICAgICAoUEVSSVBIX0JBU0UgKyBOU19PRkZTRVQgKyAweDEwMDAwMDAwIC0gMSksCisgICAgICAgIGZhbHNlLAorICAgIH0KK307CisKK3ZvaWQgc2F1X2FuZF9pZGF1X2NmZyh2b2lkKQoreworICAgIHVpbnQzMl90IGk7CisKKyAgICAvKiBFbmFibGVzIFNBVSAqLworICAgIFRaX1NBVV9FbmFibGUoKTsKKworICAgIGZvcihpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F1X2NmZyk7IGkrKykgeworICAgICAgICBTQVUtPlJOUiA9IGk7CisgICAgICAgIFNBVS0+UkJBUiA9IHNhdV9jZmdbaV0uUkJBUiAmIFNBVV9SQkFSX0JBRERSX01zazsKKyAgICAgICAgU0FVLT5STEFSID0gKHNhdV9jZmdbaV0uUkxBUiAmIFNBVV9STEFSX0xBRERSX01zaykgfAorICAgICAgICAgICAgKHNhdV9jZmdbaV0ubnNjID8gU0FVX1JMQVJfTlNDX01zayA6IDBVKSB8CisgICAgICAgICAgICBTQVVfUkxBUl9FTkFCTEVfTXNrOworICAgIH0KKworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0gTWVtb3J5IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitlbnVtIHRmbV9wbGF0X2Vycl90IG1wY19pbml0X2NmZyh2b2lkKQoreworICAgIC8qIFNlY3VyZSBDT25maWd1cmF0aW9uIFNldHVwICovCisgICAgU0NVX1NldHVwKCk7CisKKyAgICAvKiBTZXQgVUFSVDAgZm9yIE5vbi1zZWN1cmUgKi8KKyAgICBTQ1VfU0VUX1BOU1NFVChVQVJUMF9BdHRyKTsKKworICAgIC8qIFNldCBUSU1FUjIgZm9yIE5vbi1zZWN1cmUgKi8KKyAgICBTQ1VfU0VUX1BOU1NFVChUTVIyM19BdHRyKTsKKworICAgIHJldHVybiBURk1fUExBVF9FUlJfU1VDQ0VTUzsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQUEMgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2VudW0gdGZtX3BsYXRfZXJyX3QgcHBjX2luaXRfY2ZnKHZvaWQpCit7CisgICAgcmV0dXJuIFRGTV9QTEFUX0VSUl9TVUNDRVNTOworfQorCit2b2lkIHBwY19jb25maWd1cmVfdG9fc2VjdXJlKGVudW0gcHBjX2JhbmtfZSBiYW5rLCB1aW50MzJfdCBwb3MpCit7Cit9CisKK3ZvaWQgcHBjX2NvbmZpZ3VyZV90b19ub25fc2VjdXJlKGVudW0gcHBjX2JhbmtfZSBiYW5rLCB1aW50MzJfdCBwb3MpCit7Cit9CisKK3ZvaWQgcHBjX2VuX3NlY3VyZV91bnByaXYoZW51bSBwcGNfYmFua19lIGJhbmssIHVpbnQxNl90IHBvcykKK3sKK30KKwordm9pZCBwcGNfY2xyX3NlY3VyZV91bnByaXYoZW51bSBwcGNfYmFua19lIGJhbmssIHVpbnQxNl90IHBvcykKK3sKK30KKwordm9pZCBwcGNfY2xlYXJfaXJxKHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvdGFyZ2V0X2NmZy5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3RhcmdldF9jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjU0OWM0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3RhcmdldF9jZmcuaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOS0yMDIwIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19UQVJHRVRfQ0ZHX0hfXworI2RlZmluZSBfX1RBUkdFVF9DRkdfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBURk1fRFJJVkVSX1NURElPICAgIERyaXZlcl9VU0FSVDAKKyNkZWZpbmUgTlNfRFJJVkVSX1NURElPICAgICBEcml2ZXJfVVNBUlQwCisKK2VudW0gcHBjX2JhbmtfZSB7CisgICAgUFBDX1NQX0RPX05PVF9DT05GSUdVUkUgPSAtMSwKKyAgICBQUENfU1BfQUhCX1BQQ19FWFAwID0gMCwKKyAgICBQUENfU1BfQVBCX1BQQyAgICAgID0gMSwKKyAgICBQUENfU1BfQVBCX1BQQ19FWFAwID0gMiwKKyAgICBQUENfU1BfQVBCX1BQQ19FWFAxID0gMywKKyAgICBQUENfU1BfQVBCX1BQQ19FWFAyID0gNCwKKyAgICBQUENfU1BfQVBCX1BQQ19FWFAzID0gNSwKK307CisKKy8qKgorICogXGJyaWVmIE1QVSBjb25maWdzCisgKi8KKyNkZWZpbmUgUFJJVklMRUdFRF9ERUZBVUxUX0VOQUJMRSAgIDEKKyNkZWZpbmUgSEFSREZBVUxUX05NSV9FTkFCTEUgICAgICAgIDEKKworLyoqCisgKiBcYnJpZWYgU3RvcmUgdGhlIGFkZHJlc3NlcyBvZiBtZW1vcnkgcmVnaW9ucworICovCitzdHJ1Y3QgbWVtb3J5X3JlZ2lvbl9saW1pdHMgeworICAgIHVpbnQzMl90IG5vbl9zZWN1cmVfY29kZV9zdGFydDsKKyAgICB1aW50MzJfdCBub25fc2VjdXJlX3BhcnRpdGlvbl9iYXNlOworICAgIHVpbnQzMl90IG5vbl9zZWN1cmVfcGFydGl0aW9uX2xpbWl0OworICAgIHVpbnQzMl90IHZlbmVlcl9iYXNlOworICAgIHVpbnQzMl90IHZlbmVlcl9saW1pdDsKKyNpZmRlZiBCTDIKKyAgICB1aW50MzJfdCBzZWNvbmRhcnlfcGFydGl0aW9uX2Jhc2U7CisgICAgdWludDMyX3Qgc2Vjb25kYXJ5X3BhcnRpdGlvbl9saW1pdDsKKyNlbmRpZiAvKiBCTDIgKi8KK307CisKKy8qKgorICogXGJyaWVmIEhvbGRzIHRoZSBkYXRhIG5lY2Vzc2FyeSB0byBkbyBpc29sYXRpb24gZm9yIGEgc3BlY2lmaWMgcGVyaXBoZXJhbC4KKyAqLworc3RydWN0IHRmbV9zcG1fcGFydGl0aW9uX3BsYXRmb3JtX2RhdGFfdCB7CisgICAgdWludDMyX3QgcGVyaXBoX3N0YXJ0OworICAgIHVpbnQzMl90IHBlcmlwaF9saW1pdDsKKyAgICBlbnVtIHBwY19iYW5rX2UgcGVyaXBoX3BwY19iYW5rOworICAgIGludDE2X3QgcGVyaXBoX3BwY19sb2M7Cit9OworCisvKioKKyAqIFxicmllZiBGb3J3YXJkIGRlY2xhcmF0aW9uCisgKi8KK3N0cnVjdCBtcHVfYXJtdjhtX3JlZ2lvbl9jZmdfdDsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlcyB0aGUgZmF1bHQgaGFuZGxlcnMgQnVzRmF1bHQsIFVzYWdlRmF1bHQsCisgKiAgICAgICAgTWVtTWFuYWdlRmF1bHQgYW5kIFNlY3VyZUZhdWx0LgorICovCitlbnVtIHRmbV9wbGF0X2Vycl90IGVuYWJsZV9mYXVsdF9oYW5kbGVycyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyB0aGUgc3lzdGVtIHJlc2V0IHJlcXVlc3QgcHJvcGVydGllcworICoKKyAqIFxyZXR1cm4gUmV0dXJucyB2YWx1ZXMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBccmVmIHRmbV9wbGF0X2Vycl90CisgKi8KK2VudW0gdGZtX3BsYXRfZXJyX3Qgc3lzdGVtX3Jlc2V0X2NmZyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyB0aGUgc3lzdGVtIGRlYnVnIHByb3BlcnRpZXMuCisgKgorICogXHJldHVybiBSZXR1cm5zIHZhbHVlcyBhcyBzcGVjaWZpZWQgYnkgdGhlIFxyZWYgdGZtX3BsYXRfZXJyX3QKKyAqLworZW51bSB0Zm1fcGxhdF9lcnJfdCBpbml0X2RlYnVnKHZvaWQpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHRzIHRvIHRhcmdldCB0aGUKKyAqICAgICAgICBOUyBzdGF0ZSwgYXBhcnQgZm9yIHRoZSBvbmVzIGFzc29jaWF0ZWQgdG8gc2VjdXJlCisgKiAgICAgICAgcGVyaXBoZXJhbHMgKHBsdXMgTVBDIGFuZCBQUEMpCisgKi8KK2VudW0gdGZtX3BsYXRfZXJyX3QgbnZpY19pbnRlcnJ1cHRfdGFyZ2V0X3N0YXRlX2NmZyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgVGhpcyBmdW5jdGlvbiBlbmFibGUgdGhlIGludGVycnVwdHMgYXNzb2NpYXRlZAorICogICAgICAgIHRvIHRoZSBzZWN1cmUgcGVyaXBoZXJhbHMgKHBsdXMgTVBDIGFuZCBQUEMpCisgKi8KK2VudW0gdGZtX3BsYXRfZXJyX3QgbnZpY19pbnRlcnJ1cHRfZW5hYmxlKHZvaWQpOworCisvKioKKyAqIFxicmllZiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIE1QVQorICovCitlbnVtIG1wdV9hcm12OG1fZXJyb3JfdCBtcHVfZW5hYmxlKHVpbnQzMl90IHByaXZkZWZfZW4sIHVpbnQzMl90IGhmbm1pX2VuKTsKKworLyoqCisgKiBcYnJpZWYgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgTVBVCisgKi8KK2VudW0gbXB1X2FybXY4bV9lcnJvcl90IG1wdV9kaXNhYmxlKHZvaWQpOworCisvKioKKyAqIFxicmllZiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGdpdmVuIE1QVSByZWdpb24KKyAqLworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X3JlZ2lvbl9lbmFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXB1X2FybXY4bV9yZWdpb25fY2ZnX3QgKnJlZ2lvbl9jZmcpOworCisvKioKKyAqIFxicmllZiBUaGlzIGZ1bmN0aW9uIGRzYWJsZXMgdGhlIGdpdmVuIE1QVSByZWdpb24KKyAqLworZW51bSBtcHVfYXJtdjhtX2Vycm9yX3QgbXB1X3JlZ2lvbl9kaXNhYmxlKHVpbnQzMl90IHJlZ2lvbl9ucik7CisKKy8qKgorICogXGJyaWVmIFRoaXMgZnVuY3Rpb24gY2xlYW5zIGFsbCB0aGUgTVBVIHJlZ2lvbnMgY29uZmlncworICovCitlbnVtIG1wdV9hcm12OG1fZXJyb3JfdCBtcHVfY2xlYW4odm9pZCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIENvbnRyb2xsZXIuCisgKi8KK2VudW0gdGZtX3BsYXRfZXJyX3QgbXBjX2luaXRfY2ZnKHZvaWQpOworCisvKioKKyAqIFxicmllZiBDbGVhciBNUEMgaW50ZXJydXB0LgorICovCit2b2lkIG1wY19jbGVhcl9pcnEodm9pZCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgdGhlIFBlcmlwaGVyYWwgUHJvdGVjdGlvbiBDb250cm9sbGVyLgorICovCitlbnVtIHRmbV9wbGF0X2Vycl90IHBwY19pbml0X2NmZyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgUmVzdGljdCBwZXJpcGhlcmFsIGFjY2VzcyB0byBzZWN1cmUgYWNjZXNzIG9ubHkKKyAqCisgKiBcbm90ZSBUaGUgZnVuY3Rpb24gZG9lcyBub3QgY29uZmlndXJlIHByaXZpbGVnZQorICovCit2b2lkIHBwY19jb25maWd1cmVfdG9fc2VjdXJlKGVudW0gcHBjX2JhbmtfZSBiYW5rLCB1aW50MzJfdCBwb3MpOworCisvKioKKyAqIFxicmllZiBBbGxvdyBub24tc2VjdXJlIGFjY2VzcyB0byBwZXJpcGhlcmFsCisgKgorICogXG5vdGUgVGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNvbmZpZ3VyZSBwcml2aWxlZ2UKKyAqLwordm9pZCBwcGNfY29uZmlndXJlX3RvX25vbl9zZWN1cmUoZW51bSBwcGNfYmFua19lIGJhbmssIHVpbnQzMl90IHBvcyk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBzZWN1cmUgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byBwZXJpcGhlcmFsCisgKi8KK3ZvaWQgcHBjX2VuX3NlY3VyZV91bnByaXYoZW51bSBwcGNfYmFua19lIGJhbmssIHVpbnQxNl90IHBvcyk7CisKKy8qKgorICogXGJyaWVmIENsZWFyIHNlY3VyZSB1bnByaXZpbGVnZWQgYWNjZXNzIHRvIHBlcmlwaGVyYWwKKyAqLwordm9pZCBwcGNfY2xyX3NlY3VyZV91bnByaXYoZW51bSBwcGNfYmFua19lIGJhbmssIHVpbnQxNl90IHBvcyk7CisKKy8qKgorICogXGJyaWVmIENsZWFycyBQUEMgaW50ZXJydXB0LgorICovCit2b2lkIHBwY19jbGVhcl9pcnEodm9pZCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgU0FVIGFuZCBJREFVLgorICovCit2b2lkIHNhdV9hbmRfaWRhdV9jZmcodm9pZCk7CisKKyNlbmRpZiAvKiBfX1RBUkdFVF9DRkdfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0Zm9ybS9leHQvdGFyZ2V0L251dm90b24vbTIzNTEvdGZtX3BlcmlwaGVyYWxzX2RlZi5oIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3RmbV9wZXJpcGhlcmFsc19kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTY3YTY3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdGZvcm0vZXh0L3RhcmdldC9udXZvdG9uL20yMzUxL3RmbV9wZXJpcGhlcmFsc19kZWYuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwLCBDeXByZXNzIFNlbWljb25kdWN0b3IgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqLworCisjaWZuZGVmIF9fVEZNX1BFUklQSEVSQUxTX0RFRl9IX18KKyNkZWZpbmUgX19URk1fUEVSSVBIRVJBTFNfREVGX0hfXworCisjaW5jbHVkZSAiTnVNaWNyby5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgVEZNX1RJTUVSMF9JUlEgICAgKFRNUjBfSVJRbikKKyNkZWZpbmUgVEZNX1RJTUVSMV9JUlEgICAgKFRNUjFfSVJRbikKKworc3RydWN0IHRmbV9zcG1fcGFydGl0aW9uX3BsYXRmb3JtX2RhdGFfdDsKKworZXh0ZXJuIHN0cnVjdCB0Zm1fc3BtX3BhcnRpdGlvbl9wbGF0Zm9ybV9kYXRhX3QgdGZtX3BlcmlwaGVyYWxfc3RkX3VhcnQ7CitleHRlcm4gc3RydWN0IHRmbV9zcG1fcGFydGl0aW9uX3BsYXRmb3JtX2RhdGFfdCB0Zm1fcGVyaXBoZXJhbF91YXJ0MTsKK2V4dGVybiBzdHJ1Y3QgdGZtX3NwbV9wYXJ0aXRpb25fcGxhdGZvcm1fZGF0YV90IHRmbV9wZXJpcGhlcmFsX3RpbWVyMDsKKworI2RlZmluZSBURk1fUEVSSVBIRVJBTF9TVERfVUFSVCAgKCZ0Zm1fcGVyaXBoZXJhbF9zdGRfdWFydCkKKyNkZWZpbmUgVEZNX1BFUklQSEVSQUxfVUFSVDEgICAgICgmdGZtX3BlcmlwaGVyYWxfdWFydDEpCisjZGVmaW5lIFRGTV9QRVJJUEhFUkFMX1RJTUVSMCAgICAoJnRmbV9wZXJpcGhlcmFsX3RpbWVyMCkKKyNkZWZpbmUgVEZNX1BFUklQSEVSQUxfRlBHQV9JTyAgICgwKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19URk1fUEVSSVBIRVJBTFNfREVGX0hfXyAqLwo=