IyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKIyB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwojIHRoYXQgbWF5IGFwcGx5OgojCiMgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKIyBDb3B5cmlnaHQgqSAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIyBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KIwoKIwojIE1ha2VmaWxlIGZvciBzbm1wbGliCiMKCnRvcF9idWlsZGRpcj0uLgoKIyB1c2UgR05VIHZwYXRoLCBpZiBhdmFpbGFibGUsIHRvIG9ubHkgc2V0IGEgcGF0aCBmb3Igc291cmNlIGFuZCBoZWFkZXJzCiMgVlBBVEggd2lsbCBwaWNrIHVwIG9iamVjdHMgdG9vLCB3aGljaCBpcyBiYWQgaWYgeW91IGFyZSBzaGFyaW5nIGEKIyBzb3VyY2UgZGlyLi4uCkBHTlVfdnBhdGhAICUuaCAkKHNyY2RpcikKQEdOVV92cGF0aEAgJS5jICQoc3JjZGlyKQpAR05VX3ZwYXRoQCAlLnJjICQoc3JjZGlyKQojIGZhbGxiYWNrIHRvIHJlZ3VsYXIgVlBBVEggZm9yIG5vbi1nbnUuLi4KQE5PTl9HTlVfVlBBVEhAICQoc3JjZGlyKQoKCiMKIyBUaGluZ3MgdG8gaW5zdGFsbAojCgojIGhlYWRlcnMKSU5TVEFMTEhFQURFUlM9XAoJbmV0LXNubXAtaW5jbHVkZXMuaCBcCgljb25maWdfYXBpLmggIFwKCW1pYl9hcGkuaCAgICAgXAoJb3V0cHV0X2FwaS5oICBcCglwZHVfYXBpLmggICAgIFwKCXNlc3Npb25fYXBpLmggXAoJc25tcHYzX2FwaS5oICBcCgl2YXJiaW5kX2FwaS5oIFwKCXR5cGVzLmggICAgICAgXAoJdXRpbGl0aWVzLmggICBcCgl2ZXJzaW9uLmggICAgIFwKCWRlZmluaXRpb25zLmgKCklOQ0xVREVTVUJESVI9bGlicmFyeQpJTkNMVURFU1VCRElSSEVBREVSUz1SRUFETUUgXAoJYXNuMS5oIFwKCWNhbGxiYWNrLmggXAoJY29udGFpbmVyLmggXAoJY29udGFpbmVyX2JpbmFyeV9hcnJheS5oIFwKCWNvbnRhaW5lcl9saXN0X3NzbGwuaCBcCgljb250YWluZXJfaXRlcmF0b3IuaCBcCgljb250YWluZXJfbnVsbC5oIFwKCWZhY3RvcnkuaCBcCglkYXRhX2xpc3QuaCBcCglkZWZhdWx0X3N0b3JlLmggXAoJZGlyX3V0aWxzLmggXAoJZmRfZXZlbnRfbWFuYWdlci5oIFwKCWZpbGVfdXRpbHMuaCBcCglpbnQ2NC5oIFwKCWtleXRvb2xzLmggXAoJbWliLmggXAoJbWQ1LmggXAoJcGFyc2UuaCBcCglyZWFkX2NvbmZpZy5oIFwKCXNjYXBpLmggXAoJc25tcC5oIFwKCXNubXBfYWxhcm0uaCBcCglzbm1wX2FwaS5oIFwKCWxhcmdlX2ZkX3NldC5oIFwKCXNubXBfYXNzZXJ0LmggXAoJc25tcF9jbGllbnQuaCBcCglzbm1wX2RlYnVnLmggXAoJc25tcF9pbXBsLmggXAoJc25tcF9sb2dnaW5nLmggXAoJc25tcF9wYXJzZV9hcmdzLmggXAoJc25tcF9zZXJ2aWNlLmggXAoJc25tcC10Yy5oIFwKCXNubXB2My5oIFwKCXN5c3RlbS5oIFwKCXRleHRfdXRpbHMuaCBcCgl0b29scy5oIFwKCXRyYW5zZm9ybV9vaWRzLmggXAoJdHlwZXMuaCBcCiAgICAgICAgY211X2NvbXBhdC5oIFwKICAgICAgICBnZXRvcHQuaCBcCiAgICAgICAgbGNkX3RpbWUuaCBcCiAgICAgICAgbXRfc3VwcG9ydC5oIFwKICAgICAgICBvaWRfc3Rhc2guaCBcCiAgICAgICAgc25tcF9lbnVtLmggXAogICAgICAgIHNubXBfc2VjbW9kLmggXAogICAgICAgIHVjZF9jb21wYXQuaCBcCiAgICAgICAgdmFjbS5oIFwKCWNoZWNrX3ZhcmJpbmQuaCBcCglzbm1wX3RyYW5zcG9ydC5oIFwKCXdpbnBpcGUuaCBcCgl3aW5zZXJ2aWNlLmggXAoJQHRyYW5zcG9ydF9oZHJfbGlzdEAgXAoJQHNlY3VyaXR5X2hkcl9saXN0QAoKSU5TVEFMTEJVSUxUU1VCRElSSEVBREVSUz0uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKSU5TVEFMTEJVSUxUU1VCRElSPWxpYnJhcnkKCgpJTlNUQUxMVUNESEVBREVSUz0gYXNuMS5oIFwKCWNhbGxiYWNrLmgJXAoJZGVmYXVsdF9zdG9yZS5oCVwKCWludDY0LmgJCVwKCWtleXRvb2xzLmgJXAoJbWliLmgJCVwKCXBhcnNlLmgJCVwKCXJlYWRfY29uZmlnLmgJXAoJc2NhcGkuaAkJXAoJc25tcF9hbGFybS5oCVwKCXNubXBfYXBpLmgJXAoJbGFyZ2VfZmRfc2V0LmgJXAoJc25tcF9jbGllbnQuaAlcCglzbm1wX2RlYnVnLmgJXAoJc25tcC5oCQlcCglzbm1wX2ltcGwuaAlcCglzbm1wX2xvZ2dpbmcuaAlcCglzbm1wX3BhcnNlX2FyZ3MuaCBcCglzbm1wLXRjLmgJXAoJc25tcHVzbS5oCVwKCXNubXB2My5oCVwKCXNubXBfdmFycy5oCVwKCXN0cnVjdC5oCVwKCXN5c3RlbS5oCVwKCXRvb2xzLmgJCVwKCXRyYW5zZm9ybV9vaWRzLmgKCiMgbGlicmFyaWVzCklOU1RBTExMSUJTPWxpYm5ldHNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCklOU1RBTExVQ0RMSUJTPWxpYnNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCgojCiMgVGhpbmdzIHRvIGJ1aWxkCiMKQ1NSQ1M9CXNubXBfY2xpZW50LmMgbWliLmMgcGFyc2UuYyBzbm1wX2FwaS5jIHNubXAuYyAJCVwKCWxhcmdlX2ZkX3NldC5jCQkJCQkJXAoJc25tcF9hdXRoLmMgYXNuMS5jIG1kNS5jIHNubXBfcGFyc2VfYXJncy5jCQlcCglzeXN0ZW0uYyB2YWNtLmMgaW50NjQuYyByZWFkX2NvbmZpZy5jIHBrY3MuYwkJXAoJc25tcF9kZWJ1Zy5jIHRvb2xzLmMgIHNubXBfbG9nZ2luZy5jIHRleHRfdXRpbHMuYwlcCglzbm1wdjMuYyBsY2RfdGltZS5jIGtleXRvb2xzLmMgZmlsZV91dGlscy5jIGRpcl91dGlscy5jIFwKCXNjYXBpLmMgY2FsbGJhY2suYyBkZWZhdWx0X3N0b3JlLmMgc25tcF9hbGFybS5jCQlcCglkYXRhX2xpc3QuYyBvaWRfc3Rhc2guYyBmZF9ldmVudF9tYW5hZ2VyLmMgCQlcCgltdF9zdXBwb3J0LmMgc25tcF9lbnVtLmMgc25tcC10Yy5jIHNubXBfc2VydmljZS5jCVwKCXNucHJpbnRmLmMgc3RybGNhdC5jIHN0cmxjcHkuYyBzdHJ0b2wuYyBzdHJ0b3VsLmMJXAoJc3RydG9rX3IuYyBzbm1wX3RyYW5zcG9ydC5jIEB0cmFuc3BvcnRfc3JjX2xpc3RACVwKCXNubXBfc2VjbW9kLmMgQHNlY3VyaXR5X3NyY19saXN0QCBzbm1wX3ZlcnNpb24uYyAgICAgICAgXAoJY2hlY2tfdmFyYmluZC5jIGNvbnRhaW5lci5jIGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYwlcCgljb250YWluZXJfbnVsbC5jIGNvbnRhaW5lcl9saXN0X3NzbGwuYyBjb250YWluZXJfaXRlcmF0b3IuYyBcCgljbXVfY29tcGF0LmMgdWNkX2NvbXBhdC5jIHNubXBfb3BlbnNzbC5jIEBvdGhlcl9zcmNfbGlzdEAKCk9CSlM9CXNubXBfY2xpZW50Lm8gbWliLm8gcGFyc2UubyBzbm1wX2FwaS5vIHNubXAubyAJCVwKCWxhcmdlX2ZkX3NldC5vCQkJCQkJXAoJc25tcF9hdXRoLm8gYXNuMS5vIG1kNS5vIHNubXBfcGFyc2VfYXJncy5vCQlcCglzeXN0ZW0ubyB2YWNtLm8gaW50NjQubyByZWFkX2NvbmZpZy5vIHBrY3MubyAJCVwKCXNubXBfZGVidWcubyB0b29scy5vICBzbm1wX2xvZ2dpbmcubyB0ZXh0X3V0aWxzLm8JXAoJc25tcHYzLm8gbGNkX3RpbWUubyBrZXl0b29scy5vIGZpbGVfdXRpbHMubyBkaXJfdXRpbHMubyBcCglzY2FwaS5vIGNhbGxiYWNrLm8gZGVmYXVsdF9zdG9yZS5vIHNubXBfYWxhcm0ubwkJXAoJZGF0YV9saXN0Lm8gb2lkX3N0YXNoLm8gZmRfZXZlbnRfbWFuYWdlci5vCQlcCgltdF9zdXBwb3J0Lm8gc25tcF9lbnVtLm8gc25tcC10Yy5vIHNubXBfc2VydmljZS5vCVwKCXNucHJpbnRmLm8gc3RybGNhdC5vIHN0cmxjcHkubyBzdHJ0b2wubyBzdHJ0b3VsLm8JXAoJc3RydG9rX3IubyBzbm1wX3RyYW5zcG9ydC5vIEB0cmFuc3BvcnRfb2JqX2xpc3RACVwKCXNubXBfc2VjbW9kLm8gQHNlY3VyaXR5X29ial9saXN0QCBzbm1wX3ZlcnNpb24ubyAgICAgICAgXAoJY2hlY2tfdmFyYmluZC5vIGNvbnRhaW5lci5vIGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkubwlcCgljb250YWluZXJfbnVsbC5vIGNvbnRhaW5lcl9saXN0X3NzbGwubyBjb250YWluZXJfaXRlcmF0b3IubyBcCgljbXVfY29tcGF0Lm8gdWNkX2NvbXBhdC5vIHNubXBfb3BlbnNzbC5vIEBvdGhlcl9vYmpzX2xpc3RACgpMT0JKUz0Jc25tcF9jbGllbnQubG8gbWliLmxvIHBhcnNlLmxvIHNubXBfYXBpLmxvIHNubXAubG8gCVwKCWxhcmdlX2ZkX3NldC5sbwkJCQkJCVwKCXNubXBfYXV0aC5sbyBhc24xLmxvIG1kNS5sbyBzbm1wX3BhcnNlX2FyZ3MubG8JCVwKCXN5c3RlbS5sbyB2YWNtLmxvIGludDY0LmxvIHJlYWRfY29uZmlnLmxvIHBrY3MubG8JXAoJc25tcF9kZWJ1Zy5sbyB0b29scy5sbyAgc25tcF9sb2dnaW5nLmxvCSB0ZXh0X3V0aWxzLmxvCVwKCXNubXB2My5sbyBsY2RfdGltZS5sbyBrZXl0b29scy5sbyBmaWxlX3V0aWxzLmxvIGRpcl91dGlscy5sbyBcCglzY2FwaS5sbyBjYWxsYmFjay5sbyBkZWZhdWx0X3N0b3JlLmxvIHNubXBfYWxhcm0ubG8JCVwKCWRhdGFfbGlzdC5sbyBvaWRfc3Rhc2gubG8gZmRfZXZlbnRfbWFuYWdlci5sbwkJXAoJbXRfc3VwcG9ydC5sbyBzbm1wX2VudW0ubG8gc25tcC10Yy5sbyBzbm1wX3NlcnZpY2UubG8JXAoJc25wcmludGYubG8gc3RybGNhdC5sbyBzdHJsY3B5LmxvIHN0cnRvbC5sbyBzdHJ0b3VsLmxvCVwKCXN0cnRva19yLmxvIHNubXBfdHJhbnNwb3J0LmxvIEB0cmFuc3BvcnRfbG9ial9saXN0QAlcCglzbm1wX3NlY21vZC5sbyBAc2VjdXJpdHlfbG9ial9saXN0QCBzbm1wX3ZlcnNpb24ubG8gICAgICAgXAoJY2hlY2tfdmFyYmluZC5sbyBjb250YWluZXIubG8gY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbwlcCgljb250YWluZXJfbnVsbC5sbyBjb250YWluZXJfbGlzdF9zc2xsLmxvIGNvbnRhaW5lcl9pdGVyYXRvci5sbyBcCgljbXVfY29tcGF0LmxvIHVjZF9jb21wYXQubG8gc25tcF9vcGVuc3NsLmxvIEBvdGhlcl9sb2Jqc19saXN0QAoKIyBqdXN0IGluIGNhc2Ugc29tZW9uZSB3YW50cyB0byByZW1vdmUgbGlidG9vbCwgY2hhbmdlIHRoaXMgdG8gT0JKUy4KVE9CSlM9JChMT0JKUykKCiMgCkNQUEZMQUdTID0gJChUT1BfSU5DTFVERVMpIC1JLiAJJChTTk1QTElCX0lOQ0xVREVTKSBAQ1BQRkxBR1NACgphbGw6IHN0YW5kYXJkYWxsCgojIGhvdyB0byBidWlsZCB0aGUgbGlicmFyaWVzLgpsaWJuZXRzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKTogICAgJChUT0JKUykKCSQoTElCX0xEX0NNRCkgJEAgQExEX05PX1VOREVGSU5FREAgJChUT0JKUykgJChMREZMQUdTKSBATE5FVFNOTVBMSUJTQAoJJChSQU5MSUIpICRACgpsaWJzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKTogICAgJChUT0JKUykKCSQoTElCX0xEX0NNRCkgJEAgQExEX05PX1VOREVGSU5FREAgJChUT0JKUykgJChMREZMQUdTKSBATE5FVFNOTVBMSUJTQAoJJChSQU5MSUIpICRACgojCiMgaW50ZXJuYWwgdGVzdCBvYmplY3RzCiMKcGFyc2U6ICBtaWIubyBwYXJzZS5jCgkkKENDKSAkKENGTEFHUykgLURURVNUIHBhcnNlLmMgLW8gJEAgXAoJCWAkKHRvcF9zcmNkaXIpL25ldC1zbm1wLWNvbmZpZyAtLWxpYnNgCgp0ZXN0X2JpbmFyeV9hcnJheTogdGVzdF9iaW5hcnlfYXJyYXkuYwoJJChDQykgJChDRkxBR1MpIHRlc3RfYmluYXJ5X2FycmF5LmMgLW8gJEAgXAoJCWAkKHRvcF9zcmNkaXIpL25ldC1zbm1wLWNvbmZpZyAtLWxpYnNgCg==