IwojIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBmaWxlIHRvIGRldGVjdCBhIFdpbjMyIGhvc3QgcGxhdGZvcm0uCiMKCgojIENvcHlyaWdodCAxOTk2LTIwMDAsIDIwMDMgYnkKIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiMKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAojIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQojIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CiMgZnVsbHkuCgoKLlBIT05ZOiBzZXR1cAoKCmlmZXEgKCQoUExBVEZPUk0pLGFuc2kpCgogICMgRGV0ZWN0aW5nIFdpbmRvd3MgTlQgaXMgZWFzeSwgYXMgdGhlIE9TIHZhcmlhYmxlIG11c3QgYmUgZGVmaW5lZCBhbmQKICAjIGNvbnRhaW5zIGBXaW5kb3dzX05UJy4gIFVudGVzdGVkIHdpdGggV2luZG93cyAySywgYnV0IEkgZ3Vlc3MgaXQgc2hvdWxkCiAgIyB3b3JrLi4uCiAgIwogIGlmZXEgKCQoT1MpLFdpbmRvd3NfTlQpCgogICAgaXNfd2luZG93cyA6PSAxCgogICAgIyBXZSB0ZXN0IGZvciB0aGUgQ09NU1BFQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiBydW4gdGhlIGB2ZXInCiAgICAjIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRvIHNlZSBpZiBpdHMgb3V0cHV0IGNvbnRhaW5zIHRoZSB3b3JkIGBXaW5kb3dzJy4KICAgICMKICAgICMgSWYgdGhpcyBpcyB0cnVlLCB3ZSBhcmUgcnVubmluZyBhIHdpbjMyIHBsYXRmb3JtIChvciBhbiBlbXVsYXRpb24pLgogICAgIwogIGVsc2UKICAgIGlmZGVmIENPTVNQRUMKICAgICAgaXNfd2luZG93cyA6PSAkKGZpbmRzdHJpbmcgV2luZG93cywkKHN0cmlwICQoc2hlbGwgdmVyKSkpCiAgICBlbmRpZgogIGVuZGlmICAjIHRlc3QgTlQKCiAgaWZkZWYgaXNfd2luZG93cwoKICAgIFBMQVRGT1JNIDo9IHdpbjMyCgogIGVuZGlmCmVuZGlmICMgdGVzdCBQTEFURk9STSBhbnNpCgppZmVxICgkKFBMQVRGT1JNKSx3aW4zMikKCiAgREVMRVRFIDo9IGRlbAogIENPUFkgICA6PSBjb3B5CiAgU0VQICAgIDo9ICQoQkFDS1NMQVNIKQoKICAjIGdjYyBNYWtlZmlsZSBieSBkZWZhdWx0CiAgQ09ORklHX0ZJTEUgOj0gdzMyLWdjYy5tawogIGlmZXEgKCQoZmlyc3R3b3JkICQoQ0MpKSxjYykKICAgIENDICAgICAgICA6PSBnY2MKICBlbmRpZgoKICBpZm5lcSAoJChmaW5kc3RyaW5nIGxpc3QsJChNQUtFQ01ER09BTFMpKSwpICAjIHRlc3QgZm9yIHRoZSAibGlzdCIgdGFyZ2V0CiAgICBkdW1wX3RhcmdldF9saXN0OgoJICAgIEBlY2hvIP8KCSAgICBAZWNobyAkKFBST0pFQ1RfVElUTEUpIGJ1aWxkIHN5c3RlbSAtLSBzdXBwb3J0ZWQgY29tcGlsZXJzCgkgICAgQGVjaG8g/woJICAgIEBlY2hvIFNldmVyYWwgY29tbWFuZC1saW5lIGNvbXBpbGVycyBhcmUgc3VwcG9ydGVkIG9uIFdpbjMyOgoJICAgIEBlY2hvIP8KCSAgICBAZWNobyD//21ha2Ugc2V0dXD///////////////////////////9nY2MgKHdpdGggTWluZ3cpCgkgICAgQGVjaG8g//9tYWtlIHNldHVwIHZpc3VhbGP/////////////////TWljcm9zb2Z0IFZpc3VhbCBDKysKCSAgICBAZWNobyD//21ha2Ugc2V0dXAgYmNjMzL///////////////////9Cb3JsYW5kIEMvQysrCgkgICAgQGVjaG8g//9tYWtlIHNldHVwIGxjY///////////////////////V2luMzItTENDCgkgICAgQGVjaG8g//9tYWtlIHNldHVwIGludGVsY///////////////////SW50ZWwgQy9DKysKCSAgICBAZWNobyD/CgogICAgc2V0dXA6IGR1bXBfdGFyZ2V0X2xpc3QKICAgIC5QSE9OWTogZHVtcF90YXJnZXRfbGlzdCBsaXN0CiAgZWxzZQogICAgc2V0dXA6IGRvc19zZXR1cAogIGVuZGlmCgogICMgYWRkaXRpb25hbGx5LCB3ZSBwcm92aWRlIGhvb2tzIGZvciB2YXJpb3VzIG90aGVyIGNvbXBpbGVycwogICMKICBpZm5lcSAoJChmaW5kc3RyaW5nIHZpc3VhbGMsJChNQUtFQ01ER09BTFMpKSwpICAgICAjIFZpc3VhbCBDL0MrKwogICAgQ09ORklHX0ZJTEUgOj0gdzMyLXZjYy5tawogICAgQ0MgICAgICAgICAgOj0gY2wKICAgIHZpc3VhbGM6IHNldHVwCiAgICAuUEhPTlk6IHZpc3VhbGMKICBlbmRpZgoKICBpZm5lcSAoJChmaW5kc3RyaW5nIGludGVsYywkKE1BS0VDTURHT0FMUykpLCkgICAgICAjIEludGVsIEMvQysrCiAgICBDT05GSUdfRklMRSA6PSB3MzItaW50bC5tawogICAgQ0MgICAgICAgICAgOj0gY2wKICAgIHZpc3VhbGM6IHNldHVwCiAgICAuUEhPTlk6IGludGVsYwogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgd2F0Y29tLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICMgV2F0Y29tIEMvQysrCiAgICBDT05GSUdfRklMRSA6PSB3MzItd2F0Lm1rCiAgICBDQyAgICAgICAgICA6PSB3Y2MzODYKICAgIHdhdGNvbTogc2V0dXAKICAgIC5QSE9OWTogd2F0Y29tCiAgZW5kaWYKCiAgaWZuZXEgKCQoZmluZHN0cmluZyB2aXN1YWxhZ2UsJChNQUtFQ01ER09BTFMpKSwpICAgIyBWaXN1YWwgQWdlIEMrKwogICAgQ09ORklHX0ZJTEUgOj0gdzMyLWljYy5tawogICAgQ0MgICAgICAgICAgOj0gaWNjCiAgICB2aXN1YWxhZ2U6IHNldHVwCiAgICAuUEhPTlk6IHZpc3VhbGFnZQogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgbGNjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICAgICMgTENDLVdpbjMyCiAgICBDT05GSUdfRklMRSA6PSB3MzItbGNjLm1rCiAgICBDQyAgICAgICAgICA6PSBsY2MKICAgIGxjYzogc2V0dXAKICAgIC5QSE9OWTogbGNjCiAgZW5kaWYKCiAgaWZuZXEgKCQoZmluZHN0cmluZyBtaW5ndzMyLCQoTUFLRUNNREdPQUxTKSksKSAgICAgIyBtaW5ndzMyCiAgICBDT05GSUdfRklMRSA6PSB3MzItbWluZ3czMi5tawogICAgQ0MgICAgICAgICAgOj0gZ2NjCiAgICBtaW5ndzMyOiBzZXR1cAogICAgLlBIT05ZOiBtaW5ndzMyCiAgZW5kaWYKCiAgaWZuZXEgKCQoZmluZHN0cmluZyBiY2MzMiwkKE1BS0VDTURHT0FMUykpLCkgICAgICAgIyBCb3JsYW5kIEMrKwogICAgQ09ORklHX0ZJTEUgOj0gdzMyLWJjYy5tawogICAgQ0MgICAgICAgICAgOj0gYmNjMzIKICAgIGJjYzMyOiBzZXR1cAogICAgLlBIT05ZOiBiY2MzMgogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwtYmNjLCQoTUFLRUNNREdPQUxTKSksKSAgICMgZGV2ZWxvcG1lbnQgdGFyZ2V0CiAgICBDT05GSUdfRklMRSA6PSB3MzItYmNjZC5tawogICAgQ0MgICAgICAgICAgOj0gYmNjMzIKICAgIGRldmVsLWJjYzogc2V0dXAKICAgIC5QSE9OWTogZGV2ZWwtYmNjCiAgZW5kaWYKCiAgaWZuZXEgKCQoZmluZHN0cmluZyBkZXZlbC1nY2MsJChNQUtFQ01ER09BTFMpKSwpICAgIyBkZXZlbG9wbWVudCB0YXJnZXQKICAgIENPTkZJR19GSUxFIDo9IHczMi1kZXYubWsKICAgIENDICAgICAgICAgIDo9IGdjYwogICAgZGV2ZWwtZ2NjOiBzZXR1cAogICAgLlBIT05ZOiBkZXZlbC1nY2MKICBlbmRpZgoKZW5kaWYgICAjIHRlc3QgUExBVEZPUk0gd2luMzIKCgojIEVPRgo=