Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4uIEkgcmlwcGVkIG91dCBOYXRpdmUgTGFuZ3VhZ2UgCiAqIFN1cHBvcnQsIHJlcGxhY2VkIGdldG9wdCwgYWRkZWQgc29tZSBnb3RvcyBmb3IgcmVkdW5kYW50IHN0dWZmLgogKi8KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxnZXRvcHQuaD4KCiNpZiBfX0dOVV9MSUJSQVJZX18gPCA1CiMgaWZkZWYgX19hbHBoYV9fCiMgICBkZWZpbmUga2xvZ2N0bCBzeXNsb2cKIyBlbmRpZgojZWxzZQojIGluY2x1ZGUgPHN5cy9rbG9nLmg+CiNlbmRpZgoKI2luY2x1ZGUgImJ1c3lib3guaCIKCmludCBkbWVzZ19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewoJY2hhciAqYnVmOwoJaW50IGM7CglpbnQgYnVmc2l6ZSA9IDgxOTY7CglpbnQgaTsKCWludCBuOwoJaW50IGxldmVsID0gMDsKCWludCBsYXN0YzsKCWludCBjbWQgPSAzOwoKCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiY246czoiKSkgIT0gRU9GKSB7CgkJc3dpdGNoIChjKSB7CgkJY2FzZSAnYyc6CgkJCWNtZCA9IDQ7CgkJCWJyZWFrOwoJCWNhc2UgJ24nOgoJCQljbWQgPSA4OwoJCQlpZiAob3B0YXJnID09IE5VTEwpCgkJCQlzaG93X3VzYWdlKCk7CgkJCWxldmVsID0gYXRvaShvcHRhcmcpOwoJCQlicmVhazsKCQljYXNlICdzJzoKCQkJaWYgKG9wdGFyZyA9PSBOVUxMKQoJCQkJc2hvd191c2FnZSgpOwoJCQlidWZzaXplID0gYXRvaShvcHRhcmcpOwoJCQlicmVhazsKCQlkZWZhdWx0OgoJCQlzaG93X3VzYWdlKCk7CgkJfQoJfQkJCQoKCWlmIChvcHRpbmQgPCBhcmdjKSB7CgkJc2hvd191c2FnZSgpOwoJfQoKCWlmIChjbWQgPT0gOCkgewoJCWlmIChrbG9nY3RsKGNtZCwgTlVMTCwgbGV2ZWwpIDwgMCkKCQkJcGVycm9yX21zZ19hbmRfZGllKCJrbG9nY3RsIik7CgkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKCX0KCglpZiAoYnVmc2l6ZSA8IDQwOTYpCgkJYnVmc2l6ZSA9IDQwOTY7CglidWYgPSAoY2hhciAqKSB4bWFsbG9jKGJ1ZnNpemUpOwoJaWYgKChuID0ga2xvZ2N0bChjbWQsIGJ1ZiwgYnVmc2l6ZSkpIDwgMCkKCQlwZXJyb3JfbXNnX2FuZF9kaWUoImtsb2djdGwiKTsKCglsYXN0YyA9ICdcbic7Cglmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJaWYgKGxhc3RjID09ICdcbicgJiYgYnVmW2ldID09ICc8JykgewoJCQlpKys7CgkJCXdoaWxlIChidWZbaV0gPj0gJzAnICYmIGJ1ZltpXSA8PSAnOScpCgkJCQlpKys7CgkJCWlmIChidWZbaV0gPT0gJz4nKQoJCQkJaSsrOwoJCX0KCQlsYXN0YyA9IGJ1ZltpXTsKCQlwdXRjaGFyKGxhc3RjKTsKCX0KCWlmIChsYXN0YyAhPSAnXG4nKQoJCXB1dGNoYXIoJ1xuJyk7CglyZXR1cm4gRVhJVF9TVUNDRVNTOwp9Cg==