Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieQogKiBFcmlrIEFuZGVyc2VuIDxhbmRlcnNlbkBjb2RlcG9ldC5vcmc+LiBJIHJpcHBlZCBvdXQgTmF0aXZlIExhbmd1YWdlCiAqIFN1cHBvcnQsIHJlcGxhY2VkIGdldG9wdCwgYWRkZWQgc29tZSBnb3RvcyBmb3IgcmVkdW5kYW50IHN0dWZmLgogKgogKiBBdWRpdGVkIGFuZCBjbGVhbmVkIHVwIG9uIDcgTWFyY2ggMjAwMyB0byByZWR1Y2Ugc2l6ZSBvZgogKiBjaGVjayBlcnJvciBoYW5kbGluZyBieSBFcmlrIEFuZGVyc2VuIDxhbmRlcnNlbkBjb2RlcG9ldC5vcmc+CiAqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxzeXMva2xvZy5oPgoKI2luY2x1ZGUgImJ1c3lib3guaCIKCmludCBkbWVzZ19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewoJY2hhciAqYnVmLCAqdG1wOwoJaW50IGJ1ZnNpemUgPSA4MTk2OwoJaW50IGksIG4gPSAwOwoJaW50IGMgPSAzOwoKCWkgPSBiYl9nZXRvcHRfdWxmbGFncyhhcmdjLCBhcmd2LCAiY246czoiLCAmYnVmLCAmdG1wKTsKCWlmIChpICYgMSkKCQkJCWMgPSA0OwoJaWYgKGkgJiAyKSB7CgkJCQljID0gODsKCQkJCW4gPSBiYl94Z2V0bGFyZyhidWYsIDEwLCAwLCAxMCk7Cgl9CglpZiAoaSAmIDQpCgkJCQkvKiBJIHRoaW5rIGEgNTEyayBtYXgga2VybmVsIHJpbmcgYnVmZmVyIGlzIGJpZyBlbm91Z2ggZm9yCgkJCQkgKiBhbnlib2R5LCBhcyB0aGUgZGVmYXVsdCBpcyAxNmsuLi4gIENvdWxkIGJlIHdyb25nIHRob3VnaC4KCQkJCSAqIElmIHNvIEknbSBzdXJlIEknbGwgaGVhciBhYm91dCBpdCBieSB0aGUgZW5yYWdlZCBtYXNzZXMqLwoJCQkJYnVmc2l6ZSA9IGJiX3hnZXRsYXJnKHRtcCwgMTAsIDQwOTYsIDUxMioxMDI0KTsKCglpZiAoYyA9PSA4KSB7CgkJaWYgKGtsb2djdGwoYywgTlVMTCwgbikgPCAwKQoJCQlnb3RvIGRpZV90aGVfZGVhdGg7CgkJZ290byBhbGxfZG9uZTsKCX0KCglidWYgPSB4bWFsbG9jKGJ1ZnNpemUpOwoJaWYgKChuID0ga2xvZ2N0bChjLCBidWYsIGJ1ZnNpemUpKSA8IDApCgkJZ290byBkaWVfdGhlX2RlYXRoOwoKCWMgPSAnXG4nOwoJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewoJCWlmIChjID09ICdcbicgJiYgYnVmW2ldID09ICc8JykgewoJCQlpKys7CgkJCXdoaWxlIChidWZbaV0gPj0gJzAnICYmIGJ1ZltpXSA8PSAnOScpCgkJCQlpKys7CgkJCWlmIChidWZbaV0gPT0gJz4nKQoJCQkJaSsrOwoJCX0KCQljID0gYnVmW2ldOwoJCXB1dGNoYXIoYyk7Cgl9CglpZiAoYyAhPSAnXG4nKQoJCXB1dGNoYXIoJ1xuJyk7CmFsbF9kb25lOgoJaWYgKEVOQUJMRV9GRUFUVVJFX0NMRUFOX1VQKSB7CgkJZnJlZShidWYpOwoJfQoKCXJldHVybiBFWElUX1NVQ0NFU1M7CmRpZV90aGVfZGVhdGg6CgliYl9wZXJyb3Jfbm9tc2dfYW5kX2RpZSgpOwp9Cg==