>Category: other >Synopsis: [3.2/3.3/3.4 regression] alias problem during loop pass on m68k >Confidential: no >Severity: serious >Priority: medium >Class: wrong-code >Submitter-Id: net >Originator: [EMAIL PROTECTED] >Release: 3.2/3.3/3.4 >Environment: linux-m68k >Description: The message repeated here was originall sent to: http://gcc.gnu.org/ml/gcc/2003-03/msg00574.html
Hi, I'm currently trying to debug a problem, which causes a few problems for Debian/m68k. The problem is present at least since 3.2 and also in latest tree, but it seems not to be in 3.0. I've put a test case at http://www.xs4all.nl/~zippel/sha.i, it's a precompiled example from coreutils. Here is the important part: void sha_process_block (const void *buffer, size_t len, struct sha_ctx *ctx) { const md5_uint32 *words = buffer; size_t nwords = len / sizeof (md5_uint32); const md5_uint32 *endp = words + nwords; md5_uint32 x[16]; [..] while (words < endp) { md5_uint32 tm; int t; for (t = 0; t < 16; t++) { x[t] = (*words); words++; } First it looks at the small loop and replaces x[t] with a pointer: -(insn 86 84 87 (set (mem/s:SI (plus:SI (plus:SI (mult:SI (reg/v:SI 47) - (const_int 4 [0x4])) - (reg/f:SI 14 %a6)) - (const_int -64 [0xffffffc0])) [5 x S4 A16]) - (mem:SI (reg/v/f:SI 32) [5 S4 A16])) 29 {*m68k.md:976} (nil) +(insn 86 84 2470 (set (mem/s:SI (reg/f:SI 1137) [5 x S4 A16]) + (mem:SI (reg/v/f:SI 32) [5 S4 A16])) -1 (nil) + (nil)) + +(insn 2470 86 87 (set (reg/f:SI 1137) + (plus:SI (reg/f:SI 1137) + (const_int 4 [0x4]))) -1 (nil) (nil)) The problem is now when it looks at the large loop, the x array is only read after this and the optimizer thinks now it can move the array out of the loop. AFAICS it goes wrong in loop.c:load_mems(), it does an alias analysis with the already modified instructions, but then it uses loop_info->store_mems to test for dependency tests, but this list still contains the old reference. At this point I really could need some help, how this should be fixed correctly. Any ideas? >How-To-Repeat: >Fix: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="sha.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sha.i" dHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBtZDVfdWlu dDMyOwpzdHJ1Y3Qgc2hhX2N0eAp7CiAgbWQ1X3VpbnQzMiBBOwogIG1kNV91aW50MzIgQjsKICBt ZDVfdWludDMyIEM7CiAgbWQ1X3VpbnQzMiBEOwogIG1kNV91aW50MzIgRTsKCiAgbWQ1X3VpbnQz MiB0b3RhbFsyXTsKICBtZDVfdWludDMyIGJ1ZmxlbjsKICBjaGFyIGJ1ZmZlclsxMjhdOwp9OwoK dm9pZApzaGFfcHJvY2Vzc19ibG9jayAoY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLCBz dHJ1Y3Qgc2hhX2N0eCAqY3R4KQp7CiAgY29uc3QgbWQ1X3VpbnQzMiAqd29yZHMgPSBidWZmZXI7 CiAgc2l6ZV90IG53b3JkcyA9IGxlbiAvIHNpemVvZiAobWQ1X3VpbnQzMik7CiAgY29uc3QgbWQ1 X3VpbnQzMiAqZW5kcCA9IHdvcmRzICsgbndvcmRzOwogIG1kNV91aW50MzIgeFsxNl07CiAgbWQ1 X3VpbnQzMiBhID0gY3R4LT5BOwogIG1kNV91aW50MzIgYiA9IGN0eC0+QjsKICBtZDVfdWludDMy IGMgPSBjdHgtPkM7CiAgbWQ1X3VpbnQzMiBkID0gY3R4LT5EOwogIG1kNV91aW50MzIgZSA9IGN0 eC0+RTsKCgoKCiAgY3R4LT50b3RhbFswXSArPSBsZW47CiAgaWYgKGN0eC0+dG90YWxbMF0gPCBs ZW4pCiAgICArK2N0eC0+dG90YWxbMV07CiAgd2hpbGUgKHdvcmRzIDwgZW5kcCkKICAgIHsKICAg ICAgbWQ1X3VpbnQzMiB0bTsKICAgICAgaW50IHQ7CgogICAgICBmb3IgKHQgPSAwOyB0IDwgMTY7 IHQrKykKICAgICAgICB7CiAgICAgICAgICB4W3RdID0gKCp3b3Jkcyk7CiAgICAgICAgICB3b3Jk cysrOwogICAgICAgIH0KCiAgICAgIGRvIHsgZSArPSAoICgoYSkgPDwgKDUpKSB8ICgoYSkgPj4g KDMyLSg1KSkpICkgKyAoIGQgXiAoIGIgJiAoIGMgXiBkICkgKSApICsgMHg1YTgyNzk5OUwgKyB4 WyAwXTsgYiA9ICggKChiKSA8PCAoMzApKSB8ICgoYikgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxl KDApOwogICAgICBkbyB7IGQgKz0gKCAoKGUpIDw8ICg1KSkgfCAoKGUpID4+ICgzMi0oNSkpKSAp ICsgKCBjIF4gKCBhICYgKCBiIF4gYyApICkgKSArIDB4NWE4Mjc5OTlMICsgeFsgMV07IGEgPSAo ICgoYSkgPDwgKDMwKSkgfCAoKGEpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAg ZG8geyBjICs9ICggKChkKSA8PCAoNSkpIHwgKChkKSA+PiAoMzItKDUpKSkgKSArICggYiBeICgg ZSAmICggYSBeIGIgKSApICkgKyAweDVhODI3OTk5TCArIHhbIDJdOyBlID0gKCAoKGUpIDw8ICgz MCkpIHwgKChlKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgYiArPSAo ICgoYykgPDwgKDUpKSB8ICgoYykgPj4gKDMyLSg1KSkpICkgKyAoIGEgXiAoIGQgJiAoIGUgXiBh ICkgKSApICsgMHg1YTgyNzk5OUwgKyB4WyAzXTsgZCA9ICggKChkKSA8PCAoMzApKSB8ICgoZCkg Pj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGEgKz0gKCAoKGIpIDw8ICg1 KSkgfCAoKGIpID4+ICgzMi0oNSkpKSApICsgKCBlIF4gKCBjICYgKCBkIF4gZSApICkgKSArIDB4 NWE4Mjc5OTlMICsgeFsgNF07IGMgPSAoICgoYykgPDwgKDMwKSkgfCAoKGMpID4+ICgzMi0oMzAp KSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBlICs9ICggKChhKSA8PCAoNSkpIHwgKChhKSA+ PiAoMzItKDUpKSkgKSArICggZCBeICggYiAmICggYyBeIGQgKSApICkgKyAweDVhODI3OTk5TCAr IHhbIDVdOyBiID0gKCAoKGIpIDw8ICgzMCkpIHwgKChiKSA+PiAoMzItKDMwKSkpICk7IH0gd2hp bGUoMCk7CiAgICAgIGRvIHsgZCArPSAoICgoZSkgPDwgKDUpKSB8ICgoZSkgPj4gKDMyLSg1KSkp ICkgKyAoIGMgXiAoIGEgJiAoIGIgXiBjICkgKSApICsgMHg1YTgyNzk5OUwgKyB4WyA2XTsgYSA9 ICggKChhKSA8PCAoMzApKSB8ICgoYSkgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAg ICBkbyB7IGMgKz0gKCAoKGQpIDw8ICg1KSkgfCAoKGQpID4+ICgzMi0oNSkpKSApICsgKCBiIF4g KCBlICYgKCBhIF4gYiApICkgKSArIDB4NWE4Mjc5OTlMICsgeFsgN107IGUgPSAoICgoZSkgPDwg KDMwKSkgfCAoKGUpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBiICs9 ICggKChjKSA8PCAoNSkpIHwgKChjKSA+PiAoMzItKDUpKSkgKSArICggYSBeICggZCAmICggZSBe IGEgKSApICkgKyAweDVhODI3OTk5TCArIHhbIDhdOyBkID0gKCAoKGQpIDw8ICgzMCkpIHwgKChk KSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgYSArPSAoICgoYikgPDwg KDUpKSB8ICgoYikgPj4gKDMyLSg1KSkpICkgKyAoIGUgXiAoIGMgJiAoIGQgXiBlICkgKSApICsg MHg1YTgyNzk5OUwgKyB4WyA5XTsgYyA9ICggKChjKSA8PCAoMzApKSB8ICgoYykgPj4gKDMyLSgz MCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGUgKz0gKCAoKGEpIDw8ICg1KSkgfCAoKGEp ID4+ICgzMi0oNSkpKSApICsgKCBkIF4gKCBiICYgKCBjIF4gZCApICkgKSArIDB4NWE4Mjc5OTlM ICsgeFsxMF07IGIgPSAoICgoYikgPDwgKDMwKSkgfCAoKGIpID4+ICgzMi0oMzApKSkgKTsgfSB3 aGlsZSgwKTsKICAgICAgZG8geyBkICs9ICggKChlKSA8PCAoNSkpIHwgKChlKSA+PiAoMzItKDUp KSkgKSArICggYyBeICggYSAmICggYiBeIGMgKSApICkgKyAweDVhODI3OTk5TCArIHhbMTFdOyBh ID0gKCAoKGEpIDw8ICgzMCkpIHwgKChhKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAg ICAgIGRvIHsgYyArPSAoICgoZCkgPDwgKDUpKSB8ICgoZCkgPj4gKDMyLSg1KSkpICkgKyAoIGIg XiAoIGUgJiAoIGEgXiBiICkgKSApICsgMHg1YTgyNzk5OUwgKyB4WzEyXTsgZSA9ICggKChlKSA8 PCAoMzApKSB8ICgoZSkgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGIg Kz0gKCAoKGMpIDw8ICg1KSkgfCAoKGMpID4+ICgzMi0oNSkpKSApICsgKCBhIF4gKCBkICYgKCBl IF4gYSApICkgKSArIDB4NWE4Mjc5OTlMICsgeFsxM107IGQgPSAoICgoZCkgPDwgKDMwKSkgfCAo KGQpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBhICs9ICggKChiKSA8 PCAoNSkpIHwgKChiKSA+PiAoMzItKDUpKSkgKSArICggZSBeICggYyAmICggZCBeIGUgKSApICkg KyAweDVhODI3OTk5TCArIHhbMTRdOyBjID0gKCAoKGMpIDw8ICgzMCkpIHwgKChjKSA+PiAoMzIt KDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgZSArPSAoICgoYSkgPDwgKDUpKSB8ICgo YSkgPj4gKDMyLSg1KSkpICkgKyAoIGQgXiAoIGIgJiAoIGMgXiBkICkgKSApICsgMHg1YTgyNzk5 OUwgKyB4WzE1XTsgYiA9ICggKChiKSA8PCAoMzApKSB8ICgoYikgPj4gKDMyLSgzMCkpKSApOyB9 IHdoaWxlKDApOwogICAgICBkbyB7IGQgKz0gKCAoKGUpIDw8ICg1KSkgfCAoKGUpID4+ICgzMi0o NSkpKSApICsgKCBjIF4gKCBhICYgKCBiIF4gYyApICkgKSArIDB4NWE4Mjc5OTlMICsgKCB0bSA9 IHhbMTYmMHgwZl0gXiB4WygxNiAtMTQpJjB4MGZdIF4geFsoMTYgLTgpJjB4MGZdIF4geFsoMTYg LTMpJjB4MGZdICwgKHhbMTYmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzIt KDEpKSkgKSkgKTsgYSA9ICggKChhKSA8PCAoMzApKSB8ICgoYSkgPj4gKDMyLSgzMCkpKSApOyB9 IHdoaWxlKDApOwogICAgICBkbyB7IGMgKz0gKCAoKGQpIDw8ICg1KSkgfCAoKGQpID4+ICgzMi0o NSkpKSApICsgKCBiIF4gKCBlICYgKCBhIF4gYiApICkgKSArIDB4NWE4Mjc5OTlMICsgKCB0bSA9 IHhbMTcmMHgwZl0gXiB4WygxNyAtMTQpJjB4MGZdIF4geFsoMTcgLTgpJjB4MGZdIF4geFsoMTcg LTMpJjB4MGZdICwgKHhbMTcmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzIt KDEpKSkgKSkgKTsgZSA9ICggKChlKSA8PCAoMzApKSB8ICgoZSkgPj4gKDMyLSgzMCkpKSApOyB9 IHdoaWxlKDApOwogICAgICBkbyB7IGIgKz0gKCAoKGMpIDw8ICg1KSkgfCAoKGMpID4+ICgzMi0o NSkpKSApICsgKCBhIF4gKCBkICYgKCBlIF4gYSApICkgKSArIDB4NWE4Mjc5OTlMICsgKCB0bSA9 IHhbMTgmMHgwZl0gXiB4WygxOCAtMTQpJjB4MGZdIF4geFsoMTggLTgpJjB4MGZdIF4geFsoMTgg LTMpJjB4MGZdICwgKHhbMTgmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzIt KDEpKSkgKSkgKTsgZCA9ICggKChkKSA8PCAoMzApKSB8ICgoZCkgPj4gKDMyLSgzMCkpKSApOyB9 IHdoaWxlKDApOwogICAgICBkbyB7IGEgKz0gKCAoKGIpIDw8ICg1KSkgfCAoKGIpID4+ICgzMi0o NSkpKSApICsgKCBlIF4gKCBjICYgKCBkIF4gZSApICkgKSArIDB4NWE4Mjc5OTlMICsgKCB0bSA9 IHhbMTkmMHgwZl0gXiB4WygxOSAtMTQpJjB4MGZdIF4geFsoMTkgLTgpJjB4MGZdIF4geFsoMTkg LTMpJjB4MGZdICwgKHhbMTkmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzIt KDEpKSkgKSkgKTsgYyA9ICggKChjKSA8PCAoMzApKSB8ICgoYykgPj4gKDMyLSgzMCkpKSApOyB9 IHdoaWxlKDApOwogICAgICBkbyB7IGUgKz0gKCAoKGEpIDw8ICg1KSkgfCAoKGEpID4+ICgzMi0o NSkpKSApICsgKGIgXiBjIF4gZCkgKyAweDZlZDllYmExTCArICggdG0gPSB4WzIwJjB4MGZdIF4g eFsoMjAgLTE0KSYweDBmXSBeIHhbKDIwIC04KSYweDBmXSBeIHhbKDIwIC0zKSYweDBmXSAsICh4 WzIwJjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGIg PSAoICgoYikgPDwgKDMwKSkgfCAoKGIpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAg ICAgZG8geyBkICs9ICggKChlKSA8PCAoNSkpIHwgKChlKSA+PiAoMzItKDUpKSkgKSArIChhIF4g YiBeIGMpICsgMHg2ZWQ5ZWJhMUwgKyAoIHRtID0geFsyMSYweDBmXSBeIHhbKDIxIC0xNCkmMHgw Zl0gXiB4WygyMSAtOCkmMHgwZl0gXiB4WygyMSAtMykmMHgwZl0gLCAoeFsyMSYweDBmXSA9ICgg KCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBhID0gKCAoKGEpIDw8ICgz MCkpIHwgKChhKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgYyArPSAo ICgoZCkgPDwgKDUpKSB8ICgoZCkgPj4gKDMyLSg1KSkpICkgKyAoZSBeIGEgXiBiKSArIDB4NmVk OWViYTFMICsgKCB0bSA9IHhbMjImMHgwZl0gXiB4WygyMiAtMTQpJjB4MGZdIF4geFsoMjIgLTgp JjB4MGZdIF4geFsoMjIgLTMpJjB4MGZdICwgKHhbMjImMHgwZl0gPSAoICgodG0pIDw8ICgxKSkg fCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgZSA9ICggKChlKSA8PCAoMzApKSB8ICgoZSkgPj4g KDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGIgKz0gKCAoKGMpIDw8ICg1KSkg fCAoKGMpID4+ICgzMi0oNSkpKSApICsgKGQgXiBlIF4gYSkgKyAweDZlZDllYmExTCArICggdG0g PSB4WzIzJjB4MGZdIF4geFsoMjMgLTE0KSYweDBmXSBeIHhbKDIzIC04KSYweDBmXSBeIHhbKDIz IC0zKSYweDBmXSAsICh4WzIzJjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMy LSgxKSkpICkpICk7IGQgPSAoICgoZCkgPDwgKDMwKSkgfCAoKGQpID4+ICgzMi0oMzApKSkgKTsg fSB3aGlsZSgwKTsKICAgICAgZG8geyBhICs9ICggKChiKSA8PCAoNSkpIHwgKChiKSA+PiAoMzIt KDUpKSkgKSArIChjIF4gZCBeIGUpICsgMHg2ZWQ5ZWJhMUwgKyAoIHRtID0geFsyNCYweDBmXSBe IHhbKDI0IC0xNCkmMHgwZl0gXiB4WygyNCAtOCkmMHgwZl0gXiB4WygyNCAtMykmMHgwZl0gLCAo eFsyNCYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBj ID0gKCAoKGMpIDw8ICgzMCkpIHwgKChjKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAg ICAgIGRvIHsgZSArPSAoICgoYSkgPDwgKDUpKSB8ICgoYSkgPj4gKDMyLSg1KSkpICkgKyAoYiBe IGMgXiBkKSArIDB4NmVkOWViYTFMICsgKCB0bSA9IHhbMjUmMHgwZl0gXiB4WygyNSAtMTQpJjB4 MGZdIF4geFsoMjUgLTgpJjB4MGZdIF4geFsoMjUgLTMpJjB4MGZdICwgKHhbMjUmMHgwZl0gPSAo ICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgYiA9ICggKChiKSA8PCAo MzApKSB8ICgoYikgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGQgKz0g KCAoKGUpIDw8ICg1KSkgfCAoKGUpID4+ICgzMi0oNSkpKSApICsgKGEgXiBiIF4gYykgKyAweDZl ZDllYmExTCArICggdG0gPSB4WzI2JjB4MGZdIF4geFsoMjYgLTE0KSYweDBmXSBeIHhbKDI2IC04 KSYweDBmXSBeIHhbKDI2IC0zKSYweDBmXSAsICh4WzI2JjB4MGZdID0gKCAoKHRtKSA8PCAoMSkp IHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGEgPSAoICgoYSkgPDwgKDMwKSkgfCAoKGEpID4+ ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBjICs9ICggKChkKSA8PCAoNSkp IHwgKChkKSA+PiAoMzItKDUpKSkgKSArIChlIF4gYSBeIGIpICsgMHg2ZWQ5ZWJhMUwgKyAoIHRt ID0geFsyNyYweDBmXSBeIHhbKDI3IC0xNCkmMHgwZl0gXiB4WygyNyAtOCkmMHgwZl0gXiB4Wygy NyAtMykmMHgwZl0gLCAoeFsyNyYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgz Mi0oMSkpKSApKSApOyBlID0gKCAoKGUpIDw8ICgzMCkpIHwgKChlKSA+PiAoMzItKDMwKSkpICk7 IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgYiArPSAoICgoYykgPDwgKDUpKSB8ICgoYykgPj4gKDMy LSg1KSkpICkgKyAoZCBeIGUgXiBhKSArIDB4NmVkOWViYTFMICsgKCB0bSA9IHhbMjgmMHgwZl0g XiB4WygyOCAtMTQpJjB4MGZdIF4geFsoMjggLTgpJjB4MGZdIF4geFsoMjggLTMpJjB4MGZdICwg KHhbMjgmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsg ZCA9ICggKChkKSA8PCAoMzApKSB8ICgoZCkgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwog ICAgICBkbyB7IGEgKz0gKCAoKGIpIDw8ICg1KSkgfCAoKGIpID4+ICgzMi0oNSkpKSApICsgKGMg XiBkIF4gZSkgKyAweDZlZDllYmExTCArICggdG0gPSB4WzI5JjB4MGZdIF4geFsoMjkgLTE0KSYw eDBmXSBeIHhbKDI5IC04KSYweDBmXSBeIHhbKDI5IC0zKSYweDBmXSAsICh4WzI5JjB4MGZdID0g KCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGMgPSAoICgoYykgPDwg KDMwKSkgfCAoKGMpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBlICs9 ICggKChhKSA8PCAoNSkpIHwgKChhKSA+PiAoMzItKDUpKSkgKSArIChiIF4gYyBeIGQpICsgMHg2 ZWQ5ZWJhMUwgKyAoIHRtID0geFszMCYweDBmXSBeIHhbKDMwIC0xNCkmMHgwZl0gXiB4WygzMCAt OCkmMHgwZl0gXiB4WygzMCAtMykmMHgwZl0gLCAoeFszMCYweDBmXSA9ICggKCh0bSkgPDwgKDEp KSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBiID0gKCAoKGIpIDw8ICgzMCkpIHwgKChiKSA+ PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgZCArPSAoICgoZSkgPDwgKDUp KSB8ICgoZSkgPj4gKDMyLSg1KSkpICkgKyAoYSBeIGIgXiBjKSArIDB4NmVkOWViYTFMICsgKCB0 bSA9IHhbMzEmMHgwZl0gXiB4WygzMSAtMTQpJjB4MGZdIF4geFsoMzEgLTgpJjB4MGZdIF4geFso MzEgLTMpJjB4MGZdICwgKHhbMzEmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAo MzItKDEpKSkgKSkgKTsgYSA9ICggKChhKSA8PCAoMzApKSB8ICgoYSkgPj4gKDMyLSgzMCkpKSAp OyB9IHdoaWxlKDApOwogICAgICBkbyB7IGMgKz0gKCAoKGQpIDw8ICg1KSkgfCAoKGQpID4+ICgz Mi0oNSkpKSApICsgKGUgXiBhIF4gYikgKyAweDZlZDllYmExTCArICggdG0gPSB4WzMyJjB4MGZd IF4geFsoMzIgLTE0KSYweDBmXSBeIHhbKDMyIC04KSYweDBmXSBeIHhbKDMyIC0zKSYweDBmXSAs ICh4WzMyJjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7 IGUgPSAoICgoZSkgPDwgKDMwKSkgfCAoKGUpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsK ICAgICAgZG8geyBiICs9ICggKChjKSA8PCAoNSkpIHwgKChjKSA+PiAoMzItKDUpKSkgKSArIChk IF4gZSBeIGEpICsgMHg2ZWQ5ZWJhMUwgKyAoIHRtID0geFszMyYweDBmXSBeIHhbKDMzIC0xNCkm MHgwZl0gXiB4WygzMyAtOCkmMHgwZl0gXiB4WygzMyAtMykmMHgwZl0gLCAoeFszMyYweDBmXSA9 ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBkID0gKCAoKGQpIDw8 ICgzMCkpIHwgKChkKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgYSAr PSAoICgoYikgPDwgKDUpKSB8ICgoYikgPj4gKDMyLSg1KSkpICkgKyAoYyBeIGQgXiBlKSArIDB4 NmVkOWViYTFMICsgKCB0bSA9IHhbMzQmMHgwZl0gXiB4WygzNCAtMTQpJjB4MGZdIF4geFsoMzQg LTgpJjB4MGZdIF4geFsoMzQgLTMpJjB4MGZdICwgKHhbMzQmMHgwZl0gPSAoICgodG0pIDw8ICgx KSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgYyA9ICggKChjKSA8PCAoMzApKSB8ICgoYykg Pj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGUgKz0gKCAoKGEpIDw8ICg1 KSkgfCAoKGEpID4+ICgzMi0oNSkpKSApICsgKGIgXiBjIF4gZCkgKyAweDZlZDllYmExTCArICgg dG0gPSB4WzM1JjB4MGZdIF4geFsoMzUgLTE0KSYweDBmXSBeIHhbKDM1IC04KSYweDBmXSBeIHhb KDM1IC0zKSYweDBmXSAsICh4WzM1JjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4g KDMyLSgxKSkpICkpICk7IGIgPSAoICgoYikgPDwgKDMwKSkgfCAoKGIpID4+ICgzMi0oMzApKSkg KTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBkICs9ICggKChlKSA8PCAoNSkpIHwgKChlKSA+PiAo MzItKDUpKSkgKSArIChhIF4gYiBeIGMpICsgMHg2ZWQ5ZWJhMUwgKyAoIHRtID0geFszNiYweDBm XSBeIHhbKDM2IC0xNCkmMHgwZl0gXiB4WygzNiAtOCkmMHgwZl0gXiB4WygzNiAtMykmMHgwZl0g LCAoeFszNiYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSAp OyBhID0gKCAoKGEpIDw8ICgzMCkpIHwgKChhKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7 CiAgICAgIGRvIHsgYyArPSAoICgoZCkgPDwgKDUpKSB8ICgoZCkgPj4gKDMyLSg1KSkpICkgKyAo ZSBeIGEgXiBiKSArIDB4NmVkOWViYTFMICsgKCB0bSA9IHhbMzcmMHgwZl0gXiB4WygzNyAtMTQp JjB4MGZdIF4geFsoMzcgLTgpJjB4MGZdIF4geFsoMzcgLTMpJjB4MGZdICwgKHhbMzcmMHgwZl0g PSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgZSA9ICggKChlKSA8 PCAoMzApKSB8ICgoZSkgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGIg Kz0gKCAoKGMpIDw8ICg1KSkgfCAoKGMpID4+ICgzMi0oNSkpKSApICsgKGQgXiBlIF4gYSkgKyAw eDZlZDllYmExTCArICggdG0gPSB4WzM4JjB4MGZdIF4geFsoMzggLTE0KSYweDBmXSBeIHhbKDM4 IC04KSYweDBmXSBeIHhbKDM4IC0zKSYweDBmXSAsICh4WzM4JjB4MGZdID0gKCAoKHRtKSA8PCAo MSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGQgPSAoICgoZCkgPDwgKDMwKSkgfCAoKGQp ID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBhICs9ICggKChiKSA8PCAo NSkpIHwgKChiKSA+PiAoMzItKDUpKSkgKSArIChjIF4gZCBeIGUpICsgMHg2ZWQ5ZWJhMUwgKyAo IHRtID0geFszOSYweDBmXSBeIHhbKDM5IC0xNCkmMHgwZl0gXiB4WygzOSAtOCkmMHgwZl0gXiB4 WygzOSAtMykmMHgwZl0gLCAoeFszOSYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ ICgzMi0oMSkpKSApKSApOyBjID0gKCAoKGMpIDw8ICgzMCkpIHwgKChjKSA+PiAoMzItKDMwKSkp ICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgZSArPSAoICgoYSkgPDwgKDUpKSB8ICgoYSkgPj4g KDMyLSg1KSkpICkgKyAoICggYiAmIGMgKSB8ICggZCAmICggYiB8IGMgKSApICkgKyAweDhmMWJi Y2RjTCArICggdG0gPSB4WzQwJjB4MGZdIF4geFsoNDAgLTE0KSYweDBmXSBeIHhbKDQwIC04KSYw eDBmXSBeIHhbKDQwIC0zKSYweDBmXSAsICh4WzQwJjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwg KCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGIgPSAoICgoYikgPDwgKDMwKSkgfCAoKGIpID4+ICgz Mi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBkICs9ICggKChlKSA8PCAoNSkpIHwg KChlKSA+PiAoMzItKDUpKSkgKSArICggKCBhICYgYiApIHwgKCBjICYgKCBhIHwgYiApICkgKSAr IDB4OGYxYmJjZGNMICsgKCB0bSA9IHhbNDEmMHgwZl0gXiB4Wyg0MSAtMTQpJjB4MGZdIF4geFso NDEgLTgpJjB4MGZdIF4geFsoNDEgLTMpJjB4MGZdICwgKHhbNDEmMHgwZl0gPSAoICgodG0pIDw8 ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgYSA9ICggKChhKSA8PCAoMzApKSB8ICgo YSkgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGMgKz0gKCAoKGQpIDw8 ICg1KSkgfCAoKGQpID4+ICgzMi0oNSkpKSApICsgKCAoIGUgJiBhICkgfCAoIGIgJiAoIGUgfCBh ICkgKSApICsgMHg4ZjFiYmNkY0wgKyAoIHRtID0geFs0MiYweDBmXSBeIHhbKDQyIC0xNCkmMHgw Zl0gXiB4Wyg0MiAtOCkmMHgwZl0gXiB4Wyg0MiAtMykmMHgwZl0gLCAoeFs0MiYweDBmXSA9ICgg KCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBlID0gKCAoKGUpIDw8ICgz MCkpIHwgKChlKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgYiArPSAo ICgoYykgPDwgKDUpKSB8ICgoYykgPj4gKDMyLSg1KSkpICkgKyAoICggZCAmIGUgKSB8ICggYSAm ICggZCB8IGUgKSApICkgKyAweDhmMWJiY2RjTCArICggdG0gPSB4WzQzJjB4MGZdIF4geFsoNDMg LTE0KSYweDBmXSBeIHhbKDQzIC04KSYweDBmXSBeIHhbKDQzIC0zKSYweDBmXSAsICh4WzQzJjB4 MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGQgPSAoICgo ZCkgPDwgKDMwKSkgfCAoKGQpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8g eyBhICs9ICggKChiKSA8PCAoNSkpIHwgKChiKSA+PiAoMzItKDUpKSkgKSArICggKCBjICYgZCAp IHwgKCBlICYgKCBjIHwgZCApICkgKSArIDB4OGYxYmJjZGNMICsgKCB0bSA9IHhbNDQmMHgwZl0g XiB4Wyg0NCAtMTQpJjB4MGZdIF4geFsoNDQgLTgpJjB4MGZdIF4geFsoNDQgLTMpJjB4MGZdICwg KHhbNDQmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsg YyA9ICggKChjKSA8PCAoMzApKSB8ICgoYykgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwog ICAgICBkbyB7IGUgKz0gKCAoKGEpIDw8ICg1KSkgfCAoKGEpID4+ICgzMi0oNSkpKSApICsgKCAo IGIgJiBjICkgfCAoIGQgJiAoIGIgfCBjICkgKSApICsgMHg4ZjFiYmNkY0wgKyAoIHRtID0geFs0 NSYweDBmXSBeIHhbKDQ1IC0xNCkmMHgwZl0gXiB4Wyg0NSAtOCkmMHgwZl0gXiB4Wyg0NSAtMykm MHgwZl0gLCAoeFs0NSYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkp KSApKSApOyBiID0gKCAoKGIpIDw8ICgzMCkpIHwgKChiKSA+PiAoMzItKDMwKSkpICk7IH0gd2hp bGUoMCk7CiAgICAgIGRvIHsgZCArPSAoICgoZSkgPDwgKDUpKSB8ICgoZSkgPj4gKDMyLSg1KSkp ICkgKyAoICggYSAmIGIgKSB8ICggYyAmICggYSB8IGIgKSApICkgKyAweDhmMWJiY2RjTCArICgg dG0gPSB4WzQ2JjB4MGZdIF4geFsoNDYgLTE0KSYweDBmXSBeIHhbKDQ2IC04KSYweDBmXSBeIHhb KDQ2IC0zKSYweDBmXSAsICh4WzQ2JjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4g KDMyLSgxKSkpICkpICk7IGEgPSAoICgoYSkgPDwgKDMwKSkgfCAoKGEpID4+ICgzMi0oMzApKSkg KTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBjICs9ICggKChkKSA8PCAoNSkpIHwgKChkKSA+PiAo MzItKDUpKSkgKSArICggKCBlICYgYSApIHwgKCBiICYgKCBlIHwgYSApICkgKSArIDB4OGYxYmJj ZGNMICsgKCB0bSA9IHhbNDcmMHgwZl0gXiB4Wyg0NyAtMTQpJjB4MGZdIF4geFsoNDcgLTgpJjB4 MGZdIF4geFsoNDcgLTMpJjB4MGZdICwgKHhbNDcmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAo KHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgZSA9ICggKChlKSA8PCAoMzApKSB8ICgoZSkgPj4gKDMy LSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGIgKz0gKCAoKGMpIDw8ICg1KSkgfCAo KGMpID4+ICgzMi0oNSkpKSApICsgKCAoIGQgJiBlICkgfCAoIGEgJiAoIGQgfCBlICkgKSApICsg MHg4ZjFiYmNkY0wgKyAoIHRtID0geFs0OCYweDBmXSBeIHhbKDQ4IC0xNCkmMHgwZl0gXiB4Wyg0 OCAtOCkmMHgwZl0gXiB4Wyg0OCAtMykmMHgwZl0gLCAoeFs0OCYweDBmXSA9ICggKCh0bSkgPDwg KDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBkID0gKCAoKGQpIDw8ICgzMCkpIHwgKChk KSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgYSArPSAoICgoYikgPDwg KDUpKSB8ICgoYikgPj4gKDMyLSg1KSkpICkgKyAoICggYyAmIGQgKSB8ICggZSAmICggYyB8IGQg KSApICkgKyAweDhmMWJiY2RjTCArICggdG0gPSB4WzQ5JjB4MGZdIF4geFsoNDkgLTE0KSYweDBm XSBeIHhbKDQ5IC04KSYweDBmXSBeIHhbKDQ5IC0zKSYweDBmXSAsICh4WzQ5JjB4MGZdID0gKCAo KHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGMgPSAoICgoYykgPDwgKDMw KSkgfCAoKGMpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBlICs9ICgg KChhKSA8PCAoNSkpIHwgKChhKSA+PiAoMzItKDUpKSkgKSArICggKCBiICYgYyApIHwgKCBkICYg KCBiIHwgYyApICkgKSArIDB4OGYxYmJjZGNMICsgKCB0bSA9IHhbNTAmMHgwZl0gXiB4Wyg1MCAt MTQpJjB4MGZdIF4geFsoNTAgLTgpJjB4MGZdIF4geFsoNTAgLTMpJjB4MGZdICwgKHhbNTAmMHgw Zl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgYiA9ICggKChi KSA8PCAoMzApKSB8ICgoYikgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7 IGQgKz0gKCAoKGUpIDw8ICg1KSkgfCAoKGUpID4+ICgzMi0oNSkpKSApICsgKCAoIGEgJiBiICkg fCAoIGMgJiAoIGEgfCBiICkgKSApICsgMHg4ZjFiYmNkY0wgKyAoIHRtID0geFs1MSYweDBmXSBe IHhbKDUxIC0xNCkmMHgwZl0gXiB4Wyg1MSAtOCkmMHgwZl0gXiB4Wyg1MSAtMykmMHgwZl0gLCAo eFs1MSYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBh ID0gKCAoKGEpIDw8ICgzMCkpIHwgKChhKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAg ICAgIGRvIHsgYyArPSAoICgoZCkgPDwgKDUpKSB8ICgoZCkgPj4gKDMyLSg1KSkpICkgKyAoICgg ZSAmIGEgKSB8ICggYiAmICggZSB8IGEgKSApICkgKyAweDhmMWJiY2RjTCArICggdG0gPSB4WzUy JjB4MGZdIF4geFsoNTIgLTE0KSYweDBmXSBeIHhbKDUyIC04KSYweDBmXSBeIHhbKDUyIC0zKSYw eDBmXSAsICh4WzUyJjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkp ICkpICk7IGUgPSAoICgoZSkgPDwgKDMwKSkgfCAoKGUpID4+ICgzMi0oMzApKSkgKTsgfSB3aGls ZSgwKTsKICAgICAgZG8geyBiICs9ICggKChjKSA8PCAoNSkpIHwgKChjKSA+PiAoMzItKDUpKSkg KSArICggKCBkICYgZSApIHwgKCBhICYgKCBkIHwgZSApICkgKSArIDB4OGYxYmJjZGNMICsgKCB0 bSA9IHhbNTMmMHgwZl0gXiB4Wyg1MyAtMTQpJjB4MGZdIF4geFsoNTMgLTgpJjB4MGZdIF4geFso NTMgLTMpJjB4MGZdICwgKHhbNTMmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAo MzItKDEpKSkgKSkgKTsgZCA9ICggKChkKSA8PCAoMzApKSB8ICgoZCkgPj4gKDMyLSgzMCkpKSAp OyB9IHdoaWxlKDApOwogICAgICBkbyB7IGEgKz0gKCAoKGIpIDw8ICg1KSkgfCAoKGIpID4+ICgz Mi0oNSkpKSApICsgKCAoIGMgJiBkICkgfCAoIGUgJiAoIGMgfCBkICkgKSApICsgMHg4ZjFiYmNk Y0wgKyAoIHRtID0geFs1NCYweDBmXSBeIHhbKDU0IC0xNCkmMHgwZl0gXiB4Wyg1NCAtOCkmMHgw Zl0gXiB4Wyg1NCAtMykmMHgwZl0gLCAoeFs1NCYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgo dG0pID4+ICgzMi0oMSkpKSApKSApOyBjID0gKCAoKGMpIDw8ICgzMCkpIHwgKChjKSA+PiAoMzIt KDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgZSArPSAoICgoYSkgPDwgKDUpKSB8ICgo YSkgPj4gKDMyLSg1KSkpICkgKyAoICggYiAmIGMgKSB8ICggZCAmICggYiB8IGMgKSApICkgKyAw eDhmMWJiY2RjTCArICggdG0gPSB4WzU1JjB4MGZdIF4geFsoNTUgLTE0KSYweDBmXSBeIHhbKDU1 IC04KSYweDBmXSBeIHhbKDU1IC0zKSYweDBmXSAsICh4WzU1JjB4MGZdID0gKCAoKHRtKSA8PCAo MSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGIgPSAoICgoYikgPDwgKDMwKSkgfCAoKGIp ID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBkICs9ICggKChlKSA8PCAo NSkpIHwgKChlKSA+PiAoMzItKDUpKSkgKSArICggKCBhICYgYiApIHwgKCBjICYgKCBhIHwgYiAp ICkgKSArIDB4OGYxYmJjZGNMICsgKCB0bSA9IHhbNTYmMHgwZl0gXiB4Wyg1NiAtMTQpJjB4MGZd IF4geFsoNTYgLTgpJjB4MGZdIF4geFsoNTYgLTMpJjB4MGZdICwgKHhbNTYmMHgwZl0gPSAoICgo dG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgYSA9ICggKChhKSA8PCAoMzAp KSB8ICgoYSkgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGMgKz0gKCAo KGQpIDw8ICg1KSkgfCAoKGQpID4+ICgzMi0oNSkpKSApICsgKCAoIGUgJiBhICkgfCAoIGIgJiAo IGUgfCBhICkgKSApICsgMHg4ZjFiYmNkY0wgKyAoIHRtID0geFs1NyYweDBmXSBeIHhbKDU3IC0x NCkmMHgwZl0gXiB4Wyg1NyAtOCkmMHgwZl0gXiB4Wyg1NyAtMykmMHgwZl0gLCAoeFs1NyYweDBm XSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBlID0gKCAoKGUp IDw8ICgzMCkpIHwgKChlKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsg YiArPSAoICgoYykgPDwgKDUpKSB8ICgoYykgPj4gKDMyLSg1KSkpICkgKyAoICggZCAmIGUgKSB8 ICggYSAmICggZCB8IGUgKSApICkgKyAweDhmMWJiY2RjTCArICggdG0gPSB4WzU4JjB4MGZdIF4g eFsoNTggLTE0KSYweDBmXSBeIHhbKDU4IC04KSYweDBmXSBeIHhbKDU4IC0zKSYweDBmXSAsICh4 WzU4JjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGQg PSAoICgoZCkgPDwgKDMwKSkgfCAoKGQpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAg ICAgZG8geyBhICs9ICggKChiKSA8PCAoNSkpIHwgKChiKSA+PiAoMzItKDUpKSkgKSArICggKCBj ICYgZCApIHwgKCBlICYgKCBjIHwgZCApICkgKSArIDB4OGYxYmJjZGNMICsgKCB0bSA9IHhbNTkm MHgwZl0gXiB4Wyg1OSAtMTQpJjB4MGZdIF4geFsoNTkgLTgpJjB4MGZdIF4geFsoNTkgLTMpJjB4 MGZdICwgKHhbNTkmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkg KSkgKTsgYyA9ICggKChjKSA8PCAoMzApKSB8ICgoYykgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxl KDApOwogICAgICBkbyB7IGUgKz0gKCAoKGEpIDw8ICg1KSkgfCAoKGEpID4+ICgzMi0oNSkpKSAp ICsgKGIgXiBjIF4gZCkgKyAweGNhNjJjMWQ2TCArICggdG0gPSB4WzYwJjB4MGZdIF4geFsoNjAg LTE0KSYweDBmXSBeIHhbKDYwIC04KSYweDBmXSBeIHhbKDYwIC0zKSYweDBmXSAsICh4WzYwJjB4 MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGIgPSAoICgo YikgPDwgKDMwKSkgfCAoKGIpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8g eyBkICs9ICggKChlKSA8PCAoNSkpIHwgKChlKSA+PiAoMzItKDUpKSkgKSArIChhIF4gYiBeIGMp ICsgMHhjYTYyYzFkNkwgKyAoIHRtID0geFs2MSYweDBmXSBeIHhbKDYxIC0xNCkmMHgwZl0gXiB4 Wyg2MSAtOCkmMHgwZl0gXiB4Wyg2MSAtMykmMHgwZl0gLCAoeFs2MSYweDBmXSA9ICggKCh0bSkg PDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBhID0gKCAoKGEpIDw8ICgzMCkpIHwg KChhKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgYyArPSAoICgoZCkg PDwgKDUpKSB8ICgoZCkgPj4gKDMyLSg1KSkpICkgKyAoZSBeIGEgXiBiKSArIDB4Y2E2MmMxZDZM ICsgKCB0bSA9IHhbNjImMHgwZl0gXiB4Wyg2MiAtMTQpJjB4MGZdIF4geFsoNjIgLTgpJjB4MGZd IF4geFsoNjIgLTMpJjB4MGZdICwgKHhbNjImMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRt KSA+PiAoMzItKDEpKSkgKSkgKTsgZSA9ICggKChlKSA8PCAoMzApKSB8ICgoZSkgPj4gKDMyLSgz MCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGIgKz0gKCAoKGMpIDw8ICg1KSkgfCAoKGMp ID4+ICgzMi0oNSkpKSApICsgKGQgXiBlIF4gYSkgKyAweGNhNjJjMWQ2TCArICggdG0gPSB4WzYz JjB4MGZdIF4geFsoNjMgLTE0KSYweDBmXSBeIHhbKDYzIC04KSYweDBmXSBeIHhbKDYzIC0zKSYw eDBmXSAsICh4WzYzJjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkp ICkpICk7IGQgPSAoICgoZCkgPDwgKDMwKSkgfCAoKGQpID4+ICgzMi0oMzApKSkgKTsgfSB3aGls ZSgwKTsKICAgICAgZG8geyBhICs9ICggKChiKSA8PCAoNSkpIHwgKChiKSA+PiAoMzItKDUpKSkg KSArIChjIF4gZCBeIGUpICsgMHhjYTYyYzFkNkwgKyAoIHRtID0geFs2NCYweDBmXSBeIHhbKDY0 IC0xNCkmMHgwZl0gXiB4Wyg2NCAtOCkmMHgwZl0gXiB4Wyg2NCAtMykmMHgwZl0gLCAoeFs2NCYw eDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBjID0gKCAo KGMpIDw8ICgzMCkpIHwgKChjKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRv IHsgZSArPSAoICgoYSkgPDwgKDUpKSB8ICgoYSkgPj4gKDMyLSg1KSkpICkgKyAoYiBeIGMgXiBk KSArIDB4Y2E2MmMxZDZMICsgKCB0bSA9IHhbNjUmMHgwZl0gXiB4Wyg2NSAtMTQpJjB4MGZdIF4g eFsoNjUgLTgpJjB4MGZdIF4geFsoNjUgLTMpJjB4MGZdICwgKHhbNjUmMHgwZl0gPSAoICgodG0p IDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgYiA9ICggKChiKSA8PCAoMzApKSB8 ICgoYikgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGQgKz0gKCAoKGUp IDw8ICg1KSkgfCAoKGUpID4+ICgzMi0oNSkpKSApICsgKGEgXiBiIF4gYykgKyAweGNhNjJjMWQ2 TCArICggdG0gPSB4WzY2JjB4MGZdIF4geFsoNjYgLTE0KSYweDBmXSBeIHhbKDY2IC04KSYweDBm XSBeIHhbKDY2IC0zKSYweDBmXSAsICh4WzY2JjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0 bSkgPj4gKDMyLSgxKSkpICkpICk7IGEgPSAoICgoYSkgPDwgKDMwKSkgfCAoKGEpID4+ICgzMi0o MzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBjICs9ICggKChkKSA8PCAoNSkpIHwgKChk KSA+PiAoMzItKDUpKSkgKSArIChlIF4gYSBeIGIpICsgMHhjYTYyYzFkNkwgKyAoIHRtID0geFs2 NyYweDBmXSBeIHhbKDY3IC0xNCkmMHgwZl0gXiB4Wyg2NyAtOCkmMHgwZl0gXiB4Wyg2NyAtMykm MHgwZl0gLCAoeFs2NyYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkp KSApKSApOyBlID0gKCAoKGUpIDw8ICgzMCkpIHwgKChlKSA+PiAoMzItKDMwKSkpICk7IH0gd2hp bGUoMCk7CiAgICAgIGRvIHsgYiArPSAoICgoYykgPDwgKDUpKSB8ICgoYykgPj4gKDMyLSg1KSkp ICkgKyAoZCBeIGUgXiBhKSArIDB4Y2E2MmMxZDZMICsgKCB0bSA9IHhbNjgmMHgwZl0gXiB4Wyg2 OCAtMTQpJjB4MGZdIF4geFsoNjggLTgpJjB4MGZdIF4geFsoNjggLTMpJjB4MGZdICwgKHhbNjgm MHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgZCA9ICgg KChkKSA8PCAoMzApKSB8ICgoZCkgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBk byB7IGEgKz0gKCAoKGIpIDw8ICg1KSkgfCAoKGIpID4+ICgzMi0oNSkpKSApICsgKGMgXiBkIF4g ZSkgKyAweGNhNjJjMWQ2TCArICggdG0gPSB4WzY5JjB4MGZdIF4geFsoNjkgLTE0KSYweDBmXSBe IHhbKDY5IC04KSYweDBmXSBeIHhbKDY5IC0zKSYweDBmXSAsICh4WzY5JjB4MGZdID0gKCAoKHRt KSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGMgPSAoICgoYykgPDwgKDMwKSkg fCAoKGMpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBlICs9ICggKChh KSA8PCAoNSkpIHwgKChhKSA+PiAoMzItKDUpKSkgKSArIChiIF4gYyBeIGQpICsgMHhjYTYyYzFk NkwgKyAoIHRtID0geFs3MCYweDBmXSBeIHhbKDcwIC0xNCkmMHgwZl0gXiB4Wyg3MCAtOCkmMHgw Zl0gXiB4Wyg3MCAtMykmMHgwZl0gLCAoeFs3MCYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgo dG0pID4+ICgzMi0oMSkpKSApKSApOyBiID0gKCAoKGIpIDw8ICgzMCkpIHwgKChiKSA+PiAoMzIt KDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgZCArPSAoICgoZSkgPDwgKDUpKSB8ICgo ZSkgPj4gKDMyLSg1KSkpICkgKyAoYSBeIGIgXiBjKSArIDB4Y2E2MmMxZDZMICsgKCB0bSA9IHhb NzEmMHgwZl0gXiB4Wyg3MSAtMTQpJjB4MGZdIF4geFsoNzEgLTgpJjB4MGZdIF4geFsoNzEgLTMp JjB4MGZdICwgKHhbNzEmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEp KSkgKSkgKTsgYSA9ICggKChhKSA8PCAoMzApKSB8ICgoYSkgPj4gKDMyLSgzMCkpKSApOyB9IHdo aWxlKDApOwogICAgICBkbyB7IGMgKz0gKCAoKGQpIDw8ICg1KSkgfCAoKGQpID4+ICgzMi0oNSkp KSApICsgKGUgXiBhIF4gYikgKyAweGNhNjJjMWQ2TCArICggdG0gPSB4WzcyJjB4MGZdIF4geFso NzIgLTE0KSYweDBmXSBeIHhbKDcyIC04KSYweDBmXSBeIHhbKDcyIC0zKSYweDBmXSAsICh4Wzcy JjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGUgPSAo ICgoZSkgPDwgKDMwKSkgfCAoKGUpID4+ICgzMi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAg ZG8geyBiICs9ICggKChjKSA8PCAoNSkpIHwgKChjKSA+PiAoMzItKDUpKSkgKSArIChkIF4gZSBe IGEpICsgMHhjYTYyYzFkNkwgKyAoIHRtID0geFs3MyYweDBmXSBeIHhbKDczIC0xNCkmMHgwZl0g XiB4Wyg3MyAtOCkmMHgwZl0gXiB4Wyg3MyAtMykmMHgwZl0gLCAoeFs3MyYweDBmXSA9ICggKCh0 bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBkID0gKCAoKGQpIDw8ICgzMCkp IHwgKChkKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAgIGRvIHsgYSArPSAoICgo YikgPDwgKDUpKSB8ICgoYikgPj4gKDMyLSg1KSkpICkgKyAoYyBeIGQgXiBlKSArIDB4Y2E2MmMx ZDZMICsgKCB0bSA9IHhbNzQmMHgwZl0gXiB4Wyg3NCAtMTQpJjB4MGZdIF4geFsoNzQgLTgpJjB4 MGZdIF4geFsoNzQgLTMpJjB4MGZdICwgKHhbNzQmMHgwZl0gPSAoICgodG0pIDw8ICgxKSkgfCAo KHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgYyA9ICggKChjKSA8PCAoMzApKSB8ICgoYykgPj4gKDMy LSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGUgKz0gKCAoKGEpIDw8ICg1KSkgfCAo KGEpID4+ICgzMi0oNSkpKSApICsgKGIgXiBjIF4gZCkgKyAweGNhNjJjMWQ2TCArICggdG0gPSB4 Wzc1JjB4MGZdIF4geFsoNzUgLTE0KSYweDBmXSBeIHhbKDc1IC04KSYweDBmXSBeIHhbKDc1IC0z KSYweDBmXSAsICh4Wzc1JjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwgKCh0bSkgPj4gKDMyLSgx KSkpICkpICk7IGIgPSAoICgoYikgPDwgKDMwKSkgfCAoKGIpID4+ICgzMi0oMzApKSkgKTsgfSB3 aGlsZSgwKTsKICAgICAgZG8geyBkICs9ICggKChlKSA8PCAoNSkpIHwgKChlKSA+PiAoMzItKDUp KSkgKSArIChhIF4gYiBeIGMpICsgMHhjYTYyYzFkNkwgKyAoIHRtID0geFs3NiYweDBmXSBeIHhb KDc2IC0xNCkmMHgwZl0gXiB4Wyg3NiAtOCkmMHgwZl0gXiB4Wyg3NiAtMykmMHgwZl0gLCAoeFs3 NiYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0oMSkpKSApKSApOyBhID0g KCAoKGEpIDw8ICgzMCkpIHwgKChhKSA+PiAoMzItKDMwKSkpICk7IH0gd2hpbGUoMCk7CiAgICAg IGRvIHsgYyArPSAoICgoZCkgPDwgKDUpKSB8ICgoZCkgPj4gKDMyLSg1KSkpICkgKyAoZSBeIGEg XiBiKSArIDB4Y2E2MmMxZDZMICsgKCB0bSA9IHhbNzcmMHgwZl0gXiB4Wyg3NyAtMTQpJjB4MGZd IF4geFsoNzcgLTgpJjB4MGZdIF4geFsoNzcgLTMpJjB4MGZdICwgKHhbNzcmMHgwZl0gPSAoICgo dG0pIDw8ICgxKSkgfCAoKHRtKSA+PiAoMzItKDEpKSkgKSkgKTsgZSA9ICggKChlKSA8PCAoMzAp KSB8ICgoZSkgPj4gKDMyLSgzMCkpKSApOyB9IHdoaWxlKDApOwogICAgICBkbyB7IGIgKz0gKCAo KGMpIDw8ICg1KSkgfCAoKGMpID4+ICgzMi0oNSkpKSApICsgKGQgXiBlIF4gYSkgKyAweGNhNjJj MWQ2TCArICggdG0gPSB4Wzc4JjB4MGZdIF4geFsoNzggLTE0KSYweDBmXSBeIHhbKDc4IC04KSYw eDBmXSBeIHhbKDc4IC0zKSYweDBmXSAsICh4Wzc4JjB4MGZdID0gKCAoKHRtKSA8PCAoMSkpIHwg KCh0bSkgPj4gKDMyLSgxKSkpICkpICk7IGQgPSAoICgoZCkgPDwgKDMwKSkgfCAoKGQpID4+ICgz Mi0oMzApKSkgKTsgfSB3aGlsZSgwKTsKICAgICAgZG8geyBhICs9ICggKChiKSA8PCAoNSkpIHwg KChiKSA+PiAoMzItKDUpKSkgKSArIChjIF4gZCBeIGUpICsgMHhjYTYyYzFkNkwgKyAoIHRtID0g eFs3OSYweDBmXSBeIHhbKDc5IC0xNCkmMHgwZl0gXiB4Wyg3OSAtOCkmMHgwZl0gXiB4Wyg3OSAt MykmMHgwZl0gLCAoeFs3OSYweDBmXSA9ICggKCh0bSkgPDwgKDEpKSB8ICgodG0pID4+ICgzMi0o MSkpKSApKSApOyBjID0gKCAoKGMpIDw8ICgzMCkpIHwgKChjKSA+PiAoMzItKDMwKSkpICk7IH0g d2hpbGUoMCk7CgogICAgICBhID0gY3R4LT5BICs9IGE7CiAgICAgIGIgPSBjdHgtPkIgKz0gYjsK ICAgICAgYyA9IGN0eC0+QyArPSBjOwogICAgICBkID0gY3R4LT5EICs9IGQ7CiAgICAgIGUgPSBj dHgtPkUgKz0gZTsKICAgIH0KfQo=