From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21576 invoked by alias); 4 Jul 2010 21:06:08 -0000 Received: (qmail 21568 invoked by uid 22791); 4 Jul 2010 21:06:07 -0000 X-SWARE-Spam-Status: No, hits=-0.3 required=5.0 tests=AWL,BAYES_05,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from mail-bw0-f47.google.com (HELO mail-bw0-f47.google.com) (209.85.214.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 04 Jul 2010 21:06:03 +0000 Received: by bwz10 with SMTP id 10so2279287bwz.20 for ; Sun, 04 Jul 2010 14:06:00 -0700 (PDT) MIME-Version: 1.0 Received: by 10.204.58.195 with SMTP id i3mr1715927bkh.31.1278277560578; Sun, 04 Jul 2010 14:06:00 -0700 (PDT) Received: by 10.204.67.209 with HTTP; Sun, 4 Jul 2010 14:06:00 -0700 (PDT) Date: Sun, 04 Jul 2010 21:06:00 -0000 Message-ID: Subject: [RFA patch i386]: Prepare x64 prologue using positive offsets for frame-pointer From: Kai Tietz To: GCC Patches Cc: Richard Henderson Content-Type: multipart/mixed; boundary=001636c5b20fec3344048a962f9e X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2010-07/txt/msg00335.txt.bz2 --001636c5b20fec3344048a962f9e Content-Type: text/plain; charset=ISO-8859-1 Content-length: 694 Hello, this patch prepares for x64 SEH, that frame-pointer points at end of stack-prologue. This is required for x64, because the SEH unwind information can't express negative offsets for stack. ChangeLog 2010-07-04 Kai Tietz * config/i386/i386.c (ix86_compute_frame_layout): Let frame's hard_frame_pointer_offset point to end of prologue. (ix86_expand_prologue): Handle x64 frame-pointer prologue. (ix86_expand_epilogue): Handle x64 frame-pointer epilogue. Tested for i686-pc-cygwin, x86_64-pc-mingw32. Ok for apply? Regards, Kai -- | (\_/) This is Bunny. Copy and paste | (='.'=) Bunny into your signature to help | (")_(") him gain world domination --001636c5b20fec3344048a962f9e Content-Type: application/octet-stream; name="x64_pro.diff" Content-Disposition: attachment; filename="x64_pro.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gb8dg8xx0 Content-length: 9724 SW5kZXg6IGdjYy9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGdjYy5vcmlnL2djYy9jb25maWcvaTM4Ni9pMzg2 LmMJMjAxMC0wNy0wMyAxMDo1ODo0OC4wMDAwMDAwMDAgKzAyMDAKKysrIGdj Yy9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCTIwMTAtMDctMDQgMjI6NTQ6NTQu NzY1MDY2NDAwICswMjAwCkBAIC04MzQ3LDYgKzgzNDcsMTIgQEAgaXg4Nl9j b21wdXRlX2ZyYW1lX2xheW91dCAoc3RydWN0IGl4ODZfZgogICAvKiBXZSd2 ZSByZWFjaGVkIGVuZCBvZiBzdGFjayBmcmFtZS4gICovCiAgIGZyYW1lLT5z dGFja19wb2ludGVyX29mZnNldCA9IG9mZnNldDsKIAorICAvKiBBZGp1c3Qg aGFyZF9mcmFtZV9wb2ludGVyIGZvciB4NjQgYWJpLCBzbyB0aGF0IGl0IHBv aW50cworICAgICB0byBlbmQgb2YgZnJhbWUuICAqLworICBpZiAoVEFSR0VU XzY0QklUICYmIERFRkFVTFRfQUJJID09IE1TX0FCSSAmJiBmcmFtZV9wb2lu dGVyX25lZWRlZCkKKyAgICAgIGZyYW1lLT5oYXJkX2ZyYW1lX3BvaW50ZXJf b2Zmc2V0ID0gb2Zmc2V0OworCisKICAgLyogU2l6ZSBwcm9sb2d1ZSBuZWVk cyB0byBhbGxvY2F0ZS4gICovCiAgIGZyYW1lLT50b19hbGxvY2F0ZSA9CiAg ICAgKHNpemUgKyBmcmFtZS0+cGFkZGluZzEgKyBmcmFtZS0+cGFkZGluZzIK QEAgLTg3MjAsNiArODcyNiw4IEBAIGl4ODZfZXhwYW5kX3Byb2xvZ3VlICh2 b2lkKQogICBzdHJ1Y3QgaXg4Nl9mcmFtZSBmcmFtZTsKICAgSE9TVF9XSURF X0lOVCBhbGxvY2F0ZTsKICAgaW50IGdlbl9mcmFtZV9wb2ludGVyID0gZnJh bWVfcG9pbnRlcl9uZWVkZWQ7CisgIGludCBiZV94NjRmcmFtZSA9IFRBUkdF VF82NEJJVCAmJiBERUZBVUxUX0FCSSA9PSBNU19BQkkKKyAgCQkgICAgJiYg ZnJhbWVfcG9pbnRlcl9uZWVkZWQ7CiAKICAgaXg4Nl9maW5hbGl6ZV9zdGFj a19yZWFsaWduX2ZsYWdzICgpOwogCkBAIC04ODUxLDExICs4ODU5LDE0IEBA IGl4ODZfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQogICAgICAgaW5zbiA9IGVt aXRfaW5zbiAoZ2VuX3B1c2ggKGhhcmRfZnJhbWVfcG9pbnRlcl9ydHgpKTsK ICAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKIAotICAg ICAgaW5zbiA9IGVtaXRfbW92ZV9pbnNuIChoYXJkX2ZyYW1lX3BvaW50ZXJf cnR4LCBzdGFja19wb2ludGVyX3J0eCk7Ci0gICAgICBSVFhfRlJBTUVfUkVM QVRFRF9QIChpbnNuKSA9IDE7CisgICAgICBpZiAoIWJlX3g2NGZyYW1lKQor CXsKKwkgIGluc24gPSBlbWl0X21vdmVfaW5zbiAoaGFyZF9mcmFtZV9wb2lu dGVyX3J0eCwgc3RhY2tfcG9pbnRlcl9ydHgpOworCSAgUlRYX0ZSQU1FX1JF TEFURURfUCAoaW5zbikgPSAxOwogCi0gICAgICBpZiAoaXg4Nl9jZmFfc3Rh dGUtPnJlZyA9PSBzdGFja19wb2ludGVyX3J0eCkKLSAgICAgICAgaXg4Nl9j ZmFfc3RhdGUtPnJlZyA9IGhhcmRfZnJhbWVfcG9pbnRlcl9ydHg7CisJICBp ZiAoaXg4Nl9jZmFfc3RhdGUtPnJlZyA9PSBzdGFja19wb2ludGVyX3J0eCkK KwkgICAgaXg4Nl9jZmFfc3RhdGUtPnJlZyA9IGhhcmRfZnJhbWVfcG9pbnRl cl9ydHg7CisJfQogICAgIH0KIAogICBpZiAoc3RhY2tfcmVhbGlnbl9mcCkK QEAgLTg4ODQsNyArODg5NSw3IEBAIGl4ODZfZXhwYW5kX3Byb2xvZ3VlICh2 b2lkKQogICAgICBhIHJlZCB6b25lIGxvY2F0aW9uICovCiAgIGlmICghVEFS R0VUXzY0QklUX01TX0FCSSAmJiBUQVJHRVRfUkVEX1pPTkUgJiYgZnJhbWUu c2F2ZV9yZWdzX3VzaW5nX21vdgogICAgICAgJiYgKCEgVEFSR0VUX1NUQUNL X1BST0JFIHx8IGFsbG9jYXRlIDwgQ0hFQ0tfU1RBQ0tfTElNSVQpKQotICAg IGl4ODZfZW1pdF9zYXZlX3JlZ3NfdXNpbmdfbW92ICgoZnJhbWVfcG9pbnRl cl9uZWVkZWQKKyAgICBpeDg2X2VtaXRfc2F2ZV9yZWdzX3VzaW5nX21vdiAo KGZyYW1lX3BvaW50ZXJfbmVlZGVkICYmICFiZV94NjRmcmFtZQogCQkJCSAg ICAgJiYgIWNydGwtPnN0YWNrX3JlYWxpZ25fbmVlZGVkKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhhcmRfZnJhbWVfcG9pbnRl cl9ydHgKIAkJCQkgICA6IHN0YWNrX3BvaW50ZXJfcnR4LApAQCAtODkzMiw3 ICs4OTQzLDcgQEAgaXg4Nl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpCiAKICAg ICAgIGlmIChlYXhfbGl2ZSkKIAl7Ci0JICBpZiAoZnJhbWVfcG9pbnRlcl9u ZWVkZWQpCisJICBpZiAoZnJhbWVfcG9pbnRlcl9uZWVkZWQgJiYgIWJlX3g2 NGZyYW1lKQogCSAgICB0ID0gcGx1c19jb25zdGFudCAoaGFyZF9mcmFtZV9w b2ludGVyX3J0eCwKIAkJCSAgICAgICBhbGxvY2F0ZQogCQkJICAgICAgIC0g ZnJhbWUudG9fYWxsb2NhdGUKQEAgLTg5NDcsNyArODk1OCw3IEBAIGl4ODZf ZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQogICAgICAgJiYgISghVEFSR0VUXzY0 QklUX01TX0FCSSAmJiBUQVJHRVRfUkVEX1pPTkUKICAgICAgICAgICYmICgh IFRBUkdFVF9TVEFDS19QUk9CRSB8fCBhbGxvY2F0ZSA8IENIRUNLX1NUQUNL X0xJTUlUKSkpCiAgICAgewotICAgICAgaWYgKCFmcmFtZV9wb2ludGVyX25l ZWRlZAorICAgICAgaWYgKCFmcmFtZV9wb2ludGVyX25lZWRlZCB8fCBiZV94 NjRmcmFtZQogCSAgfHwgIShmcmFtZS50b19hbGxvY2F0ZSArIGZyYW1lLnBh ZGRpbmcwKQogCSAgfHwgY3J0bC0+c3RhY2tfcmVhbGlnbl9uZWVkZWQpCiAg ICAgICAgIGl4ODZfZW1pdF9zYXZlX3JlZ3NfdXNpbmdfbW92IChzdGFja19w b2ludGVyX3J0eCwKQEAgLTg5NTcsNyArODk2OCw3IEBAIGl4ODZfZXhwYW5k X3Byb2xvZ3VlICh2b2lkKQogICAgICAgICBpeDg2X2VtaXRfc2F2ZV9yZWdz X3VzaW5nX21vdiAoaGFyZF9mcmFtZV9wb2ludGVyX3J0eCwKIAkJCQkgICAg ICAgLWZyYW1lLm5yZWdzICogVU5JVFNfUEVSX1dPUkQpOwogICAgIH0KLSAg aWYgKCFmcmFtZV9wb2ludGVyX25lZWRlZAorICBpZiAoIWZyYW1lX3BvaW50 ZXJfbmVlZGVkIHx8IGJlX3g2NGZyYW1lCiAgICAgICB8fCAhKGZyYW1lLnRv X2FsbG9jYXRlICsgZnJhbWUucGFkZGluZzApCiAgICAgICB8fCBjcnRsLT5z dGFja19yZWFsaWduX25lZWRlZCkKICAgICBpeDg2X2VtaXRfc2F2ZV9zc2Vf cmVnc191c2luZ19tb3YgKHN0YWNrX3BvaW50ZXJfcnR4LApAQCAtOTAxMSw2 ICs5MDIyLDE3IEBAIGl4ODZfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQogICBp ZiAoY3J0bC0+cHJvZmlsZSAmJiBwaWNfcmVnX3VzZWQpCiAgICAgZW1pdF9p bnNuIChnZW5fcHJvbG9ndWVfdXNlIChwaWNfb2Zmc2V0X3RhYmxlX3J0eCkp OwogCisgIGlmIChiZV94NjRmcmFtZSkKKyAgICB7CisgICAgICBydHggdDsK KworICAgICAgaW5zbiA9IGVtaXRfbW92ZV9pbnNuIChoYXJkX2ZyYW1lX3Bv aW50ZXJfcnR4LCBzdGFja19wb2ludGVyX3J0eCk7CisgICAgICBSVFhfRlJB TUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7CisKKyAgICAgIGlmIChpeDg2X2Nm YV9zdGF0ZS0+cmVnID09IHN0YWNrX3BvaW50ZXJfcnR4KQorCWl4ODZfY2Zh X3N0YXRlLT5yZWcgPSBoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4OworICAgIH0K KwogICBpZiAoY3J0bC0+ZHJhcF9yZWcgJiYgIWNydGwtPnN0YWNrX3JlYWxp Z25fbmVlZGVkKQogICAgIHsKICAgICAgIC8qIHZEUkFQIGlzIHNldHVwIGJ1 dCBhZnRlciByZWxvYWQgaXQgdHVybnMgb3V0IHN0YWNrIHJlYWxpZ24KQEAg LTkyMjMsMTkgKzkyNDUsMjkgQEAgaXg4Nl9leHBhbmRfZXBpbG9ndWUgKGlu dCBzdHlsZSkKICAgSE9TVF9XSURFX0lOVCBvZmZzZXQsIHJlZF9vZmZzZXQ7 CiAgIHN0cnVjdCBtYWNoaW5lX2NmYV9zdGF0ZSBjZmFfc3RhdGVfc2F2ZSA9 ICppeDg2X2NmYV9zdGF0ZTsKICAgYm9vbCB1c2luZ19kcmFwOworICBpbnQg YmVfeDY0ZnJhbWUgPSBUQVJHRVRfNjRCSVQgJiYgREVGQVVMVF9BQkkgPT0g TVNfQUJJCisgIAkJICAgICYmIGZyYW1lX3BvaW50ZXJfbmVlZGVkOworCiAK ICAgaXg4Nl9maW5hbGl6ZV9zdGFja19yZWFsaWduX2ZsYWdzICgpOwogCiAg LyogV2hlbiBzdGFjayBpcyByZWFsaWduZWQsIFNQIG11c3QgYmUgdmFsaWQu ICAqLwotICBzcF92YWxpZCA9ICghZnJhbWVfcG9pbnRlcl9uZWVkZWQKKyAg c3BfdmFsaWQgPSAoIWZyYW1lX3BvaW50ZXJfbmVlZGVkIHx8IGJlX3g2NGZy YW1lCiAJICAgICAgfHwgY3VycmVudF9mdW5jdGlvbl9zcF9pc191bmNoYW5n aW5nCiAJICAgICAgfHwgc3RhY2tfcmVhbGlnbl9mcCk7CiAKICAgaXg4Nl9j b21wdXRlX2ZyYW1lX2xheW91dCAoJmZyYW1lKTsKIAorIGlmIChiZV94NjRm cmFtZSkKKyAgIHsKKyAgICAgcHJvX2VwaWxvZ3VlX2FkanVzdF9zdGFjayAo c3RhY2tfcG9pbnRlcl9ydHgsCisgICAgIAkJCQloYXJkX2ZyYW1lX3BvaW50 ZXJfcnR4LAorICAgICAJCQkJY29uc3QwX3J0eCwgc3R5bGUsIDApOworICAg fQorCiAgIC8qIFNlZSB0aGUgY29tbWVudCBhYm91dCByZWQgem9uZSBhbmQg ZnJhbWUKICAgICAgcG9pbnRlciB1c2FnZSBpbiBpeDg2X2V4cGFuZF9wcm9s b2d1ZS4gICovCi0gIGlmIChmcmFtZV9wb2ludGVyX25lZWRlZCAmJiBmcmFt ZS5yZWRfem9uZV9zaXplKQorICBpZiAoZnJhbWVfcG9pbnRlcl9uZWVkZWQg JiYgKGZyYW1lLnJlZF96b25lX3NpemUgfHwgYmVfeDY0ZnJhbWUpKQogICAg IGVtaXRfaW5zbiAoZ2VuX21lbW9yeV9ibG9ja2FnZSAoKSk7CiAKICAgdXNp bmdfZHJhcCA9IGNydGwtPmRyYXBfcmVnICYmIGNydGwtPnN0YWNrX3JlYWxp Z25fbmVlZGVkOwpAQCAtOTI4Niw3ICs5MzE4LDggQEAgaXg4Nl9leHBhbmRf ZXBpbG9ndWUgKGludCBzdHlsZSkKICAgICAgIHx8IChmcmFtZV9wb2ludGVy X25lZWRlZCAmJiBUQVJHRVRfVVNFX0xFQVZFCiAJICAmJiBjZnVuLT5tYWNo aW5lLT51c2VfZmFzdF9wcm9sb2d1ZV9lcGlsb2d1ZQogCSAgJiYgKGZyYW1l Lm5yZWdzICsgZnJhbWUubnNzZXJlZ3MpID09IDEpCi0gICAgICB8fCBjcnRs LT5jYWxsc19laF9yZXR1cm4pCisgICAgICB8fCBjcnRsLT5jYWxsc19laF9y ZXR1cm4KKyAgICAgIHx8IGJlX3g2NGZyYW1lKQogICAgIHsKICAgICAgIC8q IFJlc3RvcmUgcmVnaXN0ZXJzLiAgV2UgY2FuIHVzZSBlYnAgb3IgZXNwIHRv IGFkZHJlc3MgdGhlIG1lbW9yeQogCSBsb2NhdGlvbnMuICBJZiBib3RoIGFy ZSBhdmFpbGFibGUsIGRlZmF1bHQgdG8gZWJwLCBzaW5jZSBvZmZzZXRzCkBA IC05Mjk3LDcgKzkzMzAsNyBAQCBpeDg2X2V4cGFuZF9lcGlsb2d1ZSAoaW50 IHN0eWxlKQogCSBJZiB3ZSBhcmUgcmVhbGlnbmluZyBzdGFjayB3aXRoIGJw IGFuZCBzcCwgcmVncyByZXN0b3JlIGNhbid0CiAJIGJlIGFkZHJlc3NlZCBi eSBicC4gc3AgbXVzdCBiZSB1c2VkIGluc3RlYWQuICAqLwogCi0gICAgICBp ZiAoIWZyYW1lX3BvaW50ZXJfbmVlZGVkCisgICAgICBpZiAoIWZyYW1lX3Bv aW50ZXJfbmVlZGVkIHx8IGJlX3g2NGZyYW1lCiAJICB8fCAoc3BfdmFsaWQg JiYgIShmcmFtZS50b19hbGxvY2F0ZSArIGZyYW1lLnBhZGRpbmcwKSkKIAkg IHx8IHN0YWNrX3JlYWxpZ25fZnApCiAJewpAQCAtOTMzOCw3ICs5MzcxLDcg QEAgaXg4Nl9leHBhbmRfZXBpbG9ndWUgKGludCBzdHlsZSkKIAkgIC8qIE5l aXRoZXIgZG9lcyByZWdwYXJtIG5lc3RlZCBmdW5jdGlvbnMuICAqLwogCSAg Z2NjX2Fzc2VydCAoIWl4ODZfc3RhdGljX2NoYWluX29uX3N0YWNrKTsKIAot CSAgaWYgKGZyYW1lX3BvaW50ZXJfbmVlZGVkKQorCSAgaWYgKGZyYW1lX3Bv aW50ZXJfbmVlZGVkICYmICFiZV94NjRmcmFtZSkKIAkgICAgewogCSAgICAg IHRtcCA9IGdlbl9ydHhfUExVUyAoUG1vZGUsIGhhcmRfZnJhbWVfcG9pbnRl cl9ydHgsIHNhKTsKIAkgICAgICB0bXAgPSBwbHVzX2NvbnN0YW50ICh0bXAs IFVOSVRTX1BFUl9XT1JEKTsKQEAgLTkzODcsNiArOTQyMCwxNiBAQCBpeDg2 X2V4cGFuZF9lcGlsb2d1ZSAoaW50IHN0eWxlKQogCQl9CiAJICAgIH0KIAl9 CisgICAgICBlbHNlIGlmIChiZV94NjRmcmFtZSkKKyAgICAgICAgeworCSAg cHJvX2VwaWxvZ3VlX2FkanVzdF9zdGFjayAoc3RhY2tfcG9pbnRlcl9ydHgs IHN0YWNrX3BvaW50ZXJfcnR4LAorCQkJCSAgICAgR0VOX0lOVCAoZnJhbWUu dG9fYWxsb2NhdGUKKwkJCQkJICAgICAgKyBmcmFtZS5ucmVncyAqIFVOSVRT X1BFUl9XT1JECisJCQkJCSAgICAgICsgZnJhbWUubnNzZXJlZ3MgKiAxNgor CQkJCQkgICAgICArIGZyYW1lLnBhZGRpbmcwKSwKKwkJCQkgICAgIHN0eWxl LCAwKTsKKwkgIGl4ODZfZW1pdF9yZXN0b3JlX3JlZ191c2luZ19wb3AgKGhh cmRfZnJhbWVfcG9pbnRlcl9ydHgsIHJlZF9vZmZzZXQpOworCX0KICAgICAg IGVsc2UgaWYgKCFmcmFtZV9wb2ludGVyX25lZWRlZCkKIAlwcm9fZXBpbG9n dWVfYWRqdXN0X3N0YWNrIChzdGFja19wb2ludGVyX3J0eCwgc3RhY2tfcG9p bnRlcl9ydHgsCiAJCQkJICAgR0VOX0lOVCAoZnJhbWUudG9fYWxsb2NhdGUK QEAgLTk0MTYsNyArOTQ1OSw3IEBAIGl4ODZfZXhwYW5kX2VwaWxvZ3VlIChp bnQgc3R5bGUpCiAgICAgICAgICB3b24ndCBiZSBhYmxlIHRvIHJlY292ZXIg dmlhIGxlYSAkb2Zmc2V0KCVicCksICVzcCwgYmVjYXVzZQogICAgICAgICAg dGhlcmUgaXMgYSBwYWRkaW5nIGFyZWEgYmV0d2VlbiBicCBhbmQgc3AgZm9y IHJlYWxpZ24uCiAgICAgICAgICAiYWRkICR0b19hbGxvY2F0ZSwgJXNwIiBt dXN0IGJlIHVzZWQgaW5zdGVhZC4gICovCi0gICAgICBpZiAoIXNwX3ZhbGlk KQorICAgICAgaWYgKCFzcF92YWxpZCAmJiAhYmVfeDY0ZnJhbWUpCiAJewog CSAgZ2NjX2Fzc2VydCAoZnJhbWVfcG9pbnRlcl9uZWVkZWQpOwogICAgICAg ICAgIGdjY19hc3NlcnQgKCFzdGFja19yZWFsaWduX2ZwKTsKQEAgLTk0NDcs NyArOTQ5MCw3IEBAIGl4ODZfZXhwYW5kX2VwaWxvZ3VlIChpbnQgc3R5bGUp CiAJCQkJCSsgZnJhbWUucGFkZGluZzApOwogICAgICAgcmVkX29mZnNldCAt PSBvZmZzZXQ7CiAKLSAgICAgIGlmIChmcmFtZV9wb2ludGVyX25lZWRlZCkK KyAgICAgIGlmIChmcmFtZV9wb2ludGVyX25lZWRlZCAmJiAhYmVfeDY0ZnJh bWUpCiAJewogCSAgLyogTGVhdmUgcmVzdWx0cyBpbiBzaG9ydGVyIGRlcGVu ZGVuY3kgY2hhaW5zIG9uIENQVXMgdGhhdCBhcmUKIAkgICAgIGFibGUgdG8g Z3JvayBpdCBmYXN0LiAgKi8K --001636c5b20fec3344048a962f9e--