LyoKICogQ29weXJpZ2h0IDIwMDEsIE92ZSBL5XZlbiwgVHJhbnNHYW1pbmcgVGVjaG5vbG9naWVzIEluYy4KICogQ29weXJpZ2h0IDIwMDIgR3JlZyBUdXJuZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqIC0tLS0gcnBjc3NfbWFpbi5jOgogKiAgIEluaXRpYWxpemUgYW5kIHN0YXJ0IHNlcnZpbmcgcmVxdWVzdHMuICBCYWlsIGlmIHJwY3NzIGFscmVhZHkgaXMKICogICBydW5uaW5nLgogKgogKiAtLS0tIFJQQ1NTLkVYRToKICogICAKICogICBXaW5lIG5lZWRzIGEgc2VydmVyIHdob3NlIHJvbGUgaXMgc29tZXdoYXQgbGlrZSB0aGF0CiAqICAgb2YgcnBjc3MuZXhlIGluIHdpbmRvd3MuICBUaGlzIGlzIG5vdCBhIGNsb25lIG9mCiAqICAgd2luZG93cyBycGNzcyBhdCBhbGwuICBJdCBoYXMgYmVlbiBnaXZlbiB0aGUgc2FtZSBuYW1lLCBob3dldmVyLAogKiAgIHRvIHByb3ZpZGUgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgCiAqICAgaXQgbWF5IGJlY29tZSBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIHRoZSAicmVhbCIgcnBjc3MuZXhlIG9uCiAqICAgV2luZG93cy4KICoKICogLS0tLSBLTk9XTiBCVUdTIC8gVE9ETzoKICoKICogICBvIFNlcnZpY2UgaG9va3MgYXJlIHVuaW1wbGVtZW50ZWQgKGlmIHlvdSBib3RoZXIgdG8gaW1wbGVtZW50CiAqICAgICB0aGVzZSwgYWxzbyBpbXBsZW1lbnQgbmV0LmV4ZSwgYXQgbGVhc3QgZm9yICJuZXQgc3RhcnQiIGFuZAogKiAgICAgIm5ldCBzdG9wIiAoc2hvdWxkIGJlIHByZXR0eSBlYXN5IEkgZ3Vlc3MsIGFzc3VtaW5nIHRoZSByZXN0CiAqICAgICBvZiB0aGUgc2VydmljZXMgQVBJIGluZnJhc3RydWN0dXJlIHdvcmtzLgogKiAKICogICBvIElzIHN1cHBvc2VkIHRvIHVzZSBSUEMsIG5vdCByYW5kb20ga2x1ZGdlcywgdG8gbWFwIGVuZHBvaW50cy4KICoKICogICBvIFByb2JhYmx5IG5hbWUgc2VydmljZXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGhlcmUgYXMgd2VsbC4KICoKICogICBvIFdpbmUncyBuYW1lZCBwaXBlcyAoaW4gZ2VuZXJhbCkgbWF5IG5vdCBpbnRlcm9wZXJhdGUgd2l0aCB0aG9zZSBvZiAKICogICAgIFdpbmRvd3MgeWV0ICg/KQogKgogKiAgIG8gVGhlcmUgaXMgYSBsb29taW5nIHByb2JsZW0gcmVnYXJkaW5nIGxpc3RlbmluZyBvbiBwcml2aWxlZ2VkCiAqICAgICBwb3J0cy4gIFdlIHdpbGwgbmVlZCB0byBiZSBhYmxlIHRvIGNvZXhpc3Qgd2l0aCBTQU1CQSwgYW5kIGJlIGFibGUKICogICAgIHRvIGZ1bmN0aW9uIHdpdGhvdXQgcnVubmluZyB3aW5lbGliIGNvZGUgYXMgcm9vdC4gIFRoaXMgbWF5CiAqICAgICB0YWtlIHNvbWUgZG9pbmcsIGluY2x1ZGluZyBzaWduaWZpY2FudCByZWNvbmNlcHR1YWxpemF0aW9uIG9mIHRoZQogKiAgICAgcm9sZSBvZiBycGNzcy5leGUgaW4gd2luZS4KICoKICogICBvIFdobyBrbm93cz8gIFdoYXRldmVyIHJwY3NzIGRvZXMsIHdlIG91Z2h0IHRvIGF0CiAqICAgICBsZWFzdCB0aGluayBhYm91dCBkb2luZy4uLiBidXQgd2hhdCAvZG9lcy8gaXQgZG8/CiAqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CgojZGVmaW5lIE5PTkFNRUxFU1NVTklPTgojZGVmaW5lIE5PTkFNRUxFU1NTVFJVQ1QKI2luY2x1ZGUgInJwY3NzLmgiCiNpbmNsdWRlICJ3aW5udC5oIgoKI2luY2x1ZGUgIndpbmUvZGVidWcuaCIKCldJTkVfREVGQVVMVF9ERUJVR19DSEFOTkVMKG9sZSk7CgpzdGF0aWMgSEFORExFIG1hc3Rlcl9tdXRleDsKc3RhdGljIGxvbmcgbWF4X2xhenlfdGltZW91dCA9IFJQQ1NTX0RFRkFVTFRfTUFYX0xBWllfVElNRU9VVDsKCkhBTkRMRSBSUENTU19HZXRNYXN0ZXJNdXRleCh2b2lkKQp7CiAgcmV0dXJuIG1hc3Rlcl9tdXRleDsKfQoKdm9pZCBSUENTU19TZXRNYXhMYXp5VGltZW91dChsb25nIG1sdCkKewogIC8qIEZJWE1FOiB0aGlzIG1heCBlbnN1cmVzIHRoYXQgbm8gY2FsbGVyIHdpbGwgZGVjcmVhc2Ugb3VyIHdhaXQgdGltZSwKICAgICBidXQgY291bGQgaGF2ZSBvdGhlciBiYWQgcmVzdWx0cy4gIGZpeDogU3RvcmUgIm5leHRfbWF4X2xhenlfdGltZW91dCIgCiAgICAgYW5kIGluc3RhbGwgaXQgYXMgbmVjZXNzYXJ5IG5leHQgdGltZSB3ZSAiZG8gd29yayI/ICovCiAgbWF4X2xhenlfdGltZW91dCA9IG1heChSUENTU19HZXRMYXp5VGltZVJlbWFpbmluZygpLCBtbHQpOwp9Cgpsb25nIFJQQ1NTX0dldE1heExhenlUaW1lb3V0KHZvaWQpCnsKICByZXR1cm4gbWF4X2xhenlfdGltZW91dDsKfQoKLyogd2hlbiBkbyB3ZSBqdXN0IGdpdmUgdXAgYW5kIGJhaWw/IChVVEMpICovCnN0YXRpYyBTWVNURU1USU1FIGxhenlfdGltZW91dF90aW1lOwoKI2lmIGRlZmluZWQoTk9OQU1FTEVTU1NUUlVDVCkKIyBkZWZpbmUgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZpbGV0aW1lLCB1bGFyZ2UpIFwKICAgICggdWxhcmdlLnUuTG93UGFydCA9IGZpbGV0aW1lLmR3TG93RGF0ZVRpbWUsIFwKICAgICAgdWxhcmdlLnUuSGlnaFBhcnQgPSBmaWxldGltZS5kd0hpZ2hEYXRlVGltZSApCiMgZGVmaW5lIFVMQVJHRUlOVF9UT19GSUxFVElNRSh1bGFyZ2UsIGZpbGV0aW1lKSBcCiAgICAoIGZpbGV0aW1lLmR3TG93RGF0ZVRpbWUgPSB1bGFyZ2UudS5Mb3dQYXJ0LCBcCiAgICAgIGZpbGV0aW1lLmR3SGlnaERhdGVUaW1lID0gdWxhcmdlLnUuSGlnaFBhcnQgKQojZWxzZQojIGRlZmluZSBGSUxFVElNRV9UT19VTEFSR0VJTlQoZmlsZXRpbWUsIHVsYXJnZSkgXAogICAgKCB1bGFyZ2UuTG93UGFydCA9IGZpbGV0aW1lLmR3TG93RGF0ZVRpbWUsIFwKICAgICAgdWxhcmdlLkhpZ2hQYXJ0ID0gZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWUgKQojIGRlZmluZSBVTEFSR0VJTlRfVE9fRklMRVRJTUUodWxhcmdlLCBmaWxldGltZSkgXAogICAgKCBmaWxldGltZS5kd0xvd0RhdGVUaW1lID0gdWxhcmdlLkxvd1BhcnQsIFwKICAgICAgZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWUgPSB1bGFyZ2UuSGlnaFBhcnQgKQojZW5kaWYgLyogTk9OQU1FTEVTU1NUUlVDVCAqLwoKI2RlZmluZSBURU5fTUlMIDEwMDAwMDAwTEwKCi8qIHJldHVybnMgdGltZSByZW1haW5pbmcgaW4gc2Vjb25kcyAqLwpsb25nIFJQQ1NTX0dldExhenlUaW1lUmVtYWluaW5nKHZvaWQpCnsKICBTWVNURU1USU1FIHN0X2p1c3Rfbm93OwogIEZJTEVUSU1FIGZ0X2puLCBmdF9sdHQ7CiAgVUxBUkdFX0lOVEVHRVIgdWxfam4sIHVsX2x0dDsKCiAgR2V0U3lzdGVtVGltZSgmc3RfanVzdF9ub3cpOwogIFN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZzdF9qdXN0X25vdywgJmZ0X2puKTsKICBGSUxFVElNRV9UT19VTEFSR0VJTlQoZnRfam4sIHVsX2puKTsKCiAgU3lzdGVtVGltZVRvRmlsZVRpbWUoJmxhenlfdGltZW91dF90aW1lLCAmZnRfbHR0KTsKICBGSUxFVElNRV9UT19VTEFSR0VJTlQoZnRfbHR0LCB1bF9sdHQpOwogIAogIGlmICh1bF9qbi5RdWFkUGFydCA+IHVsX2x0dC5RdWFkUGFydCkKICAgIHJldHVybiAwOwogIGVsc2UKICAgIHJldHVybiAodWxfbHR0LlF1YWRQYXJ0IC0gdWxfam4uUXVhZFBhcnQpIC8gVEVOX01JTDsKfQoKdm9pZCBSUENTU19TZXRMYXp5VGltZVJlbWFpbmluZyhsb25nIHNlY29uZHMpCnsKICBTWVNURU1USU1FIHN0X2p1c3Rfbm93OwogIEZJTEVUSU1FIGZ0X2puLCBmdF9sdHQ7CiAgVUxBUkdFX0lOVEVHRVIgdWxfam4sIHVsX2x0dDsKCiAgV0lORV9UUkFDRSgiKHNlY29uZHMgPT0gJWxkKVxuIiwgc2Vjb25kcyk7CgogIGFzc2VydChzZWNvbmRzID49IDApOyAgICAgLyogbmVnYXRpdmVzIGFyZSBub3QgYWxsb3dlZCAqLwogIAogIEdldFN5c3RlbVRpbWUoJnN0X2p1c3Rfbm93KTsKICBTeXN0ZW1UaW1lVG9GaWxlVGltZSgmc3RfanVzdF9ub3csICZmdF9qbik7CiAgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZ0X2puLCB1bF9qbik7CgogIC8qIHdlIHdhbnQgdG8gZmluZCB0aGUgdGltZSBsdHQsIHMudC4gbHR0ID0ganVzdF9ub3cgKyBzZWNvbmRzICovCiAgdWxfbHR0LlF1YWRQYXJ0ID0gdWxfam4uUXVhZFBhcnQgKyBzZWNvbmRzICogVEVOX01JTDsKCiAgLyogZ3JlYXQuIGp1c3QgcmVtZW1iZXIgaXQgKi8KICBVTEFSR0VJTlRfVE9fRklMRVRJTUUodWxfbHR0LCBmdF9sdHQpOwogIGlmICghIEZpbGVUaW1lVG9TeXN0ZW1UaW1lKCZmdF9sdHQsICZsYXp5X3RpbWVvdXRfdGltZSkpCiAgICBhc3NlcnQoRkFMU0UpOwp9CgojdW5kZWYgRklMRVRJTUVfVE9fVUxBUkdFSU5UCiN1bmRlZiBVTEFSR0VJTlRfVE9fRklMRVRJTUUKI3VuZGVmIFRFTl9NSUwKCkJPT0wgUlBDU1Nfd29yayh2b2lkKQp7CiAgcmV0dXJuIFJQQ1NTX05QRG9Xb3JrKCk7Cn0KCkJPT0wgUlBDU1NfRW1wdHkodm9pZCkKewogIEJPT0wgcnNsdCA9IFRSVUU7CgogIHJzbHQgPSBSUENTU19FcG1hcEVtcHR5KCk7CgogIHJldHVybiByc2x0Owp9CgpCT09MIFJQQ1NTX1JlYWR5VG9EaWUodm9pZCkKewogIGxvbmcgbHRyID0gUlBDU1NfR2V0TGF6eVRpbWVSZW1haW5pbmcoKTsKICBMT05HIHN0YyA9IFJQQ1NTX1NydlRocmVhZENvdW50KCk7CiAgQk9PTCBlbXB0eSA9IFJQQ1NTX0VtcHR5KCk7CiAgcmV0dXJuICggZW1wdHkgJiYgKGx0ciA8PSAwKSAmJiAoc3RjID09IDApICk7Cn0KCkJPT0wgUlBDU1NfSW5pdGlhbGl6ZSh2b2lkKQp7CiAgV0lORV9UUkFDRSgiXG4iKTsKCiAgbWFzdGVyX211dGV4ID0gQ3JlYXRlTXV0ZXhBKCBOVUxMLCBGQUxTRSwgUlBDU1NfTUFTVEVSX01VVEVYX05BTUUpOwogIGlmICghbWFzdGVyX211dGV4KSB7CiAgICBXSU5FX0VSUigiRmFpbGVkIHRvIGNyZWF0ZSBtYXN0ZXIgbXV0ZXhcbiIpOwogICAgcmV0dXJuIEZBTFNFOwogIH0KCiAgaWYgKCFSUENTU19CZWNvbWVQaXBlU2VydmVyKCkpIHsKICAgIFdJTkVfV0FSTigiU2VydmVyIGFscmVhZHkgcnVubmluZzogZXhpdGluZy5cbiIpOwoKICAgIENsb3NlSGFuZGxlKG1hc3Rlcl9tdXRleCk7CiAgICBtYXN0ZXJfbXV0ZXggPSBOVUxMOwoKICAgIHJldHVybiBGQUxTRTsKICB9CgogIHJldHVybiBUUlVFOwp9CgovKiByZXR1cm5zIGZhbHNlIGlmIHdlIGRpc2NvdmVyIGF0IHRoZSBsYXN0IG1vbWVudCB0aGF0IHdlCiAgIGFyZW4ndCByZWFkeSB0byB0ZXJtaW5hdGUgKi8KQk9PTCBSUENTU19TaHV0ZG93bih2b2lkKQp7CiAgaWYgKCFSUENTU19VbkJlY29tZVBpcGVTZXJ2ZXIoKSkKICAgIHJldHVybiBGQUxTRTsKICAgCiAgaWYgKCFDbG9zZUhhbmRsZShtYXN0ZXJfbXV0ZXgpKQogICAgV0lORV9XQVJOKCJGYWlsZWQgdG8gcmVsZWFzZSBtYXN0ZXIgbXV0ZXhcbiIpOwoKICBtYXN0ZXJfbXV0ZXggPSBOVUxMOwoKICByZXR1cm4gVFJVRTsKfQoKdm9pZCBSUENTU19NYWluTG9vcCh2b2lkKQp7CiAgQk9PTCBkaWRfc29tZXRoaW5nX25ldzsKCiAgV0lORV9UUkFDRSgiXG4iKTsKCiAgZm9yICg7OykgewogICAgZGlkX3NvbWV0aGluZ19uZXcgPSBGQUxTRTsKCiAgICB3aGlsZSAoICghIGRpZF9zb21ldGhpbmdfbmV3KSAmJiAoISBSUENTU19SZWFkeVRvRGllKCkpICkKICAgICAgZGlkX3NvbWV0aGluZ19uZXcgPSAoUlBDU1Nfd29yaygpIHx8IGRpZF9zb21ldGhpbmdfbmV3KTsKCiAgICBpZiAoKCEgZGlkX3NvbWV0aGluZ19uZXcpICYmIFJQQ1NTX1JlYWR5VG9EaWUoKSkKICAgICAgYnJlYWs7IC8qIHRoYXQncyBpdCBmb3IgdXMgKi8KCiAgICBpZiAoZGlkX3NvbWV0aGluZ19uZXcpCiAgICAgIFJQQ1NTX1NldExhenlUaW1lUmVtYWluaW5nKG1heF9sYXp5X3RpbWVvdXQpOwogIH0KfQoKQk9PTCBSUENTU19Qcm9jZXNzQXJncyggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKewogIGludCBpOwogIGNoYXIgKmMsKmMxOwoKICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CiAgICBjID0gYXJndltpXTsKICAgIHdoaWxlICgqYyA9PSAnICcpIGMrKzsKICAgIGlmICgoKmMgIT0gJy0nKSAmJiAoKmMgIT0gJy8nKSkKICAgICAgcmV0dXJuIEZBTFNFOwogICAgYysrOwogICAgc3dpdGNoICgqKGMrKykpIHsKICAgICAgY2FzZSAndCc6CiAgICAgIGNhc2UgJ1QnOgogICAgICAgIHdoaWxlICgqYyA9PSAnICcpIGMrKzsKCWlmICgqYyA9PSAnXDAnKSAgewoJICAvKiBuZXh0IGFyZyAqLwoJICBpZiAoKytpID49IGFyZ2MpCgkgICAgcmV0dXJuIEZBTFNFOwoJICBjID0gYXJndltpXTsKCSAgd2hpbGUgKCpjID09ICcgJykgYysrOwoJICBpZiAoYyA9PSAnXDAnKQoJICAgIHJldHVybiBGQUxTRTsKCX0gZWxzZQoJICByZXR1cm4gRkFMU0U7CiAgICAgICAgbWF4X2xhenlfdGltZW91dCA9IHN0cnRvbChjLCAmYzEsIDApOwogICAgICAgIGlmIChjID09IGMxKQoJICByZXR1cm4gRkFMU0U7CgljID0gYzE7CglpZiAobWF4X2xhenlfdGltZW91dCA8PSAwKQoJICByZXR1cm4gRkFMU0U7CglpZiAobWF4X2xhenlfdGltZW91dCA9PSBMT05HX01BWCkKCSAgcmV0dXJuIEZBTFNFOwoJV0lORV9UUkFDRSgicmVhZCB0aW1lb3V0IGFyZ3VtZW50OiAlbGRcbiIsIG1heF9sYXp5X3RpbWVvdXQpOwoJYnJlYWs7CiAgICAgIGRlZmF1bHQ6IAogICAgICAgIHJldHVybiBGQUxTRTsKCWJyZWFrOwogICAgfQogICAgd2hpbGUgKCpjID09ICcgJykgYysrOwogICAgaWYgKCpjICE9ICdcMCcpIHJldHVybiBGQUxTRTsKICB9CgogIHJldHVybiBUUlVFOwp9Cgp2b2lkIFJQQ1NTX1VzYWdlKHZvaWQpCnsKICBwcmludGYoIlxuV2luZSBSUENTU1xuIik7CiAgcHJpbnRmKCJcbnN5bnRheDogcnBjc3MgWy10IHRpbWVvdXRdXG5cbiIpOwogIHByaW50ZigiICAtdDogcnBjc3MgKG9yIHRoZSBydW5uaW5nIHJwY3NzIHByb2Nlc3MpIHdpbGxcbiIpOwogIHByaW50ZigiICAgICAgZXhlY3V0ZSB3aXRoIGF0IGxlYXN0IHRoZSBzcGVjaWZpZWQgdGltZW91dC5cbiIpOwogIHByaW50ZigiXG4iKTsKfQoKaW50IG1haW4oIGludCBhcmdjLCBjaGFyICoqYXJndiApCnsKICAvKiAKICAgKiBXZSBhcmUgaW52b2tlZCBhcyBhIHN0YW5kYXJkIGV4ZWN1dGFibGU7IHdlIGFjdCBpbiBhCiAgICogImxhenkiIG1hbm5lci4gIFdlIG9wZW4gdXAgb3VyIHBpcGUsIGFuZCBoYW5nIGFyb3VuZCB1bnRpbCB3ZSBoYXZlCiAgICogbm90aGluZyBsZWZ0IHRvIGRvLCBhbmQgdGhlbiBzaWxlbnRseSB0ZXJtaW5hdGUuICBXaGVuIHdlJ3JlIG5lZWRlZAogICAqIGFnYWluLCBycGNydDQuZGxsLnNvIHdpbGwgaW52b2tlIHVzIGF1dG9tYXRpY2FsbHkuCiAgICovCiAgICAgICAKICBpZiAoIVJQQ1NTX1Byb2Nlc3NBcmdzKGFyZ2MsIGFyZ3YpKSB7CiAgICBSUENTU19Vc2FnZSgpOwogICAgcmV0dXJuIDE7CiAgfQogICAgICAKICAvKiB3ZSB3YW50IHRvIHdhaXQgZm9yIHNvbWV0aGluZyB0byBoYXBwZW4sIGFuZCB0aGVuIAogICAgIHRpbWVvdXQgd2hlbiBubyBhY3Rpdml0eSBvY2N1cnMuICovCiAgUlBDU1NfU2V0TGF6eVRpbWVSZW1haW5pbmcobWF4X2xhenlfdGltZW91dCk7CgogIGlmIChSUENTU19Jbml0aWFsaXplKCkpIHsKICAgIGRvCiAgICAgIFJQQ1NTX01haW5Mb29wKCk7CiAgICB3aGlsZSAoIVJQQ1NTX1NodXRkb3duKCkpOwogIH0KCiAgcmV0dXJuIDA7Cn0K