LyoKICogQ29weXJpZ2h0IDIwMDEsIE92ZSBL5XZlbiwgVHJhbnNHYW1pbmcgVGVjaG5vbG9naWVzIEluYy4KICogQ29weXJpZ2h0IDIwMDIgR3JlZyBUdXJuZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqIC0tLS0gcnBjc3NfbWFpbi5jOgogKiAgIEluaXRpYWxpemUgYW5kIHN0YXJ0IHNlcnZpbmcgcmVxdWVzdHMuICBCYWlsIGlmIHJwY3NzIGFscmVhZHkgaXMKICogICBydW5uaW5nLgogKgogKiAtLS0tIFJQQ1NTLkVYRToKICogICAKICogICBXaW5lIG5lZWRzIGEgc2VydmVyIHdob3NlIHJvbGUgaXMgc29tZXdoYXQgbGlrZSB0aGF0CiAqICAgb2YgcnBjc3MuZXhlIGluIHdpbmRvd3MuICBUaGlzIGlzIG5vdCBhIGNsb25lIG9mCiAqICAgd2luZG93cyBycGNzcyBhdCBhbGwuICBJdCBoYXMgYmVlbiBnaXZlbiB0aGUgc2FtZSBuYW1lLCBob3dldmVyLAogKiAgIHRvIHByb3ZpZGUgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgCiAqICAgaXQgbWF5IGJlY29tZSBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIHRoZSAicmVhbCIgcnBjc3MuZXhlIG9uCiAqICAgV2luZG93cy4KICoKICogLS0tLSBLTk9XTiBCVUdTIC8gVE9ETzoKICoKICogICBvIFNlcnZpY2UgaG9va3MgYXJlIHVuaW1wbGVtZW50ZWQgKGlmIHlvdSBib3RoZXIgdG8gaW1wbGVtZW50CiAqICAgICB0aGVzZSwgYWxzbyBpbXBsZW1lbnQgbmV0LmV4ZSwgYXQgbGVhc3QgZm9yICJuZXQgc3RhcnQiIGFuZAogKiAgICAgIm5ldCBzdG9wIiAoc2hvdWxkIGJlIHByZXR0eSBlYXN5IEkgZ3Vlc3MsIGFzc3VtaW5nIHRoZSByZXN0CiAqICAgICBvZiB0aGUgc2VydmljZXMgQVBJIGluZnJhc3RydWN0dXJlIHdvcmtzLgogKiAKICogICBvIElzIHN1cHBvc2VkIHRvIHVzZSBSUEMsIG5vdCByYW5kb20ga2x1ZGdlcywgdG8gbWFwIGVuZHBvaW50cy4KICoKICogICBvIFByb2JhYmx5IG5hbWUgc2VydmljZXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGhlcmUgYXMgd2VsbC4KICoKICogICBvIFdpbmUncyBuYW1lZCBwaXBlcyAoaW4gZ2VuZXJhbCkgbWF5IG5vdCBpbnRlcm9wZXJhdGUgd2l0aCB0aG9zZSBvZiAKICogICAgIFdpbmRvd3MgeWV0ICg/KQogKgogKiAgIG8gVGhlcmUgaXMgYSBsb29taW5nIHByb2JsZW0gcmVnYXJkaW5nIGxpc3RlbmluZyBvbiBwcml2ZWxlZ2VkCiAqICAgICBwb3J0cy4gIFdlIHdpbGwgbmVlZCB0byBiZSBhYmxlIHRvIGNvZXhpc3Qgd2l0aCBTQU1CQSwgYW5kIGFibGUKICogICAgIHRvIGZ1bmN0aW9uIHdpdGhvdXQgcnVubmluZyB3aW5lbGliIGNvZGUgYXMgcm9vdC4gIFRoaXMgbWF5CiAqICAgICB0YWtlIHNvbWUgZG9pbmcsIGluY2x1ZGluZyBzaWduaWZpY2FudCByZWNvbmNlcHR1YWxpemF0aW9uIG9mIHRoZQogKiAgICAgcm9sZSBvZiBycGNzcy5leGUgaW4gd2luZS4KICoKICogICBvIFdobyBrbm93cz8gIFdoYXRldmVyIHJwY3NzIGRvZXMsIHdlIG91Z2h0IHRvIGF0CiAqICAgICBsZWFzdCB0aGluayBhYm91dCBkb2luZy4uLiBidXQgd2hhdCAvZG9lcy8gaXQgZG8/CiAqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CgojaW5jbHVkZSAicnBjc3MuaCIKI2luY2x1ZGUgIndpbm50LmgiCgojaW5jbHVkZSAid2luZS9kZWJ1Zy5oIgoKV0lORV9ERUZBVUxUX0RFQlVHX0NIQU5ORUwob2xlKTsKCnN0YXRpYyBIQU5ETEUgbWFzdGVyX211dGV4OwpzdGF0aWMgbG9uZyBtYXhfbGF6eV90aW1lb3V0ID0gUlBDU1NfREVGQVVMVF9NQVhfTEFaWV9USU1FT1VUOwoKSEFORExFIFJQQ1NTX0dldE1hc3Rlck11dGV4KHZvaWQpCnsKICByZXR1cm4gbWFzdGVyX211dGV4Owp9Cgp2b2lkIFJQQ1NTX1NldE1heExhenlUaW1lb3V0KGxvbmcgbWx0KQp7CiAgLyogRklYTUU6IHRoaXMgbWF4IGVuc3VyZXMgdGhhdCBubyBjYWxsZXIgd2lsbCBkZWNyZWFzZSBvdXIgd2FpdCB0aW1lLAogICAgIGJ1dCBjb3VsZCBoYXZlIG90aGVyIGJhZCByZXN1bHRzLiAgZml4OiBTdG9yZSAibmV4dF9tYXhfbGF6eV90aW1lb3V0IiAKICAgICBhbmQgaW5zdGFsbCBpdCBhcyBuZWNjZXNhcnkgbmV4dCB0aW1lIHdlICJkbyB3b3JrIj8gKi8KICBtYXhfbGF6eV90aW1lb3V0ID0gbWF4KFJQQ1NTX0dldExhenlUaW1lUmVtYWluaW5nKCksIG1sdCk7Cn0KCmxvbmcgUlBDU1NfR2V0TWF4TGF6eVRpbWVvdXQodm9pZCkKewogIHJldHVybiBtYXhfbGF6eV90aW1lb3V0Owp9CgovKiB3aGVuIGRvIHdlIGp1c3QgZ2l2ZSB1cCBhbmQgYmFpbD8gKFVUQykgKi8Kc3RhdGljIFNZU1RFTVRJTUUgbGF6eV90aW1lb3V0X3RpbWU7CgojaWYgZGVmaW5lZChOT05BTUVMRVNTU1RSVUNUKQogICNkZWZpbmUgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZpbGV0aW1lLCB1bGFyZ2UpIFwKICAgICggdWxhcmdlLnMuTG93UGFydCA9IGZpbGV0aW1lLmR3TG93RGF0ZVRpbWUsIFwKICAgICAgdWxhcmdlLnMuSGlnaFBhcnQgPSBmaWxldGltZS5kd0hpZ2hEYXRlVGltZSApCiAgI2RlZmluZSBVTEFSR0VJTlRfVE9fRklMRVRJTUUodWxhcmdlLCBmaWxldGltZSkgXAogICAgKCBmaWxldGltZS5kd0xvd0RhdGVUaW1lID0gdWxhcmdlLnMuTG93UGFydCwgXAogICAgICBmaWxldGltZS5kd0hpZ2hEYXRlVGltZSA9IHVsYXJnZS5zLkhpZ2hQYXJ0ICkKI2Vsc2UKICAjZGVmaW5lIEZJTEVUSU1FX1RPX1VMQVJHRUlOVChmaWxldGltZSwgdWxhcmdlKSBcCiAgICAoIHVsYXJnZS5Mb3dQYXJ0ID0gZmlsZXRpbWUuZHdMb3dEYXRlVGltZSwgXAogICAgICB1bGFyZ2UuSGlnaFBhcnQgPSBmaWxldGltZS5kd0hpZ2hEYXRlVGltZSApCiAgI2RlZmluZSBVTEFSR0VJTlRfVE9fRklMRVRJTUUodWxhcmdlLCBmaWxldGltZSkgXAogICAgKCBmaWxldGltZS5kd0xvd0RhdGVUaW1lID0gdWxhcmdlLkxvd1BhcnQsIFwKICAgICAgZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWUgPSB1bGFyZ2UuSGlnaFBhcnQgKQojZW5kaWYgLyogTk9OQU1FTEVTU1NUUlVDVCAqLwoKI2RlZmluZSBURU5fTUlMIDEwMDAwMDAwTEwKCi8qIHJldHVybnMgdGltZSByZW1haW5pbmcgaW4gc2Vjb25kcyAqLwpsb25nIFJQQ1NTX0dldExhenlUaW1lUmVtYWluaW5nKHZvaWQpCnsKICBTWVNURU1USU1FIHN0X2p1c3Rfbm93OwogIEZJTEVUSU1FIGZ0X2puLCBmdF9sdHQ7CiAgVUxBUkdFX0lOVEVHRVIgdWxfam4sIHVsX2x0dDsKCiAgR2V0U3lzdGVtVGltZSgmc3RfanVzdF9ub3cpOwogIFN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZzdF9qdXN0X25vdywgJmZ0X2puKTsKICBGSUxFVElNRV9UT19VTEFSR0VJTlQoZnRfam4sIHVsX2puKTsKCiAgU3lzdGVtVGltZVRvRmlsZVRpbWUoJmxhenlfdGltZW91dF90aW1lLCAmZnRfbHR0KTsKICBGSUxFVElNRV9UT19VTEFSR0VJTlQoZnRfbHR0LCB1bF9sdHQpOwogIAogIGlmICh1bF9qbi5RdWFkUGFydCA+IHVsX2x0dC5RdWFkUGFydCkKICAgIHJldHVybiAwOwogIGVsc2UKICAgIHJldHVybiAodWxfbHR0LlF1YWRQYXJ0IC0gdWxfam4uUXVhZFBhcnQpIC8gVEVOX01JTDsKfQoKdm9pZCBSUENTU19TZXRMYXp5VGltZVJlbWFpbmluZyhsb25nIHNlY29uZHMpCnsKICBTWVNURU1USU1FIHN0X2p1c3Rfbm93OwogIEZJTEVUSU1FIGZ0X2puLCBmdF9sdHQ7CiAgVUxBUkdFX0lOVEVHRVIgdWxfam4sIHVsX2x0dDsKCiAgV0lORV9UUkFDRSgiKHNlY29uZHMgPT0gJWxkKVxuIiwgc2Vjb25kcyk7CgogIGFzc2VydChzZWNvbmRzID49IDApOyAgICAgLyogbmVnYXRpdmVzIGFyZSBub3QgYWxsb3dlZCAqLwogIAogIEdldFN5c3RlbVRpbWUoJnN0X2p1c3Rfbm93KTsKICBTeXN0ZW1UaW1lVG9GaWxlVGltZSgmc3RfanVzdF9ub3csICZmdF9qbik7CiAgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZ0X2puLCB1bF9qbik7CgogIC8qIHdlIHdhbnQgdG8gZmluZCB0aGUgdGltZSBsdHQsIHMudC4gbHR0ID0ganVzdF9ub3cgKyBzZWNvbmRzICovCiAgdWxfbHR0LlF1YWRQYXJ0ID0gdWxfam4uUXVhZFBhcnQgKyBzZWNvbmRzICogVEVOX01JTDsKCiAgLyogZ3JlYXQuIGp1c3QgcmVtZW1iZXIgaXQgKi8KICBVTEFSR0VJTlRfVE9fRklMRVRJTUUodWxfbHR0LCBmdF9sdHQpOwogIGlmICghIEZpbGVUaW1lVG9TeXN0ZW1UaW1lKCZmdF9sdHQsICZsYXp5X3RpbWVvdXRfdGltZSkpCiAgICBhc3NlcnQoRkFMU0UpOwp9CgojdW5kZWYgRklMRVRJTUVfVE9fVUxBUkdFSU5UCiN1bmRlZiBVTEFSR0VJTlRfVE9fRklMRVRJTUUKI3VuZGVmIFRFTl9NSUwKCkJPT0wgUlBDU1Nfd29yayh2b2lkKQp7CiAgcmV0dXJuIFJQQ1NTX05QRG9Xb3JrKCk7Cn0KCkJPT0wgUlBDU1NfRW1wdHkodm9pZCkKewogIEJPT0wgcnNsdCA9IFRSVUU7CgogIHJzbHQgPSBSUENTU19FcG1hcEVtcHR5KCk7CgogIHJldHVybiByc2x0Owp9CgpCT09MIFJQQ1NTX1JlYWR5VG9EaWUodm9pZCkKewogIGxvbmcgbHRyID0gUlBDU1NfR2V0TGF6eVRpbWVSZW1haW5pbmcoKTsKICBMT05HIHN0YyA9IFJQQ1NTX1NydlRocmVhZENvdW50KCk7CiAgQk9PTCBlbXB0eSA9IFJQQ1NTX0VtcHR5KCk7CiAgcmV0dXJuICggZW1wdHkgJiYgKGx0ciA8PSAwKSAmJiAoc3RjID09IDApICk7Cn0KCkJPT0wgUlBDU1NfSW5pdGlhbGl6ZSh2b2lkKQp7CiAgV0lORV9UUkFDRSgiXG4iKTsKCiAgbWFzdGVyX211dGV4ID0gQ3JlYXRlTXV0ZXhBKCBOVUxMLCBGQUxTRSwgUlBDU1NfTUFTVEVSX01VVEVYX05BTUUpOwogIGlmICghbWFzdGVyX211dGV4KSB7CiAgICBXSU5FX0VSUigiRmFpbGVkIHRvIGNyZWF0ZSBtYXN0ZXIgbXV0ZXhcbiIpOwogICAgcmV0dXJuIEZBTFNFOwogIH0KCiAgaWYgKCFSUENTU19CZWNvbWVQaXBlU2VydmVyKCkpIHsKICAgIFdJTkVfV0FSTigiU2VydmVyIGFscmVhZHkgcnVubmluZzogZXhpdGluZy5cbiIpOwoKICAgIENsb3NlSGFuZGxlKG1hc3Rlcl9tdXRleCk7CiAgICBtYXN0ZXJfbXV0ZXggPSBOVUxMOwoKICAgIHJldHVybiBGQUxTRTsKICB9CgogIHJldHVybiBUUlVFOwp9CgovKiByZXR1cm5zIGZhbHNlIGlmIHdlIGRpc2NvdmVyIGF0IHRoZSBsYXN0IG1vbWVudCB0aGF0IHdlCiAgIGFyZW4ndCByZWFkeSB0byB0ZXJtaW5hdGUgKi8KQk9PTCBSUENTU19TaHV0ZG93bih2b2lkKQp7CiAgaWYgKCFSUENTU19VbkJlY29tZVBpcGVTZXJ2ZXIoKSkKICAgIHJldHVybiBGQUxTRTsKICAgCiAgaWYgKCFDbG9zZUhhbmRsZShtYXN0ZXJfbXV0ZXgpKQogICAgV0lORV9XQVJOKCJGYWlsZWQgdG8gcmVsZWFzZSBtYXN0ZXIgbXV0ZXhcbiIpOwoKICBtYXN0ZXJfbXV0ZXggPSAoSEFORExFKU5VTEw7CgogIHJldHVybiBUUlVFOwp9Cgp2b2lkIFJQQ1NTX01haW5Mb29wKHZvaWQpCnsKICBCT09MIGRpZF9zb21ldGhpbmdfbmV3OwoKICBXSU5FX1RSQUNFKCJcbiIpOwoKICBmb3IgKDs7KSB7CiAgICBkaWRfc29tZXRoaW5nX25ldyA9IEZBTFNFOwoKICAgIHdoaWxlICggKCEgZGlkX3NvbWV0aGluZ19uZXcpICYmICghIFJQQ1NTX1JlYWR5VG9EaWUoKSkgKQogICAgICBkaWRfc29tZXRoaW5nX25ldyA9IChSUENTU193b3JrKCkgfHwgZGlkX3NvbWV0aGluZ19uZXcpOwoKICAgIGlmICgoISBkaWRfc29tZXRoaW5nX25ldykgJiYgUlBDU1NfUmVhZHlUb0RpZSgpKQogICAgICBicmVhazsgLyogdGhhdCdzIGl0IGZvciB1cyAqLwoKICAgIGlmIChkaWRfc29tZXRoaW5nX25ldykKICAgICAgUlBDU1NfU2V0TGF6eVRpbWVSZW1haW5pbmcobWF4X2xhenlfdGltZW91dCk7CiAgfQp9CgpCT09MIFJQQ1NTX1Byb2Nlc3NBcmdzKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKQp7CiAgaW50IGk7CiAgY2hhciAqYywqYzE7CgogIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKICAgIGMgPSBhcmd2W2ldOwogICAgd2hpbGUgKCpjID09ICcgJykgYysrOwogICAgaWYgKCgqYyAhPSAnLScpICYmICgqYyAhPSAnLycpKQogICAgICByZXR1cm4gRkFMU0U7CiAgICBjKys7CiAgICBzd2l0Y2ggKCooYysrKSkgewogICAgICBjYXNlICd0JzoKICAgICAgY2FzZSAnVCc6CiAgICAgICAgd2hpbGUgKCpjID09ICcgJykgYysrOwoJaWYgKCpjID09ICdcMCcpICB7CgkgIC8qIG5leHQgYXJnICovCgkgIGlmICgrK2kgPj0gYXJnYykKCSAgICByZXR1cm4gRkFMU0U7CgkgIGMgPSBhcmd2W2ldOwoJICB3aGlsZSAoKmMgPT0gJyAnKSBjKys7CgkgIGlmIChjID09ICdcMCcpCgkgICAgcmV0dXJuIEZBTFNFOwoJfSBlbHNlCgkgIHJldHVybiBGQUxTRTsKICAgICAgICBtYXhfbGF6eV90aW1lb3V0ID0gc3RydG9sKGMsICZjMSwgMCk7CiAgICAgICAgaWYgKGMgPT0gYzEpCgkgIHJldHVybiBGQUxTRTsKCWMgPSBjMTsKCWlmIChtYXhfbGF6eV90aW1lb3V0IDw9IDApCgkgIHJldHVybiBGQUxTRTsKCWlmIChtYXhfbGF6eV90aW1lb3V0ID09IExPTkdfTUFYKQoJICByZXR1cm4gRkFMU0U7CglXSU5FX1RSQUNFKCJyZWFkIHRpbWVvdXQgYXJndW1lbnQ6ICVsZFxuIiwgbWF4X2xhenlfdGltZW91dCk7CglicmVhazsKICAgICAgZGVmYXVsdDogCiAgICAgICAgcmV0dXJuIEZBTFNFOwoJYnJlYWs7CiAgICB9CiAgICB3aGlsZSAoKmMgPT0gJyAnKSBjKys7CiAgICBpZiAoKmMgIT0gJ1wwJykgcmV0dXJuIEZBTFNFOwogIH0KCiAgcmV0dXJuIFRSVUU7Cn0KCnZvaWQgUlBDU1NfVXNhZ2Uodm9pZCkKewogIHByaW50ZigiXG5XaW5lIFJQQ1NTXG4iKTsKICBwcmludGYoIlxuc3ludGF4OiBycGNzcyBbLXQgdGltZW91dF1cblxuIik7CiAgcHJpbnRmKCIgIC10OiBycGNzcyAob3IgdGhlIHJ1bm5pbmcgcnBjc3MgcHJvY2Vzcykgd2lsbFxuIik7CiAgcHJpbnRmKCIgICAgICBleGVjdXRlIHdpdGggYXQgbGVhc3QgdGhlIHNwZWNpZmllZCB0aW1lb3V0LlxuIik7CiAgcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKewogIC8qIAogICAqIFdlIGFyZSBpbnZva2VkIGFzIGEgc3RhbmRhcmQgZXhlY3V0YWJsZTsgd2UgYWN0IGluIGEKICAgKiAibGF6eSIgbWFubmVyLiAgV2Ugb3BlbiB1cCBvdXIgcGlwZSwgYW5kIGhhbmcgYXJvdW5kIHVudGlsIHdlIGhhdmUKICAgKiBub3RoaW5nIGxlZnQgdG8gZG8sIGFuZCB0aGVuIHNpbGVudGx5IHRlcm1pbmF0ZS4gIFdoZW4gd2UncmUgbmVlZGVkCiAgICogYWdhaW4sIHJwY3J0NC5kbGwuc28gd2lsbCBpbnZva2UgdXMgYXV0b21hdGljYWxseS4KICAgKi8KICAgICAgIAogIGlmICghUlBDU1NfUHJvY2Vzc0FyZ3MoYXJnYywgYXJndikpIHsKICAgIFJQQ1NTX1VzYWdlKCk7CiAgICByZXR1cm4gMTsKICB9CiAgICAgIAogIC8qIHdlIHdhbnQgdG8gd2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbiwgYW5kIHRoZW4gCiAgICAgdGltZW91dCB3aGVuIG5vIGFjdGl2aXR5IG9jY3Vycy4gKi8KICBSUENTU19TZXRMYXp5VGltZVJlbWFpbmluZyhtYXhfbGF6eV90aW1lb3V0KTsKCiAgaWYgKFJQQ1NTX0luaXRpYWxpemUoKSkgewogICAgZG8KICAgICAgUlBDU1NfTWFpbkxvb3AoKTsKICAgIHdoaWxlICghUlBDU1NfU2h1dGRvd24oKSk7CiAgfQoKICByZXR1cm4gMDsKfQo=