IyEvdXNyL2Jpbi9wZXJsCgojIDxATElDRU5TRT4KIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojIDwvQExJQ0VOU0U+CgojCiMgUlVOIEFORCBFRElUIFRISVMgU0NSSVBUIElOIElTTy04ODU5LTEgTE9DQUxFCiMKIyBVc2FnZTogbG1fdG9fdXRmOC5wbCA8eHgubG0+IFt4eC51dGY4LmxtXQojCiMgSGVscGVyIHRvIGNvbnZlcnQgdG8gbGF0aW4xIGJhc2VkIC5sbSBpbnRvIHV0ZjguCiMKIyBSdW4gd2l0aG91dCBvdXRwdXQgcGFyYW1ldGVyIHRvIHNlZSB3aGF0IGhhcHBlbnM6CiMgICBsbV90b191dGY4LnBsIGZpLmxtCiMKIyBDaGVjayB0aGF0IG5vIG9idmlvdXMgdW5rbm93biBjaGFycyBhcmUgZm91bmQgKGFkZCB0byAlY29udl91dGY4IGFzIG5lZWRlZCkKIyBXaGVuIHNhdGlzZmllZCwgZ2l2ZSBvdXRwdXQgZmlsZToKIyAgIGxtX3RvX3V0ZjgucGwgZmkubG0gZmkudXRmOC5sbQojCgpkaWUgIk1pc3NpbmcgbG0iIHVubGVzcyAtZiAkQVJHVlswXTsKCm15ICVjb252X3V0ZjggPSAoCiAgJ6snID0+ICJceEMzXHhBQiIsCiAgJ7snID0+ICJceEMzXHhCQiIsCiAgJ90nID0+ICJceEMzXHg5RCIsCiAgJ94nID0+ICJceEMzXHg5RSIsCiAgJ98nID0+ICJceEMzXHg5RiIsCiAgJ+AnID0+ICJceEMzXHhBMCIsCiAgJ+EnID0+ICJceEMzXHhBMSIsCiAgJ+InID0+ICJceEMzXHhBMiIsCiAgJ+MnID0+ICJceEMzXHhBMyIsCiAgJ+QnID0+ICJceEMzXHhBNCIsCiAgJ+UnID0+ICJceEMzXHhBNSIsCiAgJ+YnID0+ICJceEMzXHhBNiIsCiAgJ+cnID0+ICJceEMzXHhBNyIsCiAgJ+gnID0+ICJceEMzXHhBOCIsCiAgJ+knID0+ICJceEMzXHhBOSIsCiAgJ+onID0+ICJceEMzXHhBQSIsCiAgJ+wnID0+ICJceEMzXHhBQyIsCiAgJ+0nID0+ICJceEMzXHhBRCIsCiAgJ+4nID0+ICJceEMzXHhBRSIsCiAgJ+8nID0+ICJceEMzXHhBRiIsCiAgJ/AnID0+ICJceEMzXHhCMCIsCiAgJ/EnID0+ICJceEMzXHhCMSIsCiAgJ/InID0+ICJceEMzXHhCMiIsCiAgJ/MnID0+ICJceEMzXHhCMyIsCiAgJ/QnID0+ICJceEMzXHhCNCIsCiAgJ/UnID0+ICJceEMzXHhCNSIsCiAgJ/YnID0+ICJceEMzXHhCNiIsCiAgJ/cnID0+ICJceEMzXHhCNyIsCiAgJ/gnID0+ICJceEMzXHhCOCIsCiAgJ/knID0+ICJceEMzXHhCOSIsCiAgJ/onID0+ICJceEMzXHhCQSIsCiAgJ/snID0+ICJceEMzXHhCQiIsCiAgJ/wnID0+ICJceEMzXHhCQyIsCiAgJ/0nID0+ICJceEMzXHhCRCIsCiAgJ/4nID0+ICJceEMzXHhCRSIsCiAgJ/8nID0+ICJceEMzXHhCOCIsCik7Cm15ICRjb252X2NoYXJzID0gam9pbignJywga2V5cyAlY29udl91dGY4KTsKCmxvYWRfbW9kZWxzKCRBUkdWWzBdKTsKCnN1YiBsb2FkX21vZGVscyB7CiAgbXkgKCRpbmRpcikgPSBAXzsKCiAgaWYgKCRBUkdWWzFdKSB7CiAgICBvcGVuKE9VVCwgIj4kQVJHVlsxXSIpIG9yIGRpZTsKICAgIGJpbm1vZGUgT1VUIG9yIGRpZTsKICB9CgogIG9wZW4oSU4sICRBUkdWWzBdKSBvciBkaWU7CiAgYmlubW9kZSBJTiBvciBkaWU7CiAgbXkgJGNoYW5nZXMgPSAwOwogIHdoaWxlICg8SU4+KSB7CiAgICBzL1xyP1xuJC8vOwogICAgL14oW14wLTlcc10rKS8gb3IgZGllOwogICAgbXkgJG9yaWdfZyA9ICQxOwogICAgbXkgJGcgPSAkb3JpZ19nOwogICAgdW5sZXNzICgkZyA9fiAvXlthLXpBLVoke2NvbnZfY2hhcnN9LC4nOjshYCoiPygpXC1ceDAwXSskLykgewogICAgICBwcmludCAiVU5LTk9XTiBDSEFSIEZPVU5EOiAkZ1xuIgogICAgfQogICAgZm9yZWFjaCAoa2V5cyAlY29udl91dGY4KSB7CiAgICAgIGlmICgkZyA9fiBzLyRfLyRjb252X3V0Zjh7JF99L2cpIHsKICAgICAgICAkY2hhbmdlcysrOwogICAgICAgIHByaW50ICJDaGFuZ2luZzogJG9yaWdfZyAtPiAkZ1xuIiBvciBkaWU7CiAgICAgIH0KICAgIH0KICAgIGlmICgkQVJHVlsxXSkgewogICAgICBwcmludCBPVVQgIiRnXG4iIG9yIGRpZTsKICAgIH0KICB9CiAgY2xvc2UgT1VUIGlmICRBUkdWWzFdOwogIGNsb3NlIElOIG9yIGRpZTsKICBwcmludCAiVG90YWwgY2hhbmdlczogJGNoYW5nZXNcbiI7Cn0KCg==