diff --git a/.github/travis_testsuite_1.sh b/.github/travis_testsuite_1.sh index ab64df2b..a2739dde 100644 --- a/.github/travis_testsuite_1.sh +++ b/.github/travis_testsuite_1.sh @@ -149,81 +149,81 @@ c3f44b4d00a87384c03a6f9e7aec809c1addfe3e271244d38a474f296603088c *mipsel-linux.e b8c35fa2956da17ca505956e9f5017bb5f3a746322647e24ccb8ff28059cafa4 *powerpc-linux.elf/upx-3.91 " expected_sha256sums__t110_compress_ucl_nrv2b_3_no_filter="\ -e79af02f04b86c01fde5bf1da7817da60ad8d7edef6c683d23b4f760f9fbe07c *amd64-linux.elf/upx-3.91 +ba63d6b8b6e142c5f0bfba0226770dee457d1c119cb1ea712d8217641e9afe5e *amd64-linux.elf/upx-3.91 c1a6ef9d0b8a26f1d6e3307af6f119bc95411a54421c7da3bd6ade9c4eead187 *arm-wince.pe/upx-3.91.exe -7e35e651e9018cfe7c6935d6faa9ae31b5c7324be1112238dd407060a20286d9 *armeb-linux.elf/upx-3.91 +4207fa9fadeacc18e239b651cacdf689f63aea8ea45b38306d8d41d83eda752e *armeb-linux.elf/upx-3.91 7d5f0fd6f18e4cd16655ef58805f228bcaddd5b035ce998faed446e290aea3d9 *i386-dos32.djgpp2.coff/upx-3.91.exe -fa905c6fa718ad2f85e0b082506ff48fbee2524d64eadeacd90651a27b8f4672 *i386-linux.elf/upx-3.91 +207c5a73eff5a03e0f77b2a5b2c3591d7a5ab65c2831e630e1b9c9c25b817384 *i386-linux.elf/upx-3.91 d3cfb5347758ee54e54cfc92ae502a3e19702cd4fec115d74f84f8a5ab7a9bc2 *i386-win32.pe/upx-3.91.exe c4c8b912a48bcaaef72fd94cd0c307659a03be2ec359bf01a42a2a39307dd964 *m68k-atari.tos/upx-3.91.ttp -b45b537b1c3641a9993f908c5f19504c2ae83f727135bdd63b19a8ae06da31ec *mipsel-linux.elf/upx-3.91 -9b9ec6cc491ddc78752966f5be57d12e47c0c3105172ae599de3fce520526190 *powerpc-linux.elf/upx-3.91 +f372c28f71220ac8f58e949f938bf665ae964a8b8683c30200f5c9334965d7aa *mipsel-linux.elf/upx-3.91 +8f71602f4c0ca50201fa4243bdbe7214353ee5e2ff12c0bc733d5ccb6cfd867b *powerpc-linux.elf/upx-3.91 " expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\ -67bf4666f95245059b82c78fb579fb205fdc7efb7d7ef561ec27099ef9343d05 *amd64-linux.elf/upx-3.91 +7f75b3ad70fa9b4bd7954fe0897fa9338f05a9acef3e1723caa93e84b87f85b9 *amd64-linux.elf/upx-3.91 2bb2477bdf4643954b4bb707b1017459238b03f66883303cd20e9e8740764dd7 *arm-wince.pe/upx-3.91.exe -174c480d7ad1262fa1b1a2ae91f06e2adb53e49443da043b2b7930f8f3cf0709 *armeb-linux.elf/upx-3.91 +6e1d412bcf05093967eefe59cbe60aad8d0c2484c69bcab0bf1c2b820d87b8e5 *armeb-linux.elf/upx-3.91 c52473f5dbdac560c05d5d173e5342b5e696e604517359baef581672eb25a9e6 *i386-dos32.djgpp2.coff/upx-3.91.exe -3b5e674c34842bd4bc76a1a61fec6343401d09627280e8e7634cc5e7f41fedf1 *i386-linux.elf/upx-3.91 +b4cb46ec0743fbc062fe6286a9a140d0723de0ad35b24028502a18cadd5fa116 *i386-linux.elf/upx-3.91 5bebadb8455b052580b1f22a949c3eb5a441c8b6ba9c6b50506cb703fc3f65ce *i386-win32.pe/upx-3.91.exe ef94d8b0e02a650c302bec9f2d50462f2accc2fbb8003cc4977bc550d2e5b9f2 *m68k-atari.tos/upx-3.91.ttp -5ef57048d510d1d0fea630e4622e60f0fd54e5b64b65774d6e785670f43d9c54 *mipsel-linux.elf/upx-3.91 -50babab276c089f8562e0d38587c7ccc9e0bd84f8c6f0af523d6a07c94568094 *powerpc-linux.elf/upx-3.91 +4aaed45f46a515a44647a29c6afe8b82cedaa49543d4b76fa710fd7139df3da1 *mipsel-linux.elf/upx-3.91 +11da243fd33499df01a0b0924d07169e104e124823fc06c0243d118540d36ee6 *powerpc-linux.elf/upx-3.91 " expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\ -d79bf044efd7fa79ccc9258e7f18fd96516f65e92314afe5d2106c12a7657b16 *amd64-linux.elf/upx-3.91 +09d1e3a6dfec9fc640e6c203a5baec53a5e1b41feb0493c10ab816fe6639a291 *amd64-linux.elf/upx-3.91 0915344e0ee8e7c006e6cce71c024f518e097a88820c7ab3ca183ab1c614ce82 *arm-wince.pe/upx-3.91.exe -40f6d18e983239020f5139d5c641d5504922d2ac42583fd0d67cf115da92b3b9 *armeb-linux.elf/upx-3.91 +da4f1e158b1ae542d296955b93042a67b839eae35d1b0d437651c189b90f6445 *armeb-linux.elf/upx-3.91 5c5ff78652e76834f3f9ab110c42e3a34ef54c748bce212b0e942049f43f5d4d *i386-dos32.djgpp2.coff/upx-3.91.exe -0e0f2a23c87a9f7a8ce2b9d53ea8478f40cfbc319228e5ce02ab5f5eff2727c5 *i386-linux.elf/upx-3.91 +82682bc17933e803d6d9a16a2f368044a034db3aaa1bf2751501950908831457 *i386-linux.elf/upx-3.91 ef5e25c79d356e9ed0736f34dc5ee7a8f4c66d0c330b8d16672fac7d829b5a7c *i386-win32.pe/upx-3.91.exe dfc6abff2d3417b9708b1232d5791a9232c6623dcedb9dcb59428b67bbf864e9 *m68k-atari.tos/upx-3.91.ttp -141d33cb386ef9aee02c0be946777c8fa556a64965392a030207a2e07af89504 *mipsel-linux.elf/upx-3.91 -f0c96dba224cafa2e1a3ffe92609c48235289337fac3761491bf2f0680017841 *powerpc-linux.elf/upx-3.91 +62c0033cc2ac497b13c93d8a2e95b760c0f3d3e5650df7f61bc3b2ef8ea236b6 *mipsel-linux.elf/upx-3.91 +e9f0ed15b0bee40046f2136281fd4af2e9e9f26e79aa6f6779f0cce3022be7ae *powerpc-linux.elf/upx-3.91 " expected_sha256sums__t140_compress_lzma_2_no_filter="\ -3915741d762e15df607d0c32c0343bcf0906eb5409d7c34888da4a6a0f0fd88c *amd64-linux.elf/upx-3.91 +72032e223a3ede0372f6ed8e45584bdea72f6ff248f9c705493af55a148af856 *amd64-linux.elf/upx-3.91 3af2a2346a252dfacefb6209725907b2947dc1ccf5e99af139608354f852507c *arm-wince.pe/upx-3.91.exe -4d6dbb67cea5b89956bab304633de379ed4ad4dfa808217a0d5014efe5f047fc *armeb-linux.elf/upx-3.91 +b44c77de2906264285a92a46951aca07cd3a8b531b70b01a7207745ed6264d45 *armeb-linux.elf/upx-3.91 964fb400b0b4a2b1926ce7076610db8c3a8e41807fe030209af1615d43b6a020 *i386-dos32.djgpp2.coff/upx-3.91.exe -91ef93aef322d72c94d867ea8e9413025340dda67e6f8f3acdc8569982009877 *i386-linux.elf/upx-3.91 +2708ce0b985540e5dc027ac4c21b7821ec3841446fdc8ee63dda787b6430f647 *i386-linux.elf/upx-3.91 171bde9f27a5571b524e9d7cdba6cefa142bb8a0b114c4d5294944ee5781e0bb *i386-win32.pe/upx-3.91.exe 8826c1f910007360ba6cec02c91bd7cdc87bce1ce27804ca728846b92d9086c9 *m68k-atari.tos/upx-3.91.ttp -f34a9691c617178582ab8b8cc50d9ccce1c37cd6074f9e146459121b1cdbaff9 *mipsel-linux.elf/upx-3.91 -85a97fbde61dcb34e6f32e9bd7dc13a74969f82baada2e1880777197b86dacd2 *powerpc-linux.elf/upx-3.91 +f1f9c9d940f519e89198e38cbb6e7f95abb5b28188118e7bb24aa30747baa4af *mipsel-linux.elf/upx-3.91 +d1fd973ea522b5ba0e5f89377dc6cc166fffaa260c6263ecea67d72779fab200 *powerpc-linux.elf/upx-3.91 " expected_sha256sums__t150_compress_ucl_2_all_filters="\ -476c5e7deadae76336cb2d659bd7004073af2eb6059feaa5e146d1670da5296d *amd64-linux.elf/upx-3.91 +162ad39ad701ddd65aea45d7d665721627f4c3cadb27377ccea155f8a6116b83 *amd64-linux.elf/upx-3.91 dc7323e753ce62e6a1c22112f139953dbaa1e5268530479f8ad48e0c54062295 *arm-wince.pe/upx-3.91.exe -a63e457b523ba78919a00c0d818f697ff51d005ea1b8108a4bc96afe26e721db *armeb-linux.elf/upx-3.91 +f35804016b9edce8594d85d56267ea725ca49d832afd4a42ffc8e1d827cdd7ca *armeb-linux.elf/upx-3.91 8614d93ba30def6866b3be92ae5bdd5f294266e0fc4a26c078682917f127656d *i386-dos32.djgpp2.coff/upx-3.91.exe -a85707417a7ee7f81685272f460fde6cd3406cfe1457d656e337b1839d3cd3f2 *i386-linux.elf/upx-3.91 +c07736b3a35201202d8b52990bc4b9fc090b447264a1bf14947de7e185e9f429 *i386-linux.elf/upx-3.91 7c3d7398f63eb9e235992d2d8fd6de9e355f6f21621c45032a6ae6c9009067e6 *i386-win32.pe/upx-3.91.exe 25e9e84bf4e01350b362d088f8107d8228b4576bc47b6b718e9e742f7e4a5205 *m68k-atari.tos/upx-3.91.ttp -43d1d7d49b540aae1986d0cce90bd9ea7b6ee4e891f99f6a0b57c9e74db1f1f7 *mipsel-linux.elf/upx-3.91 -794737f95430181e3abe03a5e4ba879230afcef47bbbd984def7b05854e3032a *powerpc-linux.elf/upx-3.91 +e7289c2fc37f219199a9e183763ad2556ac65e0ec4eaeeffbb658cdf1a36a1be *mipsel-linux.elf/upx-3.91 +333b2c35662c100f0ba42b4fd4d16f69d6ad7149acff24b2f353171a02a1122b *powerpc-linux.elf/upx-3.91 " expected_sha256sums__t160_compress_all_methods_1_no_filter="\ -c8b21f16e6e5fbc4786286d49a35abe9c8d6d088af14c642edd35e53b98b841e *amd64-linux.elf/upx-3.91 +6235f2ead5866256580f97d43160aac30032f236ac1a3639f3c9f5fcc96b4cac *amd64-linux.elf/upx-3.91 1c9c618741739404f40d198d2fc77010539589379bf260502af9f10f1ec0d05b *arm-wince.pe/upx-3.91.exe -34412ce06f8ec8e0ff494803374caef537afeede157f705086cb5a7ec8c32bf3 *armeb-linux.elf/upx-3.91 +48af335c1c7ec6ff63dfea56be4c6c79588cece14fbebcf9f39bb8404a7752cc *armeb-linux.elf/upx-3.91 863bbf7f3cf41296987b085a4db8acba372e3d65d8d9c656f9a7276f2e7aa4d3 *i386-dos32.djgpp2.coff/upx-3.91.exe -80c07fc48353d7124332467d10d55fc102cc3b8ab87c7fb24e6356614377bf6b *i386-linux.elf/upx-3.91 +37f6c6ff11451a1d725fb9d3f370178ff18c4f400aad5502101085dbf414224a *i386-linux.elf/upx-3.91 4c73a38e81fe12f36dc37e514f8580c12bdf5d8cb92e9a07b7070db291a2f7eb *i386-win32.pe/upx-3.91.exe 0f902defbce3c9a8ea08910ff2ac62b9f06e7ceed0570501cb3b6287bfd6d797 *m68k-atari.tos/upx-3.91.ttp -8c88676582049d0add7245f3f137f4716ac122c27b03032922b48bd405a3454a *mipsel-linux.elf/upx-3.91 -f9a432e027c4bb8c4c9dbb6855a5fbd0af170506ba2bf794fe800a45c3191ce6 *powerpc-linux.elf/upx-3.91 +0dcdc66732ab3032b7d666f27a27fc112b75a98b7af525a827189059441571b3 *mipsel-linux.elf/upx-3.91 +9a225a7c37702237b8712761165a7d437c716e041d8f714f2f64601c3fd032f2 *powerpc-linux.elf/upx-3.91 " expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\ -55b7aa381930b82856d1b8074b1afc38a9fd25874bdf5ff5b43ca7874d000f62 *amd64-linux.elf/upx-3.91 +ef82f7aa0ebfffa59c0d6e57de884615d3614187cba20a2ef921389975fa3ad1 *amd64-linux.elf/upx-3.91 66653a91c355a1ad1ab7b07c6c20b2d2899d0f42078683d0f4d540df476b1afb *arm-wince.pe/upx-3.91.exe -9b979047e8849e30c38632f20a5f06a74240cf66e589897470676f8326119ee4 *armeb-linux.elf/upx-3.91 +17ef04c40670aa265a1388762d8c5af50f7e8e98576424683f518056715683d3 *armeb-linux.elf/upx-3.91 490a196fbba4a8f21bfb9ac2a3b92a6dc7e287f255a3ab987f7d29d5a75d8db4 *i386-dos32.djgpp2.coff/upx-3.91.exe -12f7fc10d0410ccf90f2963aed6bcb24aa7b4a289d52fd7517f2be59627aaca5 *i386-linux.elf/upx-3.91 +f2e83d8f05c2317149d871c75e3c4a0c5dc9e6dfb1badf208f0e67f8086ced64 *i386-linux.elf/upx-3.91 14b192b5419ca0ec2b3f238dc6ed9c17596e82ff2674a299d4b0a76d118a73de *i386-win32.pe/upx-3.91.exe 2eb756cf3c7e4f80fea379a267071c981f3ab1fbb3eaab7057ca18a2b400fb8f *m68k-atari.tos/upx-3.91.ttp -0e620b76b639eb8bf5dac62b493ad9293b179f9653bcca062d03e736a2c9c26e *mipsel-linux.elf/upx-3.91 -52ad6d57fae67e41198484c0a80ddb54cdd53169baf3b841aa6a99b89d5f8a03 *powerpc-linux.elf/upx-3.91 +d13aa0361ce8354705e62ead463d8688c0db0fb0ca671af65e2a10aad9ad7eae *mipsel-linux.elf/upx-3.91 +4aeef0d4ce290cf77036ba668e20c42b6aacb276505726fa62afd4d2094454fe *powerpc-linux.elf/upx-3.91 " ########## end .sha256sums.recreate diff --git a/src/p_elf_enum.h b/src/p_elf_enum.h index 20acedca..b422697a 100644 --- a/src/p_elf_enum.h +++ b/src/p_elf_enum.h @@ -148,6 +148,7 @@ DT_NULL = 0, /* End flag */ DT_NEEDED = 1, /* Name of needed library */ DT_PLTRELSZ = 2, /* Size in bytes of PLT relocs */ + DT_PLTGOT = 3, /* Processor defined value */ DT_HASH = 4, /* Hash table of symbol names */ DT_STRTAB = 5, /* String table */ DT_SYMTAB = 6, /* Symbol table */ @@ -155,6 +156,7 @@ DT_RELASZ = 8, /* Total size of Rela relocs */ DT_RELAENT = 9, /* Size of one RELA relocation */ DT_INIT = 12, /* Address of init function */ + DT_FINI = 13, /* Address of termination function */ DT_REL = 17, /* Relocations which contain no addend */ DT_RELSZ = 18, /* Total size of Rel relocs */ DT_RELENT = 19, /* Size of one Rel relocation */ @@ -162,6 +164,9 @@ DT_PLTREL = 20, /* Type of reloc in PLT */ DT_TEXTREL = 22, /* Reloc might modify .text */ DT_JMPREL = 23, /* Address of PLT relocs */ + DT_INIT_ARRAY = 25, /* Array with addresses of init fct */ + DT_FINI_ARRAY = 26, /* Array with addresses of fini fct */ + DT_PREINIT_ARRAY = 32, /* Array with addresses of preinit fct*/ DT_CHECKSUM = 0x6ffffdf8, /* Only for prelink? */ DT_GNU_HASH = 0x6ffffef5, /* GNU-style hash table */ DT_VERSYM = 0x6ffffff0, /* version[] for each symbol */ @@ -209,6 +214,27 @@ #endif +#ifdef WANT_REL_ENUM //{ +static unsigned ELF32_R_TYPE(unsigned x) { return 0xff & x; } +static unsigned ELF64_R_TYPE(upx_uint64_t x) { return 0xffffffff & x; } + + enum { // relocation types + R_386_RELATIVE = 8, + R_AARCH64_RELATIVE = 1027, + R_ARM_RELATIVE = 23, + R_PPC_RELATIVE = 22, + R_PPC64_RELATIVE = R_PPC_RELATIVE, + R_X86_64_RELATIVE = 8, + + R_386_JMP_SLOT = 7, + R_AARCH64_JUMP_SLOT = 1026, + R_ARM_JUMP_SLOT = 22, + R_PPC_JMP_SLOT = 21, + R_PPC64_JMP_SLOT = R_PPC_JMP_SLOT, + R_X86_64_JUMP_SLOT = 7 + }; +#endif //} + #ifdef WANT_NHDR_ENUM #undef WANT_NHDR_ENUM enum { // ELF PT_NOTE types diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index e5871d77..08769c9b 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -87,6 +87,7 @@ fpad4(OutputFile *fo) return d + len; } +#if 0 //{ unused static off_t fpad8(OutputFile *fo) { @@ -96,6 +97,7 @@ fpad8(OutputFile *fo) fo->write(&zero, d); return d + len; } +#endif //} static unsigned funpad4(InputFile *fi) @@ -268,8 +270,8 @@ PackLinuxElf32::PackLinuxElf32help1(InputFile *f) alloc_file_image(file_image, file_size); f->seek(0, SEEK_SET); f->readx(file_image, file_size); - phdri= (Elf32_Phdr *)(e_phoff + file_image); // do not free() !! - shdri= (Elf32_Shdr const *)(e_shoff + file_image); // do not free() !! + phdri= (Elf32_Phdr *)(e_phoff + file_image); // do not free() !! + shdri= (Elf32_Shdr *)(e_shoff + file_image); // do not free() !! sec_dynsym = elf_find_section_type(Elf32_Shdr::SHT_DYNSYM); if (sec_dynsym) { unsigned t = get_te32(&sec_dynsym->sh_link); @@ -307,8 +309,8 @@ off_t PackLinuxElf::pack3(OutputFile *fo, Filter &ft) // return length of output fo->write(&zero, t); len += t; - set_te32(&disp, 2*sizeof(disp) + len - (sz_elf_hdrs + sizeof(p_info) + sizeof(l_info))); - fo->write(&disp, sizeof(disp)); // .e_entry - &first_b_info + set_te32(&disp, sz_elf_hdrs + sizeof(p_info) + sizeof(l_info)); + fo->write(&disp, sizeof(disp)); // offset(b_info) len += sizeof(disp); set_te32(&disp, len); // distance back to beginning (detect dynamic reloc) fo->write(&disp, sizeof(disp)); @@ -319,15 +321,21 @@ off_t PackLinuxElf::pack3(OutputFile *fo, Filter &ft) // return length of output ? jni_onload_va : elf_unsigned_dynamic(Elf32_Dyn::DT_INIT) ); set_te32(&disp, firstpc_va - load_va); - fo->write(&disp, sizeof(disp)); + if (opt->o_unix.android_shlib) { // the extra page + set_te32(&disp, asl_delta + firstpc_va - load_va); + } + fo->write(&disp, sizeof(disp)); // DT_INIT.d_val len += sizeof(disp); set_te32(&disp, hatch_off); - fo->write(&disp, sizeof(disp)); + fo->write(&disp, sizeof(disp)); // offset(hatch) len += sizeof(disp); + if (opt->o_unix.android_shlib) { + xct_off += asl_delta; // the extra page + } set_te32(&disp, xct_off); - fo->write(&disp, sizeof(disp)); + fo->write(&disp, sizeof(disp)); // offset(dst for f_exp) len += sizeof(disp); } sz_pack2 = len; // 0 mod 8 @@ -362,6 +370,8 @@ off_t PackLinuxElf32::pack3(OutputFile *fo, Filter &ft) fo->write(&hdr, sizeof(hdr)); flen = fpad4(fo); + set_te32(&elfout.phdr[0].p_filesz, sz_pack2 + lsize); + set_te32(&elfout.phdr[0].p_memsz, sz_pack2 + lsize); if (0==xct_off) { // not shared library; adjust PT_LOAD v_hole = page_mask & (~page_mask + v_hole + get_te32(&elfout.phdr[0].p_vaddr)); set_te32(&elfout.phdr[1].p_vaddr, v_hole); @@ -398,8 +408,8 @@ off_t PackLinuxElf32::pack3(OutputFile *fo, Filter &ft) set_te32(&phdr->p_align, align); } off += (align-1) & (ioff - off); - fi->seek(ioff, SEEK_SET); fi->readx(ibuf, len); - fo->seek( off, SEEK_SET); fo->write(ibuf, len); + fo->seek( off, SEEK_SET); + fo->write(ioff + file_image, len); so_slide = off - ioff; set_te32(&phdr->p_offset, so_slide + ioff); } @@ -436,9 +446,25 @@ off_t PackLinuxElf32::pack3(OutputFile *fo, Filter &ft) fo->rewrite(&word, sizeof(word)); flen = fo->seek(0, SEEK_END); } - ehdri.e_shnum = 0; - ehdri.e_shoff = 0; - ehdri.e_shstrndx = 0; + if (opt->o_unix.android_shlib) { + // Update {DYNAMIC}.sh_offset by so_slide. + Elf32_Shdr *shdr = shdri; + for (unsigned j = 0; j < e_shnum; ++shdr, ++j) { + if (Elf32_Shdr::SHT_DYNAMIC == get_te32(&shdr->sh_type)) { + upx_uint32_t offset = get_te32(&shdr->sh_offset); + set_te32(&shdr->sh_offset, so_slide - asl_delta + offset ); + fo->seek(j * sizeof(Elf32_Shdr) - asl_delta + xct_off, SEEK_SET); + fo->rewrite(shdr, sizeof(*shdr)); + fo->seek(0, SEEK_END); + break; + } + } + } + else { // !opt->o_unix.android_shlib) + ehdri.e_shnum = 0; + ehdri.e_shoff = 0; + ehdri.e_shstrndx = 0; + } } return flen; } @@ -522,8 +548,8 @@ off_t PackLinuxElf64::pack3(OutputFile *fo, Filter &ft) set_te64(&phdr->p_align, align); } off += (align-1) & (ioff - off); - fi->seek(ioff, SEEK_SET); fi->readx(ibuf, len); - fo->seek( off, SEEK_SET); fo->write(ibuf, len); + fo->seek( off, SEEK_SET); + fo->write(ioff + file_image, len); so_slide = off - ioff; set_te64(&phdr->p_offset, so_slide + ioff); } @@ -553,15 +579,40 @@ off_t PackLinuxElf64::pack3(OutputFile *fo, Filter &ft) if (xct_off < ioff) set_te64(&phdr->p_offset, so_slide + ioff); } // end each Phdr + if (off_init) { // change DT_INIT.d_val fo->seek(off_init, SEEK_SET); upx_uint64_t word; set_te64(&word, va_init); fo->rewrite(&word, sizeof(word)); flen = fo->seek(0, SEEK_END); } - ehdri.e_shnum = 0; - ehdri.e_shoff = 0; - ehdri.e_shstrndx = 0; + if (opt->o_unix.android_shlib) { + // Update {DYNAMIC}.sh_offset by so_slide. + Elf64_Shdr *shdr = shdri; + for (unsigned j = 0; j < e_shnum; ++shdr, ++j) { + unsigned sh_type = get_te32(&shdr->sh_type); + if (Elf64_Shdr::SHT_DYNAMIC == sh_type) { + upx_uint64_t offset = get_te64(&shdr->sh_offset); + set_te64(&shdr->sh_offset, so_slide - asl_delta + offset ); + fo->seek(j * sizeof(Elf64_Shdr) - asl_delta + xct_off, SEEK_SET); + fo->rewrite(shdr, sizeof(*shdr)); + fo->seek(0, SEEK_END); + break; + } + if (Elf64_Shdr::SHT_RELA == sh_type + && n_jmp_slot + && !strcmp(".rela.plt", get_te32(&shdr->sh_name) + shstrtab)) { + upx_uint64_t f_off = elf_get_offset_from_address(plt_off); + fo->seek(f_off, SEEK_SET); + fo->rewrite(&file_image[f_off - so_slide], n_jmp_slot * sizeof(void *)); + } + } + } + else { // !opt->o_unix.android_shlib) + ehdri.e_shnum = 0; + ehdri.e_shoff = 0; + ehdri.e_shstrndx = 0; + } } return flen; } @@ -703,8 +754,8 @@ PackLinuxElf64::PackLinuxElf64help1(InputFile *f) alloc_file_image(file_image, file_size); f->seek(0, SEEK_SET); f->readx(file_image, file_size); - phdri= (Elf64_Phdr *)(e_phoff + file_image); // do not free() !! - shdri= (Elf64_Shdr const *)(e_shoff + file_image); // do not free() !! + phdri= (Elf64_Phdr *)(e_phoff + file_image); // do not free() !! + shdri= (Elf64_Shdr *)(e_shoff + file_image); // do not free() !! sec_dynsym = elf_find_section_type(Elf64_Shdr::SHT_DYNSYM); if (sec_dynsym) { unsigned t = get_te32(&sec_dynsym->sh_link); @@ -1718,7 +1769,37 @@ bool PackLinuxElf32::canPack() // Also allow __uClibc_main and __uClibc_start_main . if (Elf32_Ehdr::ET_DYN==get_te16(&ehdr->e_type)) { + // The DT_SYMTAB has no designated length. Read the whole file. + alloc_file_image(file_image, file_size); + fi->seek(0, SEEK_SET); + fi->readx(file_image, file_size); memcpy(&ehdri, ehdr, sizeof(Elf32_Ehdr)); + phdri= (Elf32_Phdr *)((size_t)e_phoff + file_image); // do not free() !! + shdri= (Elf32_Shdr *)((size_t)e_shoff + file_image); // do not free() !! + + sec_strndx = &shdri[get_te16(&ehdr->e_shstrndx)]; + shstrtab = (char const *)(get_te32(&sec_strndx->sh_offset) + file_image); + sec_dynsym = elf_find_section_type(Elf32_Shdr::SHT_DYNSYM); + if (sec_dynsym) + sec_dynstr = get_te32(&sec_dynsym->sh_link) + shdri; + + sec_strndx = &shdri[get_te16(&ehdr->e_shstrndx)]; + shstrtab = (char const *)(get_te32(&sec_strndx->sh_offset) + file_image); + if (Elf32_Shdr::SHT_STRTAB != get_te32(&sec_strndx->sh_type) + || 0!=strcmp((char const *)".shstrtab", + &shstrtab[get_te32(&sec_strndx->sh_name)]) ) { + throwCantPack("bad e_shstrndx"); + } + + phdr= phdri; + for (int j= e_phnum; --j>=0; ++phdr) + if (Elf32_Phdr::PT_DYNAMIC==get_te32(&phdr->p_type)) { + dynseg= (Elf32_Dyn const *)(check_pt_dynamic(phdr) + file_image); + break; + } + // elf_find_dynamic() returns 0 if 0==dynseg. + dynstr= (char const *)elf_find_dynamic(Elf32_Dyn::DT_STRTAB); + dynsym= (Elf32_Sym const *)elf_find_dynamic(Elf32_Dyn::DT_SYMTAB); if (Elf32_Dyn::DF_1_PIE & elf_unsigned_dynamic(Elf32_Dyn::DT_FLAGS_1) || calls_crt1((Elf32_Rel const *)elf_find_dynamic(Elf32_Dyn::DT_REL), @@ -1898,14 +1979,20 @@ PackLinuxElf64::canPack() fi->seek(0, SEEK_SET); fi->readx(file_image, file_size); memcpy(&ehdri, ehdr, sizeof(Elf64_Ehdr)); - phdri= (Elf64_Phdr *)((size_t)e_phoff + file_image); // do not free() !! - shdri= (Elf64_Shdr const *)((size_t)e_shoff + file_image); // do not free() !! + phdri= (Elf64_Phdr *)((size_t)e_phoff + file_image); // do not free() !! + shdri= (Elf64_Shdr *)((size_t)e_shoff + file_image); // do not free() !! - //sec_strndx = &shdri[ehdr->e_shstrndx]; - //shstrtab = (char const *)(sec_strndx->sh_offset + file_image); sec_dynsym = elf_find_section_type(Elf64_Shdr::SHT_DYNSYM); if (sec_dynsym) - sec_dynstr = get_te64(&sec_dynsym->sh_link) + shdri; + sec_dynstr = get_te32(&sec_dynsym->sh_link) + shdri; + + sec_strndx = &shdri[get_te16(&ehdr->e_shstrndx)]; + shstrtab = (char const *)(get_te64(&sec_strndx->sh_offset) + file_image); + if (Elf64_Shdr::SHT_STRTAB != get_te32(&sec_strndx->sh_type) + || 0!=strcmp((char const *)".shstrtab", + &shstrtab[get_te32(&sec_strndx->sh_name)]) ) { + throwCantPack("bad e_shstrndx"); + } phdr= phdri; for (int j= e_phnum; --j>=0; ++phdr) @@ -1945,9 +2032,23 @@ PackLinuxElf64::canPack() } Elf64_Shdr const *shdr = shdri; xct_va = ~0ull; - for (int j= e_shnum; --j>=0; ++shdr) { - if (Elf64_Shdr::SHF_EXECINSTR & get_te32(&shdr->sh_flags)) { - xct_va = umin64(xct_va, get_te64(&shdr->sh_addr)); + if (e_shnum) { + for (int j= e_shnum; --j>=0; ++shdr) { + if (Elf64_Shdr::SHF_EXECINSTR & get_te32(&shdr->sh_flags)) { + xct_va = umin64(xct_va, get_te64(&shdr->sh_addr)); + } + } + } + else { // no Sections; use heuristics + upx_uint64_t const strsz = elf_unsigned_dynamic(Elf64_Dyn::DT_STRSZ); + upx_uint64_t const strtab = elf_unsigned_dynamic(Elf64_Dyn::DT_STRTAB); + upx_uint64_t const relsz = elf_unsigned_dynamic(Elf64_Dyn::DT_RELSZ); + upx_uint64_t const rel = elf_unsigned_dynamic(Elf64_Dyn::DT_REL); + upx_uint64_t const init = elf_unsigned_dynamic(Elf64_Dyn::DT_INIT); + if ((init == (relsz + rel ) && rel == (strsz + strtab)) + || (init == (strsz + strtab) && strtab == (relsz + rel )) + ) { + xct_va = init; } } // Rely on 0==elf_unsigned_dynamic(tag) if no such tag. @@ -2404,6 +2505,10 @@ PackLinuxElf64::generateElfHdr( } } +#define WANT_REL_ENUM +#include "p_elf_enum.h" +#undef WANT_REL_ENUM + void PackLinuxElf32::pack1(OutputFile *fo, Filter & /*ft*/) { fi->seek(0, SEEK_SET); @@ -2412,7 +2517,7 @@ void PackLinuxElf32::pack1(OutputFile *fo, Filter & /*ft*/) sz_phdrs = e_phnum * get_te16(&ehdri.e_phentsize); // Remember all PT_NOTE, and find lg2_page from PT_LOAD. - Elf32_Phdr const *phdr = phdri; + Elf32_Phdr *phdr = phdri; note_size = 0; for (unsigned j=0; j < e_phnum; ++phdr, ++j) { if (phdr->PT_NOTE32 == get_te32(&phdr->p_type)) { @@ -2450,34 +2555,143 @@ void PackLinuxElf32::pack1(OutputFile *fo, Filter & /*ft*/) progid = 0; // getRandomId(); not useful, so do not clutter if (0!=xct_off) { // shared library - fi->seek(0, SEEK_SET); - fi->readx(ibuf, xct_off); - sz_elf_hdrs = xct_off; - fo->write(ibuf, xct_off); + fo->write(file_image, xct_off); // before the first SHF_EXECINSTR (typ ".plt") + if (opt->o_unix.android_shlib) { + // In order to pacify the runtime linker on Android "O" ("Oreo"), + // we will splice-in a 4KiB page that contains an "extra" copy + // of the Shdr and shstrtab. + xct_va += asl_delta; + //xct_off += asl_delta; // not yet + + // Relocate PT_DYNAMIC (in 2nd PT_LOAD) + Elf32_Dyn *dyn = const_cast(dynseg); + for (; dyn->d_tag; ++dyn) { + unsigned d_tag = get_te32(&dyn->d_tag); + if (Elf32_Dyn::DT_FINI == d_tag + || Elf32_Dyn::DT_FINI_ARRAY == d_tag + || Elf32_Dyn::DT_INIT_ARRAY == d_tag + || Elf32_Dyn::DT_PREINIT_ARRAY == d_tag + || Elf32_Dyn::DT_PLTGOT == d_tag) { + unsigned d_val = get_te32(&dyn->d_val); + set_te32(&dyn->d_val, asl_delta + d_val); + } + } + + // Relocate dynsym (DT_SYMTAB) which is below xct_va + Elf32_Sym *sym = const_cast(dynsym); + unsigned off_dynsym = get_te32(&sec_dynsym->sh_offset); + unsigned sz_dynsym = get_te32(&sec_dynsym->sh_size); + for (int j = sz_dynsym / sizeof(Elf32_Sym); --j>=0; ++sym) { + unsigned symval = get_te32(&sym->st_value); + unsigned symsec = get_te16(&sym->st_shndx); + if (Elf32_Sym::SHN_UNDEF != symsec + && Elf32_Sym::SHN_ABS != symsec + && xct_off <= symval) { + set_te32(&sym->st_value, asl_delta + symval); + } + } + fo->seek(off_dynsym, SEEK_SET); fo->rewrite(dynsym, sz_dynsym); + + set_te32(&ehdri.e_shoff, sz_elf_hdrs); + fo->seek(0, SEEK_SET); fo->rewrite(&ehdri, sizeof(ehdri)); + + // Relocate Phdr virtual addresses, but not physical offsets and sizes + /* Elf32_Phdr * */ phdr = phdri; + for (int j = e_phnum; --j>=0; ++phdr) { + unsigned offset = get_te32(&phdr->p_offset); + if (xct_off <= offset) { // above the extra page + //set_te32(&phdr->p_offset, asl_delta + offset); // physical + unsigned addr = get_te32(&phdr->p_paddr); + set_te32(&phdr->p_paddr, asl_delta + addr); + addr = get_te32(&phdr->p_vaddr); + set_te32(&phdr->p_vaddr, asl_delta + addr); + } + // .p_filesz,.p_memsz are updated in ::pack3 + } + fo->rewrite(phdri, e_phnum * sizeof(Elf32_Phdr)); // adjacent to Ehdr + + // Relocate Shdr; and Rela, Rel (below xct_off) + Elf32_Shdr *shdr = shdri; + unsigned sz_shstrtab = get_te32(&sec_strndx->sh_size); + for (int j = e_shnum; --j>=0; ++shdr) { + unsigned sh_type = get_te32(&shdr->sh_type); + unsigned sh_size = get_te32(&shdr->sh_size); + unsigned sh_offset = get_te32(&shdr->sh_offset); + unsigned sh_entsize = get_te32(&shdr->sh_entsize); + if (xct_off <= sh_offset) { + set_te32(&shdr->sh_offset, asl_delta + sh_offset); + uint32_t addr = get_te32(&shdr->sh_addr); + set_te32(&shdr->sh_addr, asl_delta + addr); + } + if (Elf32_Shdr::SHT_RELA== sh_type) { + if (sizeof(Elf32_Rela) != sh_entsize) { + char msg[50]; + snprintf(msg, sizeof(msg), "bad Rela.sh_entsize %u", sh_entsize); + throwCantPack(msg); + } + Elf32_Rela *rela = (Elf32_Rela *)(sh_offset + file_image); + for (int k = sh_size / sh_entsize; --k >= 0; ++rela) { + unsigned r_offset = get_te32(&rela->r_offset); + if (xct_off <= r_offset) { + set_te32(&rela->r_offset, asl_delta + r_offset); + } + } + fo->seek(sh_offset, SEEK_SET); + fo->rewrite(sh_offset + file_image, sh_size); + } + if (Elf32_Shdr::SHT_REL == sh_type) { + if (sizeof(Elf32_Rel) != sh_entsize) { + char msg[50]; + snprintf(msg, sizeof(msg), "bad Rel.sh_entsize %u", sh_entsize); + throwCantPack(msg); + } + Elf32_Rel *rel = (Elf32_Rel *)(sh_offset + file_image); + for (int k = sh_size / sh_entsize; --k >= 0; ++rel) { + unsigned r_offset = get_te32(&rel->r_offset); + if (xct_off <= r_offset) { + set_te32(&rel->r_offset, asl_delta + r_offset); + } + // r_offset must be in 2nd PT_LOAD; .p_vaddr was already relocated + unsigned d = elf_get_offset_from_address(asl_delta + r_offset); + unsigned w = get_te32(&file_image[d]); + unsigned r_info = get_te32(&rel->r_info); + unsigned r_type = ELF32_R_TYPE(r_info); + if (xct_off <= w + && Elf32_Ehdr::EM_ARM == e_machine + && ( R_ARM_RELATIVE == r_type + || R_ARM_JUMP_SLOT == r_type)) { + set_te32(&file_image[d], asl_delta + w); + } + } + fo->seek(sh_offset, SEEK_SET); + fo->rewrite(sh_offset + file_image, sh_size); + } + } + + // New copy of Shdr + set_te32(&sec_strndx->sh_offset, (e_shnum * sizeof(Elf32_Shdr)) + sz_elf_hdrs); + fo->seek(xct_off, SEEK_SET); fo->write(shdri, e_shnum * sizeof(Elf32_Shdr)); + + // New copy of Shdr[.e_shstrndx].[ sh_offset, +.sh_size ) + fo->write(shstrtab, sz_shstrtab); + + sz_elf_hdrs = fpad4(fo); + //xct_off += asl_delta; // wait until ::pack3 + } memset(&linfo, 0, sizeof(linfo)); fo->write(&linfo, sizeof(linfo)); } // if the preserve build-id option was specified if (opt->o_unix.preserve_build_id) { - Elf32_Shdr *shdr = NULL; - - Elf32_Shdr const *tmp = shdri; - - if (! shdri) { - shdr = New(Elf32_Shdr, e_shnum); - - fi->seek(0,SEEK_SET); - fi->seek(ehdri.e_shoff,SEEK_SET); - fi->readx((void*)shdr,ehdri.e_shentsize*ehdri.e_shnum); - - // set this so we can use elf_find_section_name - shdri = (Elf32_Shdr *)shdr; + // set this so we can use elf_find_section_name + e_shnum = get_te16(&ehdri.e_shnum); + if (!shdri) { + shdri = (Elf32_Shdr *)&file_image[get_te32(&ehdri.e_shoff)]; } - //set the shstrtab - sec_strndx = &shdri[ehdri.e_shstrndx]; + sec_strndx = &shdri[get_te16(&ehdri.e_shstrndx)]; char *strtab = New(char, sec_strndx->sh_size); fi->seek(0,SEEK_SET); @@ -2500,22 +2714,14 @@ void PackLinuxElf32::pack1(OutputFile *fo, Filter & /*ft*/) memset(&shdrout,0,sizeof(shdrout)); //setup the build-id - memcpy(&shdrout.shdr[1],buildid, sizeof(shdrout.shdr[1])); + memcpy(&shdrout.shdr[1], buildid, sizeof(shdrout.shdr[1])); shdrout.shdr[1].sh_name = 1; //setup the shstrtab - memcpy(&shdrout.shdr[2],sec_strndx, sizeof(shdrout.shdr[2])); + memcpy(&shdrout.shdr[2], sec_strndx, sizeof(shdrout.shdr[2])); shdrout.shdr[2].sh_name = 20; shdrout.shdr[2].sh_size = 29; //size of our static shstrtab } - - // repoint shdr in case it is used by code some where else - if (shdr) { - shdri = tmp; - delete [] shdr; - shdr = NULL; - sec_strndx = NULL; - } } } @@ -2620,7 +2826,7 @@ void PackLinuxElf64::pack1(OutputFile *fo, Filter & /*ft*/) assert(e_phoff == sizeof(Elf64_Ehdr)); // checked by canPack() sz_phdrs = e_phnum * get_te16(&ehdri.e_phentsize); - Elf64_Phdr const *phdr = phdri; + Elf64_Phdr *phdr = phdri; note_size = 0; for (unsigned j=0; j < e_phnum; ++phdr, ++j) { if (phdr->PT_NOTE64 == get_te32(&phdr->p_type)) { @@ -2655,11 +2861,154 @@ void PackLinuxElf64::pack1(OutputFile *fo, Filter & /*ft*/) progid = 0; // getRandomId(); not useful, so do not clutter if (0!=xct_off) { // shared library - fi->seek(0, SEEK_SET); - fi->readx(ibuf, xct_off); - sz_elf_hdrs = xct_off; - fo->write(ibuf, xct_off); + fo->write(file_image, xct_off); // before the first SHF_EXECINSTR (typ ".plt") + if (opt->o_unix.android_shlib) { + // In order to pacify the runtime linker on Android "O" ("Oreo"), + // we will splice-in a 4KiB page that contains an "extra" copy + // of the Shdr and shstrtab. + xct_va += asl_delta; + //xct_off += asl_delta; // not yet + + // Relocate PT_DYNAMIC (in 2nd PT_LOAD) + Elf64_Dyn *dyn = const_cast(dynseg); + for (; dyn->d_tag; ++dyn) { + upx_uint64_t d_tag = get_te64(&dyn->d_tag); + if (Elf64_Dyn::DT_FINI == d_tag + || Elf64_Dyn::DT_FINI_ARRAY == d_tag + || Elf64_Dyn::DT_INIT_ARRAY == d_tag + || Elf64_Dyn::DT_PREINIT_ARRAY == d_tag + || Elf64_Dyn::DT_PLTGOT == d_tag) { + upx_uint64_t d_val = get_te64(&dyn->d_val); + set_te64(&dyn->d_val, asl_delta + d_val); + } + } + + // Relocate dynsym (DT_SYMTAB) which is below xct_va + Elf64_Sym *sym = const_cast(dynsym); + upx_uint64_t off_dynsym = get_te64(&sec_dynsym->sh_offset); + upx_uint64_t sz_dynsym = get_te64(&sec_dynsym->sh_size); + for (int j = sz_dynsym / sizeof(Elf64_Sym); --j>=0; ++sym) { + upx_uint64_t symval = get_te64(&sym->st_value); + unsigned symsec = get_te16(&sym->st_shndx); + if (Elf64_Sym::SHN_UNDEF != symsec + && Elf64_Sym::SHN_ABS != symsec + && xct_off <= symval) { + set_te64(&sym->st_value, asl_delta + symval); + } + } + fo->seek(off_dynsym, SEEK_SET); fo->rewrite(dynsym, sz_dynsym); + + set_te64(&ehdri.e_shoff, sz_elf_hdrs); + fo->seek(0, SEEK_SET); fo->rewrite(&ehdri, sizeof(ehdri)); + + // Relocate Phdr virtual addresses, but not physical offsets and sizes + /* Elf64_Phdr * */ phdr = phdri; + for (int j = e_phnum; --j>=0; ++phdr) { + upx_uint64_t offset = get_te64(&phdr->p_offset); + if (xct_off <= offset) { // above the extra page + //set_te64(&phdr->p_offset, asl_delta + offset); // physical + upx_uint64_t addr = get_te64(&phdr->p_paddr); + set_te64(&phdr->p_paddr, asl_delta + addr); + addr = get_te64(&phdr->p_vaddr); + set_te64(&phdr->p_vaddr, asl_delta + addr); + } + // .p_filesz,.p_memsz are updated in ::pack3 + } + fo->rewrite(phdri, e_phnum * sizeof(Elf64_Phdr)); // adjacent to Ehdr + + // Relocate Shdr; and Rela, Rel (below xct_off) + Elf64_Shdr *shdr = shdri; + upx_uint64_t sz_shstrtab = get_te64(&sec_strndx->sh_size); + for (int j = e_shnum; --j>=0; ++shdr) { + unsigned sh_type = get_te32(&shdr->sh_type); + upx_uint64_t sh_size = get_te64(&shdr->sh_size); + upx_uint64_t sh_offset = get_te64(&shdr->sh_offset); + upx_uint64_t sh_entsize = get_te64(&shdr->sh_entsize); + if (xct_off <= sh_offset) { + set_te64(&shdr->sh_offset, asl_delta + sh_offset); + upx_uint64_t addr = get_te64(&shdr->sh_addr); + set_te64(&shdr->sh_addr, asl_delta + addr); + } + if (Elf64_Shdr::SHT_RELA == sh_type) { + if (sizeof(Elf64_Rela) != sh_entsize) { + char msg[50]; + snprintf(msg, sizeof(msg), "bad Rela.sh_entsize %lu", (long)sh_entsize); + throwCantPack(msg); + } + n_jmp_slot = 0; + plt_off = ~0ull; + Elf64_Rela *rela = (Elf64_Rela *)(sh_offset + file_image); + for (int k = sh_size / sh_entsize; --k >= 0; ++rela) { + upx_uint64_t r_addend = get_te64(&rela->r_addend); + upx_uint64_t r_offset = get_te64(&rela->r_offset); + upx_uint64_t r_info = get_te64(&rela->r_info); + unsigned r_type = ELF64_R_TYPE(r_info); + if (xct_off <= r_offset) { + set_te64(&rela->r_offset, asl_delta + r_offset); + } + if (Elf64_Ehdr::EM_AARCH64 == e_machine) { + if (R_AARCH64_RELATIVE == r_type) { + if (xct_off <= r_addend) { + set_te64(&rela->r_addend, asl_delta + r_addend); + } + } + if (R_AARCH64_JUMP_SLOT == r_type) { + // .rela.plt contains offset of the "first time" target + if (plt_off > (asl_delta + r_offset)) { + plt_off = (asl_delta + r_offset); + } + upx_uint64_t d = elf_get_offset_from_address(asl_delta + r_offset); + upx_uint64_t w = get_te64(&file_image[d]); + if (xct_off <= w) { + set_te64(&file_image[d], asl_delta + w); + } + ++n_jmp_slot; + } + } + } + fo->seek(sh_offset, SEEK_SET); + fo->rewrite(sh_offset + file_image, sh_size); + } + if (Elf64_Shdr::SHT_REL == sh_type) { + if (sizeof(Elf64_Rel) != sh_entsize) { + char msg[50]; + snprintf(msg, sizeof(msg), "bad Rel.sh_entsize %lu", (long)sh_entsize); + throwCantPack(msg); + } + Elf64_Rel *rel = (Elf64_Rel *)(sh_offset + file_image); + for (int k = sh_size / sh_entsize; --k >= 0; ++rel) { + upx_uint64_t r_offset = get_te64(&rel->r_offset); + if (xct_off <= r_offset) { + set_te64(&rel->r_offset, asl_delta + r_offset); + } + // r_offset must be in 2nd PT_LOAD; .p_vaddr was already relocated + upx_uint64_t d = elf_get_offset_from_address(asl_delta + r_offset); + upx_uint64_t w = get_te64(&file_image[d]); + upx_uint64_t r_info = get_te32(&rel->r_info); + unsigned r_type = ELF64_R_TYPE(r_info); + if (xct_off <= w + && Elf64_Ehdr::EM_AARCH64 == e_machine + && ( R_AARCH64_RELATIVE == r_type + || R_AARCH64_JUMP_SLOT == r_type)) { + set_te64(&file_image[d], asl_delta + w); + } + } + fo->seek(sh_offset, SEEK_SET); + fo->rewrite(sh_offset + file_image, sh_size); + } + } + + // New copy of Shdr + set_te64(&sec_strndx->sh_offset, (e_shnum * sizeof(Elf64_Shdr)) + sz_elf_hdrs); + fo->seek(xct_off, SEEK_SET); fo->write(shdri, e_shnum * sizeof(Elf64_Shdr)); + + // New copy of Shdr[.e_shstrndx].[ sh_offset, +.sh_size ) + fo->write(shstrtab, sz_shstrtab); + + sz_elf_hdrs = fpad4(fo); + //xct_off += asl_delta; // wait until ::pack3 + } memset(&linfo, 0, sizeof(linfo)); fo->write(&linfo, sizeof(linfo)); } @@ -2667,27 +3016,12 @@ void PackLinuxElf64::pack1(OutputFile *fo, Filter & /*ft*/) // only execute if option present if (opt->o_unix.preserve_build_id) { // set this so we can use elf_find_section_name - e_shnum = ehdri.e_shnum; - - // there is a class member similar to this, but I did not - // want to assume it would be available - Elf64_Shdr const *tmp = shdri; - - Elf64_Shdr *shdr = NULL; - - if (! shdri) { - shdr = New(Elf64_Shdr, e_shnum); - - fi->seek(0,SEEK_SET); - fi->seek(ehdri.e_shoff,SEEK_SET); - fi->readx((void*)shdr,ehdri.e_shentsize*ehdri.e_shnum); - - // set this so we can use elf_find_section_name - shdri = (Elf64_Shdr *)shdr; + e_shnum = get_te16(&ehdri.e_shnum); + if (!shdri) { + shdri = (Elf64_Shdr *)&file_image[get_te32(&ehdri.e_shoff)]; } - //set the shstrtab - sec_strndx = &shdri[ehdri.e_shstrndx]; + sec_strndx = &shdri[get_te16(&ehdri.e_shstrndx)]; char *strtab = New(char, sec_strndx->sh_size); fi->seek(0,SEEK_SET); @@ -2710,20 +3044,14 @@ void PackLinuxElf64::pack1(OutputFile *fo, Filter & /*ft*/) memset(&shdrout,0,sizeof(shdrout)); //setup the build-id - memcpy(&shdrout.shdr[1],buildid, sizeof(shdrout.shdr[1])); + memcpy(&shdrout.shdr[1], buildid, sizeof(shdrout.shdr[1])); shdrout.shdr[1].sh_name = 1; //setup the shstrtab - memcpy(&shdrout.shdr[2],sec_strndx, sizeof(shdrout.shdr[2])); + memcpy(&shdrout.shdr[2], sec_strndx, sizeof(shdrout.shdr[2])); shdrout.shdr[2].sh_name = 20; shdrout.shdr[2].sh_size = 29; //size of our static shstrtab } - - if (shdr) { - shdri = tmp; - delete [] shdr; - shdr = NULL; - } } } @@ -2822,7 +3150,7 @@ int PackLinuxElf32::pack2(OutputFile *fo, Filter &ft) ? (sizeof(Elf32_Ehdr) + sz_phdrs) // main executable : xct_off; // shared library if (ft.id < 0x40) { - // FIXME: ?? ft.addvalue += delta; + // FIXME: ?? ft.addvalue += asl_delta; } x.offset += delta; x.size -= delta; @@ -2931,7 +3259,7 @@ int PackLinuxElf64::pack2(OutputFile *fo, Filter &ft) ? (sizeof(Elf64_Ehdr) + sz_phdrs) // main executable : xct_off; // shared library if (ft.id < 0x40) { - // FIXME: ?? ft.addvalue += delta; + // FIXME: ?? ft.addvalue += asl_delta; } x.offset += delta; x.size -= delta; @@ -3096,82 +3424,6 @@ void PackLinuxElf32::pack4(OutputFile *fo, Filter &ft) fo->write(buildid_data,shdrout.shdr[1].sh_size); } - if (0!=xct_off) { // shared library - if (opt->o_unix.android_shlib && shdri) { // dlopen() checks Elf32_Shdr vs Elf32_Phdr - unsigned load0_hi = ~0u; - Elf32_Phdr const *phdr = phdri; - for (unsigned j = 0; j < e_phnum; ++j, ++phdr) { - unsigned load0_lo = get_te32(&phdr->p_vaddr); - unsigned load0_sz = get_te32(&phdr->p_memsz); - if (PT_LOAD32==get_te32(&phdr->p_type) - && (xct_off - load0_lo) < load0_sz) { - load0_hi = load0_lo + load0_sz; - break; - } - } - MemBuffer smap(e_shnum); smap.clear(); // smap[0] = 0; // SHN_UNDEF - MemBuffer snew(e_shnum * sizeof(*shdri)); - Elf32_Shdr const *shdr = shdri; - unsigned k = 0; - for (unsigned j = 0; j < e_shnum; ++j, ++shdr) { - // Select some Elf32_Shdr by .sh_type - unsigned const type = get_te32(&shdr->sh_type); - unsigned const flags = get_te32(&shdr->sh_flags); - if (((Elf32_Shdr::SHT_STRTAB == type) && (Elf32_Shdr::SHF_ALLOC & flags)) - || ((Elf32_Shdr::SHT_DYNAMIC == type) && (Elf32_Shdr::SHF_ALLOC & flags)) - || ((Elf32_Shdr::SHT_ARM_ATTRIBUTES == type)) - || ( ((1+ Elf32_Shdr::SHT_LOOS) <= type) // SHT_ANDROID_REL - && ((2+ Elf32_Shdr::SHT_LOOS) >= type)) // SHT_ANDROID_RELA - ) { - Elf32_Shdr *const sptr = k + (Elf32_Shdr *)(void *)snew; - unsigned va = get_te32(&shdr->sh_addr); - if (xct_off <= va && va <= load0_hi) { - throwCantPack("Android-required Shdr in packed region"); - } - *sptr = *shdr; // copy old Elf32_Shdr - smap[j] = 1+ k++; // for later forwarding - } - } - if (k && fo) { - unsigned const new_shoff = fpad4(fo); - unsigned xtra_off = ((1+ k) * sizeof(*shdri)) + new_shoff; // 1+: shdr_undef - set_te32(&ehdri.e_shoff, new_shoff); - set_te16(&ehdri.e_shentsize, sizeof(*shdri)); - set_te16(&ehdri.e_shnum, 1+ k); - Elf32_Shdr shdr_undef; memset(&shdr_undef, 0, sizeof(shdr_undef)); - fo->write(&shdr_undef, sizeof(shdr_undef)); - - unsigned arm_attr_offset = 0; - unsigned arm_attr_size = 0; - for (unsigned j = 0; j < k; ++j) { // forward .sh_link - Elf32_Shdr *const sptr = j + (Elf32_Shdr *)(void *)snew; - unsigned const type = get_te32(&sptr->sh_type); - // work-around for https://bugs.launchpad.net/bugs/1712938 - if (Elf32_Shdr::SHT_ARM_ATTRIBUTES == type) { - arm_attr_offset = get_te32(&sptr->sh_offset); - arm_attr_size = get_te32(&sptr->sh_size); - set_te32(&sptr->sh_offset, xtra_off); - xtra_off += get_te32(&sptr->sh_size); - } - if (Elf32_Shdr::SHT_STRTAB == type) { // any SHT_STRTAB should work - set_te16(&elfout.ehdr.e_shstrndx, 1+ j); // 1+: shdr_undef - set_te16( &ehdri.e_shstrndx, 1+ j); // 1+: shdr_undef - } - unsigned sh_offset = get_te32(&sptr->sh_offset); - if (xct_off <= sh_offset) { - set_te32(&sptr->sh_offset, so_slide + sh_offset); - } - sptr->sh_name = 0; // we flushed .e_shstrndx - set_te16(&sptr->sh_link, smap[sptr->sh_link]); - set_te16(&sptr->sh_info, smap[sptr->sh_info]); // ? - } - fo->write(snew, k * sizeof(*shdri)); - if (arm_attr_offset) { - fo->write(&file_image[arm_attr_offset], arm_attr_size); - } - } - } - } // Cannot pre-round .p_memsz. If .p_filesz < .p_memsz, then kernel // tries to make .bss, which requires PF_W. // But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X. @@ -3234,82 +3486,6 @@ void PackLinuxElf64::pack4(OutputFile *fo, Filter &ft) fo->write(buildid_data,shdrout.shdr[1].sh_size); } - if (0!=xct_off) { // shared library - if (opt->o_unix.android_shlib && shdri) { // dlopen() checks Elf64_Shdr vs Elf64_Phdr - unsigned load0_hi = ~0u; - Elf64_Phdr const *phdr = phdri; - for (unsigned j = 0; j < e_phnum; ++j, ++phdr) { - upx_uint64_t load0_lo = get_te64(&phdr->p_vaddr); - upx_uint64_t load0_sz = get_te64(&phdr->p_memsz); - if (PT_LOAD64==get_te32(&phdr->p_type) - && (xct_off - load0_lo) < load0_sz) { - load0_hi = load0_lo + load0_sz; - break; - } - } - MemBuffer smap(e_shnum); smap.clear(); // smap[0] = 0; // SHN_UNDEF - MemBuffer snew(e_shnum * sizeof(*shdri)); - Elf64_Shdr const *shdr = shdri; - unsigned k = 0; - for (unsigned j = 0; j < e_shnum; ++j, ++shdr) { - // Select some Elf64_Shdr by .sh_type - unsigned const type = get_te32(&shdr->sh_type); - unsigned const flags = get_te32(&shdr->sh_flags); - if (((Elf64_Shdr::SHT_STRTAB == type) && (Elf64_Shdr::SHF_ALLOC & flags)) - || ((Elf64_Shdr::SHT_DYNAMIC == type) && (Elf64_Shdr::SHF_ALLOC & flags)) - || ((Elf64_Shdr::SHT_ARM_ATTRIBUTES == type)) - || ( ((1+ Elf64_Shdr::SHT_LOOS) <= type) // SHT_ANDROID_REL - && ((2+ Elf64_Shdr::SHT_LOOS) >= type)) // SHT_ANDROID_RELA - ) { - Elf64_Shdr *const sptr = k + (Elf64_Shdr *)(void *)snew; - upx_uint64_t va = get_te64(&shdr->sh_addr); - if (xct_off <= va && va <= load0_hi) { - throwCantPack("Android-required Shdr in packed region"); - } - *sptr = *shdr; // copy old Elf64_Shdr - smap[j] = 1+ k++; // for later forwarding - } - } - if (k && fo) { - unsigned long const new_shoff = fpad8(fo); - unsigned long xtra_off = ((1+ k) * sizeof(*shdri)) + new_shoff; // 1+: shdr_undef - set_te64(&ehdri.e_shoff, new_shoff); - set_te16(&ehdri.e_shentsize, sizeof(*shdri)); - set_te16(&ehdri.e_shnum, 1+ k); - Elf64_Shdr shdr_undef; memset(&shdr_undef, 0, sizeof(shdr_undef)); - fo->write(&shdr_undef, sizeof(shdr_undef)); - - unsigned long arm_attr_offset = 0; - unsigned long arm_attr_size = 0; - for (unsigned j = 0; j < k; ++j) { // forward .sh_link - Elf64_Shdr *const sptr = j + (Elf64_Shdr *)(void *)snew; - unsigned const type = get_te32(&sptr->sh_type); - // work-around for https://bugs.launchpad.net/bugs/1712938 - if (Elf64_Shdr::SHT_ARM_ATTRIBUTES == type) { - arm_attr_offset = get_te64(&sptr->sh_offset); - arm_attr_size = get_te64(&sptr->sh_size); - set_te64(&sptr->sh_offset, xtra_off); - xtra_off += get_te64(&sptr->sh_size); - } - if (Elf64_Shdr::SHT_STRTAB == type) { // any SHT_STRTAB should work - set_te16(&elfout.ehdr.e_shstrndx, 1+ j); // 1+: shdr_undef - set_te16( &ehdri.e_shstrndx, 1+ j); // 1+: shdr_undef - } - upx_uint64_t sh_offset = get_te64(&sptr->sh_offset); - if (xct_off <= sh_offset) { - set_te64(&sptr->sh_offset, so_slide + sh_offset); - } - sptr->sh_name = 0; // we flushed .e_shstrndx - set_te16(&sptr->sh_link, smap[sptr->sh_link]); - set_te16(&sptr->sh_info, smap[sptr->sh_info]); // ? - } - fo->write(snew, k * sizeof(*shdri)); - if (arm_attr_offset) { - fo->write(&file_image[arm_attr_offset], arm_attr_size); - } - } - } - } // Cannot pre-round .p_memsz. If .p_filesz < .p_memsz, then kernel // tries to make .bss, which requires PF_W. // But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X. @@ -3321,7 +3497,7 @@ void PackLinuxElf64::pack4(OutputFile *fo, Filter &ft) if (0!=xct_off) { // shared library fo->rewrite(&ehdri, sizeof(ehdri)); fo->rewrite(phdri, e_phnum * sizeof(*phdri)); - fo->seek(xct_off, SEEK_SET); + fo->seek(sz_elf_hdrs, SEEK_SET); fo->rewrite(&linfo, sizeof(linfo)); } else { @@ -3865,7 +4041,7 @@ PackLinuxElf64::elf_find_dynamic(unsigned int key) const && Elf64_Dyn::DT_NULL!=dynp->d_tag; ++dynp) if (get_te64(&dynp->d_tag)==key) { upx_uint64_t const t= elf_get_offset_from_address(get_te64(&dynp->d_val)); if (t) { - return (size_t)t + file_image; + return &((unsigned char const *)file_image)[(size_t)t]; } break; } diff --git a/src/p_lx_elf.h b/src/p_lx_elf.h index 9d31b560..9883bbec 100644 --- a/src/p_lx_elf.h +++ b/src/p_lx_elf.h @@ -68,6 +68,7 @@ protected: static unsigned gnu_hash(char const *) /*const*/; protected: + unsigned int const asl_delta = (1u<<12); // --android-shlib extra page unsigned e_type; unsigned e_phnum; /* Program header table entry count */ unsigned e_shnum; @@ -157,7 +158,7 @@ protected: protected: Elf32_Ehdr ehdri; // from input file Elf32_Phdr *phdri; // for input file - Elf32_Shdr const *shdri; // from input file + Elf32_Shdr *shdri; // from input file Elf32_Phdr const *gnu_stack; // propagate NX unsigned e_phoff; unsigned e_shoff; @@ -174,7 +175,7 @@ protected: Elf32_Sym const *jni_onload_sym; char const *shstrtab; // via Elf32_Shdr - Elf32_Shdr const *sec_strndx; + Elf32_Shdr *sec_strndx; Elf32_Shdr const *sec_dynsym; Elf32_Shdr const *sec_dynstr; @@ -282,7 +283,7 @@ protected: protected: Elf64_Ehdr ehdri; // from input file Elf64_Phdr *phdri; // for input file - Elf64_Shdr const *shdri; // from input file + Elf64_Shdr *shdri; // from input file Elf64_Phdr const *gnu_stack; // propagate NX upx_uint64_t e_phoff; upx_uint64_t e_shoff; @@ -290,6 +291,8 @@ protected: upx_uint64_t so_slide; unsigned char *note_body; // concatenated contents of PT_NOTEs, if any unsigned note_size; // total size of PT_NOTEs + unsigned n_jmp_slot; + upx_uint64_t plt_off; upx_uint64_t page_mask; // AND clears the offset-within-page Elf64_Dyn const *dynseg; // from PT_DYNAMIC @@ -299,7 +302,7 @@ protected: Elf64_Sym const *jni_onload_sym; char const *shstrtab; // via Elf64_Shdr - Elf64_Shdr const *sec_strndx; + Elf64_Shdr *sec_strndx; Elf64_Shdr const *sec_dynsym; Elf64_Shdr const *sec_dynstr; diff --git a/src/stub/arm.v5a-linux.shlib-init.h b/src/stub/arm.v5a-linux.shlib-init.h index d5f01c99..82ef6c39 100644 --- a/src/stub/arm.v5a-linux.shlib-init.h +++ b/src/stub/arm.v5a-linux.shlib-init.h @@ -1,5 +1,5 @@ /* arm.v5a-linux.shlib-init.h - created from arm.v5a-linux.shlib-init.bin, 15670 (0x3d36) bytes + created from arm.v5a-linux.shlib-init.bin, 15682 (0x3d42) bytes This file is part of the UPX executable compressor. @@ -31,14 +31,14 @@ */ -#define STUB_ARM_V5A_LINUX_SHLIB_INIT_SIZE 15670 -#define STUB_ARM_V5A_LINUX_SHLIB_INIT_ADLER32 0x7b6b47ca -#define STUB_ARM_V5A_LINUX_SHLIB_INIT_CRC32 0xe1410b0e +#define STUB_ARM_V5A_LINUX_SHLIB_INIT_SIZE 15682 +#define STUB_ARM_V5A_LINUX_SHLIB_INIT_ADLER32 0xf8754cee +#define STUB_ARM_V5A_LINUX_SHLIB_INIT_CRC32 0x76f5c9a0 -unsigned char stub_arm_v5a_linux_shlib_init[15670] = { +unsigned char stub_arm_v5a_linux_shlib_init[15682] = { /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 40, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0020 */ 220, 21, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0, +/* 0x0020 */ 232, 21, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0, /* 0x0030 */ 0, 0, 0, 0, 0, 0,160,225,247,200, 45,233, 13,176,160,225, /* 0x0040 */ 254,255,255,235,252, 64, 45,233, 0,112,129,224, 0, 80,224,227, /* 0x0050 */ 2, 65,160,227, 24, 0, 0,234, 24, 0,189,232, 7, 0, 64,224, @@ -327,693 +327,694 @@ unsigned char stub_arm_v5a_linux_shlib_init[15670] = { /* 0x1200 */ 20, 16,143,226, 2, 0,160,227, 4,112,160,227, 0, 0, 0,239, /* 0x1210 */ 127, 0,160,227, 1,112,160,227, 0, 0, 0,239, 80, 82, 79, 84, /* 0x1220 */ 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, -/* 0x1230 */ 32,102, 97,105,108,101,100, 46, 10, 0, 14, 32,160,225, 32, 16, -/* 0x1240 */ 66,226, 1, 80,160,225, 4, 64,145,228, 4, 80, 69,224, 4, 64, -/* 0x1250 */ 145,228, 4, 64,133,224, 36, 64,139,229, 4, 64,145,228, 4, 64, -/* 0x1260 */ 133,224, 4, 64, 45,229, 4, 64,145,228, 4, 0,133,224, 24, 16, -/* 0x1270 */ 128,226, 8,208, 77,226, 4, 64,145,229, 12, 16,129,226, 4, 16, -/* 0x1280 */ 129,224,176, 0, 0,235, 0, 90,160,225, 37, 91,160,225, 5, 65, -/* 0x1290 */ 132,224, 4, 64, 45,229, 5, 1, 64,224, 4, 0, 45,229, 5, 65, -/* 0x12a0 */ 68,224, 5, 1,128,224, 4, 80, 45,229, 46, 0, 0,235,255, 48, -/* 0x12b0 */ 3,226, 80, 0, 83,227, 14,240,160, 17, 33, 17,176,225, 0, 0, -/* 0x12c0 */ 80, 19, 14,240,160, 1, 1, 16, 65,226, 1, 33,144,231, 15, 52, -/* 0x12d0 */ 2,226, 11, 4, 83,227, 43, 0, 0, 26,255, 52, 2,226, 1, 32, -/* 0x12e0 */ 66,224,255, 36,194,227, 3, 32,130,225, 1, 33,128,231, 0, 0, -/* 0x12f0 */ 81,227, 33, 0, 0, 26, 30,255, 47,225, 4,224, 45,229, 5, 48, -/* 0x1300 */ 209,229, 4, 48, 45,229, 6, 48,209,229, 4, 48, 45,229, 4, 64, -/* 0x1310 */ 45,229, 4, 0, 45,229,176, 0, 0,235, 4, 80,160,225,176, 0, -/* 0x1320 */ 0,235, 4, 64, 45,229, 4, 32, 45,229, 40, 48, 75,226, 4, 48, -/* 0x1330 */ 45,229, 4, 0, 45,229, 4, 80, 45,229, 4, 16, 45,229, 3, 48, -/* 0x1340 */ 1,226, 3, 80,133,226, 3, 80,133,224, 24, 48, 27,229, 37, 33, -/* 0x1350 */ 131,224, 52, 48, 27,229,184, 0, 0,235, 28, 48, 27,229,184, 0, -/* 0x1360 */ 0,235,131, 0, 0,235, 0, 64,224,227, 50, 48,160,227, 3, 32, -/* 0x1370 */ 160,227, 16, 16, 27,229, 20, 0, 27,229, 0, 96,160,225,192,112, -/* 0x1380 */ 160,227, 0, 0, 0,239, 6, 0, 80,225, 84, 0, 0, 10,240, 1, -/* 0x1390 */ 240,231, 24, 80, 27,229, 12, 16, 27,229,120, 0, 0,235, 31, 0, -/* 0x13a0 */ 189,232, 52,255, 47,225, 4,208,141,226, 93, 0, 0,235, 0, 0, -/* 0x13b0 */ 0,239,247,200,189,232, 4, 64, 27,229, 3, 0,158,232, 3, 0, -/* 0x13c0 */ 132,232, 31, 16,189,232, 3, 0, 19,225,100, 0, 0, 10, 52,255, -/* 0x13d0 */ 47,225, 0, 0,157,229, 4, 16,157,229, 0, 32,160,227, 0, 16, -/* 0x13e0 */ 129,224, 8, 16,129,226, 2,112,160,227, 15,120,135,227, 0, 0, -/* 0x13f0 */ 0,239, 3, 0,189,232, 5, 32,160,227,125,112,160,227, 0, 0, -/* 0x1400 */ 0,239, 91,112,160,227, 3,128,189,232, 4, 80, 17,229,255, 84, -/* 0x1410 */ 197,227, 1, 80,133,226, 4, 48,145,228, 1, 80, 69,226, 4, 48, -/* 0x1420 */ 128,228, 7, 0, 21,227,117, 0, 0, 26,165, 81,176,225,130, 0, -/* 0x1430 */ 0, 10,212, 3, 45,233,220, 19,177,232, 1, 80, 85,226,220, 19, -/* 0x1440 */ 160,232,125, 0, 0, 26,212, 3,189,232, 30,255, 47,225, 4,224, -/* 0x1450 */ 45,229, 14, 48,160,225,184, 0, 0,235, 2, 17,160,225, 0, 64, -/* 0x1460 */ 224,227, 34, 48,160,227, 7, 32,160,227, 8, 16, 11,229, 0, 0, -/* 0x1470 */ 160,227,192,112,160,227, 0, 0, 0,239, 1, 10,112,227,145, 0, -/* 0x1480 */ 0, 58,240, 1,240,231, 12, 0, 11,229, 20, 16, 27,229, 24, 80, -/* 0x1490 */ 27,229,120, 0, 0,235, 68, 16, 27,229, 64, 80, 27,229, 3, 48, -/* 0x14a0 */ 1,226, 3, 16, 65,224, 3, 80,133,224, 0, 48,131,224, 68, 48, -/* 0x14b0 */ 11,229, 3, 80,133,226, 37, 81,160,225,120, 0, 0,235, 0, 32, -/* 0x14c0 */ 160,225, 52, 16, 27,229, 52, 0, 11,229,114, 0, 0,235, 28, 16, -/* 0x14d0 */ 27,229, 28, 0, 11,229,114, 0, 0,235, 4, 16,157,228, 4, 0, -/* 0x14e0 */ 45,229,114, 0, 0,235, 0, 16,160,225, 2, 0,160,225, 0, 32, -/* 0x14f0 */ 160,227, 2,112,160,227, 15,120,135,227, 0, 0, 0,239, 4,240, -/* 0x1500 */ 157,228, 1, 64,209,228, 1, 48,209,228, 3, 68,132,225, 1, 48, -/* 0x1510 */ 209,228, 3, 72,132,225, 1, 48,209,228, 3, 76,132,225, 30,255, -/* 0x1520 */ 47,225, 4, 48, 19,229,255, 52,195,227, 1, 48,131,226, 3, 32, -/* 0x1530 */ 130,224, 30,255, 47,225,102,105,108,101, 32,102,111,114,109, 97, -/* 0x1540 */ 116, 32,101,108,102, 51, 50, 45,108,105,116,116,108,101, 97,114, -/* 0x1550 */ 109, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, -/* 0x1560 */ 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83, -/* 0x1570 */ 105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, -/* 0x1580 */ 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 70,105,108, -/* 0x1590 */ 101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97, -/* 0x15a0 */ 103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, -/* 0x15b0 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, 48, 32, 32, 48, -/* 0x15c0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, -/* 0x15d0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, 52, 32, 32, 50, 42, 42, -/* 0x15e0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, -/* 0x15f0 */ 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, -/* 0x1600 */ 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, -/* 0x1610 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, -/* 0x1620 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x1630 */ 48, 48, 48, 52, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, -/* 0x1640 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, -/* 0x1650 */ 32, 32, 50, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, -/* 0x1660 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, -/* 0x1670 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x1680 */ 48, 48, 48, 48, 48, 48, 52, 52, 32, 32, 50, 42, 42, 48, 32, 32, -/* 0x1690 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, -/* 0x16a0 */ 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, -/* 0x16b0 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 51, 99, 32, 32, 48, -/* 0x16c0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, -/* 0x16d0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 52, 32, 32, 50, 42, 42, -/* 0x16e0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, -/* 0x16f0 */ 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, -/* 0x1700 */ 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, -/* 0x1710 */ 48, 48, 48, 48, 49, 50, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, -/* 0x1720 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x1730 */ 48, 48, 49, 56, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, -/* 0x1740 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, -/* 0x1750 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 50, 66, -/* 0x1760 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,101, -/* 0x1770 */ 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x1780 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, 97, 56, 32, -/* 0x1790 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, -/* 0x17a0 */ 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, -/* 0x17b0 */ 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, -/* 0x17c0 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 98, 56, 32, 32, 48, 48, 48, -/* 0x17d0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x17e0 */ 32, 48, 48, 48, 48, 48, 51, 57, 52, 32, 32, 50, 42, 42, 48, 32, -/* 0x17f0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, -/* 0x1800 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, -/* 0x1810 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, -/* 0x1820 */ 48, 48, 57, 51, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1830 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, -/* 0x1840 */ 52, 52, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, -/* 0x1850 */ 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, -/* 0x1860 */ 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x1870 */ 67, 49, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 52, 55, 56, 32, -/* 0x1880 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, -/* 0x1890 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,100, 56, 52, 32, 32, 50, -/* 0x18a0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, -/* 0x18b0 */ 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, -/* 0x18c0 */ 32, 57, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, -/* 0x18d0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, -/* 0x18e0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, -/* 0x18f0 */ 48, 48, 48, 49, 49,102, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, -/* 0x1900 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, -/* 0x1910 */ 89, 10, 32, 49, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, -/* 0x1920 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 51,101, 32, 32, 48, 48, -/* 0x1930 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1940 */ 32, 32, 48, 48, 48, 48, 49, 49,102, 99, 32, 32, 50, 42, 42, 48, -/* 0x1950 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, -/* 0x1960 */ 79, 78, 76, 89, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, -/* 0x1970 */ 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 50,102, 99, 32, -/* 0x1980 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, -/* 0x1990 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 51, 97, 32, 32, 50, -/* 0x19a0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, -/* 0x19b0 */ 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, -/* 0x19c0 */ 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, -/* 0x19d0 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, -/* 0x19e0 */ 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, -/* 0x19f0 */ 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, -/* 0x1a00 */ 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, -/* 0x1a10 */ 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, -/* 0x1a20 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, -/* 0x1a30 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, -/* 0x1a40 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1a50 */ 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, -/* 0x1a60 */ 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, -/* 0x1a70 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1a80 */ 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, -/* 0x1a90 */ 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, -/* 0x1aa0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1ab0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, -/* 0x1ac0 */ 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, -/* 0x1ad0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1ae0 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48, 48, -/* 0x1af0 */ 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, -/* 0x1b00 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1b10 */ 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b20 */ 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, -/* 0x1b30 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, -/* 0x1b40 */ 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, -/* 0x1b50 */ 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1b60 */ 108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, -/* 0x1b70 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 72, 69, -/* 0x1b80 */ 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, -/* 0x1b90 */ 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, -/* 0x1ba0 */ 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 48, -/* 0x1bb0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, -/* 0x1bc0 */ 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, -/* 0x1bd0 */ 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, -/* 0x1be0 */ 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, -/* 0x1bf0 */ 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115, -/* 0x1c00 */ 116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, -/* 0x1c10 */ 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, -/* 0x1c20 */ 48, 49, 51, 99, 32,117, 99,108, 95,110,114,118, 50,101, 95,100, -/* 0x1c30 */ 101, 99,111,109,112,114,101,115,115, 95, 56, 10, 48, 48, 48, 48, -/* 0x1c40 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, -/* 0x1c50 */ 50, 68, 9, 48, 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108, 95, -/* 0x1c60 */ 110,114,118, 50,100, 95,100,101, 99,111,109,112,114,101,115,115, -/* 0x1c70 */ 95, 56, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, -/* 0x1c80 */ 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, -/* 0x1c90 */ 101, 99, 32,117, 99,108, 95,110,114,118, 50, 98, 95,100,101, 99, -/* 0x1ca0 */ 111,109,112,114,101,115,115, 95, 56, 10, 48, 48, 48, 48, 48, 48, -/* 0x1cb0 */ 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x1cc0 */ 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, -/* 0x1cd0 */ 122,109, 97, 68,101, 99,111,100,101, 10, 48, 48, 48, 48, 48, 48, -/* 0x1ce0 */ 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, -/* 0x1cf0 */ 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, -/* 0x1d00 */ 95,100,101, 99,111,109,112,114,101,115,115, 10, 10, 82, 69, 76, -/* 0x1d10 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, -/* 0x1d20 */ 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, -/* 0x1d30 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, -/* 0x1d40 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, -/* 0x1d50 */ 10, 48, 48, 48, 48, 48, 48, 48, 99, 32, 82, 95, 65, 82, 77, 95, -/* 0x1d60 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, -/* 0x1d70 */ 65, 73, 78, 90, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, -/* 0x1d80 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, -/* 0x1d90 */ 86, 50, 69, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, -/* 0x1da0 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x1db0 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 49, 48, 32, -/* 0x1dc0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x1dd0 */ 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 54, 99, -/* 0x1de0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x1df0 */ 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 55, -/* 0x1e00 */ 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x1e10 */ 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, -/* 0x1e20 */ 55, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x1e30 */ 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, -/* 0x1e40 */ 48, 56, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x1e50 */ 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, -/* 0x1e60 */ 48, 48, 57, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x1e70 */ 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, -/* 0x1e80 */ 48, 48, 48, 57, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x1e90 */ 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, -/* 0x1ea0 */ 48, 48, 48, 48, 97, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x1eb0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, -/* 0x1ec0 */ 48, 48, 48, 48, 48, 97, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x1ed0 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, -/* 0x1ee0 */ 48, 48, 48, 48, 48, 48, 98, 99, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x1ef0 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, -/* 0x1f00 */ 10, 48, 48, 48, 48, 48, 48, 99, 52, 32, 82, 95, 65, 82, 77, 95, -/* 0x1f10 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, -/* 0x1f20 */ 69, 10, 48, 48, 48, 48, 48, 48, 99, 56, 32, 82, 95, 65, 82, 77, -/* 0x1f30 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, -/* 0x1f40 */ 50, 69, 10, 48, 48, 48, 48, 48, 48,100, 48, 32, 82, 95, 65, 82, -/* 0x1f50 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, -/* 0x1f60 */ 86, 50, 69, 10, 48, 48, 48, 48, 48, 48,100, 52, 32, 82, 95, 65, -/* 0x1f70 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, -/* 0x1f80 */ 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48,101, 48, 32, 82, 95, -/* 0x1f90 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x1fa0 */ 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48,101, 52, 32, 82, -/* 0x1fb0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x1fc0 */ 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48,101, 99, 32, -/* 0x1fd0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x1fe0 */ 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48,102, 56, -/* 0x1ff0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x2000 */ 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48,102, -/* 0x2010 */ 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x2020 */ 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 49, -/* 0x2030 */ 48, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2040 */ 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, -/* 0x2050 */ 49, 48, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x2060 */ 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, -/* 0x2070 */ 48, 49, 51, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x2080 */ 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, -/* 0x2090 */ 48, 48, 49, 51, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x20a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 10, 82, -/* 0x20b0 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, -/* 0x20c0 */ 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, 79, -/* 0x20d0 */ 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, -/* 0x20e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, -/* 0x20f0 */ 48, 48, 48, 48, 48, 48, 49, 48, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2100 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, -/* 0x2110 */ 10, 48, 48, 48, 48, 48, 48, 54, 99, 32, 82, 95, 65, 82, 77, 95, -/* 0x2120 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, -/* 0x2130 */ 68, 10, 48, 48, 48, 48, 48, 48, 55, 48, 32, 82, 95, 65, 82, 77, -/* 0x2140 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, -/* 0x2150 */ 50, 68, 10, 48, 48, 48, 48, 48, 48, 55, 56, 32, 82, 95, 65, 82, -/* 0x2160 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, -/* 0x2170 */ 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 56, 52, 32, 82, 95, 65, -/* 0x2180 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, -/* 0x2190 */ 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 57, 48, 32, 82, 95, -/* 0x21a0 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x21b0 */ 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 57, 99, 32, 82, -/* 0x21c0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x21d0 */ 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 97, 48, 32, -/* 0x21e0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x21f0 */ 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 97, 99, -/* 0x2200 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x2210 */ 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 98, -/* 0x2220 */ 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x2230 */ 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, -/* 0x2240 */ 99, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2250 */ 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, -/* 0x2260 */ 48, 99, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x2270 */ 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, -/* 0x2280 */ 48, 48,100, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x2290 */ 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, -/* 0x22a0 */ 48, 48, 48,101, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x22b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, -/* 0x22c0 */ 48, 48, 48, 48,101, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x22d0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, -/* 0x22e0 */ 48, 48, 48, 48, 48,102, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x22f0 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, -/* 0x2300 */ 48, 48, 48, 48, 48, 48,102, 99, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2310 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, -/* 0x2320 */ 10, 48, 48, 48, 48, 48, 49, 50, 48, 32, 82, 95, 65, 82, 77, 95, -/* 0x2330 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, -/* 0x2340 */ 68, 10, 48, 48, 48, 48, 48, 49, 50, 52, 32, 82, 95, 65, 82, 77, -/* 0x2350 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, -/* 0x2360 */ 50, 68, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, -/* 0x2370 */ 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, -/* 0x2380 */ 66, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, -/* 0x2390 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, -/* 0x23a0 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 49, 48, 32, 82, 95, -/* 0x23b0 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x23c0 */ 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 55, 48, 32, 82, -/* 0x23d0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x23e0 */ 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 55, 56, 32, -/* 0x23f0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x2400 */ 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 55, 99, -/* 0x2410 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x2420 */ 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 56, -/* 0x2430 */ 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x2440 */ 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, -/* 0x2450 */ 57, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2460 */ 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, -/* 0x2470 */ 48, 57, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x2480 */ 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, -/* 0x2490 */ 48, 48, 97, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x24a0 */ 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, -/* 0x24b0 */ 48, 48, 48, 98, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x24c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, -/* 0x24d0 */ 48, 48, 48, 48, 98, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x24e0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, -/* 0x24f0 */ 48, 48, 48, 48, 48, 98, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x2500 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, -/* 0x2510 */ 48, 48, 48, 48, 48, 48, 99, 52, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2520 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, -/* 0x2530 */ 10, 48, 48, 48, 48, 48, 48, 99, 56, 32, 82, 95, 65, 82, 77, 95, -/* 0x2540 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, -/* 0x2550 */ 66, 10, 48, 48, 48, 48, 48, 48,101, 52, 32, 82, 95, 65, 82, 77, -/* 0x2560 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, -/* 0x2570 */ 50, 66, 10, 48, 48, 48, 48, 48, 48,101, 56, 32, 82, 95, 65, 82, -/* 0x2580 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, -/* 0x2590 */ 86, 50, 66, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, -/* 0x25a0 */ 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, -/* 0x25b0 */ 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, -/* 0x25c0 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x25d0 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, -/* 0x25e0 */ 48, 48, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x25f0 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, -/* 0x2600 */ 10, 48, 48, 48, 48, 48, 48, 52, 99, 32, 82, 95, 65, 82, 77, 95, -/* 0x2610 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, -/* 0x2620 */ 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 56, 48, 32, -/* 0x2630 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x2640 */ 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 10, 82, 69, -/* 0x2650 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, -/* 0x2660 */ 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, -/* 0x2670 */ 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, -/* 0x2680 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, -/* 0x2690 */ 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 55, 52, 32, 82, 95, 65, -/* 0x26a0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x26b0 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, -/* 0x26c0 */ 57, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x26d0 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, -/* 0x26e0 */ 48, 48, 48, 48, 48, 48, 98, 56, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x26f0 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x2700 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 99, 99, 32, 82, -/* 0x2710 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x2720 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x2730 */ 48, 48,102, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x2740 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, -/* 0x2750 */ 48, 10, 48, 48, 48, 48, 48, 49, 48, 48, 32, 82, 95, 65, 82, 77, -/* 0x2760 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, -/* 0x2770 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 49, 48, 56, -/* 0x2780 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x2790 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, -/* 0x27a0 */ 48, 48, 48, 49, 52, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x27b0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x27c0 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 49, 57, 48, 32, 82, 95, 65, -/* 0x27d0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x27e0 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 49, -/* 0x27f0 */ 99, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2800 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, -/* 0x2810 */ 48, 48, 48, 48, 48, 49,100, 56, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2820 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x2830 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, 48, 52, 32, 82, -/* 0x2840 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x2850 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x2860 */ 48, 50, 49, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x2870 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, -/* 0x2880 */ 48, 10, 48, 48, 48, 48, 48, 50, 50, 48, 32, 82, 95, 65, 82, 77, -/* 0x2890 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, -/* 0x28a0 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, 51, 52, -/* 0x28b0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x28c0 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, -/* 0x28d0 */ 48, 48, 48, 50, 51, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x28e0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x28f0 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, 52, 48, 32, 82, 95, 65, -/* 0x2900 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x2910 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, -/* 0x2920 */ 52, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2930 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, -/* 0x2940 */ 48, 48, 48, 48, 48, 50, 53, 56, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2950 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x2960 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, 97, 52, 32, 82, -/* 0x2970 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x2980 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x2990 */ 48, 50, 99, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x29a0 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, -/* 0x29b0 */ 48, 10, 48, 48, 48, 48, 48, 50,101, 56, 32, 82, 95, 65, 82, 77, -/* 0x29c0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, -/* 0x29d0 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 51, 48, 52, -/* 0x29e0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x29f0 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, -/* 0x2a00 */ 48, 48, 48, 51, 48, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x2a10 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x2a20 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 51, 51, 99, 32, 82, 95, 65, -/* 0x2a30 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x2a40 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 51, -/* 0x2a50 */ 56, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2a60 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, -/* 0x2a70 */ 48, 48, 48, 48, 48, 51, 97, 48, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2a80 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x2a90 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 51, 97, 56, 32, 82, -/* 0x2aa0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x2ab0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x2ac0 */ 48, 51, 99, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x2ad0 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, -/* 0x2ae0 */ 48, 10, 48, 48, 48, 48, 48, 51,101, 48, 32, 82, 95, 65, 82, 77, -/* 0x2af0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, -/* 0x2b00 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 51,101, 56, -/* 0x2b10 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x2b20 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, -/* 0x2b30 */ 48, 48, 48, 52, 50, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x2b40 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x2b50 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 52, 51, 56, 32, 82, 95, 65, -/* 0x2b60 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x2b70 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 52, -/* 0x2b80 */ 54, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2b90 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, -/* 0x2ba0 */ 48, 48, 48, 48, 48, 52, 56, 52, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2bb0 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x2bc0 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 52, 56, 99, 32, 82, -/* 0x2bd0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x2be0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x2bf0 */ 48, 52, 98, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x2c00 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, -/* 0x2c10 */ 48, 10, 48, 48, 48, 48, 48, 52,100, 52, 32, 82, 95, 65, 82, 77, -/* 0x2c20 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, -/* 0x2c30 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 52,101, 99, -/* 0x2c40 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x2c50 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, -/* 0x2c60 */ 48, 48, 48, 52,102, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x2c70 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x2c80 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 53, 49, 56, 32, 82, 95, 65, -/* 0x2c90 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x2ca0 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 53, -/* 0x2cb0 */ 51, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2cc0 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, -/* 0x2cd0 */ 48, 48, 48, 48, 48, 53, 57, 56, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2ce0 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x2cf0 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 53, 97, 48, 32, 82, -/* 0x2d00 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x2d10 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x2d20 */ 48, 53, 99, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x2d30 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, -/* 0x2d40 */ 48, 10, 48, 48, 48, 48, 48, 53,101, 52, 32, 82, 95, 65, 82, 77, -/* 0x2d50 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, -/* 0x2d60 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 53,102, 99, -/* 0x2d70 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x2d80 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, -/* 0x2d90 */ 48, 48, 48, 54, 48, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x2da0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x2db0 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 54, 50, 52, 32, 82, 95, 65, -/* 0x2dc0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x2dd0 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 54, -/* 0x2de0 */ 52, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2df0 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, -/* 0x2e00 */ 48, 48, 48, 48, 48, 54, 56, 48, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2e10 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x2e20 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 54, 56, 99, 32, 82, -/* 0x2e30 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x2e40 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x2e50 */ 48, 54,100, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x2e60 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, -/* 0x2e70 */ 48, 10, 48, 48, 48, 48, 48, 54,101, 99, 32, 82, 95, 65, 82, 77, -/* 0x2e80 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, -/* 0x2e90 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 55, 49, 99, -/* 0x2ea0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x2eb0 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, -/* 0x2ec0 */ 48, 48, 48, 55, 50, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x2ed0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x2ee0 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 55, 54, 99, 32, 82, 95, 65, -/* 0x2ef0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x2f00 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 55, -/* 0x2f10 */ 55, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x2f20 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, -/* 0x2f30 */ 48, 48, 48, 48, 48, 55, 57, 99, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x2f40 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x2f50 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 55, 98, 56, 32, 82, -/* 0x2f60 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x2f70 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x2f80 */ 48, 55, 99, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x2f90 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, -/* 0x2fa0 */ 48, 10, 48, 48, 48, 48, 48, 55,100, 48, 32, 82, 95, 65, 82, 77, -/* 0x2fb0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, -/* 0x2fc0 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 55,102, 52, -/* 0x2fd0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x2fe0 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, -/* 0x2ff0 */ 48, 48, 48, 56, 50, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x3000 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x3010 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 56, 50, 99, 32, 82, 95, 65, -/* 0x3020 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x3030 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 56, -/* 0x3040 */ 55, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x3050 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, -/* 0x3060 */ 48, 48, 48, 48, 48, 56, 56, 56, 32, 82, 95, 65, 82, 77, 95, 80, -/* 0x3070 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, -/* 0x3080 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 56, 97, 48, 32, 82, -/* 0x3090 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x30a0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x30b0 */ 48, 56,101, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, -/* 0x30c0 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, -/* 0x30d0 */ 48, 10, 48, 48, 48, 48, 48, 56,102, 52, 32, 82, 95, 65, 82, 77, -/* 0x30e0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, -/* 0x30f0 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 56,102, 99, -/* 0x3100 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, -/* 0x3110 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, -/* 0x3120 */ 48, 48, 48, 57, 48, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x3130 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x3140 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 57, 50, 56, 32, 82, 95, 65, -/* 0x3150 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, -/* 0x3160 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 10, 82, 69, 76, 79, 67, -/* 0x3170 */ 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, -/* 0x3180 */ 82, 32, 91, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 93, 58, 10, -/* 0x3190 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, -/* 0x31a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, -/* 0x31b0 */ 10, 48, 48, 48, 48, 48, 48, 55, 56, 32, 82, 95, 65, 82, 77, 95, -/* 0x31c0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, -/* 0x31d0 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 56, 48, 32, -/* 0x31e0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x31f0 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, -/* 0x3200 */ 48, 48, 48, 56, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x3210 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x3220 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 97, 56, 32, 82, 95, 65, 82, -/* 0x3230 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, -/* 0x3240 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 97, -/* 0x3250 */ 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x3260 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, -/* 0x3270 */ 48, 48, 48, 48, 48,101, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x3280 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, -/* 0x3290 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 48, 48, 32, 82, 95, -/* 0x32a0 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x32b0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, -/* 0x32c0 */ 49, 48, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x32d0 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, -/* 0x32e0 */ 10, 48, 48, 48, 48, 48, 49, 49, 52, 32, 82, 95, 65, 82, 77, 95, -/* 0x32f0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, -/* 0x3300 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 49, 56, 32, -/* 0x3310 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x3320 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, -/* 0x3330 */ 48, 48, 49, 50, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x3340 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x3350 */ 49, 48, 10, 48, 48, 48, 48, 48, 49, 50, 56, 32, 82, 95, 65, 82, -/* 0x3360 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, -/* 0x3370 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 52, -/* 0x3380 */ 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x3390 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, -/* 0x33a0 */ 48, 48, 48, 48, 49, 52, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x33b0 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, -/* 0x33c0 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 53, 48, 32, 82, 95, -/* 0x33d0 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x33e0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, -/* 0x33f0 */ 49, 56, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x3400 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, -/* 0x3410 */ 10, 48, 48, 48, 48, 48, 49, 56, 56, 32, 82, 95, 65, 82, 77, 95, -/* 0x3420 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, -/* 0x3430 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 56, 99, 32, -/* 0x3440 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x3450 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, -/* 0x3460 */ 48, 48, 49, 57, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x3470 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x3480 */ 49, 48, 10, 48, 48, 48, 48, 48, 49, 97, 48, 32, 82, 95, 65, 82, -/* 0x3490 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, -/* 0x34a0 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 99, -/* 0x34b0 */ 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x34c0 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, -/* 0x34d0 */ 48, 48, 48, 48, 49, 99, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x34e0 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, -/* 0x34f0 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49,100, 52, 32, 82, 95, -/* 0x3500 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x3510 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, -/* 0x3520 */ 49,100, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x3530 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, -/* 0x3540 */ 10, 48, 48, 48, 48, 48, 49,101, 52, 32, 82, 95, 65, 82, 77, 95, -/* 0x3550 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, -/* 0x3560 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49,101, 99, 32, -/* 0x3570 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x3580 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, -/* 0x3590 */ 48, 48, 50, 50, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x35a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x35b0 */ 49, 48, 10, 48, 48, 48, 48, 48, 50, 50, 99, 32, 82, 95, 65, 82, -/* 0x35c0 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, -/* 0x35d0 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50, 52, -/* 0x35e0 */ 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x35f0 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, -/* 0x3600 */ 48, 48, 48, 48, 50, 52, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x3610 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, -/* 0x3620 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50, 53, 48, 32, 82, 95, -/* 0x3630 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x3640 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, -/* 0x3650 */ 50, 54, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x3660 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, -/* 0x3670 */ 10, 48, 48, 48, 48, 48, 50, 56, 52, 32, 82, 95, 65, 82, 77, 95, -/* 0x3680 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, -/* 0x3690 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50, 56, 99, 32, -/* 0x36a0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x36b0 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, -/* 0x36c0 */ 48, 48, 50, 97, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x36d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x36e0 */ 49, 48, 10, 48, 48, 48, 48, 48, 50, 99, 56, 32, 82, 95, 65, 82, -/* 0x36f0 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, -/* 0x3700 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50,100, -/* 0x3710 */ 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x3720 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, -/* 0x3730 */ 48, 48, 48, 48, 50,100, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x3740 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, -/* 0x3750 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50,102, 52, 32, 82, 95, -/* 0x3760 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x3770 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, -/* 0x3780 */ 51, 48, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x3790 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, -/* 0x37a0 */ 10, 48, 48, 48, 48, 48, 51, 49, 52, 32, 82, 95, 65, 82, 77, 95, -/* 0x37b0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, -/* 0x37c0 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 51, 50, 99, 32, -/* 0x37d0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x37e0 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, -/* 0x37f0 */ 48, 48, 51, 53, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x3800 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x3810 */ 49, 48, 10, 48, 48, 48, 48, 48, 51, 53, 56, 32, 82, 95, 65, 82, -/* 0x3820 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, -/* 0x3830 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 51, 55, -/* 0x3840 */ 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x3850 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, -/* 0x3860 */ 48, 48, 48, 48, 51, 55, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x3870 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, -/* 0x3880 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 51, 57, 99, 32, 82, 95, -/* 0x3890 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x38a0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, -/* 0x38b0 */ 51, 98, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, -/* 0x38c0 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, -/* 0x38d0 */ 10, 48, 48, 48, 48, 48, 51, 98, 56, 32, 82, 95, 65, 82, 77, 95, -/* 0x38e0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, -/* 0x38f0 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 51, 99, 56, 32, -/* 0x3900 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, -/* 0x3910 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, -/* 0x3920 */ 48, 48, 51, 99, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, -/* 0x3930 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, -/* 0x3940 */ 49, 48, 10, 48, 48, 48, 48, 48, 52, 48, 48, 32, 82, 95, 65, 82, -/* 0x3950 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, -/* 0x3960 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 52, 49, -/* 0x3970 */ 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, -/* 0x3980 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, -/* 0x3990 */ 48, 48, 48, 48, 52, 52, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, -/* 0x39a0 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, -/* 0x39b0 */ 69, 67, 49, 48, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, -/* 0x39c0 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, -/* 0x39d0 */ 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, -/* 0x39e0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x39f0 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, -/* 0x3a00 */ 52, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x3a10 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, -/* 0x3a20 */ 48, 48, 48, 48, 55, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x3a30 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, -/* 0x3a40 */ 90, 10, 48, 48, 48, 48, 48, 48, 57, 99, 32, 82, 95, 65, 82, 77, -/* 0x3a50 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, -/* 0x3a60 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 98, 56, 32, 82, -/* 0x3a70 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x3a80 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, -/* 0x3a90 */ 100, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x3aa0 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, -/* 0x3ab0 */ 48, 48, 48, 48,101, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x3ac0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, -/* 0x3ad0 */ 90, 10, 48, 48, 48, 48, 48, 49, 49, 99, 32, 82, 95, 65, 82, 77, -/* 0x3ae0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, -/* 0x3af0 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 49, 50, 52, 32, 82, -/* 0x3b00 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x3b10 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 49, -/* 0x3b20 */ 50, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x3b30 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, -/* 0x3b40 */ 48, 48, 48, 49, 53, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x3b50 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, -/* 0x3b60 */ 90, 10, 48, 48, 48, 48, 48, 49, 54, 48, 32, 82, 95, 65, 82, 77, -/* 0x3b70 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, -/* 0x3b80 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 49, 55, 48, 32, 82, -/* 0x3b90 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x3ba0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 49, -/* 0x3bb0 */ 57, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x3bc0 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, -/* 0x3bd0 */ 48, 48, 48, 49,101, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x3be0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, -/* 0x3bf0 */ 90, 10, 48, 48, 48, 48, 48, 49,102, 52, 32, 82, 95, 65, 82, 77, -/* 0x3c00 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, -/* 0x3c10 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 50, 48, 56, 32, 82, -/* 0x3c20 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x3c30 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 50, -/* 0x3c40 */ 49, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x3c50 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, -/* 0x3c60 */ 48, 48, 48, 50, 52, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x3c70 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, -/* 0x3c80 */ 90, 10, 48, 48, 48, 48, 48, 50, 53, 56, 32, 82, 95, 65, 82, 77, -/* 0x3c90 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, -/* 0x3ca0 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 50, 56, 48, 32, 82, -/* 0x3cb0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, -/* 0x3cc0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 50, -/* 0x3cd0 */ 57, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, -/* 0x3ce0 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, -/* 0x3cf0 */ 48, 48, 48, 50, 57, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, -/* 0x3d00 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, -/* 0x3d10 */ 90, 10, 48, 48, 48, 48, 48, 50, 97, 56, 32, 82, 95, 65, 82, 77, -/* 0x3d20 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, -/* 0x3d30 */ 77, 65, 73, 78, 90, 10 +/* 0x1230 */ 32,102, 97,105,108,101,100, 46, 10, 0, 14, 32,160,225, 36, 16, +/* 0x1240 */ 66,226, 4, 64,145,228, 4, 48,160,225, 1, 80,160,225, 4, 64, +/* 0x1250 */ 145,228, 4, 80, 69,224, 3, 48, 65,224, 4, 64,145,228, 4, 64, +/* 0x1260 */ 133,224, 36, 64,139,229, 4, 64,145,228, 4, 64,133,224, 4, 64, +/* 0x1270 */ 45,229, 4, 64,145,228, 4, 0,133,224, 3, 16,160,225, 8,208, +/* 0x1280 */ 77,226, 4, 64,145,229, 12, 16,129,226, 4, 16,129,224,179, 0, +/* 0x1290 */ 0,235, 0, 90,160,225, 37, 91,160,225, 5, 65,132,224, 4, 64, +/* 0x12a0 */ 45,229, 5, 1, 64,224, 4, 0, 45,229, 5, 65, 68,224, 5, 1, +/* 0x12b0 */ 128,224, 4, 80, 45,229, 49, 0, 0,235,255, 48, 3,226, 80, 0, +/* 0x12c0 */ 83,227, 14,240,160, 17, 33, 17,176,225, 0, 0, 80, 19, 14,240, +/* 0x12d0 */ 160, 1, 1, 16, 65,226, 1, 33,144,231, 15, 52, 2,226, 11, 4, +/* 0x12e0 */ 83,227, 46, 0, 0, 26,255, 52, 2,226, 1, 32, 66,224,255, 36, +/* 0x12f0 */ 194,227, 3, 32,130,225, 1, 33,128,231, 0, 0, 81,227, 36, 0, +/* 0x1300 */ 0, 26, 30,255, 47,225, 4,224, 45,229, 5, 48,209,229, 4, 48, +/* 0x1310 */ 45,229, 6, 48,209,229, 4, 48, 45,229, 4, 64, 45,229, 4, 0, +/* 0x1320 */ 45,229,179, 0, 0,235, 4, 80,160,225,179, 0, 0,235, 4, 64, +/* 0x1330 */ 45,229, 4, 32, 45,229, 40, 48, 75,226, 4, 48, 45,229, 4, 0, +/* 0x1340 */ 45,229, 4, 80, 45,229, 4, 16, 45,229, 3, 48, 1,226, 3, 80, +/* 0x1350 */ 133,226, 3, 80,133,224, 24, 48, 27,229, 37, 33,131,224, 52, 48, +/* 0x1360 */ 27,229,187, 0, 0,235, 28, 48, 27,229,187, 0, 0,235,134, 0, +/* 0x1370 */ 0,235, 0, 64,224,227, 50, 48,160,227, 3, 32,160,227, 16, 16, +/* 0x1380 */ 27,229, 20, 0, 27,229, 0, 96,160,225,192,112,160,227, 0, 0, +/* 0x1390 */ 0,239, 6, 0, 80,225, 87, 0, 0, 10,240, 1,240,231, 24, 80, +/* 0x13a0 */ 27,229, 12, 16, 27,229,123, 0, 0,235, 31, 0,189,232, 52,255, +/* 0x13b0 */ 47,225, 4,208,141,226, 96, 0, 0,235, 0, 0, 0,239,247,200, +/* 0x13c0 */ 189,232, 4, 64, 27,229, 3, 0,158,232, 3, 0,132,232, 31, 16, +/* 0x13d0 */ 189,232, 3, 0, 19,225,103, 0, 0, 10, 52,255, 47,225, 0, 0, +/* 0x13e0 */ 157,229, 4, 16,157,229, 0, 32,160,227, 0, 16,129,224, 8, 16, +/* 0x13f0 */ 129,226, 2,112,160,227, 15,120,135,227, 0, 0, 0,239, 3, 0, +/* 0x1400 */ 189,232, 5, 32,160,227,125,112,160,227, 0, 0, 0,239, 91,112, +/* 0x1410 */ 160,227, 3,128,189,232, 4, 80, 17,229,255, 84,197,227, 1, 80, +/* 0x1420 */ 133,226, 4, 48,145,228, 1, 80, 69,226, 4, 48,128,228, 7, 0, +/* 0x1430 */ 21,227,120, 0, 0, 26,165, 81,176,225,133, 0, 0, 10,212, 3, +/* 0x1440 */ 45,233,220, 19,177,232, 1, 80, 85,226,220, 19,160,232,128, 0, +/* 0x1450 */ 0, 26,212, 3,189,232, 30,255, 47,225, 4,224, 45,229, 14, 48, +/* 0x1460 */ 160,225,187, 0, 0,235, 2, 17,160,225, 0, 64,224,227, 34, 48, +/* 0x1470 */ 160,227, 7, 32,160,227, 8, 16, 11,229, 0, 0,160,227,192,112, +/* 0x1480 */ 160,227, 0, 0, 0,239, 1, 10,112,227,148, 0, 0, 58,240, 1, +/* 0x1490 */ 240,231, 12, 0, 11,229, 20, 16, 27,229, 24, 80, 27,229,123, 0, +/* 0x14a0 */ 0,235, 68, 16, 27,229, 64, 80, 27,229, 3, 48, 1,226, 3, 16, +/* 0x14b0 */ 65,224, 3, 80,133,224, 0, 48,131,224, 68, 48, 11,229, 3, 80, +/* 0x14c0 */ 133,226, 37, 81,160,225,123, 0, 0,235, 0, 32,160,225, 52, 16, +/* 0x14d0 */ 27,229, 52, 0, 11,229,117, 0, 0,235, 28, 16, 27,229, 28, 0, +/* 0x14e0 */ 11,229,117, 0, 0,235, 4, 16,157,228, 4, 0, 45,229,117, 0, +/* 0x14f0 */ 0,235, 0, 16,160,225, 2, 0,160,225, 0, 32,160,227, 2,112, +/* 0x1500 */ 160,227, 15,120,135,227, 0, 0, 0,239, 4,240,157,228, 1, 64, +/* 0x1510 */ 209,228, 1, 48,209,228, 3, 68,132,225, 1, 48,209,228, 3, 72, +/* 0x1520 */ 132,225, 1, 48,209,228, 3, 76,132,225, 30,255, 47,225, 4, 48, +/* 0x1530 */ 19,229,255, 52,195,227, 1, 48,131,226, 3, 32,130,224, 30,255, +/* 0x1540 */ 47,225,102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108, +/* 0x1550 */ 102, 51, 50, 45,108,105,116,116,108,101, 97,114,109, 10, 10, 83, +/* 0x1560 */ 101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109, +/* 0x1570 */ 101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, +/* 0x1580 */ 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x1590 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102, +/* 0x15a0 */ 102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, +/* 0x15b0 */ 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, +/* 0x15c0 */ 32, 48, 48, 48, 48, 48, 48, 49, 48, 32, 32, 48, 48, 48, 48, 48, +/* 0x15d0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x15e0 */ 48, 48, 48, 48, 48, 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, +/* 0x15f0 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, +/* 0x1600 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, +/* 0x1610 */ 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, +/* 0x1620 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x1630 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, +/* 0x1640 */ 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, +/* 0x1650 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, +/* 0x1660 */ 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, +/* 0x1670 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1680 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, +/* 0x1690 */ 48, 48, 52, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, +/* 0x16a0 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, +/* 0x16b0 */ 32, 51, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x16c0 */ 32, 48, 48, 48, 48, 48, 49, 51, 99, 32, 32, 48, 48, 48, 48, 48, +/* 0x16d0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x16e0 */ 48, 48, 48, 48, 48, 52, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, +/* 0x16f0 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, +/* 0x1700 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, +/* 0x1710 */ 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, +/* 0x1720 */ 49, 50, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x1730 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 56, +/* 0x1740 */ 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, +/* 0x1750 */ 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, +/* 0x1760 */ 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, +/* 0x1770 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,101, 99, 32, 32, 48, +/* 0x1780 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, +/* 0x1790 */ 48, 32, 32, 48, 48, 48, 48, 48, 50, 97, 56, 32, 32, 50, 42, 42, +/* 0x17a0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, +/* 0x17b0 */ 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, +/* 0x17c0 */ 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, +/* 0x17d0 */ 48, 48, 48, 48, 48, 98, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, +/* 0x17e0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x17f0 */ 48, 48, 51, 57, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, +/* 0x1800 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, +/* 0x1810 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, +/* 0x1820 */ 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 51, +/* 0x1830 */ 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1840 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, 52, 99, 32, +/* 0x1850 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, +/* 0x1860 */ 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, +/* 0x1870 */ 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, +/* 0x1880 */ 32, 32, 32, 48, 48, 48, 48, 48, 52, 55, 56, 32, 32, 48, 48, 48, +/* 0x1890 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x18a0 */ 32, 48, 48, 48, 48, 48,100, 56, 52, 32, 32, 50, 42, 42, 48, 32, +/* 0x18b0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, +/* 0x18c0 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 76, +/* 0x18d0 */ 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, +/* 0x18e0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x18f0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, +/* 0x1900 */ 49,102, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, +/* 0x1910 */ 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, +/* 0x1920 */ 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, +/* 0x1930 */ 48, 48, 48, 48, 48, 48, 51,101, 32, 32, 48, 48, 48, 48, 48, 48, +/* 0x1940 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, +/* 0x1950 */ 48, 48, 49, 49,102, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, +/* 0x1960 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, +/* 0x1970 */ 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, +/* 0x1980 */ 32, 32, 32, 48, 48, 48, 48, 48, 51, 48, 56, 32, 32, 48, 48, 48, +/* 0x1990 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x19a0 */ 32, 48, 48, 48, 48, 49, 50, 51, 97, 32, 32, 50, 42, 42, 48, 32, +/* 0x19b0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, +/* 0x19c0 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, +/* 0x19d0 */ 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, +/* 0x19e0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, +/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, +/* 0x1a00 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, +/* 0x1a10 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, +/* 0x1a20 */ 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, +/* 0x1a30 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, +/* 0x1a40 */ 48, 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, +/* 0x1a50 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, +/* 0x1a60 */ 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1a70 */ 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, +/* 0x1a80 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, +/* 0x1a90 */ 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1aa0 */ 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, +/* 0x1ab0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, +/* 0x1ac0 */ 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1ad0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, +/* 0x1ae0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, +/* 0x1af0 */ 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1b00 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, +/* 0x1b10 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, +/* 0x1b20 */ 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, +/* 0x1b30 */ 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1b40 */ 108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, +/* 0x1b50 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, +/* 0x1b60 */ 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, +/* 0x1b70 */ 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, +/* 0x1b80 */ 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, +/* 0x1b90 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, +/* 0x1ba0 */ 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, +/* 0x1bb0 */ 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, +/* 0x1bc0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, +/* 0x1bd0 */ 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, +/* 0x1be0 */ 70, 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1bf0 */ 103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, +/* 0x1c00 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, +/* 0x1c10 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, +/* 0x1c20 */ 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 49, 51, 99, +/* 0x1c30 */ 32,117, 99,108, 95,110,114,118, 50,101, 95,100,101, 99,111,109, +/* 0x1c40 */ 112,114,101,115,115, 95, 56, 10, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c50 */ 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 68, 9, 48, +/* 0x1c60 */ 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108, 95,110,114,118, 50, +/* 0x1c70 */ 100, 95,100,101, 99,111,109,112,114,101,115,115, 95, 56, 10, 48, +/* 0x1c80 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, +/* 0x1c90 */ 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48,101, 99, 32,117, +/* 0x1ca0 */ 99,108, 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114, +/* 0x1cb0 */ 101,115,115, 95, 56, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, +/* 0x1cc0 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, +/* 0x1cd0 */ 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68, +/* 0x1ce0 */ 101, 99,111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, +/* 0x1cf0 */ 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, +/* 0x1d00 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99, +/* 0x1d10 */ 111,109,112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, +/* 0x1d20 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, +/* 0x1d30 */ 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, +/* 0x1d40 */ 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, +/* 0x1d50 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, +/* 0x1d60 */ 48, 48, 48, 48, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x1d70 */ 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, +/* 0x1d80 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, +/* 0x1d90 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 69, 93, +/* 0x1da0 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, +/* 0x1db0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, +/* 0x1dc0 */ 85, 69, 10, 48, 48, 48, 48, 48, 48, 49, 48, 32, 82, 95, 65, 82, +/* 0x1dd0 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, +/* 0x1de0 */ 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 54, 99, 32, 82, 95, 65, +/* 0x1df0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, +/* 0x1e00 */ 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 55, 48, 32, 82, 95, +/* 0x1e10 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x1e20 */ 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 55, 56, 32, 82, +/* 0x1e30 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x1e40 */ 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 56, 52, 32, +/* 0x1e50 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x1e60 */ 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 57, 48, +/* 0x1e70 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x1e80 */ 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 57, +/* 0x1e90 */ 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x1ea0 */ 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, +/* 0x1eb0 */ 97, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x1ec0 */ 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, +/* 0x1ed0 */ 48, 97, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x1ee0 */ 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, +/* 0x1ef0 */ 48, 48, 98, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x1f00 */ 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, +/* 0x1f10 */ 48, 48, 48, 99, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x1f20 */ 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, +/* 0x1f30 */ 48, 48, 48, 48, 99, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x1f40 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, +/* 0x1f50 */ 48, 48, 48, 48, 48,100, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x1f60 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, +/* 0x1f70 */ 48, 48, 48, 48, 48, 48,100, 52, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x1f80 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 69, +/* 0x1f90 */ 10, 48, 48, 48, 48, 48, 48,101, 48, 32, 82, 95, 65, 82, 77, 95, +/* 0x1fa0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, +/* 0x1fb0 */ 69, 10, 48, 48, 48, 48, 48, 48,101, 52, 32, 82, 95, 65, 82, 77, +/* 0x1fc0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, +/* 0x1fd0 */ 50, 69, 10, 48, 48, 48, 48, 48, 48,101, 99, 32, 82, 95, 65, 82, +/* 0x1fe0 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, +/* 0x1ff0 */ 86, 50, 69, 10, 48, 48, 48, 48, 48, 48,102, 56, 32, 82, 95, 65, +/* 0x2000 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, +/* 0x2010 */ 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48,102, 99, 32, 82, 95, +/* 0x2020 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2030 */ 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 49, 48, 52, 32, 82, +/* 0x2040 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2050 */ 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 49, 48, 99, 32, +/* 0x2060 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x2070 */ 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 49, 51, 52, +/* 0x2080 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x2090 */ 32, 32, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 49, 51, +/* 0x20a0 */ 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x20b0 */ 32, 32, 32, 32, 78, 82, 86, 50, 69, 10, 10, 82, 69, 76, 79, 67, +/* 0x20c0 */ 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, +/* 0x20d0 */ 82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83, 69, +/* 0x20e0 */ 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x20f0 */ 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, +/* 0x2100 */ 48, 48, 49, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2110 */ 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, +/* 0x2120 */ 48, 48, 48, 54, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x2130 */ 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, +/* 0x2140 */ 48, 48, 48, 48, 55, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x2150 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, +/* 0x2160 */ 48, 48, 48, 48, 48, 55, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x2170 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, +/* 0x2180 */ 48, 48, 48, 48, 48, 48, 56, 52, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x2190 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, +/* 0x21a0 */ 10, 48, 48, 48, 48, 48, 48, 57, 48, 32, 82, 95, 65, 82, 77, 95, +/* 0x21b0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, +/* 0x21c0 */ 68, 10, 48, 48, 48, 48, 48, 48, 57, 99, 32, 82, 95, 65, 82, 77, +/* 0x21d0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, +/* 0x21e0 */ 50, 68, 10, 48, 48, 48, 48, 48, 48, 97, 48, 32, 82, 95, 65, 82, +/* 0x21f0 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, +/* 0x2200 */ 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 97, 99, 32, 82, 95, 65, +/* 0x2210 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, +/* 0x2220 */ 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 98, 99, 32, 82, 95, +/* 0x2230 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2240 */ 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 99, 52, 32, 82, +/* 0x2250 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2260 */ 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 99, 99, 32, +/* 0x2270 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x2280 */ 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48,100, 56, +/* 0x2290 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x22a0 */ 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48,101, +/* 0x22b0 */ 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x22c0 */ 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, +/* 0x22d0 */ 101, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x22e0 */ 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, +/* 0x22f0 */ 48,102, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x2300 */ 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, +/* 0x2310 */ 48, 48,102, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2320 */ 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, +/* 0x2330 */ 48, 48, 49, 50, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x2340 */ 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 48, 48, +/* 0x2350 */ 48, 48, 48, 49, 50, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x2360 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 68, 10, 10, +/* 0x2370 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, +/* 0x2380 */ 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, 58, 10, +/* 0x2390 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, +/* 0x23a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, +/* 0x23b0 */ 10, 48, 48, 48, 48, 48, 48, 49, 48, 32, 82, 95, 65, 82, 77, 95, +/* 0x23c0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, +/* 0x23d0 */ 66, 10, 48, 48, 48, 48, 48, 48, 55, 48, 32, 82, 95, 65, 82, 77, +/* 0x23e0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, +/* 0x23f0 */ 50, 66, 10, 48, 48, 48, 48, 48, 48, 55, 56, 32, 82, 95, 65, 82, +/* 0x2400 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, +/* 0x2410 */ 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 55, 99, 32, 82, 95, 65, +/* 0x2420 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, +/* 0x2430 */ 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 56, 99, 32, 82, 95, +/* 0x2440 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2450 */ 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 57, 48, 32, 82, +/* 0x2460 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2470 */ 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 57, 52, 32, +/* 0x2480 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x2490 */ 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 97, 48, +/* 0x24a0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x24b0 */ 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 98, +/* 0x24c0 */ 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x24d0 */ 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, +/* 0x24e0 */ 98, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x24f0 */ 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, +/* 0x2500 */ 48, 98, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x2510 */ 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, +/* 0x2520 */ 48, 48, 99, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2530 */ 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, +/* 0x2540 */ 48, 48, 48, 99, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x2550 */ 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, 48, +/* 0x2560 */ 48, 48, 48, 48,101, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x2570 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, 48, +/* 0x2580 */ 48, 48, 48, 48, 48,101, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x2590 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 50, 66, 10, +/* 0x25a0 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, +/* 0x25b0 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, +/* 0x25c0 */ 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, +/* 0x25d0 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x25e0 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 56, 32, +/* 0x25f0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x2600 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, +/* 0x2610 */ 48, 48, 48, 52, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x2620 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, +/* 0x2630 */ 48, 48, 10, 48, 48, 48, 48, 48, 48, 56, 48, 32, 82, 95, 65, 82, +/* 0x2640 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, +/* 0x2650 */ 77, 65, 95, 69, 76, 70, 48, 48, 10, 10, 82, 69, 76, 79, 67, 65, +/* 0x2660 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, +/* 0x2670 */ 32, 91, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 93, 58, 10, 79, +/* 0x2680 */ 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, +/* 0x2690 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, +/* 0x26a0 */ 48, 48, 48, 48, 48, 48, 55, 52, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x26b0 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x26c0 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 57, 48, 32, 82, +/* 0x26d0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x26e0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, +/* 0x26f0 */ 48, 48, 98, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2700 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x2710 */ 48, 10, 48, 48, 48, 48, 48, 48, 99, 99, 32, 82, 95, 65, 82, 77, +/* 0x2720 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x2730 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48,102, 52, +/* 0x2740 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x2750 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, +/* 0x2760 */ 48, 48, 48, 49, 48, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x2770 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x2780 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 49, 48, 56, 32, 82, 95, 65, +/* 0x2790 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x27a0 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 49, +/* 0x27b0 */ 52, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x27c0 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, +/* 0x27d0 */ 48, 48, 48, 48, 48, 49, 57, 48, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x27e0 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x27f0 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 49, 99, 99, 32, 82, +/* 0x2800 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2810 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, +/* 0x2820 */ 48, 49,100, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2830 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x2840 */ 48, 10, 48, 48, 48, 48, 48, 50, 48, 52, 32, 82, 95, 65, 82, 77, +/* 0x2850 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x2860 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, 49, 56, +/* 0x2870 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x2880 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, +/* 0x2890 */ 48, 48, 48, 50, 50, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x28a0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x28b0 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, 51, 52, 32, 82, 95, 65, +/* 0x28c0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x28d0 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, +/* 0x28e0 */ 51, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x28f0 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, +/* 0x2900 */ 48, 48, 48, 48, 48, 50, 52, 48, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x2910 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x2920 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, 52, 99, 32, 82, +/* 0x2930 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2940 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, +/* 0x2950 */ 48, 50, 53, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2960 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x2970 */ 48, 10, 48, 48, 48, 48, 48, 50, 97, 52, 32, 82, 95, 65, 82, 77, +/* 0x2980 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x2990 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 50, 99, 56, +/* 0x29a0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x29b0 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, +/* 0x29c0 */ 48, 48, 48, 50,101, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x29d0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x29e0 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 51, 48, 52, 32, 82, 95, 65, +/* 0x29f0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x2a00 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 51, +/* 0x2a10 */ 48, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x2a20 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, +/* 0x2a30 */ 48, 48, 48, 48, 48, 51, 51, 99, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x2a40 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x2a50 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 51, 56, 56, 32, 82, +/* 0x2a60 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2a70 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, +/* 0x2a80 */ 48, 51, 97, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2a90 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x2aa0 */ 48, 10, 48, 48, 48, 48, 48, 51, 97, 56, 32, 82, 95, 65, 82, 77, +/* 0x2ab0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x2ac0 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 51, 99, 99, +/* 0x2ad0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x2ae0 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, +/* 0x2af0 */ 48, 48, 48, 51,101, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x2b00 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x2b10 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 51,101, 56, 32, 82, 95, 65, +/* 0x2b20 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x2b30 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 52, +/* 0x2b40 */ 50, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x2b50 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, +/* 0x2b60 */ 48, 48, 48, 48, 48, 52, 51, 56, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x2b70 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x2b80 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 52, 54, 99, 32, 82, +/* 0x2b90 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2ba0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, +/* 0x2bb0 */ 48, 52, 56, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2bc0 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x2bd0 */ 48, 10, 48, 48, 48, 48, 48, 52, 56, 99, 32, 82, 95, 65, 82, 77, +/* 0x2be0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x2bf0 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 52, 98, 48, +/* 0x2c00 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x2c10 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, +/* 0x2c20 */ 48, 48, 48, 52,100, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x2c30 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x2c40 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 52,101, 99, 32, 82, 95, 65, +/* 0x2c50 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x2c60 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 52, +/* 0x2c70 */ 102, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x2c80 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, +/* 0x2c90 */ 48, 48, 48, 48, 48, 53, 49, 56, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x2ca0 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x2cb0 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 53, 51, 99, 32, 82, +/* 0x2cc0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2cd0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, +/* 0x2ce0 */ 48, 53, 57, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2cf0 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x2d00 */ 48, 10, 48, 48, 48, 48, 48, 53, 97, 48, 32, 82, 95, 65, 82, 77, +/* 0x2d10 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x2d20 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 53, 99, 48, +/* 0x2d30 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x2d40 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, +/* 0x2d50 */ 48, 48, 48, 53,101, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x2d60 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x2d70 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 53,102, 99, 32, 82, 95, 65, +/* 0x2d80 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x2d90 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 54, +/* 0x2da0 */ 48, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x2db0 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, +/* 0x2dc0 */ 48, 48, 48, 48, 48, 54, 50, 52, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x2dd0 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x2de0 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 54, 52, 56, 32, 82, +/* 0x2df0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2e00 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, +/* 0x2e10 */ 48, 54, 56, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2e20 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x2e30 */ 48, 10, 48, 48, 48, 48, 48, 54, 56, 99, 32, 82, 95, 65, 82, 77, +/* 0x2e40 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x2e50 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 54,100, 48, +/* 0x2e60 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x2e70 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, +/* 0x2e80 */ 48, 48, 48, 54,101, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x2e90 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x2ea0 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 55, 49, 99, 32, 82, 95, 65, +/* 0x2eb0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x2ec0 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 55, +/* 0x2ed0 */ 50, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x2ee0 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, +/* 0x2ef0 */ 48, 48, 48, 48, 48, 55, 54, 99, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x2f00 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x2f10 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 55, 55, 99, 32, 82, +/* 0x2f20 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x2f30 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, +/* 0x2f40 */ 48, 55, 57, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x2f50 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x2f60 */ 48, 10, 48, 48, 48, 48, 48, 55, 98, 56, 32, 82, 95, 65, 82, 77, +/* 0x2f70 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x2f80 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 55, 99, 52, +/* 0x2f90 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x2fa0 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, +/* 0x2fb0 */ 48, 48, 48, 55,100, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x2fc0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x2fd0 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 55,102, 52, 32, 82, 95, 65, +/* 0x2fe0 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x2ff0 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 56, +/* 0x3000 */ 50, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x3010 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, +/* 0x3020 */ 48, 48, 48, 48, 48, 56, 50, 99, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x3030 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x3040 */ 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 56, 55, 99, 32, 82, +/* 0x3050 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x3060 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, +/* 0x3070 */ 48, 56, 56, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, +/* 0x3080 */ 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x3090 */ 48, 10, 48, 48, 48, 48, 48, 56, 97, 48, 32, 82, 95, 65, 82, 77, +/* 0x30a0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x30b0 */ 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 56,101, 56, +/* 0x30c0 */ 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, +/* 0x30d0 */ 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, +/* 0x30e0 */ 48, 48, 48, 56,102, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x30f0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x3100 */ 67, 50, 48, 10, 48, 48, 48, 48, 48, 56,102, 99, 32, 82, 95, 65, +/* 0x3110 */ 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x3120 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 57, +/* 0x3130 */ 48, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x3140 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, +/* 0x3150 */ 48, 48, 48, 48, 48, 57, 50, 56, 32, 82, 95, 65, 82, 77, 95, 80, +/* 0x3160 */ 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, +/* 0x3170 */ 68, 69, 67, 50, 48, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, +/* 0x3180 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, +/* 0x3190 */ 90, 77, 65, 95, 68, 69, 67, 49, 48, 93, 58, 10, 79, 70, 70, 83, +/* 0x31a0 */ 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, +/* 0x31b0 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, +/* 0x31c0 */ 48, 48, 48, 55, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x31d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, +/* 0x31e0 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 56, 48, 32, 82, 95, 65, 82, +/* 0x31f0 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, +/* 0x3200 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 56, +/* 0x3210 */ 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x3220 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, +/* 0x3230 */ 48, 48, 48, 48, 48, 97, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x3240 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, +/* 0x3250 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 97, 99, 32, 82, 95, +/* 0x3260 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x3270 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, +/* 0x3280 */ 48,101, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x3290 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, +/* 0x32a0 */ 10, 48, 48, 48, 48, 48, 49, 48, 48, 32, 82, 95, 65, 82, 77, 95, +/* 0x32b0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, +/* 0x32c0 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 48, 99, 32, +/* 0x32d0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x32e0 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, +/* 0x32f0 */ 48, 48, 49, 49, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x3300 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, +/* 0x3310 */ 49, 48, 10, 48, 48, 48, 48, 48, 49, 49, 56, 32, 82, 95, 65, 82, +/* 0x3320 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, +/* 0x3330 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 50, +/* 0x3340 */ 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x3350 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, +/* 0x3360 */ 48, 48, 48, 48, 49, 50, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x3370 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, +/* 0x3380 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 52, 52, 32, 82, 95, +/* 0x3390 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x33a0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, +/* 0x33b0 */ 49, 52, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x33c0 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, +/* 0x33d0 */ 10, 48, 48, 48, 48, 48, 49, 53, 48, 32, 82, 95, 65, 82, 77, 95, +/* 0x33e0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, +/* 0x33f0 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 56, 48, 32, +/* 0x3400 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x3410 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, +/* 0x3420 */ 48, 48, 49, 56, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x3430 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, +/* 0x3440 */ 49, 48, 10, 48, 48, 48, 48, 48, 49, 56, 99, 32, 82, 95, 65, 82, +/* 0x3450 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, +/* 0x3460 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 57, +/* 0x3470 */ 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x3480 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, +/* 0x3490 */ 48, 48, 48, 48, 49, 97, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x34a0 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, +/* 0x34b0 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49, 99, 48, 32, 82, 95, +/* 0x34c0 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x34d0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, +/* 0x34e0 */ 49, 99, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x34f0 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, +/* 0x3500 */ 10, 48, 48, 48, 48, 48, 49,100, 52, 32, 82, 95, 65, 82, 77, 95, +/* 0x3510 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, +/* 0x3520 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 49,100, 99, 32, +/* 0x3530 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x3540 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, +/* 0x3550 */ 48, 48, 49,101, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x3560 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, +/* 0x3570 */ 49, 48, 10, 48, 48, 48, 48, 48, 49,101, 99, 32, 82, 95, 65, 82, +/* 0x3580 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, +/* 0x3590 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50, 50, +/* 0x35a0 */ 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x35b0 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, +/* 0x35c0 */ 48, 48, 48, 48, 50, 50, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x35d0 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, +/* 0x35e0 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50, 52, 52, 32, 82, 95, +/* 0x35f0 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x3600 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, +/* 0x3610 */ 50, 52, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x3620 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, +/* 0x3630 */ 10, 48, 48, 48, 48, 48, 50, 53, 48, 32, 82, 95, 65, 82, 77, 95, +/* 0x3640 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, +/* 0x3650 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50, 54, 56, 32, +/* 0x3660 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x3670 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, +/* 0x3680 */ 48, 48, 50, 56, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x3690 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, +/* 0x36a0 */ 49, 48, 10, 48, 48, 48, 48, 48, 50, 56, 99, 32, 82, 95, 65, 82, +/* 0x36b0 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, +/* 0x36c0 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50, 97, +/* 0x36d0 */ 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x36e0 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, +/* 0x36f0 */ 48, 48, 48, 48, 50, 99, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x3700 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, +/* 0x3710 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 50,100, 48, 32, 82, 95, +/* 0x3720 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x3730 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, +/* 0x3740 */ 50,100, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x3750 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, +/* 0x3760 */ 10, 48, 48, 48, 48, 48, 50,102, 52, 32, 82, 95, 65, 82, 77, 95, +/* 0x3770 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, +/* 0x3780 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 51, 48, 99, 32, +/* 0x3790 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x37a0 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, +/* 0x37b0 */ 48, 48, 51, 49, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x37c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, +/* 0x37d0 */ 49, 48, 10, 48, 48, 48, 48, 48, 51, 50, 99, 32, 82, 95, 65, 82, +/* 0x37e0 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, +/* 0x37f0 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 51, 53, +/* 0x3800 */ 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x3810 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, +/* 0x3820 */ 48, 48, 48, 48, 51, 53, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x3830 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, +/* 0x3840 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 51, 55, 48, 32, 82, 95, +/* 0x3850 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x3860 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, +/* 0x3870 */ 51, 55, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x3880 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, +/* 0x3890 */ 10, 48, 48, 48, 48, 48, 51, 57, 99, 32, 82, 95, 65, 82, 77, 95, +/* 0x38a0 */ 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, +/* 0x38b0 */ 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 51, 98, 48, 32, +/* 0x38c0 */ 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, +/* 0x38d0 */ 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, +/* 0x38e0 */ 48, 48, 51, 98, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, +/* 0x38f0 */ 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, +/* 0x3900 */ 49, 48, 10, 48, 48, 48, 48, 48, 51, 99, 56, 32, 82, 95, 65, 82, +/* 0x3910 */ 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, +/* 0x3920 */ 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 51, 99, +/* 0x3930 */ 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, +/* 0x3940 */ 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, +/* 0x3950 */ 48, 48, 48, 48, 52, 48, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, +/* 0x3960 */ 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, +/* 0x3970 */ 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 52, 49, 56, 32, 82, 95, +/* 0x3980 */ 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x3990 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, +/* 0x39a0 */ 52, 52, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, +/* 0x39b0 */ 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, +/* 0x39c0 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, +/* 0x39d0 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, +/* 0x39e0 */ 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, +/* 0x39f0 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x3a00 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 53, 52, 32, 82, +/* 0x3a10 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x3a20 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, +/* 0x3a30 */ 55, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x3a40 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, +/* 0x3a50 */ 48, 48, 48, 48, 97, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x3a60 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, +/* 0x3a70 */ 90, 10, 48, 48, 48, 48, 48, 48, 99, 52, 32, 82, 95, 65, 82, 77, +/* 0x3a80 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, +/* 0x3a90 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48,101, 56, 32, 82, +/* 0x3aa0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x3ab0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, +/* 0x3ac0 */ 102, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x3ad0 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, +/* 0x3ae0 */ 48, 48, 48, 49, 50, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x3af0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, +/* 0x3b00 */ 90, 10, 48, 48, 48, 48, 48, 49, 51, 48, 32, 82, 95, 65, 82, 77, +/* 0x3b10 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, +/* 0x3b20 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 49, 51, 52, 32, 82, +/* 0x3b30 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x3b40 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 49, +/* 0x3b50 */ 53, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x3b60 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, +/* 0x3b70 */ 48, 48, 48, 49, 54, 99, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x3b80 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, +/* 0x3b90 */ 90, 10, 48, 48, 48, 48, 48, 49, 55, 99, 32, 82, 95, 65, 82, 77, +/* 0x3ba0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, +/* 0x3bb0 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 49, 57, 99, 32, 82, +/* 0x3bc0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x3bd0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 49, +/* 0x3be0 */ 102, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x3bf0 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, +/* 0x3c00 */ 48, 48, 48, 50, 48, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x3c10 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, +/* 0x3c20 */ 90, 10, 48, 48, 48, 48, 48, 50, 49, 52, 32, 82, 95, 65, 82, 77, +/* 0x3c30 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, +/* 0x3c40 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 50, 50, 56, 32, 82, +/* 0x3c50 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x3c60 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 50, +/* 0x3c70 */ 53, 48, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x3c80 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, +/* 0x3c90 */ 48, 48, 48, 50, 54, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x3ca0 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, +/* 0x3cb0 */ 90, 10, 48, 48, 48, 48, 48, 50, 56, 99, 32, 82, 95, 65, 82, 77, +/* 0x3cc0 */ 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, +/* 0x3cd0 */ 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 50, 57, 99, 32, 82, +/* 0x3ce0 */ 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, 32, 32, 32, 32, +/* 0x3cf0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 50, +/* 0x3d00 */ 97, 56, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, 52, 32, 32, 32, +/* 0x3d10 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, +/* 0x3d20 */ 48, 48, 48, 50, 98, 52, 32, 82, 95, 65, 82, 77, 95, 80, 67, 50, +/* 0x3d30 */ 52, 32, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, +/* 0x3d40 */ 90, 10 }; diff --git a/src/stub/arm.v5t-linux.shlib-init.h b/src/stub/arm.v5t-linux.shlib-init.h index cbe92442..926d186f 100644 --- a/src/stub/arm.v5t-linux.shlib-init.h +++ b/src/stub/arm.v5t-linux.shlib-init.h @@ -32,15 +32,15 @@ #define STUB_ARM_V5T_LINUX_SHLIB_INIT_SIZE 15566 -#define STUB_ARM_V5T_LINUX_SHLIB_INIT_ADLER32 0x4b0e1f0a -#define STUB_ARM_V5T_LINUX_SHLIB_INIT_CRC32 0x0f45a16c +#define STUB_ARM_V5T_LINUX_SHLIB_INIT_ADLER32 0x0d0d1f66 +#define STUB_ARM_V5T_LINUX_SHLIB_INIT_CRC32 0x43a6af0c unsigned char stub_arm_v5t_linux_shlib_init[15566] = { /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 40, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0020 */ 236, 20, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0, -/* 0x0030 */ 0, 0, 0, 0,192, 70,255,181, 0,161, 24, 57, 13, 28, 12,104, -/* 0x0040 */ 45, 27, 75,104, 91, 25, 8,147,200,104, 64, 25, 24, 33, 9, 24, +/* 0x0030 */ 0, 0, 0, 0,192, 70,255,181, 0,161, 28, 57, 11,104, 13, 29, +/* 0x0040 */ 76,104, 45, 27,140,104,100, 25, 8,148, 8,105, 64, 25, 89, 25, /* 0x0050 */ 131,176, 0,181, 76,104, 12, 49, 9, 25, 0,240,166,248, 3, 5, /* 0x0060 */ 27, 13,228, 24, 16,180,192, 26, 1,180,228, 26,192, 24,155, 8, /* 0x0070 */ 8,180, 0, 0, 0,240, 57,248, 27, 6,137, 8, 27, 14,137, 0, diff --git a/src/stub/arm64-linux.shlib-init.h b/src/stub/arm64-linux.shlib-init.h index dee6efeb..95342e54 100644 --- a/src/stub/arm64-linux.shlib-init.h +++ b/src/stub/arm64-linux.shlib-init.h @@ -1,5 +1,5 @@ /* arm64-linux.shlib-init.h - created from arm64-linux.shlib-init.bin, 8646 (0x21c6) bytes + created from arm64-linux.shlib-init.bin, 8654 (0x21ce) bytes This file is part of the UPX executable compressor. @@ -31,14 +31,14 @@ */ -#define STUB_ARM64_LINUX_SHLIB_INIT_SIZE 8646 -#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0xe9b387bd -#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0xb2aee707 +#define STUB_ARM64_LINUX_SHLIB_INIT_SIZE 8654 +#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0x8c2f89f3 +#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0x0cefe3fe -unsigned char stub_arm64_linux_shlib_init[8646] = { +unsigned char stub_arm64_linux_shlib_init[8654] = { /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,176, 24, 0, 0, 0, 0, 0, 0, +/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,184, 24, 0, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, /* 0x0040 */ 224, 7,180,169,226, 3, 1,169,254, 23, 0,249, 0, 0, 0,148, /* 0x0050 */ 254, 15, 31,248,226, 15,191,169, 7, 64, 33,139, 5, 0,128, 18, @@ -336,245 +336,245 @@ unsigned char stub_arm64_linux_shlib_init[8646] = { /* 0x1290 */ 108,101,100, 46, 10, 0, 67,132, 64,248,227,255,255,181, 3, 0, /* 0x12a0 */ 130,210, 64, 4,193,168, 96, 0, 0,180, 31, 24, 0,241,161,255, /* 0x12b0 */ 255, 84, 33, 0,131,154,225, 3, 1,203,225,255,129,146,225, 19, -/* 0x12c0 */ 0,249,226, 3, 30,170, 65,128, 0,209,229, 3, 1,170, 36, 68, -/* 0x12d0 */ 64,184,165, 0, 4,203, 36, 68, 64,184,164, 0, 4,139,228, 15, -/* 0x12e0 */ 0,249, 36, 68, 64,184,164, 0, 4,139,228, 27, 0,249, 36, 68, -/* 0x12f0 */ 64,184,160, 0, 4,139, 1, 96, 0,145, 36, 4, 64,185, 33, 48, -/* 0x1300 */ 0,145, 33, 0, 4,139,229, 35, 64,185, 36, 68, 64,184, 5, 0, -/* 0x1310 */ 37, 10,165, 12, 0, 17,165,116, 30, 18,132, 0, 5, 11, 0, 64, -/* 0x1320 */ 37,203,224,147, 4,169, 0, 64, 37,139,132, 0, 5, 75, 16, 0, -/* 0x1330 */ 0,148, 99, 28, 0, 18,127, 72, 1,113,129, 1, 0, 84, 33,252, -/* 0x1340 */ 66,211, 65, 1, 0,180, 33, 4, 0,209, 2,120, 97,184, 67,120, -/* 0x1350 */ 26, 83,127, 20, 0,113,129, 0, 0, 84, 67, 0, 1, 75, 98,100, -/* 0x1360 */ 0, 51, 2,120, 33,184, 1,255,255,181,192, 3, 95,214,165,124, -/* 0x1370 */ 2, 83,254,151, 5,169, 35, 20, 64, 57, 38, 24, 64, 57,224,147, -/* 0x1380 */ 6,169,230,143, 7,169, 36, 68, 64,184,229, 3, 4, 42, 36, 68, -/* 0x1390 */ 64,184,226,147, 8,169,227,195, 1,145,225,151, 9,169,224,143, -/* 0x13a0 */ 10,169,165, 12, 0,145,227, 99, 64,185, 98, 8, 69,139,227, 71, -/* 0x13b0 */ 64,249, 99, 0, 0,148,227, 47, 64,249, 97, 0, 0,148, 53, 0, -/* 0x13c0 */ 0,148, 5, 0,128,210, 4, 0,128,146, 67, 6,128,210, 98, 0, -/* 0x13d0 */ 128,210,224,135, 68,169,230, 3, 0,170,200, 27,128, 82, 1, 0, -/* 0x13e0 */ 0,212, 31, 0, 6,235, 64, 0, 0, 84, 0, 0, 32,212,229, 99, -/* 0x13f0 */ 64,185,225, 31, 64,249, 29, 0, 0,148,228, 71, 64,249,224,135, -/* 0x1400 */ 73,169,226,143, 74,169,128, 0, 63,214, 4, 0, 0,148, 1, 0, -/* 0x1410 */ 0,212,224, 7,204,168, 96, 0, 31,214,228, 27, 64,249,192, 7, -/* 0x1420 */ 64,169,128, 0, 0,249,129, 8, 0,185,228, 47, 64,249,226,143, -/* 0x1430 */ 71,169,224,135, 70,169, 67, 0, 0,180,128, 0, 63,214,224,135, -/* 0x1440 */ 68,169,162, 0,128,210, 72, 28,128, 82, 1, 0, 0,212,254,147, -/* 0x1450 */ 66,169,224,135, 67,169,232, 26,128, 82,226, 15, 65,169,128, 0, -/* 0x1460 */ 31,214, 37,192, 95,184,165, 92, 0, 18,133, 0, 0, 54, 35, 68, -/* 0x1470 */ 64,184,165, 4, 0, 81, 3, 68, 0,184,165, 0, 0, 52, 34, 12, -/* 0x1480 */ 193, 40,165, 8, 0, 81, 2, 12,129, 40,165,255,255, 53,192, 3, -/* 0x1490 */ 95,214,254, 95, 0,249,227, 3, 30,170, 41, 0, 0,148, 65,244, -/* 0x14a0 */ 126,211, 5, 0,128,210, 4, 0,128,146, 67, 4,128,210, 98, 0, -/* 0x14b0 */ 128,210,225, 35, 0,249, 0, 0,128,210,200, 27,128, 82, 1, 0, -/* 0x14c0 */ 0,212, 31, 4, 64,177, 67, 0, 0, 84, 0, 0, 32,212,224, 31, -/* 0x14d0 */ 0,249,225, 39, 64,249,229, 99, 64,185,228,255,255,151,225,151, -/* 0x14e0 */ 73,169,224, 79, 0,249,165, 12, 0, 17,165,124, 2, 83,223,255, -/* 0x14f0 */ 255,151,226, 3, 0,170,225, 71, 64,249,224, 71, 0,249,217,255, -/* 0x1500 */ 255,151,225, 47, 64,249,224, 47, 0,249,214,255,255,151,225, 95, -/* 0x1510 */ 64,249,224, 95, 0,249,211,255,255,151,224,135, 67,169,162, 0, -/* 0x1520 */ 128,210, 72, 28,128, 82, 1, 0, 0,212, 31, 4, 64,177, 67, 0, -/* 0x1530 */ 0, 84, 0, 0, 32,212,254, 95, 64,249,192, 3, 31,214, 99,192, -/* 0x1540 */ 95,184, 99, 92, 0, 18, 66, 0, 3,139,192, 3, 95,214,102,105, -/* 0x1550 */ 108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45, -/* 0x1560 */ 108,105,116,116,108,101, 97, 97,114, 99,104, 54, 52, 10, 10, 83, -/* 0x1570 */ 101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109, -/* 0x1580 */ 101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, -/* 0x1590 */ 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x15a0 */ 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, -/* 0x15b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102, -/* 0x15c0 */ 102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, -/* 0x15d0 */ 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, -/* 0x15e0 */ 32, 48, 48, 48, 48, 48, 48, 49, 48, 32, 32, 48, 48, 48, 48, 48, -/* 0x15f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x1600 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, -/* 0x1610 */ 48, 48, 48, 48, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, -/* 0x1620 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, -/* 0x1630 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, -/* 0x1640 */ 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, -/* 0x1650 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1660 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1670 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53, -/* 0x1680 */ 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, -/* 0x1690 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, -/* 0x16a0 */ 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, -/* 0x16b0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x16c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, -/* 0x16d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, -/* 0x16e0 */ 48, 48, 53, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, -/* 0x16f0 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, -/* 0x1700 */ 32, 51, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x1710 */ 32, 48, 48, 48, 48, 48, 49, 50, 56, 32, 32, 48, 48, 48, 48, 48, -/* 0x1720 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x1730 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, -/* 0x1740 */ 48, 48, 48, 48, 48, 53, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, -/* 0x1750 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, -/* 0x1760 */ 89, 10, 32, 32, 52, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, -/* 0x1770 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 49, 99, 32, 32, 48, 48, -/* 0x1780 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x1790 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x17a0 */ 32, 32, 48, 48, 48, 48, 48, 49, 55, 56, 32, 32, 50, 42, 42, 48, -/* 0x17b0 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, -/* 0x17c0 */ 79, 78, 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 50, 66, 32, 32, -/* 0x17d0 */ 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,102, 48, 32, -/* 0x17e0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x17f0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1800 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, 57, 52, 32, 32, 50, -/* 0x1810 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, -/* 0x1820 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, -/* 0x1830 */ 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, -/* 0x1840 */ 100, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1850 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1860 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 56, 52, -/* 0x1870 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, -/* 0x1880 */ 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, -/* 0x1890 */ 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, -/* 0x18a0 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 54, 56, 32, 32, 48, 48, -/* 0x18b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x18c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x18d0 */ 32, 32, 48, 48, 48, 48, 48, 52, 53, 52, 32, 32, 50, 42, 42, 48, -/* 0x18e0 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, -/* 0x18f0 */ 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, -/* 0x1900 */ 67, 49, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 52, 57, 99, 32, -/* 0x1910 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1920 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1930 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,100, 98, 99, 32, 32, 50, -/* 0x1940 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, -/* 0x1950 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 76, 90, 77, 65, -/* 0x1960 */ 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, -/* 0x1970 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1980 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1990 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 53, 56, -/* 0x19a0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, -/* 0x19b0 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 69, -/* 0x19c0 */ 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 48, 48, -/* 0x19d0 */ 48, 48, 48, 51,101, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x19e0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, -/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, -/* 0x1a00 */ 50, 53, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, -/* 0x1a10 */ 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, -/* 0x1a20 */ 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, -/* 0x1a30 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, -/* 0x1a40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, -/* 0x1a50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, -/* 0x1a60 */ 48, 48, 49, 50, 57, 54, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, -/* 0x1a70 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, -/* 0x1a80 */ 10, 32, 49, 50, 32, 69, 76, 70, 77, 65, 74, 78, 90, 32, 32, 32, -/* 0x1a90 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 50, 52, 32, 32, 48, 48, 48, -/* 0x1aa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, -/* 0x1ab0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1ac0 */ 32, 48, 48, 48, 48, 49, 50, 57, 54, 32, 32, 50, 42, 42, 48, 32, -/* 0x1ad0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, -/* 0x1ae0 */ 78, 76, 89, 10, 32, 49, 51, 32, 65, 78, 68, 77, 65, 74, 78, 90, -/* 0x1af0 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 52, 32, 32, -/* 0x1b00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b10 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b20 */ 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 98, 97, 32, 32, 50, 42, -/* 0x1b30 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, -/* 0x1b40 */ 65, 68, 79, 78, 76, 89, 10, 32, 49, 52, 32, 69, 76, 70, 77, 65, -/* 0x1b50 */ 75, 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 50, 57, -/* 0x1b60 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b70 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1b80 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 98,101, 32, -/* 0x1b90 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, -/* 0x1ba0 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, -/* 0x1bb0 */ 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, -/* 0x1bd0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, 48, -/* 0x1be0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, -/* 0x1bf0 */ 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c00 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, -/* 0x1c10 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, -/* 0x1c20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, -/* 0x1c30 */ 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c40 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, -/* 0x1c50 */ 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c60 */ 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, -/* 0x1c70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c80 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, -/* 0x1c90 */ 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ca0 */ 48, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, -/* 0x1cb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, -/* 0x1cc0 */ 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, -/* 0x1cd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, -/* 0x1ce0 */ 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1cf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, -/* 0x1d00 */ 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1d10 */ 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, -/* 0x1d20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, -/* 0x1d30 */ 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, -/* 0x1d40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, -/* 0x1d50 */ 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1d60 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, -/* 0x1d70 */ 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1d80 */ 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, -/* 0x1d90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, -/* 0x1da0 */ 100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, 48, -/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, -/* 0x1dc0 */ 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, -/* 0x1dd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, -/* 0x1de0 */ 100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, 48, -/* 0x1df0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, -/* 0x1e00 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, -/* 0x1e10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, -/* 0x1e20 */ 100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, -/* 0x1e30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, -/* 0x1e40 */ 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, -/* 0x1e50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, -/* 0x1e60 */ 100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, -/* 0x1e70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, -/* 0x1e80 */ 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1e90 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, -/* 0x1ea0 */ 76, 70, 77, 65, 74, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1eb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 74, 78, -/* 0x1ec0 */ 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ed0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 65, 78, 68, 77, 65, -/* 0x1ee0 */ 74, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ef0 */ 48, 48, 48, 48, 32, 65, 78, 68, 77, 65, 74, 78, 90, 10, 48, 48, -/* 0x1f00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, -/* 0x1f10 */ 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 75, 78, 90, 9, -/* 0x1f20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f30 */ 32, 69, 76, 70, 77, 65, 75, 78, 90, 10, 48, 48, 48, 48, 48, 48, -/* 0x1f40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, -/* 0x1f50 */ 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, -/* 0x1f60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, -/* 0x1f70 */ 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f80 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, -/* 0x1f90 */ 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1fa0 */ 49, 50, 56, 32,117, 99,108, 95,110,114,118, 50,101, 95,100,101, -/* 0x1fb0 */ 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, -/* 0x1fc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, -/* 0x1fd0 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, -/* 0x1fe0 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 99, 32,117, 99,108, 95, -/* 0x1ff0 */ 110,114,118, 50,100, 95,100,101, 99,111,109,112,114,101,115,115, -/* 0x2000 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2010 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, -/* 0x2020 */ 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2030 */ 48,102, 48, 32,117, 99,108, 95,110,114,118, 50, 98, 95,100,101, -/* 0x2040 */ 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, -/* 0x2050 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, -/* 0x2060 */ 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, -/* 0x2070 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2080 */ 32, 76,122,109, 97, 68,101, 99,111,100,101, 10, 48, 48, 48, 48, -/* 0x2090 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, -/* 0x20a0 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, -/* 0x20b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,101, -/* 0x20c0 */ 110,100, 95,100,101, 99,111,109,112,114,101,115,115, 10, 10, 82, -/* 0x20d0 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, -/* 0x20e0 */ 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, -/* 0x20f0 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x2100 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x2110 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, -/* 0x2120 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 99, 32, 82, 95, 65, 65, -/* 0x2130 */ 82, 67, 72, 54, 52, 95, 67, 65, 76, 76, 50, 54, 32, 32, 69, 76, -/* 0x2140 */ 70, 77, 65, 73, 78, 90, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, -/* 0x2150 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, -/* 0x2160 */ 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, -/* 0x2170 */ 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, -/* 0x2180 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x2190 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x21a0 */ 48, 48, 48, 48, 48, 52, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, -/* 0x21b0 */ 95, 67, 79, 78, 68, 66, 82, 49, 57, 32, 32, 76, 90, 77, 65, 95, -/* 0x21c0 */ 68, 69, 67, 51, 48, 10 +/* 0x12c0 */ 0,249,226, 3, 30,170, 65,144, 0,209, 36, 68, 64,184,227, 3, +/* 0x12d0 */ 4, 42,229, 3, 1,170, 36, 68, 64,184,165, 0, 4,203, 36, 68, +/* 0x12e0 */ 64,184,132, 0, 5,139,228, 15, 0,249, 36, 68, 64,184,132, 0, +/* 0x12f0 */ 5,139,228, 27, 0,249, 36, 68, 64,184,128, 0, 5,139, 97, 0, +/* 0x1300 */ 5,139, 36, 4, 64,185, 33, 48, 0,145, 33, 0, 4,139,229, 35, +/* 0x1310 */ 64,185, 36, 68, 64,184, 5, 0, 37, 10,165, 12, 0, 17,165,116, +/* 0x1320 */ 30, 18,132, 0, 5, 11, 0, 64, 37,203,224,147, 4,169, 0, 64, +/* 0x1330 */ 37,139,132, 0, 5, 75, 16, 0, 0,148, 99, 28, 0, 18,127, 72, +/* 0x1340 */ 1,113,129, 1, 0, 84, 33,252, 66,211, 65, 1, 0,180, 33, 4, +/* 0x1350 */ 0,209, 2,120, 97,184, 67,120, 26, 83,127, 20, 0,113,129, 0, +/* 0x1360 */ 0, 84, 67, 0, 1, 75, 98,100, 0, 51, 2,120, 33,184, 1,255, +/* 0x1370 */ 255,181,192, 3, 95,214,165,124, 2, 83,254,151, 5,169, 35, 20, +/* 0x1380 */ 64, 57, 38, 24, 64, 57,224,147, 6,169,230,143, 7,169, 36, 68, +/* 0x1390 */ 64,184,229, 3, 4, 42, 36, 68, 64,184,226,147, 8,169,227,195, +/* 0x13a0 */ 1,145,225,151, 9,169,224,143, 10,169,165, 12, 0,145,227, 99, +/* 0x13b0 */ 64,185, 98, 8, 69,139,227, 71, 64,249, 99, 0, 0,148,227, 47, +/* 0x13c0 */ 64,249, 97, 0, 0,148, 53, 0, 0,148, 5, 0,128,210, 4, 0, +/* 0x13d0 */ 128,146, 67, 6,128,210, 98, 0,128,210,224,135, 68,169,230, 3, +/* 0x13e0 */ 0,170,200, 27,128, 82, 1, 0, 0,212, 31, 0, 6,235, 64, 0, +/* 0x13f0 */ 0, 84, 0, 0, 32,212,229, 99, 64,185,225, 31, 64,249, 29, 0, +/* 0x1400 */ 0,148,228, 71, 64,249,224,135, 73,169,226,143, 74,169,128, 0, +/* 0x1410 */ 63,214, 4, 0, 0,148, 1, 0, 0,212,224, 7,204,168, 96, 0, +/* 0x1420 */ 31,214,228, 27, 64,249,192, 7, 64,169,128, 0, 0,249,129, 8, +/* 0x1430 */ 0,185,228, 47, 64,249,226,143, 71,169,224,135, 70,169, 67, 0, +/* 0x1440 */ 0,180,128, 0, 63,214,224,135, 68,169,162, 0,128,210, 72, 28, +/* 0x1450 */ 128, 82, 1, 0, 0,212,254,147, 66,169,224,135, 67,169,232, 26, +/* 0x1460 */ 128, 82,226, 15, 65,169,128, 0, 31,214, 37,192, 95,184,165, 92, +/* 0x1470 */ 0, 18,133, 0, 0, 54, 35, 68, 64,184,165, 4, 0, 81, 3, 68, +/* 0x1480 */ 0,184,165, 0, 0, 52, 34, 12,193, 40,165, 8, 0, 81, 2, 12, +/* 0x1490 */ 129, 40,165,255,255, 53,192, 3, 95,214,254, 95, 0,249,227, 3, +/* 0x14a0 */ 30,170, 41, 0, 0,148, 65,244,126,211, 5, 0,128,210, 4, 0, +/* 0x14b0 */ 128,146, 67, 4,128,210, 98, 0,128,210,225, 35, 0,249, 0, 0, +/* 0x14c0 */ 128,210,200, 27,128, 82, 1, 0, 0,212, 31, 4, 64,177, 67, 0, +/* 0x14d0 */ 0, 84, 0, 0, 32,212,224, 31, 0,249,225, 39, 64,249,229, 99, +/* 0x14e0 */ 64,185,228,255,255,151,225,151, 73,169,224, 79, 0,249,165, 12, +/* 0x14f0 */ 0, 17,165,124, 2, 83,223,255,255,151,226, 3, 0,170,225, 71, +/* 0x1500 */ 64,249,224, 71, 0,249,217,255,255,151,225, 47, 64,249,224, 47, +/* 0x1510 */ 0,249,214,255,255,151,225, 95, 64,249,224, 95, 0,249,211,255, +/* 0x1520 */ 255,151,224,135, 67,169,162, 0,128,210, 72, 28,128, 82, 1, 0, +/* 0x1530 */ 0,212, 31, 4, 64,177, 67, 0, 0, 84, 0, 0, 32,212,254, 95, +/* 0x1540 */ 64,249,192, 3, 31,214, 99,192, 95,184, 99, 92, 0, 18, 66, 0, +/* 0x1550 */ 3,139,192, 3, 95,214,102,105,108,101, 32,102,111,114,109, 97, +/* 0x1560 */ 116, 32,101,108,102, 54, 52, 45,108,105,116,116,108,101, 97, 97, +/* 0x1570 */ 114, 99,104, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, +/* 0x1580 */ 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, +/* 0x1590 */ 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, +/* 0x15a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x15b0 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x15c0 */ 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, +/* 0x15d0 */ 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, +/* 0x15e0 */ 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, +/* 0x15f0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1600 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1610 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, +/* 0x1620 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, +/* 0x1630 */ 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, +/* 0x1640 */ 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, +/* 0x1650 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1660 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x1670 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1680 */ 32, 48, 48, 48, 48, 48, 48, 53, 48, 32, 32, 50, 42, 42, 48, 32, +/* 0x1690 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, +/* 0x16a0 */ 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 95, 84, 65, 73, 76, +/* 0x16b0 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x16c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x16d0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x16e0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53, 48, 32, 32, 50, 42, +/* 0x16f0 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, +/* 0x1700 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 69, +/* 0x1710 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, +/* 0x1720 */ 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1730 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1740 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 53, 48, 32, +/* 0x1750 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, +/* 0x1760 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, +/* 0x1770 */ 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, +/* 0x1780 */ 48, 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1790 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x17a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, +/* 0x17b0 */ 55, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, +/* 0x17c0 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, +/* 0x17d0 */ 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, +/* 0x17e0 */ 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, +/* 0x17f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, +/* 0x1800 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1810 */ 48, 48, 50, 57, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, +/* 0x1820 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, +/* 0x1830 */ 32, 32, 54, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, +/* 0x1840 */ 32, 32, 48, 48, 48, 48, 48, 48,100, 48, 32, 32, 48, 48, 48, 48, +/* 0x1850 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, +/* 0x1860 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x1870 */ 48, 48, 48, 48, 48, 51, 56, 52, 32, 32, 50, 42, 42, 48, 32, 32, +/* 0x1880 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, +/* 0x1890 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, +/* 0x18a0 */ 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, +/* 0x18b0 */ 48, 57, 54, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x18c0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x18d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, +/* 0x18e0 */ 53, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, +/* 0x18f0 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, +/* 0x1900 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, +/* 0x1910 */ 48, 48, 48, 48, 52, 57, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, +/* 0x1920 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, +/* 0x1930 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1940 */ 48, 48,100, 98, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, +/* 0x1950 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, +/* 0x1960 */ 32, 32, 57, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, +/* 0x1970 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, +/* 0x1980 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, +/* 0x1990 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x19a0 */ 48, 48, 48, 48, 49, 50, 53, 56, 32, 32, 50, 42, 42, 48, 32, 32, +/* 0x19b0 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, +/* 0x19c0 */ 76, 89, 10, 32, 49, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, +/* 0x19d0 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 51,101, 32, 32, 48, +/* 0x19e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x19f0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a00 */ 48, 32, 32, 48, 48, 48, 48, 49, 50, 53, 56, 32, 32, 50, 42, 42, +/* 0x1a10 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, +/* 0x1a20 */ 68, 79, 78, 76, 89, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, +/* 0x1a30 */ 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a40 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a50 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a60 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 57, 54, 32, 32, +/* 0x1a70 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, +/* 0x1a80 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 50, 32, 69, 76, 70, +/* 0x1a90 */ 77, 65, 74, 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, +/* 0x1aa0 */ 48, 50, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ab0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ac0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 57, +/* 0x1ad0 */ 54, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, +/* 0x1ae0 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 51, 32, +/* 0x1af0 */ 65, 78, 68, 77, 65, 74, 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, +/* 0x1b00 */ 48, 48, 48, 48, 48, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1b10 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, +/* 0x1b20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, +/* 0x1b30 */ 49, 50, 98, 97, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, +/* 0x1b40 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, +/* 0x1b50 */ 49, 52, 32, 69, 76, 70, 77, 65, 75, 78, 90, 32, 32, 32, 32, 32, +/* 0x1b60 */ 32, 48, 48, 48, 48, 48, 50, 57, 56, 32, 32, 48, 48, 48, 48, 48, +/* 0x1b70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1b80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x1b90 */ 48, 48, 48, 49, 50, 98,101, 32, 32, 50, 42, 42, 48, 32, 32, 67, +/* 0x1ba0 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, +/* 0x1bb0 */ 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, +/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1bd0 */ 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, +/* 0x1be0 */ 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1bf0 */ 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, +/* 0x1c00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c10 */ 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, +/* 0x1c20 */ 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c30 */ 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, +/* 0x1c40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, +/* 0x1c50 */ 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48, +/* 0x1c60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, +/* 0x1c70 */ 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c80 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, +/* 0x1c90 */ 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48, 48, +/* 0x1ca0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 72, +/* 0x1cb0 */ 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1cc0 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, +/* 0x1cd0 */ 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ce0 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, +/* 0x1cf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d00 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, 48, +/* 0x1d10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1d20 */ 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d30 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, +/* 0x1d40 */ 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d50 */ 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, +/* 0x1d60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, +/* 0x1d70 */ 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, +/* 0x1d80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, +/* 0x1d90 */ 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1da0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, +/* 0x1db0 */ 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1dc0 */ 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, +/* 0x1dd0 */ 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1de0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, +/* 0x1df0 */ 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e00 */ 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, +/* 0x1e10 */ 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e20 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, +/* 0x1e30 */ 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e40 */ 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, +/* 0x1e50 */ 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e60 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, +/* 0x1e70 */ 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e80 */ 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 48, 48, +/* 0x1e90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, +/* 0x1ea0 */ 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 74, 78, 90, 9, +/* 0x1eb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ec0 */ 32, 69, 76, 70, 77, 65, 74, 78, 90, 10, 48, 48, 48, 48, 48, 48, +/* 0x1ed0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, +/* 0x1ee0 */ 100, 32, 32, 65, 78, 68, 77, 65, 74, 78, 90, 9, 48, 48, 48, 48, +/* 0x1ef0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 65, 78, 68, +/* 0x1f00 */ 77, 65, 74, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f10 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, +/* 0x1f20 */ 76, 70, 77, 65, 75, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f30 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 75, 78, +/* 0x1f40 */ 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f50 */ 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, +/* 0x1f60 */ 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f70 */ 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48, +/* 0x1f80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, +/* 0x1f90 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, +/* 0x1fa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108, 95, +/* 0x1fb0 */ 110,114,118, 50,101, 95,100,101, 99,111,109,112,114,101,115,115, +/* 0x1fc0 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1fd0 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, +/* 0x1fe0 */ 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ff0 */ 49, 49, 99, 32,117, 99,108, 95,110,114,118, 50,100, 95,100,101, +/* 0x2000 */ 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, +/* 0x2010 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, +/* 0x2020 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, +/* 0x2030 */ 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 48, 32,117, 99,108, 95, +/* 0x2040 */ 110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,101,115,115, +/* 0x2050 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2060 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, +/* 0x2070 */ 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2080 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101, 99, +/* 0x2090 */ 111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x20a0 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, +/* 0x20b0 */ 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x20c0 */ 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,109, +/* 0x20d0 */ 112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, +/* 0x20e0 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, +/* 0x20f0 */ 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, +/* 0x2100 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, +/* 0x2110 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, +/* 0x2120 */ 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2130 */ 48, 48, 99, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 65, +/* 0x2140 */ 76, 76, 50, 54, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 10, +/* 0x2150 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, +/* 0x2160 */ 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, +/* 0x2170 */ 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, +/* 0x2180 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, +/* 0x2190 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, +/* 0x21a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 32, 82, +/* 0x21b0 */ 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 79, 78, 68, 66, 82, 49, +/* 0x21c0 */ 57, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10 }; diff --git a/src/stub/src/arm.v4a-linux.shlib-init.S b/src/stub/src/arm.v4a-linux.shlib-init.S index bdf9e0f8..c5f45274 100644 --- a/src/stub/src/arm.v4a-linux.shlib-init.S +++ b/src/stub/src/arm.v4a-linux.shlib-init.S @@ -79,10 +79,11 @@ __ARM_NR_cacheflush = 2 + __ARM_NR_BASE #define ecx r5 section ELFMAINX +// .long offset(b_info) src of f_exp // .long offset(.) // detect relocation // .long offset(user DT_INIT) // .long offset(escape_hatch) -// .long offset({p_info; b_info; compressed data}) +// .long offset(xct_off) dst of f_exp _start: .globl _start nop //; bkpt // for debugging @@ -176,15 +177,17 @@ main: // 12. goto user DT_INIT mov edx,lr // &f_decompress + add esi,edx,# _start - f_decompress - 5*4 - add esi,edx,# _start - f_decompress - 4*4 + lodsl; mov tmp,eax // distance back to 1st b_info mov ecx,esi lodsl; sub ecx,ecx,eax; //str ecx,[fp,#o_reloc] + sub tmp,esi,tmp // &b_info lodsl; add eax,ecx,eax; str eax,[fp,#o_uinit] // reloc DT_INIT for step 12 lodsl; add eax,ecx,eax; push eax // reloc &hatch for step 10 o_hatch= -1*4 lodsl; add edi,ecx,eax // &l_info; also destination for decompress - add esi,edi,#sz_l_info + sz_p_info // &b_info + mov esi,tmp // &b_info sub sp,sp,#2*4 // param space: munmap temp pages step 9 p_unmap= -3*4 diff --git a/src/stub/src/arm.v4t-linux.shlib-init.S b/src/stub/src/arm.v4t-linux.shlib-init.S index 5e9b6eef..d325d1b7 100644 --- a/src/stub/src/arm.v4t-linux.shlib-init.S +++ b/src/stub/src/arm.v4t-linux.shlib-init.S @@ -29,13 +29,14 @@ * */ +NBPW= 4 #define ARM_OLDABI 1 #include "arch/arm/v5a/macros.S" #define bkpt .long 0xe7f001f0 /* reserved instr; Linux GNU eabi breakpoint */ #define bkpt_th .short 0xde01 /* reserved instr; Linux GNU eabi breakpoint */ -sz_Elf32_Ehdr = 13*4 -sz_Elf32_Phdr = 8*4 +sz_Elf32_Ehdr = 13*NBPW +sz_Elf32_Phdr = 8*NBPW sz_b_info= 12 sz_unc= 0 @@ -111,36 +112,38 @@ _=-1+_ // one less word on stack #define lodslu bl get4u section ELFMAINX +// .long offset(b_info) src for f_exp //D_INFO: // .long offset(.) // detect relocation // .long offset(user DT_INIT) // .long offset(escape_hatch) // override with round_up(2, PT_LOAD[0]{.p_memsz + .p_vaddr}) -// .long offset({l_info; p_info; b_info; compressed data}) +// .long offset(dst for f_exp) #define DEBUG 0 .code 16 //; .balign 4 .real_start_ofELFMAINX: .thumb_func _start: .globl _start - nop #if DEBUG //{ bkpt_th // for debugging +#else //}{ + nop #endif //} push {r0,r1,r2,r3,r4,r5,r6,r7,lr} _=9 o_uinit= 1 // lr adr esi,here - sub esi,esi,#4*4 + 2*(4+ DEBUG) // D_INFO + sub esi,#(here - _start) + 5*NBPW // -NBPW + &D_INFO here: - mov ecx,esi - ldr eax,[esi,#0*4]; sub ecx,eax; //str ecx,[SP(o_reloc)] + ldr tmp,[esi,#0*NBPW] // offset(b_info) + add ecx,esi,#NBPW // &D_INFO + ldr eax,[esi,#1*NBPW]; sub ecx,eax; //str ecx,[SP(o_reloc)] // reloc DT_INIT for step 12 - ldr tmp,[esi,#1*4]; add tmp,ecx; str tmp,[SP(o_uinit)] - ldr edi,[esi,#3*4]; add edi,ecx // &l_info; also destination for decompress - mov esi,#sz_l_info+sz_p_info - add esi,edi // &b_info + ldr eax,[esi,#2*NBPW]; add eax,ecx; str eax,[SP(o_uinit)] + ldr edi,[esi,#4*NBPW]; add edi,ecx // dst for f_exp + add esi,tmp,ecx // &b_info src for f_exp - sub sp,#3*4 // 3 slots of space + sub sp,#3*NBPW // 3 slots of space _=1+_ // &escape_hatch (step 10) o_hatch=_ // 10 _=2+_ // param space: munmap temp pages (step 9) @@ -290,7 +293,7 @@ L710: mov tmp,lr; sub tmp,#1; push_ tmp // &f_decompress (ARM mode) o_uncpr=_ // 23 - add tmp,SP(p_unflt)+1*4; push_ tmp // &dstlen + add tmp,SP(p_unflt)+1*NBPW; push_ tmp // &dstlen push_ edi // dst push_ ecx // srclen push_ esi // src; arglist ready for decompress step 6 @@ -347,8 +350,8 @@ _=-6+_ // 15 tst arg4,arg4; beq 0f // 0==ftid ==> no filter blx eax // f_unfilter 0: - ldr arg1,[sp,#0*4] // lo(dst) - ldr arg2,[sp,#1*4] // len + ldr arg1,[sp,#0*NBPW] // lo(dst) + ldr arg2,[sp,#1*NBPW] // len add arg2,arg1 // hi(dst) bl x__ARM_NR_cacheflush @@ -439,7 +442,7 @@ o_super=_ // 28 mov arg5,#0; mvn arg5,arg5 // -1; cater to *BSD for fd of MAP_ANON mov arg4,#MAP_PRIVATE|MAP_ANONYMOUS mov arg3,#PROT_READ|PROT_WRITE|PROT_EXEC - str arg2,[SP(p_unmap)+1*4] // length to unmap + str arg2,[SP(p_unmap)+1*NBPW] // length to unmap mov arg1,#0 // any addr thumb_sys7t __NR_mmap64; asr tmp,r0,#12; add tmp,#1; bne 0f; bkpt_th; 0: str r0,[SP(p_unmap)] // address to unmap @@ -449,14 +452,14 @@ o_super=_ // 28 ldr ecx,[SP(o_wfrag)] // w_fragment bl movsl // copy the fragment - ldr esi,[SP(p_uncpr)+0*4] // src - ldr ecx,[SP(p_uncpr)+1*4] // len + ldr esi,[SP(p_uncpr)+0*NBPW] // src + ldr ecx,[SP(p_uncpr)+1*NBPW] // len mov tmp,#3 and tmp,esi // length of prefix alignment sub esi,tmp // down to word aligned add ecx,tmp // prefix increases byte length add tmp,edi // skip prefix at destination - str tmp,[SP(p_uncpr)+0*4] // dst + str tmp,[SP(p_uncpr)+0*NBPW] // dst add ecx,#3 // round up to full words lsr ecx,#2 bl movsl // copy all aligned words that contain compressed data diff --git a/src/stub/src/arm64-linux.shlib-init.S b/src/stub/src/arm64-linux.shlib-init.S index bf34cb97..c7072cc5 100644 --- a/src/stub/src/arm64-linux.shlib-init.S +++ b/src/stub/src/arm64-linux.shlib-init.S @@ -120,10 +120,13 @@ sp_frame = 24 * NBPW .endm section ELFMAINX +// .long offset(b_info) src of f_exp // .long offset(.) // detect relocation // .long offset(user DT_INIT) // .long offset(escape_hatch) -// .long offset({l_info; p_info; b_info; compressed data}) +// .long offset(xct_off) dst of f_exp +_start: .globl _start +// brk #0 // debugging slot f_argc // 0 slot f_argv // 1 @@ -132,8 +135,6 @@ sp_frame = 24 * NBPW slot f_PMASK // 4 PAGE_MASK slot f_my_ra // 5 -_start: .globl _start -// brk #0 // debugging stp arg1,arg2,[sp,#f_argc - sp_frame]! // f_argv stp arg3,x0, [sp,#f_envp] // %f_uinit str lr, [sp,#f_my_ra] @@ -213,22 +214,23 @@ main: // 12. goto user DT_INIT mov rdx,lr // &f_decompress - add rsi,rdx,# _start - f_decompress - 4*4 + add rsi,rdx,# _start - f_decompress - 5*4 #define lodsl ldr eax,[rsi],#4 #define lodslu lodsl + lodsl; mov tmp,eax // offset(b_info) mov rcx,rsi lodsl; sub rcx,rcx,rax; //str ecx,[sp,#o_reloc] - lodsl; add rax,rcx,rax; str rax,[sp,#f_uinit] // reloc DT_INIT for step 12 + lodsl; add rax,rax,rcx; str rax,[sp,#f_uinit] // reloc DT_INIT for step 12 slot o_hatch // 6 - lodsl; add rax,rcx,rax; str rax,[sp,#o_hatch] // reloc &hatch for step 10 - lodsl; add rdi,rcx,rax // &l_info; also destination for decompress - add rsi,rdi,#sz_l_info + sz_p_info // &b_info + lodsl; add rax,rax,rcx; str rax,[sp,#o_hatch] // reloc &hatch for step 10 + lodsl; add rdi,rax,rcx // destination for decompress + add rsi,tmpx,rcx // &b_info src for f_exp slot p_unmap,2 // 7 - ldr eax,[rsi,#sz_cpr]; add rsi,rsi,#sz_b_info // sz_cpr + ldr eax,[rsi,#sz_cpr]; add rsi,rsi,#sz_b_info add rsi,rsi,rax // skip unpack helper block ldr ecx,[sp,#f_PMASK] diff --git a/src/stub/tmp/arm.v5a-linux.shlib-init.bin.dump b/src/stub/tmp/arm.v5a-linux.shlib-init.bin.dump index c04973c4..2025cf02 100644 --- a/src/stub/tmp/arm.v5a-linux.shlib-init.bin.dump +++ b/src/stub/tmp/arm.v5a-linux.shlib-init.bin.dump @@ -13,7 +13,7 @@ Idx Name Size VMA LMA File off Algn Flags 8 LZMA_DEC10 00000478 00000000 00000000 00000d84 2**0 CONTENTS, RELOC, READONLY 9 LZMA_DEC30 00000000 00000000 00000000 000011fc 2**0 CONTENTS, READONLY 10 ELFMAINY 0000003e 00000000 00000000 000011fc 2**0 CONTENTS, READONLY - 11 ELFMAINZ 000002fc 00000000 00000000 0000123a 2**0 CONTENTS, RELOC, READONLY + 11 ELFMAINZ 00000308 00000000 00000000 0000123a 2**0 CONTENTS, RELOC, READONLY SYMBOL TABLE: 00000000 l d NRV2E 00000000 NRV2E 00000000 l d NRV2D 00000000 NRV2D @@ -245,26 +245,26 @@ OFFSET TYPE VALUE RELOCATION RECORDS FOR [ELFMAINZ]: OFFSET TYPE VALUE -00000048 R_ARM_PC24 ELFMAINZ -00000070 R_ARM_PC24 ELFMAINZ -0000009c R_ARM_PC24 ELFMAINZ -000000b8 R_ARM_PC24 ELFMAINZ -000000dc R_ARM_PC24 ELFMAINZ -000000e4 R_ARM_PC24 ELFMAINZ -0000011c R_ARM_PC24 ELFMAINZ -00000124 R_ARM_PC24 ELFMAINZ +00000054 R_ARM_PC24 ELFMAINZ +0000007c R_ARM_PC24 ELFMAINZ +000000a8 R_ARM_PC24 ELFMAINZ +000000c4 R_ARM_PC24 ELFMAINZ +000000e8 R_ARM_PC24 ELFMAINZ +000000f0 R_ARM_PC24 ELFMAINZ 00000128 R_ARM_PC24 ELFMAINZ -00000150 R_ARM_PC24 ELFMAINZ -00000160 R_ARM_PC24 ELFMAINZ -00000170 R_ARM_PC24 ELFMAINZ -00000190 R_ARM_PC24 ELFMAINZ -000001ec R_ARM_PC24 ELFMAINZ -000001f4 R_ARM_PC24 ELFMAINZ -00000208 R_ARM_PC24 ELFMAINZ -0000021c R_ARM_PC24 ELFMAINZ -00000244 R_ARM_PC24 ELFMAINZ -00000258 R_ARM_PC24 ELFMAINZ -00000280 R_ARM_PC24 ELFMAINZ -00000290 R_ARM_PC24 ELFMAINZ +00000130 R_ARM_PC24 ELFMAINZ +00000134 R_ARM_PC24 ELFMAINZ +0000015c R_ARM_PC24 ELFMAINZ +0000016c R_ARM_PC24 ELFMAINZ +0000017c R_ARM_PC24 ELFMAINZ +0000019c R_ARM_PC24 ELFMAINZ +000001f8 R_ARM_PC24 ELFMAINZ +00000200 R_ARM_PC24 ELFMAINZ +00000214 R_ARM_PC24 ELFMAINZ +00000228 R_ARM_PC24 ELFMAINZ +00000250 R_ARM_PC24 ELFMAINZ +00000264 R_ARM_PC24 ELFMAINZ +0000028c R_ARM_PC24 ELFMAINZ 0000029c R_ARM_PC24 ELFMAINZ 000002a8 R_ARM_PC24 ELFMAINZ +000002b4 R_ARM_PC24 ELFMAINZ diff --git a/src/stub/tmp/arm64-linux.shlib-init.bin.dump b/src/stub/tmp/arm64-linux.shlib-init.bin.dump index 5025ffae..3fed5f09 100644 --- a/src/stub/tmp/arm64-linux.shlib-init.bin.dump +++ b/src/stub/tmp/arm64-linux.shlib-init.bin.dump @@ -16,7 +16,7 @@ Idx Name Size VMA LMA File off Algn 11 ELFMAINZ 00000000 0000000000000000 0000000000000000 00001296 2**0 CONTENTS, READONLY 12 ELFMAJNZ 00000024 0000000000000000 0000000000000000 00001296 2**0 CONTENTS, READONLY 13 ANDMAJNZ 00000004 0000000000000000 0000000000000000 000012ba 2**0 CONTENTS, READONLY - 14 ELFMAKNZ 00000290 0000000000000000 0000000000000000 000012be 2**0 CONTENTS, READONLY + 14 ELFMAKNZ 00000298 0000000000000000 0000000000000000 000012be 2**0 CONTENTS, READONLY SYMBOL TABLE: 0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30 0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ