Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZW5AY29kZXBvZXQub3JnPi4gSSByaXBwZWQgb3V0IE5hdGl2ZSBMYW5ndWFnZSAKICogU3VwcG9ydCwgcmVwbGFjZWQgZ2V0b3B0LCBhZGRlZCBzb21lIGdvdG9zIGZvciByZWR1bmRhbnQgc3R1ZmYuCiAqCiAqIEF1ZGl0ZWQgYW5kIGNsZWFuZWQgdXAgb24gNyBNYXJjaCAyMDAzIHRvIHJlZHVjZSBzaXplIG9mCiAqIGNoZWNrIGVycm9yIGhhbmRsaW5nIGJ5IEVyaWsgQW5kZXJzZW4gPGFuZGVyc2VuQGNvZGVwb2V0Lm9yZz4KICovCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8Z2V0b3B0Lmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8c3lzL2tsb2cuaD4KCiNpbmNsdWRlICJidXN5Ym94LmgiCgppbnQgZG1lc2dfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCWNoYXIgKmJ1ZgojaWZkZWYgQ09ORklHX0ZFQVRVUkVfQ0xFQU5fVVAKCQk9IE5VTEwKI2VuZGlmCgkJOwoJaW50IGJ1ZnNpemUgPSA4MTk2OwoJaW50IGksIG47CglpbnQgbGV2ZWwgPSAwOwoJaW50IGxhc3RjOwoJaW50IGNtZCA9IDM7CgoJd2hpbGUgKChpID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJjbjpzOiIpKSA+IDApIHsKCQlzd2l0Y2ggKGkpIHsKCQkJY2FzZSAnYyc6CgkJCQljbWQgPSA0OwoJCQkJYnJlYWs7CgkJCWNhc2UgJ24nOgoJCQkJY21kID0gODsKCQkJCWxldmVsID0gYmJfeGdldGxhcmcob3B0YXJnLCAxMCwgMCwgMTApOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ3MnOgoJCQkJLyogSSB0aGluayBhIDUxMmsgbWF4IGtlcm5lbCByaW5nIGJ1ZmZlciBpcyBiaWcgZW5vdWdoIGZvcgoJCQkJICogYW55Ym9keSwgYXMgdGhlIGRlZmF1bHQgaXMgMTZrLi4uICBDb3VsZCBiZSB3cm9uZyB0aG91Z2guCgkJCQkgKiBJZiBzbyBJJ20gc3VyZSBJJ2xsIGhlYXIgYWJvdXQgaXQgYnkgdGhlIGVucmFnZWQgbWFzc2VzKi8KCQkJCWJ1ZnNpemUgPSBiYl94Z2V0bGFyZyhvcHRhcmcsIDEwLCA0MDk2LCA1MTIqMTAyNCk7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWJiX3Nob3dfdXNhZ2UoKTsKCQl9Cgl9CgoJaWYgKG9wdGluZCA8IGFyZ2MpIHsKCQliYl9zaG93X3VzYWdlKCk7Cgl9CgoJaWYgKGNtZCA9PSA4KSB7CgkJaWYgKGtsb2djdGwoY21kLCBOVUxMLCBsZXZlbCkgPCAwKQoJCQlnb3RvIGRpZV90aGVfZGVhdGg7CgkJZ290byBhbGxfZG9uZTsKCX0KCglidWYgPSB4bWFsbG9jKGJ1ZnNpemUpOwoJaWYgKChuID0ga2xvZ2N0bChjbWQsIGJ1ZiwgYnVmc2l6ZSkpIDwgMCkKCQlnb3RvIGRpZV90aGVfZGVhdGg7CgoJbGFzdGMgPSAnXG4nOwoJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewoJCWlmIChsYXN0YyA9PSAnXG4nICYmIGJ1ZltpXSA9PSAnPCcpIHsKCQkJaSsrOwoJCQl3aGlsZSAoYnVmW2ldID49ICcwJyAmJiBidWZbaV0gPD0gJzknKQoJCQkJaSsrOwoJCQlpZiAoYnVmW2ldID09ICc+JykKCQkJCWkrKzsKCQl9CgkJbGFzdGMgPSBidWZbaV07CgkJcHV0Y2hhcihsYXN0Yyk7Cgl9CglpZiAobGFzdGMgIT0gJ1xuJykKCQlwdXRjaGFyKCdcbicpOwphbGxfZG9uZToKI2lmZGVmIENPTkZJR19GRUFUVVJFX0NMRUFOX1VQCglpZiAoYnVmKSB7CgkJZnJlZShidWYpOwoJfQojZW5kaWYKCXJldHVybiBFWElUX1NVQ0NFU1M7CmRpZV90aGVfZGVhdGg6CgliYl9wZXJyb3Jfbm9tc2dfYW5kX2RpZSgpOwp9Cg==