From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MPeHq-0002Bb-F5 for qemu-devel@nongnu.org; Sat, 11 Jul 2009 11:14:50 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MPeHo-0002AX-Uz for qemu-devel@nongnu.org; Sat, 11 Jul 2009 11:14:49 -0400 Received: from [199.232.76.173] (port=39441 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MPeHo-0002AU-Q4 for qemu-devel@nongnu.org; Sat, 11 Jul 2009 11:14:48 -0400 Received: from fg-out-1718.google.com ([72.14.220.156]:20987) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MPeHo-0006r3-9h for qemu-devel@nongnu.org; Sat, 11 Jul 2009 11:14:48 -0400 Received: by fg-out-1718.google.com with SMTP id d23so568098fga.8 for ; Sat, 11 Jul 2009 08:14:47 -0700 (PDT) MIME-Version: 1.0 Date: Sat, 11 Jul 2009 17:14:47 +0200 Message-ID: <761ea48b0907110814t12c644b6mf733d3b5e28e152@mail.gmail.com> From: Laurent Desnogues Content-Type: multipart/mixed; boundary=000e0cd24774ac4fbd046e6f8caa Subject: [Qemu-devel] [PATCH] User mode: Handle x86_64 vsyscall List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org --000e0cd24774ac4fbd046e6f8caa Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hello, the attached patch implements two of the three x86_64 vsyscall's. Also attached is a test that demonstrates the issue and hopefully the fix. Note there is a trick in there: since vsyscall functions are in high memory, page_l1_map will return NULL resulting in an abort when calling tb_link_phys in tb_gen_code. Also perhaps not very nice is the way a ret is simulated in cpu_loop. I didn't implement vgetcpu. Laurent Signed-off-by: Laurent Desnogues --000e0cd24774ac4fbd046e6f8caa Content-Type: application/octet-stream; name="vsyscall.patch" Content-Disposition: attachment; filename="vsyscall.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fx0h437d0 ZGlmZiAtLWdpdCBhL2V4ZWMuYyBiL2V4ZWMuYwppbmRleCBkNmU1ZDNjLi44YjhiZWE1IDEwMDY0 NAotLS0gYS9leGVjLmMKKysrIGIvZXhlYy5jCkBAIC00MSw2ICs0MSw5IEBACiAjaW5jbHVkZSAi a3ZtLmgiCiAjaWYgZGVmaW5lZChDT05GSUdfVVNFUl9PTkxZKQogI2luY2x1ZGUgPHFlbXUuaD4K KyNpZmRlZiBUQVJHRVRfWDg2XzY0CisjaW5jbHVkZSAidnN5c2NhbGwuaCIKKyNlbmRpZgogI2Vu ZGlmCiAKIC8vI2RlZmluZSBERUJVR19UQl9JTlZBTElEQVRFCkBAIC05MDgsNiArOTExLDEzIEBA IFRyYW5zbGF0aW9uQmxvY2sgKnRiX2dlbl9jb2RlKENQVVN0YXRlICplbnYsCiAgICAgY3B1X2dl bl9jb2RlKGVudiwgdGIsICZjb2RlX2dlbl9zaXplKTsKICAgICBjb2RlX2dlbl9wdHIgPSAodm9p ZCAqKSgoKHVuc2lnbmVkIGxvbmcpY29kZV9nZW5fcHRyICsgY29kZV9nZW5fc2l6ZSArIENPREVf R0VOX0FMSUdOIC0gMSkgJiB+KENPREVfR0VOX0FMSUdOIC0gMSkpOwogCisjaWYgZGVmaW5lZChD T05GSUdfVVNFUl9PTkxZKSAmJiBkZWZpbmVkKFRBUkdFVF9YODZfNjQpCisgICAgLyogaWYgd2Ug YXJlIGRvaW5nIHZzeXNjYWxsIGRvbid0IGxpbmsgdGhlIHBhZ2UgYXMgaXQgbGllcyBpbiBoaWdo IG1lbW9yeQorICAgICAgIGFuZCB0Yl9hbGxvY19wYWdlIHdpbGwgYWJvcnQgZHVlIHRvIHBhZ2Vf bDFfbWFwIHJldHVybmluZyBOVUxMICovCisgICAgaWYgKHVubGlrZWx5KHBoeXNfcGMgPj0gVEFS R0VUX1ZTWVNDQUxMX1NUQVJUCisgICAgICAgICAgICAgICAgICYmIHBoeXNfcGMgPCBUQVJHRVRf VlNZU0NBTExfRU5EKSkKKyAgICAgICAgcmV0dXJuIHRiOworI2VuZGlmCiAgICAgLyogY2hlY2sg bmV4dCBwYWdlIGlmIG5lZWRlZCAqLwogICAgIHZpcnRfcGFnZTIgPSAocGMgKyB0Yi0+c2l6ZSAt IDEpICYgVEFSR0VUX1BBR0VfTUFTSzsKICAgICBwaHlzX3BhZ2UyID0gLTE7CmRpZmYgLS1naXQg YS9saW51eC11c2VyL21haW4uYyBiL2xpbnV4LXVzZXIvbWFpbi5jCmluZGV4IGUzMzFkNjUuLjc2 MWYxY2MgMTAwNjQ0Ci0tLSBhL2xpbnV4LXVzZXIvbWFpbi5jCisrKyBiL2xpbnV4LXVzZXIvbWFp bi5jCkBAIC0zMCw2ICszMCw5IEBACiAjaW5jbHVkZSAicWVtdS5oIgogI2luY2x1ZGUgInFlbXUt Y29tbW9uLmgiCiAjaW5jbHVkZSAiY2FjaGUtdXRpbHMuaCIKKyNpZiBkZWZpbmVkKENPTkZJR19V U0VSX09OTFkpICYmIGRlZmluZWQoVEFSR0VUX1g4Nl82NCkKKyNpbmNsdWRlICJ2c3lzY2FsbC5o IgorI2VuZGlmCiAvKiBGb3IgdGJfbG9jayAqLwogI2luY2x1ZGUgImV4ZWMtYWxsLmgiCiAKQEAg LTMyNyw2ICszMzAsOSBAQCB2b2lkIGNwdV9sb29wKENQVVg4NlN0YXRlICplbnYpCiAgICAgaW50 IHRyYXBucjsKICAgICBhYmlfdWxvbmcgcGM7CiAgICAgdGFyZ2V0X3NpZ2luZm9fdCBpbmZvOwor I2lmZGVmIFRBUkdFVF9YODZfNjQKKyAgICBpbnQgc3lzY2FsbF9udW07CisjZW5kaWYKIAogICAg IGZvcig7OykgewogICAgICAgICB0cmFwbnIgPSBjcHVfeDg2X2V4ZWMoZW52KTsKQEAgLTM1Niw2 ICszNjIsMzcgQEAgdm9pZCBjcHVfbG9vcChDUFVYODZTdGF0ZSAqZW52KQogICAgICAgICAgICAg ZW52LT5laXAgPSBlbnYtPmV4Y2VwdGlvbl9uZXh0X2VpcDsKICAgICAgICAgICAgIGJyZWFrOwog I2VuZGlmCisjaWZkZWYgVEFSR0VUX1g4Nl82NAorICAgICAgICBjYXNlIEVYQ1BfVlNZU0NBTEw6 CisgICAgICAgICAgICBzd2l0Y2ggKGVudi0+ZWlwKSB7CisgICAgICAgICAgICBjYXNlIFRBUkdF VF9WU1lTQ0FMTF9BRERSKF9fTlJfdmdldHRpbWVvZmRheSk6CisgICAgICAgICAgICAgICAgc3lz Y2FsbF9udW0gPSBfX05SX2dldHRpbWVvZmRheTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIGNhc2UgVEFSR0VUX1ZTWVNDQUxMX0FERFIoX19OUl92dGltZSk6CisgICAgICAg ICAgICAgICAgc3lzY2FsbF9udW0gPSBfX05SX3RpbWU7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICBjYXNlIFRBUkdFVF9WU1lTQ0FMTF9BRERSKF9fTlJfdmdldGNwdSk6Cisg ICAgICAgICAgICAgICAgLyogWFhYOiBub3QgeWV0IGltcGxlbWVudGVkICovCisgICAgICAgICAg ICAgICAgY3B1X2Fib3J0KGVudiwgIlVuaW1wbGVtZW50ZWQgdnN5c2NhbGwgdmdldGNwdSIpOwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg ICAgICBjcHVfYWJvcnQoZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCB2 c3lzY2FsbCB0byBhZGRyZXNzICIgVEFSR0VUX0ZNVF9seCAiXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBlbnYtPmVpcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbnYtPnJl Z3NbUl9FQVhdID0gZG9fc3lzY2FsbChlbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzeXNjYWxsX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVudi0+cmVnc1tSX0VESV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbnYtPnJlZ3NbUl9FU0ldLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW52LT5yZWdzW1JfRURYXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVudi0+cmVnc1sxMF0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPnJlZ3NbOF0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPnJlZ3NbOV0pOworICAgICAgICAgICAgLyog c2ltdWxhdGUgYSByZXQgKi8KKyAgICAgICAgICAgIGVudi0+ZWlwID0gbGRxKGVudi0+cmVnc1tS X0VTUF0pOworICAgICAgICAgICAgZW52LT5yZWdzW1JfRVNQXSArPSA4OworICAgICAgICAgICAg YnJlYWs7CisjZW5kaWYKICAgICAgICAgY2FzZSBFWENQMEJfTk9TRUc6CiAgICAgICAgIGNhc2Ug RVhDUDBDX1NUQUNLOgogICAgICAgICAgICAgaW5mby5zaV9zaWdubyA9IFNJR0JVUzsKZGlmZiAt LWdpdCBhL2xpbnV4LXVzZXIveDg2XzY0L3ZzeXNjYWxsLmggYi9saW51eC11c2VyL3g4Nl82NC92 c3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGNjMDcKLS0t IC9kZXYvbnVsbAorKysgYi9saW51eC11c2VyL3g4Nl82NC92c3lzY2FsbC5oCkBAIC0wLDAgKzEs MTkgQEAKKyNpZm5kZWYgVlNZU0NBTExfSAorI2RlZmluZSBWU1lTQ0FMTF9ICisKKy8qIFRoaXMg aXMgYmFzZWQgb24gYXNtL3N5c2NhbGwuaCBpbiBrZXJuZWwgMi42LjI5LiAqLworCitlbnVtIHZz eXNjYWxsX251bSB7CisgICAgX19OUl92Z2V0dGltZW9mZGF5LAorICAgIF9fTlJfdnRpbWUsCisg ICAgX19OUl92Z2V0Y3B1LAorfTsKKworI2RlZmluZSBUQVJHRVRfVlNZU0NBTExfU1RBUlQgKC0x MFVMIDw8IDIwKQorI2RlZmluZSBUQVJHRVRfVlNZU0NBTExfU0laRSAxMDI0CisjZGVmaW5lIFRB UkdFVF9WU1lTQ0FMTF9FTkQgKC0yVUwgPDwgMjApCisjZGVmaW5lIFRBUkdFVF9WU1lTQ0FMTF9N QVBQRURfUEFHRVMgMQorI2RlZmluZSBUQVJHRVRfVlNZU0NBTExfQUREUih2c3lzY2FsbF9ucikg XAorICAgIChUQVJHRVRfVlNZU0NBTExfU1RBUlQrVEFSR0VUX1ZTWVNDQUxMX1NJWkUqKHZzeXNj YWxsX25yKSkKKworI2VuZGlmIC8qICFWU1lTQ0FMTF9IICovCmRpZmYgLS1naXQgYS90YXJnZXQt aTM4Ni9jcHUuaCBiL3RhcmdldC1pMzg2L2NwdS5oCmluZGV4IDZmNzQ3OGEuLmE0MjgxYWUgMTAw NjQ0Ci0tLSBhL3RhcmdldC1pMzg2L2NwdS5oCisrKyBiL3RhcmdldC1pMzg2L2NwdS5oCkBAIC00 MzcsNiArNDM3LDggQEAKIAogI2RlZmluZSBFWENQX1NZU0NBTEwgICAgMHgxMDAgLyogb25seSBo YXBwZW5zIGluIHVzZXIgb25seSBlbXVsYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvciBzeXNjYWxsIGluc3RydWN0aW9uICovCisjZGVmaW5lIEVYQ1BfVlNZU0NBTEwg ICAweDEwMSAvKiBvbmx5IGhhcHBlbnMgaW4gdXNlciBvbmx5IGVtdWxhdGlvbgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb24geDg2XzY0ICovCiAKIGVudW0gewogICAgIENDX09Q X0RZTkFNSUMsIC8qIG11c3QgdXNlIGR5bmFtaWMgY29kZSB0byBnZXQgY2Nfb3AgKi8KZGlmZiAt LWdpdCBhL3RhcmdldC1pMzg2L2hlbHBlci5oIGIvdGFyZ2V0LWkzODYvaGVscGVyLmgKaW5kZXgg NjhkNTdiMS4uM2QzOWQ3YiAxMDA2NDQKLS0tIGEvdGFyZ2V0LWkzODYvaGVscGVyLmgKKysrIGIv dGFyZ2V0LWkzODYvaGVscGVyLmgKQEAgLTU3LDYgKzU3LDcgQEAgREVGX0hFTFBFUl8xKHN5c2V4 aXQsIHZvaWQsIGludCkKICNpZmRlZiBUQVJHRVRfWDg2XzY0CiBERUZfSEVMUEVSXzEoc3lzY2Fs bCwgdm9pZCwgaW50KQogREVGX0hFTFBFUl8xKHN5c3JldCwgdm9pZCwgaW50KQorREVGX0hFTFBF Ul8wKHZzeXNjYWxsLCB2b2lkKQogI2VuZGlmCiBERUZfSEVMUEVSXzEoaGx0LCB2b2lkLCBpbnQp CiBERUZfSEVMUEVSXzEobW9uaXRvciwgdm9pZCwgdGwpCmRpZmYgLS1naXQgYS90YXJnZXQtaTM4 Ni9vcF9oZWxwZXIuYyBiL3RhcmdldC1pMzg2L29wX2hlbHBlci5jCmluZGV4IGVkMjJjN2EuLjZi NTU4YmYgMTAwNjQ0Ci0tLSBhL3RhcmdldC1pMzg2L29wX2hlbHBlci5jCisrKyBiL3RhcmdldC1p Mzg2L29wX2hlbHBlci5jCkBAIC0xMDA0LDYgKzEwMDQsMTIgQEAgdm9pZCBoZWxwZXJfc3lzY2Fs bChpbnQgbmV4dF9laXBfYWRkZW5kKQogICAgIGVudi0+ZXhjZXB0aW9uX25leHRfZWlwID0gZW52 LT5laXAgKyBuZXh0X2VpcF9hZGRlbmQ7CiAgICAgY3B1X2xvb3BfZXhpdCgpOwogfQorCit2b2lk IGhlbHBlcl92c3lzY2FsbCh2b2lkKQoreworICAgIGVudi0+ZXhjZXB0aW9uX2luZGV4ID0gRVhD UF9WU1lTQ0FMTDsKKyAgICBjcHVfbG9vcF9leGl0KCk7Cit9CiAjZWxzZQogdm9pZCBoZWxwZXJf c3lzY2FsbChpbnQgbmV4dF9laXBfYWRkZW5kKQogewpkaWZmIC0tZ2l0IGEvdGFyZ2V0LWkzODYv dHJhbnNsYXRlLmMgYi90YXJnZXQtaTM4Ni90cmFuc2xhdGUuYwppbmRleCA0NzI2MDA5Li5kNmRh ZWY0IDEwMDY0NAotLS0gYS90YXJnZXQtaTM4Ni90cmFuc2xhdGUuYworKysgYi90YXJnZXQtaTM4 Ni90cmFuc2xhdGUuYwpAQCAtMzMsNiArMzMsMTAgQEAKICNkZWZpbmUgR0VOX0hFTFBFUiAxCiAj aW5jbHVkZSAiaGVscGVyLmgiCiAKKyNpZiBkZWZpbmVkKENPTkZJR19VU0VSX09OTFkpICYmIGRl ZmluZWQoVEFSR0VUX1g4Nl82NCkKKyNpbmNsdWRlICJ2c3lzY2FsbC5oIgorI2VuZGlmCisKICNk ZWZpbmUgUFJFRklYX1JFUFogICAweDAxCiAjZGVmaW5lIFBSRUZJWF9SRVBOWiAgMHgwMgogI2Rl ZmluZSBQUkVGSVhfTE9DSyAgIDB4MDQKQEAgLTc2ODgsNiArNzY5MiwxNSBAQCBzdGF0aWMgaW5s aW5lIHZvaWQgZ2VuX2ludGVybWVkaWF0ZV9jb2RlX2ludGVybmFsKENQVVN0YXRlICplbnYsCiAK ICAgICBnZW5faWNvdW50X3N0YXJ0KCk7CiAgICAgZm9yKDs7KSB7CisjaWYgZGVmaW5lZChDT05G SUdfVVNFUl9PTkxZKSAmJiBkZWZpbmVkKFRBUkdFVF9YODZfNjQpCisgICAgICAgIC8qIERldGVj dCB2c3lzY2FsbCdzICovCisgICAgICAgIGlmICh1bmxpa2VseShwY19wdHIgPj0gVEFSR0VUX1ZT WVNDQUxMX1NUQVJUCisgICAgICAgICAgICAgICAgICAgICAmJiBwY19wdHIgPCBUQVJHRVRfVlNZ U0NBTExfRU5EKSkgeworICAgICAgICAgICAgZ2VuX2hlbHBlcl92c3lzY2FsbCgpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGlmICh1bmxpa2VseSgh VEFJTFFfRU1QVFkoJmVudi0+YnJlYWtwb2ludHMpKSkgewogICAgICAgICAgICAgVEFJTFFfRk9S RUFDSChicCwgJmVudi0+YnJlYWtwb2ludHMsIGVudHJ5KSB7CiAgICAgICAgICAgICAgICAgaWYg KGJwLT5wYyA9PSBwY19wdHIgJiYK --000e0cd24774ac4fbd046e6f8caa Content-Type: text/x-csrc; charset=US-ASCII; name="check-vsyscall.c" Content-Disposition: attachment; filename="check-vsyscall.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fx0h69t51 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2luY2x1ZGUgPHRpbWUuaD4K I2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL3RpbWUuaD4KCnN0YXRpYyB2b2lkIHBy aW50X3RvZChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYsIGNvbnN0IHN0cnVjdCB0aW1lem9uZSAq dHopCnsKICBpZiAodHYpCiAgICBwcmludGYoIiB0dj0lMTBsZC4lMDZsZCB1cyIsCgkgICB0di0+ dHZfc2VjLCB0di0+dHZfdXNlYyk7CiAgZWxzZQogICAgZnB1dHMoIiAodHYgbnVsbCkiLCBzdGRv dXQpOwogIGlmICh0eikKICAgIHByaW50ZigiIHR6PSVkLyVkIiwKCSAgIHR6LT50el9taW51dGVz d2VzdCwgdHotPnR6X2RzdHRpbWUpOwogIGVsc2UKICAgIGZwdXRzKCIgKHR6IG51bGwpIiwgc3Rk b3V0KTsKICBmcHV0YygnXG4nLCBzdGRvdXQpOwp9CgpzdGF0aWMgdGltZV90IHQxLCB0MjsKc3Rh dGljIHN0cnVjdCB0aW1ldmFsIHR2MSwgdHYyOwpzdGF0aWMgc3RydWN0IHRpbWV6b25lIHR6MSwg dHoyOwoKaW50IG1haW4odm9pZCkKewogIGludCByZXQ7CgogIGZwdXRzKCJDaGVja2luZyB2dGlt ZSB3aXRoIE5VTEwgcGFyYW1cbiIsIHN0ZG91dCk7CiAgdDEgPSB0aW1lKE5VTEwpOwogIHByaW50 ZigiICAlbGRcbiIsIHQxKTsKICBzbGVlcCgxKTsKICB0MiA9IHRpbWUoTlVMTCk7CiAgcHJpbnRm KCIgICVsZCAoc2hvdWxkIGJlIHQxICsgMSlcbiIsIHQyKTsKCiAgZnB1dHMoIkNoZWNraW5nIHZ0 aW1lIHdpdGggbm9uIE5VTEwgcGFyYW1cbiIsIHN0ZG91dCk7CiAgdGltZSgmdDEpOwogIHByaW50 ZigiICAlbGRcbiIsIHQxKTsKICBzbGVlcCgxKTsKICB0aW1lKCZ0Mik7CiAgcHJpbnRmKCIgICVs ZCAoc2hvdWxkIGJlIHQxICsgMSlcbiIsIHQyKTsKICBmcHV0YygnXG4nLCBzdGRvdXQpOwoKCiAg ZnB1dHMoIkNoZWNraW5nIGdldHRpbWVvZmRheVxuIiwgc3Rkb3V0KTsKICByZXQgPSBnZXR0aW1l b2ZkYXkoJnR2MSwgJnR6MSk7CiAgcHJpbnRmKCIgIHJldD0lZCIsIHJldCk7CiAgcHJpbnRfdG9k KCZ0djEsICZ0ejEpOwogIHNsZWVwKDEpOwogIHJldCA9IGdldHRpbWVvZmRheSgmdHYyLCAmdHoy KTsKICBwcmludGYoIiAgcmV0PSVkIiwgcmV0KTsKICBwcmludF90b2QoJnR2MiwgJnR6Mik7Cgog IGZwdXRzKCJDaGVja2luZyBnZXR0aW1lb2ZkYXkgKHR2IE5VTEwpXG4iLCBzdGRvdXQpOwogIHJl dCA9IGdldHRpbWVvZmRheShOVUxMLCAmdHoxKTsKICBwcmludGYoIiAgcmV0PSVkIiwgcmV0KTsK ICBwcmludF90b2QoTlVMTCwgJnR6MSk7CiAgc2xlZXAoMSk7CiAgcmV0ID0gZ2V0dGltZW9mZGF5 KE5VTEwsICZ0ejIpOwogIHByaW50ZigiICByZXQ9JWQiLCByZXQpOwogIHByaW50X3RvZChOVUxM LCAmdHoyKTsKCiAgZnB1dHMoIkNoZWNraW5nIGdldHRpbWVvZmRheSAodHogTlVMTClcbiIsIHN0 ZG91dCk7CiAgcmV0ID0gZ2V0dGltZW9mZGF5KCZ0djEsIE5VTEwpOwogIHByaW50ZigiICByZXQ9 JWQiLCByZXQpOwogIHByaW50X3RvZCgmdHYxLCBOVUxMKTsKICBzbGVlcCgxKTsKICByZXQgPSBn ZXR0aW1lb2ZkYXkoJnR2MiwgTlVMTCk7CiAgcHJpbnRmKCIgIHJldD0lZCIsIHJldCk7CiAgcHJp bnRfdG9kKCZ0djIsIE5VTEwpOwoKICBmcHV0cygiQ2hlY2tpbmcgZ2V0dGltZW9mZGF5ICh0diBh bmQgdHogTlVMTClcbiIsIHN0ZG91dCk7CiAgcmV0ID0gZ2V0dGltZW9mZGF5KE5VTEwsIE5VTEwp OwogIHByaW50ZigiICByZXQ9JWQiLCByZXQpOwogIHByaW50X3RvZChOVUxMLCBOVUxMKTsKICBz bGVlcCgxKTsKICByZXQgPSBnZXR0aW1lb2ZkYXkoTlVMTCwgTlVMTCk7CiAgcHJpbnRmKCIgIHJl dD0lZCIsIHJldCk7CiAgcHJpbnRfdG9kKE5VTEwsIE5VTEwpOwoKICByZXR1cm4gMDsKfQo= --000e0cd24774ac4fbd046e6f8caa--